@7kprotocol/sdk-ts 4.0.0 → 5.0.0-beta.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/README.md +22 -12
- package/dist/bluefin7k-63A5CV3A.mjs +2 -0
- package/dist/bluefin7k-63A5CV3A.mjs.map +1 -0
- package/dist/bluefin7k-MP3A4MG4.js +2 -0
- package/dist/bluefin7k-MP3A4MG4.js.map +1 -0
- package/dist/cetus-HOKHMQSS.mjs +2 -0
- package/dist/cetus-HOKHMQSS.mjs.map +1 -0
- package/dist/cetus-MUHFO44Y.js +2 -0
- package/dist/cetus-MUHFO44Y.js.map +1 -0
- package/dist/chunk-CYI4MM5C.mjs +2 -0
- package/dist/chunk-CYI4MM5C.mjs.map +1 -0
- package/dist/chunk-E5KM5OVW.js +2 -0
- package/dist/chunk-E5KM5OVW.js.map +1 -0
- package/dist/flowx-533PLKYB.mjs +2 -0
- package/dist/flowx-533PLKYB.mjs.map +1 -0
- package/dist/flowx-SIZHC2DP.js +2 -0
- package/dist/flowx-SIZHC2DP.js.map +1 -0
- package/dist/index.d.mts +44 -6
- package/dist/index.d.ts +44 -6
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +6 -6
- package/dist/bluefin7k-I6ZCDWDN.js +0 -2
- package/dist/bluefin7k-I6ZCDWDN.js.map +0 -1
- package/dist/bluefin7k-TERLUCNL.mjs +0 -2
- package/dist/bluefin7k-TERLUCNL.mjs.map +0 -1
- package/dist/cetus-AU3OMWOY.mjs +0 -2
- package/dist/cetus-AU3OMWOY.mjs.map +0 -1
- package/dist/cetus-SIPX6FYL.js +0 -2
- package/dist/cetus-SIPX6FYL.js.map +0 -1
- package/dist/chunk-ETQEI4QC.mjs +0 -2
- package/dist/chunk-ETQEI4QC.mjs.map +0 -1
- package/dist/chunk-KVGSSW22.js +0 -2
- package/dist/chunk-KVGSSW22.js.map +0 -1
- package/dist/flowx-6M54WFWO.js +0 -2
- package/dist/flowx-6M54WFWO.js.map +0 -1
- package/dist/flowx-OXZZX5FD.mjs +0 -2
- package/dist/flowx-OXZZX5FD.mjs.map +0 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/features/metaAg/index.ts","../src/constants/sui.ts","../src/utils/sui.ts","../src/utils/SuiClientUtils.ts","../src/utils/ObjectCache.ts","../src/utils/swap.ts","../src/features/metaAg/common.ts","../src/features/metaAg/providers/okx.ts","../src/constants/tokens.ts","../src/config/fetchClient.ts","../src/constants/apiEndpoints.ts","../src/utils/token.ts","../src/features/prices/index.ts","../src/features/limitDca/placeLimitOrder.ts","../src/features/limitDca/constants.ts","../src/features/limitDca/cancelLimitOrder.ts","../src/features/limitDca/claimExpiredLimitOrder.ts","../src/libs/url.ts","../src/features/limitDca/getOpenLimitOrders.ts","../src/features/limitDca/getClosedLimitOrders.ts","../src/features/limitDca/placeDcaOrder.ts","../src/features/limitDca/cancelDcaOrder.ts","../src/features/limitDca/getOpenDcaOrders.ts","../src/features/limitDca/getClosedDcaOrders.ts","../src/features/limitDca/getDcaOrderExecutions.ts","../src/index.ts"],"sourcesContent":["import {\n getFullnodeUrl,\n GetTransactionBlockParams,\n SuiClient,\n SuiTransactionBlockResponse,\n} from \"@mysten/sui/client\";\nimport {\n coinWithBalance,\n Transaction,\n TransactionObjectArgument,\n} from \"@mysten/sui/transactions\";\nimport { normalizeStructTag, toBase64 } from \"@mysten/sui/utils\";\nimport { SUI_ADDRESS_ZERO } from \"../../constants/sui\";\nimport {\n Bluefin7kProviderOptions,\n CetusProviderOptions,\n EProvider,\n FlowxProviderOptions,\n isAggregatorProvider,\n isSwapAPIProvider,\n MetaAgOptions,\n MetaFastSwapOptions,\n MetaQuote,\n MetaQuoteOptions,\n MetaSimulationOptions,\n MetaSwapOptions,\n OkxProviderOptions,\n QuoteProvider,\n} from \"../../types/metaAg\";\nimport { isSystemAddress } from \"../../utils/sui\";\nimport { SuiClientUtils } from \"../../utils/SuiClientUtils\";\nimport { getExpectedReturn } from \"../../utils/swap\";\nimport { metaSettle, simulateAggregator, timeout } from \"./common\";\nimport { MetaAgError, MetaAgErrorCode } from \"./error\";\nimport { OkxProvider, simulateOKXSwap } from \"./providers/okx\";\n\nconst HERMES_API = \"https://hermes.pyth.network\";\n\nconst DEFAULT_PROVIDERS: Required<MetaAgOptions>[\"providers\"] = {\n [EProvider.BLUEFIN7K]: {},\n [EProvider.FLOWX]: {},\n [EProvider.CETUS]: {},\n};\n\nexport class MetaAg {\n client: SuiClient;\n private providers: Partial<Record<EProvider, QuoteProvider>> = {};\n private inspector: SuiClientUtils;\n private options: Required<MetaAgOptions>;\n constructor(options?: MetaAgOptions) {\n this.options = {\n providers: { ...DEFAULT_PROVIDERS, ...options?.providers },\n slippageBps: options?.slippageBps ?? 100,\n fullnodeUrl: options?.fullnodeUrl ?? getFullnodeUrl(\"mainnet\"),\n hermesApi: options?.hermesApi ?? HERMES_API,\n partner: options?.partner ?? SUI_ADDRESS_ZERO,\n partnerCommissionBps: options?.partnerCommissionBps ?? 0,\n tipBps: options?.tipBps ?? 0,\n };\n\n this.client = new SuiClient({\n url: this.options.fullnodeUrl,\n });\n\n this.inspector = new SuiClientUtils(this.client);\n }\n\n private async _getProvider(provider: EProvider) {\n const p = this.providers[provider];\n if (p) return p;\n\n const providerOptions = this.options.providers[provider];\n MetaAgError.assert(\n !!providerOptions,\n `Provider not found: ${provider}`,\n MetaAgErrorCode.PROVIDER_NOT_FOUND,\n { provider },\n );\n switch (provider) {\n case EProvider.BLUEFIN7K:\n const { Bluefin7kProvider } =\n await import(\"./providers/bluefin7k\").catch(\n catchImportError(EProvider.BLUEFIN7K),\n );\n this.providers[EProvider.BLUEFIN7K] = new Bluefin7kProvider(\n providerOptions as Bluefin7kProviderOptions,\n this.options,\n this.client,\n );\n break;\n case EProvider.FLOWX:\n const { FlowxProvider } = await import(\"./providers/flowx\").catch(\n catchImportError(EProvider.FLOWX),\n );\n this.providers[EProvider.FLOWX] = new FlowxProvider(\n providerOptions as FlowxProviderOptions,\n this.client,\n );\n break;\n case EProvider.CETUS:\n const { CetusProvider } = await import(\"./providers/cetus\").catch(\n catchImportError(EProvider.CETUS),\n );\n this.providers[EProvider.CETUS] = new CetusProvider(\n providerOptions as CetusProviderOptions,\n this.options,\n this.client,\n );\n break;\n case EProvider.OKX:\n this.providers[EProvider.OKX] = new OkxProvider(\n providerOptions as OkxProviderOptions,\n this.options,\n this.client,\n );\n break;\n default:\n throw new MetaAgError(\n `Provider not supported: ${provider}`,\n MetaAgErrorCode.PROVIDER_NOT_SUPPORTED,\n { provider },\n );\n }\n return this.providers[provider]!;\n }\n\n private async _simulate(\n provider: QuoteProvider,\n quote: MetaQuote,\n simulation: MetaSimulationOptions,\n ) {\n try {\n if (isAggregatorProvider(provider)) {\n return simulateAggregator(\n provider,\n quote,\n simulation,\n this.inspector,\n this.options,\n );\n }\n\n switch (quote.provider) {\n case EProvider.OKX:\n return simulateOKXSwap(\n quote,\n this.inspector,\n simulation,\n this.options,\n );\n default:\n throw new MetaAgError(\n `Provider not supported: ${provider.kind}`,\n MetaAgErrorCode.PROVIDER_NOT_SUPPORTED,\n { provider: provider.kind },\n );\n }\n } catch (error) {\n console.warn(error, { provider: provider.kind, quote: quote.id });\n }\n }\n\n private async _quote(provider: QuoteProvider, options: MetaQuoteOptions) {\n const quote = await timeout(\n async () => {\n const quote = await provider.quote(options);\n if (!quote) return null;\n const { expectedAmount } = getExpectedReturn(\n quote.rawAmountOut,\n 0,\n this.options.partnerCommissionBps,\n this.options.tipBps,\n );\n quote.amountOut = expectedAmount;\n return quote;\n },\n options.timeout ?? 2000,\n `quote for ${provider.kind} provider from ${options.coinTypeIn} to ${options.coinTypeOut}`,\n );\n\n return quote;\n }\n\n private async _fastSwap(\n { quote, signer, useGasCoin, signTransaction }: MetaFastSwapOptions,\n getTransactionBlockParams?: Omit<GetTransactionBlockParams, \"digest\">,\n ) {\n const tx = new Transaction();\n const coin = await this.swap({\n quote,\n signer,\n tx,\n coinIn: coinWithBalance({\n type: quote.coinTypeIn,\n balance: BigInt(quote.amountIn),\n useGasCoin,\n }),\n });\n tx.transferObjects([coin], signer);\n tx.setSenderIfNotSet(signer);\n const txBytes = await tx.build({ client: this.client });\n const { signature, bytes } = await signTransaction(toBase64(txBytes));\n return this.client.executeTransactionBlock({\n transactionBlock: bytes,\n signature,\n options: getTransactionBlockParams?.options,\n signal: getTransactionBlockParams?.signal,\n });\n }\n\n /**\n * Get quotes from all providers\n * @param options - quote options\n * @param simulation - if present, the quote will be simulated\n * @returns quotes from all providers\n */\n async quote(\n options: MetaQuoteOptions,\n simulation?: MetaSimulationOptions,\n ): Promise<MetaQuote[]> {\n const opts: MetaQuoteOptions = {\n ...options,\n coinTypeIn: normalizeStructTag(options.coinTypeIn),\n coinTypeOut: normalizeStructTag(options.coinTypeOut),\n };\n const quotes = await Promise.allSettled(\n Object.entries(this.options.providers)\n .filter(([_k, v]) => !v.disabled)\n .map(async ([provider]) => {\n const p = await this._getProvider(provider as EProvider);\n return this._quote(p, opts);\n }),\n );\n const result = quotes\n .map((quote) =>\n quote.status === \"fulfilled\"\n ? quote.value\n : (console.warn(quote.reason), null),\n )\n .filter((quote) => quote !== null);\n\n if (simulation) {\n const requests = result.map(async (quote) => {\n const provider = await this._getProvider(quote.provider);\n const updated = await this._simulate(provider, quote, simulation);\n quote.simulatedAmountOut = updated?.simulatedAmountOut;\n quote.gasUsed = updated?.gasUsed;\n simulation?.onSimulated?.({ ...quote });\n });\n if (!simulation.onSimulated) {\n await Promise.all(requests);\n }\n }\n\n return result;\n }\n\n /**\n * Build transaction from quote\n * @info Use this function to build composable transaction (ie: add more commands after the swap, consume the coin out object)\n * @warning Providers that build transaction on the fly (typically RFQ, Swap-API providers ie: Okx, ...) are not supported, please use `fastSwap` instead\n * @param options - build tx options\n * @param slippageBps - slippage bps if not specified, fallback to global slippage bps, if none of them specified, default to 100\n * @returns coin out object, you must consume it by transferObjects, or other sub sequence commands\n */\n async swap(\n options: MetaSwapOptions,\n slippageBps?: number,\n ): Promise<TransactionObjectArgument> {\n const provider = await this._getProvider(options.quote.provider);\n MetaAgError.assert(\n !!provider,\n `Provider not found: ${options.quote.provider}`,\n MetaAgErrorCode.PROVIDER_NOT_FOUND,\n { provider: options.quote.provider },\n );\n MetaAgError.assert(\n isAggregatorProvider(provider),\n `Provider does not support swap: ${provider.kind}, use fastSwap instead`,\n MetaAgErrorCode.PROVIDER_NOT_SUPPORT_SWAP,\n { provider: provider.kind },\n );\n MetaAgError.assert(\n options.signer && !isSystemAddress(options.signer),\n \"Invalid signer address\",\n MetaAgErrorCode.INVALID_SIGNER_ADDRESS,\n { signer: options.signer },\n );\n const coinOut = await provider.swap(options);\n options.tx.add(\n metaSettle(\n options.quote,\n coinOut,\n slippageBps ?? this.options.slippageBps ?? 100,\n this.options.tipBps,\n this.options.partner,\n this.options.partnerCommissionBps,\n ),\n );\n options.tx.setSenderIfNotSet(options.signer);\n return coinOut;\n }\n\n /**\n * Build, Sign, and Execute transaction in one step\n * @param options - fast swap options\n * @returns - txDigest of the transaction\n */\n async fastSwap(\n options: MetaFastSwapOptions,\n getTransactionBlockParams?: Omit<GetTransactionBlockParams, \"digest\">,\n ): Promise<SuiTransactionBlockResponse> {\n MetaAgError.assert(\n options.signer && !isSystemAddress(options.signer),\n \"Invalid signer address\",\n MetaAgErrorCode.INVALID_SIGNER_ADDRESS,\n { signer: options.signer },\n );\n const provider = await this._getProvider(options.quote.provider);\n if (isAggregatorProvider(provider)) {\n return this._fastSwap(options, getTransactionBlockParams);\n } else if (isSwapAPIProvider(provider)) {\n return this.client.waitForTransaction({\n ...getTransactionBlockParams,\n digest: await provider.fastSwap(options),\n });\n } else {\n throw new MetaAgError(\n `Provider not supported: ${provider.kind}`,\n MetaAgErrorCode.PROVIDER_NOT_SUPPORTED,\n { provider: provider.kind },\n );\n }\n }\n\n /**\n * Update meta aggregator options\n * @param options - update options payload\n */\n updateMetaAgOptions(options: MetaAgOptions) {\n if (Object.keys(options).length === 0) return;\n this.options.slippageBps = options.slippageBps ?? this.options.slippageBps;\n this.options.partner = options.partner ?? this.options.partner;\n this.options.partnerCommissionBps =\n options.partnerCommissionBps ?? this.options.partnerCommissionBps;\n this.options.tipBps = options.tipBps ?? this.options.tipBps;\n if (\n options.fullnodeUrl &&\n options.fullnodeUrl !== this.options.fullnodeUrl\n ) {\n this.client = new SuiClient({ url: options.fullnodeUrl });\n this.inspector = new SuiClientUtils(this.client);\n this.options.fullnodeUrl = options.fullnodeUrl;\n }\n if (options.hermesApi && options.hermesApi !== this.options.hermesApi) {\n this.providers = {};\n this.options.hermesApi = options.hermesApi;\n }\n // if update provider's options, we need to re-initialize the provider\n for (const [provider, opt] of Object.entries(options.providers || {})) {\n this.options.providers[provider as EProvider] = {\n ...opt,\n ...this.options.providers[provider as EProvider],\n } as any;\n delete this.providers[provider as EProvider];\n }\n }\n}\n\nconst catchImportError = (provider: EProvider) => {\n return (e: any) => {\n const map = {\n [EProvider.CETUS]: \"@cetusprotocol/aggregator-sdk\",\n [EProvider.FLOWX]: \"@flowx-finance/sdk\",\n [EProvider.BLUEFIN7K]: \"@bluefin-exchange/bluefin7k-aggregator-sdk\",\n [EProvider.OKX]: \"\",\n };\n console.warn(`Please install ${map[provider]} to use ${provider} provider`);\n throw e;\n };\n};\n","export const SUI_ADDRESS_ZERO =\n \"0x0000000000000000000000000000000000000000000000000000000000000000\";\n","import { Transaction, TransactionArgument } from \"@mysten/sui/transactions\";\nimport { normalizeSuiAddress, parseStructTag } from \"@mysten/sui/utils\";\nimport {\n _7K_META_CONFIG,\n _7K_META_PACKAGE_ID,\n _7K_META_VAULT,\n} from \"../constants/_7k\";\n\nexport const SuiUtils = {\n getSuiCoin(\n amount: bigint | TransactionArgument,\n txb: Transaction,\n ): TransactionArgument {\n const [coin] = txb.splitCoins(txb.gas, [amount]);\n return coin;\n },\n\n getCoinValue(\n coinType: string,\n coinObject: string | TransactionArgument,\n txb: Transaction,\n ): TransactionArgument {\n const inputCoinObject =\n typeof coinObject == \"string\" ? txb.object(coinObject) : coinObject;\n const [value] = txb.moveCall({\n target: `0x2::coin::value`,\n typeArguments: [coinType],\n arguments: [inputCoinObject],\n });\n return value;\n },\n\n isValidStructTag(value: string) {\n try {\n return !!parseStructTag(value);\n } catch (_) {\n return false;\n }\n },\n\n zeroBalance(tx: Transaction, coinType: string) {\n return tx.moveCall({\n target: `0x2::balance::zero`,\n typeArguments: [coinType],\n arguments: [],\n })[0];\n },\n\n zeroCoin(tx: Transaction, coinType: string) {\n return tx.moveCall({\n target: `0x2::coin::zero`,\n typeArguments: [coinType],\n arguments: [],\n })[0];\n },\n\n coinIntoBalance(\n tx: Transaction,\n coinType: string,\n coinObject: TransactionArgument,\n ) {\n return tx.moveCall({\n target: `0x2::coin::into_balance`,\n typeArguments: [coinType],\n arguments: [coinObject],\n })[0];\n },\n\n coinFromBalance(\n tx: Transaction,\n coinType: string,\n balance: TransactionArgument,\n ) {\n return tx.moveCall({\n target: `0x2::coin::from_balance`,\n typeArguments: [coinType],\n arguments: [balance],\n })[0];\n },\n\n balanceDestroyZero(\n tx: Transaction,\n coinType: string,\n balance: TransactionArgument,\n ) {\n tx.moveCall({\n target: `0x2::balance::destroy_zero`,\n typeArguments: [coinType],\n arguments: [balance],\n });\n },\n\n collectDust(tx: Transaction, coinType: string, coin: TransactionArgument) {\n tx.moveCall({\n target: `${_7K_META_PACKAGE_ID}::vault::collect_dust`,\n typeArguments: [coinType],\n arguments: [tx.object(_7K_META_VAULT), tx.object(_7K_META_CONFIG), coin],\n });\n },\n\n transferOrDestroyZeroCoin(\n tx: Transaction,\n coinType: string,\n coin: TransactionArgument,\n address: string,\n ) {\n tx.moveCall({\n target: `${_7K_META_PACKAGE_ID}::utils::transfer_or_destroy`,\n typeArguments: [coinType],\n arguments: [coin, tx.pure.address(address)],\n });\n },\n};\n\nconst RESERVED_ADDRESSES = [\n \"0x0000000000000000000000000000000000000000000000000000000000000000\", // zero\n \"0x0000000000000000000000000000000000000000000000000000000000000001\", // std\n \"0x0000000000000000000000000000000000000000000000000000000000000002\", // sui framework\n \"0x0000000000000000000000000000000000000000000000000000000000000003\", // unknown but we reserved to be safe\n \"0x0000000000000000000000000000000000000000000000000000000000000004\", // unknown but we reserved to be safe\n \"0x0000000000000000000000000000000000000000000000000000000000000005\", // system state\n \"0x0000000000000000000000000000000000000000000000000000000000000006\", // time\n \"0x0000000000000000000000000000000000000000000000000000000000000007\", // unknown but we reserved to be safe\n \"0x0000000000000000000000000000000000000000000000000000000000000008\", // random\n \"0x0000000000000000000000000000000000000000000000000000000000000009\", // unknown but we reserved to be safe\n \"0x0000000000000000000000000000000000000000000000000000000000000403\", // coin deny list\n \"0x000000000000000000000000000000000000000000000000000000000000000c\", // coin registry\n];\n\nexport const isSystemAddress = (address: string) => {\n const addr = normalizeSuiAddress(address);\n return RESERVED_ADDRESSES.includes(addr);\n};\n","import {\n DevInspectTransactionBlockParams,\n SuiClient,\n} from \"@mysten/sui/client\";\nimport { Transaction } from \"@mysten/sui/transactions\";\nimport { CustomObjectCache } from \"./ObjectCache\";\n\n/**\n * Utility class for interacting with Sui blockchain coins\n */\nexport class SuiClientUtils {\n #devInspectCache: CustomObjectCache;\n /**\n * Creates a new instance of SuiClientUtils\n * @param client - The Sui client instance to use for blockchain interactions\n */\n constructor(private client: SuiClient) {\n this.#devInspectCache = new CustomObjectCache({ client: this.client });\n }\n\n devInspectTransactionBlock = async (\n params: DevInspectTransactionBlockParams,\n ) => {\n if (params.transactionBlock instanceof Transaction) {\n params.transactionBlock.addBuildPlugin(this.#devInspectCache.asPlugin());\n }\n try {\n const res = await this.client.devInspectTransactionBlock(params);\n return res;\n } catch (error) {\n // clear all cache if devInspectTransactionBlock fails\n await this.#devInspectCache.clear();\n throw error;\n } finally {\n await this.#devInspectCache.clearOwnedObjects();\n }\n };\n}\n","import { bcs } from \"@mysten/sui/bcs\";\nimport { SuiClient } from \"@mysten/sui/client\";\nimport {\n OpenMoveTypeSignature,\n TransactionDataBuilder,\n TransactionPlugin,\n} from \"@mysten/sui/transactions\";\nimport { normalizeSuiAddress } from \"@mysten/sui/utils\";\n\nexport interface ObjectCacheEntry {\n objectId: string;\n version: string;\n digest: string;\n owner: string | null;\n initialSharedVersion: string | null;\n}\n\nexport interface MoveFunctionCacheEntry {\n package: string;\n module: string;\n function: string;\n parameters: OpenMoveTypeSignature[];\n}\n\nexport interface CacheEntryTypes {\n OwnedObject: ObjectCacheEntry;\n SharedOrImmutableObject: ObjectCacheEntry;\n MoveFunction: MoveFunctionCacheEntry;\n Custom: unknown;\n}\nexport abstract class AsyncCache {\n protected abstract get<T extends keyof CacheEntryTypes>(\n type: T,\n key: string,\n ): Promise<CacheEntryTypes[T] | null>;\n protected abstract set<T extends keyof CacheEntryTypes>(\n type: T,\n key: string,\n value: CacheEntryTypes[T],\n ): Promise<void>;\n protected abstract delete<T extends keyof CacheEntryTypes>(\n type: T,\n key: string,\n ): Promise<void>;\n abstract clear<T extends keyof CacheEntryTypes>(type?: T): Promise<void>;\n\n async getObject(id: string) {\n const [owned, shared] = await Promise.all([\n this.get(\"OwnedObject\", id),\n this.get(\"SharedOrImmutableObject\", id),\n ]);\n\n return owned ?? shared ?? null;\n }\n\n async getObjects(ids: string[]) {\n return Promise.all(ids.map((id) => this.getObject(id)));\n }\n\n async addObject(object: ObjectCacheEntry) {\n if (object.owner) {\n await this.set(\"OwnedObject\", object.objectId, object);\n } else {\n await this.set(\"SharedOrImmutableObject\", object.objectId, object);\n }\n\n return object;\n }\n\n async addObjects(objects: ObjectCacheEntry[]) {\n await Promise.all(objects.map(async (object) => this.addObject(object)));\n }\n\n async deleteObject(id: string) {\n await Promise.all([\n this.delete(\"OwnedObject\", id),\n this.delete(\"SharedOrImmutableObject\", id),\n ]);\n }\n\n async deleteObjects(ids: string[]) {\n await Promise.all(ids.map((id) => this.deleteObject(id)));\n }\n\n async getMoveFunctionDefinition(ref: {\n package: string;\n module: string;\n function: string;\n }) {\n const functionName = `${normalizeSuiAddress(ref.package)}::${ref.module}::${ref.function}`;\n return this.get(\"MoveFunction\", functionName);\n }\n\n async addMoveFunctionDefinition(functionEntry: MoveFunctionCacheEntry) {\n const pkg = normalizeSuiAddress(functionEntry.package);\n const functionName = `${pkg}::${functionEntry.module}::${functionEntry.function}`;\n const entry = {\n ...functionEntry,\n package: pkg,\n };\n\n await this.set(\"MoveFunction\", functionName, entry);\n\n return entry;\n }\n\n async deleteMoveFunctionDefinition(ref: {\n package: string;\n module: string;\n function: string;\n }) {\n const functionName = `${normalizeSuiAddress(ref.package)}::${ref.module}::${ref.function}`;\n await this.delete(\"MoveFunction\", functionName);\n }\n\n async getCustom<T>(key: string) {\n return this.get(\"Custom\", key) as Promise<T | null>;\n }\n\n async setCustom<T>(key: string, value: T) {\n return this.set(\"Custom\", key, value);\n }\n\n async deleteCustom(key: string) {\n return this.delete(\"Custom\", key);\n }\n}\n\nexport class InMemoryObjectCache extends AsyncCache {\n #caches = {\n OwnedObject: new Map<string, ObjectCacheEntry>(),\n SharedOrImmutableObject: new Map<string, ObjectCacheEntry>(),\n MoveFunction: new Map<string, MoveFunctionCacheEntry>(),\n Custom: new Map<string, unknown>(),\n };\n\n protected async get<T extends keyof CacheEntryTypes>(type: T, key: string) {\n return (this.#caches[type].get(key) as CacheEntryTypes[T]) ?? null;\n }\n\n protected async set<T extends keyof CacheEntryTypes>(\n type: T,\n key: string,\n value: CacheEntryTypes[T],\n ) {\n (this.#caches[type] as Map<string, typeof value>).set(key, value as never);\n }\n\n protected async delete<T extends keyof CacheEntryTypes>(\n type: T,\n key: string,\n ) {\n this.#caches[type].delete(key);\n }\n\n async clear<T extends keyof CacheEntryTypes>(type?: T) {\n if (type) {\n this.#caches[type].clear();\n } else {\n for (const cache of Object.values(this.#caches)) {\n cache.clear();\n }\n }\n }\n}\n\nexport interface ObjectCacheOptions {\n cache?: AsyncCache;\n client: SuiClient;\n onEffects?: (\n effects: typeof bcs.TransactionEffects.$inferType,\n ) => Promise<void>;\n}\n\nexport class CustomObjectCache {\n #client: SuiClient;\n #cache: AsyncCache;\n #onEffects?: (\n effects: typeof bcs.TransactionEffects.$inferType,\n ) => Promise<void>;\n\n constructor({\n cache = new InMemoryObjectCache(),\n onEffects,\n client,\n }: ObjectCacheOptions) {\n this.#client = client;\n this.#cache = cache;\n this.#onEffects = onEffects;\n }\n\n private async applyCache(\n transactionData: TransactionDataBuilder,\n unresolvedObjects: string[],\n ) {\n const cached = (await this.#cache.getObjects(unresolvedObjects)).filter(\n (obj) => obj !== null,\n );\n\n const byId = new Map(cached.map((obj) => [obj!.objectId, obj]));\n const unresolved: string[] = [];\n for (const input of transactionData.inputs) {\n if (!input.UnresolvedObject) {\n continue;\n }\n\n const cached = byId.get(input.UnresolvedObject.objectId);\n\n if (!cached) {\n unresolved.push(input.UnresolvedObject.objectId);\n continue;\n }\n\n if (\n cached.initialSharedVersion &&\n !input.UnresolvedObject.initialSharedVersion\n ) {\n input.UnresolvedObject.initialSharedVersion =\n cached.initialSharedVersion;\n } else {\n if (cached.version && !input.UnresolvedObject.version) {\n input.UnresolvedObject.version = cached.version;\n }\n\n if (cached.digest && !input.UnresolvedObject.digest) {\n input.UnresolvedObject.digest = cached.digest;\n }\n }\n }\n return unresolved;\n }\n\n private async resolveObjects(\n transactionData: TransactionDataBuilder,\n unresolved: string[],\n ) {\n const unresolvedObjects = await this.applyCache(\n transactionData,\n unresolved,\n );\n if (unresolvedObjects.length === 0) {\n return [];\n }\n const dedup = [...new Set(unresolvedObjects)];\n const res = await this.#client.multiGetObjects({\n ids: dedup,\n options: {\n showOwner: true,\n },\n });\n const objects: ObjectCacheEntry[] = [];\n for (const obj of res || []) {\n if (!obj.data) {\n continue;\n }\n const owner = obj.data.owner;\n\n const initialSharedVersion =\n owner && typeof owner === \"object\" && \"Shared\" in owner\n ? owner.Shared.initial_shared_version\n : null;\n const ownerAddress =\n owner && typeof owner === \"object\" && \"AddressOwner\" in owner\n ? owner.AddressOwner\n : null;\n const cached: ObjectCacheEntry = {\n objectId: obj.data.objectId,\n version: obj.data.version,\n digest: obj.data.digest,\n initialSharedVersion,\n owner: ownerAddress,\n };\n objects.push(cached);\n }\n await this.#cache.addObjects(objects);\n return await this.applyCache(transactionData, unresolvedObjects);\n }\n\n asPlugin(): TransactionPlugin {\n return async (transactionData, _options, next) => {\n const unresolvedObjects = transactionData.inputs\n .filter((input) => input.UnresolvedObject)\n .map((input) => input.UnresolvedObject!.objectId);\n\n // if object is not in cache yet, fetch from RPC and save to cache and resolve all objects\n await this.resolveObjects(transactionData, unresolvedObjects);\n\n await Promise.all(\n transactionData.commands.map(async (commands) => {\n if (commands.MoveCall) {\n const def = await this.getMoveFunctionDefinition({\n package: commands.MoveCall.package,\n module: commands.MoveCall.module,\n function: commands.MoveCall.function,\n });\n\n if (def) {\n commands.MoveCall._argumentTypes = def.parameters;\n }\n }\n }),\n );\n\n await next();\n\n await Promise.all(\n transactionData.commands.map(async (commands) => {\n if (commands.MoveCall?._argumentTypes) {\n await this.#cache.addMoveFunctionDefinition({\n package: commands.MoveCall.package,\n module: commands.MoveCall.module,\n function: commands.MoveCall.function,\n parameters: commands.MoveCall._argumentTypes,\n });\n }\n }),\n );\n };\n }\n\n async clear() {\n await this.#cache.clear();\n }\n\n async getMoveFunctionDefinition(ref: {\n package: string;\n module: string;\n function: string;\n }) {\n return this.#cache.getMoveFunctionDefinition(ref);\n }\n\n async getObjects(ids: string[]) {\n return this.#cache.getObjects(ids);\n }\n\n async deleteObjects(ids: string[]) {\n return this.#cache.deleteObjects(ids);\n }\n\n async clearOwnedObjects() {\n await this.#cache.clear(\"OwnedObject\");\n }\n\n async clearCustom() {\n await this.#cache.clear(\"Custom\");\n }\n\n async getCustom<T>(key: string) {\n return this.#cache.getCustom<T>(key);\n }\n\n async setCustom<T>(key: string, value: T) {\n return this.#cache.setCustom(key, value);\n }\n\n async deleteCustom(key: string) {\n return this.#cache.deleteCustom(key);\n }\n\n async applyEffects(effects: typeof bcs.TransactionEffects.$inferType) {\n if (!effects.V2) {\n throw new Error(\n `Unsupported transaction effects version ${effects.$kind}`,\n );\n }\n\n const { lamportVersion, changedObjects } = effects.V2;\n\n const deletedIds: string[] = [];\n const addedObjects: ObjectCacheEntry[] = [];\n\n changedObjects.forEach(([id, change]) => {\n if (change.outputState.NotExist) {\n deletedIds.push(id);\n } else if (change.outputState.ObjectWrite) {\n const [digest, owner] = change.outputState.ObjectWrite;\n\n addedObjects.push({\n objectId: id,\n digest,\n version: lamportVersion,\n owner: owner.AddressOwner ?? owner.ObjectOwner ?? null,\n initialSharedVersion: owner.Shared?.initialSharedVersion ?? null,\n });\n }\n });\n\n await Promise.all([\n this.#cache.addObjects(addedObjects),\n this.#cache.deleteObjects(deletedIds),\n this.#onEffects?.(effects),\n ]);\n }\n}\n","/**\n * Calculate expected return amount after applying slippage, commission, and tip\n * @param returnAmount - The raw return amount (with decimals)\n * @param slippageBps - Slippage in basis points (1 bps = 0.01%)\n * @param commissionBps - Commission in basis points\n * @param tipBps - Tip in basis points (default: 0)\n * @returns Object containing tipAmount, minAmount, commissionAmount, and expectedAmount\n */\nexport const getExpectedReturn = (\n returnAmount: string,\n slippageBps: number,\n commissionBps: number,\n tipBps: number = 0,\n) => {\n if (slippageBps > 10000) {\n throw new Error(\"Slippage must be less than 100%\");\n }\n if (commissionBps > 10000) {\n throw new Error(\"Commission must be less than 100%\");\n }\n if (tipBps > 10000) {\n throw new Error(\"Tip must be less than 100%\");\n }\n const returnAmountWithDecimal = BigInt(returnAmount);\n const tipAmountWithDecimal =\n (returnAmountWithDecimal * BigInt(tipBps || 0)) / 10000n;\n const commissionAmountWithDecimal =\n ((returnAmountWithDecimal - tipAmountWithDecimal) * BigInt(commissionBps)) /\n 10000n;\n const expectedReturnWithDecimal =\n returnAmountWithDecimal -\n tipAmountWithDecimal -\n commissionAmountWithDecimal;\n const minAmountWithDecimal =\n (expectedReturnWithDecimal * BigInt(1e4 - slippageBps)) / 10000n;\n\n return {\n tipAmount: tipAmountWithDecimal,\n minAmount: minAmountWithDecimal,\n commissionAmount: commissionAmountWithDecimal,\n expectedAmount: expectedReturnWithDecimal.toString(10),\n };\n};\n","import { SuiEvent } from \"@mysten/sui/client\";\nimport {\n coinWithBalance,\n Transaction,\n TransactionObjectArgument,\n} from \"@mysten/sui/transactions\";\nimport {\n _7K_META_CONFIG,\n _7K_META_PACKAGE_ID,\n _7K_META_PUBLISHED_AT,\n _7K_META_VAULT,\n} from \"../../constants/_7k\";\nimport {\n AggregatorProvider,\n MetaAgOptions,\n MetaQuote,\n MetaSimulationOptions,\n} from \"../../types/metaAg\";\nimport { SuiClientUtils } from \"../../utils/SuiClientUtils\";\nimport { getExpectedReturn } from \"../../utils/swap\";\nimport { MetaAgError, MetaAgErrorCode } from \"./error\";\n\nexport const simulateSwapTx = async (\n tx: Transaction,\n inspector: SuiClientUtils,\n simulation: MetaSimulationOptions,\n) => {\n const res = await timeout(\n () =>\n inspector.devInspectTransactionBlock({\n sender: simulation.sender,\n transactionBlock: tx,\n }),\n simulation.timeout ?? 2000,\n );\n if (res.effects.status.status === \"failure\") {\n throw new MetaAgError(\n res.error ?? \"Simulation failed\",\n MetaAgErrorCode.SIMULATION_FAILED,\n { error: res.error },\n );\n }\n const amountOut = extractAmountOutWrapper(res.events);\n return {\n simulatedAmountOut: amountOut as string,\n gasUsed: res.effects.gasUsed,\n };\n};\nexport const simulateAggregator = async (\n provider: AggregatorProvider,\n quote: MetaQuote,\n simulation: MetaSimulationOptions,\n inspector: SuiClientUtils,\n options: Required<MetaAgOptions>,\n) => {\n const tx = new Transaction();\n const coinOut = await provider.swap({\n quote,\n coinIn: coinWithBalance({\n balance: BigInt(quote.amountIn),\n type: quote.coinTypeIn,\n useGasCoin: false,\n }),\n signer: simulation.sender,\n tx,\n });\n tx.add(\n metaSettle(\n quote,\n coinOut,\n 10000,\n options.tipBps,\n options.partner,\n options.partnerCommissionBps,\n ),\n );\n tx.transferObjects([coinOut], simulation.sender);\n const res = await simulateSwapTx(tx, inspector, simulation);\n return {\n id: quote.id,\n provider: provider.kind,\n ...res,\n };\n};\n\n/**\n * this settlement does not charge commission fee for partner, since all integrated aggregators already charge commission fee for partner\n * @param quote Meta Aggregator Quote\n * @param coinOut Coin Out Object\n * @param slippageBps Slippage Bps\n * @param tipBps Tip Bps default = 0\n * @param partner address of partner for analytic default is zero address\n */\nexport const metaSettle = (\n quote: MetaQuote,\n coinOut: TransactionObjectArgument,\n slippageBps = 100,\n tipBps = 0,\n partner?: string,\n commissionBps = 0,\n) => {\n return (tx: Transaction) => {\n const { minAmount, expectedAmount } = getExpectedReturn(\n quote.rawAmountOut,\n slippageBps,\n commissionBps,\n tipBps,\n );\n\n if (tipBps > 0) {\n tx.moveCall({\n target: `${_7K_META_PUBLISHED_AT}::vault::collect_tip`,\n typeArguments: [quote.coinTypeOut],\n arguments: [\n tx.object(_7K_META_VAULT),\n tx.object(_7K_META_CONFIG),\n coinOut,\n tx.pure.u64(tipBps),\n ],\n });\n }\n\n tx.moveCall({\n target: `${_7K_META_PUBLISHED_AT}::settle::settle`,\n typeArguments: [quote.coinTypeIn, quote.coinTypeOut],\n arguments: [\n tx.object(_7K_META_CONFIG),\n tx.object(_7K_META_VAULT),\n tx.pure.u64(quote.amountIn),\n coinOut,\n tx.pure.u64(minAmount),\n tx.pure.u64(expectedAmount),\n tx.pure.option(\"address\", partner),\n tx.pure.u64(commissionBps),\n tx.pure.u64(0), // ps\n ],\n });\n };\n};\n\nconst extractAmountOutWrapper = (events: SuiEvent[]) => {\n const swapEvent = events\n .filter((event) => event.type === `${_7K_META_PACKAGE_ID}::settle::Swap`)\n ?.pop();\n return (swapEvent?.parsedJson as any)?.amount_out;\n};\n\nexport const timeout = async <T = any>(\n fn: () => Promise<T>,\n timeout: number,\n msg?: string,\n) => {\n if (timeout <= 0) return fn();\n return new Promise<T>((resolve, reject) => {\n const timer = setTimeout(\n () =>\n reject(\n new MetaAgError(\n `Timeout ${msg ?? \"operation\"}`,\n MetaAgErrorCode.TIMEOUT,\n { timeout },\n ),\n ),\n timeout,\n );\n fn()\n .then(resolve)\n .catch(reject)\n .finally(() => clearTimeout(timer));\n });\n};\n","import { SuiClient } from \"@mysten/sui/client\";\nimport {\n Commands,\n Transaction,\n TransactionDataBuilder,\n TransactionObjectArgument,\n} from \"@mysten/sui/transactions\";\nimport {\n normalizeStructTag,\n normalizeSuiAddress,\n toBase64,\n} from \"@mysten/sui/utils\";\nimport { v4 } from \"uuid\";\nimport { SUI_TYPE } from \"../../../constants/tokens\";\nimport {\n EProvider,\n MetaAgOptions,\n MetaFastSwapOptions,\n MetaQuote,\n MetaQuoteOptions,\n MetaSimulationOptions,\n MetaSwapOptions,\n OkxProviderOptions,\n QuoteProvider,\n SwapAPIProvider,\n} from \"../../../types/metaAg\";\nimport { OkxSwapRequest, OkxSwapResponse } from \"../../../types/okx\";\nimport { isSystemAddress } from \"../../../utils/sui\";\nimport { SuiClientUtils } from \"../../../utils/SuiClientUtils\";\nimport { metaSettle, simulateSwapTx } from \"../common\";\nimport { MetaAgError, MetaAgErrorCode } from \"../error\";\n\nconst API = \"https://web3.okx.com\";\nconst SWAP_PATH = \"/api/v6/dex/aggregator/swap\";\nconst CHAIN_ID = \"784\";\nconst NORMALIZED_SUI_TYPE = normalizeStructTag(SUI_TYPE);\nexport class OkxProvider implements QuoteProvider, SwapAPIProvider {\n readonly kind = EProvider.OKX;\n constructor(\n private readonly options: OkxProviderOptions,\n private readonly metaOptions: Required<MetaAgOptions>,\n private readonly client: SuiClient,\n ) {}\n\n async quote({\n amountIn,\n coinTypeIn,\n coinTypeOut,\n signer,\n }: MetaQuoteOptions): Promise<MetaQuote | null> {\n if (!signer || isSystemAddress(signer)) return null;\n const request: OkxSwapRequest = {\n chainIndex: CHAIN_ID,\n amount: amountIn,\n fromTokenAddress:\n coinTypeIn === NORMALIZED_SUI_TYPE ? SUI_TYPE : coinTypeIn,\n toTokenAddress:\n coinTypeOut === NORMALIZED_SUI_TYPE ? SUI_TYPE : coinTypeOut,\n slippagePercent: (this.metaOptions.slippageBps / 100).toString(),\n userWalletAddress: signer,\n };\n const queryString = \"?\" + new URLSearchParams(request as any).toString();\n const url = `${this.options.api ?? API}${SWAP_PATH}${queryString}`;\n const response = await fetch(url, {\n headers: await getHeaders(this.options, \"GET\", SWAP_PATH, queryString),\n });\n const quote = (await response.json()) as OkxSwapResponse;\n MetaAgError.assert(\n quote.code === \"0\" && quote.data.length > 0,\n \"No quote found\",\n MetaAgErrorCode.QUOTE_NOT_FOUND,\n { provider: this.kind },\n );\n return {\n id: v4(),\n provider: this.kind,\n coinTypeIn,\n coinTypeOut,\n amountIn,\n amountOut: quote.data[0].routerResult.toTokenAmount,\n rawAmountOut: quote.data[0].routerResult.toTokenAmount,\n quote: quote.data[0],\n };\n }\n\n async fastSwap(options: MetaFastSwapOptions): Promise<string> {\n const { quote, signer, signTransaction } = options;\n MetaAgError.assert(\n quote.provider === EProvider.OKX,\n \"Invalid quote\",\n MetaAgErrorCode.INVALID_QUOTE,\n { quote, expectedProvider: EProvider.OKX },\n );\n const { tx, coin } = buildTx({ quote, signer });\n tx.add(\n metaSettle(\n quote,\n coin,\n this.metaOptions.slippageBps,\n this.metaOptions.tipBps,\n this.metaOptions.partner,\n this.metaOptions.partnerCommissionBps,\n ),\n );\n tx.transferObjects([coin], signer);\n const txBytes = await tx.build({ client: this.client });\n const { bytes, signature } = await signTransaction(toBase64(txBytes));\n const res = await this.client.executeTransactionBlock({\n signature,\n transactionBlock: bytes,\n });\n return res.digest;\n }\n}\n\nasync function generateHmacSha256(message: string, secretKey: string) {\n const encoder = new TextEncoder();\n const encodeBase64 = (bytes: Uint8Array) => {\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(bytes).toString(\"base64\");\n }\n let binary = \"\";\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n if (typeof btoa !== \"undefined\") {\n return btoa(binary);\n }\n throw new MetaAgError(\"Base64 encoder not available in this environment\");\n };\n\n if (typeof globalThis !== \"undefined\" && globalThis.crypto?.subtle) {\n const key = await globalThis.crypto.subtle.importKey(\n \"raw\",\n encoder.encode(secretKey),\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\"],\n );\n const signature = await globalThis.crypto.subtle.sign(\n \"HMAC\",\n key,\n encoder.encode(message),\n );\n return encodeBase64(new Uint8Array(signature));\n }\n\n const { createHmac } = await import(\"node:crypto\");\n return createHmac(\"sha256\", secretKey).update(message).digest(\"base64\");\n}\n\nasync function getHeaders(\n options: OkxProviderOptions,\n method: string,\n requestPath: string,\n queryString = \"\",\n) {\n const { apiKey, secretKey, apiPassphrase, projectId } = options;\n if (!apiKey || !secretKey || !apiPassphrase || !projectId) {\n throw new MetaAgError(\"Missing required environment variables\");\n }\n\n const timestamp = new Date().toISOString();\n const stringToSign = timestamp + method + requestPath + queryString;\n return {\n \"Content-Type\": \"application/json\",\n \"OK-ACCESS-KEY\": apiKey,\n \"OK-ACCESS-SIGN\": await generateHmacSha256(stringToSign, secretKey),\n \"OK-ACCESS-TIMESTAMP\": timestamp,\n \"OK-ACCESS-PASSPHRASE\": apiPassphrase,\n \"OK-ACCESS-PROJECT\": projectId,\n };\n}\n\nconst replaceFinalizeCommand = (\n tx: Transaction,\n packageId: string,\n): { tx: Transaction; coin: TransactionObjectArgument } => {\n const builder = TransactionDataBuilder.restore(tx.getData());\n const i = builder.commands.findIndex(\n (cmd) =>\n cmd.$kind === \"MoveCall\" &&\n normalizeSuiAddress(cmd.MoveCall.package) ===\n normalizeSuiAddress(packageId) &&\n cmd.MoveCall.module === \"router\" &&\n cmd.MoveCall.function === \"finalize\",\n );\n\n const cmd = builder.commands[i];\n MetaAgError.assert(\n cmd.MoveCall,\n \"OKX: Finalize command not found\",\n MetaAgErrorCode.OKX_FINALIZE_COMMAND_NOT_FOUND,\n { packageId },\n );\n builder.replaceCommand(\n i,\n Commands.MoveCall({\n package: packageId,\n module: \"router\",\n function: \"finalize_without_transfer\",\n typeArguments: cmd.MoveCall.typeArguments,\n arguments: [\n cmd.MoveCall.arguments[0],\n cmd.MoveCall.arguments[5],\n cmd.MoveCall.arguments[6],\n ],\n }),\n );\n const tx2 = Transaction.from(builder.build());\n return { tx: tx2, coin: { NestedResult: [i, 0] } };\n};\n\nconst buildTx = (options: Omit<MetaSwapOptions, \"coinIn\" | \"tx\">) => {\n const { quote, signer } = options;\n MetaAgError.assert(\n quote.provider === EProvider.OKX,\n \"Invalid quote\",\n MetaAgErrorCode.INVALID_QUOTE,\n { quote, expectedProvider: EProvider.OKX },\n );\n const tx = Transaction.from(quote.quote.tx.data);\n tx.setSenderIfNotSet(signer);\n const { tx: tx2, coin } = replaceFinalizeCommand(tx, quote.quote.tx.to);\n\n return { tx: tx2, coin };\n};\n\nexport const simulateOKXSwap = async <\n T extends MetaQuote & { provider: EProvider.OKX },\n>(\n quote: T,\n inspector: SuiClientUtils,\n simulation: MetaSimulationOptions,\n metaOptions: Required<MetaAgOptions>,\n) => {\n const { tx, coin } = buildTx({ quote, signer: quote.quote.tx.from });\n tx.add(\n metaSettle(\n quote,\n coin,\n 10000,\n metaOptions.tipBps,\n metaOptions.partner,\n metaOptions.partnerCommissionBps,\n ),\n );\n tx.transferObjects([coin], quote.quote.tx.from);\n const res = await simulateSwapTx(tx, inspector, simulation);\n return {\n id: quote.id,\n provider: quote.provider,\n ...res,\n };\n};\n","export const SUI_TYPE = \"0x2::sui::SUI\";\n\nexport const SUI_FULL_TYPE =\n \"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI\";\n\nexport const USDC_TOKEN_TYPE =\n \"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN\";\n\nexport const NATIVE_USDC_TOKEN_TYPE =\n \"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC\";\n","export async function fetchClient(\n input: string,\n init?: RequestInit,\n): Promise<Response> {\n const headers = new Headers(init?.headers);\n\n // intercept the request and add the headers go here...\n const modifiedInit: RequestInit = {\n ...init,\n headers,\n };\n\n return fetch(input, modifiedInit);\n}\n","export const API_ENDPOINTS = {\n MAIN: \"https://api.7k.ag\",\n LO_DCA: \"https://lod-dca.7k.ag\",\n PRICES: \"https://lp-pro-api.7k.ag/price\",\n STATISTIC: \"https://statistic.7k.ag\",\n};\n","import { SUI_FULL_TYPE, SUI_TYPE } from \"../constants/tokens\";\n\nexport function normalizeTokenType(type: string) {\n return type === SUI_TYPE ? SUI_FULL_TYPE : type;\n}\n\nexport function denormalizeTokenType(type: string) {\n return type === SUI_FULL_TYPE ? SUI_TYPE : type;\n}\n\nexport function checkIsSui(type: string) {\n return type === SUI_FULL_TYPE || type === SUI_TYPE;\n}\n","import { fetchClient } from \"../../config/fetchClient\";\nimport { API_ENDPOINTS } from \"../../constants/apiEndpoints\";\nimport { SUI_FULL_TYPE } from \"../../constants/tokens\";\nimport { normalizeTokenType } from \"../../utils/token\";\n\n/**\n * Response structure from the new price service API\n */\ninterface TokenPriceResponse {\n token_id: string;\n timestamp: number;\n price: number;\n}\n\n/**\n * Request structure for the batch price API\n */\ninterface BatchPriceRequest {\n timestamp: string; // Unix timestamp as string\n token_ids: string[];\n}\n\nconst chunkArray = <T>(array: T[], chunkSize: number): T[][] => {\n const chunks: T[][] = [];\n for (let i = 0; i < array.length; i += chunkSize) {\n chunks.push(array.slice(i, i + chunkSize));\n }\n return chunks;\n};\n\nconst MAX_TOTAL_IDS = 500;\nconst MAX_IDS_PER_REQUEST = 100;\n\n/**\n * Get the current Unix timestamp as a string\n */\nfunction getCurrentTimestamp(): string {\n return Math.floor(Date.now() / 1000).toString();\n}\n\n/**\n * Get price for a single token\n * @param id - Token ID (coin type)\n * @returns Token price, or 0 if not found or on error\n */\nexport async function getTokenPrice(id: string): Promise<number> {\n try {\n const normalizedId = normalizeTokenType(id);\n const prices = await getTokenPrices([normalizedId]);\n return prices[normalizedId] || 0;\n } catch (_) {\n return 0;\n }\n}\n\n/**\n * Get prices for multiple tokens\n * @param ids - Array of token IDs (coin types)\n * @returns Record mapping token IDs to their prices\n */\nexport async function getTokenPrices(\n ids: string[],\n): Promise<Record<string, number>> {\n try {\n if (ids.length === 0) {\n return {};\n }\n\n const limitedIds = ids.slice(0, MAX_TOTAL_IDS).map(normalizeTokenType);\n const idChunks = chunkArray(limitedIds, MAX_IDS_PER_REQUEST);\n const timestamp = getCurrentTimestamp();\n\n const responses = await Promise.all(\n idChunks.map(async (chunk) => {\n const requestBody: BatchPriceRequest = {\n timestamp,\n token_ids: chunk,\n };\n\n const response = await fetchClient(\n `${API_ENDPOINTS.PRICES}/prices/batch`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(requestBody),\n },\n );\n\n if (!response.ok) {\n throw new Error(`Price API returned status ${response.status}`);\n }\n\n const pricesRes = (await response.json()) as TokenPriceResponse[];\n return pricesRes;\n }),\n );\n\n // Combine all responses into a single record\n const combinedPrices = responses.reduce(\n (acc, priceResponses) => {\n priceResponses.forEach((priceResponse) => {\n acc[priceResponse.token_id] = priceResponse.price;\n });\n return acc;\n },\n {} as Record<string, number>,\n );\n\n // Ensure all requested IDs are in the result (set to 0 if not found)\n const finalPrices = limitedIds.reduce(\n (acc, id) => {\n acc[id] = combinedPrices[id] || 0;\n return acc;\n },\n {} as Record<string, number>,\n );\n\n return finalPrices;\n } catch (_) {\n // On error, return 0 for all requested IDs\n return ids.slice(0, MAX_TOTAL_IDS).reduce(\n (acc, id) => {\n acc[normalizeTokenType(id)] = 0;\n return acc;\n },\n {} as Record<string, number>,\n );\n }\n}\n\n/**\n * Get the current SUI token price\n * @returns SUI price, or 0 if not found or on error\n */\nexport async function getSuiPrice(): Promise<number> {\n return await getTokenPrice(SUI_FULL_TYPE);\n}\n","import { coinWithBalance, Transaction } from \"@mysten/sui/transactions\";\nimport { GLOBAL_CONFIG_ID, LIMIT_ORDER_MODULE_ID } from \"./constants\";\n\nexport interface PlaceLimitOrderParams {\n accountAddress: string;\n payCoinType: string;\n targetCoinType: string;\n payCoinAmount: bigint;\n rate: bigint;\n slippage: bigint;\n expireTs: bigint;\n devInspect?: boolean;\n}\n\nexport async function placeLimitOrder({\n accountAddress,\n payCoinType,\n targetCoinType,\n payCoinAmount,\n rate,\n slippage,\n expireTs,\n devInspect,\n}: PlaceLimitOrderParams) {\n const tx = new Transaction();\n const payCoin = tx.add(\n coinWithBalance({\n type: payCoinType,\n balance: payCoinAmount,\n useGasCoin: !devInspect,\n }),\n );\n\n tx.moveCall({\n target: `${LIMIT_ORDER_MODULE_ID}::place_limit_order`,\n arguments: [\n tx.object(GLOBAL_CONFIG_ID),\n payCoin,\n tx.pure.u64(rate),\n tx.pure.u64(slippage),\n tx.pure.u64(expireTs),\n tx.object.clock(),\n ],\n typeArguments: [payCoinType, targetCoinType],\n });\n\n tx.setSenderIfNotSet(accountAddress);\n return tx;\n}\n","import { API_ENDPOINTS } from \"../../constants/apiEndpoints\";\n\nexport const GLOBAL_CONFIG_ID =\n \"0xffc7f420b481ed7a012b42e125fd7e5716b5673759cf4629e5fcfebce970a72d\";\nexport const RATE_SCALE = BigInt(\"1000000000000\");\nexport const SLIPPAGE_SCALE = BigInt(\"10000\");\nexport const PACKAGE =\n \"0x0ef0f805710cf53c10f29c4f73e1144a662747e1839689a846e2520cae122adc\";\nexport const LIMIT_ORDER_MODULE_ID = `${PACKAGE}::limit_order`;\nexport const DCA_ORDER_MODULE_ID = `${PACKAGE}::dca_order`;\nexport const CONFIG_MODULE_ID = `${PACKAGE}::config`;\nexport const DCA_MAX_RATE = BigInt(\"18446744073709551615\");\nexport const LO_DCA_API = `${API_ENDPOINTS.LO_DCA}/api`;\n","import { Transaction } from \"@mysten/sui/transactions\";\nimport { LIMIT_ORDER_MODULE_ID } from \"./constants\";\n\ninterface CancelLimitOrderParams {\n orderId: string;\n payCoinType: string;\n targetCoinType: string;\n}\n\nexport async function cancelLimitOrder({\n orderId,\n payCoinType,\n targetCoinType,\n}: CancelLimitOrderParams) {\n const tx = new Transaction();\n\n tx.moveCall({\n target: `${LIMIT_ORDER_MODULE_ID}::cancel_limit_order`,\n typeArguments: [payCoinType, targetCoinType],\n arguments: [tx.object(orderId), tx.object.clock()],\n });\n\n return tx;\n}\n","import { Transaction } from \"@mysten/sui/transactions\";\nimport { LIMIT_ORDER_MODULE_ID } from \"./constants\";\n\ninterface ClaimExpiredLimitOrderParams {\n orderId: string;\n payCoinType: string;\n targetCoinType: string;\n}\n\nexport async function claimExpiredLimitOrder({\n orderId,\n payCoinType,\n targetCoinType,\n}: ClaimExpiredLimitOrderParams) {\n const tx = new Transaction();\n\n tx.moveCall({\n target: `${LIMIT_ORDER_MODULE_ID}::claim_expired_order`,\n typeArguments: [payCoinType, targetCoinType],\n arguments: [tx.object(orderId), tx.object.clock()],\n });\n\n return tx;\n}\n","export function formatQueryParams(params: Record<string, any>) {\n let str = \"\";\n Object.entries(params).forEach(([key, value]) => {\n if (Array.isArray(value)) {\n for (const v of value) {\n str += str ? `&${key}=${v}` : `${key}=${v}`;\n }\n } else if (value !== undefined) {\n str += str ? `&${key}=${value}` : `${key}=${value}`;\n }\n });\n return str;\n}\n","import { fetchClient } from \"../../config/fetchClient\";\nimport { formatQueryParams } from \"../../libs/url\";\nimport { LO_DCA_API } from \"./constants\";\nimport { LimitOrder, LoDcaQueryParams } from \"./types\";\n\ninterface Params {\n owner: string;\n offset: number;\n limit: number;\n tokenPair?: string;\n}\n\nexport async function getOpenLimitOrders({\n owner,\n offset = 0,\n limit = 10,\n tokenPair,\n}: Params) {\n const queryParams: LoDcaQueryParams = {\n owner,\n statuses: [\"ACTIVE\", \"EXPIRED\"],\n offset,\n limit,\n tokenPair,\n };\n const paramsStr = formatQueryParams(queryParams);\n\n const response = await fetchClient(`${LO_DCA_API}/limit-orders?${paramsStr}`);\n\n if (!response.ok) {\n throw new Error(\"Failed to fetch open limit orders\");\n }\n\n const orders = (await response.json()) as LimitOrder[];\n return orders;\n}\n","import { fetchClient } from \"../../config/fetchClient\";\nimport { formatQueryParams } from \"../../libs/url\";\nimport { LO_DCA_API } from \"./constants\";\nimport { LimitOrder, LoDcaQueryParams } from \"./types\";\n\ninterface Params {\n owner: string;\n offset: number;\n limit: number;\n tokenPair?: string;\n}\n\nexport async function getClosedLimitOrders({\n owner,\n offset = 0,\n limit = 10,\n tokenPair,\n}: Params) {\n const queryParams: LoDcaQueryParams = {\n owner,\n statuses: [\"CLOSED\"],\n offset,\n limit,\n tokenPair,\n };\n const paramsStr = formatQueryParams(queryParams);\n\n const response = await fetchClient(`${LO_DCA_API}/limit-orders?${paramsStr}`);\n\n if (!response.ok) {\n throw new Error(\"Failed to fetch closed limit orders\");\n }\n\n const orders = (await response.json()) as LimitOrder[];\n return orders;\n}\n","import { DCA_ORDER_MODULE_ID, GLOBAL_CONFIG_ID } from \"./constants\";\nimport {\n coinWithBalance,\n Transaction,\n TransactionObjectArgument,\n} from \"@mysten/sui/transactions\";\n\ninterface PlaceDcaOrderParams {\n payCoinType: string;\n targetCoinType: string;\n payCoinAmountEach: bigint;\n numOrders: number;\n interval: number;\n slippage: bigint;\n minRate: bigint;\n maxRate: bigint;\n}\n\nexport async function placeDcaOrder({\n payCoinType,\n targetCoinType,\n payCoinAmountEach,\n numOrders,\n interval,\n slippage,\n minRate,\n maxRate,\n}: PlaceDcaOrderParams) {\n const tx = new Transaction();\n\n const coinElements: TransactionObjectArgument[] = [];\n for (let i = 0; i < numOrders; i++) {\n const coin = coinWithBalance({\n type: payCoinType,\n balance: payCoinAmountEach,\n });\n coinElements.push(coin);\n }\n const vectorCoin = tx.makeMoveVec({\n elements: coinElements,\n });\n tx.moveCall({\n target: `${DCA_ORDER_MODULE_ID}::place_dca_order`,\n arguments: [\n tx.object(GLOBAL_CONFIG_ID),\n vectorCoin,\n tx.pure.u64(interval),\n tx.pure.u64(slippage),\n tx.pure.u64(minRate),\n tx.pure.u64(maxRate),\n tx.object.clock(),\n ],\n typeArguments: [payCoinType, targetCoinType],\n });\n\n return tx;\n}\n","import { Transaction } from \"@mysten/sui/transactions\";\nimport { DCA_ORDER_MODULE_ID } from \"./constants\";\n\ninterface CancelDcaOrderParams {\n orderId: string;\n payCoinType: string;\n targetCoinType: string;\n}\n\nexport async function cancelDcaOrder({\n orderId,\n payCoinType,\n targetCoinType,\n}: CancelDcaOrderParams) {\n const tx = new Transaction();\n\n tx.moveCall({\n target: `${DCA_ORDER_MODULE_ID}::cancel_dca_order`,\n arguments: [tx.object(orderId), tx.object.clock()],\n typeArguments: [payCoinType, targetCoinType],\n });\n\n return tx;\n}\n","import { fetchClient } from \"../../config/fetchClient\";\nimport { formatQueryParams } from \"../../libs/url\";\nimport { LO_DCA_API } from \"./constants\";\nimport { DcaOrder, LoDcaQueryParams } from \"./types\";\n\ninterface Params {\n owner: string;\n offset: number;\n limit: number;\n tokenPair?: string;\n}\n\nexport async function getOpenDcaOrders({\n owner,\n offset = 0,\n limit = 10,\n tokenPair,\n}: Params) {\n const queryParams: LoDcaQueryParams = {\n owner,\n statuses: [\"ACTIVE\", \"EXPIRED\"],\n offset,\n limit,\n tokenPair,\n };\n const paramsStr = formatQueryParams(queryParams);\n\n const response = await fetchClient(`${LO_DCA_API}/dca-orders?${paramsStr}`);\n\n if (!response.ok) {\n throw new Error(\"Failed to fetch open dca orders\");\n }\n\n const orders = (await response.json()) as DcaOrder[];\n return orders;\n}\n","import { fetchClient } from \"../../config/fetchClient\";\nimport { formatQueryParams } from \"../../libs/url\";\nimport { LO_DCA_API } from \"./constants\";\nimport { LoDcaOrderExecution, LoDcaQueryParams } from \"./types\";\n\ninterface Params {\n owner: string;\n offset: number;\n limit: number;\n tokenPair?: string;\n}\n\nexport async function getClosedDcaOrders({\n owner,\n offset = 0,\n limit = 10,\n tokenPair,\n}: Params) {\n const queryParams: LoDcaQueryParams = {\n owner,\n statuses: [\"SUCCESS\"],\n offset,\n limit,\n orderType: \"DCA\",\n tokenPair,\n };\n const paramsStr = formatQueryParams(queryParams);\n\n const response = await fetchClient(\n `${LO_DCA_API}/order-executions?${paramsStr}`,\n );\n\n if (!response.ok) {\n throw new Error(\"Failed to fetch closed dca orders\");\n }\n\n const orders = (await response.json()) as LoDcaOrderExecution[];\n return orders;\n}\n","import { fetchClient } from \"../../config/fetchClient\";\nimport { formatQueryParams } from \"../../libs/url\";\nimport { LO_DCA_API } from \"./constants\";\nimport { LoDcaOrderExecution, LoDcaQueryParams } from \"./types\";\n\ninterface Params {\n owner: string;\n orderId: string;\n offset: number;\n limit: number;\n}\n\nexport async function getDcaOrderExecutions({\n owner,\n orderId,\n offset = 0,\n limit = 10,\n}: Params) {\n const queryParams: LoDcaQueryParams = {\n owner,\n orderId,\n statuses: [\"SUCCESS\"],\n offset,\n limit,\n orderType: \"DCA\",\n };\n const paramsStr = formatQueryParams(queryParams);\n\n const response = await fetchClient(\n `${LO_DCA_API}/order-executions?${paramsStr}`,\n );\n\n if (!response.ok) {\n throw new Error(\"Failed to fetch dca order executions\");\n }\n\n const orders = (await response.json()) as LoDcaOrderExecution[];\n return orders;\n}\n","export * from \"./types/metaAg\";\n\nimport { MetaAg } from \"./features/metaAg\";\nimport { getSuiPrice, getTokenPrice, getTokenPrices } from \"./features/prices\";\n\nimport {\n cancelDcaOrder,\n cancelLimitOrder,\n claimExpiredLimitOrder,\n getClosedDcaOrders,\n getClosedLimitOrders,\n getDcaOrderExecutions,\n getOpenDcaOrders,\n getOpenLimitOrders,\n placeDcaOrder,\n placeLimitOrder,\n} from \"./features/limitDca\";\n\nexport {\n MetaAg,\n cancelDcaOrder,\n cancelLimitOrder,\n claimExpiredLimitOrder,\n getClosedDcaOrders,\n getClosedLimitOrders,\n getDcaOrderExecutions,\n getOpenDcaOrders,\n getOpenLimitOrders,\n // prices\n getSuiPrice,\n getTokenPrice,\n getTokenPrices,\n // dca\n placeDcaOrder,\n // limit order\n placeLimitOrder,\n};\n\nexport default {\n // prices\n getTokenPrice,\n getTokenPrices,\n getSuiPrice,\n\n // limit order\n placeLimitOrder,\n getOpenLimitOrders,\n cancelLimitOrder,\n claimExpiredLimitOrder,\n getClosedLimitOrders,\n\n // dca\n placeDcaOrder,\n getOpenDcaOrders,\n cancelDcaOrder,\n getClosedDcaOrders,\n getDcaOrderExecutions,\n\n // Meta aggregator\n MetaAg,\n};\n"],"mappings":"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","names":["getFullnodeUrl","SuiClient","coinWithBalance","Transaction","normalizeStructTag","toBase64","SUI_ADDRESS_ZERO","normalizeSuiAddress","parseStructTag","RESERVED_ADDRESSES","isSystemAddress","address","addr","normalizeSuiAddress","Transaction","normalizeSuiAddress","AsyncCache","id","owned","shared","ids","object","objects","ref","functionName","normalizeSuiAddress","functionEntry","pkg","entry","key","value","_caches","InMemoryObjectCache","__privateAdd","type","__privateGet","cache","_client","_cache","_onEffects","CustomObjectCache","onEffects","client","__privateSet","transactionData","unresolvedObjects","cached","obj","byId","unresolved","input","dedup","res","owner","initialSharedVersion","ownerAddress","_options","next","commands","def","effects","_a","lamportVersion","changedObjects","deletedIds","addedObjects","change","digest","_devInspectCache","SuiClientUtils","client","__privateAdd","params","Transaction","__privateGet","error","__privateSet","CustomObjectCache","getExpectedReturn","returnAmount","slippageBps","commissionBps","tipBps","returnAmountWithDecimal","tipAmountWithDecimal","commissionAmountWithDecimal","expectedReturnWithDecimal","minAmountWithDecimal","coinWithBalance","Transaction","simulateSwapTx","tx","inspector","simulation","res","timeout","MetaAgError","extractAmountOutWrapper","simulateAggregator","provider","quote","options","Transaction","coinOut","coinWithBalance","metaSettle","slippageBps","tipBps","partner","commissionBps","minAmount","expectedAmount","getExpectedReturn","_7K_META_PUBLISHED_AT","_7K_META_VAULT","_7K_META_CONFIG","events","event","_7K_META_PACKAGE_ID","fn","msg","resolve","reject","timer","Commands","Transaction","TransactionDataBuilder","normalizeStructTag","normalizeSuiAddress","toBase64","v4","SUI_TYPE","SUI_FULL_TYPE","API","SWAP_PATH","CHAIN_ID","NORMALIZED_SUI_TYPE","normalizeStructTag","SUI_TYPE","OkxProvider","options","metaOptions","client","amountIn","coinTypeIn","coinTypeOut","signer","isSystemAddress","request","queryString","url","quote","getHeaders","MetaAgError","v4","signTransaction","tx","coin","buildTx","metaSettle","txBytes","bytes","signature","toBase64","generateHmacSha256","message","secretKey","encoder","encodeBase64","binary","i","key","createHmac","method","requestPath","apiKey","apiPassphrase","projectId","timestamp","stringToSign","replaceFinalizeCommand","packageId","builder","TransactionDataBuilder","cmd","normalizeSuiAddress","Commands","Transaction","tx2","simulateOKXSwap","inspector","simulation","res","simulateSwapTx","HERMES_API","DEFAULT_PROVIDERS","MetaAg","options","getFullnodeUrl","SUI_ADDRESS_ZERO","SuiClient","SuiClientUtils","provider","p","providerOptions","MetaAgError","Bluefin7kProvider","catchImportError","FlowxProvider","CetusProvider","OkxProvider","quote","simulation","isAggregatorProvider","simulateAggregator","simulateOKXSwap","error","timeout","expectedAmount","getExpectedReturn","signer","useGasCoin","signTransaction","getTransactionBlockParams","tx","Transaction","coin","coinWithBalance","txBytes","signature","bytes","toBase64","opts","normalizeStructTag","result","_k","v","requests","updated","slippageBps","isSystemAddress","coinOut","metaSettle","isSwapAPIProvider","opt","e","map","fetchClient","input","init","headers","modifiedInit","API_ENDPOINTS","normalizeTokenType","type","SUI_TYPE","SUI_FULL_TYPE","chunkArray","array","chunkSize","chunks","i","MAX_TOTAL_IDS","MAX_IDS_PER_REQUEST","getCurrentTimestamp","getTokenPrice","id","normalizedId","normalizeTokenType","getTokenPrices","ids","limitedIds","idChunks","timestamp","combinedPrices","chunk","requestBody","response","fetchClient","API_ENDPOINTS","acc","priceResponses","priceResponse","getSuiPrice","SUI_FULL_TYPE","coinWithBalance","Transaction","GLOBAL_CONFIG_ID","RATE_SCALE","SLIPPAGE_SCALE","PACKAGE","LIMIT_ORDER_MODULE_ID","DCA_ORDER_MODULE_ID","CONFIG_MODULE_ID","DCA_MAX_RATE","LO_DCA_API","API_ENDPOINTS","placeLimitOrder","accountAddress","payCoinType","targetCoinType","payCoinAmount","rate","slippage","expireTs","devInspect","tx","Transaction","payCoin","coinWithBalance","LIMIT_ORDER_MODULE_ID","GLOBAL_CONFIG_ID","Transaction","cancelLimitOrder","orderId","payCoinType","targetCoinType","tx","Transaction","LIMIT_ORDER_MODULE_ID","Transaction","claimExpiredLimitOrder","orderId","payCoinType","targetCoinType","tx","Transaction","LIMIT_ORDER_MODULE_ID","formatQueryParams","params","str","key","value","v","getOpenLimitOrders","owner","offset","limit","tokenPair","paramsStr","formatQueryParams","response","fetchClient","LO_DCA_API","getClosedLimitOrders","owner","offset","limit","tokenPair","paramsStr","formatQueryParams","response","fetchClient","LO_DCA_API","coinWithBalance","Transaction","placeDcaOrder","payCoinType","targetCoinType","payCoinAmountEach","numOrders","interval","slippage","minRate","maxRate","tx","coinElements","i","coin","vectorCoin","DCA_ORDER_MODULE_ID","GLOBAL_CONFIG_ID","Transaction","cancelDcaOrder","orderId","payCoinType","targetCoinType","tx","Transaction","DCA_ORDER_MODULE_ID","getOpenDcaOrders","owner","offset","limit","tokenPair","paramsStr","formatQueryParams","response","fetchClient","LO_DCA_API","getClosedDcaOrders","owner","offset","limit","tokenPair","paramsStr","formatQueryParams","response","fetchClient","LO_DCA_API","getDcaOrderExecutions","owner","orderId","offset","limit","paramsStr","formatQueryParams","response","fetchClient","LO_DCA_API","index_default","getTokenPrice","getTokenPrices","getSuiPrice","placeLimitOrder","getOpenLimitOrders","cancelLimitOrder","claimExpiredLimitOrder","getClosedLimitOrders","placeDcaOrder","getOpenDcaOrders","cancelDcaOrder","getClosedDcaOrders","getDcaOrderExecutions","MetaAg"]}
|
|
1
|
+
{"version":3,"sources":["../src/features/metaAg/index.ts","../src/constants/sui.ts","../src/utils/sui.ts","../src/utils/ObjectCache.ts","../src/utils/SuiClientUtils.ts","../src/features/metaAg/providers/okx.ts","../src/constants/tokens.ts","../src/config/fetchClient.ts","../src/constants/apiEndpoints.ts","../src/utils/token.ts","../src/features/prices/index.ts","../src/features/limitDca/placeLimitOrder.ts","../src/features/limitDca/constants.ts","../src/features/limitDca/cancelLimitOrder.ts","../src/features/limitDca/claimExpiredLimitOrder.ts","../src/libs/url.ts","../src/features/limitDca/getOpenLimitOrders.ts","../src/features/limitDca/getClosedLimitOrders.ts","../src/features/limitDca/placeDcaOrder.ts","../src/features/limitDca/cancelDcaOrder.ts","../src/features/limitDca/getOpenDcaOrders.ts","../src/features/limitDca/getClosedDcaOrders.ts","../src/features/limitDca/getDcaOrderExecutions.ts","../src/index.ts"],"sourcesContent":["import { ClientWithCoreApi, CoreClient } from \"@mysten/sui/client\";\nimport { SuiGrpcClient } from \"@mysten/sui/grpc\";\n// The Sui fullnode URL is the same endpoint for JSON-RPC and gRPC — the v2\n// gRPC transport hits the same host as the legacy JSON-RPC. We reuse the\n// upstream helper for the value, not to construct a JSON-RPC client.\nimport { getJsonRpcFullnodeUrl } from \"@mysten/sui/jsonRpc\";\nimport {\n coinWithBalance,\n Transaction,\n TransactionObjectArgument,\n} from \"@mysten/sui/transactions\";\nimport { fromBase64, normalizeStructTag, toBase64 } from \"@mysten/sui/utils\";\nimport { SUI_ADDRESS_ZERO } from \"../../constants/sui\";\nimport {\n Bluefin7kProviderOptions,\n CetusProviderOptions,\n EProvider,\n FlowxProviderOptions,\n isAggregatorProvider,\n isSwapAPIProvider,\n MetaAgOptions,\n MetaFastSwapOptions,\n MetaQuote,\n MetaQuoteOptions,\n MetaSimulationOptions,\n MetaSwapOptions,\n OkxProviderOptions,\n QuoteProvider,\n} from \"../../types/metaAg\";\nimport { isSystemAddress } from \"../../utils/sui\";\nimport { SuiClientUtils } from \"../../utils/SuiClientUtils\";\nimport { getExpectedReturn } from \"../../utils/swap\";\nimport { metaSettle, simulateAggregator, timeout } from \"./common\";\nimport { MetaAgError, MetaAgErrorCode } from \"./error\";\nimport { OkxProvider, simulateOKXSwap } from \"./providers/okx\";\n\nconst DEFAULT_CLIENT = (): ClientWithCoreApi =>\n new SuiGrpcClient({\n baseUrl: getJsonRpcFullnodeUrl(\"mainnet\"),\n network: \"mainnet\",\n });\n\nconst HERMES_API = \"https://hermes.pyth.network\";\n\n/** Result type returned by `MetaAg.fastSwap` (transport-agnostic v2 shape). */\nexport type MetaTransactionResult = Awaited<\n ReturnType<CoreClient[\"executeTransaction\"]>\n>;\n\n/** Subset of v2 `TransactionInclude` flags exposed by `MetaAg.fastSwap`. */\nexport interface MetaExecuteInclude {\n balanceChanges?: boolean;\n effects?: boolean;\n events?: boolean;\n objectTypes?: boolean;\n}\n\nexport interface ExecuteTransactionExtraOptions {\n signal?: AbortSignal;\n /**\n * Flags forwarded to the gRPC `executeTransaction`/`waitForTransaction`\n * call. When omitted, the result contains `digest`/`signatures` only; pass\n * `{ effects: true, events: true }` to populate the corresponding fields.\n */\n include?: MetaExecuteInclude;\n}\n\nconst DEFAULT_PROVIDERS: Required<MetaAgOptions>[\"providers\"] = {\n [EProvider.BLUEFIN7K]: {},\n [EProvider.FLOWX]: {},\n [EProvider.CETUS]: {},\n};\n\nexport class MetaAg {\n client: ClientWithCoreApi;\n private providers: Partial<Record<EProvider, QuoteProvider>> = {};\n private inspector: SuiClientUtils;\n private options: Required<MetaAgOptions>;\n constructor(options?: MetaAgOptions) {\n this.client = options?.client ?? DEFAULT_CLIENT();\n this.options = {\n providers: { ...DEFAULT_PROVIDERS, ...options?.providers },\n slippageBps: options?.slippageBps ?? 100,\n client: this.client,\n hermesApi: options?.hermesApi ?? HERMES_API,\n partner: options?.partner ?? SUI_ADDRESS_ZERO,\n partnerCommissionBps: options?.partnerCommissionBps ?? 0,\n tipBps: options?.tipBps ?? 0,\n };\n this.inspector = new SuiClientUtils(this.client);\n }\n\n private async _getProvider(provider: EProvider) {\n const p = this.providers[provider];\n if (p) return p;\n\n const providerOptions = this.options.providers[provider];\n MetaAgError.assert(\n !!providerOptions,\n `Provider not found: ${provider}`,\n MetaAgErrorCode.PROVIDER_NOT_FOUND,\n { provider },\n );\n switch (provider) {\n case EProvider.BLUEFIN7K:\n const { Bluefin7kProvider } =\n await import(\"./providers/bluefin7k\").catch(\n catchImportError(EProvider.BLUEFIN7K),\n );\n this.providers[EProvider.BLUEFIN7K] = new Bluefin7kProvider(\n providerOptions as Bluefin7kProviderOptions,\n this.options,\n this.client,\n );\n break;\n case EProvider.FLOWX:\n const { FlowxProvider } = await import(\"./providers/flowx\").catch(\n catchImportError(EProvider.FLOWX),\n );\n this.providers[EProvider.FLOWX] = new FlowxProvider(\n providerOptions as FlowxProviderOptions,\n this.client,\n );\n break;\n case EProvider.CETUS:\n const { CetusProvider } = await import(\"./providers/cetus\").catch(\n catchImportError(EProvider.CETUS),\n );\n this.providers[EProvider.CETUS] = new CetusProvider(\n providerOptions as CetusProviderOptions,\n this.options,\n this.client,\n );\n break;\n case EProvider.OKX:\n this.providers[EProvider.OKX] = new OkxProvider(\n providerOptions as OkxProviderOptions,\n this.options,\n this.client,\n );\n break;\n default:\n throw new MetaAgError(\n `Provider not supported: ${provider}`,\n MetaAgErrorCode.PROVIDER_NOT_SUPPORTED,\n { provider },\n );\n }\n return this.providers[provider]!;\n }\n\n private async _simulate(\n provider: QuoteProvider,\n quote: MetaQuote,\n simulation: MetaSimulationOptions,\n ) {\n try {\n if (isAggregatorProvider(provider)) {\n return await simulateAggregator(\n provider,\n quote,\n simulation,\n this.inspector,\n this.options,\n );\n }\n\n switch (quote.provider) {\n case EProvider.OKX:\n return await simulateOKXSwap(\n quote,\n this.inspector,\n simulation,\n this.options,\n );\n default:\n throw new MetaAgError(\n `Provider not supported: ${provider.kind}`,\n MetaAgErrorCode.PROVIDER_NOT_SUPPORTED,\n { provider: provider.kind },\n );\n }\n } catch (error) {\n console.warn(error, { provider: provider.kind, quote: quote.id });\n return undefined;\n }\n }\n\n private async _quote(provider: QuoteProvider, options: MetaQuoteOptions) {\n const quote = await timeout(\n async () => {\n const quote = await provider.quote(options);\n if (!quote) return null;\n const { expectedAmount } = getExpectedReturn(\n quote.rawAmountOut,\n 0,\n this.options.partnerCommissionBps,\n this.options.tipBps,\n );\n quote.amountOut = expectedAmount;\n return quote;\n },\n options.timeout ?? 2000,\n `quote for ${provider.kind} provider from ${options.coinTypeIn} to ${options.coinTypeOut}`,\n );\n\n return quote;\n }\n\n private async _fastSwap(\n { quote, signer, useGasCoin, signTransaction }: MetaFastSwapOptions,\n extraOptions?: ExecuteTransactionExtraOptions,\n ): Promise<MetaTransactionResult> {\n const tx = new Transaction();\n const coin = await this.swap({\n quote,\n signer,\n tx,\n coinIn: coinWithBalance({\n type: quote.coinTypeIn,\n balance: BigInt(quote.amountIn),\n useGasCoin,\n }),\n });\n tx.transferObjects([coin], signer);\n tx.setSenderIfNotSet(signer);\n const txBytes = await tx.build({ client: this.client });\n const { signature, bytes } = await signTransaction(toBase64(txBytes));\n return this.client.core.executeTransaction({\n transaction: fromBase64(bytes),\n signatures: [signature],\n signal: extraOptions?.signal,\n include: extraOptions?.include,\n });\n }\n\n /**\n * Get quotes from all providers\n * @param options - quote options\n * @param simulation - if present, the quote will be simulated\n * @returns quotes from all providers\n */\n async quote(\n options: MetaQuoteOptions,\n simulation?: MetaSimulationOptions,\n ): Promise<MetaQuote[]> {\n const opts: MetaQuoteOptions = {\n ...options,\n coinTypeIn: normalizeStructTag(options.coinTypeIn),\n coinTypeOut: normalizeStructTag(options.coinTypeOut),\n };\n const quotes = await Promise.allSettled(\n Object.entries(this.options.providers)\n .filter(([_k, v]) => !v.disabled)\n .map(async ([provider]) => {\n const p = await this._getProvider(provider as EProvider);\n return this._quote(p, opts);\n }),\n );\n const result = quotes\n .map((quote) =>\n quote.status === \"fulfilled\"\n ? quote.value\n : (console.warn(quote.reason), null),\n )\n .filter((quote) => quote !== null);\n\n if (simulation) {\n const requests = result.map(async (quote) => {\n const provider = await this._getProvider(quote.provider);\n const updated = await this._simulate(provider, quote, simulation);\n quote.simulatedAmountOut = updated?.simulatedAmountOut;\n quote.gasUsed = updated?.gasUsed;\n simulation?.onSimulated?.({ ...quote });\n });\n if (!simulation.onSimulated) {\n await Promise.all(requests);\n }\n }\n\n return result;\n }\n\n /**\n * Build transaction from quote\n * @info Use this function to build composable transaction (ie: add more commands after the swap, consume the coin out object)\n * @warning Providers that build transaction on the fly (typically RFQ, Swap-API providers ie: Okx, ...) are not supported, please use `fastSwap` instead\n * @param options - build tx options\n * @param slippageBps - slippage bps if not specified, fallback to global slippage bps, if none of them specified, default to 100\n * @returns coin out object, you must consume it by transferObjects, or other sub sequence commands\n */\n async swap(\n options: MetaSwapOptions,\n slippageBps?: number,\n ): Promise<TransactionObjectArgument> {\n const provider = await this._getProvider(options.quote.provider);\n MetaAgError.assert(\n !!provider,\n `Provider not found: ${options.quote.provider}`,\n MetaAgErrorCode.PROVIDER_NOT_FOUND,\n { provider: options.quote.provider },\n );\n MetaAgError.assert(\n isAggregatorProvider(provider),\n `Provider does not support swap: ${provider.kind}, use fastSwap instead`,\n MetaAgErrorCode.PROVIDER_NOT_SUPPORT_SWAP,\n { provider: provider.kind },\n );\n MetaAgError.assert(\n options.signer && !isSystemAddress(options.signer),\n \"Invalid signer address\",\n MetaAgErrorCode.INVALID_SIGNER_ADDRESS,\n { signer: options.signer },\n );\n const coinOut = await provider.swap(options);\n options.tx.add(\n metaSettle(\n options.quote,\n coinOut,\n slippageBps ?? this.options.slippageBps ?? 100,\n this.options.tipBps,\n this.options.partner,\n this.options.partnerCommissionBps,\n ),\n );\n options.tx.setSenderIfNotSet(options.signer);\n return coinOut;\n }\n\n /**\n * Build, Sign, and Execute transaction in one step\n * @param options - fast swap options\n * @returns - txDigest of the transaction\n */\n async fastSwap(\n options: MetaFastSwapOptions,\n extraOptions?: ExecuteTransactionExtraOptions,\n ): Promise<MetaTransactionResult> {\n MetaAgError.assert(\n options.signer && !isSystemAddress(options.signer),\n \"Invalid signer address\",\n MetaAgErrorCode.INVALID_SIGNER_ADDRESS,\n { signer: options.signer },\n );\n const provider = await this._getProvider(options.quote.provider);\n if (isAggregatorProvider(provider)) {\n return this._fastSwap(options, extraOptions);\n } else if (isSwapAPIProvider(provider)) {\n return this.client.core.waitForTransaction({\n digest: await provider.fastSwap(options),\n signal: extraOptions?.signal,\n include: extraOptions?.include,\n });\n } else {\n throw new MetaAgError(\n `Provider not supported: ${provider.kind}`,\n MetaAgErrorCode.PROVIDER_NOT_SUPPORTED,\n { provider: provider.kind },\n );\n }\n }\n\n /**\n * Update meta aggregator options\n * @param options - update options payload\n */\n updateMetaAgOptions(options: MetaAgOptions) {\n if (Object.keys(options).length === 0) return;\n this.options.slippageBps = options.slippageBps ?? this.options.slippageBps;\n this.options.partner = options.partner ?? this.options.partner;\n this.options.partnerCommissionBps =\n options.partnerCommissionBps ?? this.options.partnerCommissionBps;\n this.options.tipBps = options.tipBps ?? this.options.tipBps;\n const clientChanged = Boolean(\n options.client && options.client !== this.client,\n );\n const hermesChanged = Boolean(\n options.hermesApi && options.hermesApi !== this.options.hermesApi,\n );\n if (clientChanged) {\n this.client = options.client!;\n this.options.client = this.client;\n this.inspector = new SuiClientUtils(this.client);\n }\n if (hermesChanged) {\n this.options.hermesApi = options.hermesApi!;\n }\n // Providers capture the previous client / Hermes URL — drop them so they\n // re-initialize with the latest options on next use.\n if (clientChanged || hermesChanged) {\n this.providers = {};\n }\n // if update provider's options, we need to re-initialize the provider\n for (const [provider, opt] of Object.entries(options.providers || {})) {\n this.options.providers[provider as EProvider] = {\n ...opt,\n ...this.options.providers[provider as EProvider],\n } as Bluefin7kProviderOptions &\n CetusProviderOptions &\n FlowxProviderOptions &\n OkxProviderOptions;\n delete this.providers[provider as EProvider];\n }\n }\n}\n\nconst catchImportError = (provider: EProvider) => {\n return (e: unknown): never => {\n const map = {\n [EProvider.CETUS]: \"@cetusprotocol/aggregator-sdk\",\n [EProvider.FLOWX]: \"@flowx-finance/sdk\",\n [EProvider.BLUEFIN7K]: \"@bluefin-exchange/bluefin7k-aggregator-sdk\",\n [EProvider.OKX]: \"\",\n };\n console.warn(`Please install ${map[provider]} to use ${provider} provider`);\n throw e;\n };\n};\n","export const SUI_ADDRESS_ZERO =\n \"0x0000000000000000000000000000000000000000000000000000000000000000\";\n","import { Transaction, TransactionArgument } from \"@mysten/sui/transactions\";\nimport { normalizeSuiAddress, parseStructTag } from \"@mysten/sui/utils\";\nimport {\n _7K_META_CONFIG,\n _7K_META_PACKAGE_ID,\n _7K_META_VAULT,\n} from \"../constants/_7k\";\n\nexport const SuiUtils = {\n getSuiCoin(\n amount: bigint | TransactionArgument,\n txb: Transaction,\n ): TransactionArgument {\n const [coin] = txb.splitCoins(txb.gas, [amount]);\n return coin;\n },\n\n getCoinValue(\n coinType: string,\n coinObject: string | TransactionArgument,\n txb: Transaction,\n ): TransactionArgument {\n const inputCoinObject =\n typeof coinObject == \"string\" ? txb.object(coinObject) : coinObject;\n const [value] = txb.moveCall({\n target: `0x2::coin::value`,\n typeArguments: [coinType],\n arguments: [inputCoinObject],\n });\n return value;\n },\n\n isValidStructTag(value: string) {\n try {\n return !!parseStructTag(value);\n } catch (_) {\n return false;\n }\n },\n\n zeroBalance(tx: Transaction, coinType: string) {\n return tx.moveCall({\n target: `0x2::balance::zero`,\n typeArguments: [coinType],\n arguments: [],\n })[0];\n },\n\n zeroCoin(tx: Transaction, coinType: string) {\n return tx.moveCall({\n target: `0x2::coin::zero`,\n typeArguments: [coinType],\n arguments: [],\n })[0];\n },\n\n coinIntoBalance(\n tx: Transaction,\n coinType: string,\n coinObject: TransactionArgument,\n ) {\n return tx.moveCall({\n target: `0x2::coin::into_balance`,\n typeArguments: [coinType],\n arguments: [coinObject],\n })[0];\n },\n\n coinFromBalance(\n tx: Transaction,\n coinType: string,\n balance: TransactionArgument,\n ) {\n return tx.moveCall({\n target: `0x2::coin::from_balance`,\n typeArguments: [coinType],\n arguments: [balance],\n })[0];\n },\n\n balanceDestroyZero(\n tx: Transaction,\n coinType: string,\n balance: TransactionArgument,\n ) {\n tx.moveCall({\n target: `0x2::balance::destroy_zero`,\n typeArguments: [coinType],\n arguments: [balance],\n });\n },\n\n collectDust(tx: Transaction, coinType: string, coin: TransactionArgument) {\n tx.moveCall({\n target: `${_7K_META_PACKAGE_ID}::vault::collect_dust`,\n typeArguments: [coinType],\n arguments: [tx.object(_7K_META_VAULT), tx.object(_7K_META_CONFIG), coin],\n });\n },\n\n transferOrDestroyZeroCoin(\n tx: Transaction,\n coinType: string,\n coin: TransactionArgument,\n address: string,\n ) {\n tx.moveCall({\n target: `${_7K_META_PACKAGE_ID}::utils::transfer_or_destroy`,\n typeArguments: [coinType],\n arguments: [coin, tx.pure.address(address)],\n });\n },\n};\n\nconst RESERVED_ADDRESSES = [\n \"0x0000000000000000000000000000000000000000000000000000000000000000\", // zero\n \"0x0000000000000000000000000000000000000000000000000000000000000001\", // std\n \"0x0000000000000000000000000000000000000000000000000000000000000002\", // sui framework\n \"0x0000000000000000000000000000000000000000000000000000000000000003\", // unknown but we reserved to be safe\n \"0x0000000000000000000000000000000000000000000000000000000000000004\", // unknown but we reserved to be safe\n \"0x0000000000000000000000000000000000000000000000000000000000000005\", // system state\n \"0x0000000000000000000000000000000000000000000000000000000000000006\", // time\n \"0x0000000000000000000000000000000000000000000000000000000000000007\", // unknown but we reserved to be safe\n \"0x0000000000000000000000000000000000000000000000000000000000000008\", // random\n \"0x0000000000000000000000000000000000000000000000000000000000000009\", // unknown but we reserved to be safe\n \"0x0000000000000000000000000000000000000000000000000000000000000403\", // coin deny list\n \"0x000000000000000000000000000000000000000000000000000000000000000c\", // coin registry\n];\n\nexport const isSystemAddress = (address: string) => {\n const addr = normalizeSuiAddress(address);\n return RESERVED_ADDRESSES.includes(addr);\n};\n","import { bcs } from \"@mysten/sui/bcs\";\nimport { ClientWithCoreApi } from \"@mysten/sui/client\";\nimport {\n Command,\n TransactionDataBuilder,\n TransactionPlugin,\n} from \"@mysten/sui/transactions\";\nimport { normalizeSuiAddress } from \"@mysten/sui/utils\";\n\n// `MoveCall: any` is intentional — `Extract` needs a shape check, not a full\n// type match, to pick the discriminated-union arm we want.\ntype MoveCallArgumentTypes = NonNullable<\n NonNullable<Extract<Command, { MoveCall: any }>[\"MoveCall\"]>[\"_argumentTypes\"]\n>;\n\nexport interface ObjectCacheEntry {\n objectId: string;\n version: string;\n digest: string;\n owner: string | null;\n initialSharedVersion: string | null;\n}\n\nexport interface MoveFunctionCacheEntry {\n package: string;\n module: string;\n function: string;\n parameters: MoveCallArgumentTypes;\n}\n\nexport interface CacheEntryTypes {\n OwnedObject: ObjectCacheEntry;\n SharedOrImmutableObject: ObjectCacheEntry;\n MoveFunction: MoveFunctionCacheEntry;\n Custom: unknown;\n}\nexport abstract class AsyncCache {\n protected abstract get<T extends keyof CacheEntryTypes>(\n type: T,\n key: string,\n ): Promise<CacheEntryTypes[T] | null>;\n protected abstract set<T extends keyof CacheEntryTypes>(\n type: T,\n key: string,\n value: CacheEntryTypes[T],\n ): Promise<void>;\n protected abstract delete<T extends keyof CacheEntryTypes>(\n type: T,\n key: string,\n ): Promise<void>;\n abstract clear<T extends keyof CacheEntryTypes>(type?: T): Promise<void>;\n\n async getObject(id: string) {\n const [owned, shared] = await Promise.all([\n this.get(\"OwnedObject\", id),\n this.get(\"SharedOrImmutableObject\", id),\n ]);\n\n return owned ?? shared ?? null;\n }\n\n async getObjects(ids: string[]) {\n return Promise.all(ids.map((id) => this.getObject(id)));\n }\n\n async addObject(object: ObjectCacheEntry) {\n if (object.owner) {\n await this.set(\"OwnedObject\", object.objectId, object);\n } else {\n await this.set(\"SharedOrImmutableObject\", object.objectId, object);\n }\n\n return object;\n }\n\n async addObjects(objects: ObjectCacheEntry[]) {\n await Promise.all(objects.map(async (object) => this.addObject(object)));\n }\n\n async deleteObject(id: string) {\n await Promise.all([\n this.delete(\"OwnedObject\", id),\n this.delete(\"SharedOrImmutableObject\", id),\n ]);\n }\n\n async deleteObjects(ids: string[]) {\n await Promise.all(ids.map((id) => this.deleteObject(id)));\n }\n\n async getMoveFunctionDefinition(ref: {\n package: string;\n module: string;\n function: string;\n }) {\n const functionName = `${normalizeSuiAddress(ref.package)}::${ref.module}::${ref.function}`;\n return this.get(\"MoveFunction\", functionName);\n }\n\n async addMoveFunctionDefinition(functionEntry: MoveFunctionCacheEntry) {\n const pkg = normalizeSuiAddress(functionEntry.package);\n const functionName = `${pkg}::${functionEntry.module}::${functionEntry.function}`;\n const entry = {\n ...functionEntry,\n package: pkg,\n };\n\n await this.set(\"MoveFunction\", functionName, entry);\n\n return entry;\n }\n\n async deleteMoveFunctionDefinition(ref: {\n package: string;\n module: string;\n function: string;\n }) {\n const functionName = `${normalizeSuiAddress(ref.package)}::${ref.module}::${ref.function}`;\n await this.delete(\"MoveFunction\", functionName);\n }\n\n async getCustom<T>(key: string) {\n return this.get(\"Custom\", key) as Promise<T | null>;\n }\n\n async setCustom<T>(key: string, value: T) {\n return this.set(\"Custom\", key, value);\n }\n\n async deleteCustom(key: string) {\n return this.delete(\"Custom\", key);\n }\n}\n\nexport class InMemoryObjectCache extends AsyncCache {\n #caches = {\n OwnedObject: new Map<string, ObjectCacheEntry>(),\n SharedOrImmutableObject: new Map<string, ObjectCacheEntry>(),\n MoveFunction: new Map<string, MoveFunctionCacheEntry>(),\n Custom: new Map<string, unknown>(),\n };\n\n protected async get<T extends keyof CacheEntryTypes>(type: T, key: string) {\n return (this.#caches[type].get(key) as CacheEntryTypes[T]) ?? null;\n }\n\n protected async set<T extends keyof CacheEntryTypes>(\n type: T,\n key: string,\n value: CacheEntryTypes[T],\n ) {\n (this.#caches[type] as Map<string, typeof value>).set(key, value as never);\n }\n\n protected async delete<T extends keyof CacheEntryTypes>(\n type: T,\n key: string,\n ) {\n this.#caches[type].delete(key);\n }\n\n async clear<T extends keyof CacheEntryTypes>(type?: T) {\n if (type) {\n this.#caches[type].clear();\n } else {\n for (const cache of Object.values(this.#caches)) {\n cache.clear();\n }\n }\n }\n}\n\nexport interface ObjectCacheOptions {\n cache?: AsyncCache;\n client: ClientWithCoreApi;\n onEffects?: (\n effects: typeof bcs.TransactionEffects.$inferType,\n ) => Promise<void>;\n}\n\nexport class CustomObjectCache {\n #client: ClientWithCoreApi;\n #cache: AsyncCache;\n #onEffects?: (\n effects: typeof bcs.TransactionEffects.$inferType,\n ) => Promise<void>;\n\n constructor({\n cache = new InMemoryObjectCache(),\n onEffects,\n client,\n }: ObjectCacheOptions) {\n this.#client = client;\n this.#cache = cache;\n this.#onEffects = onEffects;\n }\n\n private async applyCache(\n transactionData: TransactionDataBuilder,\n unresolvedObjects: string[],\n ) {\n const cached = (await this.#cache.getObjects(unresolvedObjects)).filter(\n (obj) => obj !== null,\n );\n\n const byId = new Map(cached.map((obj) => [obj!.objectId, obj]));\n const unresolved: string[] = [];\n for (const input of transactionData.inputs) {\n if (!input.UnresolvedObject) {\n continue;\n }\n\n const cached = byId.get(input.UnresolvedObject.objectId);\n\n if (!cached) {\n unresolved.push(input.UnresolvedObject.objectId);\n continue;\n }\n\n if (\n cached.initialSharedVersion &&\n !input.UnresolvedObject.initialSharedVersion\n ) {\n input.UnresolvedObject.initialSharedVersion =\n cached.initialSharedVersion;\n } else {\n if (cached.version && !input.UnresolvedObject.version) {\n input.UnresolvedObject.version = cached.version;\n }\n\n if (cached.digest && !input.UnresolvedObject.digest) {\n input.UnresolvedObject.digest = cached.digest;\n }\n }\n }\n return unresolved;\n }\n\n private async resolveObjects(\n transactionData: TransactionDataBuilder,\n unresolved: string[],\n ) {\n const unresolvedObjects = await this.applyCache(\n transactionData,\n unresolved,\n );\n if (unresolvedObjects.length === 0) {\n return [];\n }\n const dedup = [...new Set(unresolvedObjects)];\n const res = await this.#client.core.getObjects({\n objectIds: dedup,\n });\n const objects: ObjectCacheEntry[] = [];\n for (const obj of res.objects) {\n if (obj instanceof Error) {\n continue;\n }\n const owner = obj.owner;\n\n const initialSharedVersion =\n owner.$kind === \"Shared\" ? owner.Shared.initialSharedVersion : null;\n const ownerAddress =\n owner.$kind === \"AddressOwner\"\n ? owner.AddressOwner\n : owner.$kind === \"ObjectOwner\"\n ? owner.ObjectOwner\n : null;\n const cached: ObjectCacheEntry = {\n objectId: obj.objectId,\n version: obj.version,\n digest: obj.digest,\n initialSharedVersion,\n owner: ownerAddress,\n };\n objects.push(cached);\n }\n await this.#cache.addObjects(objects);\n return await this.applyCache(transactionData, unresolvedObjects);\n }\n\n asPlugin(): TransactionPlugin {\n return async (transactionData, _options, next) => {\n const unresolvedObjects = transactionData.inputs\n .filter((input) => input.UnresolvedObject)\n .map((input) => input.UnresolvedObject!.objectId);\n\n // if object is not in cache yet, fetch from RPC and save to cache and resolve all objects\n await this.resolveObjects(transactionData, unresolvedObjects);\n\n await Promise.all(\n transactionData.commands.map(async (commands) => {\n if (commands.MoveCall) {\n const def = await this.getMoveFunctionDefinition({\n package: commands.MoveCall.package,\n module: commands.MoveCall.module,\n function: commands.MoveCall.function,\n });\n\n if (def) {\n commands.MoveCall._argumentTypes = def.parameters;\n }\n }\n }),\n );\n\n await next();\n\n await Promise.all(\n transactionData.commands.map(async (commands) => {\n if (commands.MoveCall?._argumentTypes) {\n await this.#cache.addMoveFunctionDefinition({\n package: commands.MoveCall.package,\n module: commands.MoveCall.module,\n function: commands.MoveCall.function,\n parameters: commands.MoveCall._argumentTypes,\n });\n }\n }),\n );\n };\n }\n\n async clear() {\n await this.#cache.clear();\n }\n\n async getMoveFunctionDefinition(ref: {\n package: string;\n module: string;\n function: string;\n }) {\n return this.#cache.getMoveFunctionDefinition(ref);\n }\n\n async getObjects(ids: string[]) {\n return this.#cache.getObjects(ids);\n }\n\n async deleteObjects(ids: string[]) {\n return this.#cache.deleteObjects(ids);\n }\n\n async clearOwnedObjects() {\n await this.#cache.clear(\"OwnedObject\");\n }\n\n async clearCustom() {\n await this.#cache.clear(\"Custom\");\n }\n\n async getCustom<T>(key: string) {\n return this.#cache.getCustom<T>(key);\n }\n\n async setCustom<T>(key: string, value: T) {\n return this.#cache.setCustom(key, value);\n }\n\n async deleteCustom(key: string) {\n return this.#cache.deleteCustom(key);\n }\n\n async applyEffects(effects: typeof bcs.TransactionEffects.$inferType) {\n if (!effects.V2) {\n throw new Error(\n `Unsupported transaction effects version ${effects.$kind}`,\n );\n }\n\n const { lamportVersion, changedObjects } = effects.V2;\n\n const deletedIds: string[] = [];\n const addedObjects: ObjectCacheEntry[] = [];\n\n changedObjects.forEach(([id, change]) => {\n if (change.outputState.NotExist) {\n deletedIds.push(id);\n } else if (change.outputState.ObjectWrite) {\n const [digest, owner] = change.outputState.ObjectWrite;\n\n addedObjects.push({\n objectId: id,\n digest,\n version: lamportVersion,\n owner: owner.AddressOwner ?? owner.ObjectOwner ?? null,\n initialSharedVersion: owner.Shared?.initialSharedVersion ?? null,\n });\n }\n });\n\n await Promise.all([\n this.#cache.addObjects(addedObjects),\n this.#cache.deleteObjects(deletedIds),\n this.#onEffects?.(effects),\n ]);\n }\n}\n","import { ClientWithCoreApi, SuiClientTypes } from \"@mysten/sui/client\";\nimport { Transaction } from \"@mysten/sui/transactions\";\nimport { CustomObjectCache } from \"./ObjectCache\";\n\nexport interface SimulateTransactionInput {\n sender: string;\n transactionBlock: Transaction;\n}\n\nexport type SimulateTransactionResult =\n SuiClientTypes.SimulateTransactionResult<{\n effects: true;\n events: true;\n commandResults: true;\n }>;\n\n/**\n * Utility class for interacting with the Sui blockchain via any\n * {@link ClientWithCoreApi} implementation (gRPC, GraphQL, JSON-RPC).\n *\n * Wraps `client.core.simulateTransaction` and applies the shared\n * {@link CustomObjectCache} build plugin so multi-object lookups are\n * batched and cached on the hot path.\n */\nexport class SuiClientUtils {\n #devInspectCache: CustomObjectCache;\n // The Transaction.addBuildPlugin API has no idempotency guard: calling it\n // twice with the same plugin instance pushes two entries and runs the\n // cache plugin twice on the next build. Track which transactions have\n // already had the plugin attached.\n #attachedTxns = new WeakSet<Transaction>();\n\n /**\n * Creates a new instance of SuiClientUtils\n * @param client - Any Sui client implementing `ClientWithCoreApi`\n */\n constructor(private client: ClientWithCoreApi) {\n this.#devInspectCache = new CustomObjectCache({ client: this.client });\n }\n\n simulateTransaction = async (\n params: SimulateTransactionInput,\n ): Promise<SimulateTransactionResult> => {\n params.transactionBlock.setSenderIfNotSet(params.sender);\n if (!this.#attachedTxns.has(params.transactionBlock)) {\n params.transactionBlock.addBuildPlugin(this.#devInspectCache.asPlugin());\n this.#attachedTxns.add(params.transactionBlock);\n }\n try {\n const res = await this.client.core.simulateTransaction({\n transaction: params.transactionBlock,\n checksEnabled: false,\n include: {\n effects: true,\n events: true,\n commandResults: true,\n },\n });\n return res;\n } catch (error) {\n await this.#devInspectCache.clear();\n throw error;\n } finally {\n await this.#devInspectCache.clearOwnedObjects();\n }\n };\n}\n","import { ClientWithCoreApi } from \"@mysten/sui/client\";\nimport {\n TransactionCommands as Commands,\n Transaction,\n TransactionDataBuilder,\n TransactionObjectArgument,\n} from \"@mysten/sui/transactions\";\nimport {\n fromBase64,\n normalizeStructTag,\n normalizeSuiAddress,\n toBase64,\n} from \"@mysten/sui/utils\";\nimport { v4 } from \"uuid\";\nimport { SUI_TYPE } from \"../../../constants/tokens\";\nimport {\n EProvider,\n MetaAgOptions,\n MetaFastSwapOptions,\n MetaQuote,\n MetaQuoteOptions,\n MetaSimulationOptions,\n MetaSwapOptions,\n OkxProviderOptions,\n QuoteProvider,\n SwapAPIProvider,\n} from \"../../../types/metaAg\";\nimport { OkxSwapRequest, OkxSwapResponse } from \"../../../types/okx\";\nimport { isSystemAddress } from \"../../../utils/sui\";\nimport { SuiClientUtils } from \"../../../utils/SuiClientUtils\";\nimport { assertQuoteProvider, metaSettle, simulateSwapTx } from \"../common\";\nimport { MetaAgError, MetaAgErrorCode } from \"../error\";\n\nconst API = \"https://web3.okx.com\";\nconst SWAP_PATH = \"/api/v6/dex/aggregator/swap\";\nconst CHAIN_ID = \"784\";\nconst NORMALIZED_SUI_TYPE = normalizeStructTag(SUI_TYPE);\nexport class OkxProvider implements QuoteProvider, SwapAPIProvider {\n readonly kind = EProvider.OKX;\n constructor(\n private readonly options: OkxProviderOptions,\n private readonly metaOptions: Required<MetaAgOptions>,\n private readonly client: ClientWithCoreApi,\n ) {}\n\n async quote({\n amountIn,\n coinTypeIn,\n coinTypeOut,\n signer,\n }: MetaQuoteOptions): Promise<MetaQuote | null> {\n if (!signer || isSystemAddress(signer)) return null;\n const request: OkxSwapRequest = {\n chainIndex: CHAIN_ID,\n amount: amountIn,\n fromTokenAddress:\n coinTypeIn === NORMALIZED_SUI_TYPE ? SUI_TYPE : coinTypeIn,\n toTokenAddress:\n coinTypeOut === NORMALIZED_SUI_TYPE ? SUI_TYPE : coinTypeOut,\n slippagePercent: (this.metaOptions.slippageBps / 100).toString(),\n userWalletAddress: signer,\n };\n const queryString = \"?\" + new URLSearchParams(request as any).toString();\n const url = `${this.options.api ?? API}${SWAP_PATH}${queryString}`;\n const response = await fetch(url, {\n headers: await getHeaders(this.options, \"GET\", SWAP_PATH, queryString),\n });\n const quote = (await response.json()) as OkxSwapResponse;\n MetaAgError.assert(\n quote.code === \"0\" && quote.data.length > 0,\n \"No quote found\",\n MetaAgErrorCode.QUOTE_NOT_FOUND,\n { provider: this.kind },\n );\n return {\n id: v4(),\n provider: this.kind,\n coinTypeIn,\n coinTypeOut,\n amountIn,\n amountOut: quote.data[0].routerResult.toTokenAmount,\n rawAmountOut: quote.data[0].routerResult.toTokenAmount,\n quote: quote.data[0],\n };\n }\n\n async fastSwap(options: MetaFastSwapOptions): Promise<string> {\n const { quote, signer, signTransaction } = options;\n assertQuoteProvider(quote, EProvider.OKX);\n const { tx, coin } = buildTx({ quote, signer });\n tx.add(\n metaSettle(\n quote,\n coin,\n this.metaOptions.slippageBps,\n this.metaOptions.tipBps,\n this.metaOptions.partner,\n this.metaOptions.partnerCommissionBps,\n ),\n );\n tx.transferObjects([coin], signer);\n const txBytes = await tx.build({ client: this.client });\n const { bytes, signature } = await signTransaction(toBase64(txBytes));\n const res = await this.client.core.executeTransaction({\n transaction: fromBase64(bytes),\n signatures: [signature],\n });\n // Only `Transaction.digest` means the chain accepted and executed the tx\n // successfully. `FailedTransaction.digest` represents a reverted tx and\n // must not be returned as a success digest — the caller would otherwise\n // `waitForTransaction` on a tx that already failed.\n if (!res.Transaction?.digest) {\n throw new MetaAgError(\n \"OKX transaction failed or returned no digest\",\n MetaAgErrorCode.SIMULATION_FAILED,\n { error: res.FailedTransaction?.digest ?? \"no digest\" },\n );\n }\n return res.Transaction.digest;\n }\n}\n\nasync function generateHmacSha256(message: string, secretKey: string) {\n const encoder = new TextEncoder();\n const encodeBase64 = (bytes: Uint8Array) => {\n if (typeof Buffer !== \"undefined\") {\n return Buffer.from(bytes).toString(\"base64\");\n }\n let binary = \"\";\n for (let i = 0; i < bytes.byteLength; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n if (typeof btoa !== \"undefined\") {\n return btoa(binary);\n }\n throw new MetaAgError(\"Base64 encoder not available in this environment\");\n };\n\n if (typeof globalThis !== \"undefined\" && globalThis.crypto?.subtle) {\n const key = await globalThis.crypto.subtle.importKey(\n \"raw\",\n encoder.encode(secretKey),\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\"],\n );\n const signature = await globalThis.crypto.subtle.sign(\n \"HMAC\",\n key,\n encoder.encode(message),\n );\n return encodeBase64(new Uint8Array(signature));\n }\n\n const { createHmac } = await import(\"node:crypto\");\n return createHmac(\"sha256\", secretKey).update(message).digest(\"base64\");\n}\n\nasync function getHeaders(\n options: OkxProviderOptions,\n method: string,\n requestPath: string,\n queryString = \"\",\n) {\n const { apiKey, secretKey, apiPassphrase, projectId } = options;\n if (!apiKey || !secretKey || !apiPassphrase || !projectId) {\n throw new MetaAgError(\"Missing required environment variables\");\n }\n\n const timestamp = new Date().toISOString();\n const stringToSign = timestamp + method + requestPath + queryString;\n return {\n \"Content-Type\": \"application/json\",\n \"OK-ACCESS-KEY\": apiKey,\n \"OK-ACCESS-SIGN\": await generateHmacSha256(stringToSign, secretKey),\n \"OK-ACCESS-TIMESTAMP\": timestamp,\n \"OK-ACCESS-PASSPHRASE\": apiPassphrase,\n \"OK-ACCESS-PROJECT\": projectId,\n };\n}\n\nconst replaceFinalizeCommand = (\n tx: Transaction,\n packageId: string,\n): { tx: Transaction; coin: TransactionObjectArgument } => {\n const builder = TransactionDataBuilder.restore(tx.getData());\n const i = builder.commands.findIndex(\n (cmd) =>\n cmd.$kind === \"MoveCall\" &&\n normalizeSuiAddress(cmd.MoveCall.package) ===\n normalizeSuiAddress(packageId) &&\n cmd.MoveCall.module === \"router\" &&\n cmd.MoveCall.function === \"finalize\",\n );\n\n const cmd = builder.commands[i];\n MetaAgError.assert(\n cmd.MoveCall,\n \"OKX: Finalize command not found\",\n MetaAgErrorCode.OKX_FINALIZE_COMMAND_NOT_FOUND,\n { packageId },\n );\n builder.replaceCommand(\n i,\n Commands.MoveCall({\n package: packageId,\n module: \"router\",\n function: \"finalize_without_transfer\",\n typeArguments: cmd.MoveCall.typeArguments,\n arguments: [\n cmd.MoveCall.arguments[0],\n cmd.MoveCall.arguments[5],\n cmd.MoveCall.arguments[6],\n ],\n }),\n );\n const tx2 = Transaction.from(builder.build());\n return { tx: tx2, coin: { NestedResult: [i, 0] } };\n};\n\nconst buildTx = (options: Omit<MetaSwapOptions, \"coinIn\" | \"tx\">) => {\n const { quote, signer } = options;\n assertQuoteProvider(quote, EProvider.OKX);\n const tx = Transaction.from(quote.quote.tx.data);\n tx.setSenderIfNotSet(signer);\n const { tx: tx2, coin } = replaceFinalizeCommand(tx, quote.quote.tx.to);\n\n return { tx: tx2, coin };\n};\n\nexport const simulateOKXSwap = async <\n T extends MetaQuote & { provider: EProvider.OKX },\n>(\n quote: T,\n inspector: SuiClientUtils,\n simulation: MetaSimulationOptions,\n metaOptions: Required<MetaAgOptions>,\n) => {\n const { tx, coin } = buildTx({ quote, signer: quote.quote.tx.from });\n tx.add(\n metaSettle(\n quote,\n coin,\n 10000,\n metaOptions.tipBps,\n metaOptions.partner,\n metaOptions.partnerCommissionBps,\n ),\n );\n tx.transferObjects([coin], quote.quote.tx.from);\n const res = await simulateSwapTx(tx, inspector, simulation);\n return {\n id: quote.id,\n provider: quote.provider,\n ...res,\n };\n};\n","export const SUI_TYPE = \"0x2::sui::SUI\";\n\nexport const SUI_FULL_TYPE =\n \"0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI\";\n\nexport const USDC_TOKEN_TYPE =\n \"0x5d4b302506645c37ff133b98c4b50a5ae14841659738d6d733d59d0d217a93bf::coin::COIN\";\n\nexport const NATIVE_USDC_TOKEN_TYPE =\n \"0xdba34672e30cb065b1f93e3ab55318768fd6fef66c15942c9f7cb846e2f900e7::usdc::USDC\";\n","export async function fetchClient(\n input: string,\n init?: RequestInit,\n): Promise<Response> {\n const headers = new Headers(init?.headers);\n\n // intercept the request and add the headers go here...\n const modifiedInit: RequestInit = {\n ...init,\n headers,\n };\n\n return fetch(input, modifiedInit);\n}\n","export const API_ENDPOINTS = {\n MAIN: \"https://api.7k.ag\",\n LO_DCA: \"https://lod-dca.7k.ag\",\n PRICES: \"https://lp-pro-api.7k.ag/price\",\n STATISTIC: \"https://statistic.7k.ag\",\n};\n","import { SUI_FULL_TYPE, SUI_TYPE } from \"../constants/tokens\";\n\nexport function normalizeTokenType(type: string) {\n return type === SUI_TYPE ? SUI_FULL_TYPE : type;\n}\n\nexport function denormalizeTokenType(type: string) {\n return type === SUI_FULL_TYPE ? SUI_TYPE : type;\n}\n\nexport function checkIsSui(type: string) {\n return type === SUI_FULL_TYPE || type === SUI_TYPE;\n}\n","import { fetchClient } from \"../../config/fetchClient\";\nimport { API_ENDPOINTS } from \"../../constants/apiEndpoints\";\nimport { SUI_FULL_TYPE } from \"../../constants/tokens\";\nimport { normalizeTokenType } from \"../../utils/token\";\n\n/**\n * Response structure from the new price service API\n */\ninterface TokenPriceResponse {\n token_id: string;\n timestamp: number;\n price: number;\n}\n\n/**\n * Request structure for the batch price API\n */\ninterface BatchPriceRequest {\n timestamp: string; // Unix timestamp as string\n token_ids: string[];\n}\n\nconst chunkArray = <T>(array: T[], chunkSize: number): T[][] => {\n const chunks: T[][] = [];\n for (let i = 0; i < array.length; i += chunkSize) {\n chunks.push(array.slice(i, i + chunkSize));\n }\n return chunks;\n};\n\nconst MAX_TOTAL_IDS = 500;\nconst MAX_IDS_PER_REQUEST = 100;\n\n/**\n * Get the current Unix timestamp as a string\n */\nfunction getCurrentTimestamp(): string {\n return Math.floor(Date.now() / 1000).toString();\n}\n\n/**\n * Get price for a single token\n * @param id - Token ID (coin type)\n * @returns Token price, or 0 if not found or on error\n */\nexport async function getTokenPrice(id: string): Promise<number> {\n try {\n const normalizedId = normalizeTokenType(id);\n const prices = await getTokenPrices([normalizedId]);\n return prices[normalizedId] || 0;\n } catch (_) {\n return 0;\n }\n}\n\n/**\n * Get prices for multiple tokens\n * @param ids - Array of token IDs (coin types)\n * @returns Record mapping token IDs to their prices\n */\nexport async function getTokenPrices(\n ids: string[],\n): Promise<Record<string, number>> {\n try {\n if (ids.length === 0) {\n return {};\n }\n\n const limitedIds = ids.slice(0, MAX_TOTAL_IDS).map(normalizeTokenType);\n const idChunks = chunkArray(limitedIds, MAX_IDS_PER_REQUEST);\n const timestamp = getCurrentTimestamp();\n\n const responses = await Promise.all(\n idChunks.map(async (chunk) => {\n const requestBody: BatchPriceRequest = {\n timestamp,\n token_ids: chunk,\n };\n\n const response = await fetchClient(\n `${API_ENDPOINTS.PRICES}/prices/batch`,\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(requestBody),\n },\n );\n\n if (!response.ok) {\n throw new Error(`Price API returned status ${response.status}`);\n }\n\n const pricesRes = (await response.json()) as TokenPriceResponse[];\n return pricesRes;\n }),\n );\n\n // Combine all responses into a single record\n const combinedPrices = responses.reduce(\n (acc, priceResponses) => {\n priceResponses.forEach((priceResponse) => {\n acc[priceResponse.token_id] = priceResponse.price;\n });\n return acc;\n },\n {} as Record<string, number>,\n );\n\n // Ensure all requested IDs are in the result (set to 0 if not found)\n const finalPrices = limitedIds.reduce(\n (acc, id) => {\n acc[id] = combinedPrices[id] || 0;\n return acc;\n },\n {} as Record<string, number>,\n );\n\n return finalPrices;\n } catch (_) {\n // On error, return 0 for all requested IDs\n return ids.slice(0, MAX_TOTAL_IDS).reduce(\n (acc, id) => {\n acc[normalizeTokenType(id)] = 0;\n return acc;\n },\n {} as Record<string, number>,\n );\n }\n}\n\n/**\n * Get the current SUI token price\n * @returns SUI price, or 0 if not found or on error\n */\nexport async function getSuiPrice(): Promise<number> {\n return await getTokenPrice(SUI_FULL_TYPE);\n}\n","import { coinWithBalance, Transaction } from \"@mysten/sui/transactions\";\nimport { GLOBAL_CONFIG_ID, LIMIT_ORDER_MODULE_ID } from \"./constants\";\n\nexport interface PlaceLimitOrderParams {\n accountAddress: string;\n payCoinType: string;\n targetCoinType: string;\n payCoinAmount: bigint;\n rate: bigint;\n slippage: bigint;\n expireTs: bigint;\n devInspect?: boolean;\n}\n\nexport async function placeLimitOrder({\n accountAddress,\n payCoinType,\n targetCoinType,\n payCoinAmount,\n rate,\n slippage,\n expireTs,\n devInspect,\n}: PlaceLimitOrderParams) {\n const tx = new Transaction();\n const payCoin = tx.add(\n coinWithBalance({\n type: payCoinType,\n balance: payCoinAmount,\n useGasCoin: !devInspect,\n }),\n );\n\n tx.moveCall({\n target: `${LIMIT_ORDER_MODULE_ID}::place_limit_order`,\n arguments: [\n tx.object(GLOBAL_CONFIG_ID),\n payCoin,\n tx.pure.u64(rate),\n tx.pure.u64(slippage),\n tx.pure.u64(expireTs),\n tx.object.clock(),\n ],\n typeArguments: [payCoinType, targetCoinType],\n });\n\n tx.setSenderIfNotSet(accountAddress);\n return tx;\n}\n","import { API_ENDPOINTS } from \"../../constants/apiEndpoints\";\n\nexport const GLOBAL_CONFIG_ID =\n \"0xffc7f420b481ed7a012b42e125fd7e5716b5673759cf4629e5fcfebce970a72d\";\nexport const RATE_SCALE = BigInt(\"1000000000000\");\nexport const SLIPPAGE_SCALE = BigInt(\"10000\");\nexport const PACKAGE =\n \"0x0ef0f805710cf53c10f29c4f73e1144a662747e1839689a846e2520cae122adc\";\nexport const LIMIT_ORDER_MODULE_ID = `${PACKAGE}::limit_order`;\nexport const DCA_ORDER_MODULE_ID = `${PACKAGE}::dca_order`;\nexport const CONFIG_MODULE_ID = `${PACKAGE}::config`;\nexport const DCA_MAX_RATE = BigInt(\"18446744073709551615\");\nexport const LO_DCA_API = `${API_ENDPOINTS.LO_DCA}/api`;\n","import { Transaction } from \"@mysten/sui/transactions\";\nimport { LIMIT_ORDER_MODULE_ID } from \"./constants\";\n\ninterface CancelLimitOrderParams {\n orderId: string;\n payCoinType: string;\n targetCoinType: string;\n}\n\nexport async function cancelLimitOrder({\n orderId,\n payCoinType,\n targetCoinType,\n}: CancelLimitOrderParams) {\n const tx = new Transaction();\n\n tx.moveCall({\n target: `${LIMIT_ORDER_MODULE_ID}::cancel_limit_order`,\n typeArguments: [payCoinType, targetCoinType],\n arguments: [tx.object(orderId), tx.object.clock()],\n });\n\n return tx;\n}\n","import { Transaction } from \"@mysten/sui/transactions\";\nimport { LIMIT_ORDER_MODULE_ID } from \"./constants\";\n\ninterface ClaimExpiredLimitOrderParams {\n orderId: string;\n payCoinType: string;\n targetCoinType: string;\n}\n\nexport async function claimExpiredLimitOrder({\n orderId,\n payCoinType,\n targetCoinType,\n}: ClaimExpiredLimitOrderParams) {\n const tx = new Transaction();\n\n tx.moveCall({\n target: `${LIMIT_ORDER_MODULE_ID}::claim_expired_order`,\n typeArguments: [payCoinType, targetCoinType],\n arguments: [tx.object(orderId), tx.object.clock()],\n });\n\n return tx;\n}\n","export function formatQueryParams(params: Record<string, any>) {\n let str = \"\";\n Object.entries(params).forEach(([key, value]) => {\n if (Array.isArray(value)) {\n for (const v of value) {\n str += str ? `&${key}=${v}` : `${key}=${v}`;\n }\n } else if (value !== undefined) {\n str += str ? `&${key}=${value}` : `${key}=${value}`;\n }\n });\n return str;\n}\n","import { fetchClient } from \"../../config/fetchClient\";\nimport { formatQueryParams } from \"../../libs/url\";\nimport { LO_DCA_API } from \"./constants\";\nimport { LimitOrder, LoDcaQueryParams } from \"./types\";\n\ninterface Params {\n owner: string;\n offset: number;\n limit: number;\n tokenPair?: string;\n}\n\nexport async function getOpenLimitOrders({\n owner,\n offset = 0,\n limit = 10,\n tokenPair,\n}: Params) {\n const queryParams: LoDcaQueryParams = {\n owner,\n statuses: [\"ACTIVE\", \"EXPIRED\"],\n offset,\n limit,\n tokenPair,\n };\n const paramsStr = formatQueryParams(queryParams);\n\n const response = await fetchClient(`${LO_DCA_API}/limit-orders?${paramsStr}`);\n\n if (!response.ok) {\n throw new Error(\"Failed to fetch open limit orders\");\n }\n\n const orders = (await response.json()) as LimitOrder[];\n return orders;\n}\n","import { fetchClient } from \"../../config/fetchClient\";\nimport { formatQueryParams } from \"../../libs/url\";\nimport { LO_DCA_API } from \"./constants\";\nimport { LimitOrder, LoDcaQueryParams } from \"./types\";\n\ninterface Params {\n owner: string;\n offset: number;\n limit: number;\n tokenPair?: string;\n}\n\nexport async function getClosedLimitOrders({\n owner,\n offset = 0,\n limit = 10,\n tokenPair,\n}: Params) {\n const queryParams: LoDcaQueryParams = {\n owner,\n statuses: [\"CLOSED\"],\n offset,\n limit,\n tokenPair,\n };\n const paramsStr = formatQueryParams(queryParams);\n\n const response = await fetchClient(`${LO_DCA_API}/limit-orders?${paramsStr}`);\n\n if (!response.ok) {\n throw new Error(\"Failed to fetch closed limit orders\");\n }\n\n const orders = (await response.json()) as LimitOrder[];\n return orders;\n}\n","import { DCA_ORDER_MODULE_ID, GLOBAL_CONFIG_ID } from \"./constants\";\nimport {\n coinWithBalance,\n Transaction,\n TransactionObjectArgument,\n} from \"@mysten/sui/transactions\";\n\ninterface PlaceDcaOrderParams {\n payCoinType: string;\n targetCoinType: string;\n payCoinAmountEach: bigint;\n numOrders: number;\n interval: number;\n slippage: bigint;\n minRate: bigint;\n maxRate: bigint;\n}\n\nexport async function placeDcaOrder({\n payCoinType,\n targetCoinType,\n payCoinAmountEach,\n numOrders,\n interval,\n slippage,\n minRate,\n maxRate,\n}: PlaceDcaOrderParams) {\n const tx = new Transaction();\n\n const coinElements: TransactionObjectArgument[] = [];\n for (let i = 0; i < numOrders; i++) {\n const coin = coinWithBalance({\n type: payCoinType,\n balance: payCoinAmountEach,\n });\n coinElements.push(coin);\n }\n const vectorCoin = tx.makeMoveVec({\n elements: coinElements,\n });\n tx.moveCall({\n target: `${DCA_ORDER_MODULE_ID}::place_dca_order`,\n arguments: [\n tx.object(GLOBAL_CONFIG_ID),\n vectorCoin,\n tx.pure.u64(interval),\n tx.pure.u64(slippage),\n tx.pure.u64(minRate),\n tx.pure.u64(maxRate),\n tx.object.clock(),\n ],\n typeArguments: [payCoinType, targetCoinType],\n });\n\n return tx;\n}\n","import { Transaction } from \"@mysten/sui/transactions\";\nimport { DCA_ORDER_MODULE_ID } from \"./constants\";\n\ninterface CancelDcaOrderParams {\n orderId: string;\n payCoinType: string;\n targetCoinType: string;\n}\n\nexport async function cancelDcaOrder({\n orderId,\n payCoinType,\n targetCoinType,\n}: CancelDcaOrderParams) {\n const tx = new Transaction();\n\n tx.moveCall({\n target: `${DCA_ORDER_MODULE_ID}::cancel_dca_order`,\n arguments: [tx.object(orderId), tx.object.clock()],\n typeArguments: [payCoinType, targetCoinType],\n });\n\n return tx;\n}\n","import { fetchClient } from \"../../config/fetchClient\";\nimport { formatQueryParams } from \"../../libs/url\";\nimport { LO_DCA_API } from \"./constants\";\nimport { DcaOrder, LoDcaQueryParams } from \"./types\";\n\ninterface Params {\n owner: string;\n offset: number;\n limit: number;\n tokenPair?: string;\n}\n\nexport async function getOpenDcaOrders({\n owner,\n offset = 0,\n limit = 10,\n tokenPair,\n}: Params) {\n const queryParams: LoDcaQueryParams = {\n owner,\n statuses: [\"ACTIVE\", \"EXPIRED\"],\n offset,\n limit,\n tokenPair,\n };\n const paramsStr = formatQueryParams(queryParams);\n\n const response = await fetchClient(`${LO_DCA_API}/dca-orders?${paramsStr}`);\n\n if (!response.ok) {\n throw new Error(\"Failed to fetch open dca orders\");\n }\n\n const orders = (await response.json()) as DcaOrder[];\n return orders;\n}\n","import { fetchClient } from \"../../config/fetchClient\";\nimport { formatQueryParams } from \"../../libs/url\";\nimport { LO_DCA_API } from \"./constants\";\nimport { LoDcaOrderExecution, LoDcaQueryParams } from \"./types\";\n\ninterface Params {\n owner: string;\n offset: number;\n limit: number;\n tokenPair?: string;\n}\n\nexport async function getClosedDcaOrders({\n owner,\n offset = 0,\n limit = 10,\n tokenPair,\n}: Params) {\n const queryParams: LoDcaQueryParams = {\n owner,\n statuses: [\"SUCCESS\"],\n offset,\n limit,\n orderType: \"DCA\",\n tokenPair,\n };\n const paramsStr = formatQueryParams(queryParams);\n\n const response = await fetchClient(\n `${LO_DCA_API}/order-executions?${paramsStr}`,\n );\n\n if (!response.ok) {\n throw new Error(\"Failed to fetch closed dca orders\");\n }\n\n const orders = (await response.json()) as LoDcaOrderExecution[];\n return orders;\n}\n","import { fetchClient } from \"../../config/fetchClient\";\nimport { formatQueryParams } from \"../../libs/url\";\nimport { LO_DCA_API } from \"./constants\";\nimport { LoDcaOrderExecution, LoDcaQueryParams } from \"./types\";\n\ninterface Params {\n owner: string;\n orderId: string;\n offset: number;\n limit: number;\n}\n\nexport async function getDcaOrderExecutions({\n owner,\n orderId,\n offset = 0,\n limit = 10,\n}: Params) {\n const queryParams: LoDcaQueryParams = {\n owner,\n orderId,\n statuses: [\"SUCCESS\"],\n offset,\n limit,\n orderType: \"DCA\",\n };\n const paramsStr = formatQueryParams(queryParams);\n\n const response = await fetchClient(\n `${LO_DCA_API}/order-executions?${paramsStr}`,\n );\n\n if (!response.ok) {\n throw new Error(\"Failed to fetch dca order executions\");\n }\n\n const orders = (await response.json()) as LoDcaOrderExecution[];\n return orders;\n}\n","export * from \"./types/metaAg\";\n\nimport { MetaAg } from \"./features/metaAg\";\nimport { getSuiPrice, getTokenPrice, getTokenPrices } from \"./features/prices\";\n\nimport {\n cancelDcaOrder,\n cancelLimitOrder,\n claimExpiredLimitOrder,\n getClosedDcaOrders,\n getClosedLimitOrders,\n getDcaOrderExecutions,\n getOpenDcaOrders,\n getOpenLimitOrders,\n placeDcaOrder,\n placeLimitOrder,\n} from \"./features/limitDca\";\n\nexport {\n MetaAg,\n cancelDcaOrder,\n cancelLimitOrder,\n claimExpiredLimitOrder,\n getClosedDcaOrders,\n getClosedLimitOrders,\n getDcaOrderExecutions,\n getOpenDcaOrders,\n getOpenLimitOrders,\n // prices\n getSuiPrice,\n getTokenPrice,\n getTokenPrices,\n // dca\n placeDcaOrder,\n // limit order\n placeLimitOrder,\n};\n\nexport default {\n // prices\n getTokenPrice,\n getTokenPrices,\n getSuiPrice,\n\n // limit order\n placeLimitOrder,\n getOpenLimitOrders,\n cancelLimitOrder,\n claimExpiredLimitOrder,\n getClosedLimitOrders,\n\n // dca\n placeDcaOrder,\n getOpenDcaOrders,\n cancelDcaOrder,\n getClosedDcaOrders,\n getDcaOrderExecutions,\n\n // Meta aggregator\n MetaAg,\n};\n"],"mappings":"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","names":["SuiGrpcClient","getJsonRpcFullnodeUrl","coinWithBalance","Transaction","fromBase64","normalizeStructTag","toBase64","SUI_ADDRESS_ZERO","normalizeSuiAddress","parseStructTag","RESERVED_ADDRESSES","isSystemAddress","address","addr","normalizeSuiAddress","normalizeSuiAddress","AsyncCache","id","owned","shared","ids","object","objects","ref","functionName","normalizeSuiAddress","functionEntry","pkg","entry","key","value","_caches","InMemoryObjectCache","__privateAdd","type","__privateGet","cache","_client","_cache","_onEffects","CustomObjectCache","onEffects","client","__privateSet","transactionData","unresolvedObjects","cached","obj","byId","unresolved","input","dedup","res","owner","initialSharedVersion","ownerAddress","_options","next","commands","def","effects","_a","lamportVersion","changedObjects","deletedIds","addedObjects","change","digest","_devInspectCache","_attachedTxns","SuiClientUtils","client","__privateAdd","__publicField","params","__privateGet","error","__privateSet","CustomObjectCache","Commands","Transaction","TransactionDataBuilder","fromBase64","normalizeStructTag","normalizeSuiAddress","toBase64","v4","SUI_TYPE","SUI_FULL_TYPE","API","SWAP_PATH","CHAIN_ID","NORMALIZED_SUI_TYPE","normalizeStructTag","SUI_TYPE","OkxProvider","options","metaOptions","client","__publicField","amountIn","coinTypeIn","coinTypeOut","signer","isSystemAddress","request","queryString","url","quote","getHeaders","MetaAgError","v4","signTransaction","assertQuoteProvider","tx","coin","buildTx","metaSettle","txBytes","bytes","signature","toBase64","res","fromBase64","generateHmacSha256","message","secretKey","encoder","encodeBase64","binary","i","key","createHmac","method","requestPath","apiKey","apiPassphrase","projectId","timestamp","stringToSign","replaceFinalizeCommand","packageId","builder","TransactionDataBuilder","cmd","normalizeSuiAddress","Commands","Transaction","tx2","simulateOKXSwap","inspector","simulation","simulateSwapTx","DEFAULT_CLIENT","SuiGrpcClient","getJsonRpcFullnodeUrl","HERMES_API","DEFAULT_PROVIDERS","MetaAg","options","__publicField","SUI_ADDRESS_ZERO","SuiClientUtils","provider","p","providerOptions","MetaAgError","Bluefin7kProvider","catchImportError","FlowxProvider","CetusProvider","OkxProvider","quote","simulation","isAggregatorProvider","simulateAggregator","simulateOKXSwap","error","timeout","expectedAmount","getExpectedReturn","signer","useGasCoin","signTransaction","extraOptions","tx","Transaction","coin","coinWithBalance","txBytes","signature","bytes","toBase64","fromBase64","opts","normalizeStructTag","result","_k","v","requests","updated","slippageBps","isSystemAddress","coinOut","metaSettle","isSwapAPIProvider","clientChanged","hermesChanged","opt","map","fetchClient","input","init","headers","modifiedInit","API_ENDPOINTS","normalizeTokenType","type","SUI_TYPE","SUI_FULL_TYPE","chunkArray","array","chunkSize","chunks","i","MAX_TOTAL_IDS","MAX_IDS_PER_REQUEST","getCurrentTimestamp","getTokenPrice","id","normalizedId","normalizeTokenType","getTokenPrices","ids","limitedIds","idChunks","timestamp","combinedPrices","chunk","requestBody","response","fetchClient","API_ENDPOINTS","acc","priceResponses","priceResponse","getSuiPrice","SUI_FULL_TYPE","coinWithBalance","Transaction","GLOBAL_CONFIG_ID","RATE_SCALE","SLIPPAGE_SCALE","PACKAGE","LIMIT_ORDER_MODULE_ID","DCA_ORDER_MODULE_ID","CONFIG_MODULE_ID","DCA_MAX_RATE","LO_DCA_API","API_ENDPOINTS","placeLimitOrder","accountAddress","payCoinType","targetCoinType","payCoinAmount","rate","slippage","expireTs","devInspect","tx","Transaction","payCoin","coinWithBalance","LIMIT_ORDER_MODULE_ID","GLOBAL_CONFIG_ID","Transaction","cancelLimitOrder","orderId","payCoinType","targetCoinType","tx","Transaction","LIMIT_ORDER_MODULE_ID","Transaction","claimExpiredLimitOrder","orderId","payCoinType","targetCoinType","tx","Transaction","LIMIT_ORDER_MODULE_ID","formatQueryParams","params","str","key","value","v","getOpenLimitOrders","owner","offset","limit","tokenPair","paramsStr","formatQueryParams","response","fetchClient","LO_DCA_API","getClosedLimitOrders","owner","offset","limit","tokenPair","paramsStr","formatQueryParams","response","fetchClient","LO_DCA_API","coinWithBalance","Transaction","placeDcaOrder","payCoinType","targetCoinType","payCoinAmountEach","numOrders","interval","slippage","minRate","maxRate","tx","coinElements","i","coin","vectorCoin","DCA_ORDER_MODULE_ID","GLOBAL_CONFIG_ID","Transaction","cancelDcaOrder","orderId","payCoinType","targetCoinType","tx","Transaction","DCA_ORDER_MODULE_ID","getOpenDcaOrders","owner","offset","limit","tokenPair","paramsStr","formatQueryParams","response","fetchClient","LO_DCA_API","getClosedDcaOrders","owner","offset","limit","tokenPair","paramsStr","formatQueryParams","response","fetchClient","LO_DCA_API","getDcaOrderExecutions","owner","orderId","offset","limit","paramsStr","formatQueryParams","response","fetchClient","LO_DCA_API","index_default","getTokenPrice","getTokenPrices","getSuiPrice","placeLimitOrder","getOpenLimitOrders","cancelLimitOrder","claimExpiredLimitOrder","getClosedLimitOrders","placeDcaOrder","getOpenDcaOrders","cancelDcaOrder","getClosedDcaOrders","getDcaOrderExecutions","MetaAg"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@7kprotocol/sdk-ts",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.0-beta.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": {
|
|
@@ -58,21 +58,21 @@
|
|
|
58
58
|
"eslint": "^9.29.0",
|
|
59
59
|
"husky": "^9.1.7",
|
|
60
60
|
"mocha": "^11.6.0",
|
|
61
|
-
"ts-node": "^10.9.2",
|
|
62
61
|
"tsup": "^8.3.5",
|
|
62
|
+
"tsx": "^4.21.0",
|
|
63
63
|
"typescript": "^5.8.3",
|
|
64
64
|
"typescript-eslint": "^8.34.1"
|
|
65
65
|
},
|
|
66
66
|
"peerDependencies": {
|
|
67
|
-
"@mysten/sui": "^
|
|
67
|
+
"@mysten/sui": "^2.17.0",
|
|
68
68
|
"@pythnetwork/pyth-sui-js": "^2.2.0"
|
|
69
69
|
},
|
|
70
70
|
"dependencies": {
|
|
71
71
|
"uuid": "^13.0.0"
|
|
72
72
|
},
|
|
73
73
|
"optionalDependencies": {
|
|
74
|
-
"@bluefin-exchange/bluefin7k-aggregator-sdk": "^
|
|
75
|
-
"@cetusprotocol/aggregator-sdk": "^1.4
|
|
76
|
-
"@flowx-finance/sdk": "^
|
|
74
|
+
"@bluefin-exchange/bluefin7k-aggregator-sdk": "^7.2.0",
|
|
75
|
+
"@cetusprotocol/aggregator-sdk": "^1.5.4",
|
|
76
|
+
"@flowx-finance/sdk": "^2.0.3"
|
|
77
77
|
}
|
|
78
78
|
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkKVGSSW22js = require('./chunk-KVGSSW22.js');var _bluefin7kaggregatorsdk = require('@bluefin-exchange/bluefin7k-aggregator-sdk');var _uuid = require('uuid');var a=class{constructor(o,e,t){this.options=o;this.metaOptions=e;this.kind="bluefin7k";o.apiKey&&_bluefin7kaggregatorsdk.Config.setApiKey(o.apiKey),_bluefin7kaggregatorsdk.Config.setSuiClient(t)}async quote(o){let e=await _bluefin7kaggregatorsdk.getQuote.call(void 0, {tokenIn:o.coinTypeIn,tokenOut:o.coinTypeOut,amountIn:o.amountIn,sources:this.options.sources,excludedPools:this.options.excludedPools,targetPools:this.options.targetPools});return _chunkKVGSSW22js.l.assert(!!e,"No quote found",1005,{provider:this.kind}),{id:_uuid.v4.call(void 0, ),provider:"bluefin7k",quote:e,amountIn:e.swapAmountWithDecimal,rawAmountOut:e.returnAmountWithDecimal,amountOut:e.returnAmountWithDecimal,coinTypeIn:o.coinTypeIn,coinTypeOut:o.coinTypeOut}}async swap({quote:o,signer:e,tx:t,coinIn:s}){_chunkKVGSSW22js.l.assert(o.provider==="bluefin7k","Invalid quote",1004,{quote:o,expectedProvider:"bluefin7k"});let{coinOut:p}=await _bluefin7kaggregatorsdk.buildTx.call(void 0, {quoteResponse:o.quote,accountAddress:e,commission:{commissionBps:0,partner:_chunkKVGSSW22js.k},slippage:1,extendTx:{tx:t,coinIn:s}});return p}};exports.Bluefin7kProvider = a;
|
|
2
|
-
//# sourceMappingURL=bluefin7k-I6ZCDWDN.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/otis/Documents/7k-ts-sdk/dist/bluefin7k-I6ZCDWDN.js","../src/features/metaAg/providers/bluefin7k.ts"],"names":["Bluefin7kProvider","options","metaOptions","client","Config","quoteOptions","quote","getQuote","MetaAgError","v4","signer","tx","coinIn","coinOut","buildTx","_7K_PARTNER_ADDRESS"],"mappings":"AAAA,+HAA8C,oFCIvC,4BAEY,IAcNA,CAAAA,CAAN,KAAqE,CAE1E,WAAA,CACmBC,CAAAA,CACAC,CAAAA,CACjBC,CAAAA,CACA,CAHiB,IAAA,CAAA,OAAA,CAAAF,CAAAA,CACA,IAAA,CAAA,WAAA,CAAAC,CAAAA,CAHnB,IAAA,CAAS,IAAA,CAAO,WAAA,CAMVD,CAAAA,CAAQ,MAAA,EAAQG,8BAAAA,CAAO,SAAA,CAAUH,CAAAA,CAAQ,MAAM,CAAA,CACnDG,8BAAAA,CAAO,YAAA,CAAaD,CAAM,CAC5B,CAEA,MAAM,KAAA,CAAME,CAAAA,CAAoD,CAC9D,IAAMC,CAAAA,CAAQ,MAAMC,8CAAAA,CAClB,OAAA,CAASF,CAAAA,CAAa,UAAA,CACtB,QAAA,CAAUA,CAAAA,CAAa,WAAA,CACvB,QAAA,CAAUA,CAAAA,CAAa,QAAA,CACvB,OAAA,CAAS,IAAA,CAAK,OAAA,CAAQ,OAAA,CACtB,aAAA,CAAe,IAAA,CAAK,OAAA,CAAQ,aAAA,CAC5B,WAAA,CAAa,IAAA,CAAK,OAAA,CAAQ,WAC5B,CAAC,CAAA,CACD,OAAAG,kBAAAA,CAAY,MAAA,CACV,CAAC,CAACF,CAAAA,CACF,gBAAA,CAAA,IAAA,CAEA,CAAE,QAAA,CAAU,IAAA,CAAK,IAAK,CACxB,CAAA,CACO,CACL,EAAA,CAAIG,sBAAAA,CAAG,CACP,QAAA,CAAA,WAAA,CACA,KAAA,CAAAH,CAAAA,CACA,QAAA,CAAUA,CAAAA,CAAM,qBAAA,CAChB,YAAA,CAAcA,CAAAA,CAAM,uBAAA,CACpB,SAAA,CAAWA,CAAAA,CAAM,uBAAA,CACjB,UAAA,CAAYD,CAAAA,CAAa,UAAA,CACzB,WAAA,CAAaA,CAAAA,CAAa,WAC5B,CACF,CAEA,MAAM,IAAA,CAAK,CAAE,KAAA,CAAAC,CAAAA,CAAO,MAAA,CAAAI,CAAAA,CAAQ,EAAA,CAAAC,CAAAA,CAAI,MAAA,CAAAC,CAAO,CAAA,CAAoB,CACzDJ,kBAAAA,CAAY,MAAA,CACVF,CAAAA,CAAM,QAAA,GAAa,WAAA,CACnB,eAAA,CAAA,IAAA,CAEA,CAAE,KAAA,CAAAA,CAAAA,CAAO,gBAAA,CAAA,WAAsC,CACjD,CAAA,CACA,GAAM,CAAE,OAAA,CAAAO,CAAQ,CAAA,CAAI,MAAMC,6CAAAA,CACxB,aAAA,CAAeR,CAAAA,CAAM,KAAA,CACrB,cAAA,CAAgBI,CAAAA,CAChB,UAAA,CAAY,CACV,aAAA,CAAe,CAAA,CACf,OAAA,CAASK,kBACX,CAAA,CACA,QAAA,CAAU,CAAA,CACV,QAAA,CAAU,CACR,EAAA,CAAAJ,CAAAA,CACA,MAAA,CAAAC,CACF,CACF,CAAC,CAAA,CACD,OAAOC,CACT,CACF,CAAA,CAAA,8BAAA","file":"/Users/otis/Documents/7k-ts-sdk/dist/bluefin7k-I6ZCDWDN.js","sourcesContent":[null,"import {\n buildTx,\n Config,\n getQuote,\n} from \"@bluefin-exchange/bluefin7k-aggregator-sdk\";\nimport { SuiClient } from \"@mysten/sui/client\";\nimport { v4 } from \"uuid\";\nimport { _7K_PARTNER_ADDRESS } from \"../../../constants/_7k\";\nimport {\n AggregatorProvider,\n Bluefin7kProviderOptions,\n EProvider,\n MetaAgOptions,\n MetaQuote,\n MetaQuoteOptions,\n MetaSwapOptions,\n QuoteProvider,\n} from \"../../../types/metaAg\";\nimport { MetaAgError, MetaAgErrorCode } from \"../error\";\n\nexport class Bluefin7kProvider implements QuoteProvider, AggregatorProvider {\n readonly kind = EProvider.BLUEFIN7K;\n constructor(\n private readonly options: Bluefin7kProviderOptions,\n private readonly metaOptions: Required<MetaAgOptions>,\n client: SuiClient,\n ) {\n if (options.apiKey) Config.setApiKey(options.apiKey);\n Config.setSuiClient(client);\n }\n\n async quote(quoteOptions: MetaQuoteOptions): Promise<MetaQuote> {\n const quote = await getQuote({\n tokenIn: quoteOptions.coinTypeIn,\n tokenOut: quoteOptions.coinTypeOut,\n amountIn: quoteOptions.amountIn,\n sources: this.options.sources,\n excludedPools: this.options.excludedPools,\n targetPools: this.options.targetPools,\n });\n MetaAgError.assert(\n !!quote,\n \"No quote found\",\n MetaAgErrorCode.QUOTE_NOT_FOUND,\n { provider: this.kind },\n );\n return {\n id: v4(),\n provider: EProvider.BLUEFIN7K,\n quote,\n amountIn: quote.swapAmountWithDecimal,\n rawAmountOut: quote.returnAmountWithDecimal,\n amountOut: quote.returnAmountWithDecimal,\n coinTypeIn: quoteOptions.coinTypeIn,\n coinTypeOut: quoteOptions.coinTypeOut,\n };\n }\n\n async swap({ quote, signer, tx, coinIn }: MetaSwapOptions) {\n MetaAgError.assert(\n quote.provider === EProvider.BLUEFIN7K,\n \"Invalid quote\",\n MetaAgErrorCode.INVALID_QUOTE,\n { quote, expectedProvider: EProvider.BLUEFIN7K },\n );\n const { coinOut } = await buildTx({\n quoteResponse: quote.quote,\n accountAddress: signer,\n commission: {\n commissionBps: 0,\n partner: _7K_PARTNER_ADDRESS,\n },\n slippage: 1,\n extendTx: {\n tx,\n coinIn,\n },\n });\n return coinOut!;\n }\n}\n"]}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{k as i,l as r}from"./chunk-ETQEI4QC.mjs";import{buildTx as u,Config as n,getQuote as m}from"@bluefin-exchange/bluefin7k-aggregator-sdk";import{v4 as d}from"uuid";var a=class{constructor(o,e,t){this.options=o;this.metaOptions=e;this.kind="bluefin7k";o.apiKey&&n.setApiKey(o.apiKey),n.setSuiClient(t)}async quote(o){let e=await m({tokenIn:o.coinTypeIn,tokenOut:o.coinTypeOut,amountIn:o.amountIn,sources:this.options.sources,excludedPools:this.options.excludedPools,targetPools:this.options.targetPools});return r.assert(!!e,"No quote found",1005,{provider:this.kind}),{id:d(),provider:"bluefin7k",quote:e,amountIn:e.swapAmountWithDecimal,rawAmountOut:e.returnAmountWithDecimal,amountOut:e.returnAmountWithDecimal,coinTypeIn:o.coinTypeIn,coinTypeOut:o.coinTypeOut}}async swap({quote:o,signer:e,tx:t,coinIn:s}){r.assert(o.provider==="bluefin7k","Invalid quote",1004,{quote:o,expectedProvider:"bluefin7k"});let{coinOut:p}=await u({quoteResponse:o.quote,accountAddress:e,commission:{commissionBps:0,partner:i},slippage:1,extendTx:{tx:t,coinIn:s}});return p}};export{a as Bluefin7kProvider};
|
|
2
|
-
//# sourceMappingURL=bluefin7k-TERLUCNL.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/features/metaAg/providers/bluefin7k.ts"],"sourcesContent":["import {\n buildTx,\n Config,\n getQuote,\n} from \"@bluefin-exchange/bluefin7k-aggregator-sdk\";\nimport { SuiClient } from \"@mysten/sui/client\";\nimport { v4 } from \"uuid\";\nimport { _7K_PARTNER_ADDRESS } from \"../../../constants/_7k\";\nimport {\n AggregatorProvider,\n Bluefin7kProviderOptions,\n EProvider,\n MetaAgOptions,\n MetaQuote,\n MetaQuoteOptions,\n MetaSwapOptions,\n QuoteProvider,\n} from \"../../../types/metaAg\";\nimport { MetaAgError, MetaAgErrorCode } from \"../error\";\n\nexport class Bluefin7kProvider implements QuoteProvider, AggregatorProvider {\n readonly kind = EProvider.BLUEFIN7K;\n constructor(\n private readonly options: Bluefin7kProviderOptions,\n private readonly metaOptions: Required<MetaAgOptions>,\n client: SuiClient,\n ) {\n if (options.apiKey) Config.setApiKey(options.apiKey);\n Config.setSuiClient(client);\n }\n\n async quote(quoteOptions: MetaQuoteOptions): Promise<MetaQuote> {\n const quote = await getQuote({\n tokenIn: quoteOptions.coinTypeIn,\n tokenOut: quoteOptions.coinTypeOut,\n amountIn: quoteOptions.amountIn,\n sources: this.options.sources,\n excludedPools: this.options.excludedPools,\n targetPools: this.options.targetPools,\n });\n MetaAgError.assert(\n !!quote,\n \"No quote found\",\n MetaAgErrorCode.QUOTE_NOT_FOUND,\n { provider: this.kind },\n );\n return {\n id: v4(),\n provider: EProvider.BLUEFIN7K,\n quote,\n amountIn: quote.swapAmountWithDecimal,\n rawAmountOut: quote.returnAmountWithDecimal,\n amountOut: quote.returnAmountWithDecimal,\n coinTypeIn: quoteOptions.coinTypeIn,\n coinTypeOut: quoteOptions.coinTypeOut,\n };\n }\n\n async swap({ quote, signer, tx, coinIn }: MetaSwapOptions) {\n MetaAgError.assert(\n quote.provider === EProvider.BLUEFIN7K,\n \"Invalid quote\",\n MetaAgErrorCode.INVALID_QUOTE,\n { quote, expectedProvider: EProvider.BLUEFIN7K },\n );\n const { coinOut } = await buildTx({\n quoteResponse: quote.quote,\n accountAddress: signer,\n commission: {\n commissionBps: 0,\n partner: _7K_PARTNER_ADDRESS,\n },\n slippage: 1,\n extendTx: {\n tx,\n coinIn,\n },\n });\n return coinOut!;\n }\n}\n"],"mappings":"gDAAA,OACE,WAAAA,EACA,UAAAC,EACA,YAAAC,MACK,6CAEP,OAAS,MAAAC,MAAU,OAcZ,IAAMC,EAAN,KAAqE,CAE1E,YACmBC,EACAC,EACjBC,EACA,CAHiB,aAAAF,EACA,iBAAAC,EAHnB,KAAS,KAAO,YAMVD,EAAQ,QAAQG,EAAO,UAAUH,EAAQ,MAAM,EACnDG,EAAO,aAAaD,CAAM,CAC5B,CAEA,MAAM,MAAME,EAAoD,CAC9D,IAAMC,EAAQ,MAAMC,EAAS,CAC3B,QAASF,EAAa,WACtB,SAAUA,EAAa,YACvB,SAAUA,EAAa,SACvB,QAAS,KAAK,QAAQ,QACtB,cAAe,KAAK,QAAQ,cAC5B,YAAa,KAAK,QAAQ,WAC5B,CAAC,EACD,OAAAG,EAAY,OACV,CAAC,CAACF,EACF,sBAEA,CAAE,SAAU,KAAK,IAAK,CACxB,EACO,CACL,GAAIG,EAAG,EACP,qBACA,MAAAH,EACA,SAAUA,EAAM,sBAChB,aAAcA,EAAM,wBACpB,UAAWA,EAAM,wBACjB,WAAYD,EAAa,WACzB,YAAaA,EAAa,WAC5B,CACF,CAEA,MAAM,KAAK,CAAE,MAAAC,EAAO,OAAAI,EAAQ,GAAAC,EAAI,OAAAC,CAAO,EAAoB,CACzDJ,EAAY,OACVF,EAAM,WAAa,YACnB,qBAEA,CAAE,MAAAA,EAAO,4BAAsC,CACjD,EACA,GAAM,CAAE,QAAAO,CAAQ,EAAI,MAAMC,EAAQ,CAChC,cAAeR,EAAM,MACrB,eAAgBI,EAChB,WAAY,CACV,cAAe,EACf,QAASK,CACX,EACA,SAAU,EACV,SAAU,CACR,GAAAJ,EACA,OAAAC,CACF,CACF,CAAC,EACD,OAAOC,CACT,CACF","names":["buildTx","Config","getQuote","v4","Bluefin7kProvider","options","metaOptions","client","Config","quoteOptions","quote","getQuote","MetaAgError","v4","signer","tx","coinIn","coinOut","buildTx","_7K_PARTNER_ADDRESS"]}
|
package/dist/cetus-AU3OMWOY.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{k as i,l as o}from"./chunk-ETQEI4QC.mjs";import{AggregatorClient as a,Env as u}from"@cetusprotocol/aggregator-sdk";import{v4 as s}from"uuid";var r=class{constructor(t,e,n){this.options=t;this.kind="cetus";this.cetusClient=new a({apiKey:t.apiKey,client:n,endpoint:t.api,env:u.Mainnet,pythUrls:e.hermesApi?[e.hermesApi]:[],overlayFeeRate:0,overlayFeeReceiver:i})}async quote(t){let e=await this.cetusClient.findRouters({amount:t.amountIn,byAmountIn:!0,from:t.coinTypeIn,target:t.coinTypeOut,providers:this.options.sources,splitCount:this.options.splitCount,splitAlgorithm:this.options.splitAlgorithm,splitFactor:this.options.splitFactor,depth:this.options.depth,liquidityChanges:this.options.liquidityChanges});return o.assert(!!e,"No quote found",1005,{provider:this.kind}),{id:s(),provider:"cetus",quote:e,amountIn:e.amountIn.toString()||"0",rawAmountOut:e.amountOut.toString()||"0",amountOut:e.amountOut.toString()||"0",coinTypeIn:t.coinTypeIn,coinTypeOut:t.coinTypeOut}}async swap(t){return o.assert(t.quote.provider==="cetus","Expect Cetus quote",1004,{quote:t.quote,expectedProvider:"cetus"}),await this.cetusClient.routerSwap({inputCoin:t.coinIn,router:t.quote.quote,slippage:1,txb:t.tx})}};export{r as CetusProvider};
|
|
2
|
-
//# sourceMappingURL=cetus-AU3OMWOY.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/features/metaAg/providers/cetus.ts"],"sourcesContent":["import { AggregatorClient, Env } from \"@cetusprotocol/aggregator-sdk\";\nimport { SuiClient } from \"@mysten/sui/client\";\nimport { v4 } from \"uuid\";\nimport { _7K_PARTNER_ADDRESS } from \"../../../constants/_7k\";\nimport {\n AggregatorProvider,\n CetusProviderOptions,\n EProvider,\n MetaAgOptions,\n MetaQuote,\n MetaQuoteOptions,\n MetaSwapOptions,\n QuoteProvider,\n} from \"../../../types/metaAg\";\nimport { MetaAgError, MetaAgErrorCode } from \"../error\";\n\nexport class CetusProvider implements QuoteProvider, AggregatorProvider {\n readonly kind = EProvider.CETUS;\n private readonly cetusClient: AggregatorClient;\n constructor(\n private readonly options: CetusProviderOptions,\n metaOptions: MetaAgOptions,\n client: SuiClient,\n ) {\n this.cetusClient = new AggregatorClient({\n apiKey: options.apiKey,\n client,\n endpoint: options.api,\n env: Env.Mainnet,\n pythUrls: metaOptions.hermesApi ? [metaOptions.hermesApi] : [],\n overlayFeeRate: 0,\n overlayFeeReceiver: _7K_PARTNER_ADDRESS,\n });\n }\n\n async quote(quoteOptions: MetaQuoteOptions): Promise<MetaQuote> {\n const quote = await this.cetusClient.findRouters({\n amount: quoteOptions.amountIn,\n byAmountIn: true,\n from: quoteOptions.coinTypeIn,\n target: quoteOptions.coinTypeOut,\n providers: this.options.sources,\n splitCount: this.options.splitCount,\n splitAlgorithm: this.options.splitAlgorithm,\n splitFactor: this.options.splitFactor,\n depth: this.options.depth,\n liquidityChanges: this.options.liquidityChanges,\n });\n MetaAgError.assert(\n !!quote,\n \"No quote found\",\n MetaAgErrorCode.QUOTE_NOT_FOUND,\n { provider: this.kind },\n );\n return {\n id: v4(),\n provider: EProvider.CETUS,\n quote,\n amountIn: quote.amountIn.toString() || \"0\",\n rawAmountOut: quote.amountOut.toString() || \"0\",\n amountOut: quote.amountOut.toString() || \"0\",\n coinTypeIn: quoteOptions.coinTypeIn,\n coinTypeOut: quoteOptions.coinTypeOut,\n };\n }\n\n async swap(options: MetaSwapOptions) {\n MetaAgError.assert(\n options.quote.provider === EProvider.CETUS,\n \"Expect Cetus quote\",\n MetaAgErrorCode.INVALID_QUOTE,\n { quote: options.quote, expectedProvider: EProvider.CETUS },\n );\n const coinOut = await this.cetusClient.routerSwap({\n inputCoin: options.coinIn,\n router: options.quote.quote,\n slippage: 1,\n txb: options.tx,\n });\n return coinOut;\n }\n}\n"],"mappings":"gDAAA,OAAS,oBAAAA,EAAkB,OAAAC,MAAW,gCAEtC,OAAS,MAAAC,MAAU,OAcZ,IAAMC,EAAN,KAAiE,CAGtE,YACmBC,EACjBC,EACAC,EACA,CAHiB,aAAAF,EAHnB,KAAS,KAAO,QAOd,KAAK,YAAc,IAAIG,EAAiB,CACtC,OAAQH,EAAQ,OAChB,OAAAE,EACA,SAAUF,EAAQ,IAClB,IAAKI,EAAI,QACT,SAAUH,EAAY,UAAY,CAACA,EAAY,SAAS,EAAI,CAAC,EAC7D,eAAgB,EAChB,mBAAoBI,CACtB,CAAC,CACH,CAEA,MAAM,MAAMC,EAAoD,CAC9D,IAAMC,EAAQ,MAAM,KAAK,YAAY,YAAY,CAC/C,OAAQD,EAAa,SACrB,WAAY,GACZ,KAAMA,EAAa,WACnB,OAAQA,EAAa,YACrB,UAAW,KAAK,QAAQ,QACxB,WAAY,KAAK,QAAQ,WACzB,eAAgB,KAAK,QAAQ,eAC7B,YAAa,KAAK,QAAQ,YAC1B,MAAO,KAAK,QAAQ,MACpB,iBAAkB,KAAK,QAAQ,gBACjC,CAAC,EACD,OAAAE,EAAY,OACV,CAAC,CAACD,EACF,sBAEA,CAAE,SAAU,KAAK,IAAK,CACxB,EACO,CACL,GAAIE,EAAG,EACP,iBACA,MAAAF,EACA,SAAUA,EAAM,SAAS,SAAS,GAAK,IACvC,aAAcA,EAAM,UAAU,SAAS,GAAK,IAC5C,UAAWA,EAAM,UAAU,SAAS,GAAK,IACzC,WAAYD,EAAa,WACzB,YAAaA,EAAa,WAC5B,CACF,CAEA,MAAM,KAAKN,EAA0B,CACnC,OAAAQ,EAAY,OACVR,EAAQ,MAAM,WAAa,QAC3B,0BAEA,CAAE,MAAOA,EAAQ,MAAO,wBAAkC,CAC5D,EACgB,MAAM,KAAK,YAAY,WAAW,CAChD,UAAWA,EAAQ,OACnB,OAAQA,EAAQ,MAAM,MACtB,SAAU,EACV,IAAKA,EAAQ,EACf,CAAC,CAEH,CACF","names":["AggregatorClient","Env","v4","CetusProvider","options","metaOptions","client","AggregatorClient","Env","_7K_PARTNER_ADDRESS","quoteOptions","quote","MetaAgError","v4"]}
|
package/dist/cetus-SIPX6FYL.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkKVGSSW22js = require('./chunk-KVGSSW22.js');var _aggregatorsdk = require('@cetusprotocol/aggregator-sdk');var _uuid = require('uuid');var r=class{constructor(t,e,n){this.options=t;this.kind="cetus";this.cetusClient=new (0, _aggregatorsdk.AggregatorClient)({apiKey:t.apiKey,client:n,endpoint:t.api,env:_aggregatorsdk.Env.Mainnet,pythUrls:e.hermesApi?[e.hermesApi]:[],overlayFeeRate:0,overlayFeeReceiver:_chunkKVGSSW22js.k})}async quote(t){let e=await this.cetusClient.findRouters({amount:t.amountIn,byAmountIn:!0,from:t.coinTypeIn,target:t.coinTypeOut,providers:this.options.sources,splitCount:this.options.splitCount,splitAlgorithm:this.options.splitAlgorithm,splitFactor:this.options.splitFactor,depth:this.options.depth,liquidityChanges:this.options.liquidityChanges});return _chunkKVGSSW22js.l.assert(!!e,"No quote found",1005,{provider:this.kind}),{id:_uuid.v4.call(void 0, ),provider:"cetus",quote:e,amountIn:e.amountIn.toString()||"0",rawAmountOut:e.amountOut.toString()||"0",amountOut:e.amountOut.toString()||"0",coinTypeIn:t.coinTypeIn,coinTypeOut:t.coinTypeOut}}async swap(t){return _chunkKVGSSW22js.l.assert(t.quote.provider==="cetus","Expect Cetus quote",1004,{quote:t.quote,expectedProvider:"cetus"}),await this.cetusClient.routerSwap({inputCoin:t.coinIn,router:t.quote.quote,slippage:1,txb:t.tx})}};exports.CetusProvider = r;
|
|
2
|
-
//# sourceMappingURL=cetus-SIPX6FYL.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/Users/otis/Documents/7k-ts-sdk/dist/cetus-SIPX6FYL.js","../src/features/metaAg/providers/cetus.ts"],"names":["CetusProvider","options","metaOptions","client","AggregatorClient","Env","_7K_PARTNER_ADDRESS","quoteOptions","quote","MetaAgError","v4"],"mappings":"AAAA,+HAA8C,8DCAR,4BAEnB,IAcNA,CAAAA,CAAN,KAAiE,CAGtE,WAAA,CACmBC,CAAAA,CACjBC,CAAAA,CACAC,CAAAA,CACA,CAHiB,IAAA,CAAA,OAAA,CAAAF,CAAAA,CAHnB,IAAA,CAAS,IAAA,CAAO,OAAA,CAOd,IAAA,CAAK,WAAA,CAAc,IAAIG,oCAAAA,CAAiB,CACtC,MAAA,CAAQH,CAAAA,CAAQ,MAAA,CAChB,MAAA,CAAAE,CAAAA,CACA,QAAA,CAAUF,CAAAA,CAAQ,GAAA,CAClB,GAAA,CAAKI,kBAAAA,CAAI,OAAA,CACT,QAAA,CAAUH,CAAAA,CAAY,SAAA,CAAY,CAACA,CAAAA,CAAY,SAAS,CAAA,CAAI,CAAC,CAAA,CAC7D,cAAA,CAAgB,CAAA,CAChB,kBAAA,CAAoBI,kBACtB,CAAC,CACH,CAEA,MAAM,KAAA,CAAMC,CAAAA,CAAoD,CAC9D,IAAMC,CAAAA,CAAQ,MAAM,IAAA,CAAK,WAAA,CAAY,WAAA,CAAY,CAC/C,MAAA,CAAQD,CAAAA,CAAa,QAAA,CACrB,UAAA,CAAY,CAAA,CAAA,CACZ,IAAA,CAAMA,CAAAA,CAAa,UAAA,CACnB,MAAA,CAAQA,CAAAA,CAAa,WAAA,CACrB,SAAA,CAAW,IAAA,CAAK,OAAA,CAAQ,OAAA,CACxB,UAAA,CAAY,IAAA,CAAK,OAAA,CAAQ,UAAA,CACzB,cAAA,CAAgB,IAAA,CAAK,OAAA,CAAQ,cAAA,CAC7B,WAAA,CAAa,IAAA,CAAK,OAAA,CAAQ,WAAA,CAC1B,KAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,KAAA,CACpB,gBAAA,CAAkB,IAAA,CAAK,OAAA,CAAQ,gBACjC,CAAC,CAAA,CACD,OAAAE,kBAAAA,CAAY,MAAA,CACV,CAAC,CAACD,CAAAA,CACF,gBAAA,CAAA,IAAA,CAEA,CAAE,QAAA,CAAU,IAAA,CAAK,IAAK,CACxB,CAAA,CACO,CACL,EAAA,CAAIE,sBAAAA,CAAG,CACP,QAAA,CAAA,OAAA,CACA,KAAA,CAAAF,CAAAA,CACA,QAAA,CAAUA,CAAAA,CAAM,QAAA,CAAS,QAAA,CAAS,CAAA,EAAK,GAAA,CACvC,YAAA,CAAcA,CAAAA,CAAM,SAAA,CAAU,QAAA,CAAS,CAAA,EAAK,GAAA,CAC5C,SAAA,CAAWA,CAAAA,CAAM,SAAA,CAAU,QAAA,CAAS,CAAA,EAAK,GAAA,CACzC,UAAA,CAAYD,CAAAA,CAAa,UAAA,CACzB,WAAA,CAAaA,CAAAA,CAAa,WAC5B,CACF,CAEA,MAAM,IAAA,CAAKN,CAAAA,CAA0B,CACnC,OAAAQ,kBAAAA,CAAY,MAAA,CACVR,CAAAA,CAAQ,KAAA,CAAM,QAAA,GAAa,OAAA,CAC3B,oBAAA,CAAA,IAAA,CAEA,CAAE,KAAA,CAAOA,CAAAA,CAAQ,KAAA,CAAO,gBAAA,CAAA,OAAkC,CAC5D,CAAA,CACgB,MAAM,IAAA,CAAK,WAAA,CAAY,UAAA,CAAW,CAChD,SAAA,CAAWA,CAAAA,CAAQ,MAAA,CACnB,MAAA,CAAQA,CAAAA,CAAQ,KAAA,CAAM,KAAA,CACtB,QAAA,CAAU,CAAA,CACV,GAAA,CAAKA,CAAAA,CAAQ,EACf,CAAC,CAEH,CACF,CAAA,CAAA,0BAAA","file":"/Users/otis/Documents/7k-ts-sdk/dist/cetus-SIPX6FYL.js","sourcesContent":[null,"import { AggregatorClient, Env } from \"@cetusprotocol/aggregator-sdk\";\nimport { SuiClient } from \"@mysten/sui/client\";\nimport { v4 } from \"uuid\";\nimport { _7K_PARTNER_ADDRESS } from \"../../../constants/_7k\";\nimport {\n AggregatorProvider,\n CetusProviderOptions,\n EProvider,\n MetaAgOptions,\n MetaQuote,\n MetaQuoteOptions,\n MetaSwapOptions,\n QuoteProvider,\n} from \"../../../types/metaAg\";\nimport { MetaAgError, MetaAgErrorCode } from \"../error\";\n\nexport class CetusProvider implements QuoteProvider, AggregatorProvider {\n readonly kind = EProvider.CETUS;\n private readonly cetusClient: AggregatorClient;\n constructor(\n private readonly options: CetusProviderOptions,\n metaOptions: MetaAgOptions,\n client: SuiClient,\n ) {\n this.cetusClient = new AggregatorClient({\n apiKey: options.apiKey,\n client,\n endpoint: options.api,\n env: Env.Mainnet,\n pythUrls: metaOptions.hermesApi ? [metaOptions.hermesApi] : [],\n overlayFeeRate: 0,\n overlayFeeReceiver: _7K_PARTNER_ADDRESS,\n });\n }\n\n async quote(quoteOptions: MetaQuoteOptions): Promise<MetaQuote> {\n const quote = await this.cetusClient.findRouters({\n amount: quoteOptions.amountIn,\n byAmountIn: true,\n from: quoteOptions.coinTypeIn,\n target: quoteOptions.coinTypeOut,\n providers: this.options.sources,\n splitCount: this.options.splitCount,\n splitAlgorithm: this.options.splitAlgorithm,\n splitFactor: this.options.splitFactor,\n depth: this.options.depth,\n liquidityChanges: this.options.liquidityChanges,\n });\n MetaAgError.assert(\n !!quote,\n \"No quote found\",\n MetaAgErrorCode.QUOTE_NOT_FOUND,\n { provider: this.kind },\n );\n return {\n id: v4(),\n provider: EProvider.CETUS,\n quote,\n amountIn: quote.amountIn.toString() || \"0\",\n rawAmountOut: quote.amountOut.toString() || \"0\",\n amountOut: quote.amountOut.toString() || \"0\",\n coinTypeIn: quoteOptions.coinTypeIn,\n coinTypeOut: quoteOptions.coinTypeOut,\n };\n }\n\n async swap(options: MetaSwapOptions) {\n MetaAgError.assert(\n options.quote.provider === EProvider.CETUS,\n \"Expect Cetus quote\",\n MetaAgErrorCode.INVALID_QUOTE,\n { quote: options.quote, expectedProvider: EProvider.CETUS },\n );\n const coinOut = await this.cetusClient.routerSwap({\n inputCoin: options.coinIn,\n router: options.quote.quote,\n slippage: 1,\n txb: options.tx,\n });\n return coinOut;\n }\n}\n"]}
|
package/dist/chunk-ETQEI4QC.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
var s=e=>{throw TypeError(e)};var n=(e,t,r)=>t.has(e)||s("Cannot "+r);var d=(e,t,r)=>(n(e,t,"read from private field"),r?r.call(e):t.get(e)),u=(e,t,r)=>t.has(e)?s("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,r),O=(e,t,r,o)=>(n(e,t,"write to private field"),o?o.call(e,r):t.set(e,r),r);var p=(i=>(i.BLUEFIN7K="bluefin7k",i.CETUS="cetus",i.FLOWX="flowx",i.OKX="okx",i))(p||{}),P=e=>e.kind==="bluefin7k"||e.kind==="cetus"||e.kind==="flowx",g=e=>e.kind==="okx";var E="0x17c0b1f7a6ad73f51268f16b8c06c049eecc2f28a270cdd29c06e3d2dea23302",l="0x17c0b1f7a6ad73f51268f16b8c06c049eecc2f28a270cdd29c06e3d2dea23302",x="0x9a8abd32fe5721307ce3b697cf982ee84e9ffbd58d667a4a199f1683c1a3d23c",T="0xbbb3a51877ed9b492f26f4e2181811cfb2bd70c532f6f7621263d122d5e96b56",v="0x93ead46c1e48a9b62e25b6787f2ea6f75caedabb21726f12431acc4381f5f4c5";var a=class e extends Error{constructor(t,r,o){super(t),this.name="MetaAgError",this.code=r??1e3,this.details=o}static assert(t,r,o,i){if(!t)throw new e(r??"Assertion failed",o,i)}};export{d as a,u as b,O as c,p as d,P as e,g as f,E as g,l as h,x as i,T as j,v as k,a as l};
|
|
2
|
-
//# sourceMappingURL=chunk-ETQEI4QC.mjs.map
|