@swapkit/toolboxes 4.0.0 → 4.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (122) hide show
  1. package/dist/src/cosmos/index.cjs +2 -2
  2. package/dist/src/cosmos/index.cjs.map +8 -8
  3. package/dist/src/cosmos/index.js +2 -2
  4. package/dist/src/cosmos/index.js.map +8 -8
  5. package/dist/src/evm/index.cjs +2 -2
  6. package/dist/src/evm/index.cjs.map +12 -12
  7. package/dist/src/evm/index.js +2 -2
  8. package/dist/src/evm/index.js.map +12 -12
  9. package/dist/src/index.cjs +3 -3
  10. package/dist/src/index.cjs.map +45 -44
  11. package/dist/src/index.js +3 -3
  12. package/dist/src/index.js.map +45 -44
  13. package/dist/src/near/index.cjs +2 -2
  14. package/dist/src/near/index.cjs.map +8 -8
  15. package/dist/src/near/index.js +2 -2
  16. package/dist/src/near/index.js.map +8 -8
  17. package/dist/src/radix/index.cjs +2 -2
  18. package/dist/src/radix/index.cjs.map +3 -3
  19. package/dist/src/radix/index.js +2 -2
  20. package/dist/src/radix/index.js.map +3 -3
  21. package/dist/src/ripple/index.cjs +2 -2
  22. package/dist/src/ripple/index.cjs.map +3 -3
  23. package/dist/src/ripple/index.js +2 -2
  24. package/dist/src/ripple/index.js.map +3 -3
  25. package/dist/src/solana/index.cjs +2 -2
  26. package/dist/src/solana/index.cjs.map +4 -4
  27. package/dist/src/solana/index.js +2 -2
  28. package/dist/src/solana/index.js.map +4 -4
  29. package/dist/src/substrate/index.cjs +2 -2
  30. package/dist/src/substrate/index.cjs.map +5 -5
  31. package/dist/src/substrate/index.js +2 -2
  32. package/dist/src/substrate/index.js.map +5 -5
  33. package/dist/src/tron/index.cjs +2 -2
  34. package/dist/src/tron/index.cjs.map +5 -5
  35. package/dist/src/tron/index.js +2 -2
  36. package/dist/src/tron/index.js.map +5 -5
  37. package/dist/src/utxo/index.cjs +3 -3
  38. package/dist/src/utxo/index.cjs.map +14 -13
  39. package/dist/src/utxo/index.js +3 -3
  40. package/dist/src/utxo/index.js.map +14 -13
  41. package/dist/types/cosmos/thorchainUtils/addressFormat.d.ts.map +1 -1
  42. package/dist/types/cosmos/thorchainUtils/messages.d.ts +58 -58
  43. package/dist/types/cosmos/thorchainUtils/messages.d.ts.map +1 -1
  44. package/dist/types/cosmos/thorchainUtils/registry.d.ts.map +1 -1
  45. package/dist/types/cosmos/thorchainUtils/types/client-types.d.ts +2 -5
  46. package/dist/types/cosmos/thorchainUtils/types/client-types.d.ts.map +1 -1
  47. package/dist/types/cosmos/toolbox/cosmos.d.ts +19 -41
  48. package/dist/types/cosmos/toolbox/cosmos.d.ts.map +1 -1
  49. package/dist/types/cosmos/toolbox/thorchain.d.ts +45 -46
  50. package/dist/types/cosmos/toolbox/thorchain.d.ts.map +1 -1
  51. package/dist/types/cosmos/types.d.ts +5 -1
  52. package/dist/types/cosmos/types.d.ts.map +1 -1
  53. package/dist/types/cosmos/util.d.ts +10 -10
  54. package/dist/types/cosmos/util.d.ts.map +1 -1
  55. package/dist/types/evm/contracts/op/gasOracle.d.ts.map +1 -1
  56. package/dist/types/evm/helpers.d.ts +1 -15
  57. package/dist/types/evm/helpers.d.ts.map +1 -1
  58. package/dist/types/evm/index.d.ts +1 -1
  59. package/dist/types/evm/index.d.ts.map +1 -1
  60. package/dist/types/evm/toolbox/baseEVMToolbox.d.ts +14 -14
  61. package/dist/types/evm/toolbox/baseEVMToolbox.d.ts.map +1 -1
  62. package/dist/types/evm/toolbox/evm.d.ts +108 -108
  63. package/dist/types/evm/toolbox/evm.d.ts.map +1 -1
  64. package/dist/types/evm/toolbox/index.d.ts +97 -29
  65. package/dist/types/evm/toolbox/index.d.ts.map +1 -1
  66. package/dist/types/evm/toolbox/op.d.ts +36 -24
  67. package/dist/types/evm/toolbox/op.d.ts.map +1 -1
  68. package/dist/types/evm/types.d.ts +1 -1
  69. package/dist/types/evm/types.d.ts.map +1 -1
  70. package/dist/types/index.d.ts +1 -1
  71. package/dist/types/index.d.ts.map +1 -1
  72. package/dist/types/near/helpers/core.d.ts +1 -1
  73. package/dist/types/near/helpers/core.d.ts.map +1 -1
  74. package/dist/types/near/helpers/gasEstimation.d.ts +5 -5
  75. package/dist/types/near/helpers/gasEstimation.d.ts.map +1 -1
  76. package/dist/types/near/helpers/nep141.d.ts.map +1 -1
  77. package/dist/types/near/index.d.ts +4 -4
  78. package/dist/types/near/index.d.ts.map +1 -1
  79. package/dist/types/near/toolbox.d.ts.map +1 -1
  80. package/dist/types/near/types/contract.d.ts.map +1 -1
  81. package/dist/types/near/types/nep141.d.ts.map +1 -1
  82. package/dist/types/near/types/toolbox.d.ts.map +1 -1
  83. package/dist/types/near/types.d.ts +2 -2
  84. package/dist/types/near/types.d.ts.map +1 -1
  85. package/dist/types/radix/index.d.ts +2 -2
  86. package/dist/types/radix/index.d.ts.map +1 -1
  87. package/dist/types/ripple/index.d.ts +14 -11
  88. package/dist/types/ripple/index.d.ts.map +1 -1
  89. package/dist/types/solana/index.d.ts.map +1 -1
  90. package/dist/types/solana/toolbox.d.ts +10 -10
  91. package/dist/types/solana/toolbox.d.ts.map +1 -1
  92. package/dist/types/substrate/balance.d.ts.map +1 -1
  93. package/dist/types/substrate/substrate.d.ts +45 -45
  94. package/dist/types/substrate/substrate.d.ts.map +1 -1
  95. package/dist/types/substrate/types.d.ts +12 -12
  96. package/dist/types/substrate/types.d.ts.map +1 -1
  97. package/dist/types/tron/helpers/trongrid.d.ts.map +1 -1
  98. package/dist/types/tron/index.d.ts +2 -2
  99. package/dist/types/tron/index.d.ts.map +1 -1
  100. package/dist/types/tron/toolbox.d.ts +1 -1
  101. package/dist/types/tron/toolbox.d.ts.map +1 -1
  102. package/dist/types/tron/types.d.ts.map +1 -1
  103. package/dist/types/utxo/helpers/api.d.ts +15 -15
  104. package/dist/types/utxo/helpers/api.d.ts.map +1 -1
  105. package/dist/types/utxo/helpers/bchaddrjs.d.ts.map +1 -1
  106. package/dist/types/utxo/helpers/coinselect.d.ts +4 -4
  107. package/dist/types/utxo/helpers/coinselect.d.ts.map +1 -1
  108. package/dist/types/utxo/helpers/txSize.d.ts.map +1 -1
  109. package/dist/types/utxo/index.d.ts +1 -1
  110. package/dist/types/utxo/index.d.ts.map +1 -1
  111. package/dist/types/utxo/toolbox/bitcoinCash.d.ts +26 -38
  112. package/dist/types/utxo/toolbox/bitcoinCash.d.ts.map +1 -1
  113. package/dist/types/utxo/toolbox/index.d.ts +3 -3
  114. package/dist/types/utxo/toolbox/index.d.ts.map +1 -1
  115. package/dist/types/utxo/toolbox/utxo.d.ts +27 -38
  116. package/dist/types/utxo/toolbox/utxo.d.ts.map +1 -1
  117. package/dist/types/utxo/toolbox/validators.d.ts +4 -0
  118. package/dist/types/utxo/toolbox/validators.d.ts.map +1 -0
  119. package/dist/types/utxo/toolbox/zcash.d.ts +26 -37
  120. package/dist/types/utxo/toolbox/zcash.d.ts.map +1 -1
  121. package/dist/types/utxo/types.d.ts.map +1 -1
  122. package/package.json +15 -22
