@medialane/sdk 0.27.0 → 0.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -61,6 +61,11 @@ var COLLECTION_1155_CONTRACT_MAINNET = "0x067064adcaaed61e17bf50ea802ea648233612
61
61
  var COLLECTION_1155_FACTORY_CLASS_HASH_MAINNET = "0x188321a7c9ca972cc63e352e3b3a4cdf33781852d957f4b4b62249310fe4c75";
62
62
  var COLLECTION_1155_CLASS_HASH_MAINNET = "0x281e13803c906f20bbe158efb44b7a0273c56fdebbeeb55b2ba59530ddb1c80";
63
63
  var COLLECTION_1155_START_BLOCK_MAINNET = 10045611;
64
+ var CREATOR_COIN_FACTORY_CONTRACT_MAINNET = "0x50fa807b5274079fb19374673d7bab6d2dc3af7e1032ea43eb6e44bcbde4c3c";
65
+ var CREATOR_COIN_EKUBO_LAUNCHER_MAINNET = "0x4f7fceb5ac10f12f9544a09580592e5bdf1b7f04f48765eecf12286d8ccb7b4";
66
+ var CREATOR_COIN_CLASS_HASH_MAINNET = "0x743e4c8a5b96bb83bbf4af04edbbb482d5ece89eed9b729a79fb7df0cd0b6b6";
67
+ var CREATOR_COIN_FACTORY_CLASS_HASH_MAINNET = "0x51765926b1344c9a20b8cd4b5abe7b7d47375ae97cf6804db3ea5d4b05a9b55";
68
+ var CREATOR_COIN_START_BLOCK_MAINNET = 10474544;
64
69
  var FeeConfigSchema = zod.z.object({
65
70
  enabled: zod.z.boolean().default(true),
66
71
  fundAddress: zod.z.string().min(1).optional(),
@@ -4629,6 +4634,9 @@ var IPNftABI = [
4629
4634
  }
4630
4635
  ];
4631
4636
 
4637
+ // src/abis/creatorCoinFactory.ts
4638
+ var CreatorCoinFactoryABI = [{ "type": "impl", "name": "FactoryImpl", "interface_name": "creator_coin::factory::interface::IFactory" }, { "type": "struct", "name": "core::integer::u256", "members": [{ "name": "low", "type": "core::integer::u128" }, { "name": "high", "type": "core::integer::u128" }] }, { "type": "struct", "name": "core::array::Span::<core::starknet::contract_address::ContractAddress>", "members": [{ "name": "snapshot", "type": "@core::array::Array::<core::starknet::contract_address::ContractAddress>" }] }, { "type": "struct", "name": "core::array::Span::<core::integer::u256>", "members": [{ "name": "snapshot", "type": "@core::array::Array::<core::integer::u256>" }] }, { "type": "struct", "name": "creator_coin::factory::LaunchParameters", "members": [{ "name": "creator_coin_address", "type": "core::starknet::contract_address::ContractAddress" }, { "name": "transfer_restriction_delay", "type": "core::integer::u64" }, { "name": "max_percentage_buy_launch", "type": "core::integer::u16" }, { "name": "quote_address", "type": "core::starknet::contract_address::ContractAddress" }, { "name": "initial_holders", "type": "core::array::Span::<core::starknet::contract_address::ContractAddress>" }, { "name": "initial_holders_amounts", "type": "core::array::Span::<core::integer::u256>" }] }, { "type": "enum", "name": "core::bool", "variants": [{ "name": "False", "type": "()" }, { "name": "True", "type": "()" }] }, { "type": "struct", "name": "ekubo::types::i129::i129", "members": [{ "name": "mag", "type": "core::integer::u128" }, { "name": "sign", "type": "core::bool" }] }, { "type": "struct", "name": "creator_coin::exchanges::ekubo::ekubo_adapter::EkuboPoolParameters", "members": [{ "name": "fee", "type": "core::integer::u128" }, { "name": "tick_spacing", "type": "core::integer::u128" }, { "name": "starting_price", "type": "ekubo::types::i129::i129" }, { "name": "bound", "type": "core::integer::u128" }] }, { "type": "struct", "name": "ekubo::types::keys::PoolKey", "members": [{ "name": "token0", "type": "core::starknet::contract_address::ContractAddress" }, { "name": "token1", "type": "core::starknet::contract_address::ContractAddress" }, { "name": "fee", "type": "core::integer::u128" }, { "name": "tick_spacing", "type": "core::integer::u128" }, { "name": "extension", "type": "core::starknet::contract_address::ContractAddress" }] }, { "type": "struct", "name": "ekubo::types::bounds::Bounds", "members": [{ "name": "lower", "type": "ekubo::types::i129::i129" }, { "name": "upper", "type": "ekubo::types::i129::i129" }] }, { "type": "struct", "name": "creator_coin::exchanges::ekubo::launcher::EkuboLP", "members": [{ "name": "owner", "type": "core::starknet::contract_address::ContractAddress" }, { "name": "quote_address", "type": "core::starknet::contract_address::ContractAddress" }, { "name": "pool_key", "type": "ekubo::types::keys::PoolKey" }, { "name": "bounds", "type": "ekubo::types::bounds::Bounds" }] }, { "type": "enum", "name": "creator_coin::exchanges::SupportedExchanges", "variants": [{ "name": "Jediswap", "type": "()" }, { "name": "Ekubo", "type": "()" }, { "name": "Starkdefi", "type": "()" }] }, { "type": "enum", "name": "creator_coin::token::creator_coin::LiquidityType", "variants": [{ "name": "JediERC20", "type": "core::starknet::contract_address::ContractAddress" }, { "name": "StarkDeFiERC20", "type": "core::starknet::contract_address::ContractAddress" }, { "name": "EkuboNFT", "type": "core::integer::u64" }] }, { "type": "enum", "name": "core::option::Option::<(core::starknet::contract_address::ContractAddress, creator_coin::token::creator_coin::LiquidityType)>", "variants": [{ "name": "Some", "type": "(core::starknet::contract_address::ContractAddress, creator_coin::token::creator_coin::LiquidityType)" }, { "name": "None", "type": "()" }] }, { "type": "interface", "name": "creator_coin::factory::interface::IFactory", "items": [{ "type": "function", "name": "create_creator_coin", "inputs": [{ "name": "owner", "type": "core::starknet::contract_address::ContractAddress" }, { "name": "name", "type": "core::felt252" }, { "name": "symbol", "type": "core::felt252" }, { "name": "initial_supply", "type": "core::integer::u256" }, { "name": "contract_address_salt", "type": "core::felt252" }], "outputs": [{ "type": "core::starknet::contract_address::ContractAddress" }], "state_mutability": "external" }, { "type": "function", "name": "launch_on_jediswap", "inputs": [{ "name": "launch_parameters", "type": "creator_coin::factory::LaunchParameters" }, { "name": "quote_amount", "type": "core::integer::u256" }, { "name": "unlock_time", "type": "core::integer::u64" }], "outputs": [{ "type": "core::starknet::contract_address::ContractAddress" }], "state_mutability": "external" }, { "type": "function", "name": "launch_on_ekubo", "inputs": [{ "name": "launch_parameters", "type": "creator_coin::factory::LaunchParameters" }, { "name": "ekubo_parameters", "type": "creator_coin::exchanges::ekubo::ekubo_adapter::EkuboPoolParameters" }], "outputs": [{ "type": "(core::integer::u64, creator_coin::exchanges::ekubo::launcher::EkuboLP)" }], "state_mutability": "external" }, { "type": "function", "name": "launch_on_starkdefi", "inputs": [{ "name": "launch_parameters", "type": "creator_coin::factory::LaunchParameters" }, { "name": "quote_amount", "type": "core::integer::u256" }, { "name": "unlock_time", "type": "core::integer::u64" }], "outputs": [{ "type": "core::starknet::contract_address::ContractAddress" }], "state_mutability": "external" }, { "type": "function", "name": "exchange_address", "inputs": [{ "name": "exchange", "type": "creator_coin::exchanges::SupportedExchanges" }], "outputs": [{ "type": "core::starknet::contract_address::ContractAddress" }], "state_mutability": "view" }, { "type": "function", "name": "lock_manager_address", "inputs": [], "outputs": [{ "type": "core::starknet::contract_address::ContractAddress" }], "state_mutability": "view" }, { "type": "function", "name": "locked_liquidity", "inputs": [{ "name": "token", "type": "core::starknet::contract_address::ContractAddress" }], "outputs": [{ "type": "core::option::Option::<(core::starknet::contract_address::ContractAddress, creator_coin::token::creator_coin::LiquidityType)>" }], "state_mutability": "view" }, { "type": "function", "name": "is_creator_coin", "inputs": [{ "name": "address", "type": "core::starknet::contract_address::ContractAddress" }], "outputs": [{ "type": "core::bool" }], "state_mutability": "view" }, { "type": "function", "name": "ekubo_core_address", "inputs": [], "outputs": [{ "type": "core::starknet::contract_address::ContractAddress" }], "state_mutability": "view" }] }, { "type": "struct", "name": "core::array::Span::<(creator_coin::exchanges::SupportedExchanges, core::starknet::contract_address::ContractAddress)>", "members": [{ "name": "snapshot", "type": "@core::array::Array::<(creator_coin::exchanges::SupportedExchanges, core::starknet::contract_address::ContractAddress)>" }] }, { "type": "struct", "name": "core::array::Span::<(core::starknet::contract_address::ContractAddress, core::starknet::contract_address::ContractAddress)>", "members": [{ "name": "snapshot", "type": "@core::array::Array::<(core::starknet::contract_address::ContractAddress, core::starknet::contract_address::ContractAddress)>" }] }, { "type": "constructor", "name": "constructor", "inputs": [{ "name": "creator_coin_class_hash", "type": "core::starknet::class_hash::ClassHash" }, { "name": "lock_manager_address", "type": "core::starknet::contract_address::ContractAddress" }, { "name": "exchanges", "type": "core::array::Span::<(creator_coin::exchanges::SupportedExchanges, core::starknet::contract_address::ContractAddress)>" }, { "name": "migrated_tokens", "type": "core::array::Span::<(core::starknet::contract_address::ContractAddress, core::starknet::contract_address::ContractAddress)>" }] }, { "type": "event", "name": "creator_coin::factory::factory::Factory::CreatorCoinCreated", "kind": "struct", "members": [{ "name": "owner", "type": "core::starknet::contract_address::ContractAddress", "kind": "data" }, { "name": "name", "type": "core::felt252", "kind": "data" }, { "name": "symbol", "type": "core::felt252", "kind": "data" }, { "name": "initial_supply", "type": "core::integer::u256", "kind": "data" }, { "name": "creator_coin_address", "type": "core::starknet::contract_address::ContractAddress", "kind": "data" }] }, { "type": "event", "name": "creator_coin::factory::factory::Factory::CreatorCoinLaunched", "kind": "struct", "members": [{ "name": "creator_coin_address", "type": "core::starknet::contract_address::ContractAddress", "kind": "data" }, { "name": "quote_token", "type": "core::starknet::contract_address::ContractAddress", "kind": "data" }, { "name": "exchange_name", "type": "core::felt252", "kind": "data" }] }, { "type": "event", "name": "creator_coin::factory::factory::Factory::Event", "kind": "enum", "variants": [{ "name": "CreatorCoinCreated", "type": "creator_coin::factory::factory::Factory::CreatorCoinCreated", "kind": "nested" }, { "name": "CreatorCoinLaunched", "type": "creator_coin::factory::factory::Factory::CreatorCoinLaunched", "kind": "nested" }] }];
4639
+
4632
4640
  // src/utils/bigint.ts
4633
4641
  function stringifyBigInts(obj) {
4634
4642
  if (typeof obj === "bigint") {
@@ -4686,6 +4694,63 @@ var MedialaneError = class extends Error {
4686
4694
  this.name = "MedialaneError";
4687
4695
  }
4688
4696
  };
4697
+
4698
+ // src/utils/rpc.ts
4699
+ var PUBLIC_RPC_FALLBACKS = [
4700
+ "https://rpc.starknet.lava.build",
4701
+ "https://starknet-mainnet.public.blastapi.io/rpc/v0_7",
4702
+ "https://free-rpc.nethermind.io/mainnet-juno/v0_7"
4703
+ ];
4704
+ var TRANSIENT_BODY_RE = /"code"\s*:\s*-32001|"code"\s*:\s*-32603|unable to complete|rate.?limit|too many|throttl|exceed.*quota|temporarily unavailable|service unavailable|overload|gateway.*time|upstream.*time|backend.*error/i;
4705
+ function isTransientRpcError(input) {
4706
+ const { status, body } = input;
4707
+ if (typeof status === "number" && (status === 429 || status >= 500)) return true;
4708
+ if (body == null) return false;
4709
+ if (typeof body === "object") {
4710
+ const err = body.error;
4711
+ if (!err || typeof err !== "object") return false;
4712
+ const code = err.code;
4713
+ if (typeof code === "number") {
4714
+ if (code === 429) return true;
4715
+ if (code >= -32099 && code <= -32e3) return true;
4716
+ if (code === -32603) return true;
4717
+ }
4718
+ const message = err.message;
4719
+ return typeof message === "string" ? TRANSIENT_BODY_RE.test(message) : false;
4720
+ }
4721
+ return TRANSIENT_BODY_RE.test(String(body));
4722
+ }
4723
+ function createFailoverFetch(urls, options = {}) {
4724
+ const endpoints = urls.filter((u) => Boolean(u));
4725
+ if (endpoints.length === 0) {
4726
+ throw new Error("createFailoverFetch: at least one RPC URL is required");
4727
+ }
4728
+ const doFetch = options.baseFetch ?? fetch;
4729
+ const failover = async (_input, init) => {
4730
+ let lastError;
4731
+ for (let i = 0; i < endpoints.length; i++) {
4732
+ const url = endpoints[i];
4733
+ const isLast = i === endpoints.length - 1;
4734
+ try {
4735
+ const res = await doFetch(url, init);
4736
+ const text = await res.text();
4737
+ const rebuilt = () => new Response(text, { status: res.status, statusText: res.statusText, headers: res.headers });
4738
+ if (isLast || !isTransientRpcError({ status: res.status, body: text })) {
4739
+ return rebuilt();
4740
+ }
4741
+ options.onFailover?.({ url, status: res.status });
4742
+ } catch (err) {
4743
+ lastError = err;
4744
+ if (isLast) throw err;
4745
+ options.onFailover?.({ url, error: err });
4746
+ }
4747
+ }
4748
+ throw lastError ?? new Error("createFailoverFetch: all endpoints failed");
4749
+ };
4750
+ return failover;
4751
+ }
4752
+
4753
+ // src/marketplace/utils.ts
4689
4754
  var START_TIME_BUFFER_SECS = 30;
4690
4755
  function generateSalt() {
4691
4756
  const bytes = new Uint8Array(31);
@@ -4726,7 +4791,8 @@ var _providerCache = /* @__PURE__ */ new WeakMap();
4726
4791
  function getProvider(config) {
4727
4792
  let p = _providerCache.get(config);
4728
4793
  if (!p) {
4729
- p = new starknet.RpcProvider({ nodeUrl: config.rpcUrl });
4794
+ const urls = Array.from(/* @__PURE__ */ new Set([config.rpcUrl, ...PUBLIC_RPC_FALLBACKS]));
4795
+ p = new starknet.RpcProvider({ nodeUrl: urls[0], baseFetch: createFailoverFetch(urls) });
4730
4796
  _providerCache.set(config, p);
4731
4797
  }
4732
4798
  return p;
@@ -6312,6 +6378,75 @@ var ERC1155CollectionService = class {
6312
6378
  return { txHash: res.transaction_hash };
6313
6379
  }
6314
6380
  };
6381
+ var VALIDATED_EKUBO_PARAMS = {
6382
+ fee: "0xc49ba5e353f7d00000000000000000",
6383
+ tickSpacing: 5982n,
6384
+ startingPrice: { mag: 4600158n, sign: true },
6385
+ bound: 88719042n
6386
+ };
6387
+ var CreatorCoinService = class {
6388
+ // config is accepted for signature parity with the other services (none needed
6389
+ // today — launch is zero-fee and views take an account).
6390
+ constructor(_config) {
6391
+ this.factoryAddress = CREATOR_COIN_FACTORY_CONTRACT_MAINNET;
6392
+ }
6393
+ _factory(account) {
6394
+ return new starknet.Contract(CreatorCoinFactoryABI, this.factoryAddress, account);
6395
+ }
6396
+ /** Deploy a fixed-supply CreatorCoin (full supply minted to the Factory). */
6397
+ async createCreatorCoin(account, params) {
6398
+ const salt = params.salt ?? BigInt("0x" + Date.now().toString(16));
6399
+ const call = this._factory(account).populate("create_creator_coin", [
6400
+ params.owner,
6401
+ params.name,
6402
+ params.symbol,
6403
+ BigInt(params.initialSupply),
6404
+ BigInt(salt)
6405
+ ]);
6406
+ const res = await account.execute([call]);
6407
+ return { txHash: res.transaction_hash };
6408
+ }
6409
+ /**
6410
+ * Launch a coin on Ekubo (owner-only). Optionally pre-funds the Factory with
6411
+ * quote (for the buyback) in the same multicall. Liquidity is permanently
6412
+ * locked in the EkuboLauncher.
6413
+ */
6414
+ async launchOnEkubo(account, params) {
6415
+ const ek = params.ekubo ?? VALIDATED_EKUBO_PARAMS;
6416
+ const factory = this._factory(account);
6417
+ const launchParameters = {
6418
+ creator_coin_address: params.creatorCoin,
6419
+ transfer_restriction_delay: params.transferRestrictionDelay ?? 0,
6420
+ max_percentage_buy_launch: params.maxPercentageBuyLaunch ?? 200,
6421
+ quote_address: params.quoteToken,
6422
+ initial_holders: params.initialHolders,
6423
+ initial_holders_amounts: params.initialHoldersAmounts.map((a) => BigInt(a))
6424
+ };
6425
+ const ekuboParameters = {
6426
+ fee: BigInt(ek.fee),
6427
+ tick_spacing: BigInt(ek.tickSpacing),
6428
+ starting_price: { mag: BigInt(ek.startingPrice.mag), sign: ek.startingPrice.sign },
6429
+ bound: BigInt(ek.bound)
6430
+ };
6431
+ const calls = [];
6432
+ if (params.quoteFundAmount !== void 0) {
6433
+ const amt = starknet.uint256.bnToUint256(BigInt(params.quoteFundAmount));
6434
+ calls.push({
6435
+ contractAddress: params.quoteToken,
6436
+ entrypoint: "transfer",
6437
+ calldata: [this.factoryAddress, amt.low, amt.high]
6438
+ });
6439
+ }
6440
+ calls.push(factory.populate("launch_on_ekubo", [launchParameters, ekuboParameters]));
6441
+ const res = await account.execute(calls);
6442
+ return { txHash: res.transaction_hash };
6443
+ }
6444
+ /** View: is this address a Factory-deployed Creator Coin? */
6445
+ async isCreatorCoin(address, account) {
6446
+ const r = await this._factory(account).is_creator_coin(address);
6447
+ return BigInt(r) === 1n;
6448
+ }
6449
+ };
6315
6450
 
6316
6451
  // src/client.ts
6317
6452
  var MedialaneClient = class {
@@ -6322,7 +6457,8 @@ var MedialaneClient = class {
6322
6457
  this.services = {
6323
6458
  pop: new PopService(this.config),
6324
6459
  drop: new DropService(this.config),
6325
- erc1155Collection: new ERC1155CollectionService(this.config)
6460
+ erc1155Collection: new ERC1155CollectionService(this.config),
6461
+ creatorCoin: new CreatorCoinService(this.config)
6326
6462
  };
6327
6463
  if (!this.config.backendUrl) {
6328
6464
  const sentinel = new ApiClient("https://medialane-sdk-no-backend.invalid", this.config.apiKey);
@@ -6450,6 +6586,28 @@ var SERVICES = {
6450
6586
  ],
6451
6587
  metadataSchema: { licenseDefault: "CC BY-SA" }
6452
6588
  },
6589
+ "creator-coin": {
6590
+ id: "creator-coin",
6591
+ displayName: "Creator Coin",
6592
+ description: "Launch a fixed-supply social token with permanently-locked Ekubo liquidity.",
6593
+ standard: "ERC20",
6594
+ provenance: "MEDIALANE",
6595
+ onchain: {
6596
+ factoryAddress: CREATOR_COIN_FACTORY_CONTRACT_MAINNET,
6597
+ classHash: CREATOR_COIN_FACTORY_CLASS_HASH_MAINNET,
6598
+ startBlock: CREATOR_COIN_START_BLOCK_MAINNET
6599
+ },
6600
+ uiVariant: "coin",
6601
+ // `swap` is a UI affordance (05 §III): the marketplace renders an embedded
6602
+ // Ekubo swap (via StarkZapp) for the coin. Settlement is Ekubo — Medialane
6603
+ // operates NO trading venue and custodies nothing. No venue service exists
6604
+ // for coins (unlike NFTs, whose Medialane marketplace contract settles them).
6605
+ capabilities: ["launch", "swap", "transfer"],
6606
+ events: [
6607
+ { name: "CreatorCoinCreated", emittedBy: "factory" },
6608
+ { name: "CreatorCoinLaunched", emittedBy: "factory" }
6609
+ ]
6610
+ },
6453
6611
  "medialane-marketplace-erc721": {
6454
6612
  id: "medialane-marketplace-erc721",
6455
6613
  displayName: "Medialane Marketplace (ERC-721)",
@@ -6529,7 +6687,14 @@ exports.COLLECTION_1155_FACTORY_CLASS_HASH_MAINNET = COLLECTION_1155_FACTORY_CLA
6529
6687
  exports.COLLECTION_1155_START_BLOCK_MAINNET = COLLECTION_1155_START_BLOCK_MAINNET;
6530
6688
  exports.COLLECTION_721_CONTRACT_MAINNET = COLLECTION_721_CONTRACT_MAINNET;
6531
6689
  exports.COLLECTION_721_START_BLOCK_MAINNET = COLLECTION_721_START_BLOCK_MAINNET;
6690
+ exports.CREATOR_COIN_CLASS_HASH_MAINNET = CREATOR_COIN_CLASS_HASH_MAINNET;
6691
+ exports.CREATOR_COIN_EKUBO_LAUNCHER_MAINNET = CREATOR_COIN_EKUBO_LAUNCHER_MAINNET;
6692
+ exports.CREATOR_COIN_FACTORY_CLASS_HASH_MAINNET = CREATOR_COIN_FACTORY_CLASS_HASH_MAINNET;
6693
+ exports.CREATOR_COIN_FACTORY_CONTRACT_MAINNET = CREATOR_COIN_FACTORY_CONTRACT_MAINNET;
6694
+ exports.CREATOR_COIN_START_BLOCK_MAINNET = CREATOR_COIN_START_BLOCK_MAINNET;
6532
6695
  exports.CollectionRegistryABI = CollectionRegistryABI;
6696
+ exports.CreatorCoinFactoryABI = CreatorCoinFactoryABI;
6697
+ exports.CreatorCoinService = CreatorCoinService;
6533
6698
  exports.DEFAULT_RPC_URL = DEFAULT_RPC_URL;
6534
6699
  exports.DROP_COLLECTION_CLASS_HASH_MAINNET = DROP_COLLECTION_CLASS_HASH_MAINNET;
6535
6700
  exports.DROP_FACTORY_CONTRACT_MAINNET = DROP_FACTORY_CONTRACT_MAINNET;
@@ -6563,14 +6728,17 @@ exports.POPCollectionABI = POPCollectionABI;
6563
6728
  exports.POPFactoryABI = POPFactoryABI;
6564
6729
  exports.POP_COLLECTION_CLASS_HASH_MAINNET = POP_COLLECTION_CLASS_HASH_MAINNET;
6565
6730
  exports.POP_FACTORY_CONTRACT_MAINNET = POP_FACTORY_CONTRACT_MAINNET;
6731
+ exports.PUBLIC_RPC_FALLBACKS = PUBLIC_RPC_FALLBACKS;
6566
6732
  exports.PopService = PopService;
6567
6733
  exports.SUPPORTED_NETWORKS = SUPPORTED_NETWORKS;
6568
6734
  exports.SUPPORTED_TOKENS = SUPPORTED_TOKENS;
6735
+ exports.VALIDATED_EKUBO_PARAMS = VALIDATED_EKUBO_PARAMS;
6569
6736
  exports.build1155CancellationTypedData = build1155CancellationTypedData;
6570
6737
  exports.build1155OrderTypedData = build1155OrderTypedData;
6571
6738
  exports.buildCancellationTypedData = buildCancellationTypedData;
6572
6739
  exports.buildFeeCall = buildFeeCall;
6573
6740
  exports.buildOrderTypedData = buildOrderTypedData;
6741
+ exports.createFailoverFetch = createFailoverFetch;
6574
6742
  exports.encodeByteArray = encodeByteArray;
6575
6743
  exports.formatAmount = formatAmount;
6576
6744
  exports.getListableTokens = getListableTokens;
@@ -6579,6 +6747,7 @@ exports.getServicesByCapability = getServicesByCapability;
6579
6747
  exports.getTokenByAddress = getTokenByAddress;
6580
6748
  exports.getTokenBySymbol = getTokenBySymbol;
6581
6749
  exports.isServiceId = isServiceId;
6750
+ exports.isTransientRpcError = isTransientRpcError;
6582
6751
  exports.listServices = listServices;
6583
6752
  exports.normalizeAddress = normalizeAddress;
6584
6753
  exports.normalizeHash = normalizeHash;