@cubee_ee/sdk 0.1.3 → 0.1.6

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.
Files changed (40) hide show
  1. package/README.md +30 -5
  2. package/dist/clients/CubeBackendClient.d.ts +41 -2
  3. package/dist/clients/CubeBackendClient.d.ts.map +1 -1
  4. package/dist/clients/CubeBackendClient.js +10 -0
  5. package/dist/clients/CubeBackendClient.js.map +1 -1
  6. package/dist/clients/CubicPoolClient.d.ts +5 -2
  7. package/dist/clients/CubicPoolClient.d.ts.map +1 -1
  8. package/dist/clients/CubicPoolClient.js +6 -3
  9. package/dist/clients/CubicPoolClient.js.map +1 -1
  10. package/dist/clients/RpcClient.d.ts +18 -2
  11. package/dist/clients/RpcClient.d.ts.map +1 -1
  12. package/dist/clients/RpcClient.js +85 -14
  13. package/dist/clients/RpcClient.js.map +1 -1
  14. package/dist/clients/SingleTokenDepositClient.d.ts +4 -1
  15. package/dist/clients/SingleTokenDepositClient.d.ts.map +1 -1
  16. package/dist/clients/SingleTokenDepositClient.js +2 -1
  17. package/dist/clients/SingleTokenDepositClient.js.map +1 -1
  18. package/dist/config/index.d.ts +4 -0
  19. package/dist/config/index.d.ts.map +1 -1
  20. package/dist/config/index.js +16 -1
  21. package/dist/config/index.js.map +1 -1
  22. package/dist/config/networks.d.ts +2 -0
  23. package/dist/config/networks.d.ts.map +1 -1
  24. package/dist/config/networks.js +11 -1
  25. package/dist/config/networks.js.map +1 -1
  26. package/dist/index.d.ts +5 -5
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +7 -5
  29. package/dist/index.js.map +1 -1
  30. package/dist/utils/errors.js +1 -1
  31. package/dist/utils/errors.js.map +1 -1
  32. package/package.json +1 -1
  33. package/src/clients/CubeBackendClient.ts +61 -2
  34. package/src/clients/CubicPoolClient.ts +11 -5
  35. package/src/clients/RpcClient.ts +123 -16
  36. package/src/clients/SingleTokenDepositClient.ts +10 -2
  37. package/src/config/index.ts +30 -2
  38. package/src/config/networks.ts +12 -0
  39. package/src/index.ts +13 -4
  40. package/src/utils/errors.ts +1 -1
@@ -22,11 +22,14 @@ __exportStar(require("./networks"), exports);
22
22
  __exportStar(require("./tokens"), exports);
23
23
  /** Build a CubeConfig for the named network with optional overrides. */