@@ -2,14 +2,14 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/near/helpers/core.ts", "../src/near/helpers/gasEstimation.ts", "../src/near/helpers/nep141.ts", "../src/near/toolbox.ts", "../src/near/types.ts", "../src/near/index.ts"],
4
4
  "sourcesContent": [
5
- "import type { Provider } from \"@near-js/providers\";\nimport { type DerivationPathArray, SwapKitError, derivationPathToString } from \"@swapkit/helpers\";\nimport { type KeyPair, KeyPairSigner } from \"near-api-js\";\nimport type { NearSigner } from \"../types\";\n\nexport async function getValidateNearAddress() {\n const { validateAccountId } = await import(\"near-sdk-js\");\n return (address: string) => {\n // Use the official NEAR SDK validation function if available\n try {\n return validateAccountId(address);\n } catch {\n const ACCOUNT_ID_REGEX = /^(([a-z\\d]+[-_])*[a-z\\d]+\\.)*([a-z\\d]+[-_])*[a-z\\d]+$/;\n\n return address.length >= 2 && address.length <= 64 && ACCOUNT_ID_REGEX.test(address);\n }\n };\n}\n\nexport async function getNearSignerFromPhrase(params: {\n phrase: string;\n derivationPath?: DerivationPathArray;\n index?: number;\n}) {\n const { parseSeedPhrase } = await import(\"near-seed-phrase\");\n const { KeyPair } = await import(\"near-api-js\");\n\n // Handle derivation path logic here\n // NEAR uses a 3-level derivation path: m/44'/397'/index'\n const index = params.index || 0;\n const derivationPath = params.derivationPath\n ? derivationPathToString(params.derivationPath.slice(0, 3) as [number, number, number])\n : `m/44'/397'/${index}'`;\n\n const { secretKey } = parseSeedPhrase(params.phrase, derivationPath);\n const keyPair = KeyPair.fromString(secretKey as any);\n\n return createNearSignerFromKeyPair(keyPair);\n}\n\nexport async function getNearSignerFromPrivateKey(privateKey: string) {\n const { KeyPair } = await import(\"near-api-js/lib/utils\");\n const keyPair = KeyPair.fromString(privateKey as any);\n return createNearSignerFromKeyPair(keyPair);\n}\n\nclass SKKeyPairSigner extends KeyPairSigner {\n #keyPair: KeyPair;\n\n constructor(keyPair: KeyPair) {\n super(keyPair);\n this.#keyPair = keyPair;\n }\n\n getAddress(): Promise<string> {\n // For implicit accounts, derive account ID from public key\n // NEAR implicit accounts use hex representation of the public key\n const publicKey = this.#keyPair.getPublicKey();\n const hexAddress = Buffer.from(publicKey.data).toString(\"hex\");\n return Promise.resolve(hexAddress);\n }\n}\n\nfunction createNearSignerFromKeyPair(keyPair: KeyPair): NearSigner {\n const keyPairSigner = new SKKeyPairSigner(keyPair);\n\n return keyPairSigner;\n}\n\nexport async function getFullAccessPublicKey(provider: Provider, accountId: string) {\n // Get the first full access key for the account\n const response = await provider.query({\n request_type: \"view_access_key_list\",\n finality: \"final\",\n account_id: accountId,\n });\n\n const fullAccessKey = (response as any).keys.find(\n (key: any) => key.access_key.permission === \"FullAccess\",\n );\n\n if (!fullAccessKey) {\n throw new SwapKitError(\"toolbox_near_invalid_address\");\n }\n\n const { utils } = await import(\"near-api-js\");\n const publicKey = utils.PublicKey.fromString(fullAccessKey.public_key);\n const nonce = (fullAccessKey.access_key.nonce as number) || 0;\n\n return { publicKey, nonce };\n}\n",
6
- "import type { Account } from \"near-api-js\";\nimport type { NearGasEstimateParams } from \"../types/contract\";\n\n// Gas constants (in TGas - 10^12 gas units)\nexport const GAS_COSTS = {\n SIMPLE_TRANSFER: \"1\", // 1 TGas\n TOKEN_TRANSFER: \"100\", // 100 TGas\n CONTRACT_CALL: \"100\", // 100 TGas base\n ACCOUNT_CREATION: \"30\", // 30 TGas\n CONTRACT_DEPLOYMENT: \"200\", // 200 TGas\n ACCESS_KEY_ADDITION: \"5\", // 5 TGas\n ACCESS_KEY_DELETION: \"5\", // 5 TGas\n STAKE: \"10\", // 10 TGas\n STORAGE_DEPOSIT: \"100\", // 100 TGas\n} as const;\n\n// Type guards for discriminated union\nexport function isSimpleTransfer(\n params: NearGasEstimateParams,\n): params is { recipient: string; amount: string } {\n return \"recipient\" in params && \"amount\" in params && !(\"contractId\" in params);\n}\n\nexport function isContractCall(params: NearGasEstimateParams): params is {\n contractId: string;\n methodName: string;\n args?: Record<string, any>;\n attachedDeposit?: string;\n} {\n return \"contractId\" in params && \"methodName\" in params;\n}\n\nexport function isBatchTransaction(params: NearGasEstimateParams): params is { actions: any[] } {\n return \"actions\" in params;\n}\n\nexport function isAccountCreation(params: NearGasEstimateParams): params is {\n newAccountId: string;\n publicKey?: string;\n} {\n return \"newAccountId\" in params;\n}\n\nexport function isContractDeployment(\n params: NearGasEstimateParams,\n): params is { contractCode: Uint8Array } {\n return \"contractCode\" in params;\n}\n\nexport function isCustomEstimator(params: NearGasEstimateParams): params is {\n customEstimator: (account: Account) => Promise<string>;\n} {\n return \"customEstimator\" in params;\n}\n\n// Helper function to estimate gas for batch actions\nexport function estimateBatchGas(actions: any[]) {\n let totalGas = 0;\n\n for (const action of actions) {\n switch (action.enum) {\n case \"transfer\":\n totalGas += Number(GAS_COSTS.SIMPLE_TRANSFER);\n break;\n case \"functionCall\":\n totalGas += Number(GAS_COSTS.CONTRACT_CALL);\n break;\n case \"createAccount\":\n totalGas += Number(GAS_COSTS.ACCOUNT_CREATION);\n break;\n case \"deployContract\":\n totalGas += Number(GAS_COSTS.CONTRACT_DEPLOYMENT);\n break;\n case \"addKey\":\n totalGas += Number(GAS_COSTS.ACCESS_KEY_ADDITION);\n break;\n case \"deleteKey\":\n totalGas += Number(GAS_COSTS.ACCESS_KEY_DELETION);\n break;\n case \"stake\":\n totalGas += Number(GAS_COSTS.STAKE);\n break;\n default:\n totalGas += Number(GAS_COSTS.CONTRACT_CALL);\n }\n }\n\n return totalGas.toString();\n}\n\n// Helper function to get gas cost for contract methods\nexport function getContractMethodGas(methodName: string) {\n if (methodName === \"ft_transfer\" || methodName === \"ft_transfer_call\") {\n return GAS_COSTS.TOKEN_TRANSFER;\n }\n if (methodName === \"storage_deposit\") {\n return GAS_COSTS.STORAGE_DEPOSIT;\n }\n return GAS_COSTS.CONTRACT_CALL;\n}\n\n// Convert TGas string to gas units\nexport function tgasToGas(tgas: string): string {\n return (BigInt(tgas) * BigInt(10 ** 12)).toString();\n}\n\n// Convert gas units to TGas\nexport function gasToTGas(gas: string): string {\n return (BigInt(gas) / BigInt(10 ** 12)).toString();\n}\n",
7
- "import type { Account, Contract } from \"near-api-js\";\n\nconst DEFAULT_STORAGE_DEPOSIT = \"1250000000000000000000\"; // 0.00125 NEAR\n\n// NEP-141 metadata interface\nexport interface NEP141Metadata {\n spec: string;\n name: string;\n symbol: string;\n icon?: string;\n reference?: string;\n reference_hash?: string;\n decimals: number;\n}\n\n// Storage balance response\nexport interface StorageBalance {\n total: string;\n available: string;\n}\n\n// Storage balance bounds\nexport interface StorageBalanceBounds {\n min: string;\n max?: string;\n}\n\n// BN.js is dynamically imported, but we need the type\n// Using any here is acceptable as BN.js doesn't export proper TypeScript types\ntype BN = any; // BN.js instance\n\n// Define NEP-141 contract interface\nexport interface NEP141Contract extends Contract {\n // View methods\n ft_balance_of(args: { account_id: string }): Promise<string>;\n ft_total_supply(): Promise<string>;\n ft_metadata(): Promise<NEP141Metadata>;\n storage_balance_of(args: { account_id: string }): Promise<StorageBalance | null>;\n storage_balance_bounds(): Promise<StorageBalanceBounds>;\n\n // Change methods\n ft_transfer(\n args: { receiver_id: string; amount: string; memo?: string },\n gas: BN,\n deposit: BN,\n ): Promise<void>;\n ft_transfer_call(\n args: { receiver_id: string; amount: string; msg: string; memo?: string },\n gas: BN,\n deposit: BN,\n ): Promise<void>;\n storage_deposit(\n args: { account_id?: string; registration_only?: boolean },\n gas: BN,\n deposit: BN,\n ): Promise<StorageBalance>;\n storage_withdraw(args: { amount?: string }, gas: BN, deposit?: BN): Promise<StorageBalance>;\n storage_unregister(force?: boolean, gas?: BN): Promise<boolean>;\n}\n\nexport type NEP141Token = {\n transfer: (receiverId: string, amount: string, memo?: string) => Promise<void>;\n transferCall: (receiverId: string, amount: string, msg: string, memo?: string) => Promise<void>;\n balanceOf: (accountId: string) => Promise<string>;\n totalSupply: () => Promise<string>;\n metadata: () => Promise<NEP141Metadata>;\n storageBalanceOf: (accountId: string) => Promise<StorageBalance | null>;\n storageDeposit: (accountId?: string, amount?: string) => Promise<StorageBalance>;\n ensureStorage: (accountId: string) => Promise<void>;\n contract: NEP141Contract;\n};\n\n// Create a Near contract instance\nexport async function createNearContract<T extends Contract>({\n account,\n contractId,\n viewMethods,\n changeMethods,\n}: {\n account: Account;\n contractId: string;\n viewMethods: string[];\n changeMethods: string[];\n}): Promise<T> {\n const { Contract } = await import(\"near-api-js\");\n\n return new Contract(account, contractId, {\n viewMethods,\n changeMethods,\n useLocalViewExecution: true, // Enable local view execution for efficiency\n }) as T;\n}\n\nexport async function createNEP141Token({\n contractId,\n account,\n}: {\n contractId: string;\n account: Account;\n}): Promise<NEP141Token> {\n const BN = (await import(\"bn.js\")).default;\n\n const contract = await createNearContract<NEP141Contract>({\n account,\n contractId,\n viewMethods: [\n \"ft_balance_of\",\n \"ft_total_supply\",\n \"ft_metadata\",\n \"storage_balance_of\",\n \"storage_balance_bounds\",\n ],\n changeMethods: [\n \"ft_transfer\",\n \"ft_transfer_call\",\n \"storage_deposit\",\n \"storage_withdraw\",\n \"storage_unregister\",\n ],\n });\n\n // Helper to ensure storage before transfers\n const ensureStorageFor = async (accountId: string) => {\n const balance = await contract.storage_balance_of({ account_id: accountId });\n if (!balance) {\n // Get minimum storage requirement\n const bounds = await contract.storage_balance_bounds();\n const deposit = bounds?.min || DEFAULT_STORAGE_DEPOSIT;\n\n await contract.storage_deposit(\n { account_id: accountId },\n new BN(\"100000000000000\"), // 100 TGas\n new BN(deposit),\n );\n }\n };\n\n return {\n transfer: async (receiverId: string, amount: string, memo?: string) => {\n // Ensure recipient has storage before transfer\n await ensureStorageFor(receiverId);\n\n return contract.ft_transfer(\n { receiver_id: receiverId, amount, memo },\n new BN(\"100000000000000\"), // 100 TGas\n new BN(\"1\"), // 1 yoctoNEAR for security\n );\n },\n\n transferCall: async (receiverId: string, amount: string, msg: string, memo?: string) => {\n // Ensure recipient has storage before transfer\n await ensureStorageFor(receiverId);\n\n return contract.ft_transfer_call(\n { receiver_id: receiverId, amount, memo, msg },\n new BN(\"100000000000000\"), // 100 TGas\n new BN(\"1\"), // 1 yoctoNEAR for security\n );\n },\n\n balanceOf: (accountId: string) => contract.ft_balance_of({ account_id: accountId }),\n\n totalSupply: () => contract.ft_total_supply(),\n\n metadata: () => contract.ft_metadata(),\n\n storageBalanceOf: (accountId: string) => contract.storage_balance_of({ account_id: accountId }),\n\n storageDeposit: (accountId?: string, amount?: string) =>\n contract.storage_deposit(\n { account_id: accountId },\n new BN(\"100000000000000\"),\n new BN(amount || DEFAULT_STORAGE_DEPOSIT),\n ),\n\n ensureStorage: ensureStorageFor,\n\n // Raw contract access for advanced use cases\n contract,\n };\n}\n",
8
- "import { AssetValue, BaseDecimal, Chain, SwapKitError, getRPCUrl } from \"@swapkit/helpers\";\nimport type { Account, Contract } from \"near-api-js\";\nimport type { SignedTransaction, Transaction } from \"near-api-js/lib/transaction\";\nimport {\n getFullAccessPublicKey,\n getNearSignerFromPhrase,\n getNearSignerFromPrivateKey,\n getValidateNearAddress,\n} from \"./helpers/core\";\nimport {\n GAS_COSTS,\n estimateBatchGas,\n getContractMethodGas,\n isAccountCreation,\n isBatchTransaction,\n isContractCall,\n isContractDeployment,\n isCustomEstimator,\n isSimpleTransfer,\n} from \"./helpers/gasEstimation\";\nimport { createNEP141Token, createNearContract } from \"./helpers/nep141\";\nimport type {\n NearCreateTransactionParams,\n NearFunctionCallParams,\n NearToolboxParams,\n NearTransferParams,\n} from \"./types\";\nimport type { NearContractInterface, NearGasEstimateParams } from \"./types/contract\";\nimport type {\n BatchTransaction,\n ContractFunctionCallParams,\n GetSignerFromPhraseParams,\n NearToolbox,\n SerializedTransaction,\n} from \"./types/toolbox\";\n\nexport async function getNearToolbox(toolboxParams?: NearToolboxParams): Promise<NearToolbox> {\n const { P, match } = await import(\"ts-pattern\");\n const { providers } = await import(\"near-api-js\");\n const signer = await match(toolboxParams)\n .with({ phrase: P.string }, async (params) => {\n const signer = await getNearSignerFromPhrase(params);\n return signer;\n })\n .with({ signer: P.any }, ({ signer }) => signer)\n .otherwise(() => undefined);\n\n const url = await getRPCUrl(Chain.Near);\n\n const provider = new providers.JsonRpcProvider({ url });\n\n async function getAccount(address?: string) {\n const { Account } = await import(\"near-api-js\");\n\n const _address = address || (await getAddress());\n\n const account = new Account(_address, provider, signer);\n\n return account;\n }\n\n async function getAddress() {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n const address = await signer.getAddress();\n return address;\n }\n\n async function transfer(params: NearTransferParams) {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n const { recipient, assetValue } = params;\n\n const nearValidateAddress = await getValidateNearAddress();\n\n if (!nearValidateAddress(recipient)) {\n throw new SwapKitError(\"toolbox_near_invalid_address\");\n }\n\n const account = await getAccount();\n\n if (assetValue.isGasAsset === false) {\n // NEP-141 token transfer\n const contractId = assetValue.address;\n if (!contractId) {\n throw new SwapKitError(\"toolbox_near_missing_contract_address\");\n }\n\n const amount = assetValue.getBaseValue(\"string\");\n\n return callFunction({\n contractId,\n methodName: \"ft_transfer\",\n args: {\n receiver_id: recipient,\n amount,\n memo: params.memo,\n },\n });\n }\n\n try {\n const transferAmount = assetValue.getBaseValue(\"string\");\n\n const result = await account.transfer({\n receiverId: recipient,\n amount: transferAmount,\n });\n\n return result.transaction_outcome.id;\n } catch (error) {\n throw new SwapKitError(\"toolbox_near_transfer_failed\", { error });\n }\n }\n\n async function createTransaction(\n params: NearCreateTransactionParams,\n ): Promise<SerializedTransaction> {\n const { recipient, assetValue, memo, feeRate: gas, attachedDeposit, sender: signerId } = params;\n const validateNearAddress = await getValidateNearAddress();\n\n if (!validateNearAddress(recipient)) {\n throw new SwapKitError(\"toolbox_near_invalid_address\", { address: recipient });\n }\n\n if (!validateNearAddress(signerId)) {\n throw new SwapKitError(\"toolbox_near_invalid_address\", { address: signerId });\n }\n\n // Handle NEP-141 token transfers\n if (!assetValue.isGasAsset) {\n const contractId = assetValue.address;\n if (!contractId) {\n throw new SwapKitError(\"toolbox_near_missing_contract_address\");\n }\n\n return createContractFunctionCall({\n sender: signerId,\n contractId,\n methodName: \"ft_transfer\",\n args: {\n receiver_id: recipient,\n amount: assetValue.getBaseValue(\"string\"),\n memo: memo || null,\n },\n gas: gas.toString() || \"100000000000000\", // 100 TGas default\n attachedDeposit: \"1\", // 1 yoctoNEAR required for NEP-141 transfers\n });\n }\n\n // Native NEAR transfer\n const { publicKey, nonce } = await getFullAccessPublicKey(provider, signerId);\n const baseAmount = assetValue.getBaseValue(\"bigint\");\n\n const { SCHEMA } = await import(\"near-api-js/lib/transaction\");\n const { transactions, utils } = await import(\"near-api-js\");\n\n const txActions = [transactions.transfer(baseAmount)];\n\n if (memo && attachedDeposit) {\n txActions.push(\n transactions.functionCall(\"memo\", { memo }, BigInt(gas), BigInt(attachedDeposit)),\n );\n }\n\n const block = await provider.block({ finality: \"final\" });\n const blockHash = utils.serialize.base_decode(block.header.hash);\n\n const transaction = transactions.createTransaction(\n signerId,\n publicKey,\n recipient,\n nonce,\n txActions,\n blockHash,\n );\n\n const serializedTx = utils.serialize.serialize(SCHEMA.Transaction, transaction);\n const serializedBase64 = Buffer.from(serializedTx).toString(\"base64\");\n\n return {\n serialized: serializedBase64,\n publicKey: publicKey.toString(),\n details: {\n signerId,\n nonce: nonce,\n blockHash: utils.serialize.base_encode(blockHash),\n },\n };\n }\n\n async function createContractFunctionCall(\n params: ContractFunctionCallParams,\n ): Promise<SerializedTransaction> {\n const { sender: accountId } = params;\n\n const { publicKey, nonce } = await getFullAccessPublicKey(provider, accountId);\n\n const { SCHEMA } = await import(\"near-api-js/lib/transaction\");\n const { transactions, utils } = await import(\"near-api-js\");\n const block = await provider.block({ finality: \"final\" });\n const blockHash = utils.serialize.base_decode(block.header.hash);\n\n const actions = [\n transactions.functionCall(\n params.methodName,\n Buffer.from(JSON.stringify(params.args)),\n BigInt(params.gas),\n BigInt(params.attachedDeposit),\n ),\n ];\n\n const transaction = transactions.createTransaction(\n accountId,\n publicKey,\n params.contractId,\n nonce,\n actions,\n blockHash,\n );\n\n const serializedTx = utils.serialize.serialize(SCHEMA.Transaction, transaction);\n const serializedBase64 = Buffer.from(serializedTx).toString(\"base64\");\n\n return {\n serialized: serializedBase64,\n publicKey: publicKey.toString(),\n details: {\n signerId: accountId,\n receiverId: params.contractId,\n methodName: params.methodName,\n nonce: nonce,\n blockHash: utils.serialize.base_encode(blockHash),\n },\n };\n }\n\n async function signTransaction(transaction: Transaction): Promise<SignedTransaction> {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n // Use the new signer interface method\n const [_hash, signedTx] = await signer.signTransaction(transaction);\n return signedTx;\n }\n\n async function broadcastTransaction(signedTransaction: SignedTransaction) {\n const result = await provider.sendTransaction(signedTransaction);\n return result.transaction.hash;\n }\n\n async function estimateTransactionFee(params: NearTransferParams | NearGasEstimateParams) {\n if (\"assetValue\" in params) {\n const baseTransferCost = \"115123062500\"; // gas units for transfer\n const receiptCreationCost = \"108059500000\"; // gas units for receipt\n\n const totalGasUnits = BigInt(baseTransferCost) + BigInt(receiptCreationCost);\n\n const gasPrice = await getCurrentGasPrice();\n\n // NEAR doesn't support fee multipliers - gas price is fixed by the network\n const totalCostYocto = totalGasUnits * BigInt(gasPrice.toString());\n\n return AssetValue.from({\n chain: Chain.Near,\n value: totalCostYocto.toString(),\n fromBaseDecimal: BaseDecimal[Chain.Near],\n });\n }\n\n // Handle new gas estimation params\n const account = signer ? await getAccount() : undefined;\n return estimateGas(params, account);\n }\n\n async function getCurrentGasPrice() {\n try {\n const result = await provider.query({\n request_type: \"call_function\",\n finality: \"final\",\n account_id: \"system\",\n method_name: \"gas_price\",\n args_base64: \"\",\n });\n\n return result;\n } catch {\n return \"100000000\"; // 0.0001 NEAR per Tgas\n }\n }\n\n async function createSubAccount(\n subAccountId: string,\n publicKey: string,\n initialBalance: string,\n ): Promise<string> {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n const account = await getAccount();\n const { utils } = await import(\"near-api-js\");\n\n const balanceInYocto = utils.format.parseNearAmount(initialBalance) || \"0\";\n\n const result = await account.createAccount(\n subAccountId,\n utils.PublicKey.fromString(publicKey),\n BigInt(balanceInYocto),\n );\n\n return result.transaction.hash;\n }\n\n async function callFunction(params: NearFunctionCallParams): Promise<string> {\n try {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n const { transactions } = await import(\"near-api-js\");\n\n const { contractId, methodName, args, deposit } = params;\n const account = await getAccount();\n\n const estimatedGas = await estimateGas({\n methodName,\n args: args || {},\n contractId,\n });\n\n const functionAction = transactions.functionCall(\n methodName,\n args || {},\n estimatedGas.getBaseValue(\"bigint\"),\n BigInt(deposit || \"0\"),\n );\n\n const result = await account.signAndSendTransaction({\n receiverId: contractId,\n actions: [functionAction],\n });\n\n return result.transaction_outcome.id;\n } catch (error) {\n throw new SwapKitError(\"toolbox_near_transfer_failed\", { error });\n }\n }\n\n // Create typed contract interface\n async function createContract<T extends Contract = Contract>(\n contractInterface: NearContractInterface,\n ): Promise<T> {\n const account = await getAccount();\n\n return createNearContract<T>({\n account,\n contractId: contractInterface.contractId,\n viewMethods: contractInterface.viewMethods,\n changeMethods: contractInterface.changeMethods,\n });\n }\n\n async function executeBatchTransaction(batch: BatchTransaction): Promise<string> {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n if (batch.actions.length === 0) {\n throw new SwapKitError(\"toolbox_near_empty_batch\");\n }\n\n const account = await getAccount();\n\n // Use account.signAndSendTransaction for batch operations\n const result = await account.signAndSendTransaction({\n receiverId: batch.receiverId,\n actions: batch.actions,\n });\n\n return result.transaction.hash;\n }\n\n async function nep141(contractId: string) {\n const account = await getAccount();\n return createNEP141Token({ contractId, account });\n }\n\n async function getBalance(address: string) {\n try {\n const account = await getAccount(address);\n\n let nativeBalance: AssetValue;\n try {\n const value = await account.getBalance();\n\n nativeBalance = AssetValue.from({\n chain: Chain.Near,\n value,\n fromBaseDecimal: BaseDecimal[Chain.Near],\n });\n } catch {\n nativeBalance = AssetValue.from({\n chain: Chain.Near,\n value: \"0\",\n fromBaseDecimal: BaseDecimal[Chain.Near],\n });\n }\n\n // // Then, fetch token balances from API\n // let tokenBalances: AssetValue[] = [];\n // try {\n // const apiBalances = await SwapKitApi.getChainBalance({\n // chain: Chain.Near,\n // address,\n // scamFilter,\n // });\n\n // tokenBalances = apiBalances\n // .filter(({ identifier }) => identifier !== Chain.Near) // Filter out native NEAR\n // .map(({ identifier, value, decimal }) => {\n // return new AssetValue({\n // decimal: decimal || BaseDecimal[Chain.Near],\n // value,\n // identifier,\n // });\n // });\n // } catch (error) {\n // // If API fails, just return on-chain balance\n // console.warn(\"Failed to fetch token balances from API:\", error);\n // }\n\n // Merge native balance with token balances\n // return [nativeBalance, ...tokenBalances];\n return [nativeBalance];\n } catch (error) {\n throw new SwapKitError(\"toolbox_near_balance_failed\", { error });\n }\n }\n\n async function estimateGas(params: NearGasEstimateParams, account?: Account) {\n const gasInTGas = await match(params)\n .when(isSimpleTransfer, () => GAS_COSTS.SIMPLE_TRANSFER)\n .when(isContractCall, (p) => getContractMethodGas(p.methodName))\n .when(isBatchTransaction, (p) => estimateBatchGas(p.actions))\n .when(isAccountCreation, () => GAS_COSTS.ACCOUNT_CREATION)\n .when(isContractDeployment, () => GAS_COSTS.CONTRACT_DEPLOYMENT)\n .when(isCustomEstimator, (p) => {\n if (!account) {\n throw new SwapKitError(\"toolbox_near_no_account\");\n }\n return p.customEstimator(account);\n })\n .otherwise(() => {\n throw new SwapKitError(\"toolbox_near_invalid_gas_params\");\n });\n\n // Convert TGas to gas price in NEAR\n const gasPrice = await getGasPrice();\n const gasInUnits = BigInt(gasInTGas) * BigInt(10 ** 12); // Convert TGas to gas units\n const costInYoctoNear = gasInUnits * BigInt(gasPrice);\n\n return AssetValue.from({\n chain: Chain.Near,\n value: costInYoctoNear,\n fromBaseDecimal: BaseDecimal[Chain.Near],\n });\n }\n\n // Get current gas price from network\n async function getGasPrice() {\n try {\n const result = await provider.gasPrice(null);\n return result.gas_price || \"100000000\";\n } catch (_error) {\n // Fallback to default\n return \"100000000\";\n }\n }\n\n return {\n getAddress,\n getPublicKey: async () => (signer ? (await signer.getPublicKey()).toString() : \"\"),\n provider,\n transfer,\n createTransaction,\n createContractFunctionCall,\n estimateTransactionFee,\n broadcastTransaction,\n signTransaction,\n getBalance,\n validateAddress: await getValidateNearAddress(),\n getSignerFromPhrase: (params: GetSignerFromPhraseParams) => getNearSignerFromPhrase(params),\n getSignerFromPrivateKey: getNearSignerFromPrivateKey,\n callFunction,\n createSubAccount,\n createContract,\n executeBatchTransaction,\n nep141,\n getGasPrice,\n estimateGas,\n };\n}\n",
9
- "import type {\n ChainSigner,\n DerivationPathArray,\n GenericCreateTransactionParams,\n GenericTransferParams,\n} from \"@swapkit/helpers\";\nimport type { KeyPairSigner, Signer, transactions } from \"near-api-js\";\n\ninterface NearKeyPairSigner\n extends KeyPairSigner,\n Omit<\n ChainSigner<typeof transactions.Transaction, typeof transactions.SignedTransaction>,\n \"signTransaction\"\n > {}\n\ninterface NearGeneralSigner\n extends Signer,\n Omit<\n ChainSigner<typeof transactions.Transaction, typeof transactions.SignedTransaction>,\n \"signTransaction\"\n > {}\n\n// Extend both ChainSigner and NEAR's Signer class, omitting signTransaction\nexport type NearSigner = NearKeyPairSigner | NearGeneralSigner;\n\nexport type NearToolboxParams =\n | { signer?: NearSigner; accountId?: string }\n | { phrase?: string; index?: number; derivationPath?: DerivationPathArray };\n\nexport interface NearTransferParams extends GenericTransferParams {}\n\nexport interface NearConfig {\n networkId: \"mainnet\" | \"testnet\" | \"betanet\";\n nodeUrl: string;\n walletUrl?: string;\n helperUrl?: string;\n keyStore?: any;\n}\n\nexport interface NearFunctionCallParams {\n contractId: string;\n methodName: string;\n args: Uint8Array | Record<string, any>;\n deposit?: bigint | string | number;\n gas?: bigint | string | number;\n}\n\nexport interface NearCreateTransactionParams extends GenericCreateTransactionParams {\n // NEAR-specific options\n attachedDeposit?: string;\n // Function call parameters\n functionCall?: {\n methodName: string;\n args: object;\n attachedDeposit: string;\n };\n}\n\nexport * from \"./toolbox\";\nexport * from \"./types/toolbox\";\nexport * from \"./types/nep141\";\nexport * from \"./types/contract\";\n",
10
- "import type { getNearToolbox } from \"./toolbox\";\n\nexport * from \"./toolbox\";\nexport * from \"./types\";\nexport * from \"./helpers/core\";\nexport * from \"./helpers/gasEstimation\";\nexport * from \"./helpers/nep141\";\n\nexport type NearWallet = Awaited<ReturnType<typeof getNearToolbox>>;\n\nexport type {\n NearContractInterface,\n NearCallParams,\n NearGasEstimateParams,\n} from \"./types/contract\";\nexport type {\n FungibleTokenMetadata,\n StorageBalance,\n StorageBalanceBounds,\n NEP141Contract,\n TokenTransferParams,\n} from \"./types/nep141\";\n"
5
+ "import type { Provider } from \"@near-js/providers\";\nimport { type DerivationPathArray, derivationPathToString, SwapKitError } from \"@swapkit/helpers\";\nimport { type KeyPair, KeyPairSigner } from \"near-api-js\";\nimport type { NearSigner } from \"../types\";\n\nexport async function getValidateNearAddress() {\n const { validateAccountId } = await import(\"near-sdk-js\");\n return (address: string) => {\n // Use the official NEAR SDK validation function if available\n try {\n return validateAccountId(address);\n } catch {\n const ACCOUNT_ID_REGEX = /^(([a-z\\d]+[-_])*[a-z\\d]+\\.)*([a-z\\d]+[-_])*[a-z\\d]+$/;\n\n return address.length >= 2 && address.length <= 64 && ACCOUNT_ID_REGEX.test(address);\n }\n };\n}\n\nexport async function getNearSignerFromPhrase(params: {\n phrase: string;\n derivationPath?: DerivationPathArray;\n index?: number;\n}) {\n const { parseSeedPhrase } = await import(\"near-seed-phrase\");\n const { KeyPair } = await import(\"near-api-js\");\n\n // Handle derivation path logic here\n // NEAR uses a 3-level derivation path: m/44'/397'/index'\n const index = params.index || 0;\n const derivationPath = params.derivationPath\n ? derivationPathToString(params.derivationPath.slice(0, 3) as [number, number, number])\n : `m/44'/397'/${index}'`;\n\n const { secretKey } = parseSeedPhrase(params.phrase, derivationPath);\n const keyPair = KeyPair.fromString(secretKey as any);\n\n return createNearSignerFromKeyPair(keyPair);\n}\n\nexport async function getNearSignerFromPrivateKey(privateKey: string) {\n const { KeyPair } = await import(\"near-api-js/lib/utils\");\n const keyPair = KeyPair.fromString(privateKey as any);\n return createNearSignerFromKeyPair(keyPair);\n}\n\nclass SKKeyPairSigner extends KeyPairSigner {\n #keyPair: KeyPair;\n\n constructor(keyPair: KeyPair) {\n super(keyPair);\n this.#keyPair = keyPair;\n }\n\n getAddress(): Promise<string> {\n // For implicit accounts, derive account ID from public key\n // NEAR implicit accounts use hex representation of the public key\n const publicKey = this.#keyPair.getPublicKey();\n const hexAddress = Buffer.from(publicKey.data).toString(\"hex\");\n return Promise.resolve(hexAddress);\n }\n}\n\nfunction createNearSignerFromKeyPair(keyPair: KeyPair): NearSigner {\n const keyPairSigner = new SKKeyPairSigner(keyPair);\n\n return keyPairSigner;\n}\n\nexport async function getFullAccessPublicKey(provider: Provider, accountId: string) {\n // Get the first full access key for the account\n const response = await provider.query({\n account_id: accountId,\n finality: \"final\",\n request_type: \"view_access_key_list\",\n });\n\n const fullAccessKey = (response as any).keys.find((key: any) => key.access_key.permission === \"FullAccess\");\n\n if (!fullAccessKey) {\n throw new SwapKitError(\"toolbox_near_invalid_address\");\n }\n\n const { utils } = await import(\"near-api-js\");\n const publicKey = utils.PublicKey.fromString(fullAccessKey.public_key);\n const nonce = (fullAccessKey.access_key.nonce as number) || 0;\n\n return { nonce, publicKey };\n}\n",
6
+ "import type { Account } from \"near-api-js\";\nimport type { NearGasEstimateParams } from \"../types/contract\";\n\n// Gas constants (in TGas - 10^12 gas units)\nexport const GAS_COSTS = {\n ACCESS_KEY_ADDITION: \"5\", // 5 TGas\n ACCESS_KEY_DELETION: \"5\", // 5 TGas\n ACCOUNT_CREATION: \"30\", // 30 TGas\n CONTRACT_CALL: \"100\", // 100 TGas base\n CONTRACT_DEPLOYMENT: \"200\", // 200 TGas\n SIMPLE_TRANSFER: \"1\", // 1 TGas\n STAKE: \"10\", // 10 TGas\n STORAGE_DEPOSIT: \"100\", // 100 TGas\n TOKEN_TRANSFER: \"100\", // 100 TGas\n} as const;\n\n// Type guards for discriminated union\nexport function isSimpleTransfer(params: NearGasEstimateParams): params is { recipient: string; amount: string } {\n return \"recipient\" in params && \"amount\" in params && !(\"contractId\" in params);\n}\n\nexport function isContractCall(\n params: NearGasEstimateParams,\n): params is { contractId: string; methodName: string; args?: Record<string, any>; attachedDeposit?: string } {\n return \"contractId\" in params && \"methodName\" in params;\n}\n\nexport function isBatchTransaction(params: NearGasEstimateParams): params is { actions: any[] } {\n return \"actions\" in params;\n}\n\nexport function isAccountCreation(\n params: NearGasEstimateParams,\n): params is { newAccountId: string; publicKey?: string } {\n return \"newAccountId\" in params;\n}\n\nexport function isContractDeployment(params: NearGasEstimateParams): params is { contractCode: Uint8Array } {\n return \"contractCode\" in params;\n}\n\nexport function isCustomEstimator(\n params: NearGasEstimateParams,\n): params is { customEstimator: (account: Account) => Promise<string> } {\n return \"customEstimator\" in params;\n}\n\n// Helper function to estimate gas for batch actions\nexport function estimateBatchGas(actions: any[]) {\n let totalGas = 0;\n\n for (const action of actions) {\n switch (action.enum) {\n case \"transfer\":\n totalGas += Number(GAS_COSTS.SIMPLE_TRANSFER);\n break;\n case \"functionCall\":\n totalGas += Number(GAS_COSTS.CONTRACT_CALL);\n break;\n case \"createAccount\":\n totalGas += Number(GAS_COSTS.ACCOUNT_CREATION);\n break;\n case \"deployContract\":\n totalGas += Number(GAS_COSTS.CONTRACT_DEPLOYMENT);\n break;\n case \"addKey\":\n totalGas += Number(GAS_COSTS.ACCESS_KEY_ADDITION);\n break;\n case \"deleteKey\":\n totalGas += Number(GAS_COSTS.ACCESS_KEY_DELETION);\n break;\n case \"stake\":\n totalGas += Number(GAS_COSTS.STAKE);\n break;\n default:\n totalGas += Number(GAS_COSTS.CONTRACT_CALL);\n }\n }\n\n return totalGas.toString();\n}\n\n// Helper function to get gas cost for contract methods\nexport function getContractMethodGas(methodName: string) {\n if (methodName === \"ft_transfer\" || methodName === \"ft_transfer_call\") {\n return GAS_COSTS.TOKEN_TRANSFER;\n }\n if (methodName === \"storage_deposit\") {\n return GAS_COSTS.STORAGE_DEPOSIT;\n }\n return GAS_COSTS.CONTRACT_CALL;\n}\n\n// Convert TGas string to gas units\nexport function tgasToGas(tgas: string): string {\n return (BigInt(tgas) * BigInt(10 ** 12)).toString();\n}\n\n// Convert gas units to TGas\nexport function gasToTGas(gas: string): string {\n return (BigInt(gas) / BigInt(10 ** 12)).toString();\n}\n",
7
+ "import type { Account, Contract } from \"near-api-js\";\n\nconst DEFAULT_STORAGE_DEPOSIT = \"1250000000000000000000\"; // 0.00125 NEAR\n\n// NEP-141 metadata interface\nexport interface NEP141Metadata {\n spec: string;\n name: string;\n symbol: string;\n icon?: string;\n reference?: string;\n reference_hash?: string;\n decimals: number;\n}\n\n// Storage balance response\nexport interface StorageBalance {\n total: string;\n available: string;\n}\n\n// Storage balance bounds\nexport interface StorageBalanceBounds {\n min: string;\n max?: string;\n}\n\n// BN.js is dynamically imported, but we need the type\n// Using any here is acceptable as BN.js doesn't export proper TypeScript types\ntype BN = any; // BN.js instance\n\n// Define NEP-141 contract interface\nexport interface NEP141Contract extends Contract {\n // View methods\n ft_balance_of(args: { account_id: string }): Promise<string>;\n ft_total_supply(): Promise<string>;\n ft_metadata(): Promise<NEP141Metadata>;\n storage_balance_of(args: { account_id: string }): Promise<StorageBalance | null>;\n storage_balance_bounds(): Promise<StorageBalanceBounds>;\n\n // Change methods\n ft_transfer(args: { receiver_id: string; amount: string; memo?: string }, gas: BN, deposit: BN): Promise<void>;\n ft_transfer_call(\n args: { receiver_id: string; amount: string; msg: string; memo?: string },\n gas: BN,\n deposit: BN,\n ): Promise<void>;\n storage_deposit(\n args: { account_id?: string; registration_only?: boolean },\n gas: BN,\n deposit: BN,\n ): Promise<StorageBalance>;\n storage_withdraw(args: { amount?: string }, gas: BN, deposit?: BN): Promise<StorageBalance>;\n storage_unregister(force?: boolean, gas?: BN): Promise<boolean>;\n}\n\nexport type NEP141Token = {\n transfer: (receiverId: string, amount: string, memo?: string) => Promise<void>;\n transferCall: (receiverId: string, amount: string, msg: string, memo?: string) => Promise<void>;\n balanceOf: (accountId: string) => Promise<string>;\n totalSupply: () => Promise<string>;\n metadata: () => Promise<NEP141Metadata>;\n storageBalanceOf: (accountId: string) => Promise<StorageBalance | null>;\n storageDeposit: (accountId?: string, amount?: string) => Promise<StorageBalance>;\n ensureStorage: (accountId: string) => Promise<void>;\n contract: NEP141Contract;\n};\n\n// Create a Near contract instance\nexport async function createNearContract<T extends Contract>({\n account,\n contractId,\n viewMethods,\n changeMethods,\n}: {\n account: Account;\n contractId: string;\n viewMethods: string[];\n changeMethods: string[];\n}): Promise<T> {\n const { Contract } = await import(\"near-api-js\");\n\n return new Contract(account, contractId, {\n changeMethods,\n useLocalViewExecution: true, // Enable local view execution for efficiency\n viewMethods,\n }) as T;\n}\n\nexport async function createNEP141Token({\n contractId,\n account,\n}: {\n contractId: string;\n account: Account;\n}): Promise<NEP141Token> {\n const BN = (await import(\"bn.js\")).default;\n\n const contract = await createNearContract<NEP141Contract>({\n account,\n changeMethods: [\"ft_transfer\", \"ft_transfer_call\", \"storage_deposit\", \"storage_withdraw\", \"storage_unregister\"],\n contractId,\n viewMethods: [\"ft_balance_of\", \"ft_total_supply\", \"ft_metadata\", \"storage_balance_of\", \"storage_balance_bounds\"],\n });\n\n // Helper to ensure storage before transfers\n const ensureStorageFor = async (accountId: string) => {\n const balance = await contract.storage_balance_of({ account_id: accountId });\n if (!balance) {\n // Get minimum storage requirement\n const bounds = await contract.storage_balance_bounds();\n const deposit = bounds?.min || DEFAULT_STORAGE_DEPOSIT;\n\n await contract.storage_deposit(\n { account_id: accountId },\n new BN(\"100000000000000\"), // 100 TGas\n new BN(deposit),\n );\n }\n };\n\n return {\n balanceOf: (accountId: string) => contract.ft_balance_of({ account_id: accountId }),\n\n // Raw contract access for advanced use cases\n contract,\n\n ensureStorage: ensureStorageFor,\n\n metadata: () => contract.ft_metadata(),\n\n storageBalanceOf: (accountId: string) => contract.storage_balance_of({ account_id: accountId }),\n\n storageDeposit: (accountId?: string, amount?: string) =>\n contract.storage_deposit(\n { account_id: accountId },\n new BN(\"100000000000000\"),\n new BN(amount || DEFAULT_STORAGE_DEPOSIT),\n ),\n\n totalSupply: () => contract.ft_total_supply(),\n transfer: async (receiverId: string, amount: string, memo?: string) => {\n // Ensure recipient has storage before transfer\n await ensureStorageFor(receiverId);\n\n return contract.ft_transfer(\n { amount, memo, receiver_id: receiverId },\n new BN(\"100000000000000\"), // 100 TGas\n new BN(\"1\"), // 1 yoctoNEAR for security\n );\n },\n\n transferCall: async (receiverId: string, amount: string, msg: string, memo?: string) => {\n // Ensure recipient has storage before transfer\n await ensureStorageFor(receiverId);\n\n return contract.ft_transfer_call(\n { amount, memo, msg, receiver_id: receiverId },\n new BN(\"100000000000000\"), // 100 TGas\n new BN(\"1\"), // 1 yoctoNEAR for security\n );\n },\n };\n}\n",
8
+ "import { AssetValue, BaseDecimal, Chain, getRPCUrl, SwapKitError } from \"@swapkit/helpers\";\nimport type { Account, Contract } from \"near-api-js\";\nimport type { SignedTransaction, Transaction } from \"near-api-js/lib/transaction\";\nimport {\n getFullAccessPublicKey,\n getNearSignerFromPhrase,\n getNearSignerFromPrivateKey,\n getValidateNearAddress,\n} from \"./helpers/core\";\nimport {\n estimateBatchGas,\n GAS_COSTS,\n getContractMethodGas,\n isAccountCreation,\n isBatchTransaction,\n isContractCall,\n isContractDeployment,\n isCustomEstimator,\n isSimpleTransfer,\n} from \"./helpers/gasEstimation\";\nimport { createNEP141Token, createNearContract } from \"./helpers/nep141\";\nimport type {\n NearCreateTransactionParams,\n NearFunctionCallParams,\n NearToolboxParams,\n NearTransferParams,\n} from \"./types\";\nimport type { NearContractInterface, NearGasEstimateParams } from \"./types/contract\";\nimport type {\n BatchTransaction,\n ContractFunctionCallParams,\n GetSignerFromPhraseParams,\n NearToolbox,\n SerializedTransaction,\n} from \"./types/toolbox\";\n\nexport async function getNearToolbox(toolboxParams?: NearToolboxParams): Promise<NearToolbox> {\n const { P, match } = await import(\"ts-pattern\");\n const { providers } = await import(\"near-api-js\");\n const signer = await match(toolboxParams)\n .with({ phrase: P.string }, async (params) => {\n const signer = await getNearSignerFromPhrase(params);\n return signer;\n })\n .with({ signer: P.any }, ({ signer }) => signer)\n .otherwise(() => undefined);\n\n const url = await getRPCUrl(Chain.Near);\n\n const provider = new providers.JsonRpcProvider({ url });\n\n async function getAccount(address?: string) {\n const { Account } = await import(\"near-api-js\");\n\n const _address = address || (await getAddress());\n\n const account = new Account(_address, provider, signer);\n\n return account;\n }\n\n async function getAddress() {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n const address = await signer.getAddress();\n return address;\n }\n\n async function transfer(params: NearTransferParams) {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n const { recipient, assetValue } = params;\n\n const nearValidateAddress = await getValidateNearAddress();\n\n if (!nearValidateAddress(recipient)) {\n throw new SwapKitError(\"toolbox_near_invalid_address\");\n }\n\n const account = await getAccount();\n\n if (assetValue.isGasAsset === false) {\n // NEP-141 token transfer\n const contractId = assetValue.address;\n if (!contractId) {\n throw new SwapKitError(\"toolbox_near_missing_contract_address\");\n }\n\n const amount = assetValue.getBaseValue(\"string\");\n\n return callFunction({\n args: { amount, memo: params.memo, receiver_id: recipient },\n contractId,\n methodName: \"ft_transfer\",\n });\n }\n\n try {\n const transferAmount = assetValue.getBaseValue(\"string\");\n\n const result = await account.transfer({ amount: transferAmount, receiverId: recipient });\n\n return result.transaction_outcome.id;\n } catch (error) {\n throw new SwapKitError(\"toolbox_near_transfer_failed\", { error });\n }\n }\n\n async function createTransaction(params: NearCreateTransactionParams): Promise<SerializedTransaction> {\n const { recipient, assetValue, memo, feeRate: gas, attachedDeposit, sender: signerId } = params;\n const validateNearAddress = await getValidateNearAddress();\n\n if (!validateNearAddress(recipient)) {\n throw new SwapKitError(\"toolbox_near_invalid_address\", { address: recipient });\n }\n\n if (!validateNearAddress(signerId)) {\n throw new SwapKitError(\"toolbox_near_invalid_address\", { address: signerId });\n }\n\n // Handle NEP-141 token transfers\n if (!assetValue.isGasAsset) {\n const contractId = assetValue.address;\n if (!contractId) {\n throw new SwapKitError(\"toolbox_near_missing_contract_address\");\n }\n\n return createContractFunctionCall({\n args: { amount: assetValue.getBaseValue(\"string\"), memo: memo || null, receiver_id: recipient },\n attachedDeposit: \"1\", // 1 yoctoNEAR required for NEP-141 transfers\n contractId,\n gas: gas.toString() || \"100000000000000\", // 100 TGas default\n methodName: \"ft_transfer\",\n sender: signerId,\n });\n }\n\n // Native NEAR transfer\n const { publicKey, nonce } = await getFullAccessPublicKey(provider, signerId);\n const baseAmount = assetValue.getBaseValue(\"bigint\");\n\n const { SCHEMA } = await import(\"near-api-js/lib/transaction\");\n const { transactions, utils } = await import(\"near-api-js\");\n\n const txActions = [transactions.transfer(baseAmount)];\n\n if (memo && attachedDeposit) {\n txActions.push(transactions.functionCall(\"memo\", { memo }, BigInt(gas), BigInt(attachedDeposit)));\n }\n\n const block = await provider.block({ finality: \"final\" });\n const blockHash = utils.serialize.base_decode(block.header.hash);\n\n const transaction = transactions.createTransaction(signerId, publicKey, recipient, nonce, txActions, blockHash);\n\n const serializedTx = utils.serialize.serialize(SCHEMA.Transaction, transaction);\n const serializedBase64 = Buffer.from(serializedTx).toString(\"base64\");\n\n return {\n details: { blockHash: utils.serialize.base_encode(blockHash), nonce: nonce, signerId },\n publicKey: publicKey.toString(),\n serialized: serializedBase64,\n };\n }\n\n async function createContractFunctionCall(params: ContractFunctionCallParams): Promise<SerializedTransaction> {\n const { sender: accountId } = params;\n\n const { publicKey, nonce } = await getFullAccessPublicKey(provider, accountId);\n\n const { SCHEMA } = await import(\"near-api-js/lib/transaction\");\n const { transactions, utils } = await import(\"near-api-js\");\n const block = await provider.block({ finality: \"final\" });\n const blockHash = utils.serialize.base_decode(block.header.hash);\n\n const actions = [\n transactions.functionCall(\n params.methodName,\n Buffer.from(JSON.stringify(params.args)),\n BigInt(params.gas),\n BigInt(params.attachedDeposit),\n ),\n ];\n\n const transaction = transactions.createTransaction(\n accountId,\n publicKey,\n params.contractId,\n nonce,\n actions,\n blockHash,\n );\n\n const serializedTx = utils.serialize.serialize(SCHEMA.Transaction, transaction);\n const serializedBase64 = Buffer.from(serializedTx).toString(\"base64\");\n\n return {\n details: {\n blockHash: utils.serialize.base_encode(blockHash),\n methodName: params.methodName,\n nonce: nonce,\n receiverId: params.contractId,\n signerId: accountId,\n },\n publicKey: publicKey.toString(),\n serialized: serializedBase64,\n };\n }\n\n async function signTransaction(transaction: Transaction): Promise<SignedTransaction> {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n // Use the new signer interface method\n const [_hash, signedTx] = await signer.signTransaction(transaction);\n return signedTx;\n }\n\n async function broadcastTransaction(signedTransaction: SignedTransaction) {\n const result = await provider.sendTransaction(signedTransaction);\n return result.transaction.hash;\n }\n\n async function estimateTransactionFee(params: NearTransferParams | NearGasEstimateParams) {\n if (\"assetValue\" in params) {\n const baseTransferCost = \"115123062500\"; // gas units for transfer\n const receiptCreationCost = \"108059500000\"; // gas units for receipt\n\n const totalGasUnits = BigInt(baseTransferCost) + BigInt(receiptCreationCost);\n\n const gasPrice = await getCurrentGasPrice();\n\n // NEAR doesn't support fee multipliers - gas price is fixed by the network\n const totalCostYocto = totalGasUnits * BigInt(gasPrice.toString());\n\n return AssetValue.from({\n chain: Chain.Near,\n fromBaseDecimal: BaseDecimal[Chain.Near],\n value: totalCostYocto.toString(),\n });\n }\n\n // Handle new gas estimation params\n const account = signer ? await getAccount() : undefined;\n return estimateGas(params, account);\n }\n\n async function getCurrentGasPrice() {\n try {\n const result = await provider.query({\n account_id: \"system\",\n args_base64: \"\",\n finality: \"final\",\n method_name: \"gas_price\",\n request_type: \"call_function\",\n });\n\n return result;\n } catch {\n return \"100000000\"; // 0.0001 NEAR per Tgas\n }\n }\n\n async function createSubAccount(subAccountId: string, publicKey: string, initialBalance: string): Promise<string> {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n const account = await getAccount();\n const { utils } = await import(\"near-api-js\");\n\n const balanceInYocto = utils.format.parseNearAmount(initialBalance) || \"0\";\n\n const result = await account.createAccount(\n subAccountId,\n utils.PublicKey.fromString(publicKey),\n BigInt(balanceInYocto),\n );\n\n return result.transaction.hash;\n }\n\n async function callFunction(params: NearFunctionCallParams): Promise<string> {\n try {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n const { transactions } = await import(\"near-api-js\");\n\n const { contractId, methodName, args, deposit } = params;\n const account = await getAccount();\n\n const estimatedGas = await estimateGas({ args: args || {}, contractId, methodName });\n\n const functionAction = transactions.functionCall(\n methodName,\n args || {},\n estimatedGas.getBaseValue(\"bigint\"),\n BigInt(deposit || \"0\"),\n );\n\n const result = await account.signAndSendTransaction({ actions: [functionAction], receiverId: contractId });\n\n return result.transaction_outcome.id;\n } catch (error) {\n throw new SwapKitError(\"toolbox_near_transfer_failed\", { error });\n }\n }\n\n // Create typed contract interface\n async function createContract<T extends Contract = Contract>(contractInterface: NearContractInterface): Promise<T> {\n const account = await getAccount();\n\n return createNearContract<T>({\n account,\n changeMethods: contractInterface.changeMethods,\n contractId: contractInterface.contractId,\n viewMethods: contractInterface.viewMethods,\n });\n }\n\n async function executeBatchTransaction(batch: BatchTransaction): Promise<string> {\n if (!signer) {\n throw new SwapKitError(\"toolbox_near_no_signer\");\n }\n\n if (batch.actions.length === 0) {\n throw new SwapKitError(\"toolbox_near_empty_batch\");\n }\n\n const account = await getAccount();\n\n // Use account.signAndSendTransaction for batch operations\n const result = await account.signAndSendTransaction({ actions: batch.actions, receiverId: batch.receiverId });\n\n return result.transaction.hash;\n }\n\n async function nep141(contractId: string) {\n const account = await getAccount();\n return createNEP141Token({ account, contractId });\n }\n\n async function getBalance(address: string) {\n try {\n const account = await getAccount(address);\n\n let nativeBalance: AssetValue;\n try {\n const value = await account.getBalance();\n\n nativeBalance = AssetValue.from({ chain: Chain.Near, fromBaseDecimal: BaseDecimal[Chain.Near], value });\n } catch {\n nativeBalance = AssetValue.from({ chain: Chain.Near, fromBaseDecimal: BaseDecimal[Chain.Near], value: \"0\" });\n }\n\n // // Then, fetch token balances from API\n // let tokenBalances: AssetValue[] = [];\n // try {\n // const apiBalances = await SwapKitApi.getChainBalance({\n // chain: Chain.Near,\n // address,\n // scamFilter,\n // });\n\n // tokenBalances = apiBalances\n // .filter(({ identifier }) => identifier !== Chain.Near) // Filter out native NEAR\n // .map(({ identifier, value, decimal }) => {\n // return new AssetValue({\n // decimal: decimal || BaseDecimal[Chain.Near],\n // value,\n // identifier,\n // });\n // });\n // } catch (error) {\n // // If API fails, just return on-chain balance\n // console.warn(\"Failed to fetch token balances from API:\", error);\n // }\n\n // Merge native balance with token balances\n // return [nativeBalance, ...tokenBalances];\n return [nativeBalance];\n } catch (error) {\n throw new SwapKitError(\"toolbox_near_balance_failed\", { error });\n }\n }\n\n async function estimateGas(params: NearGasEstimateParams, account?: Account) {\n const gasInTGas = await match(params)\n .when(isSimpleTransfer, () => GAS_COSTS.SIMPLE_TRANSFER)\n .when(isContractCall, (p) => getContractMethodGas(p.methodName))\n .when(isBatchTransaction, (p) => estimateBatchGas(p.actions))\n .when(isAccountCreation, () => GAS_COSTS.ACCOUNT_CREATION)\n .when(isContractDeployment, () => GAS_COSTS.CONTRACT_DEPLOYMENT)\n .when(isCustomEstimator, (p) => {\n if (!account) {\n throw new SwapKitError(\"toolbox_near_no_account\");\n }\n return p.customEstimator(account);\n })\n .otherwise(() => {\n throw new SwapKitError(\"toolbox_near_invalid_gas_params\");\n });\n\n // Convert TGas to gas price in NEAR\n const gasPrice = await getGasPrice();\n const gasInUnits = BigInt(gasInTGas) * BigInt(10 ** 12); // Convert TGas to gas units\n const costInYoctoNear = gasInUnits * BigInt(gasPrice);\n\n return AssetValue.from({ chain: Chain.Near, fromBaseDecimal: BaseDecimal[Chain.Near], value: costInYoctoNear });\n }\n\n // Get current gas price from network\n async function getGasPrice() {\n try {\n const result = await provider.gasPrice(null);\n return result.gas_price || \"100000000\";\n } catch (_error) {\n // Fallback to default\n return \"100000000\";\n }\n }\n\n return {\n broadcastTransaction,\n callFunction,\n createContract,\n createContractFunctionCall,\n createSubAccount,\n createTransaction,\n estimateGas,\n estimateTransactionFee,\n executeBatchTransaction,\n getAddress,\n getBalance,\n getGasPrice,\n getPublicKey: async () => (signer ? (await signer.getPublicKey()).toString() : \"\"),\n getSignerFromPhrase: (params: GetSignerFromPhraseParams) => getNearSignerFromPhrase(params),\n getSignerFromPrivateKey: getNearSignerFromPrivateKey,\n nep141,\n provider,\n signTransaction,\n transfer,\n validateAddress: await getValidateNearAddress(),\n };\n}\n",
9
+ "import type {\n ChainSigner,\n DerivationPathArray,\n GenericCreateTransactionParams,\n GenericTransferParams,\n} from \"@swapkit/helpers\";\nimport type { KeyPairSigner, Signer, transactions } from \"near-api-js\";\n\ninterface NearKeyPairSigner\n extends KeyPairSigner,\n Omit<ChainSigner<typeof transactions.Transaction, typeof transactions.SignedTransaction>, \"signTransaction\"> {}\n\ninterface NearGeneralSigner\n extends Signer,\n Omit<ChainSigner<typeof transactions.Transaction, typeof transactions.SignedTransaction>, \"signTransaction\"> {}\n\n// Extend both ChainSigner and NEAR's Signer class, omitting signTransaction\nexport type NearSigner = NearKeyPairSigner | NearGeneralSigner;\n\nexport type NearToolboxParams =\n | { signer?: NearSigner; accountId?: string }\n | { phrase?: string; index?: number; derivationPath?: DerivationPathArray };\n\nexport interface NearTransferParams extends GenericTransferParams {}\n\nexport interface NearConfig {\n networkId: \"mainnet\" | \"testnet\" | \"betanet\";\n nodeUrl: string;\n walletUrl?: string;\n helperUrl?: string;\n keyStore?: any;\n}\n\nexport interface NearFunctionCallParams {\n contractId: string;\n methodName: string;\n args: Uint8Array | Record<string, any>;\n deposit?: bigint | string | number;\n gas?: bigint | string | number;\n}\n\nexport interface NearCreateTransactionParams extends GenericCreateTransactionParams {\n // NEAR-specific options\n attachedDeposit?: string;\n // Function call parameters\n functionCall?: { methodName: string; args: object; attachedDeposit: string };\n}\n\nexport * from \"./toolbox\";\nexport * from \"./types/contract\";\nexport * from \"./types/nep141\";\nexport * from \"./types/toolbox\";\n",
10
+ "import type { getNearToolbox } from \"./toolbox\";\n\nexport * from \"./helpers/core\";\nexport * from \"./helpers/gasEstimation\";\nexport * from \"./helpers/nep141\";\nexport * from \"./toolbox\";\nexport * from \"./types\";\n\nexport type NearWallet = Awaited<ReturnType<typeof getNearToolbox>>;\n\nexport type {\n NearCallParams,\n NearContractInterface,\n NearGasEstimateParams,\n} from \"./types/contract\";\nexport type {\n FungibleTokenMetadata,\n NEP141Contract,\n StorageBalance,\n StorageBalanceBounds,\n TokenTransferParams,\n} from \"./types/nep141\";\n"
11
11
  ],
