lib/horizon/path_call_builder.js

"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.PathCallBuilder = void 0;
var _call_builder = require("./call_builder");
/**
 * The Stellar Network allows payments to be made across assets through path payments. A path payment specifies a
 * series of assets to route a payment through, from source asset (the asset debited from the payer) to destination
 * asset (the asset credited to the payee).
 *
 * A path search is specified using:
 *
 * * The destination address
 * * The source address
 * * The asset and amount that the destination account should receive
 *
 * As part of the search, horizon will load a list of assets available to the source address and will find any
 * payment paths from those source assets to the desired destination asset. The search's amount parameter will be
 * used to determine if there a given path can satisfy a payment of the desired amount.
 *
 * Do not create this object directly, use {@link Server#paths}.
 * @see [Find Payment Paths](https://developers.stellar.org/api/aggregations/paths/)
 * @extends CallBuilder
 * @param {string} serverUrl Horizon server URL.
 * @param {string} source The sender's account ID. Any returned path must use a source that the sender can hold.
 * @param {string} destination The destination account ID that any returned path should use.
 * @param {Asset} destinationAsset The destination asset.
 * @param {string} destinationAmount The amount, denominated in the destination asset, that any returned path should be able to satisfy.
 */
class PathCallBuilder extends _call_builder.CallBuilder {
  constructor(serverUrl, source, destination, destinationAsset, destinationAmount) {
    super(serverUrl);
    this.url.segment("paths");
    this.url.setQuery("destination_account", destination);
    this.url.setQuery("source_account", source);
    this.url.setQuery("destination_amount", destinationAmount);
    if (!destinationAsset.isNative()) {
      this.url.setQuery("destination_asset_type", destinationAsset.getAssetType());
      this.url.setQuery("destination_asset_code", destinationAsset.getCode());
      this.url.setQuery("destination_asset_issuer", destinationAsset.getIssuer());
    } else {
      this.url.setQuery("destination_asset_type", "native");
    }
  }
}
exports.PathCallBuilder = PathCallBuilder;