24
24
  function getConfig(network, overrides = {}) {
25
+ const rpcEndpoints = resolveRpcEndpoints(network, overrides);
25
26
  return {
26
27
  network,
27
28
  programs: networks_1.NETWORK_PROGRAMS[network],
28
29
  defaults: {
29
- rpcEndpoint: overrides.rpcEndpoint ?? networks_1.DEFAULT_RPC_ENDPOINT[network],
30
+ rpcEndpoint: rpcEndpoints[0] ?? overrides.rpcEndpoint ?? networks_1.DEFAULT_RPC_ENDPOINT[network],
31
+ rpcEndpoints,
32
+ rpcTimeoutMs: overrides.rpcTimeoutMs ?? networks_1.DEFAULT_RPC_TIMEOUT_MS,
30
33
  rpcCommitment: overrides.rpcCommitment ?? "confirmed",
31
34
  cuLimit: overrides.cuLimit ?? 1400000,
32
35
  slippageHundredthsBps: overrides.slippageHundredthsBps ?? 50000,
@@ -35,6 +38,18 @@ function getConfig(network, overrides = {}) {
35
38
  backendEndpoint: overrides.backendEndpoint,
36
39
  };
37
40
  }
41
+ function resolveRpcEndpoints(network, overrides) {
42
+ if (overrides.rpcEndpoints && overrides.rpcEndpoints.length > 0) {
43
+ return dedupe(overrides.rpcEndpoints);
44
+ }
45
+ if (overrides.rpcEndpoint) {
46
+ return dedupe([overrides.rpcEndpoint, ...networks_1.DEFAULT_RPC_ENDPOINTS[network]]);
47
+ }
48
+ return [...networks_1.DEFAULT_RPC_ENDPOINTS[network]];
49
+ }
50
+ function dedupe(values) {
51
+ return Array.from(new Set(values));
52
+ }
38
53
  exports.CUBIC_POOL_SEED = Buffer.from("cubic_pool");
39
54
  exports.BPT_MINT_SEED = Buffer.from("bpt_mint");
40
55
  exports.STLD_HELPER_SEED = Buffer.from("stld_helper");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AA0CA,8BAaC;AAwBD,8BAEC;AAhFD,yCAA8F;AAG9F,6CAA2B;AAC3B,2CAAyB;AAoCzB,wEAAwE;AACxE,SAAgB,SAAS,CAAC,OAAgB,EAAE,YAAiC,EAAE;IAC7E,OAAO;QACL,OAAO;QACP,QAAQ,EAAE,2BAAgB,CAAC,OAAO,CAAC;QACnC,QAAQ,EAAE;YACR,WAAW,EAAE,SAAS,CAAC,WAAW,IAAI,+BAAoB,CAAC,OAAO,CAAC;YACnE,aAAa,EAAE,SAAS,CAAC,aAAa,IAAI,WAAW;YACrD,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,OAAS;YACvC,qBAAqB,EAAE,SAAS,CAAC,qBAAqB,IAAI,KAAM;SACjE;QACD,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,eAAe,EAAE,SAAS,CAAC,eAAe;KAC3C,CAAC;AACJ,CAAC;AAEY,QAAA,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC5C,QAAA,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACxC,QAAA,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC9C,QAAA,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAErD,mDAAmD;AACtC,QAAA,YAAY,GAAG,KAAM,CAAC,CAAC,QAAQ;AAC/B,QAAA,UAAU,GAAG,GAAG,CAAC,CAAC,MAAM;AACxB,QAAA,UAAU,GAAG,IAAK,CAAC,CAAC,OAAO;AAC3B,QAAA,UAAU,GAAG,CAAC,CAAC;AACf,QAAA,UAAU,GAAG,EAAE,CAAC;AAChB,QAAA,YAAY,GAAG,CAAC,CAAC;AACjB,QAAA,kBAAkB,GAAG,OAAS,CAAC,CAAC,QAAQ;AACxC,QAAA,sBAAsB,GAAG,KAAM,CAAC,CAAC,QAAQ;AACzC,QAAA,iBAAiB,GAAG,MAAO,CAAC,CAAC,OAAO;AACpC,QAAA,qBAAqB,GAAG,IAAK,CAAC,CAAC,OAAO;AACtC,QAAA,mBAAmB,GAAG,KAAM,CAAC;AAC7B,QAAA,kBAAkB,GAAG,OAAS,CAAC;AAC/B,QAAA,iBAAiB,GAAG,EAAE,CAAC,CAAC,UAAU;AAI/C,SAAgB,SAAS,CAAC,GAAe,EAAE,IAAmB;IAC5D,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAqDA,8BAgBC;AAsCD,8BAEC;AA5GD,yCAOoB;AAGpB,6CAA2B;AAC3B,2CAAyB;AAwCzB,wEAAwE;AACxE,SAAgB,SAAS,CAAC,OAAgB,EAAE,YAAiC,EAAE;IAC7E,MAAM,YAAY,GAAG,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC7D,OAAO;QACL,OAAO;QACP,QAAQ,EAAE,2BAAgB,CAAC,OAAO,CAAC;QACnC,QAAQ,EAAE;YACR,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,WAAW,IAAI,+BAAoB,CAAC,OAAO,CAAC;YACtF,YAAY;YACZ,YAAY,EAAE,SAAS,CAAC,YAAY,IAAI,iCAAsB;YAC9D,aAAa,EAAE,SAAS,CAAC,aAAa,IAAI,WAAW;YACrD,OAAO,EAAE,SAAS,CAAC,OAAO,IAAI,OAAS;YACvC,qBAAqB,EAAE,SAAS,CAAC,qBAAqB,IAAI,KAAM;SACjE;QACD,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,eAAe,EAAE,SAAS,CAAC,eAAe;KAC3C,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAgB,EAAE,SAA8B;IAC3E,IAAI,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChE,OAAO,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;IACD,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,EAAE,GAAG,gCAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,CAAC,GAAG,gCAAqB,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,MAAM,CAAC,MAAgB;IAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACrC,CAAC;AAEY,QAAA,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;AAC5C,QAAA,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACxC,QAAA,gBAAgB,GAAG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAC9C,QAAA,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAErD,mDAAmD;AACtC,QAAA,YAAY,GAAG,KAAM,CAAC,CAAC,QAAQ;AAC/B,QAAA,UAAU,GAAG,GAAG,CAAC,CAAC,MAAM;AACxB,QAAA,UAAU,GAAG,IAAK,CAAC,CAAC,OAAO;AAC3B,QAAA,UAAU,GAAG,CAAC,CAAC;AACf,QAAA,UAAU,GAAG,EAAE,CAAC;AAChB,QAAA,YAAY,GAAG,CAAC,CAAC;AACjB,QAAA,kBAAkB,GAAG,OAAS,CAAC,CAAC,QAAQ;AACxC,QAAA,sBAAsB,GAAG,KAAM,CAAC,CAAC,QAAQ;AACzC,QAAA,iBAAiB,GAAG,MAAO,CAAC,CAAC,OAAO;AACpC,QAAA,qBAAqB,GAAG,IAAK,CAAC,CAAC,OAAO;AACtC,QAAA,mBAAmB,GAAG,KAAM,CAAC;AAC7B,QAAA,kBAAkB,GAAG,OAAS,CAAC;AAC/B,QAAA,iBAAiB,GAAG,EAAE,CAAC,CAAC,UAAU;AAI/C,SAAgB,SAAS,CAAC,GAAe,EAAE,IAAmB;IAC5D,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
@@ -7,4 +7,6 @@ export interface NetworkPrograms {
7
7
  }
8
8
  export declare const NETWORK_PROGRAMS: Record<Network, NetworkPrograms>;
9
9
  export declare const DEFAULT_RPC_ENDPOINT: Record<Network, string>;
10
+ export declare const DEFAULT_RPC_ENDPOINTS: Record<Network, string[]>;
11
+ export declare const DEFAULT_RPC_TIMEOUT_MS = 2000;
10
12
  //# sourceMappingURL=networks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"networks.d.ts","sourceRoot":"","sources":["../../src/config/networks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,SAAS,CAAC;IACrB,oBAAoB,EAAE,SAAS,CAAC;IAChC,aAAa,EAAE,SAAS,CAAC;CAC1B;AAED,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,OAAO,EAAE,eAAe,CAgC7D,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAIxD,CAAC"}
1
+ {"version":3,"file":"networks.d.ts","sourceRoot":"","sources":["../../src/config/networks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,MAAM,MAAM,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,SAAS,CAAC;IACrB,oBAAoB,EAAE,SAAS,CAAC;IAChC,aAAa,EAAE,SAAS,CAAC;CAC1B;AAED,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,OAAO,EAAE,eAAe,CAgC7D,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAIxD,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAQ3D,CAAC;AAEF,eAAO,MAAM,sBAAsB,OAAQ,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFAULT_RPC_ENDPOINT = exports.NETWORK_PROGRAMS = void 0;
3
+ exports.DEFAULT_RPC_TIMEOUT_MS = exports.DEFAULT_RPC_ENDPOINTS = exports.DEFAULT_RPC_ENDPOINT = exports.NETWORK_PROGRAMS = void 0;
4
4
  const web3_js_1 = require("@solana/web3.js");
5
5
  exports.NETWORK_PROGRAMS = {
6
6
  mainnet: {
@@ -28,4 +28,14 @@ exports.DEFAULT_RPC_ENDPOINT = {
28
28
  devnet: "https://api.devnet.solana.com",
29
29
  localnet: "http://127.0.0.1:8899",
30
30
  };
31
+ exports.DEFAULT_RPC_ENDPOINTS = {
32
+ mainnet: [
33
+ "https://api.mainnet-beta.solana.com",
34
+ "https://solana-rpc.publicnode.com",
35
+ "https://solana.api.pocket.network",
36
+ ],
37
+ devnet: ["https://api.devnet.solana.com"],
38
+ localnet: ["http://127.0.0.1:8899"],
39
+ };
40
+ exports.DEFAULT_RPC_TIMEOUT_MS = 2000;
31
41
  //# sourceMappingURL=networks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"networks.js","sourceRoot":"","sources":["../../src/config/networks.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAU/B,QAAA,gBAAgB,GAAqC;IAChE,OAAO,EAAE;QACP,SAAS,EAAE,IAAI,mBAAS,CAAC,8CAA8C,CAAC;QACxE,0EAA0E;QAC1E,qEAAqE;QACrE,wEAAwE;QACxE,oCAAoC;QACpC,oBAAoB,EAAE,IAAI,mBAAS,CACjC,8CAA8C,CAC/C;QACD,aAAa,EAAE,IAAI,mBAAS,CAC1B,8CAA8C,CAC/C;KACF;IACD,MAAM,EAAE;QACN,SAAS,EAAE,IAAI,mBAAS,CAAC,8CAA8C,CAAC;QACxE,oBAAoB,EAAE,IAAI,mBAAS,CACjC,8CAA8C,CAC/C;QACD,aAAa,EAAE,IAAI,mBAAS,CAC1B,8CAA8C,CAC/C;KACF;IACD,QAAQ,EAAE;QACR,SAAS,EAAE,IAAI,mBAAS,CAAC,8CAA8C,CAAC;QACxE,oBAAoB,EAAE,IAAI,mBAAS,CACjC,8CAA8C,CAC/C;QACD,aAAa,EAAE,IAAI,mBAAS,CAC1B,8CAA8C,CAC/C;KACF;CACF,CAAC;AAEW,QAAA,oBAAoB,GAA4B;IAC3D,OAAO,EAAE,qCAAqC;IAC9C,MAAM,EAAE,+BAA+B;IACvC,QAAQ,EAAE,uBAAuB;CAClC,CAAC"}
1
+ {"version":3,"file":"networks.js","sourceRoot":"","sources":["../../src/config/networks.ts"],"names":[],"mappings":";;;AAAA,6CAA4C;AAU/B,QAAA,gBAAgB,GAAqC;IAChE,OAAO,EAAE;QACP,SAAS,EAAE,IAAI,mBAAS,CAAC,8CAA8C,CAAC;QACxE,0EAA0E;QAC1E,qEAAqE;QACrE,wEAAwE;QACxE,oCAAoC;QACpC,oBAAoB,EAAE,IAAI,mBAAS,CACjC,8CAA8C,CAC/C;QACD,aAAa,EAAE,IAAI,mBAAS,CAC1B,8CAA8C,CAC/C;KACF;IACD,MAAM,EAAE;QACN,SAAS,EAAE,IAAI,mBAAS,CAAC,8CAA8C,CAAC;QACxE,oBAAoB,EAAE,IAAI,mBAAS,CACjC,8CAA8C,CAC/C;QACD,aAAa,EAAE,IAAI,mBAAS,CAC1B,8CAA8C,CAC/C;KACF;IACD,QAAQ,EAAE;QACR,SAAS,EAAE,IAAI,mBAAS,CAAC,8CAA8C,CAAC;QACxE,oBAAoB,EAAE,IAAI,mBAAS,CACjC,8CAA8C,CAC/C;QACD,aAAa,EAAE,IAAI,mBAAS,CAC1B,8CAA8C,CAC/C;KACF;CACF,CAAC;AAEW,QAAA,oBAAoB,GAA4B;IAC3D,OAAO,EAAE,qCAAqC;IAC9C,MAAM,EAAE,+BAA+B;IACvC,QAAQ,EAAE,uBAAuB;CAClC,CAAC;AAEW,QAAA,qBAAqB,GAA8B;IAC9D,OAAO,EAAE;QACP,qCAAqC;QACrC,mCAAmC;QACnC,mCAAmC;KACpC;IACD,MAAM,EAAE,CAAC,+BAA+B,CAAC;IACzC,QAAQ,EAAE,CAAC,uBAAuB,CAAC;CACpC,CAAC;AAEW,QAAA,sBAAsB,GAAG,IAAK,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  /**
2
- * @cube/sdk — client library for the Cubic Pool AMM on Solana.
2
+ * @cubee_ee/sdk — client library for the Cubic Pool AMM on Solana.
3
3
  *
4
4
  * Entry point barrel. Most consumers will want to import from this root:
5
5
  *
6
6
  * ```ts
7
- * import { CubicPoolClient, CubeBackendClient, getConfig } from "@cube/sdk";
7
+ * import { CubicPoolClient, CubeBackendClient, getConfig } from "@cubee_ee/sdk";
8
8
  *
9
9
  * const cfg = getConfig("mainnet", { backendEndpoint: "https://api.cube.fi" });
10
- * const pool = new CubicPoolClient({ config: cfg, poolAddress, rpc: { endpoint: cfg.defaults.rpcEndpoint } });
10
+ * const pool = new CubicPoolClient({ config: cfg, poolAddress });
11
11
  * const info = await pool.sync();
12
12
  * if (info.ok) console.log(info.data.tokens.map(t => t.metadata?.symbol));
13
13
  * ```
@@ -20,7 +20,7 @@ export * from "./parsers";
20
20
  export * from "./clients";
21
21
  export * from "./idl";
22
22
  export { getConfig, programId, CUBIC_POOL_SEED, BPT_MINT_SEED, STLD_HELPER_SEED, TREASURY_SEED, WEIGHT_SCALE, MIN_WEIGHT, MAX_WEIGHT, MIN_TOKENS, MAX_TOKENS, BPT_DECIMALS, SWAP_FEE_PRECISION, PROTOCOL_FEE_PRECISION, MAX_SWAP_FEE_RATE, MAX_PROTOCOL_FEE_RATE, MINIMUM_INITIAL_BPT, SLIPPAGE_PRECISION, MIN_SLIPPAGE_HBPS, } from "./config";
23
- export { NETWORK_PROGRAMS, DEFAULT_RPC_ENDPOINT } from "./config/networks";
23
+ export { NETWORK_PROGRAMS, DEFAULT_RPC_ENDPOINT, DEFAULT_RPC_ENDPOINTS, DEFAULT_RPC_TIMEOUT_MS, } from "./config/networks";
24
24
  export { KNOWN_TOKENS, resolveKnownToken } from "./config/tokens";
25
25
  export { ok, err } from "./types/result";
26
26
  export { ONE, mulDown, mulUp, divDown, divUp, complement, weightToFp, } from "./math/fixedPoint";
@@ -44,5 +44,5 @@ export type { CubeConfig, CubeConfigOverrides, ProgramIdKind, Network, NetworkPr
44
44
  export type { SdkResult, SdkError, SdkErrorCode, PoolTokenInfo, PoolInfo, PoolSummary, SwapParams, SwapQuote, AddLiquidityParams, RemoveLiquidityParams, SingleTokenDepositParams, SingleTokenDepositQuote, BuiltTx, DeployPoolParams, CubicPoolEvent, PoolInitializedEvent, SwapEvent, LiquidityAddedEvent, LiquidityRemovedEvent, ProtocolFeesCollectedEvent, PoolEnabledUpdatedEvent, SwapsEnabledUpdatedEvent, SingleTokenDepositEvent, UnknownEvent, } from "./types";
45
45
  export type { AllocationResult, } from "./math/singleToken";
46
46
  export type { RawPoolAccount, RawMintAccount, } from "./parsers";
47
- export type { RpcClientParams, CubeBackendClientParams, StatsKind, StatsWindow, StatsSeriesPoint, StatsSeries, PriceMap, LeaderboardEntry, LeaderboardResponse, LeaderboardUserStats, CubicPoolClientParams, SingleTokenDepositClientParams, PoolFactoryClientParams, InitializeConfigParams, } from "./clients";
47
+ export type { RpcClientParams, CubeBackendClientParams, StatsKind, StatsWindow, StatsSeriesPoint, StatsSeries, PriceMap, LeaderboardEntry, LeaderboardResponse, LeaderboardUserStats, XpAccrualHistoryEntry, XpAccrualHistoryResponse, EpochHistoryEntry, LeaderboardEpochResponse, CubicPoolClientParams, SingleTokenDepositClientParams, PoolFactoryClientParams, InitializeConfigParams, } from "./clients";
48
48
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -17,18 +17,18 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
17
17
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
18
18
  };
19
19
  Object.defineProperty(exports, "__esModule", { value: true });
20
- exports.CubeBackendClient = exports.RpcClient = exports.priceImpactHbps = exports.lpBalances = exports.applySwapFee = exports.applySlippage = exports.computeTwoTokenOptimalAllocations = exports.computeAllocations = exports.capDepositAmountsToLpRatio = exports.calcSpotPrice = exports.validateWeights = exports.calcSpotOut = exports.calcTokensOutGivenBptIn = exports.calcBptOutGivenExactTokensIn = exports.calcOutGivenIn = exports.powFp = exports.expFp = exports.lnFp = exports.weightToFp = exports.complement = exports.divUp = exports.divDown = exports.mulUp = exports.mulDown = exports.ONE = exports.err = exports.ok = exports.resolveKnownToken = exports.KNOWN_TOKENS = exports.DEFAULT_RPC_ENDPOINT = exports.NETWORK_PROGRAMS = exports.MIN_SLIPPAGE_HBPS = exports.SLIPPAGE_PRECISION = exports.MINIMUM_INITIAL_BPT = exports.MAX_PROTOCOL_FEE_RATE = exports.MAX_SWAP_FEE_RATE = exports.PROTOCOL_FEE_PRECISION = exports.SWAP_FEE_PRECISION = exports.BPT_DECIMALS = exports.MAX_TOKENS = exports.MIN_TOKENS = exports.MAX_WEIGHT = exports.MIN_WEIGHT = exports.WEIGHT_SCALE = exports.TREASURY_SEED = exports.STLD_HELPER_SEED = exports.BPT_MINT_SEED = exports.CUBIC_POOL_SEED = exports.programId = exports.getConfig = void 0;
21
- exports.BorshReader = exports.parseCubicPoolEvents = exports.decodeMintAccount = exports.POOL_DISCRIMINATOR_LEN = exports.decodePoolAccount = exports.buildDeployPoolTx = exports.buildInitializeCubicPoolIx = exports.buildInitializeConfigIx = exports.buildSingleTokenDepositTx = exports.buildSingleTokenDepositIx = exports.buildRemoveLiquidityTx = exports.buildRemoveLiquidityIx = exports.buildAddLiquidityTx = exports.buildAddLiquidityIx = exports.buildSwapTx = exports.buildSwapIx = exports.AdminClient = exports.PoolFactoryClient = exports.SingleTokenDepositClient = exports.CubicPoolClient = void 0;
20
+ exports.priceImpactHbps = exports.lpBalances = exports.applySwapFee = exports.applySlippage = exports.computeTwoTokenOptimalAllocations = exports.computeAllocations = exports.capDepositAmountsToLpRatio = exports.calcSpotPrice = exports.validateWeights = exports.calcSpotOut = exports.calcTokensOutGivenBptIn = exports.calcBptOutGivenExactTokensIn = exports.calcOutGivenIn = exports.powFp = exports.expFp = exports.lnFp = exports.weightToFp = exports.complement = exports.divUp = exports.divDown = exports.mulUp = exports.mulDown = exports.ONE = exports.err = exports.ok = exports.resolveKnownToken = exports.KNOWN_TOKENS = exports.DEFAULT_RPC_TIMEOUT_MS = exports.DEFAULT_RPC_ENDPOINTS = exports.DEFAULT_RPC_ENDPOINT = exports.NETWORK_PROGRAMS = exports.MIN_SLIPPAGE_HBPS = exports.SLIPPAGE_PRECISION = exports.MINIMUM_INITIAL_BPT = exports.MAX_PROTOCOL_FEE_RATE = exports.MAX_SWAP_FEE_RATE = exports.PROTOCOL_FEE_PRECISION = exports.SWAP_FEE_PRECISION = exports.BPT_DECIMALS = exports.MAX_TOKENS = exports.MIN_TOKENS = exports.MAX_WEIGHT = exports.MIN_WEIGHT = exports.WEIGHT_SCALE = exports.TREASURY_SEED = exports.STLD_HELPER_SEED = exports.BPT_MINT_SEED = exports.CUBIC_POOL_SEED = exports.programId = exports.getConfig = void 0;
21
+ exports.BorshReader = exports.parseCubicPoolEvents = exports.decodeMintAccount = exports.POOL_DISCRIMINATOR_LEN = exports.decodePoolAccount = exports.buildDeployPoolTx = exports.buildInitializeCubicPoolIx = exports.buildInitializeConfigIx = exports.buildSingleTokenDepositTx = exports.buildSingleTokenDepositIx = exports.buildRemoveLiquidityTx = exports.buildRemoveLiquidityIx = exports.buildAddLiquidityTx = exports.buildAddLiquidityIx = exports.buildSwapTx = exports.buildSwapIx = exports.AdminClient = exports.PoolFactoryClient = exports.SingleTokenDepositClient = exports.CubicPoolClient = exports.CubeBackendClient = exports.RpcClient = void 0;
22
22
  /**
23
- * @cube/sdk — client library for the Cubic Pool AMM on Solana.
23
+ * @cubee_ee/sdk — client library for the Cubic Pool AMM on Solana.
24
24
  *
25
25
  * Entry point barrel. Most consumers will want to import from this root:
26
26
  *
27
27
  * ```ts
28
- * import { CubicPoolClient, CubeBackendClient, getConfig } from "@cube/sdk";
28
+ * import { CubicPoolClient, CubeBackendClient, getConfig } from "@cubee_ee/sdk";
29
29
  *
30
30
  * const cfg = getConfig("mainnet", { backendEndpoint: "https://api.cube.fi" });
31
- * const pool = new CubicPoolClient({ config: cfg, poolAddress, rpc: { endpoint: cfg.defaults.rpcEndpoint } });
31
+ * const pool = new CubicPoolClient({ config: cfg, poolAddress });
32
32
  * const info = await pool.sync();
33
33
  * if (info.ok) console.log(info.data.tokens.map(t => t.metadata?.symbol));
34
34
  * ```
@@ -65,6 +65,8 @@ Object.defineProperty(exports, "MIN_SLIPPAGE_HBPS", { enumerable: true, get: fun
65
65
  var networks_1 = require("./config/networks");
66
66
  Object.defineProperty(exports, "NETWORK_PROGRAMS", { enumerable: true, get: function () { return networks_1.NETWORK_PROGRAMS; } });
67
67
  Object.defineProperty(exports, "DEFAULT_RPC_ENDPOINT", { enumerable: true, get: function () { return networks_1.DEFAULT_RPC_ENDPOINT; } });
68
+ Object.defineProperty(exports, "DEFAULT_RPC_ENDPOINTS", { enumerable: true, get: function () { return networks_1.DEFAULT_RPC_ENDPOINTS; } });
69
+ Object.defineProperty(exports, "DEFAULT_RPC_TIMEOUT_MS", { enumerable: true, get: function () { return networks_1.DEFAULT_RPC_TIMEOUT_MS; } });
68
70
  var tokens_1 = require("./config/tokens");
69
71
  Object.defineProperty(exports, "KNOWN_TOKENS", { enumerable: true, get: function () { return tokens_1.KNOWN_TOKENS; } });
70
72
  Object.defineProperty(exports, "resolveKnownToken", { enumerable: true, get: function () { return tokens_1.resolveKnownToken; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -41,7 +41,7 @@ function toSdkError(cause) {
41
41
  if (/429|rate limit/i.test(msg)) {
42
42
  return { code: "rpc_rate_limited", humanMessage: "RPC rate-limited — slow down", cause };
43
43
  }
44
- if (/fetch failed|ECONNREFUSED|ENOTFOUND/i.test(msg)) {
44
+ if (/fetch failed|ECONNREFUSED|ENOTFOUND|Proxy error|-32056|-32052|403/i.test(msg)) {
45
45
  return { code: "rpc_unavailable", humanMessage: "RPC endpoint unreachable", cause };
46
46
  }
47
47
  if (/Account does not exist|account not found/i.test(msg)) {
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cubee_ee/sdk",
3
- "version": "0.1.3",
3
+ "version": "0.1.6",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -58,8 +58,49 @@ export interface LeaderboardUserStats {
58
58
  lastAccrualSwapUsd: number;
59
59
  lastAccrualLiqUsd: number;
60
60
  lastAccrualAt: string | null;
61
- cumulativeSwapVolumeUsd: number;
62
- cumulativeNetLiquidityUsd: number;
61
+ }
62
+
63
+ export interface XpAccrualHistoryEntry {
64
+ accrualTime: string;
65
+ swapVolumeUsd: number;
66
+ swapXp: number;
67
+ lpValueUsd: number;
68
+ lpXp: number;
69
+ totalXp: number;
70
+ }
71
+
72
+ export interface XpAccrualHistoryResponse {
73
+ total: number;
74
+ page: number;
75
+ limit: number;
76
+ data: XpAccrualHistoryEntry[];
77
+ }
78
+
79
+ export interface EpochHistoryEntry {
80
+ epoch: number;
81
+ start: string;
82
+ end: string;
83
+ multiplier: number;
84
+ swapXpPerUsd: number;
85
+ lpXpPerUsd: number;
86
+ isCurrent: boolean;
87
+ }
88
+
89
+ export interface LeaderboardEpochResponse {
90
+ currentEpoch: number;
91
+ currentEpochStart: string;
92
+ nextEpochStart: string;
93
+ msUntilNextEpoch: number;
94
+ currentMultiplier: number;
95
+ baseRates: {
96
+ swapXpPerUsd: number;
97
+ lpXpPerUsd: number;
98
+ };
99
+ currentRates: {
100
+ swapXpPerUsd: number;
101
+ lpXpPerUsd: number;
102
+ };
103
+ epochs: EpochHistoryEntry[];
63
104
  }
64
105
 
65
106
  /**
@@ -169,6 +210,24 @@ export class CubeBackendClient {
169
210
  );
170
211
  }
171
212
 
213
+ getLeaderboardUserHistory(
214
+ address: string,
215
+ page: number = 1,
216
+ limit: number = 50,
217
+ ): Promise<SdkResult<XpAccrualHistoryResponse>> {
218
+ const qs = new URLSearchParams({
219
+ page: String(page),
220
+ limit: String(limit),
221
+ });
222
+ return this.get<XpAccrualHistoryResponse>(
223
+ `/api/leaderboard/user/${encodeURIComponent(address)}/history?${qs.toString()}`,
224
+ );
225
+ }
226
+
227
+ getLeaderboardEpoch(): Promise<SdkResult<LeaderboardEpochResponse>> {
228
+ return this.get<LeaderboardEpochResponse>("/api/leaderboard/epoch");
229
+ }
230
+
172
231
  getTokenPrices(mints: string[]): Promise<SdkResult<PriceMap>> {
173
232
  const qs = new URLSearchParams({ mints: mints.join(",") });
174
233
  return this.get<PriceMap>(`/api/prices?${qs.toString()}`);
@@ -37,12 +37,15 @@ import { SingleTokenDepositClient } from "./SingleTokenDepositClient";
37
37
  export interface CubicPoolClientParams {
38
38
  config: CubeConfig;
39
39
  poolAddress: PublicKey;
40
- rpc:
40
+ rpc?:
41
41
  | RpcClient
42
42
  | {
43
- endpoint: string;
43
+ endpoint?: string;
44
+ endpoints?: string[];
45
+ fallbackEndpoints?: string[];
44
46
  apiKey?: string;
45
47
  commitment?: Commitment;
48
+ timeoutMs?: number;
46
49
  };
47
50
  }
48
51
 
@@ -64,9 +67,12 @@ export class CubicPoolClient {
64
67
  params.rpc instanceof RpcClient
65
68
  ? params.rpc
66
69
  : new RpcClient({
67
- endpoint: params.rpc.endpoint,
68
- apiKey: params.rpc.apiKey,
69
- commitment: params.rpc.commitment ?? params.config.defaults.rpcCommitment,
70
+ endpoint: params.rpc?.endpoint,
71
+ endpoints: params.rpc?.endpoints ?? (params.rpc?.endpoint ? undefined : params.config.defaults.rpcEndpoints),
72
+ fallbackEndpoints: params.rpc?.fallbackEndpoints,
73
+ apiKey: params.rpc?.apiKey,
74
+ commitment: params.rpc?.commitment ?? params.config.defaults.rpcCommitment,
75
+ timeoutMs: params.rpc?.timeoutMs ?? params.config.defaults.rpcTimeoutMs,
70
76
  });
71
77
  }
72
78
 
@@ -1,13 +1,28 @@
1
1
  import { Commitment, Connection, PublicKey } from "@solana/web3.js";
2
2
  import { SdkResult } from "../types/result";
3
- import { safeCall, RetryOptions } from "../utils/retry";
3
+ import { RetryOptions } from "../utils/retry";
4
+ import { err, ok } from "../types/result";
5
+ import { toSdkError } from "../utils/errors";
4
6
 
5
7
  export interface RpcClientParams {
6
- endpoint: string;
8
+ endpoint?: string;
9
+ /** Ordered endpoint list. If provided, it is used as-is. */
10
+ endpoints?: string[];
11
+ /** Extra endpoints appended after `endpoint`. Ignored when `endpoints` is set. */
12
+ fallbackEndpoints?: string[];
7
13
  apiKey?: string;
8
14
  commitment?: Commitment;
9
15
  /** Optional headers (e.g. for Helius/Triton auth). */
10
16
  headers?: Record<string, string>;
17
+ /** Per-endpoint timeout before the next RPC endpoint is tried. */
18
+ timeoutMs?: number;
19
+ /** Backoff schedule between endpoint attempts. Defaults to no delay. */
20
+ backoffMs?: number[];
21
+ /** Test hook for injecting lightweight fake connections. */
22
+ connectionFactory?: (endpoint: string) => Pick<
23
+ Connection,
24
+ "getAccountInfo" | "getMultipleAccountsInfo" | "getSlot"
25
+ >;
11
26
  }
12
27
 
13
28
  /**
@@ -15,33 +30,51 @@ export interface RpcClientParams {
15
30
  * human-readable error mapping. Every public method returns a SdkResult<T>.
16
31
  */
17
32
  export class RpcClient {
18
- readonly connection: Connection;
33
+ readonly endpoints: string[];
34
+ private readonly connections: Array<Pick<
35
+ Connection,
36
+ "getAccountInfo" | "getMultipleAccountsInfo" | "getSlot"
37
+ >>;
19
38
  private readonly defaultCommitment: Commitment;
39
+ private readonly timeoutMs: number;
40
+ private readonly backoffMs: number[];
41
+ private activeEndpointIndex = 0;
20
42
 
21
43
  constructor(params: RpcClientParams) {
22
- const endpoint = params.apiKey
23
- ? appendApiKey(params.endpoint, params.apiKey)
24
- : params.endpoint;
25
44
  this.defaultCommitment = params.commitment ?? "confirmed";
26
- this.connection = new Connection(endpoint, {
27
- commitment: this.defaultCommitment,
28
- httpHeaders: params.headers,
29
- });
45
+ this.timeoutMs = params.timeoutMs ?? 2_000;
46
+ this.backoffMs = params.backoffMs ?? [];
47
+ this.endpoints = normalizeEndpoints(params);
48
+ if (this.endpoints.length === 0) {
49
+ throw new Error("RpcClient requires at least one endpoint");
50
+ }
51
+ this.connections = this.endpoints.map((endpoint) =>
52
+ params.connectionFactory
53
+ ? params.connectionFactory(endpoint)
54
+ : new Connection(endpoint, {
55
+ commitment: this.defaultCommitment,
56
+ httpHeaders: params.headers,
57
+ })
58
+ );
59
+ }
60
+
61
+ get connection(): Connection {
62
+ return this.connections[this.activeEndpointIndex] as Connection;
30
63
  }
31
64
 
32
65
  call<T>(
33
66
  fn: (conn: Connection) => Promise<T>,
34
67
  retry: RetryOptions = {}
35
68
  ): Promise<SdkResult<T>> {
36
- return safeCall(() => fn(this.connection), retry);
69
+ return this.callWithFallback((conn) => fn(conn as Connection), retry);
37
70
  }
38
71
 
39
72
  getAccountInfo(
40
73
  pk: PublicKey,
41
74
  retry: RetryOptions = {}
42
75
  ): Promise<SdkResult<{ data: Buffer; owner: PublicKey; lamports: number } | null>> {
43
- return safeCall(async () => {
44
- const info = await this.connection.getAccountInfo(pk, this.defaultCommitment);
76
+ return this.callWithFallback(async (conn) => {
77
+ const info = await conn.getAccountInfo(pk, this.defaultCommitment);
45
78
  if (!info) return null;
46
79
  return {
47
80
  data: info.data,
@@ -55,15 +88,89 @@ export class RpcClient {
55
88
  pks: PublicKey[],
56
89
  retry: RetryOptions = {}
57
90
  ): Promise<SdkResult<(Buffer | null)[]>> {
58
- return safeCall(async () => {
59
- const infos = await this.connection.getMultipleAccountsInfo(pks, this.defaultCommitment);
91
+ return this.callWithFallback(async (conn) => {
92
+ const infos = await conn.getMultipleAccountsInfo(pks, this.defaultCommitment);
60
93
  return infos.map((i) => (i ? i.data : null));
61
94
  }, retry);
62
95
  }
63
96
 
64
97
  getSlot(retry: RetryOptions = {}): Promise<SdkResult<number>> {
65
- return safeCall(() => this.connection.getSlot(this.defaultCommitment), retry);
98
+ return this.callWithFallback((conn) => conn.getSlot(this.defaultCommitment), retry);
66
99
  }
100
+
101
+ private async callWithFallback<T>(
102
+ operation: (conn: Pick<Connection, "getAccountInfo" | "getMultipleAccountsInfo" | "getSlot">) => Promise<T>,
103
+ retry: RetryOptions = {}
104
+ ): Promise<SdkResult<T>> {
105
+ const attempts = Math.max(1, retry.attempts ?? this.connections.length);
106
+ const timeoutMs = retry.timeoutMs ?? this.timeoutMs;
107
+ const shouldRetry = retry.shouldRetry ?? defaultShouldRetry;
108
+ let lastError: unknown;
109
+
110
+ for (let attempt = 0; attempt < attempts; attempt++) {
111
+ const endpointIndex = (this.activeEndpointIndex + attempt) % this.connections.length;
112
+ try {
113
+ const data = await withTimeout(operation(this.connections[endpointIndex]), timeoutMs);
114
+ this.activeEndpointIndex = endpointIndex;
115
+ return ok(data);
116
+ } catch (e) {
117
+ lastError = e;
118
+ if (!shouldRetry(e)) break;
119
+ if (attempt < attempts - 1) {
120
+ const delay = this.backoffMs[Math.min(attempt, this.backoffMs.length - 1)] ?? 0;
121
+ if (delay > 0) await sleep(delay);
122
+ }
123
+ }
124
+ }
125
+
126
+ const sdkError = toSdkError(lastError);
127
+ return err(sdkError.code, sdkError.humanMessage, lastError);
128
+ }
129
+ }
130
+
131
+ function normalizeEndpoints(params: RpcClientParams): string[] {
132
+ if (params.endpoints && params.endpoints.length > 0) {
133
+ return dedupe(params.endpoints);
134
+ }
135
+ const primary = params.endpoint
136
+ ? params.apiKey
137
+ ? appendApiKey(params.endpoint, params.apiKey)
138
+ : params.endpoint
139
+ : undefined;
140
+ return dedupe([primary, ...(params.fallbackEndpoints ?? [])].filter(Boolean) as string[]);
141
+ }
142
+
143
+ function dedupe(endpoints: string[]): string[] {
144
+ return Array.from(new Set(endpoints));
145
+ }
146
+
147
+ function defaultShouldRetry(e: unknown): boolean {
148
+ const sdkError = toSdkError(e);
149
+ return (
150
+ sdkError.code === "rpc_timeout" ||
151
+ sdkError.code === "rpc_unavailable" ||
152
+ sdkError.code === "rpc_rate_limited"
153
+ );
154
+ }
155
+
156
+ function sleep(ms: number): Promise<void> {
157
+ return new Promise((resolve) => setTimeout(resolve, ms));
158
+ }
159
+
160
+ function withTimeout<T>(p: Promise<T>, ms: number): Promise<T> {
161
+ return new Promise((resolve, reject) => {
162
+ const h = setTimeout(() => reject(new Error(`timed out after ${ms}ms`)), ms);
163
+ p.then(
164
+ (v) => {
165
+ clearTimeout(h);
166
+ resolve(v);
167
+ },
168
+ (e) => {
169
+ clearTimeout(h);
170
+ reject(e);
171
+ }
172
+ );
173
+ });
67
174
  }
68
175
 
69
176
  function appendApiKey(endpoint: string, apiKey: string): string {
@@ -17,7 +17,14 @@ export interface SingleTokenDepositClientParams {
17
17
  config: CubeConfig;
18
18
  poolAddress: PublicKey;
19
19
  /** Optional — reuses an existing one if provided. */
20
- rpc?: RpcClient | { endpoint: string; apiKey?: string; commitment?: Commitment };
20
+ rpc?: RpcClient | {
21
+ endpoint?: string;
22
+ endpoints?: string[];
23
+ fallbackEndpoints?: string[];
24
+ apiKey?: string;
25
+ commitment?: Commitment;
26
+ timeoutMs?: number;
27
+ };
21
28
  /**
22
29
  * Optional parent pool client — lets the deposit client reuse an already
23
30
  * synced PoolInfo instead of making a fresh RPC round-trip.
@@ -48,8 +55,9 @@ export class SingleTokenDepositClient {
48
55
  rpc:
49
56
  params.rpc ??
50
57
  {
51
- endpoint: params.config.defaults.rpcEndpoint,
58
+ endpoints: params.config.defaults.rpcEndpoints,
52
59
  commitment: params.config.defaults.rpcCommitment,
60
+ timeoutMs: params.config.defaults.rpcTimeoutMs,
53
61
  },
54
62
  });
55
63
  }
@@ -1,5 +1,12 @@
1
1
  import { Commitment, PublicKey } from "@solana/web3.js";
2
- import { NETWORK_PROGRAMS, NetworkPrograms, Network, DEFAULT_RPC_ENDPOINT } from "./networks";
2
+ import {
3
+ NETWORK_PROGRAMS,
4
+ NetworkPrograms,
5
+ Network,
6
+ DEFAULT_RPC_ENDPOINT,
7
+ DEFAULT_RPC_ENDPOINTS,
8
+ DEFAULT_RPC_TIMEOUT_MS,
9
+ } from "./networks";
3
10
  import { TokenInfo } from "./tokens";
4
11
 
5
12
  export * from "./networks";
@@ -14,6 +21,8 @@ export interface CubeConfig {
14
21
  programs: NetworkPrograms;
15
22
  defaults: {
16
23
  rpcEndpoint: string;
24
+ rpcEndpoints: string[];
25
+ rpcTimeoutMs: number;
17
26
  rpcCommitment: Commitment;
18
27
  /** Used by helpers that prepend a ComputeBudget instruction. */
19
28
  cuLimit: number;
@@ -32,6 +41,8 @@ export interface CubeConfig {
32
41
 
33
42
  export interface CubeConfigOverrides {
34
43
  rpcEndpoint?: string;
44
+ rpcEndpoints?: string[];
45
+ rpcTimeoutMs?: number;
35
46
  rpcCommitment?: Commitment;
36
47
  cuLimit?: number;
37
48
  slippageHundredthsBps?: number;
@@ -41,11 +52,14 @@ export interface CubeConfigOverrides {
41
52
 
42
53
  /** Build a CubeConfig for the named network with optional overrides. */
43
54
  export function getConfig(network: Network, overrides: CubeConfigOverrides = {}): CubeConfig {
55
+ const rpcEndpoints = resolveRpcEndpoints(network, overrides);
44
56
  return {
45
57
  network,
46
58
  programs: NETWORK_PROGRAMS[network],
47
59
  defaults: {
48
- rpcEndpoint: overrides.rpcEndpoint ?? DEFAULT_RPC_ENDPOINT[network],
60
+ rpcEndpoint: rpcEndpoints[0] ?? overrides.rpcEndpoint ?? DEFAULT_RPC_ENDPOINT[network],
61
+ rpcEndpoints,
62
+ rpcTimeoutMs: overrides.rpcTimeoutMs ?? DEFAULT_RPC_TIMEOUT_MS,
49
63
  rpcCommitment: overrides.rpcCommitment ?? "confirmed",
50
64
  cuLimit: overrides.cuLimit ?? 1_400_000,
51
65
  slippageHundredthsBps: overrides.slippageHundredthsBps ?? 50_000,
@@ -55,6 +69,20 @@ export function getConfig(network: Network, overrides: CubeConfigOverrides = {})
55
69
  };
56
70
  }
57
71
 
72
+ function resolveRpcEndpoints(network: Network, overrides: CubeConfigOverrides): string[] {
73
+ if (overrides.rpcEndpoints && overrides.rpcEndpoints.length > 0) {
74
+ return dedupe(overrides.rpcEndpoints);
75
+ }
76
+ if (overrides.rpcEndpoint) {
77
+ return dedupe([overrides.rpcEndpoint, ...DEFAULT_RPC_ENDPOINTS[network]]);
78
+ }
79
+ return [...DEFAULT_RPC_ENDPOINTS[network]];
80
+ }
81
+
82
+ function dedupe(values: string[]): string[] {
83
+ return Array.from(new Set(values));
84
+ }
85
+
58
86
  export const CUBIC_POOL_SEED = Buffer.from("cubic_pool");
59
87
  export const BPT_MINT_SEED = Buffer.from("bpt_mint");
60
88
  export const STLD_HELPER_SEED = Buffer.from("stld_helper");
@@ -47,3 +47,15 @@ export const DEFAULT_RPC_ENDPOINT: Record<Network, string> = {
47
47
  devnet: "https://api.devnet.solana.com",
48
48
  localnet: "http://127.0.0.1:8899",
49
49
  };
50
+
51
+ export const DEFAULT_RPC_ENDPOINTS: Record<Network, string[]> = {
52
+ mainnet: [
53
+ "https://api.mainnet-beta.solana.com",
54
+ "https://solana-rpc.publicnode.com",
55
+ "https://solana.api.pocket.network",
56
+ ],
57
+ devnet: ["https://api.devnet.solana.com"],
58
+ localnet: ["http://127.0.0.1:8899"],
59
+ };
60
+
61
+ export const DEFAULT_RPC_TIMEOUT_MS = 2_000;