12
- "mappings": "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",
13
- "debugId": "306F4F983234A96364756E2164756E21",
12
+ "mappings": "wuBACA,iCAAmC,mBAAwB,0BAC3D,wBAAuB,qBAGvB,eAAsB,CAAsB,EAAG,CAC7C,IAAQ,qBAAsB,KAAa,uBAC3C,MAAO,CAAC,IAAoB,CAE1B,GAAI,CACF,OAAO,EAAkB,CAAO,EAChC,KAAM,CACN,IAAM,EAAmB,wDAEzB,OAAO,EAAQ,QAAU,GAAK,EAAQ,QAAU,IAAM,EAAiB,KAAK,CAAO,IAKzF,eAAsB,CAAuB,CAAC,EAI3C,CACD,IAAQ,mBAAoB,KAAa,6BACjC,WAAY,KAAa,uBAI3B,EAAQ,EAAO,OAAS,EACxB,EAAiB,EAAO,eAC1B,GAAuB,EAAO,eAAe,MAAM,EAAG,CAAC,CAA6B,EACpF,cAAc,MAEV,aAAc,EAAgB,EAAO,OAAQ,CAAc,EAC7D,EAAU,EAAQ,WAAW,CAAgB,EAEnD,OAAO,GAA4B,CAAO,EAG5C,eAAsB,CAA2B,CAAC,EAAoB,CACpE,IAAQ,WAAY,KAAa,iCAC3B,EAAU,EAAQ,WAAW,CAAiB,EACpD,OAAO,GAA4B,CAAO,EAoB5C,SAAS,EAA2B,CAAC,EAA8B,CAGjE,OAFsB,IAAI,GAAgB,CAAO,EAKnD,eAAsB,CAAsB,CAAC,EAAoB,EAAmB,CAQlF,IAAM,GANW,MAAM,EAAS,MAAM,CACpC,WAAY,EACZ,SAAU,QACV,aAAc,sBAChB,CAAC,GAEuC,KAAK,KAAK,CAAC,IAAa,EAAI,WAAW,aAAe,YAAY,EAE1G,IAAK,EACH,MAAM,IAAI,GAAa,8BAA8B,EAGvD,IAAQ,SAAU,KAAa,uBACzB,EAAY,EAAM,UAAU,WAAW,EAAc,UAAU,EAGrE,MAAO,CAAE,MAFM,EAAc,WAAW,OAAoB,EAE5C,WAAU,MAzCtB,mBAAN,MAAM,WAAwB,EAAc,CAC1C,GAEA,WAAW,CAAC,EAAkB,CAC5B,MAAM,CAAO,EACb,KAAK,GAAW,EAGlB,UAAU,EAAoB,CAG5B,IAAM,EAAY,KAAK,GAAS,aAAa,EACvC,EAAa,OAAO,KAAK,EAAU,IAAI,EAAE,SAAS,KAAK,EAC7D,OAAO,QAAQ,QAAQ,CAAU,EAErC,IC5CO,SAAS,CAAgB,CAAC,EAAgF,CAC/G,MAAO,cAAe,GAAU,WAAY,KAAY,eAAgB,GAGnE,SAAS,CAAc,CAC5B,EAC4G,CAC5G,MAAO,eAAgB,GAAU,eAAgB,EAG5C,SAAS,CAAkB,CAAC,EAA6D,CAC9F,MAAO,YAAa,EAGf,SAAS,CAAiB,CAC/B,EACwD,CACxD,MAAO,iBAAkB,EAGpB,SAAS,CAAoB,CAAC,EAAuE,CAC1G,MAAO,iBAAkB,EAGpB,SAAS,CAAiB,CAC/B,EACsE,CACtE,MAAO,oBAAqB,EAIvB,SAAS,CAAgB,CAAC,EAAgB,CAC/C,IAAI,EAAW,EAEf,QAAW,KAAU,EACnB,OAAQ,EAAO,UACR,WACH,GAAY,OAAO,EAAU,eAAe,EAC5C,UACG,eACH,GAAY,OAAO,EAAU,aAAa,EAC1C,UACG,gBACH,GAAY,OAAO,EAAU,gBAAgB,EAC7C,UACG,iBACH,GAAY,OAAO,EAAU,mBAAmB,EAChD,UACG,SACH,GAAY,OAAO,EAAU,mBAAmB,EAChD,UACG,YACH,GAAY,OAAO,EAAU,mBAAmB,EAChD,UACG,QACH,GAAY,OAAO,EAAU,KAAK,EAClC,cAEA,GAAY,OAAO,EAAU,aAAa,EAIhD,OAAO,EAAS,SAAS,EAIpB,SAAS,CAAoB,CAAC,EAAoB,CACvD,GAAI,IAAe,eAAiB,IAAe,mBACjD,OAAO,EAAU,eAEnB,GAAI,IAAe,kBACjB,OAAO,EAAU,gBAEnB,OAAO,EAAU,cAIZ,SAAS,EAAS,CAAC,EAAsB,CAC9C,OAAQ,OAAO,CAAI,EAAI,OAAO,aAAQ,GAAG,SAAS,EAI7C,SAAS,EAAS,CAAC,EAAqB,CAC7C,OAAQ,OAAO,CAAG,EAAI,OAAO,aAAQ,GAAG,SAAS,MAhGtC,iBAAY,CACvB,oBAAqB,IACrB,oBAAqB,IACrB,iBAAkB,KAClB,cAAe,MACf,oBAAqB,MACrB,gBAAiB,IACjB,MAAO,KACP,gBAAiB,MACjB,eAAgB,KAClB,ICuDA,eAAsB,CAAsC,EAC1D,UACA,aACA,cACA,iBAMa,CACb,IAAQ,YAAa,KAAa,uBAElC,OAAO,IAAI,EAAS,EAAS,EAAY,CACvC,gBACA,sBAAuB,GACvB,aACF,CAAC,EAGH,eAAsB,CAAiB,EACrC,aACA,WAIuB,CACvB,IAAM,GAAM,KAAa,kBAAU,QAE7B,EAAW,MAAM,EAAmC,CACxD,UACA,cAAe,CAAC,cAAe,mBAAoB,kBAAmB,mBAAoB,oBAAoB,EAC9G,aACA,YAAa,CAAC,gBAAiB,kBAAmB,cAAe,qBAAsB,wBAAwB,CACjH,CAAC,EAGK,EAAmB,MAAO,IAAsB,CAEpD,IADgB,MAAM,EAAS,mBAAmB,CAAE,WAAY,CAAU,CAAC,EAC7D,CAGZ,IAAM,GADS,MAAM,EAAS,uBAAuB,IAC7B,KA7GE,yBA+G1B,MAAM,EAAS,gBACb,CAAE,WAAY,CAAU,EACxB,IAAI,EAAG,iBAAiB,EACxB,IAAI,EAAG,CAAO,CAChB,IAIJ,MAAO,CACL,UAAW,CAAC,IAAsB,EAAS,cAAc,CAAE,WAAY,CAAU,CAAC,EAGlF,WAEA,cAAe,EAEf,SAAU,IAAM,EAAS,YAAY,EAErC,iBAAkB,CAAC,IAAsB,EAAS,mBAAmB,CAAE,WAAY,CAAU,CAAC,EAE9F,eAAgB,CAAC,EAAoB,IACnC,EAAS,gBACP,CAAE,WAAY,CAAU,EACxB,IAAI,EAAG,iBAAiB,EACxB,IAAI,EAAG,GAvIiB,wBAuIgB,CAC1C,EAEF,YAAa,IAAM,EAAS,gBAAgB,EAC5C,SAAU,MAAO,EAAoB,EAAgB,IAAkB,CAIrE,OAFA,MAAM,EAAiB,CAAU,EAE1B,EAAS,YACd,CAAE,SAAQ,OAAM,YAAa,CAAW,EACxC,IAAI,EAAG,iBAAiB,EACxB,IAAI,EAAG,GAAG,CACZ,GAGF,aAAc,MAAO,EAAoB,EAAgB,EAAa,IAAkB,CAItF,OAFA,MAAM,EAAiB,CAAU,EAE1B,EAAS,iBACd,CAAE,SAAQ,OAAM,MAAK,YAAa,CAAW,EAC7C,IAAI,EAAG,iBAAiB,EACxB,IAAI,EAAG,GAAG,CACZ,EAEJ,EClKF,qBAAS,iBAAY,WAAa,eAAO,mBAAW,yBAoCpD,eAAsB,EAAc,CAAC,EAAyD,CAC5F,IAAQ,IAAG,SAAU,KAAa,uBAC1B,aAAc,KAAa,uBAC7B,EAAS,MAAM,EAAM,CAAa,EACrC,KAAK,CAAE,OAAQ,EAAE,MAAO,EAAG,MAAO,IAAW,CAE5C,OADe,MAAM,EAAwB,CAAM,EAEpD,EACA,KAAK,CAAE,OAAQ,EAAE,GAAI,EAAG,EAAG,YAAa,CAAM,EAC9C,UAAU,IAAG,CAAG,OAAS,EAEtB,EAAM,MAAM,GAAU,EAAM,IAAI,EAEhC,EAAW,IAAI,EAAU,gBAAgB,CAAE,KAAI,CAAC,EAEtD,eAAe,CAAU,CAAC,EAAkB,CAC1C,IAAQ,WAAY,KAAa,uBAE3B,EAAW,GAAY,MAAM,EAAW,EAI9C,OAFgB,IAAI,EAAQ,EAAU,EAAU,CAAM,EAKxD,eAAe,CAAU,EAAG,CAC1B,IAAK,EACH,MAAM,IAAI,EAAa,wBAAwB,EAGjD,OADgB,MAAM,EAAO,WAAW,EAI1C,eAAe,EAAQ,CAAC,EAA4B,CAClD,IAAK,EACH,MAAM,IAAI,EAAa,wBAAwB,EAGjD,IAAQ,YAAW,cAAe,EAIlC,KAF4B,MAAM,EAAuB,GAEhC,CAAS,EAChC,MAAM,IAAI,EAAa,8BAA8B,EAGvD,IAAM,EAAU,MAAM,EAAW,EAEjC,GAAI,EAAW,aAAe,GAAO,CAEnC,IAAM,EAAa,EAAW,QAC9B,IAAK,EACH,MAAM,IAAI,EAAa,uCAAuC,EAGhE,IAAM,EAAS,EAAW,aAAa,QAAQ,EAE/C,OAAO,EAAa,CAClB,KAAM,CAAE,SAAQ,KAAM,EAAO,KAAM,YAAa,CAAU,EAC1D,aACA,WAAY,aACd,CAAC,EAGH,GAAI,CACF,IAAM,EAAiB,EAAW,aAAa,QAAQ,EAIvD,OAFe,MAAM,EAAQ,SAAS,CAAE,OAAQ,EAAgB,WAAY,CAAU,CAAC,GAEzE,oBAAoB,GAClC,MAAO,EAAO,CACd,MAAM,IAAI,EAAa,+BAAgC,CAAE,OAAM,CAAC,GAIpE,eAAe,EAAiB,CAAC,EAAqE,CACpG,IAAQ,YAAW,aAAY,OAAM,QAAS,EAAK,kBAAiB,OAAQ,GAAa,EACnF,EAAsB,MAAM,EAAuB,EAEzD,IAAK,EAAoB,CAAS,EAChC,MAAM,IAAI,EAAa,+BAAgC,CAAE,QAAS,CAAU,CAAC,EAG/E,IAAK,EAAoB,CAAQ,EAC/B,MAAM,IAAI,EAAa,+BAAgC,CAAE,QAAS,CAAS,CAAC,EAI9E,IAAK,EAAW,WAAY,CAC1B,IAAM,GAAa,EAAW,QAC9B,IAAK,GACH,MAAM,IAAI,EAAa,uCAAuC,EAGhE,OAAO,EAA2B,CAChC,KAAM,CAAE,OAAQ,EAAW,aAAa,QAAQ,EAAG,KAAM,GAAQ,KAAM,YAAa,CAAU,EAC9F,gBAAiB,IACjB,cACA,IAAK,EAAI,SAAS,GAAK,kBACvB,WAAY,cACZ,OAAQ,CACV,CAAC,EAIH,IAAQ,YAAW,SAAU,MAAM,EAAuB,EAAU,CAAQ,EACtE,EAAa,EAAW,aAAa,QAAQ,GAE3C,UAAW,KAAa,wCACxB,eAAc,SAAU,KAAa,uBAEvC,GAAY,CAAC,EAAa,SAAS,CAAU,CAAC,EAEpD,GAAI,GAAQ,EACV,GAAU,KAAK,EAAa,aAAa,OAAQ,CAAE,MAAK,EAAG,OAAO,CAAG,EAAG,OAAO,CAAe,CAAC,CAAC,EAGlG,IAAM,GAAQ,MAAM,EAAS,MAAM,CAAE,SAAU,OAAQ,CAAC,EAClD,GAAY,EAAM,UAAU,YAAY,GAAM,OAAO,IAAI,EAEzD,GAAc,EAAa,kBAAkB,EAAU,EAAW,EAAW,EAAO,GAAW,EAAS,EAExG,GAAe,EAAM,UAAU,UAAU,EAAO,YAAa,EAAW,EACxE,GAAmB,OAAO,KAAK,EAAY,EAAE,SAAS,QAAQ,EAEpE,MAAO,CACL,QAAS,CAAE,UAAW,EAAM,UAAU,YAAY,EAAS,EAAG,MAAO,EAAO,UAAS,EACrF,UAAW,EAAU,SAAS,EAC9B,WAAY,EACd,EAGF,eAAe,CAA0B,CAAC,EAAoE,CAC5G,IAAQ,OAAQ,GAAc,GAEtB,YAAW,SAAU,MAAM,EAAuB,EAAU,CAAS,GAErE,UAAW,KAAa,wCACxB,eAAc,SAAU,KAAa,uBACvC,EAAQ,MAAM,EAAS,MAAM,CAAE,SAAU,OAAQ,CAAC,EAClD,EAAY,EAAM,UAAU,YAAY,EAAM,OAAO,IAAI,EAEzD,EAAU,CACd,EAAa,aACX,EAAO,WACP,OAAO,KAAK,KAAK,UAAU,EAAO,IAAI,CAAC,EACvC,OAAO,EAAO,GAAG,EACjB,OAAO,EAAO,eAAe,CAC/B,CACF,EAEM,EAAc,EAAa,kBAC/B,EACA,EACA,EAAO,WACP,EACA,EACA,CACF,EAEM,EAAe,EAAM,UAAU,UAAU,EAAO,YAAa,CAAW,EACxE,EAAmB,OAAO,KAAK,CAAY,EAAE,SAAS,QAAQ,EAEpE,MAAO,CACL,QAAS,CACP,UAAW,EAAM,UAAU,YAAY,CAAS,EAChD,WAAY,EAAO,WACnB,MAAO,EACP,WAAY,EAAO,WACnB,SAAU,CACZ,EACA,UAAW,EAAU,SAAS,EAC9B,WAAY,CACd,EAGF,eAAe,EAAe,CAAC,EAAsD,CACnF,IAAK,EACH,MAAM,IAAI,EAAa,wBAAwB,EAIjD,IAAO,EAAO,GAAY,MAAM,EAAO,gBAAgB,CAAW,EAClE,OAAO,EAGT,eAAe,EAAoB,CAAC,EAAsC,CAExE,OADe,MAAM,EAAS,gBAAgB,CAAiB,GACjD,YAAY,KAG5B,eAAe,EAAsB,CAAC,EAAoD,CACxF,GAAI,eAAgB,EAAQ,CAI1B,IAAM,EAAgB,OAHG,cAGoB,EAAI,OAFrB,cAE+C,EAErE,EAAW,MAAM,GAAmB,EAGpC,EAAiB,EAAgB,OAAO,EAAS,SAAS,CAAC,EAEjE,OAAO,EAAW,KAAK,CACrB,MAAO,EAAM,KACb,gBAAiB,EAAY,EAAM,MACnC,MAAO,EAAe,SAAS,CACjC,CAAC,EAIH,IAAM,EAAU,EAAS,MAAM,EAAW,EAAI,OAC9C,OAAO,EAAY,EAAQ,CAAO,EAGpC,eAAe,EAAkB,EAAG,CAClC,GAAI,CASF,OARe,MAAM,EAAS,MAAM,CAClC,WAAY,SACZ,YAAa,GACb,SAAU,QACV,YAAa,YACb,aAAc,eAChB,CAAC,EAGD,KAAM,CACN,MAAO,aAIX,eAAe,EAAgB,CAAC,EAAsB,EAAmB,EAAyC,CAChH,IAAK,EACH,MAAM,IAAI,EAAa,wBAAwB,EAGjD,IAAM,EAAU,MAAM,EAAW,GACzB,SAAU,KAAa,uBAEzB,EAAiB,EAAM,OAAO,gBAAgB,CAAc,GAAK,IAQvE,OANe,MAAM,EAAQ,cAC3B,EACA,EAAM,UAAU,WAAW,CAAS,EACpC,OAAO,CAAc,CACvB,GAEc,YAAY,KAG5B,eAAe,CAAY,CAAC,EAAiD,CAC3E,GAAI,CACF,IAAK,EACH,MAAM,IAAI,EAAa,wBAAwB,EAGjD,IAAQ,gBAAiB,KAAa,wBAE9B,aAAY,aAAY,OAAM,WAAY,EAC5C,EAAU,MAAM,EAAW,EAE3B,EAAe,MAAM,EAAY,CAAE,KAAM,GAAQ,CAAC,EAAG,aAAY,YAAW,CAAC,EAE7E,EAAiB,EAAa,aAClC,EACA,GAAQ,CAAC,EACT,EAAa,aAAa,QAAQ,EAClC,OAAO,GAAW,GAAG,CACvB,EAIA,OAFe,MAAM,EAAQ,uBAAuB,CAAE,QAAS,CAAC,CAAc,EAAG,WAAY,CAAW,CAAC,GAE3F,oBAAoB,GAClC,MAAO,EAAO,CACd,MAAM,IAAI,EAAa,+BAAgC,CAAE,OAAM,CAAC,GAKpE,eAAe,EAA6C,CAAC,EAAsD,CACjH,IAAM,EAAU,MAAM,EAAW,EAEjC,OAAO,EAAsB,CAC3B,UACA,cAAe,EAAkB,cACjC,WAAY,EAAkB,WAC9B,YAAa,EAAkB,WACjC,CAAC,EAGH,eAAe,EAAuB,CAAC,EAA0C,CAC/E,IAAK,EACH,MAAM,IAAI,EAAa,wBAAwB,EAGjD,GAAI,EAAM,QAAQ,SAAW,EAC3B,MAAM,IAAI,EAAa,0BAA0B,EAQnD,OAFe,MAHC,MAAM,EAAW,GAGJ,uBAAuB,CAAE,QAAS,EAAM,QAAS,WAAY,EAAM,UAAW,CAAC,GAE9F,YAAY,KAG5B,eAAe,EAAM,CAAC,EAAoB,CACxC,IAAM,EAAU,MAAM,EAAW,EACjC,OAAO,EAAkB,CAAE,UAAS,YAAW,CAAC,EAGlD,eAAe,EAAU,CAAC,EAAiB,CACzC,GAAI,CACF,IAAM,EAAU,MAAM,EAAW,CAAO,EAEpC,EACJ,GAAI,CACF,IAAM,EAAQ,MAAM,EAAQ,WAAW,EAEvC,EAAgB,EAAW,KAAK,CAAE,MAAO,EAAM,KAAM,gBAAiB,EAAY,EAAM,MAAO,OAAM,CAAC,EACtG,KAAM,CACN,EAAgB,EAAW,KAAK,CAAE,MAAO,EAAM,KAAM,gBAAiB,EAAY,EAAM,MAAO,MAAO,GAAI,CAAC,EA4B7G,MAAO,CAAC,CAAa,EACrB,MAAO,EAAO,CACd,MAAM,IAAI,EAAa,8BAA+B,CAAE,OAAM,CAAC,GAInE,eAAe,CAAW,CAAC,EAA+B,EAAmB,CAC3E,IAAM,EAAY,MAAM,EAAM,CAAM,EACjC,KAAK,EAAkB,IAAM,EAAU,eAAe,EACtD,KAAK,EAAgB,CAAC,IAAM,EAAqB,EAAE,UAAU,CAAC,EAC9D,KAAK,EAAoB,CAAC,IAAM,EAAiB,EAAE,OAAO,CAAC,EAC3D,KAAK,EAAmB,IAAM,EAAU,gBAAgB,EACxD,KAAK,EAAsB,IAAM,EAAU,mBAAmB,EAC9D,KAAK,EAAmB,CAAC,IAAM,CAC9B,IAAK,EACH,MAAM,IAAI,EAAa,yBAAyB,EAElD,OAAO,EAAE,gBAAgB,CAAO,EACjC,EACA,UAAU,IAAM,CACf,MAAM,IAAI,EAAa,iCAAiC,EACzD,EAGG,EAAW,MAAM,EAAY,EAE7B,EADa,OAAO,CAAS,EAAI,OAAO,aAAQ,EACjB,OAAO,CAAQ,EAEpD,OAAO,EAAW,KAAK,CAAE,MAAO,EAAM,KAAM,gBAAiB,EAAY,EAAM,MAAO,MAAO,CAAgB,CAAC,EAIhH,eAAe,CAAW,EAAG,CAC3B,GAAI,CAEF,OADe,MAAM,EAAS,SAAS,IAAI,GAC7B,WAAa,YAC3B,MAAO,EAAQ,CAEf,MAAO,aAIX,MAAO,CACL,wBACA,eACA,kBACA,6BACA,oBACA,qBACA,cACA,0BACA,2BACA,aACA,cACA,cACA,aAAc,SAAa,GAAU,MAAM,EAAO,aAAa,GAAG,SAAS,EAAI,GAC/E,oBAAqB,CAAC,IAAsC,EAAwB,CAAM,EAC1F,wBAAyB,EACzB,UACA,WACA,mBACA,YACA,gBAAiB,MAAM,EAAuB,CAChD,eA9bF,IAMA,oBCuCA,4dC9CA,IACA,IAEA,IACA",
13
+ "debugId": "184FD08072F959F564756E2164756E21",
14
14
  "names": []
