all files / src/ trade_aggregation_call_builder.js

97.65% Statements 83/85
92.86% Branches 39/42
100% Functions 9/9
92.86% Lines 26/28
17 statements, 15 branches Ignored     
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68                                                                                     
import { CallBuilder } from "./call_builder";
import { NotFoundError, NetworkError, BadRequestError } from "./errors";
 
const allowedResolutions = [300000, 900000, 3600000, 86400000, 604800000];
 
/**
 * Trade Aggregations facilitate efficient gathering of historical trade data
 * Do not create this object directly, use {@link Server#tradeAggregation}.
 * @param {string} serverUrl serverUrl Horizon server URL.
 * @param {Asset} base base asset
 * @param {Asset} counter counter asset
 * @param {long} start_time lower time boundary represented as millis since epoch
 * @param {long} end_time upper time boundary represented as millis since epoch
 * @param {long} resolution segment duration as millis since epoch. *Supported values are 5 minutes (300000), 15 minutes (900000), 1 hour (3600000), 1 day (86400000) and 1 week (604800000).
 * @returns {OrderbookCallBuilder}
 */
export class TradeAggregationCallBuilder extends CallBuilder {
  constructor (serverUrl, base, counter, start_time, end_time, resolution){
    super(serverUrl);
    
    this.url.segment('trade_aggregations');
    if (!base.isNative()) {
        this.url.addQuery("base_asset_type", base.getAssetType());
        this.url.addQuery("base_asset_code", base.getCode());
        this.url.addQuery("base_asset_issuer", base.getIssuer());
    } else {
        this.url.addQuery("base_asset_type", 'native');
    }
    if (!counter.isNative()) {
        this.url.addQuery("counter_asset_type", counter.getAssetType());
        this.url.addQuery("counter_asset_code", counter.getCode());
        this.url.addQuery("counter_asset_issuer", counter.getIssuer());
    } else {
        this.url.addQuery("counter_asset_type", 'native');
    }
    Iif ((typeof start_time === 'undefined') || (typeof end_time === 'undefined')) {
        throw new BadRequestError("Invalid time bounds", [start_time, end_time]);
    }else{
        this.url.addQuery("start_time", start_time);
        this.url.addQuery("end_time", end_time);
    }
    Iif (!this.isValidResolution(resolution)) {
        throw new BadRequestError("Invalid resolution", resolution);
    }else{
        this.url.addQuery("resolution", resolution);
    }
 
 
  }
 
  /**
   * @private
   * @param {long} resolution 
   */
  isValidResolution(resolution){
    let found = false;
 
    for (let i = 0; i < allowedResolutions.length; i++) {
        Eif (allowedResolutions[i] == resolution) {
            found = true;
            break;
        }       
    }
    return found;
  }
 
    
}