From f00d4e9ca90d3ec055625b0e94850336231415e1 Mon Sep 17 00:00:00 2001 From: George Kudrayvtsev Date: Mon, 22 May 2023 13:49:12 -0700 Subject: [PATCH] Move Server to using built-in URL --- src/account_call_builder.ts | 4 +-- src/assets_call_builder.ts | 4 +-- src/call_builder.ts | 3 +- src/claimable_balances_call_builder.ts | 4 +-- src/effect_call_builder.ts | 4 +-- src/friendbot_builder.ts | 2 +- src/ledger_call_builder.ts | 4 +-- src/liquidity_pool_call_builder.ts | 4 +-- src/offer_call_builder.ts | 4 +-- src/operation_call_builder.ts | 4 +-- src/orderbook_call_builder.ts | 4 +-- src/path_call_builder.ts | 4 +-- src/payment_call_builder.ts | 4 +-- src/server.ts | 45 ++++++++++++------------- src/strict_receive_path_call_builder.ts | 4 +-- src/strict_send_path_call_builder.ts | 4 +-- src/trade_aggregation_call_builder.ts | 4 +-- src/trades_call_builder.ts | 2 +- src/transaction_call_builder.ts | 4 +-- test/unit/server_test.js | 2 -- 20 files changed, 55 insertions(+), 59 deletions(-) diff --git a/src/account_call_builder.ts b/src/account_call_builder.ts index 1f1ca5fe9..2c46ee78a 100644 --- a/src/account_call_builder.ts +++ b/src/account_call_builder.ts @@ -10,12 +10,12 @@ import { ServerApi } from "./server_api"; * @class AccountCallBuilder * @extends CallBuilder * @constructor - * @param {string} serverUrl Horizon server URL. + * @param {string|URL} serverUrl Horizon server URL. */ export class AccountCallBuilder extends CallBuilder< ServerApi.CollectionPage > { - constructor(serverUrl: URI) { + constructor(serverUrl: URL | string) { super(serverUrl); this.segment("accounts"); } diff --git a/src/assets_call_builder.ts b/src/assets_call_builder.ts index 9fcf0a0ca..02d412050 100644 --- a/src/assets_call_builder.ts +++ b/src/assets_call_builder.ts @@ -8,12 +8,12 @@ import { ServerApi } from "./server_api"; * @class AssetsCallBuilder * @constructor * @extends CallBuilder - * @param {string} serverUrl Horizon server URL. + * @param {string|URL} serverUrl Horizon server URL. */ export class AssetsCallBuilder extends CallBuilder< ServerApi.CollectionPage > { - constructor(serverUrl: URI) { + constructor(serverUrl: URL | string) { super(serverUrl); this.segment("assets"); } diff --git a/src/call_builder.ts b/src/call_builder.ts index 77821dd3a..7146c2f49 100644 --- a/src/call_builder.ts +++ b/src/call_builder.ts @@ -1,4 +1,3 @@ -import URI from "urijs"; import URITemplate from "urijs/src/URITemplate"; import { BadRequestError, NetworkError, NotFoundError } from "./errors"; @@ -45,7 +44,7 @@ export class CallBuilder< public filter: string[][]; - constructor(serverUrl: URL | URI, neighborRoot: string = "") { + constructor(serverUrl: URL | string, neighborRoot: string = "") { this.url = new URL(serverUrl.toString()); this.filter = []; diff --git a/src/claimable_balances_call_builder.ts b/src/claimable_balances_call_builder.ts index 10301d9cc..2d0d180e3 100644 --- a/src/claimable_balances_call_builder.ts +++ b/src/claimable_balances_call_builder.ts @@ -10,12 +10,12 @@ import { ServerApi } from "./server_api"; * @class ClaimableBalanceCallBuilder * @constructor * @extends CallBuilder - * @param {string} serverUrl Horizon server URL. + * @param {URL|string} serverUrl Horizon server URL. */ export class ClaimableBalanceCallBuilder extends CallBuilder< ServerApi.CollectionPage > { - constructor(serverUrl: URI) { + constructor(serverUrl: URL|string) { super(serverUrl); this.segment("claimable_balances"); } diff --git a/src/effect_call_builder.ts b/src/effect_call_builder.ts index e8a0dac3a..fcb3afd55 100644 --- a/src/effect_call_builder.ts +++ b/src/effect_call_builder.ts @@ -9,12 +9,12 @@ import { ServerApi } from "./server_api"; * @extends CallBuilder * @see [All Effects](https://developers.stellar.org/api/resources/effects/) * @constructor - * @param {string} serverUrl Horizon server URL. + * @param {string|URL} serverUrl Horizon server URL. */ export class EffectCallBuilder extends CallBuilder< ServerApi.CollectionPage > { - constructor(serverUrl: URI) { + constructor(serverUrl: URL | string) { super(serverUrl, "effects"); this.segment("effects"); } diff --git a/src/friendbot_builder.ts b/src/friendbot_builder.ts index 2809a7020..e28f9069c 100644 --- a/src/friendbot_builder.ts +++ b/src/friendbot_builder.ts @@ -1,7 +1,7 @@ import { CallBuilder } from "./call_builder"; export class FriendbotBuilder extends CallBuilder { - constructor(serverUrl: URI, address: string) { + constructor(serverUrl: URL | string, address: string) { super(serverUrl); this.segment("friendbot"); this.url.searchParams.set("addr", address); diff --git a/src/ledger_call_builder.ts b/src/ledger_call_builder.ts index 95087fb56..5dd523521 100644 --- a/src/ledger_call_builder.ts +++ b/src/ledger_call_builder.ts @@ -9,12 +9,12 @@ import { ServerApi } from "./server_api"; * @constructor * @class LedgerCallBuilder * @extends CallBuilder - * @param {string} serverUrl Horizon server URL. + * @param {string|URL} serverUrl Horizon server URL. */ export class LedgerCallBuilder extends CallBuilder< ServerApi.CollectionPage > { - constructor(serverUrl: URI) { + constructor(serverUrl: URL | string) { super(serverUrl); this.segment("ledgers"); } diff --git a/src/liquidity_pool_call_builder.ts b/src/liquidity_pool_call_builder.ts index 454332c93..e85a6f51e 100644 --- a/src/liquidity_pool_call_builder.ts +++ b/src/liquidity_pool_call_builder.ts @@ -10,12 +10,12 @@ import { ServerApi } from "./server_api"; * @class LiquidityPoolCallBuilder * @extends CallBuilder * @constructor - * @param {string} serverUrl Horizon server URL. + * @param {string|URL} serverUrl Horizon server URL. */ export class LiquidityPoolCallBuilder extends CallBuilder< ServerApi.CollectionPage > { - constructor(serverUrl: URI) { + constructor(serverUrl: URL | string) { super(serverUrl); this.segment("liquidity_pools"); } diff --git a/src/offer_call_builder.ts b/src/offer_call_builder.ts index c1798fed6..029e3c9c0 100644 --- a/src/offer_call_builder.ts +++ b/src/offer_call_builder.ts @@ -10,12 +10,12 @@ import { ServerApi } from "./server_api"; * @class OfferCallBuilder * @constructor * @extends CallBuilder - * @param {string} serverUrl Horizon server URL. + * @param {string|URL} serverUrl Horizon server URL. */ export class OfferCallBuilder extends CallBuilder< ServerApi.CollectionPage > { - constructor(serverUrl: URI) { + constructor(serverUrl: URL | string) { super(serverUrl, "offers"); this.segment("offers"); } diff --git a/src/operation_call_builder.ts b/src/operation_call_builder.ts index f0bcea222..1be5c3232 100644 --- a/src/operation_call_builder.ts +++ b/src/operation_call_builder.ts @@ -9,12 +9,12 @@ import { ServerApi } from "./server_api"; * @class OperationCallBuilder * @constructor * @extends CallBuilder - * @param {string} serverUrl Horizon server URL. + * @param {string|URL} serverUrl Horizon server URL. */ export class OperationCallBuilder extends CallBuilder< ServerApi.CollectionPage > { - constructor(serverUrl: URI) { + constructor(serverUrl: URL | string) { super(serverUrl, "operations"); this.segment("operations"); } diff --git a/src/orderbook_call_builder.ts b/src/orderbook_call_builder.ts index fa6c5ed53..332cf9dcf 100644 --- a/src/orderbook_call_builder.ts +++ b/src/orderbook_call_builder.ts @@ -7,12 +7,12 @@ import { ServerApi } from "./server_api"; * * Do not create this object directly, use {@link Server#orderbook}. * @see [Orderbook Details](https://developers.stellar.org/api/aggregations/order-books/) - * @param {string} serverUrl serverUrl Horizon server URL. + * @param {string|URL} serverUrl serverUrl Horizon server URL. * @param {Asset} selling Asset being sold * @param {Asset} buying Asset being bought */ export class OrderbookCallBuilder extends CallBuilder { - constructor(serverUrl: URI, selling: Asset, buying: Asset) { + constructor(serverUrl: URL | string, selling: Asset, buying: Asset) { super(serverUrl); this.segment("order_book"); if (!selling.isNative()) { diff --git a/src/path_call_builder.ts b/src/path_call_builder.ts index 2e7722b13..23d713d9f 100644 --- a/src/path_call_builder.ts +++ b/src/path_call_builder.ts @@ -20,7 +20,7 @@ import { ServerApi } from "./server_api"; * 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|URL} 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. @@ -30,7 +30,7 @@ export class PathCallBuilder extends CallBuilder< ServerApi.CollectionPage > { constructor( - serverUrl: URI, + serverUrl: URL | string, source: string, destination: string, destinationAsset: Asset, diff --git a/src/payment_call_builder.ts b/src/payment_call_builder.ts index 3f42e19c4..e8adf2b07 100644 --- a/src/payment_call_builder.ts +++ b/src/payment_call_builder.ts @@ -8,12 +8,12 @@ import { ServerApi } from "./server_api"; * @see [All Payments](https://developers.stellar.org/api/resources/payments/) * @constructor * @extends CallBuilder - * @param {string} serverUrl Horizon server URL. + * @param {string|URL} serverUrl Horizon server URL. */ export class PaymentCallBuilder extends CallBuilder< ServerApi.CollectionPage > { - constructor(serverUrl: URI) { + constructor(serverUrl: URL | string) { super(serverUrl, "payments"); this.segment("payments"); } diff --git a/src/server.ts b/src/server.ts index 27b7261af..7f96755cd 100644 --- a/src/server.ts +++ b/src/server.ts @@ -8,7 +8,6 @@ import { Transaction, xdr, } from "stellar-base"; -import URI from "urijs"; import { CallBuilder } from "./call_builder"; import { Config } from "./config"; @@ -69,10 +68,10 @@ export class Server { /** * Horizon Server URL (ex. `https://horizon-testnet.stellar.org`). */ - public readonly serverURL: URI; + public readonly serverURL: URL; constructor(serverURL: string | URL, opts: Server.Options = {}) { - this.serverURL = URI(serverURL.toString()); + this.serverURL = new URL(serverURL.toString()); const allowHttp = opts.allowHttp ?? Config.isAllowHttp(); const customHeaders: Record = {}; @@ -96,7 +95,7 @@ export class Server { }); } - if (this.serverURL.protocol() !== "https" && !allowHttp) { + if (this.serverURL.protocol !== "https:" && !allowHttp) { throw new Error("Cannot connect to insecure horizon server"); } } @@ -136,7 +135,7 @@ export class Server { _isRetry: boolean = false, ): Promise { // HorizonAxiosClient instead of this.ledgers so we can get at them headers - const currentTime = getCurrentServerTime(this.serverURL.hostname()); + const currentTime = getCurrentServerTime(this.serverURL.hostname); if (currentTime) { return { @@ -155,7 +154,7 @@ export class Server { // otherwise, retry (by calling the root endpoint) // toString automatically adds the trailing slash - await HorizonAxiosClient.get(URI(this.serverURL as any).toString()); + await HorizonAxiosClient.get(this.serverURL.toString()); return await this.fetchTimebounds(seconds, true); } @@ -178,7 +177,7 @@ export class Server { */ public async feeStats(): Promise { const cb = new CallBuilder( - URI(this.serverURL as any), + this.serverURL, ); cb.filter.push(["fee_stats"]); return cb.call(); @@ -506,28 +505,28 @@ export class Server { * @returns {AccountCallBuilder} New {@link AccountCallBuilder} object configured by a current Horizon server configuration. */ public accounts(): AccountCallBuilder { - return new AccountCallBuilder(URI(this.serverURL as any)); + return new AccountCallBuilder(this.serverURL); } /** * @returns {ClaimableBalanceCallBuilder} New {@link ClaimableBalanceCallBuilder} object configured by a current Horizon server configuration. */ public claimableBalances(): ClaimableBalanceCallBuilder { - return new ClaimableBalanceCallBuilder(URI(this.serverURL as any)); + return new ClaimableBalanceCallBuilder(this.serverURL); } /** * @returns {LedgerCallBuilder} New {@link LedgerCallBuilder} object configured by a current Horizon server configuration. */ public ledgers(): LedgerCallBuilder { - return new LedgerCallBuilder(URI(this.serverURL as any)); + return new LedgerCallBuilder(this.serverURL); } /** * @returns {TransactionCallBuilder} New {@link TransactionCallBuilder} object configured by a current Horizon server configuration. */ public transactions(): TransactionCallBuilder { - return new TransactionCallBuilder(URI(this.serverURL as any)); + return new TransactionCallBuilder(this.serverURL); } /** @@ -545,7 +544,7 @@ export class Server { * @returns {OfferCallBuilder} New {@link OfferCallBuilder} object */ public offers(): OfferCallBuilder { - return new OfferCallBuilder(URI(this.serverURL as any)); + return new OfferCallBuilder(this.serverURL); } /** @@ -555,7 +554,7 @@ export class Server { */ public orderbook(selling: Asset, buying: Asset): OrderbookCallBuilder { return new OrderbookCallBuilder( - URI(this.serverURL as any), + this.serverURL, selling, buying, ); @@ -566,14 +565,14 @@ export class Server { * @returns {TradesCallBuilder} New {@link TradesCallBuilder} object configured by a current Horizon server configuration. */ public trades(): TradesCallBuilder { - return new TradesCallBuilder(URI(this.serverURL as any)); + return new TradesCallBuilder(this.serverURL); } /** * @returns {OperationCallBuilder} New {@link OperationCallBuilder} object configured by a current Horizon server configuration. */ public operations(): OperationCallBuilder { - return new OperationCallBuilder(URI(this.serverURL as any)); + return new OperationCallBuilder(this.serverURL); } /** @@ -581,7 +580,7 @@ export class Server { * object configured to the current Horizon server settings. */ public liquidityPools(): LiquidityPoolCallBuilder { - return new LiquidityPoolCallBuilder(URI(this.serverURL)); + return new LiquidityPoolCallBuilder(this.serverURL); } /** @@ -616,7 +615,7 @@ export class Server { destinationAmount: string, ): PathCallBuilder { return new StrictReceivePathCallBuilder( - URI(this.serverURL as any), + this.serverURL, source, destinationAsset, destinationAmount, @@ -644,7 +643,7 @@ export class Server { destination: string | Asset[], ): PathCallBuilder { return new StrictSendPathCallBuilder( - URI(this.serverURL as any), + this.serverURL, sourceAsset, sourceAmount, destination, @@ -656,7 +655,7 @@ export class Server { * Horizon server configuration. */ public payments(): PaymentCallBuilder { - return new PaymentCallBuilder(URI(this.serverURL as any) as any); + return new PaymentCallBuilder(this.serverURL as any); } /** @@ -664,7 +663,7 @@ export class Server { * Horizon server configuration */ public effects(): EffectCallBuilder { - return new EffectCallBuilder(URI(this.serverURL as any) as any); + return new EffectCallBuilder(this.serverURL as any); } /** @@ -674,7 +673,7 @@ export class Server { * @private */ public friendbot(address: string): FriendbotBuilder { - return new FriendbotBuilder(URI(this.serverURL as any), address); + return new FriendbotBuilder(this.serverURL, address); } /** @@ -683,7 +682,7 @@ export class Server { * @returns {AssetsCallBuilder} New AssetsCallBuilder instance */ public assets(): AssetsCallBuilder { - return new AssetsCallBuilder(URI(this.serverURL as any)); + return new AssetsCallBuilder(this.serverURL); } /** @@ -723,7 +722,7 @@ export class Server { offset: number, ): TradeAggregationCallBuilder { return new TradeAggregationCallBuilder( - URI(this.serverURL as any), + this.serverURL, base, counter, start_time, diff --git a/src/strict_receive_path_call_builder.ts b/src/strict_receive_path_call_builder.ts index 9b97c6033..fad4d0c6d 100644 --- a/src/strict_receive_path_call_builder.ts +++ b/src/strict_receive_path_call_builder.ts @@ -24,7 +24,7 @@ import { ServerApi } from "./server_api"; * Do not create this object directly, use {@link Server#strictReceivePaths}. * @see [Find Payment Paths](https://developers.stellar.org/api/aggregations/paths/) * @extends CallBuilder - * @param {string} serverUrl Horizon server URL. + * @param {string|URL} serverUrl Horizon server URL. * @param {string|Asset[]} source The sender's account ID or a list of Assets. Any returned path must use a source that the sender can hold. * @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. @@ -33,7 +33,7 @@ export class StrictReceivePathCallBuilder extends CallBuilder< ServerApi.CollectionPage > { constructor( - serverUrl: URI, + serverUrl: URL | string, source: string | Asset[], destinationAsset: Asset, destinationAmount: string diff --git a/src/strict_send_path_call_builder.ts b/src/strict_send_path_call_builder.ts index bfeab02ff..6fe6b0402 100644 --- a/src/strict_send_path_call_builder.ts +++ b/src/strict_send_path_call_builder.ts @@ -23,7 +23,7 @@ import { ServerApi } from "./server_api"; * Do not create this object directly, use {@link Server#strictSendPaths}. * @see [Find Payment Paths](https://developers.stellar.org/api/aggregations/paths/) * @extends CallBuilder - * @param {string} serverUrl Horizon server URL. + * @param {string|URL} serverUrl Horizon server URL. * @param {Asset} sourceAsset The asset to be sent. * @param {string} sourceAmount The amount, denominated in the source asset, that any returned path should be able to satisfy. * @param {string|Asset[]} destination The destination account or the destination assets. @@ -33,7 +33,7 @@ export class StrictSendPathCallBuilder extends CallBuilder< ServerApi.CollectionPage > { constructor( - serverUrl: URI, + serverUrl: URL | string, sourceAsset: Asset, sourceAmount: string, destination: string | Asset[] diff --git a/src/trade_aggregation_call_builder.ts b/src/trade_aggregation_call_builder.ts index 5e506b479..e99bb7ad3 100644 --- a/src/trade_aggregation_call_builder.ts +++ b/src/trade_aggregation_call_builder.ts @@ -21,7 +21,7 @@ const allowedResolutions = [ * @class TradeAggregationCallBuilder * @extends CallBuilder * @constructor - * @param {string} serverUrl serverUrl Horizon server URL. + * @param {string|URL} 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 @@ -33,7 +33,7 @@ export class TradeAggregationCallBuilder extends CallBuilder< ServerApi.CollectionPage > { constructor( - serverUrl: URI, + serverUrl: URL | string, base: Asset, counter: Asset, start_time: number, diff --git a/src/trades_call_builder.ts b/src/trades_call_builder.ts index ff485aab4..0ae878fa1 100644 --- a/src/trades_call_builder.ts +++ b/src/trades_call_builder.ts @@ -15,7 +15,7 @@ import { ServerApi } from "./server_api"; export class TradesCallBuilder extends CallBuilder< ServerApi.CollectionPage > { - constructor(serverUrl: URI) { + constructor(serverUrl: URL | string) { super(serverUrl, "trades"); this.segment("trades"); } diff --git a/src/transaction_call_builder.ts b/src/transaction_call_builder.ts index 84342c994..14b864ed4 100644 --- a/src/transaction_call_builder.ts +++ b/src/transaction_call_builder.ts @@ -9,12 +9,12 @@ import { ServerApi } from "./server_api"; * @extends CallBuilder * @see [All Transactions](https://developers.stellar.org/api/resources/transactions/) * @constructor - * @param {string} serverUrl Horizon server URL. + * @param {string|URL} serverUrl Horizon server URL. */ export class TransactionCallBuilder extends CallBuilder< ServerApi.CollectionPage > { - constructor(serverUrl: URI) { + constructor(serverUrl: URL | string) { super(serverUrl, "transactions"); this.segment("transactions"); } diff --git a/test/unit/server_test.js b/test/unit/server_test.js index 7756d579d..8f021c26f 100644 --- a/test/unit/server_test.js +++ b/test/unit/server_test.js @@ -477,8 +477,6 @@ describe("server.js non-transaction tests", function () { .order("asc") .call() .then(function (page) { - console.log("page:", page) - page.next().then(function (response) { expect(response.records).to.be.deep.equal( ledgersResponse._embedded.records