15
15
  }
@@ -1,4 +1,4 @@
1
- var v=Object.create;var{getPrototypeOf:x,defineProperty:U,getOwnPropertyNames:Z,getOwnPropertyDescriptor:B}=Object,_=Object.prototype.hasOwnProperty;var $=(j,z,H)=>{H=j!=null?v(x(j)):{};let J=z||!j||!j.__esModule?U(H,"default",{value:j,enumerable:!0}):H;for(let K of Z(j))if(!_.call(J,K))U(J,K,{get:()=>j[K],enumerable:!0});return J},Y=new WeakMap,I=(j)=>{var z=Y.get(j),H;if(z)return z;if(z=U({},"__esModule",{value:!0}),j&&typeof j==="object"||typeof j==="function")Z(j).map((J)=>!_.call(z,J)&&U(z,J,{get:()=>j[J],enumerable:!(H=B(j,J))||H.enumerable}));return Y.set(j,z),z};var S=(j,z)=>{for(var H in z)U(j,H,{get:z[H],enumerable:!0,configurable:!0,set:(J)=>z[H]=()=>J})};var T=(j,z)=>()=>(j&&(z=j(j=0)),z);var P={};S(P,{radixValidateAddress:()=>q,RadixToolbox:()=>F});module.exports=I(P);function q(j){return j.startsWith("account_rdx1")&&j.length===66}function C({networkApi:j}){return async function z(H){let J=await D({address:H,networkApi:j});return h({resources:J,networkApi:j})}}async function D({address:j,networkApi:z}){let H=!0,J,K=[],L=await E(z);while(H){let V={address:j,limit_per_page:100,cursor:J,at_ledger_state:{state_version:L}},O=await z.state.innerClient.entityFungiblesPage({stateEntityFungiblesPageRequest:V});if(K=K.concat(O.items),O.next_cursor)J=O.next_cursor;else H=!1}return K}async function h({resources:j,networkApi:z}){let H=[],J=50,K=[];for(let L=0;L<j.length;L+=50)K.push(j.slice(L,L+50));for(let L of K){let V=L.map((M)=>M.resource_address),O=await z.state.getEntityDetailsVaultAggregated(V),X=new Map;for(let M of O)if(M.details!==void 0){let Q=M.metadata?.items.find((G)=>G.key==="symbol"),W=Q?.value.typed.type==="String"?Q.value.typed.value:"?";if(M.details.type==="FungibleResource")X.set(M.address,{decimals:M.details.divisibility,symbol:W})}for(let M of L)if(M.aggregation_level==="Global"){let Q=X.get(M.resource_address)||{decimals:0,symbol:"?"},W=N.AssetValue.from({asset:Q.symbol!==N.Chain.Radix?`${N.Chain.Radix}.${Q.symbol}-${M.resource_address}`:"XRD.XRD",value:M.amount});H.push(W)}}return H}async function E(j){return j.status.getCurrent().then((z)=>z.ledger_state.state_version)}var N,F=async({dappConfig:j}={})=>{let{RadixDappToolkit:z}=await import("@radixdlt/radix-dapp-toolkit"),{GatewayApiClient:H}=await import("@radixdlt/babylon-gateway-api-sdk"),J=j||N.SKConfig.get("integrations").radix,K=z({...J,networkId:J.network?.networkId||1}),L=H.initialize(K.gatewayApi.clientConfig);return{getAddress:()=>"",getBalance:C({networkApi:L}),networkApi:L,validateAddress:q,signAndBroadcast:()=>{throw new N.SwapKitError("toolbox_radix_method_not_supported",{method:"signAndBroadcast"})}}};var R=T(()=>{N=require("@swapkit/helpers")});R();
1
+ var v=Object.create;var{getPrototypeOf:x,defineProperty:U,getOwnPropertyNames:Z,getOwnPropertyDescriptor:B}=Object,_=Object.prototype.hasOwnProperty;var $=(j,z,H)=>{H=j!=null?v(x(j)):{};let J=z||!j||!j.__esModule?U(H,"default",{value:j,enumerable:!0}):H;for(let K of Z(j))if(!_.call(J,K))U(J,K,{get:()=>j[K],enumerable:!0});return J},Y=new WeakMap,I=(j)=>{var z=Y.get(j),H;if(z)return z;if(z=U({},"__esModule",{value:!0}),j&&typeof j==="object"||typeof j==="function")Z(j).map((J)=>!_.call(z,J)&&U(z,J,{get:()=>j[J],enumerable:!(H=B(j,J))||H.enumerable}));return Y.set(j,z),z};var S=(j,z)=>{for(var H in z)U(j,H,{get:z[H],enumerable:!0,configurable:!0,set:(J)=>z[H]=()=>J})};var T=(j,z)=>()=>(j&&(z=j(j=0)),z);var P={};S(P,{radixValidateAddress:()=>q,RadixToolbox:()=>F});module.exports=I(P);function q(j){return j.startsWith("account_rdx1")&&j.length===66}function C({networkApi:j}){return async function z(H){let J=await D({address:H,networkApi:j});return h({networkApi:j,resources:J})}}async function D({address:j,networkApi:z}){let H=!0,J,K=[],L=await E(z);while(H){let V={address:j,at_ledger_state:{state_version:L},cursor:J,limit_per_page:100},O=await z.state.innerClient.entityFungiblesPage({stateEntityFungiblesPageRequest:V});if(K=K.concat(O.items),O.next_cursor)J=O.next_cursor;else H=!1}return K}async function h({resources:j,networkApi:z}){let H=[],J=50,K=[];for(let L=0;L<j.length;L+=50)K.push(j.slice(L,L+50));for(let L of K){let V=L.map((M)=>M.resource_address),O=await z.state.getEntityDetailsVaultAggregated(V),X=new Map;for(let M of O)if(M.details!==void 0){let Q=M.metadata?.items.find((G)=>G.key==="symbol"),W=Q?.value.typed.type==="String"?Q.value.typed.value:"?";if(M.details.type==="FungibleResource")X.set(M.address,{decimals:M.details.divisibility,symbol:W})}for(let M of L)if(M.aggregation_level==="Global"){let Q=X.get(M.resource_address)||{decimals:0,symbol:"?"},W=N.AssetValue.from({asset:Q.symbol!==N.Chain.Radix?`${N.Chain.Radix}.${Q.symbol}-${M.resource_address}`:"XRD.XRD",value:M.amount});H.push(W)}}return H}function E(j){return j.status.getCurrent().then((z)=>z.ledger_state.state_version)}var N,F=async({dappConfig:j}={})=>{let{RadixDappToolkit:z}=await import("@radixdlt/radix-dapp-toolkit"),{GatewayApiClient:H}=await import("@radixdlt/babylon-gateway-api-sdk"),J=j||N.SKConfig.get("integrations").radix,K=z({...J,networkId:J.network?.networkId||1}),L=H.initialize(K.gatewayApi.clientConfig);return{getAddress:()=>"",getBalance:C({networkApi:L}),networkApi:L,signAndBroadcast:()=>{throw new N.SwapKitError("toolbox_radix_method_not_supported",{method:"signAndBroadcast"})},validateAddress:q}};var R=T(()=>{N=require("@swapkit/helpers")});R();
2
2
 
3
- //# debugId=48C8C14223C3965664756E2164756E21
3
+ //# debugId=7BC44F7721607CDD64756E2164756E21
4
4
  //# sourceMappingURL=index.cjs.map
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/radix/index.ts"],
4
4
  "sourcesContent": [
5
- "import type {\n FungibleResourcesCollectionItem,\n GatewayApiClient,\n StateEntityDetailsVaultResponseItem,\n StateEntityFungiblesPageRequest,\n StateEntityFungiblesPageResponse,\n} from \"@radixdlt/babylon-gateway-api-sdk\";\nimport {\n AssetValue,\n Chain,\n SKConfig,\n type SKConfigIntegrations,\n SwapKitError,\n} from \"@swapkit/helpers\";\n\nexport type RadixWallet = Awaited<ReturnType<typeof RadixToolbox>>;\n\ntype RadixGetBalanceParams = {\n address: string;\n networkApi: GatewayApiClient;\n};\n// Could not find anything sync in SDK, ask Radix team\nexport function radixValidateAddress(address: string) {\n return address.startsWith(\"account_rdx1\") && address.length === 66;\n}\n\nfunction getBalance({ networkApi }: { networkApi: GatewayApiClient }) {\n return async function getBalance(address: string) {\n const fungibleResources = await fetchFungibleResources({ address, networkApi });\n const fungibleBalances = convertResourcesToBalances({\n resources: fungibleResources,\n networkApi,\n });\n return fungibleBalances;\n };\n}\n\nasync function fetchFungibleResources({\n address,\n networkApi,\n}: RadixGetBalanceParams): Promise<FungibleResourcesCollectionItem[]> {\n let hasNextPage = true;\n let nextCursor: string | undefined;\n let fungibleResources: FungibleResourcesCollectionItem[] = [];\n const stateVersion = await currentStateVersion(networkApi);\n while (hasNextPage) {\n const stateEntityFungiblesPageRequest: StateEntityFungiblesPageRequest = {\n address: address,\n limit_per_page: 100,\n cursor: nextCursor,\n at_ledger_state: {\n state_version: stateVersion,\n },\n };\n\n const stateEntityFungiblesPageResponse: StateEntityFungiblesPageResponse =\n await networkApi.state.innerClient.entityFungiblesPage({\n stateEntityFungiblesPageRequest: stateEntityFungiblesPageRequest,\n });\n\n fungibleResources = fungibleResources.concat(stateEntityFungiblesPageResponse.items);\n if (stateEntityFungiblesPageResponse.next_cursor) {\n nextCursor = stateEntityFungiblesPageResponse.next_cursor;\n } else {\n hasNextPage = false;\n }\n }\n return fungibleResources;\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: <explanation>\nasync function convertResourcesToBalances({\n resources,\n networkApi,\n}: {\n resources: FungibleResourcesCollectionItem[]; //| NonFungibleResourcesCollectionItem[];\n networkApi: GatewayApiClient;\n}): Promise<AssetValue[]> {\n const balances: AssetValue[] = [];\n const BATCH_SIZE = 50;\n\n // Split resources into batches of up to 50 items\n const resourceBatches: FungibleResourcesCollectionItem[][] = [];\n for (let i = 0; i < resources.length; i += BATCH_SIZE) {\n resourceBatches.push(resources.slice(i, i + BATCH_SIZE));\n }\n\n for (const batch of resourceBatches) {\n const addresses = batch.map((item) => item.resource_address);\n const response: StateEntityDetailsVaultResponseItem[] =\n await networkApi.state.getEntityDetailsVaultAggregated(addresses);\n\n const divisibilities = new Map<string, { decimals: number; symbol: string }>();\n\n for (const result of response) {\n if (result.details !== undefined) {\n const metaDataSymbol = result.metadata?.items.find((item) => item.key === \"symbol\");\n const symbol =\n metaDataSymbol?.value.typed.type === \"String\" ? metaDataSymbol.value.typed.value : \"?\";\n\n if (result.details.type === \"FungibleResource\") {\n divisibilities.set(result.address, {\n decimals: result.details.divisibility,\n symbol,\n });\n }\n }\n }\n\n for (const item of batch) {\n if (item.aggregation_level === \"Global\") {\n const assetInfo = divisibilities.get(item.resource_address) || { decimals: 0, symbol: \"?\" };\n\n const balance = AssetValue.from({\n asset:\n assetInfo.symbol !== Chain.Radix\n ? `${Chain.Radix}.${assetInfo.symbol}-${item.resource_address}`\n : \"XRD.XRD\",\n value: item.amount,\n });\n balances.push(balance);\n }\n }\n }\n\n return balances;\n}\n\nasync function currentStateVersion(networkApi: GatewayApiClient) {\n return networkApi.status.getCurrent().then((status) => status.ledger_state.state_version);\n}\n\nexport const RadixToolbox = async ({\n dappConfig,\n}: { dappConfig?: SKConfigIntegrations[\"radix\"] } = {}) => {\n const { RadixDappToolkit } = await import(\"@radixdlt/radix-dapp-toolkit\");\n const { GatewayApiClient } = await import(\"@radixdlt/babylon-gateway-api-sdk\");\n const config = dappConfig || SKConfig.get(\"integrations\").radix;\n\n const radixToolkit = RadixDappToolkit({\n ...config,\n networkId: config.network?.networkId || 1,\n });\n\n const networkApi = GatewayApiClient.initialize(radixToolkit.gatewayApi.clientConfig);\n\n return {\n getAddress: () => \"\",\n getBalance: getBalance({ networkApi }),\n networkApi,\n validateAddress: radixValidateAddress,\n signAndBroadcast: (() => {\n throw new SwapKitError(\"toolbox_radix_method_not_supported\", { method: \"signAndBroadcast\" });\n }) as (params: any) => Promise<string>,\n };\n};\n"
5
+ "import type {\n FungibleResourcesCollectionItem,\n GatewayApiClient,\n StateEntityDetailsVaultResponseItem,\n StateEntityFungiblesPageRequest,\n StateEntityFungiblesPageResponse,\n} from \"@radixdlt/babylon-gateway-api-sdk\";\nimport { AssetValue, Chain, SKConfig, type SKConfigIntegrations, SwapKitError } from \"@swapkit/helpers\";\n\nexport type RadixWallet = Awaited<ReturnType<typeof RadixToolbox>>;\n\ntype RadixGetBalanceParams = { address: string; networkApi: GatewayApiClient };\n// Could not find anything sync in SDK, ask Radix team\nexport function radixValidateAddress(address: string) {\n return address.startsWith(\"account_rdx1\") && address.length === 66;\n}\n\nfunction getBalance({ networkApi }: { networkApi: GatewayApiClient }) {\n return async function getBalance(address: string) {\n const fungibleResources = await fetchFungibleResources({ address, networkApi });\n const fungibleBalances = convertResourcesToBalances({ networkApi, resources: fungibleResources });\n return fungibleBalances;\n };\n}\n\nasync function fetchFungibleResources({\n address,\n networkApi,\n}: RadixGetBalanceParams): Promise<FungibleResourcesCollectionItem[]> {\n let hasNextPage = true;\n let nextCursor: string | undefined;\n let fungibleResources: FungibleResourcesCollectionItem[] = [];\n const stateVersion = await currentStateVersion(networkApi);\n while (hasNextPage) {\n const stateEntityFungiblesPageRequest: StateEntityFungiblesPageRequest = {\n address: address,\n at_ledger_state: { state_version: stateVersion },\n cursor: nextCursor,\n limit_per_page: 100,\n };\n\n const stateEntityFungiblesPageResponse: StateEntityFungiblesPageResponse =\n await networkApi.state.innerClient.entityFungiblesPage({\n stateEntityFungiblesPageRequest: stateEntityFungiblesPageRequest,\n });\n\n fungibleResources = fungibleResources.concat(stateEntityFungiblesPageResponse.items);\n if (stateEntityFungiblesPageResponse.next_cursor) {\n nextCursor = stateEntityFungiblesPageResponse.next_cursor;\n } else {\n hasNextPage = false;\n }\n }\n return fungibleResources;\n}\n\nasync function convertResourcesToBalances({\n resources,\n networkApi,\n}: {\n resources: FungibleResourcesCollectionItem[]; //| NonFungibleResourcesCollectionItem[];\n networkApi: GatewayApiClient;\n}): Promise<AssetValue[]> {\n const balances: AssetValue[] = [];\n const BATCH_SIZE = 50;\n\n // Split resources into batches of up to 50 items\n const resourceBatches: FungibleResourcesCollectionItem[][] = [];\n for (let i = 0; i < resources.length; i += BATCH_SIZE) {\n resourceBatches.push(resources.slice(i, i + BATCH_SIZE));\n }\n\n for (const batch of resourceBatches) {\n const addresses = batch.map((item) => item.resource_address);\n const response: StateEntityDetailsVaultResponseItem[] =\n await networkApi.state.getEntityDetailsVaultAggregated(addresses);\n\n const divisibilities = new Map<string, { decimals: number; symbol: string }>();\n\n for (const result of response) {\n if (result.details !== undefined) {\n const metaDataSymbol = result.metadata?.items.find((item) => item.key === \"symbol\");\n const symbol = metaDataSymbol?.value.typed.type === \"String\" ? metaDataSymbol.value.typed.value : \"?\";\n\n if (result.details.type === \"FungibleResource\") {\n divisibilities.set(result.address, { decimals: result.details.divisibility, symbol });\n }\n }\n }\n\n for (const item of batch) {\n if (item.aggregation_level === \"Global\") {\n const assetInfo = divisibilities.get(item.resource_address) || { decimals: 0, symbol: \"?\" };\n\n const balance = AssetValue.from({\n asset:\n assetInfo.symbol !== Chain.Radix\n ? `${Chain.Radix}.${assetInfo.symbol}-${item.resource_address}`\n : \"XRD.XRD\",\n value: item.amount,\n });\n balances.push(balance);\n }\n }\n }\n\n return balances;\n}\n\nfunction currentStateVersion(networkApi: GatewayApiClient) {\n return networkApi.status.getCurrent().then((status) => status.ledger_state.state_version);\n}\n\nexport const RadixToolbox = async ({ dappConfig }: { dappConfig?: SKConfigIntegrations[\"radix\"] } = {}) => {\n const { RadixDappToolkit } = await import(\"@radixdlt/radix-dapp-toolkit\");\n const { GatewayApiClient } = await import(\"@radixdlt/babylon-gateway-api-sdk\");\n const config = dappConfig || SKConfig.get(\"integrations\").radix;\n\n const radixToolkit = RadixDappToolkit({ ...config, networkId: config.network?.networkId || 1 });\n\n const networkApi = GatewayApiClient.initialize(radixToolkit.gatewayApi.clientConfig);\n\n return {\n getAddress: () => \"\",\n getBalance: getBalance({ networkApi }),\n networkApi,\n signAndBroadcast: (() => {\n throw new SwapKitError(\"toolbox_radix_method_not_supported\", { method: \"signAndBroadcast\" });\n }) as (params: any) => Promise<string>,\n validateAddress: radixValidateAddress,\n };\n};\n"
6
6
  ],
7
- "mappings": "wxBAsBO,SAAS,CAAoB,CAAC,EAAiB,CACpD,OAAO,EAAQ,WAAW,cAAc,GAAK,EAAQ,SAAW,GAGlE,SAAS,CAAU,EAAG,cAAgD,CACpE,OAAO,eAAe,CAAU,CAAC,EAAiB,CAChD,IAAM,EAAoB,MAAM,EAAuB,CAAE,UAAS,YAAW,CAAC,EAK9E,OAJyB,EAA2B,CAClD,UAAW,EACX,YACF,CAAC,GAKL,eAAe,CAAsB,EACnC,UACA,cACoE,CACpE,IAAI,EAAc,GACd,EACA,EAAuD,CAAC,EACtD,EAAe,MAAM,EAAoB,CAAU,EACzD,MAAO,EAAa,CAClB,IAAM,EAAmE,CACvE,QAAS,EACT,eAAgB,IAChB,OAAQ,EACR,gBAAiB,CACf,cAAe,CACjB,CACF,EAEM,EACJ,MAAM,EAAW,MAAM,YAAY,oBAAoB,CACrD,gCAAiC,CACnC,CAAC,EAGH,GADA,EAAoB,EAAkB,OAAO,EAAiC,KAAK,EAC/E,EAAiC,YACnC,EAAa,EAAiC,YAE9C,OAAc,GAGlB,OAAO,EAIT,eAAe,CAA0B,EACvC,YACA,cAIwB,CACxB,IAAM,EAAyB,CAAC,EAC1B,EAAa,GAGb,EAAuD,CAAC,EAC9D,QAAS,EAAI,EAAG,EAAI,EAAU,OAAQ,GAJnB,GAKjB,EAAgB,KAAK,EAAU,MAAM,EAAG,EALvB,EAKqC,CAAC,EAGzD,QAAW,KAAS,EAAiB,CACnC,IAAM,EAAY,EAAM,IAAI,CAAC,IAAS,EAAK,gBAAgB,EACrD,EACJ,MAAM,EAAW,MAAM,gCAAgC,CAAS,EAE5D,EAAiB,IAAI,IAE3B,QAAW,KAAU,EACnB,GAAI,EAAO,UAAY,OAAW,CAChC,IAAM,EAAiB,EAAO,UAAU,MAAM,KAAK,CAAC,IAAS,EAAK,MAAQ,QAAQ,EAC5E,EACJ,GAAgB,MAAM,MAAM,OAAS,SAAW,EAAe,MAAM,MAAM,MAAQ,IAErF,GAAI,EAAO,QAAQ,OAAS,mBAC1B,EAAe,IAAI,EAAO,QAAS,CACjC,SAAU,EAAO,QAAQ,aACzB,QACF,CAAC,EAKP,QAAW,KAAQ,EACjB,GAAI,EAAK,oBAAsB,SAAU,CACvC,IAAM,EAAY,EAAe,IAAI,EAAK,gBAAgB,GAAK,CAAE,SAAU,EAAG,OAAQ,GAAI,EAEpF,EAAU,aAAW,KAAK,CAC9B,MACE,EAAU,SAAW,QAAM,MACvB,GAAG,QAAM,SAAS,EAAU,UAAU,EAAK,mBAC3C,UACN,MAAO,EAAK,MACd,CAAC,EACD,EAAS,KAAK,CAAO,GAK3B,OAAO,EAGT,eAAe,CAAmB,CAAC,EAA8B,CAC/D,OAAO,EAAW,OAAO,WAAW,EAAE,KAAK,CAAC,IAAW,EAAO,aAAa,aAAa,MA1H1F,EA6Ha,EAAe,OAC1B,cACkD,CAAC,IAAM,CACzD,IAAQ,oBAAqB,KAAa,yCAClC,oBAAqB,KAAa,6CACpC,EAAS,GAAc,WAAS,IAAI,cAAc,EAAE,MAEpD,EAAe,EAAiB,IACjC,EACH,UAAW,EAAO,SAAS,WAAa,CAC1C,CAAC,EAEK,EAAa,EAAiB,WAAW,EAAa,WAAW,YAAY,EAEnF,MAAO,CACL,WAAY,IAAM,GAClB,WAAY,EAAW,CAAE,YAAW,CAAC,EACrC,aACA,gBAAiB,EACjB,iBAAmB,IAAM,CACvB,MAAM,IAAI,eAAa,qCAAsC,CAAE,OAAQ,kBAAmB,CAAC,EAE/F,gBAnJF",
8
- "debugId": "48C8C14223C3965664756E2164756E21",
7
+ "mappings": "wxBAaO,SAAS,CAAoB,CAAC,EAAiB,CACpD,OAAO,EAAQ,WAAW,cAAc,GAAK,EAAQ,SAAW,GAGlE,SAAS,CAAU,EAAG,cAAgD,CACpE,OAAO,eAAe,CAAU,CAAC,EAAiB,CAChD,IAAM,EAAoB,MAAM,EAAuB,CAAE,UAAS,YAAW,CAAC,EAE9E,OADyB,EAA2B,CAAE,aAAY,UAAW,CAAkB,CAAC,GAKpG,eAAe,CAAsB,EACnC,UACA,cACoE,CACpE,IAAI,EAAc,GACd,EACA,EAAuD,CAAC,EACtD,EAAe,MAAM,EAAoB,CAAU,EACzD,MAAO,EAAa,CAClB,IAAM,EAAmE,CACvE,QAAS,EACT,gBAAiB,CAAE,cAAe,CAAa,EAC/C,OAAQ,EACR,eAAgB,GAClB,EAEM,EACJ,MAAM,EAAW,MAAM,YAAY,oBAAoB,CACrD,gCAAiC,CACnC,CAAC,EAGH,GADA,EAAoB,EAAkB,OAAO,EAAiC,KAAK,EAC/E,EAAiC,YACnC,EAAa,EAAiC,YAE9C,OAAc,GAGlB,OAAO,EAGT,eAAe,CAA0B,EACvC,YACA,cAIwB,CACxB,IAAM,EAAyB,CAAC,EAC1B,EAAa,GAGb,EAAuD,CAAC,EAC9D,QAAS,EAAI,EAAG,EAAI,EAAU,OAAQ,GAJnB,GAKjB,EAAgB,KAAK,EAAU,MAAM,EAAG,EALvB,EAKqC,CAAC,EAGzD,QAAW,KAAS,EAAiB,CACnC,IAAM,EAAY,EAAM,IAAI,CAAC,IAAS,EAAK,gBAAgB,EACrD,EACJ,MAAM,EAAW,MAAM,gCAAgC,CAAS,EAE5D,EAAiB,IAAI,IAE3B,QAAW,KAAU,EACnB,GAAI,EAAO,UAAY,OAAW,CAChC,IAAM,EAAiB,EAAO,UAAU,MAAM,KAAK,CAAC,IAAS,EAAK,MAAQ,QAAQ,EAC5E,EAAS,GAAgB,MAAM,MAAM,OAAS,SAAW,EAAe,MAAM,MAAM,MAAQ,IAElG,GAAI,EAAO,QAAQ,OAAS,mBAC1B,EAAe,IAAI,EAAO,QAAS,CAAE,SAAU,EAAO,QAAQ,aAAc,QAAO,CAAC,EAK1F,QAAW,KAAQ,EACjB,GAAI,EAAK,oBAAsB,SAAU,CACvC,IAAM,EAAY,EAAe,IAAI,EAAK,gBAAgB,GAAK,CAAE,SAAU,EAAG,OAAQ,GAAI,EAEpF,EAAU,aAAW,KAAK,CAC9B,MACE,EAAU,SAAW,QAAM,MACvB,GAAG,QAAM,SAAS,EAAU,UAAU,EAAK,mBAC3C,UACN,MAAO,EAAK,MACd,CAAC,EACD,EAAS,KAAK,CAAO,GAK3B,OAAO,EAGT,SAAS,CAAmB,CAAC,EAA8B,CACzD,OAAO,EAAW,OAAO,WAAW,EAAE,KAAK,CAAC,IAAW,EAAO,aAAa,aAAa,MAvG1F,EA0Ga,EAAe,OAAS,cAA+D,CAAC,IAAM,CACzG,IAAQ,oBAAqB,KAAa,yCAClC,oBAAqB,KAAa,6CACpC,EAAS,GAAc,WAAS,IAAI,cAAc,EAAE,MAEpD,EAAe,EAAiB,IAAK,EAAQ,UAAW,EAAO,SAAS,WAAa,CAAE,CAAC,EAExF,EAAa,EAAiB,WAAW,EAAa,WAAW,YAAY,EAEnF,MAAO,CACL,WAAY,IAAM,GAClB,WAAY,EAAW,CAAE,YAAW,CAAC,EACrC,aACA,iBAAmB,IAAM,CACvB,MAAM,IAAI,eAAa,qCAAsC,CAAE,OAAQ,kBAAmB,CAAC,GAE7F,gBAAiB,CACnB,gBA3HF",
8
+ "debugId": "7BC44F7721607CDD64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,4 +1,4 @@
1
- var q=Object.create;var{getPrototypeOf:G,defineProperty:V,getOwnPropertyNames:v}=Object;var x=Object.prototype.hasOwnProperty;var X=(j,z,H)=>{H=j!=null?q(G(j)):{};let J=z||!j||!j.__esModule?V(H,"default",{value:j,enumerable:!0}):H;for(let K of v(j))if(!x.call(J,K))V(J,K,{get:()=>j[K],enumerable:!0});return J};var B=(j,z)=>{for(var H in z)V(j,H,{get:z[H],enumerable:!0,configurable:!0,set:(J)=>z[H]=()=>J})};var I=(j,z)=>()=>(j&&(z=j(j=0)),z);var Y=((j)=>typeof require!=="undefined"?require:typeof Proxy!=="undefined"?new Proxy(j,{get:(z,H)=>(typeof require!=="undefined"?require:z)[H]}):j)(function(j){if(typeof require!=="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+j+'" is not supported')});var R={};B(R,{radixValidateAddress:()=>_,RadixToolbox:()=>P});import{AssetValue as S,Chain as Z,SKConfig as T,SwapKitError as C}from"@swapkit/helpers";function _(j){return j.startsWith("account_rdx1")&&j.length===66}function D({networkApi:j}){return async function z(H){let J=await h({address:H,networkApi:j});return E({resources:J,networkApi:j})}}async function h({address:j,networkApi:z}){let H=!0,J,K=[],L=await F(z);while(H){let Q={address:j,limit_per_page:100,cursor:J,at_ledger_state:{state_version:L}},N=await z.state.innerClient.entityFungiblesPage({stateEntityFungiblesPageRequest:Q});if(K=K.concat(N.items),N.next_cursor)J=N.next_cursor;else H=!1}return K}async function E({resources:j,networkApi:z}){let H=[],J=50,K=[];for(let L=0;L<j.length;L+=50)K.push(j.slice(L,L+50));for(let L of K){let Q=L.map((M)=>M.resource_address),N=await z.state.getEntityDetailsVaultAggregated(Q),W=new Map;for(let M of N)if(M.details!==void 0){let O=M.metadata?.items.find(($)=>$.key==="symbol"),U=O?.value.typed.type==="String"?O.value.typed.value:"?";if(M.details.type==="FungibleResource")W.set(M.address,{decimals:M.details.divisibility,symbol:U})}for(let M of L)if(M.aggregation_level==="Global"){let O=W.get(M.resource_address)||{decimals:0,symbol:"?"},U=S.from({asset:O.symbol!==Z.Radix?`${Z.Radix}.${O.symbol}-${M.resource_address}`:"XRD.XRD",value:M.amount});H.push(U)}}return H}async function F(j){return j.status.getCurrent().then((z)=>z.ledger_state.state_version)}var P=async({dappConfig:j}={})=>{let{RadixDappToolkit:z}=await import("@radixdlt/radix-dapp-toolkit"),{GatewayApiClient:H}=await import("@radixdlt/babylon-gateway-api-sdk"),J=j||T.get("integrations").radix,K=z({...J,networkId:J.network?.networkId||1}),L=H.initialize(K.gatewayApi.clientConfig);return{getAddress:()=>"",getBalance:D({networkApi:L}),networkApi:L,validateAddress:_,signAndBroadcast:()=>{throw new C("toolbox_radix_method_not_supported",{method:"signAndBroadcast"})}}};var f=()=>{};f();export{_ as radixValidateAddress,P as RadixToolbox};
1
+ var q=Object.create;var{getPrototypeOf:G,defineProperty:V,getOwnPropertyNames:v}=Object;var x=Object.prototype.hasOwnProperty;var X=(j,z,H)=>{H=j!=null?q(G(j)):{};let J=z||!j||!j.__esModule?V(H,"default",{value:j,enumerable:!0}):H;for(let K of v(j))if(!x.call(J,K))V(J,K,{get:()=>j[K],enumerable:!0});return J};var B=(j,z)=>{for(var H in z)V(j,H,{get:z[H],enumerable:!0,configurable:!0,set:(J)=>z[H]=()=>J})};var I=(j,z)=>()=>(j&&(z=j(j=0)),z);var Y=((j)=>typeof require!=="undefined"?require:typeof Proxy!=="undefined"?new Proxy(j,{get:(z,H)=>(typeof require!=="undefined"?require:z)[H]}):j)(function(j){if(typeof require!=="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+j+'" is not supported')});var R={};B(R,{radixValidateAddress:()=>_,RadixToolbox:()=>P});import{AssetValue as S,Chain as Z,SKConfig as T,SwapKitError as C}from"@swapkit/helpers";function _(j){return j.startsWith("account_rdx1")&&j.length===66}function D({networkApi:j}){return async function z(H){let J=await h({address:H,networkApi:j});return E({networkApi:j,resources:J})}}async function h({address:j,networkApi:z}){let H=!0,J,K=[],L=await F(z);while(H){let Q={address:j,at_ledger_state:{state_version:L},cursor:J,limit_per_page:100},N=await z.state.innerClient.entityFungiblesPage({stateEntityFungiblesPageRequest:Q});if(K=K.concat(N.items),N.next_cursor)J=N.next_cursor;else H=!1}return K}async function E({resources:j,networkApi:z}){let H=[],J=50,K=[];for(let L=0;L<j.length;L+=50)K.push(j.slice(L,L+50));for(let L of K){let Q=L.map((M)=>M.resource_address),N=await z.state.getEntityDetailsVaultAggregated(Q),W=new Map;for(let M of N)if(M.details!==void 0){let O=M.metadata?.items.find(($)=>$.key==="symbol"),U=O?.value.typed.type==="String"?O.value.typed.value:"?";if(M.details.type==="FungibleResource")W.set(M.address,{decimals:M.details.divisibility,symbol:U})}for(let M of L)if(M.aggregation_level==="Global"){let O=W.get(M.resource_address)||{decimals:0,symbol:"?"},U=S.from({asset:O.symbol!==Z.Radix?`${Z.Radix}.${O.symbol}-${M.resource_address}`:"XRD.XRD",value:M.amount});H.push(U)}}return H}function F(j){return j.status.getCurrent().then((z)=>z.ledger_state.state_version)}var P=async({dappConfig:j}={})=>{let{RadixDappToolkit:z}=await import("@radixdlt/radix-dapp-toolkit"),{GatewayApiClient:H}=await import("@radixdlt/babylon-gateway-api-sdk"),J=j||T.get("integrations").radix,K=z({...J,networkId:J.network?.networkId||1}),L=H.initialize(K.gatewayApi.clientConfig);return{getAddress:()=>"",getBalance:D({networkApi:L}),networkApi:L,signAndBroadcast:()=>{throw new C("toolbox_radix_method_not_supported",{method:"signAndBroadcast"})},validateAddress:_}};var f=()=>{};f();export{_ as radixValidateAddress,P as RadixToolbox};
2
2
 
3
- //# debugId=9021B99FBD3DB8AA64756E2164756E21
3
+ //# debugId=5B104D293CED518A64756E2164756E21
4
4
  //# sourceMappingURL=index.js.map
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/radix/index.ts"],
4
4
  "sourcesContent": [
5
- "import type {\n FungibleResourcesCollectionItem,\n GatewayApiClient,\n StateEntityDetailsVaultResponseItem,\n StateEntityFungiblesPageRequest,\n StateEntityFungiblesPageResponse,\n} from \"@radixdlt/babylon-gateway-api-sdk\";\nimport {\n AssetValue,\n Chain,\n SKConfig,\n type SKConfigIntegrations,\n SwapKitError,\n} from \"@swapkit/helpers\";\n\nexport type RadixWallet = Awaited<ReturnType<typeof RadixToolbox>>;\n\ntype RadixGetBalanceParams = {\n address: string;\n networkApi: GatewayApiClient;\n};\n// Could not find anything sync in SDK, ask Radix team\nexport function radixValidateAddress(address: string) {\n return address.startsWith(\"account_rdx1\") && address.length === 66;\n}\n\nfunction getBalance({ networkApi }: { networkApi: GatewayApiClient }) {\n return async function getBalance(address: string) {\n const fungibleResources = await fetchFungibleResources({ address, networkApi });\n const fungibleBalances = convertResourcesToBalances({\n resources: fungibleResources,\n networkApi,\n });\n return fungibleBalances;\n };\n}\n\nasync function fetchFungibleResources({\n address,\n networkApi,\n}: RadixGetBalanceParams): Promise<FungibleResourcesCollectionItem[]> {\n let hasNextPage = true;\n let nextCursor: string | undefined;\n let fungibleResources: FungibleResourcesCollectionItem[] = [];\n const stateVersion = await currentStateVersion(networkApi);\n while (hasNextPage) {\n const stateEntityFungiblesPageRequest: StateEntityFungiblesPageRequest = {\n address: address,\n limit_per_page: 100,\n cursor: nextCursor,\n at_ledger_state: {\n state_version: stateVersion,\n },\n };\n\n const stateEntityFungiblesPageResponse: StateEntityFungiblesPageResponse =\n await networkApi.state.innerClient.entityFungiblesPage({\n stateEntityFungiblesPageRequest: stateEntityFungiblesPageRequest,\n });\n\n fungibleResources = fungibleResources.concat(stateEntityFungiblesPageResponse.items);\n if (stateEntityFungiblesPageResponse.next_cursor) {\n nextCursor = stateEntityFungiblesPageResponse.next_cursor;\n } else {\n hasNextPage = false;\n }\n }\n return fungibleResources;\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: <explanation>\nasync function convertResourcesToBalances({\n resources,\n networkApi,\n}: {\n resources: FungibleResourcesCollectionItem[]; //| NonFungibleResourcesCollectionItem[];\n networkApi: GatewayApiClient;\n}): Promise<AssetValue[]> {\n const balances: AssetValue[] = [];\n const BATCH_SIZE = 50;\n\n // Split resources into batches of up to 50 items\n const resourceBatches: FungibleResourcesCollectionItem[][] = [];\n for (let i = 0; i < resources.length; i += BATCH_SIZE) {\n resourceBatches.push(resources.slice(i, i + BATCH_SIZE));\n }\n\n for (const batch of resourceBatches) {\n const addresses = batch.map((item) => item.resource_address);\n const response: StateEntityDetailsVaultResponseItem[] =\n await networkApi.state.getEntityDetailsVaultAggregated(addresses);\n\n const divisibilities = new Map<string, { decimals: number; symbol: string }>();\n\n for (const result of response) {\n if (result.details !== undefined) {\n const metaDataSymbol = result.metadata?.items.find((item) => item.key === \"symbol\");\n const symbol =\n metaDataSymbol?.value.typed.type === \"String\" ? metaDataSymbol.value.typed.value : \"?\";\n\n if (result.details.type === \"FungibleResource\") {\n divisibilities.set(result.address, {\n decimals: result.details.divisibility,\n symbol,\n });\n }\n }\n }\n\n for (const item of batch) {\n if (item.aggregation_level === \"Global\") {\n const assetInfo = divisibilities.get(item.resource_address) || { decimals: 0, symbol: \"?\" };\n\n const balance = AssetValue.from({\n asset:\n assetInfo.symbol !== Chain.Radix\n ? `${Chain.Radix}.${assetInfo.symbol}-${item.resource_address}`\n : \"XRD.XRD\",\n value: item.amount,\n });\n balances.push(balance);\n }\n }\n }\n\n return balances;\n}\n\nasync function currentStateVersion(networkApi: GatewayApiClient) {\n return networkApi.status.getCurrent().then((status) => status.ledger_state.state_version);\n}\n\nexport const RadixToolbox = async ({\n dappConfig,\n}: { dappConfig?: SKConfigIntegrations[\"radix\"] } = {}) => {\n const { RadixDappToolkit } = await import(\"@radixdlt/radix-dapp-toolkit\");\n const { GatewayApiClient } = await import(\"@radixdlt/babylon-gateway-api-sdk\");\n const config = dappConfig || SKConfig.get(\"integrations\").radix;\n\n const radixToolkit = RadixDappToolkit({\n ...config,\n networkId: config.network?.networkId || 1,\n });\n\n const networkApi = GatewayApiClient.initialize(radixToolkit.gatewayApi.clientConfig);\n\n return {\n getAddress: () => \"\",\n getBalance: getBalance({ networkApi }),\n networkApi,\n validateAddress: radixValidateAddress,\n signAndBroadcast: (() => {\n throw new SwapKitError(\"toolbox_radix_method_not_supported\", { method: \"signAndBroadcast\" });\n }) as (params: any) => Promise<string>,\n };\n};\n"
5
+ "import type {\n FungibleResourcesCollectionItem,\n GatewayApiClient,\n StateEntityDetailsVaultResponseItem,\n StateEntityFungiblesPageRequest,\n StateEntityFungiblesPageResponse,\n} from \"@radixdlt/babylon-gateway-api-sdk\";\nimport { AssetValue, Chain, SKConfig, type SKConfigIntegrations, SwapKitError } from \"@swapkit/helpers\";\n\nexport type RadixWallet = Awaited<ReturnType<typeof RadixToolbox>>;\n\ntype RadixGetBalanceParams = { address: string; networkApi: GatewayApiClient };\n// Could not find anything sync in SDK, ask Radix team\nexport function radixValidateAddress(address: string) {\n return address.startsWith(\"account_rdx1\") && address.length === 66;\n}\n\nfunction getBalance({ networkApi }: { networkApi: GatewayApiClient }) {\n return async function getBalance(address: string) {\n const fungibleResources = await fetchFungibleResources({ address, networkApi });\n const fungibleBalances = convertResourcesToBalances({ networkApi, resources: fungibleResources });\n return fungibleBalances;\n };\n}\n\nasync function fetchFungibleResources({\n address,\n networkApi,\n}: RadixGetBalanceParams): Promise<FungibleResourcesCollectionItem[]> {\n let hasNextPage = true;\n let nextCursor: string | undefined;\n let fungibleResources: FungibleResourcesCollectionItem[] = [];\n const stateVersion = await currentStateVersion(networkApi);\n while (hasNextPage) {\n const stateEntityFungiblesPageRequest: StateEntityFungiblesPageRequest = {\n address: address,\n at_ledger_state: { state_version: stateVersion },\n cursor: nextCursor,\n limit_per_page: 100,\n };\n\n const stateEntityFungiblesPageResponse: StateEntityFungiblesPageResponse =\n await networkApi.state.innerClient.entityFungiblesPage({\n stateEntityFungiblesPageRequest: stateEntityFungiblesPageRequest,\n });\n\n fungibleResources = fungibleResources.concat(stateEntityFungiblesPageResponse.items);\n if (stateEntityFungiblesPageResponse.next_cursor) {\n nextCursor = stateEntityFungiblesPageResponse.next_cursor;\n } else {\n hasNextPage = false;\n }\n }\n return fungibleResources;\n}\n\nasync function convertResourcesToBalances({\n resources,\n networkApi,\n}: {\n resources: FungibleResourcesCollectionItem[]; //| NonFungibleResourcesCollectionItem[];\n networkApi: GatewayApiClient;\n}): Promise<AssetValue[]> {\n const balances: AssetValue[] = [];\n const BATCH_SIZE = 50;\n\n // Split resources into batches of up to 50 items\n const resourceBatches: FungibleResourcesCollectionItem[][] = [];\n for (let i = 0; i < resources.length; i += BATCH_SIZE) {\n resourceBatches.push(resources.slice(i, i + BATCH_SIZE));\n }\n\n for (const batch of resourceBatches) {\n const addresses = batch.map((item) => item.resource_address);\n const response: StateEntityDetailsVaultResponseItem[] =\n await networkApi.state.getEntityDetailsVaultAggregated(addresses);\n\n const divisibilities = new Map<string, { decimals: number; symbol: string }>();\n\n for (const result of response) {\n if (result.details !== undefined) {\n const metaDataSymbol = result.metadata?.items.find((item) => item.key === \"symbol\");\n const symbol = metaDataSymbol?.value.typed.type === \"String\" ? metaDataSymbol.value.typed.value : \"?\";\n\n if (result.details.type === \"FungibleResource\") {\n divisibilities.set(result.address, { decimals: result.details.divisibility, symbol });\n }\n }\n }\n\n for (const item of batch) {\n if (item.aggregation_level === \"Global\") {\n const assetInfo = divisibilities.get(item.resource_address) || { decimals: 0, symbol: \"?\" };\n\n const balance = AssetValue.from({\n asset:\n assetInfo.symbol !== Chain.Radix\n ? `${Chain.Radix}.${assetInfo.symbol}-${item.resource_address}`\n : \"XRD.XRD\",\n value: item.amount,\n });\n balances.push(balance);\n }\n }\n }\n\n return balances;\n}\n\nfunction currentStateVersion(networkApi: GatewayApiClient) {\n return networkApi.status.getCurrent().then((status) => status.ledger_state.state_version);\n}\n\nexport const RadixToolbox = async ({ dappConfig }: { dappConfig?: SKConfigIntegrations[\"radix\"] } = {}) => {\n const { RadixDappToolkit } = await import(\"@radixdlt/radix-dapp-toolkit\");\n const { GatewayApiClient } = await import(\"@radixdlt/babylon-gateway-api-sdk\");\n const config = dappConfig || SKConfig.get(\"integrations\").radix;\n\n const radixToolkit = RadixDappToolkit({ ...config, networkId: config.network?.networkId || 1 });\n\n const networkApi = GatewayApiClient.initialize(radixToolkit.gatewayApi.clientConfig);\n\n return {\n getAddress: () => \"\",\n getBalance: getBalance({ networkApi }),\n networkApi,\n signAndBroadcast: (() => {\n throw new SwapKitError(\"toolbox_radix_method_not_supported\", { method: \"signAndBroadcast\" });\n }) as (params: any) => Promise<string>,\n validateAddress: radixValidateAddress,\n };\n};\n"
6
6
  ],
7
- "mappings": "6xBAOA,qBACE,WACA,cACA,kBAEA,yBAUK,SAAS,CAAoB,CAAC,EAAiB,CACpD,OAAO,EAAQ,WAAW,cAAc,GAAK,EAAQ,SAAW,GAGlE,SAAS,CAAU,EAAG,cAAgD,CACpE,OAAO,eAAe,CAAU,CAAC,EAAiB,CAChD,IAAM,EAAoB,MAAM,EAAuB,CAAE,UAAS,YAAW,CAAC,EAK9E,OAJyB,EAA2B,CAClD,UAAW,EACX,YACF,CAAC,GAKL,eAAe,CAAsB,EACnC,UACA,cACoE,CACpE,IAAI,EAAc,GACd,EACA,EAAuD,CAAC,EACtD,EAAe,MAAM,EAAoB,CAAU,EACzD,MAAO,EAAa,CAClB,IAAM,EAAmE,CACvE,QAAS,EACT,eAAgB,IAChB,OAAQ,EACR,gBAAiB,CACf,cAAe,CACjB,CACF,EAEM,EACJ,MAAM,EAAW,MAAM,YAAY,oBAAoB,CACrD,gCAAiC,CACnC,CAAC,EAGH,GADA,EAAoB,EAAkB,OAAO,EAAiC,KAAK,EAC/E,EAAiC,YACnC,EAAa,EAAiC,YAE9C,OAAc,GAGlB,OAAO,EAIT,eAAe,CAA0B,EACvC,YACA,cAIwB,CACxB,IAAM,EAAyB,CAAC,EAC1B,EAAa,GAGb,EAAuD,CAAC,EAC9D,QAAS,EAAI,EAAG,EAAI,EAAU,OAAQ,GAJnB,GAKjB,EAAgB,KAAK,EAAU,MAAM,EAAG,EALvB,EAKqC,CAAC,EAGzD,QAAW,KAAS,EAAiB,CACnC,IAAM,EAAY,EAAM,IAAI,CAAC,IAAS,EAAK,gBAAgB,EACrD,EACJ,MAAM,EAAW,MAAM,gCAAgC,CAAS,EAE5D,EAAiB,IAAI,IAE3B,QAAW,KAAU,EACnB,GAAI,EAAO,UAAY,OAAW,CAChC,IAAM,EAAiB,EAAO,UAAU,MAAM,KAAK,CAAC,IAAS,EAAK,MAAQ,QAAQ,EAC5E,EACJ,GAAgB,MAAM,MAAM,OAAS,SAAW,EAAe,MAAM,MAAM,MAAQ,IAErF,GAAI,EAAO,QAAQ,OAAS,mBAC1B,EAAe,IAAI,EAAO,QAAS,CACjC,SAAU,EAAO,QAAQ,aACzB,QACF,CAAC,EAKP,QAAW,KAAQ,EACjB,GAAI,EAAK,oBAAsB,SAAU,CACvC,IAAM,EAAY,EAAe,IAAI,EAAK,gBAAgB,GAAK,CAAE,SAAU,EAAG,OAAQ,GAAI,EAEpF,EAAU,EAAW,KAAK,CAC9B,MACE,EAAU,SAAW,EAAM,MACvB,GAAG,EAAM,SAAS,EAAU,UAAU,EAAK,mBAC3C,UACN,MAAO,EAAK,MACd,CAAC,EACD,EAAS,KAAK,CAAO,GAK3B,OAAO,EAGT,eAAe,CAAmB,CAAC,EAA8B,CAC/D,OAAO,EAAW,OAAO,WAAW,EAAE,KAAK,CAAC,IAAW,EAAO,aAAa,aAAa,MAG7E,EAAe,OAC1B,cACkD,CAAC,IAAM,CACzD,IAAQ,oBAAqB,KAAa,yCAClC,oBAAqB,KAAa,6CACpC,EAAS,GAAc,EAAS,IAAI,cAAc,EAAE,MAEpD,EAAe,EAAiB,IACjC,EACH,UAAW,EAAO,SAAS,WAAa,CAC1C,CAAC,EAEK,EAAa,EAAiB,WAAW,EAAa,WAAW,YAAY,EAEnF,MAAO,CACL,WAAY,IAAM,GAClB,WAAY,EAAW,CAAE,YAAW,CAAC,EACrC,aACA,gBAAiB,EACjB,iBAAmB,IAAM,CACvB,MAAM,IAAI,EAAa,qCAAsC,CAAE,OAAQ,kBAAmB,CAAC,EAE/F",
8
- "debugId": "9021B99FBD3DB8AA64756E2164756E21",
7
+ "mappings": "6xBAOA,qBAAS,WAAY,cAAO,kBAAqC,yBAM1D,SAAS,CAAoB,CAAC,EAAiB,CACpD,OAAO,EAAQ,WAAW,cAAc,GAAK,EAAQ,SAAW,GAGlE,SAAS,CAAU,EAAG,cAAgD,CACpE,OAAO,eAAe,CAAU,CAAC,EAAiB,CAChD,IAAM,EAAoB,MAAM,EAAuB,CAAE,UAAS,YAAW,CAAC,EAE9E,OADyB,EAA2B,CAAE,aAAY,UAAW,CAAkB,CAAC,GAKpG,eAAe,CAAsB,EACnC,UACA,cACoE,CACpE,IAAI,EAAc,GACd,EACA,EAAuD,CAAC,EACtD,EAAe,MAAM,EAAoB,CAAU,EACzD,MAAO,EAAa,CAClB,IAAM,EAAmE,CACvE,QAAS,EACT,gBAAiB,CAAE,cAAe,CAAa,EAC/C,OAAQ,EACR,eAAgB,GAClB,EAEM,EACJ,MAAM,EAAW,MAAM,YAAY,oBAAoB,CACrD,gCAAiC,CACnC,CAAC,EAGH,GADA,EAAoB,EAAkB,OAAO,EAAiC,KAAK,EAC/E,EAAiC,YACnC,EAAa,EAAiC,YAE9C,OAAc,GAGlB,OAAO,EAGT,eAAe,CAA0B,EACvC,YACA,cAIwB,CACxB,IAAM,EAAyB,CAAC,EAC1B,EAAa,GAGb,EAAuD,CAAC,EAC9D,QAAS,EAAI,EAAG,EAAI,EAAU,OAAQ,GAJnB,GAKjB,EAAgB,KAAK,EAAU,MAAM,EAAG,EALvB,EAKqC,CAAC,EAGzD,QAAW,KAAS,EAAiB,CACnC,IAAM,EAAY,EAAM,IAAI,CAAC,IAAS,EAAK,gBAAgB,EACrD,EACJ,MAAM,EAAW,MAAM,gCAAgC,CAAS,EAE5D,EAAiB,IAAI,IAE3B,QAAW,KAAU,EACnB,GAAI,EAAO,UAAY,OAAW,CAChC,IAAM,EAAiB,EAAO,UAAU,MAAM,KAAK,CAAC,IAAS,EAAK,MAAQ,QAAQ,EAC5E,EAAS,GAAgB,MAAM,MAAM,OAAS,SAAW,EAAe,MAAM,MAAM,MAAQ,IAElG,GAAI,EAAO,QAAQ,OAAS,mBAC1B,EAAe,IAAI,EAAO,QAAS,CAAE,SAAU,EAAO,QAAQ,aAAc,QAAO,CAAC,EAK1F,QAAW,KAAQ,EACjB,GAAI,EAAK,oBAAsB,SAAU,CACvC,IAAM,EAAY,EAAe,IAAI,EAAK,gBAAgB,GAAK,CAAE,SAAU,EAAG,OAAQ,GAAI,EAEpF,EAAU,EAAW,KAAK,CAC9B,MACE,EAAU,SAAW,EAAM,MACvB,GAAG,EAAM,SAAS,EAAU,UAAU,EAAK,mBAC3C,UACN,MAAO,EAAK,MACd,CAAC,EACD,EAAS,KAAK,CAAO,GAK3B,OAAO,EAGT,SAAS,CAAmB,CAAC,EAA8B,CACzD,OAAO,EAAW,OAAO,WAAW,EAAE,KAAK,CAAC,IAAW,EAAO,aAAa,aAAa,MAG7E,EAAe,OAAS,cAA+D,CAAC,IAAM,CACzG,IAAQ,oBAAqB,KAAa,yCAClC,oBAAqB,KAAa,6CACpC,EAAS,GAAc,EAAS,IAAI,cAAc,EAAE,MAEpD,EAAe,EAAiB,IAAK,EAAQ,UAAW,EAAO,SAAS,WAAa,CAAE,CAAC,EAExF,EAAa,EAAiB,WAAW,EAAa,WAAW,YAAY,EAEnF,MAAO,CACL,WAAY,IAAM,GAClB,WAAY,EAAW,CAAE,YAAW,CAAC,EACrC,aACA,iBAAmB,IAAM,CACvB,MAAM,IAAI,EAAa,qCAAsC,CAAE,OAAQ,kBAAmB,CAAC,GAE7F,gBAAiB,CACnB",
8
+ "debugId": "5B104D293CED518A64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,4 +1,4 @@
1
- var U=Object.create;var{getPrototypeOf:b,defineProperty:$,getOwnPropertyNames:W,getOwnPropertyDescriptor:D}=Object,f=Object.prototype.hasOwnProperty;var x=(j,y,G)=>{G=j!=null?U(b(j)):{};let z=y||!j||!j.__esModule?$(G,"default",{value:j,enumerable:!0}):G;for(let Y of W(j))if(!f.call(z,Y))$(z,Y,{get:()=>j[Y],enumerable:!0});return z},N=new WeakMap,R=(j)=>{var y=N.get(j),G;if(y)return y;if(y=$({},"__esModule",{value:!0}),j&&typeof j==="object"||typeof j==="function")W(j).map((z)=>!f.call(y,z)&&$(y,z,{get:()=>j[z],enumerable:!(G=D(j,z))||G.enumerable}));return N.set(j,y),y};var K=(j,y)=>{for(var G in y)$(j,G,{get:y[G],enumerable:!0,configurable:!0,set:(z)=>y[G]=()=>z})};var A=(j,y)=>()=>(j&&(y=j(j=0)),y);var S={};K(S,{rippleValidateAddress:()=>k,hashes:()=>O.hashes,getRippleToolbox:()=>w});module.exports=R(S);function H(j){let y=X.Wallet.fromMnemonic(j);return{getAddress:()=>Promise.resolve(y.address),signTransaction:(G)=>Promise.resolve(y.sign(G))}}function k(j){return X.isValidAddress(j)}var q,X,O,T,w=async(j={})=>{let y="signer"in j&&j.signer?j.signer:("phrase"in j)&&j.phrase?H(j.phrase):void 0,G=await q.getRPCUrl(q.Chain.Ripple);if(!G)throw new q.SwapKitError({errorKey:"toolbox_ripple_rpc_not_configured",info:{chain:q.Chain.Ripple}});let z=new X.Client(G);await z.connect();let Y=()=>{if(!y)throw new q.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});return y.getAddress()},_=async(J)=>{let Q=J||await Y();try{let Z=(await z.request({command:"account_info",account:Q})).result.account_data.Balance;return[q.AssetValue.from({chain:q.Chain.Ripple,value:Z,fromBaseDecimal:q.BaseDecimal[q.Chain.Ripple]})]}catch(M){if(M.data.error_code===T.ACCOUNT_NOT_FOUND)return[q.AssetValue.from({chain:q.Chain.Ripple,value:0})];throw new q.SwapKitError("toolbox_ripple_get_balance_error",{info:{address:Q,error:M}})}},B=async()=>{let Q=(await z.request({command:"fee"})).result.drops.open_ledger_fee;return q.AssetValue.from({chain:q.Chain.Ripple,value:q.SwapKitNumber.fromBigInt(BigInt(Q),q.BaseDecimal[q.Chain.Ripple])})},v=async({assetValue:J,recipient:Q,memo:M,sender:Z})=>{if(!k(Q))throw new q.SwapKitError({errorKey:"core_transaction_invalid_recipient_address"});let P=Z||await Y();if(!J.isGasAsset||J.chain!==q.Chain.Ripple)throw new q.SwapKitError({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:J.toString()}});let L={TransactionType:"Payment",Account:P,Amount:X.xrpToDrops(J.getValue("string")),Destination:Q};if(M)L.Memos=[{Memo:{MemoData:Buffer.from(M).toString("hex")}}];return await z.autofill(L)},F=(J)=>{if(!y)throw new q.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});return y.signTransaction(J)},I=async(J)=>{let M=(await z.submitAndWait(J)).result;if(M.validated)return M.hash;throw new q.SwapKitError({errorKey:"toolbox_ripple_broadcast_error",info:{chain:q.Chain.Ripple}})};return{signer:y,createSigner:H,getAddress:Y,validateAddress:k,getBalance:_,createTransaction:v,signTransaction:F,broadcastTransaction:I,transfer:async(J)=>{if(!y)throw new q.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});let Q=await y.getAddress(),M=await v({...J,sender:Q}),Z=await F(M);return I(Z.tx_blob)},estimateTransactionFee:B,disconnect:()=>z.disconnect()}};var C=A(()=>{q=require("@swapkit/helpers"),X=require("xrpl"),O=require("xrpl"),T={ACCOUNT_NOT_FOUND:19}});C();
1
+ var U=Object.create;var{getPrototypeOf:b,defineProperty:$,getOwnPropertyNames:W,getOwnPropertyDescriptor:D}=Object,f=Object.prototype.hasOwnProperty;var x=(j,y,G)=>{G=j!=null?U(b(j)):{};let z=y||!j||!j.__esModule?$(G,"default",{value:j,enumerable:!0}):G;for(let Y of W(j))if(!f.call(z,Y))$(z,Y,{get:()=>j[Y],enumerable:!0});return z},N=new WeakMap,R=(j)=>{var y=N.get(j),G;if(y)return y;if(y=$({},"__esModule",{value:!0}),j&&typeof j==="object"||typeof j==="function")W(j).map((z)=>!f.call(y,z)&&$(y,z,{get:()=>j[z],enumerable:!(G=D(j,z))||G.enumerable}));return N.set(j,y),y};var K=(j,y)=>{for(var G in y)$(j,G,{get:y[G],enumerable:!0,configurable:!0,set:(z)=>y[G]=()=>z})};var A=(j,y)=>()=>(j&&(y=j(j=0)),y);var C={};K(C,{rippleValidateAddress:()=>k,hashes:()=>O.hashes,getRippleToolbox:()=>w});module.exports=R(C);function H(j){let y=X.Wallet.fromMnemonic(j);return{getAddress:()=>Promise.resolve(y.address),signTransaction:(G)=>Promise.resolve(y.sign(G))}}function k(j){return X.isValidAddress(j)}var q,X,O,T,w=async(j={})=>{let y="signer"in j&&j.signer?j.signer:("phrase"in j)&&j.phrase?H(j.phrase):void 0,G=await q.getRPCUrl(q.Chain.Ripple);if(!G)throw new q.SwapKitError({errorKey:"toolbox_ripple_rpc_not_configured",info:{chain:q.Chain.Ripple}});let z=new X.Client(G);await z.connect();let Y=()=>{if(!y)throw new q.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});return y.getAddress()},_=async(J)=>{let Q=J||await Y();try{let Z=(await z.request({account:Q,command:"account_info"})).result.account_data.Balance;return[q.AssetValue.from({chain:q.Chain.Ripple,fromBaseDecimal:q.BaseDecimal[q.Chain.Ripple],value:Z})]}catch(M){if(M.data.error_code===T.ACCOUNT_NOT_FOUND)return[q.AssetValue.from({chain:q.Chain.Ripple,value:0})];throw new q.SwapKitError("toolbox_ripple_get_balance_error",{info:{address:Q,error:M}})}},B=async()=>{let Q=(await z.request({command:"fee"})).result.drops.open_ledger_fee;return q.AssetValue.from({chain:q.Chain.Ripple,value:q.SwapKitNumber.fromBigInt(BigInt(Q),q.BaseDecimal[q.Chain.Ripple])})},v=async({assetValue:J,recipient:Q,memo:M,sender:Z})=>{if(!k(Q))throw new q.SwapKitError({errorKey:"core_transaction_invalid_recipient_address"});let P=Z||await Y();if(!J.isGasAsset||J.chain!==q.Chain.Ripple)throw new q.SwapKitError({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:J.toString()}});let L={Account:P,Amount:X.xrpToDrops(J.getValue("string")),Destination:Q,TransactionType:"Payment"};if(M)L.Memos=[{Memo:{MemoData:Buffer.from(M).toString("hex")}}];return await z.autofill(L)},F=(J)=>{if(!y)throw new q.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});return y.signTransaction(J)},I=async(J)=>{let M=(await z.submitAndWait(J)).result;if(M.validated)return M.hash;throw new q.SwapKitError({errorKey:"toolbox_ripple_broadcast_error",info:{chain:q.Chain.Ripple}})};return{broadcastTransaction:I,createSigner:H,createTransaction:v,disconnect:()=>z.disconnect(),estimateTransactionFee:B,getAddress:Y,getBalance:_,signer:y,signTransaction:F,transfer:async(J)=>{if(!y)throw new q.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});let Q=await y.getAddress(),M=await v({...J,sender:Q}),Z=await F(M);return I(Z.tx_blob)},validateAddress:k}};var E=A(()=>{q=require("@swapkit/helpers"),X=require("xrpl"),O=require("xrpl"),T={ACCOUNT_NOT_FOUND:19}});E();
2
2
 
3
- //# debugId=226302CD3BBBBF9F64756E2164756E21
3
+ //# debugId=D3152E07171F963064756E2164756E21
4
4
  //# sourceMappingURL=index.cjs.map
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/ripple/index.ts"],
4
4
  "sourcesContent": [
5
- "import {\n AssetValue,\n BaseDecimal,\n Chain,\n type ChainSigner,\n type GenericTransferParams,\n SwapKitError,\n SwapKitNumber,\n getRPCUrl,\n} from \"@swapkit/helpers\";\nimport type { Transaction } from \"xrpl\";\nimport { Client, type Payment, Wallet, isValidAddress, xrpToDrops } from \"xrpl\";\n\nexport type RippleWallet = Awaited<ReturnType<typeof getRippleToolbox>>;\n\nexport { hashes, type Transaction } from \"xrpl\";\n\nconst RIPPLE_ERROR_CODES = {\n ACCOUNT_NOT_FOUND: 19,\n} as const;\n\n// Note: Ripple seeds generate a single address, no derivation path/index support.\nfunction createSigner(phrase: string): ChainSigner<Transaction, { tx_blob: string; hash: string }> {\n const wallet = Wallet.fromMnemonic(phrase);\n return {\n // publicKey: wallet.publicKey,\n // Address is sync, but interface requires async\n getAddress: () => Promise.resolve(wallet.address),\n // Signing is sync, but interface requires async\n signTransaction: (tx: Transaction) => Promise.resolve(wallet.sign(tx as Transaction)), // Cast needed as Wallet.sign expects Transaction\n };\n}\n\nexport function rippleValidateAddress(address: string) {\n return isValidAddress(address);\n}\n\ntype RippleToolboxParams =\n | { phrase: string }\n | { signer: ChainSigner<Transaction, { tx_blob: string; hash: string }> }\n | {};\n\nexport const getRippleToolbox = async (params: RippleToolboxParams = {}) => {\n const signer =\n \"signer\" in params && params.signer\n ? params.signer\n : \"phrase\" in params && params.phrase\n ? createSigner(params.phrase)\n : undefined;\n\n const rpcUrl = await getRPCUrl(Chain.Ripple);\n if (!rpcUrl) {\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_rpc_not_configured\",\n info: { chain: Chain.Ripple },\n });\n }\n\n const client = new Client(rpcUrl);\n await client.connect();\n\n const getAddress = () => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n return signer.getAddress();\n };\n\n const getBalance = async (address?: string) => {\n const addr = address || (await getAddress());\n\n try {\n const accountInfo = await client.request({ command: \"account_info\", account: addr });\n\n const balance = accountInfo.result.account_data.Balance;\n\n return [\n AssetValue.from({\n chain: Chain.Ripple,\n value: balance,\n fromBaseDecimal: BaseDecimal[Chain.Ripple],\n }),\n ];\n } catch (error) {\n // empty account\n if ((error as any).data.error_code === RIPPLE_ERROR_CODES.ACCOUNT_NOT_FOUND) {\n return [\n AssetValue.from({\n chain: Chain.Ripple,\n value: 0,\n }),\n ];\n }\n throw new SwapKitError(\"toolbox_ripple_get_balance_error\", {\n info: { address: addr, error },\n });\n }\n };\n\n const estimateTransactionFee = async () => {\n const feeResponse = await client.request({ command: \"fee\" });\n const feeDrops = feeResponse.result.drops.open_ledger_fee; // Fee in drops\n\n return AssetValue.from({\n chain: Chain.Ripple,\n value: SwapKitNumber.fromBigInt(BigInt(feeDrops), BaseDecimal[Chain.Ripple]),\n });\n };\n\n const createTransaction = async ({\n assetValue,\n recipient,\n memo,\n sender,\n }: { assetValue: AssetValue; recipient: string; sender?: string; memo?: string }) => {\n if (!rippleValidateAddress(recipient)) {\n throw new SwapKitError({ errorKey: \"core_transaction_invalid_recipient_address\" });\n }\n\n const senderAddress = sender || (await getAddress());\n\n if (!assetValue.isGasAsset || assetValue.chain !== Chain.Ripple) {\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_asset_not_supported\",\n info: { asset: assetValue.toString() },\n });\n }\n\n const transaction: Payment = {\n TransactionType: \"Payment\",\n Account: senderAddress,\n Amount: xrpToDrops(assetValue.getValue(\"string\")),\n Destination: recipient,\n };\n\n if (memo) {\n transaction.Memos = [{ Memo: { MemoData: Buffer.from(memo).toString(\"hex\") } }];\n }\n\n const preparedTx = await client.autofill(transaction);\n return preparedTx;\n };\n\n const signTransaction = (tx: Transaction) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n return signer.signTransaction(tx);\n };\n\n const broadcastTransaction = async (signedTxHex: string) => {\n const submitResult = await client.submitAndWait(signedTxHex);\n const result = submitResult.result;\n\n if (result.validated) {\n return result.hash;\n }\n\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_broadcast_error\",\n info: { chain: Chain.Ripple },\n });\n };\n\n const transfer = async (params: GenericTransferParams) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n const sender = await signer.getAddress();\n const tx = await createTransaction({ ...params, sender });\n const signedTx = await signTransaction(tx);\n return broadcastTransaction(signedTx.tx_blob);\n };\n\n const disconnect = () => client.disconnect();\n\n return {\n // Signer related\n signer, // Expose the signer instance if created/provided\n createSigner, // Expose the helper\n // Core methods\n getAddress,\n validateAddress: rippleValidateAddress,\n getBalance,\n createTransaction,\n signTransaction,\n broadcastTransaction,\n transfer,\n estimateTransactionFee,\n disconnect,\n };\n};\n"
5
+ "import {\n AssetValue,\n BaseDecimal,\n Chain,\n type ChainSigner,\n type GenericTransferParams,\n getRPCUrl,\n SwapKitError,\n SwapKitNumber,\n} from \"@swapkit/helpers\";\nimport type { Transaction } from \"xrpl\";\nimport { Client, isValidAddress, type Payment, Wallet, xrpToDrops } from \"xrpl\";\n\nexport type RippleWallet = Awaited<ReturnType<typeof getRippleToolbox>>;\n\nexport { hashes, type Transaction } from \"xrpl\";\n\nconst RIPPLE_ERROR_CODES = { ACCOUNT_NOT_FOUND: 19 } as const;\n\n// Note: Ripple seeds generate a single address, no derivation path/index support.\nfunction createSigner(phrase: string): ChainSigner<Transaction, { tx_blob: string; hash: string }> {\n const wallet = Wallet.fromMnemonic(phrase);\n return {\n // publicKey: wallet.publicKey,\n // Address is sync, but interface requires async\n getAddress: () => Promise.resolve(wallet.address),\n // Signing is sync, but interface requires async\n signTransaction: (tx: Transaction) => Promise.resolve(wallet.sign(tx as Transaction)), // Cast needed as Wallet.sign expects Transaction\n };\n}\n\nexport function rippleValidateAddress(address: string) {\n return isValidAddress(address);\n}\n\ntype RippleToolboxParams =\n | { phrase: string }\n | { signer: ChainSigner<Transaction, { tx_blob: string; hash: string }> }\n | {};\n\nexport const getRippleToolbox = async (params: RippleToolboxParams = {}) => {\n const signer =\n \"signer\" in params && params.signer\n ? params.signer\n : \"phrase\" in params && params.phrase\n ? createSigner(params.phrase)\n : undefined;\n\n const rpcUrl = await getRPCUrl(Chain.Ripple);\n if (!rpcUrl) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_rpc_not_configured\", info: { chain: Chain.Ripple } });\n }\n\n const client = new Client(rpcUrl);\n await client.connect();\n\n const getAddress = () => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n return signer.getAddress();\n };\n\n const getBalance = async (address?: string) => {\n const addr = address || (await getAddress());\n\n try {\n const accountInfo = await client.request({ account: addr, command: \"account_info\" });\n\n const balance = accountInfo.result.account_data.Balance;\n\n return [AssetValue.from({ chain: Chain.Ripple, fromBaseDecimal: BaseDecimal[Chain.Ripple], value: balance })];\n } catch (error) {\n // empty account\n if ((error as any).data.error_code === RIPPLE_ERROR_CODES.ACCOUNT_NOT_FOUND) {\n return [AssetValue.from({ chain: Chain.Ripple, value: 0 })];\n }\n throw new SwapKitError(\"toolbox_ripple_get_balance_error\", { info: { address: addr, error } });\n }\n };\n\n const estimateTransactionFee = async () => {\n const feeResponse = await client.request({ command: \"fee\" });\n const feeDrops = feeResponse.result.drops.open_ledger_fee; // Fee in drops\n\n return AssetValue.from({\n chain: Chain.Ripple,\n value: SwapKitNumber.fromBigInt(BigInt(feeDrops), BaseDecimal[Chain.Ripple]),\n });\n };\n\n const createTransaction = async ({\n assetValue,\n recipient,\n memo,\n sender,\n }: {\n assetValue: AssetValue;\n recipient: string;\n sender?: string;\n memo?: string;\n }) => {\n if (!rippleValidateAddress(recipient)) {\n throw new SwapKitError({ errorKey: \"core_transaction_invalid_recipient_address\" });\n }\n\n const senderAddress = sender || (await getAddress());\n\n if (!assetValue.isGasAsset || assetValue.chain !== Chain.Ripple) {\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_asset_not_supported\",\n info: { asset: assetValue.toString() },\n });\n }\n\n const transaction: Payment = {\n Account: senderAddress,\n Amount: xrpToDrops(assetValue.getValue(\"string\")),\n Destination: recipient,\n TransactionType: \"Payment\",\n };\n\n if (memo) {\n transaction.Memos = [{ Memo: { MemoData: Buffer.from(memo).toString(\"hex\") } }];\n }\n\n const preparedTx = await client.autofill(transaction);\n return preparedTx;\n };\n\n const signTransaction = (tx: Transaction) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n return signer.signTransaction(tx);\n };\n\n const broadcastTransaction = async (signedTxHex: string) => {\n const submitResult = await client.submitAndWait(signedTxHex);\n const result = submitResult.result;\n\n if (result.validated) {\n return result.hash;\n }\n\n throw new SwapKitError({ errorKey: \"toolbox_ripple_broadcast_error\", info: { chain: Chain.Ripple } });\n };\n\n const transfer = async (params: GenericTransferParams) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n const sender = await signer.getAddress();\n const tx = await createTransaction({ ...params, sender });\n const signedTx = await signTransaction(tx);\n return broadcastTransaction(signedTx.tx_blob);\n };\n\n const disconnect = () => client.disconnect();\n\n return {\n broadcastTransaction,\n createSigner, // Expose the helper\n createTransaction,\n disconnect,\n estimateTransactionFee,\n // Core methods\n getAddress,\n getBalance,\n // Signer related\n signer, // Expose the signer instance if created/provided\n signTransaction,\n transfer,\n validateAddress: rippleValidateAddress,\n };\n};\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "226302CD3BBBBF9F64756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "D3152E07171F963064756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,4 +1,4 @@
1
- var B=Object.create;var{getPrototypeOf:P,defineProperty:$,getOwnPropertyNames:U}=Object;var b=Object.prototype.hasOwnProperty;var o=(j,q,y)=>{y=j!=null?B(P(j)):{};let G=q||!j||!j.__esModule?$(y,"default",{value:j,enumerable:!0}):y;for(let Y of U(j))if(!b.call(G,Y))$(G,Y,{get:()=>j[Y],enumerable:!0});return G};var D=(j,q)=>{for(var y in q)$(j,y,{get:q[y],enumerable:!0,configurable:!0,set:(G)=>q[y]=()=>G})};var R=(j,q)=>()=>(j&&(q=j(j=0)),q);var d=((j)=>typeof require!=="undefined"?require:typeof Proxy!=="undefined"?new Proxy(j,{get:(q,y)=>(typeof require!=="undefined"?require:q)[y]}):j)(function(j){if(typeof require!=="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+j+'" is not supported')});var V={};D(V,{rippleValidateAddress:()=>v,hashes:()=>x,getRippleToolbox:()=>u});import{AssetValue as k,BaseDecimal as W,Chain as Q,SwapKitError as X,SwapKitNumber as K,getRPCUrl as A}from"@swapkit/helpers";import{Client as T,Wallet as w,isValidAddress as S,xrpToDrops as C}from"xrpl";import{hashes as x}from"xrpl";function f(j){let q=w.fromMnemonic(j);return{getAddress:()=>Promise.resolve(q.address),signTransaction:(y)=>Promise.resolve(q.sign(y))}}function v(j){return S(j)}var E,u=async(j={})=>{let q="signer"in j&&j.signer?j.signer:("phrase"in j)&&j.phrase?f(j.phrase):void 0,y=await A(Q.Ripple);if(!y)throw new X({errorKey:"toolbox_ripple_rpc_not_configured",info:{chain:Q.Ripple}});let G=new T(y);await G.connect();let Y=()=>{if(!q)throw new X({errorKey:"toolbox_ripple_signer_not_found"});return q.getAddress()},H=async(z)=>{let M=z||await Y();try{let Z=(await G.request({command:"account_info",account:M})).result.account_data.Balance;return[k.from({chain:Q.Ripple,value:Z,fromBaseDecimal:W[Q.Ripple]})]}catch(J){if(J.data.error_code===E.ACCOUNT_NOT_FOUND)return[k.from({chain:Q.Ripple,value:0})];throw new X("toolbox_ripple_get_balance_error",{info:{address:M,error:J}})}},O=async()=>{let M=(await G.request({command:"fee"})).result.drops.open_ledger_fee;return k.from({chain:Q.Ripple,value:K.fromBigInt(BigInt(M),W[Q.Ripple])})},F=async({assetValue:z,recipient:M,memo:J,sender:Z})=>{if(!v(M))throw new X({errorKey:"core_transaction_invalid_recipient_address"});let _=Z||await Y();if(!z.isGasAsset||z.chain!==Q.Ripple)throw new X({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:z.toString()}});let N={TransactionType:"Payment",Account:_,Amount:C(z.getValue("string")),Destination:M};if(J)N.Memos=[{Memo:{MemoData:Buffer.from(J).toString("hex")}}];return await G.autofill(N)},I=(z)=>{if(!q)throw new X({errorKey:"toolbox_ripple_signer_not_found"});return q.signTransaction(z)},L=async(z)=>{let J=(await G.submitAndWait(z)).result;if(J.validated)return J.hash;throw new X({errorKey:"toolbox_ripple_broadcast_error",info:{chain:Q.Ripple}})};return{signer:q,createSigner:f,getAddress:Y,validateAddress:v,getBalance:H,createTransaction:F,signTransaction:I,broadcastTransaction:L,transfer:async(z)=>{if(!q)throw new X({errorKey:"toolbox_ripple_signer_not_found"});let M=await q.getAddress(),J=await F({...z,sender:M}),Z=await I(J);return L(Z.tx_blob)},estimateTransactionFee:O,disconnect:()=>G.disconnect()}};var h=R(()=>{E={ACCOUNT_NOT_FOUND:19}});h();export{v as rippleValidateAddress,x as hashes,u as getRippleToolbox};
1
+ var B=Object.create;var{getPrototypeOf:P,defineProperty:$,getOwnPropertyNames:U}=Object;var b=Object.prototype.hasOwnProperty;var c=(j,q,y)=>{y=j!=null?B(P(j)):{};let G=q||!j||!j.__esModule?$(y,"default",{value:j,enumerable:!0}):y;for(let Y of U(j))if(!b.call(G,Y))$(G,Y,{get:()=>j[Y],enumerable:!0});return G};var D=(j,q)=>{for(var y in q)$(j,y,{get:q[y],enumerable:!0,configurable:!0,set:(G)=>q[y]=()=>G})};var R=(j,q)=>()=>(j&&(q=j(j=0)),q);var d=((j)=>typeof require!=="undefined"?require:typeof Proxy!=="undefined"?new Proxy(j,{get:(q,y)=>(typeof require!=="undefined"?require:q)[y]}):j)(function(j){if(typeof require!=="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+j+'" is not supported')});var u={};D(u,{rippleValidateAddress:()=>v,hashes:()=>x,getRippleToolbox:()=>h});import{AssetValue as k,BaseDecimal as W,Chain as Q,getRPCUrl as K,SwapKitError as X,SwapKitNumber as A}from"@swapkit/helpers";import{Client as T,isValidAddress as w,Wallet as C,xrpToDrops as E}from"xrpl";import{hashes as x}from"xrpl";function f(j){let q=C.fromMnemonic(j);return{getAddress:()=>Promise.resolve(q.address),signTransaction:(y)=>Promise.resolve(q.sign(y))}}function v(j){return w(j)}var S,h=async(j={})=>{let q="signer"in j&&j.signer?j.signer:("phrase"in j)&&j.phrase?f(j.phrase):void 0,y=await K(Q.Ripple);if(!y)throw new X({errorKey:"toolbox_ripple_rpc_not_configured",info:{chain:Q.Ripple}});let G=new T(y);await G.connect();let Y=()=>{if(!q)throw new X({errorKey:"toolbox_ripple_signer_not_found"});return q.getAddress()},H=async(z)=>{let M=z||await Y();try{let Z=(await G.request({account:M,command:"account_info"})).result.account_data.Balance;return[k.from({chain:Q.Ripple,fromBaseDecimal:W[Q.Ripple],value:Z})]}catch(J){if(J.data.error_code===S.ACCOUNT_NOT_FOUND)return[k.from({chain:Q.Ripple,value:0})];throw new X("toolbox_ripple_get_balance_error",{info:{address:M,error:J}})}},O=async()=>{let M=(await G.request({command:"fee"})).result.drops.open_ledger_fee;return k.from({chain:Q.Ripple,value:A.fromBigInt(BigInt(M),W[Q.Ripple])})},F=async({assetValue:z,recipient:M,memo:J,sender:Z})=>{if(!v(M))throw new X({errorKey:"core_transaction_invalid_recipient_address"});let _=Z||await Y();if(!z.isGasAsset||z.chain!==Q.Ripple)throw new X({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:z.toString()}});let N={Account:_,Amount:E(z.getValue("string")),Destination:M,TransactionType:"Payment"};if(J)N.Memos=[{Memo:{MemoData:Buffer.from(J).toString("hex")}}];return await G.autofill(N)},I=(z)=>{if(!q)throw new X({errorKey:"toolbox_ripple_signer_not_found"});return q.signTransaction(z)},L=async(z)=>{let J=(await G.submitAndWait(z)).result;if(J.validated)return J.hash;throw new X({errorKey:"toolbox_ripple_broadcast_error",info:{chain:Q.Ripple}})};return{broadcastTransaction:L,createSigner:f,createTransaction:F,disconnect:()=>G.disconnect(),estimateTransactionFee:O,getAddress:Y,getBalance:H,signer:q,signTransaction:I,transfer:async(z)=>{if(!q)throw new X({errorKey:"toolbox_ripple_signer_not_found"});let M=await q.getAddress(),J=await F({...z,sender:M}),Z=await I(J);return L(Z.tx_blob)},validateAddress:v}};var V=R(()=>{S={ACCOUNT_NOT_FOUND:19}});V();export{v as rippleValidateAddress,x as hashes,h as getRippleToolbox};
2
2
 
3
- //# debugId=3842384B85DF292064756E2164756E21
3
+ //# debugId=4B244F77EB7D4CEB64756E2164756E21
4
4
  //# sourceMappingURL=index.js.map
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/ripple/index.ts"],
4
4
  "sourcesContent": [
5
- "import {\n AssetValue,\n BaseDecimal,\n Chain,\n type ChainSigner,\n type GenericTransferParams,\n SwapKitError,\n SwapKitNumber,\n getRPCUrl,\n} from \"@swapkit/helpers\";\nimport type { Transaction } from \"xrpl\";\nimport { Client, type Payment, Wallet, isValidAddress, xrpToDrops } from \"xrpl\";\n\nexport type RippleWallet = Awaited<ReturnType<typeof getRippleToolbox>>;\n\nexport { hashes, type Transaction } from \"xrpl\";\n\nconst RIPPLE_ERROR_CODES = {\n ACCOUNT_NOT_FOUND: 19,\n} as const;\n\n// Note: Ripple seeds generate a single address, no derivation path/index support.\nfunction createSigner(phrase: string): ChainSigner<Transaction, { tx_blob: string; hash: string }> {\n const wallet = Wallet.fromMnemonic(phrase);\n return {\n // publicKey: wallet.publicKey,\n // Address is sync, but interface requires async\n getAddress: () => Promise.resolve(wallet.address),\n // Signing is sync, but interface requires async\n signTransaction: (tx: Transaction) => Promise.resolve(wallet.sign(tx as Transaction)), // Cast needed as Wallet.sign expects Transaction\n };\n}\n\nexport function rippleValidateAddress(address: string) {\n return isValidAddress(address);\n}\n\ntype RippleToolboxParams =\n | { phrase: string }\n | { signer: ChainSigner<Transaction, { tx_blob: string; hash: string }> }\n | {};\n\nexport const getRippleToolbox = async (params: RippleToolboxParams = {}) => {\n const signer =\n \"signer\" in params && params.signer\n ? params.signer\n : \"phrase\" in params && params.phrase\n ? createSigner(params.phrase)\n : undefined;\n\n const rpcUrl = await getRPCUrl(Chain.Ripple);\n if (!rpcUrl) {\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_rpc_not_configured\",\n info: { chain: Chain.Ripple },\n });\n }\n\n const client = new Client(rpcUrl);\n await client.connect();\n\n const getAddress = () => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n return signer.getAddress();\n };\n\n const getBalance = async (address?: string) => {\n const addr = address || (await getAddress());\n\n try {\n const accountInfo = await client.request({ command: \"account_info\", account: addr });\n\n const balance = accountInfo.result.account_data.Balance;\n\n return [\n AssetValue.from({\n chain: Chain.Ripple,\n value: balance,\n fromBaseDecimal: BaseDecimal[Chain.Ripple],\n }),\n ];\n } catch (error) {\n // empty account\n if ((error as any).data.error_code === RIPPLE_ERROR_CODES.ACCOUNT_NOT_FOUND) {\n return [\n AssetValue.from({\n chain: Chain.Ripple,\n value: 0,\n }),\n ];\n }\n throw new SwapKitError(\"toolbox_ripple_get_balance_error\", {\n info: { address: addr, error },\n });\n }\n };\n\n const estimateTransactionFee = async () => {\n const feeResponse = await client.request({ command: \"fee\" });\n const feeDrops = feeResponse.result.drops.open_ledger_fee; // Fee in drops\n\n return AssetValue.from({\n chain: Chain.Ripple,\n value: SwapKitNumber.fromBigInt(BigInt(feeDrops), BaseDecimal[Chain.Ripple]),\n });\n };\n\n const createTransaction = async ({\n assetValue,\n recipient,\n memo,\n sender,\n }: { assetValue: AssetValue; recipient: string; sender?: string; memo?: string }) => {\n if (!rippleValidateAddress(recipient)) {\n throw new SwapKitError({ errorKey: \"core_transaction_invalid_recipient_address\" });\n }\n\n const senderAddress = sender || (await getAddress());\n\n if (!assetValue.isGasAsset || assetValue.chain !== Chain.Ripple) {\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_asset_not_supported\",\n info: { asset: assetValue.toString() },\n });\n }\n\n const transaction: Payment = {\n TransactionType: \"Payment\",\n Account: senderAddress,\n Amount: xrpToDrops(assetValue.getValue(\"string\")),\n Destination: recipient,\n };\n\n if (memo) {\n transaction.Memos = [{ Memo: { MemoData: Buffer.from(memo).toString(\"hex\") } }];\n }\n\n const preparedTx = await client.autofill(transaction);\n return preparedTx;\n };\n\n const signTransaction = (tx: Transaction) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n return signer.signTransaction(tx);\n };\n\n const broadcastTransaction = async (signedTxHex: string) => {\n const submitResult = await client.submitAndWait(signedTxHex);\n const result = submitResult.result;\n\n if (result.validated) {\n return result.hash;\n }\n\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_broadcast_error\",\n info: { chain: Chain.Ripple },\n });\n };\n\n const transfer = async (params: GenericTransferParams) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n const sender = await signer.getAddress();\n const tx = await createTransaction({ ...params, sender });\n const signedTx = await signTransaction(tx);\n return broadcastTransaction(signedTx.tx_blob);\n };\n\n const disconnect = () => client.disconnect();\n\n return {\n // Signer related\n signer, // Expose the signer instance if created/provided\n createSigner, // Expose the helper\n // Core methods\n getAddress,\n validateAddress: rippleValidateAddress,\n getBalance,\n createTransaction,\n signTransaction,\n broadcastTransaction,\n transfer,\n estimateTransactionFee,\n disconnect,\n };\n};\n"
5
+ "import {\n AssetValue,\n BaseDecimal,\n Chain,\n type ChainSigner,\n type GenericTransferParams,\n getRPCUrl,\n SwapKitError,\n SwapKitNumber,\n} from \"@swapkit/helpers\";\nimport type { Transaction } from \"xrpl\";\nimport { Client, isValidAddress, type Payment, Wallet, xrpToDrops } from \"xrpl\";\n\nexport type RippleWallet = Awaited<ReturnType<typeof getRippleToolbox>>;\n\nexport { hashes, type Transaction } from \"xrpl\";\n\nconst RIPPLE_ERROR_CODES = { ACCOUNT_NOT_FOUND: 19 } as const;\n\n// Note: Ripple seeds generate a single address, no derivation path/index support.\nfunction createSigner(phrase: string): ChainSigner<Transaction, { tx_blob: string; hash: string }> {\n const wallet = Wallet.fromMnemonic(phrase);\n return {\n // publicKey: wallet.publicKey,\n // Address is sync, but interface requires async\n getAddress: () => Promise.resolve(wallet.address),\n // Signing is sync, but interface requires async\n signTransaction: (tx: Transaction) => Promise.resolve(wallet.sign(tx as Transaction)), // Cast needed as Wallet.sign expects Transaction\n };\n}\n\nexport function rippleValidateAddress(address: string) {\n return isValidAddress(address);\n}\n\ntype RippleToolboxParams =\n | { phrase: string }\n | { signer: ChainSigner<Transaction, { tx_blob: string; hash: string }> }\n | {};\n\nexport const getRippleToolbox = async (params: RippleToolboxParams = {}) => {\n const signer =\n \"signer\" in params && params.signer\n ? params.signer\n : \"phrase\" in params && params.phrase\n ? createSigner(params.phrase)\n : undefined;\n\n const rpcUrl = await getRPCUrl(Chain.Ripple);\n if (!rpcUrl) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_rpc_not_configured\", info: { chain: Chain.Ripple } });\n }\n\n const client = new Client(rpcUrl);\n await client.connect();\n\n const getAddress = () => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n return signer.getAddress();\n };\n\n const getBalance = async (address?: string) => {\n const addr = address || (await getAddress());\n\n try {\n const accountInfo = await client.request({ account: addr, command: \"account_info\" });\n\n const balance = accountInfo.result.account_data.Balance;\n\n return [AssetValue.from({ chain: Chain.Ripple, fromBaseDecimal: BaseDecimal[Chain.Ripple], value: balance })];\n } catch (error) {\n // empty account\n if ((error as any).data.error_code === RIPPLE_ERROR_CODES.ACCOUNT_NOT_FOUND) {\n return [AssetValue.from({ chain: Chain.Ripple, value: 0 })];\n }\n throw new SwapKitError(\"toolbox_ripple_get_balance_error\", { info: { address: addr, error } });\n }\n };\n\n const estimateTransactionFee = async () => {\n const feeResponse = await client.request({ command: \"fee\" });\n const feeDrops = feeResponse.result.drops.open_ledger_fee; // Fee in drops\n\n return AssetValue.from({\n chain: Chain.Ripple,\n value: SwapKitNumber.fromBigInt(BigInt(feeDrops), BaseDecimal[Chain.Ripple]),\n });\n };\n\n const createTransaction = async ({\n assetValue,\n recipient,\n memo,\n sender,\n }: {\n assetValue: AssetValue;\n recipient: string;\n sender?: string;\n memo?: string;\n }) => {\n if (!rippleValidateAddress(recipient)) {\n throw new SwapKitError({ errorKey: \"core_transaction_invalid_recipient_address\" });\n }\n\n const senderAddress = sender || (await getAddress());\n\n if (!assetValue.isGasAsset || assetValue.chain !== Chain.Ripple) {\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_asset_not_supported\",\n info: { asset: assetValue.toString() },\n });\n }\n\n const transaction: Payment = {\n Account: senderAddress,\n Amount: xrpToDrops(assetValue.getValue(\"string\")),\n Destination: recipient,\n TransactionType: \"Payment\",\n };\n\n if (memo) {\n transaction.Memos = [{ Memo: { MemoData: Buffer.from(memo).toString(\"hex\") } }];\n }\n\n const preparedTx = await client.autofill(transaction);\n return preparedTx;\n };\n\n const signTransaction = (tx: Transaction) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n return signer.signTransaction(tx);\n };\n\n const broadcastTransaction = async (signedTxHex: string) => {\n const submitResult = await client.submitAndWait(signedTxHex);\n const result = submitResult.result;\n\n if (result.validated) {\n return result.hash;\n }\n\n throw new SwapKitError({ errorKey: \"toolbox_ripple_broadcast_error\", info: { chain: Chain.Ripple } });\n };\n\n const transfer = async (params: GenericTransferParams) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n const sender = await signer.getAddress();\n const tx = await createTransaction({ ...params, sender });\n const signedTx = await signTransaction(tx);\n return broadcastTransaction(signedTx.tx_blob);\n };\n\n const disconnect = () => client.disconnect();\n\n return {\n broadcastTransaction,\n createSigner, // Expose the helper\n createTransaction,\n disconnect,\n estimateTransactionFee,\n // Core methods\n getAddress,\n getBalance,\n // Signer related\n signer, // Expose the signer instance if created/provided\n signTransaction,\n transfer,\n validateAddress: rippleValidateAddress,\n };\n};\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "3842384B85DF292064756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "4B244F77EB7D4CEB64756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,4 +1,4 @@
1
- var Z=Object.create;var{getPrototypeOf:_,defineProperty:M,getOwnPropertyNames:B,getOwnPropertyDescriptor:$}=Object,F=Object.prototype.hasOwnProperty;var f=(a,T,l)=>{l=a!=null?Z(_(a)):{};let o=T||!a||!a.__esModule?M(l,"default",{value:a,enumerable:!0}):l;for(let y of B(a))if(!F.call(o,y))M(o,y,{get:()=>a[y],enumerable:!0});return o},z=new WeakMap,v=(a)=>{var T=z.get(a),l;if(T)return T;if(T=M({},"__esModule",{value:!0}),a&&typeof a==="object"||typeof a==="function")B(a).map((o)=>!F.call(T,o)&&M(T,o,{get:()=>a[o],enumerable:!(l=$(a,o))||l.enumerable}));return z.set(a,T),T};var I=(a,T)=>{for(var l in T)M(a,l,{get:T[l],enumerable:!0,configurable:!0,set:(o)=>T[l]=()=>o})};var J=(a,T)=>()=>(a&&(T=a(a=0)),T);async function H(a){try{let T=await fetch(`https://lite-api.jup.ag/tokens/v1/token/${a}`);if(!T.ok)return null;return await T.json()}catch{return null}}async function K(a){let T=await h(),{PublicKey:l}=await import("@solana/web3.js"),{TOKEN_PROGRAM_ID:o}=await import("@solana/spl-token"),y=new l(a),P=[],S=await T.getBalance(y);if(S>0)P.push(p.AssetValue.from({chain:p.Chain.Solana,value:S,fromBaseDecimal:p.BaseDecimal[p.Chain.Solana]}));let x=await T.getParsedTokenAccountsByOwner(y,{programId:o});for(let{account:m}of x.value){let b=m.data.parsed.info,O=b.mint,R=b.tokenAmount.amount;if(Number(R)===0)continue;let G=await H(O),q=G?.symbol||"UNKNOWN",w=G?.decimals||b.tokenAmount.decimals;P.push(p.AssetValue.from({asset:`${p.Chain.Solana}.${q}-${O}`,value:R,fromBaseDecimal:w}))}return P}async function A(){let{PublicKey:a}=await import("@solana/web3.js");return(T)=>{try{let l=new a(T);return a.isOnCurve(l.toBytes())}catch(l){return!1}}}async function D(a){let T=a&&"index"in a?a.index||0:0,l=p.derivationPathToString(a&&"derivationPath"in a&&a.derivationPath?a.derivationPath:p.updateDerivationPath(p.NetworkDerivationPath[p.Chain.Solana],{index:T})),o=await Q.match(a).with({phrase:W.P.string},({phrase:P})=>u({phrase:P,derivationPath:l})).with({signer:W.P.any},({signer:P})=>P).otherwise(()=>{return});function y(){return o?.publicKey?N(o.publicKey):""}return{getConnection:h,getAddress:y,createKeysForPath:u,getAddressFromPubKey:N,getPubkeyFromAddress:U,createTransaction:L(h),createTransactionFromInstructions:n,getBalance:(P)=>{let S=P||y();if(!S)throw new p.SwapKitError("core_wallet_connection_not_found");return K(S)},transfer:t(h,o),broadcastTransaction:j(h),getAddressValidator:A,signTransaction:r(h,o),estimateTransactionFee:k(h)}}function k(a){return async({recipient:T,assetValue:l,memo:o,isProgramDerivedAddress:y,sender:P})=>{let S=await a(),m=(await L(a)({recipient:T,assetValue:l,memo:o,isProgramDerivedAddress:y,sender:P})).compileMessage(),b=await S.getFeeForMessage(m);if(b.value===null)throw new p.SwapKitError("toolbox_solana_fee_estimation_failed","Could not estimate Solana fee.");return p.AssetValue.from({chain:p.Chain.Solana,value:b.value,fromBaseDecimal:p.BaseDecimal[p.Chain.Solana]})}}async function h(){let{Connection:a}=await import("@solana/web3.js"),T=await p.getRPCUrl(p.Chain.Solana);return new a(T,"confirmed")}function s(a){return async({assetValue:T,recipient:l,sender:o,isProgramDerivedAddress:y})=>{let P=await a(),S=await U(o);if(T.isGasAsset){let{Transaction:x,SystemProgram:m,PublicKey:b}=await import("@solana/web3.js");return new x().add(m.transfer({fromPubkey:S,lamports:T.getBaseValue("number"),toPubkey:new b(l)}))}if(T.address)return C({amount:T.getBaseValue("number"),connection:P,decimals:T.decimal,from:S,recipient:l,tokenAddress:T.address,isProgramDerivedAddress:y});return}}async function C({tokenAddress:a,recipient:T,from:l,connection:o,amount:y,decimals:P,isProgramDerivedAddress:S}){let{getAssociatedTokenAddress:x,getAccount:m,createAssociatedTokenAccountInstruction:b,createTransferCheckedInstruction:O}=await import("@solana/spl-token"),{Transaction:R,PublicKey:G}=await import("@solana/web3.js"),q=new R,w=new G(a),Y=await x(w,l),V=new G(T),E=await x(w,V,S),d=!1;try{await m(o,E),d=!0}catch(e){}if(!d)q.add(b(l,E,V,w));return q.add(O(Y,w,E,l,y,P)),q}function L(a){return async({recipient:T,assetValue:l,memo:o,isProgramDerivedAddress:y,sender:P})=>{let{createMemoInstruction:S}=await import("@solana/spl-memo"),x=await U(P),m=await A();if(!(y||m(T)))throw new p.SwapKitError("core_transaction_invalid_recipient_address");let b=await a(),O=await s(a)({assetValue:l,recipient:T,sender:P,isProgramDerivedAddress:y});if(!O)throw new p.SwapKitError("core_transaction_invalid_sender_address");if(o)O.add(S(o));let R=await b.getLatestBlockhash();return O.recentBlockhash=R.blockhash,O.feePayer=x,O}}async function n({instructions:a}){let{Transaction:T}=await import("@solana/web3.js"),l=new T().add(...a);if(!l)throw new p.SwapKitError("core_transaction_invalid_sender_address");return l}function t(a,T){return async({recipient:l,assetValue:o,memo:y,isProgramDerivedAddress:P})=>{if(!T)throw new p.SwapKitError("core_transaction_invalid_sender_address");let S=T.publicKey?.toString()??(await T.connect()).publicKey.toString(),x=await L(a)({recipient:l,assetValue:o,memo:y,isProgramDerivedAddress:P,sender:S});if("connect"in T){let m=await T.signTransaction(x);return j(a)(m)}return x.sign(T),j(a)(x)}}function j(a){return async(T)=>{return(await a()).sendRawTransaction(T.serialize())}}function r(a,T){return async(l)=>{let{VersionedTransaction:o}=await import("@solana/web3.js");if(!T)throw new p.SwapKitError("toolbox_solana_no_signer");if(!(l instanceof o)){let P=await(await a()).getLatestBlockhash();l.recentBlockhash=P.blockhash,l.feePayer=T.publicKey||void 0}if("connect"in T)return await T.signTransaction(l);return await l.sign([T]),l}}async function u({phrase:a,derivationPath:T=p.DerivationPath.SOL}){let{HDKey:l}=await import("micro-key-producer/slip10.js"),{mnemonicToSeedSync:o}=await import("@scure/bip39"),{Keypair:y}=await import("@solana/web3.js"),P=o(a),S=l.fromMasterSeed(P);return y.fromSeed(S.derive(T,!0).privateKey)}function N(a){return a.toString()}async function U(a){let{PublicKey:T}=await import("@solana/web3.js");return new T(a)}var p,W,Q;var X=J(()=>{p=require("@swapkit/helpers"),W=require("ts-pattern"),Q=require("ts-pattern")});var c={};I(c,{getSolanaToolbox:()=>D,getSolanaAddressValidator:()=>A,createKeysForPath:()=>u});module.exports=v(c);var g=J(()=>{X()});g();
1
+ var Y=Object.create;var{getPrototypeOf:Z,defineProperty:M,getOwnPropertyNames:B,getOwnPropertyDescriptor:_}=Object,F=Object.prototype.hasOwnProperty;var f=(a,T,l)=>{l=a!=null?Y(Z(a)):{};let o=T||!a||!a.__esModule?M(l,"default",{value:a,enumerable:!0}):l;for(let y of B(a))if(!F.call(o,y))M(o,y,{get:()=>a[y],enumerable:!0});return o},z=new WeakMap,$=(a)=>{var T=z.get(a),l;if(T)return T;if(T=M({},"__esModule",{value:!0}),a&&typeof a==="object"||typeof a==="function")B(a).map((o)=>!F.call(T,o)&&M(T,o,{get:()=>a[o],enumerable:!(l=_(a,o))||l.enumerable}));return z.set(a,T),T};var v=(a,T)=>{for(var l in T)M(a,l,{get:T[l],enumerable:!0,configurable:!0,set:(o)=>T[l]=()=>o})};var J=(a,T)=>()=>(a&&(T=a(a=0)),T);async function I(a){try{let T=await fetch(`https://lite-api.jup.ag/tokens/v1/token/${a}`);if(!T.ok)return null;return await T.json()}catch{return null}}async function H(a){let T=await h(),{PublicKey:l}=await import("@solana/web3.js"),{TOKEN_PROGRAM_ID:o}=await import("@solana/spl-token"),y=new l(a),P=[],S=await T.getBalance(y);if(S>0)P.push(p.AssetValue.from({chain:p.Chain.Solana,fromBaseDecimal:p.BaseDecimal[p.Chain.Solana],value:S}));let x=await T.getParsedTokenAccountsByOwner(y,{programId:o});for(let{account:m}of x.value){let b=m.data.parsed.info,O=b.mint,R=b.tokenAmount.amount;if(Number(R)===0)continue;let G=await I(O),q=G?.symbol||"UNKNOWN",w=G?.decimals||b.tokenAmount.decimals;P.push(p.AssetValue.from({asset:`${p.Chain.Solana}.${q}-${O}`,fromBaseDecimal:w,value:R}))}return P}async function A(){let{PublicKey:a}=await import("@solana/web3.js");return(T)=>{try{let l=new a(T);return a.isOnCurve(l.toBytes())}catch(l){return!1}}}async function K(a){let T=a&&"index"in a?a.index||0:0,l=p.derivationPathToString(a&&"derivationPath"in a&&a.derivationPath?a.derivationPath:p.updateDerivationPath(p.NetworkDerivationPath[p.Chain.Solana],{index:T})),o=await E.match(a).with({phrase:E.P.string},({phrase:P})=>u({derivationPath:l,phrase:P})).with({signer:E.P.any},({signer:P})=>P).otherwise(()=>{return});function y(){return o?.publicKey?N(o.publicKey):""}return{broadcastTransaction:j(h),createKeysForPath:u,createTransaction:L(h),createTransactionFromInstructions:C,estimateTransactionFee:D(h),getAddress:y,getAddressFromPubKey:N,getAddressValidator:A,getBalance:(P)=>{let S=P||y();if(!S)throw new p.SwapKitError("core_wallet_connection_not_found");return H(S)},getConnection:h,getPubkeyFromAddress:U,signTransaction:t(h,o),transfer:n(h,o)}}function D(a){return async({recipient:T,assetValue:l,memo:o,isProgramDerivedAddress:y,sender:P})=>{let S=await a(),m=(await L(a)({assetValue:l,isProgramDerivedAddress:y,memo:o,recipient:T,sender:P})).compileMessage(),b=await S.getFeeForMessage(m);if(b.value===null)throw new p.SwapKitError("toolbox_solana_fee_estimation_failed","Could not estimate Solana fee.");return p.AssetValue.from({chain:p.Chain.Solana,fromBaseDecimal:p.BaseDecimal[p.Chain.Solana],value:b.value})}}async function h(){let{Connection:a}=await import("@solana/web3.js"),T=await p.getRPCUrl(p.Chain.Solana);return new a(T,"confirmed")}function k(a){return async({assetValue:T,recipient:l,sender:o,isProgramDerivedAddress:y})=>{let P=await a(),S=await U(o);if(T.isGasAsset){let{Transaction:x,SystemProgram:m,PublicKey:b}=await import("@solana/web3.js");return new x().add(m.transfer({fromPubkey:S,lamports:T.getBaseValue("number"),toPubkey:new b(l)}))}if(T.address)return s({amount:T.getBaseValue("number"),connection:P,decimals:T.decimal,from:S,isProgramDerivedAddress:y,recipient:l,tokenAddress:T.address});return}}async function s({tokenAddress:a,recipient:T,from:l,connection:o,amount:y,decimals:P,isProgramDerivedAddress:S}){let{getAssociatedTokenAddress:x,getAccount:m,createAssociatedTokenAccountInstruction:b,createTransferCheckedInstruction:O}=await import("@solana/spl-token"),{Transaction:R,PublicKey:G}=await import("@solana/web3.js"),q=new R,w=new G(a),X=await x(w,l),V=new G(T),W=await x(w,V,S),d=!1;try{await m(o,W),d=!0}catch(g){}if(!d)q.add(b(l,W,V,w));return q.add(O(X,w,W,l,y,P)),q}function L(a){return async({recipient:T,assetValue:l,memo:o,isProgramDerivedAddress:y,sender:P})=>{let{createMemoInstruction:S}=await import("@solana/spl-memo"),x=await U(P),m=await A();if(!(y||m(T)))throw new p.SwapKitError("core_transaction_invalid_recipient_address");let b=await a(),O=await k(a)({assetValue:l,isProgramDerivedAddress:y,recipient:T,sender:P});if(!O)throw new p.SwapKitError("core_transaction_invalid_sender_address");if(o)O.add(S(o));let R=await b.getLatestBlockhash();return O.recentBlockhash=R.blockhash,O.feePayer=x,O}}async function C({instructions:a}){let{Transaction:T}=await import("@solana/web3.js"),l=new T().add(...a);if(!l)throw new p.SwapKitError("core_transaction_invalid_sender_address");return l}function n(a,T){return async({recipient:l,assetValue:o,memo:y,isProgramDerivedAddress:P})=>{if(!T)throw new p.SwapKitError("core_transaction_invalid_sender_address");let S=T.publicKey?.toString()??(await T.connect()).publicKey.toString(),x=await L(a)({assetValue:o,isProgramDerivedAddress:P,memo:y,recipient:l,sender:S});if("connect"in T){let m=await T.signTransaction(x);return j(a)(m)}return x.sign(T),j(a)(x)}}function j(a){return async(T)=>{return(await a()).sendRawTransaction(T.serialize())}}function t(a,T){return async(l)=>{let{VersionedTransaction:o}=await import("@solana/web3.js");if(!T)throw new p.SwapKitError("toolbox_solana_no_signer");if(!(l instanceof o)){let P=await(await a()).getLatestBlockhash();l.recentBlockhash=P.blockhash,l.feePayer=T.publicKey||void 0}if("connect"in T)return await T.signTransaction(l);return await l.sign([T]),l}}async function u({phrase:a,derivationPath:T=p.DerivationPath.SOL}){let{HDKey:l}=await import("micro-key-producer/slip10.js"),{mnemonicToSeedSync:o}=await import("@scure/bip39"),{Keypair:y}=await import("@solana/web3.js"),P=o(a),S=l.fromMasterSeed(P);return y.fromSeed(S.derive(T,!0).privateKey)}function N(a){return a.toString()}async function U(a){let{PublicKey:T}=await import("@solana/web3.js");return new T(a)}var p,E;var Q=J(()=>{p=require("@swapkit/helpers"),E=require("ts-pattern")});var r={};v(r,{getSolanaToolbox:()=>K,getSolanaAddressValidator:()=>A,createKeysForPath:()=>u});module.exports=$(r);var c=J(()=>{Q()});c();
2
2
 
3
- //# debugId=78A49889F98A541664756E2164756E21
3
+ //# debugId=FD9ADAE54FF03AE364756E2164756E21
4
4
  //# sourceMappingURL=index.cjs.map