@swapkit/toolboxes 1.0.0-beta.0 → 1.0.0-beta.1

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 (103) hide show
  1. package/dist/chunk-0f0249b1.js +3 -0
  2. package/dist/chunk-0f0249b1.js.map +10 -0
  3. package/dist/chunk-0h4xdrwz.js +4 -0
  4. package/dist/chunk-0h4xdrwz.js.map +10 -0
  5. package/dist/chunk-4yap1fvd.js +3 -0
  6. package/dist/chunk-4yap1fvd.js.map +10 -0
  7. package/dist/chunk-fjfxga2v.js +3 -0
  8. package/dist/chunk-fjfxga2v.js.map +10 -0
  9. package/dist/{chunk-tvrdndbw.js → chunk-p1kdg37m.js} +2 -2
  10. package/dist/{chunk-tvrdndbw.js.map → chunk-p1kdg37m.js.map} +1 -1
  11. package/dist/cosmos/index.cjs +2 -2
  12. package/dist/cosmos/index.cjs.map +10 -13
  13. package/dist/cosmos/index.js +2 -2
  14. package/dist/cosmos/index.js.map +10 -13
  15. package/dist/evm/index.cjs +2 -2
  16. package/dist/evm/index.cjs.map +10 -16
  17. package/dist/evm/index.js +2 -2
  18. package/dist/evm/index.js.map +10 -16
  19. package/dist/index.cjs +2 -2
  20. package/dist/index.cjs.map +4 -3
  21. package/dist/index.js +2 -2
  22. package/dist/index.js.map +4 -3
  23. package/dist/radix/index.cjs +2 -2
  24. package/dist/radix/index.cjs.map +3 -3
  25. package/dist/radix/index.js +2 -2
  26. package/dist/radix/index.js.map +3 -3
  27. package/dist/ripple/index.cjs +3 -0
  28. package/dist/ripple/index.cjs.map +10 -0
  29. package/dist/ripple/index.js +3 -0
  30. package/dist/ripple/index.js.map +10 -0
  31. package/dist/solana/index.cjs +2 -2
  32. package/dist/solana/index.cjs.map +3 -3
  33. package/dist/solana/index.js +2 -2
  34. package/dist/solana/index.js.map +3 -3
  35. package/dist/substrate/index.cjs +2 -2
  36. package/dist/substrate/index.cjs.map +5 -6
  37. package/dist/substrate/index.js +2 -2
  38. package/dist/substrate/index.js.map +5 -6
  39. package/dist/utxo/index.cjs +2 -2
  40. package/dist/utxo/index.cjs.map +9 -11
  41. package/dist/utxo/index.js +2 -2
  42. package/dist/utxo/index.js.map +9 -11
  43. package/package.json +30 -24
  44. package/src/cosmos/index.ts +2 -9
  45. package/src/cosmos/thorchainUtils/addressFormat.ts +1 -2
  46. package/src/cosmos/thorchainUtils/index.ts +1 -1
  47. package/src/cosmos/thorchainUtils/messages.ts +74 -56
  48. package/src/cosmos/thorchainUtils/registry.ts +16 -23
  49. package/src/cosmos/thorchainUtils/types/{proto/MsgCompiled.ts → MsgCompiled.ts} +1 -3
  50. package/src/cosmos/thorchainUtils/types/client-types.ts +16 -23
  51. package/src/cosmos/toolbox/cosmos.ts +334 -0
  52. package/src/cosmos/toolbox/index.ts +33 -0
  53. package/src/cosmos/toolbox/thorchain.ts +118 -131
  54. package/src/cosmos/types.ts +37 -18
  55. package/src/cosmos/util.ts +21 -71
  56. package/src/evm/__tests__/ethereum.test.ts +110 -116
  57. package/src/evm/api.ts +11 -147
  58. package/src/evm/helpers.ts +111 -83
  59. package/src/evm/index.ts +1 -17
  60. package/src/evm/toolbox/baseEVMToolbox.ts +742 -0
  61. package/src/evm/toolbox/evm.ts +69 -0
  62. package/src/evm/toolbox/index.ts +36 -0
  63. package/src/evm/toolbox/op.ts +97 -143
  64. package/src/evm/types.ts +50 -28
  65. package/src/index.ts +235 -0
  66. package/src/radix/index.ts +18 -19
  67. package/src/ripple/index.ts +203 -0
  68. package/src/solana/index.ts +11 -5
  69. package/src/solana/toolbox.ts +223 -133
  70. package/src/substrate/index.ts +2 -3
  71. package/src/substrate/{toolbox/baseSubstrateToolbox.ts → substrate.ts} +104 -72
  72. package/src/substrate/types.ts +120 -0
  73. package/src/utils.ts +27 -0
  74. package/src/utxo/helpers/api.ts +27 -23
  75. package/src/utxo/helpers/bchaddrjs.ts +21 -21
  76. package/src/utxo/helpers/index.ts +0 -1
  77. package/src/utxo/helpers/txSize.ts +3 -4
  78. package/src/utxo/index.ts +3 -7
  79. package/src/utxo/toolbox/bitcoinCash.ts +164 -154
  80. package/src/utxo/toolbox/index.ts +63 -24
  81. package/src/utxo/toolbox/utxo.ts +376 -229
  82. package/src/utxo/types.ts +24 -39
  83. package/src/cosmos/thorchainUtils/types/proto/MsgCompiled.js +0 -2806
  84. package/src/cosmos/thorchainUtils/util.ts +0 -46
  85. package/src/cosmos/toolbox/BaseCosmosToolbox.ts +0 -254
  86. package/src/cosmos/toolbox/gaia.ts +0 -39
  87. package/src/cosmos/toolbox/getToolboxByChain.ts +0 -29
  88. package/src/cosmos/toolbox/kujira.ts +0 -61
  89. package/src/evm/provider.ts +0 -6
  90. package/src/evm/toolbox/EVMToolbox.ts +0 -662
  91. package/src/evm/toolbox/arb.ts +0 -61
  92. package/src/evm/toolbox/avax.ts +0 -36
  93. package/src/evm/toolbox/base.ts +0 -42
  94. package/src/evm/toolbox/bsc.ts +0 -34
  95. package/src/evm/toolbox/eth.ts +0 -44
  96. package/src/evm/toolbox/getToolboxByChain.ts +0 -42
  97. package/src/evm/toolbox/matic.ts +0 -42
  98. package/src/radix/toolbox.ts +0 -693
  99. package/src/substrate/toolbox/index.ts +0 -40
  100. package/src/substrate/types/index.ts +0 -2
  101. package/src/substrate/types/network.ts +0 -42
  102. package/src/substrate/types/wallet.ts +0 -78
  103. package/src/utxo/helpers/utils.ts +0 -45
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- import"./chunk-tvrdndbw.js";var c=void 0;export{c as default};
1
+ import{c as e,d as t}from"./chunk-p1kdg37m.js";import{AssetValue as y,Chain as o,FeeOption as C}from"@swapkit/helpers";async function f(){let{match:n}=await import("ts-pattern"),{cosmosValidateAddress:s}=await import("@swapkit/toolboxes/cosmos"),{evmValidateAddress:a}=await import("@swapkit/toolboxes/evm"),{substrateValidateAddress:i}=await import("@swapkit/toolboxes/substrate"),{getUTXOAddressValidator:l}=await import("@swapkit/toolboxes/utxo"),{getSolanaAddressValidator:c}=await import("@swapkit/toolboxes/solana"),{rippleValidateAddress:p}=await import("@swapkit/toolboxes/ripple"),{radixValidateAddress:x}=await import("@swapkit/toolboxes/radix"),m=await c(),b=await l();return function d({address:r,chain:T}){return n(T).with(o.Arbitrum,o.Avalanche,o.Optimism,o.BinanceSmartChain,o.Base,o.Polygon,o.Ethereum,()=>a({address:r})).with(o.Litecoin,o.Dash,o.Dogecoin,o.BitcoinCash,o.Bitcoin,()=>b({address:r,chain:T})).with(o.Cosmos,o.Kujira,o.Maya,o.THORChain,()=>s({address:r,chain:T})).with(o.Chainflip,o.Polkadot,()=>i({address:r,chain:T})).with(o.Radix,()=>x(r)).with(o.Ripple,()=>p(r)).with(o.Solana,()=>m(r)).otherwise(()=>!1)}}async function g(n){let s=await u(n);return async function a(i){switch(n){case o.Arbitrum:case o.Avalanche:case o.Optimism:case o.BinanceSmartChain:case o.Base:case o.Polygon:case o.Ethereum:{let l=await s.createTransaction(i);return s.estimateTransactionFee({...l,feeOption:i.feeOptionKey||C.Fast,chain:n})}case o.Bitcoin:case o.BitcoinCash:case o.Dogecoin:case o.Dash:case o.Litecoin:return s.estimateTransactionFee(i);case o.THORChain:case o.Maya:case o.Kujira:case o.Cosmos:{let{estimateTransactionFee:l}=await import("@swapkit/toolboxes/cosmos");return l(i)}case o.Polkadot:return s.estimateTransactionFee(i);case o.Solana:return s.estimateTransactionFee(i);default:return y.from({chain:n})}}}async function u(n,s){switch(n){case o.Arbitrum:case o.Avalanche:case o.Optimism:case o.BinanceSmartChain:case o.Base:case o.Polygon:case o.Ethereum:{let{getEvmToolbox:a}=await import("@swapkit/toolboxes/evm");return await a(n,s)}case o.Litecoin:case o.Dash:case o.Dogecoin:case o.BitcoinCash:case o.Bitcoin:{let{getUtxoToolbox:a}=await import("@swapkit/toolboxes/utxo");return await a(n,s)}case o.Cosmos:case o.Kujira:case o.Maya:case o.THORChain:{let{getCosmosToolbox:a}=await import("@swapkit/toolboxes/cosmos");return await a(n,s)}case o.Chainflip:case o.Polkadot:{let{getSubstrateToolbox:a}=await import("@swapkit/toolboxes/substrate");return await a(n,s)}case o.Radix:{let{RadixToolbox:a}=await import("@swapkit/toolboxes/radix");return await a(s)}case o.Ripple:{let{getRippleToolbox:a}=await import("@swapkit/toolboxes/ripple");return await a(s)}case o.Solana:{let{getSolanaToolbox:a}=await import("@swapkit/toolboxes/solana");return await a(s)}default:throw new Error(`Chain ${n} is not supported`)}}export{u as getToolbox,g as getFeeEstimator,f as getAddressValidator};
2
2
 
3
- //# debugId=6A33823FB1BB3FA564756E2164756E21
3
+ //# debugId=A2A0AE3092B0C04664756E2164756E21
package/dist/index.js.map CHANGED
@@ -1,9 +1,10 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": [],
3
+ "sources": ["../src/index.ts"],
4
4
  "sourcesContent": [
5
+ "import {\n AssetValue,\n Chain,\n type CosmosChain,\n type EVMChain,\n FeeOption,\n type GenericCreateTransactionParams,\n type SubstrateChain,\n type UTXOChain,\n} from \"@swapkit/helpers\";\nimport type { getCosmosToolbox } from \"@swapkit/toolboxes/cosmos\";\n\nimport type { ETHToolbox, EVMCreateTransactionParams, getEvmToolbox } from \"@swapkit/toolboxes/evm\";\nimport type { RadixToolbox } from \"@swapkit/toolboxes/radix\";\nimport type { getRippleToolbox } from \"@swapkit/toolboxes/ripple\";\nimport type { SolanaCreateTransactionParams, getSolanaToolbox } from \"@swapkit/toolboxes/solana\";\nimport type { getSubstrateToolbox } from \"@swapkit/toolboxes/substrate\";\nimport type { getUtxoToolbox } from \"@swapkit/toolboxes/utxo\";\n\nexport async function getAddressValidator() {\n const { match } = await import(\"ts-pattern\");\n const { cosmosValidateAddress } = await import(\"@swapkit/toolboxes/cosmos\");\n const { evmValidateAddress } = await import(\"@swapkit/toolboxes/evm\");\n const { substrateValidateAddress } = await import(\"@swapkit/toolboxes/substrate\");\n const { getUTXOAddressValidator } = await import(\"@swapkit/toolboxes/utxo\");\n const { getSolanaAddressValidator } = await import(\"@swapkit/toolboxes/solana\");\n const { rippleValidateAddress } = await import(\"@swapkit/toolboxes/ripple\");\n const { radixValidateAddress } = await import(\"@swapkit/toolboxes/radix\");\n\n const solanaValidateAddress = await getSolanaAddressValidator();\n const utxoValidateAddress = await getUTXOAddressValidator();\n\n return function validateAddress({ address, chain }: { address: string; chain: Chain }) {\n const isValid = match(chain)\n .with(\n Chain.Arbitrum,\n Chain.Avalanche,\n Chain.Optimism,\n Chain.BinanceSmartChain,\n Chain.Base,\n Chain.Polygon,\n Chain.Ethereum,\n () => evmValidateAddress({ address }),\n )\n .with(Chain.Litecoin, Chain.Dash, Chain.Dogecoin, Chain.BitcoinCash, Chain.Bitcoin, () =>\n utxoValidateAddress({ address, chain: chain as UTXOChain }),\n )\n .with(Chain.Cosmos, Chain.Kujira, Chain.Maya, Chain.THORChain, () =>\n cosmosValidateAddress({ address, chain: chain as CosmosChain }),\n )\n .with(Chain.Chainflip, Chain.Polkadot, () =>\n substrateValidateAddress({ address, chain: chain as SubstrateChain }),\n )\n .with(Chain.Radix, () => radixValidateAddress(address))\n .with(Chain.Ripple, () => rippleValidateAddress(address))\n .with(Chain.Solana, () => solanaValidateAddress(address))\n .otherwise(() => false);\n\n return isValid;\n };\n}\n\nexport async function getFeeEstimator<T extends keyof CreateTransactionParams>(chain: T) {\n const toolbox = await getToolbox(chain);\n\n return async function estimateFee(params: CreateTransactionParams[T]) {\n switch (chain) {\n case Chain.Arbitrum:\n case Chain.Avalanche:\n case Chain.Optimism:\n case Chain.BinanceSmartChain:\n case Chain.Base:\n case Chain.Polygon:\n case Chain.Ethereum: {\n const txObject = await (\n toolbox as Awaited<ReturnType<typeof ETHToolbox>>\n ).createTransaction(params as EVMCreateTransactionParams);\n return (toolbox as Awaited<ReturnType<typeof ETHToolbox>>).estimateTransactionFee({\n ...txObject,\n feeOption: params.feeOptionKey || FeeOption.Fast,\n chain,\n });\n }\n case Chain.Bitcoin:\n case Chain.BitcoinCash:\n case Chain.Dogecoin:\n case Chain.Dash:\n case Chain.Litecoin: {\n return (toolbox as Awaited<ReturnType<typeof getUtxoToolbox>>).estimateTransactionFee(\n params as CreateTransactionParams[Chain.Bitcoin],\n );\n }\n\n case Chain.THORChain:\n case Chain.Maya:\n case Chain.Kujira:\n case Chain.Cosmos: {\n const { estimateTransactionFee } = await import(\"@swapkit/toolboxes/cosmos\");\n return estimateTransactionFee(params);\n }\n\n case Chain.Polkadot: {\n return (\n toolbox as Awaited<ReturnType<typeof getSubstrateToolbox<Chain.Polkadot>>>\n ).estimateTransactionFee(params);\n }\n\n case Chain.Solana: {\n return (toolbox as Awaited<ReturnType<typeof getSolanaToolbox>>).estimateTransactionFee(\n params as CreateTransactionParams[Chain.Solana],\n );\n }\n\n default:\n return AssetValue.from({ chain });\n }\n };\n}\n\ntype Toolboxes = {\n [key in EVMChain]: Awaited<ReturnType<typeof getEvmToolbox>>;\n} & {\n [key in UTXOChain]: Awaited<ReturnType<typeof getUtxoToolbox>>;\n} & {\n [key in CosmosChain]: Awaited<ReturnType<typeof getCosmosToolbox>>;\n} & {\n [key in SubstrateChain]: Awaited<ReturnType<typeof getSubstrateToolbox>>;\n} & {\n [Chain.Radix]: Awaited<ReturnType<typeof RadixToolbox>>;\n [Chain.Ripple]: Awaited<ReturnType<typeof getRippleToolbox>>;\n [Chain.Solana]: Awaited<ReturnType<typeof getSolanaToolbox>>;\n};\n\ntype ToolboxParams = { [key in EVMChain]: Parameters<typeof getEvmToolbox>[1] } & {\n [key in UTXOChain]: undefined;\n} & {\n [key in CosmosChain]: Parameters<typeof getCosmosToolbox>[1];\n} & {\n [key in SubstrateChain]: Parameters<typeof getSubstrateToolbox>[1];\n} & {\n [Chain.Radix]: Parameters<typeof RadixToolbox>[0];\n [Chain.Ripple]: Parameters<typeof getRippleToolbox>[0];\n [Chain.Solana]: Parameters<typeof getSolanaToolbox>[0];\n};\n\ntype CreateTransactionParams = { [key in EVMChain]: EVMCreateTransactionParams } & {\n [key in UTXOChain]: GenericCreateTransactionParams;\n} & {\n [key in CosmosChain]: GenericCreateTransactionParams;\n} & {\n [key in SubstrateChain]: GenericCreateTransactionParams;\n} & {\n [Chain.Radix]: GenericCreateTransactionParams;\n [Chain.Solana]: SolanaCreateTransactionParams;\n};\n\nexport async function getToolbox<T extends keyof Toolboxes>(\n chain: T,\n params?: ToolboxParams[T],\n): Promise<Toolboxes[T]> {\n switch (chain) {\n case Chain.Arbitrum:\n case Chain.Avalanche:\n case Chain.Optimism:\n case Chain.BinanceSmartChain:\n case Chain.Base:\n case Chain.Polygon:\n case Chain.Ethereum: {\n const { getEvmToolbox } = await import(\"@swapkit/toolboxes/evm\");\n const evmToolbox = await getEvmToolbox(chain, params as Parameters<typeof getEvmToolbox>[1]);\n return evmToolbox as Toolboxes[T];\n }\n\n case Chain.Litecoin:\n case Chain.Dash:\n case Chain.Dogecoin:\n case Chain.BitcoinCash:\n case Chain.Bitcoin: {\n const { getUtxoToolbox } = await import(\"@swapkit/toolboxes/utxo\");\n const utxoToolbox = await getUtxoToolbox(\n chain,\n params as Parameters<typeof getUtxoToolbox>[1],\n );\n return utxoToolbox as Toolboxes[T];\n }\n\n case Chain.Cosmos:\n case Chain.Kujira:\n case Chain.Maya:\n case Chain.THORChain: {\n const { getCosmosToolbox } = await import(\"@swapkit/toolboxes/cosmos\");\n const cosmosToolbox = await getCosmosToolbox(\n chain,\n params as Parameters<typeof getCosmosToolbox>[1],\n );\n\n return cosmosToolbox as Toolboxes[T];\n }\n\n case Chain.Chainflip:\n case Chain.Polkadot: {\n const { getSubstrateToolbox } = await import(\"@swapkit/toolboxes/substrate\");\n const substrateToolbox = await getSubstrateToolbox(\n chain,\n params as Parameters<typeof getSubstrateToolbox>[1],\n );\n return substrateToolbox as Toolboxes[T];\n }\n\n case Chain.Radix: {\n const { RadixToolbox } = await import(\"@swapkit/toolboxes/radix\");\n const radixToolbox = await RadixToolbox(params as Parameters<typeof RadixToolbox>[0]);\n return radixToolbox as Toolboxes[T];\n }\n\n case Chain.Ripple: {\n const { getRippleToolbox } = await import(\"@swapkit/toolboxes/ripple\");\n const rippleToolbox = await getRippleToolbox(\n params as Parameters<typeof getRippleToolbox>[0],\n );\n return rippleToolbox as Toolboxes[T];\n }\n\n case Chain.Solana: {\n const { getSolanaToolbox } = await import(\"@swapkit/toolboxes/solana\");\n const solanaToolbox = await getSolanaToolbox(\n params as Parameters<typeof getSolanaToolbox>[0],\n );\n return solanaToolbox as Toolboxes[T];\n }\n\n default:\n throw new Error(`Chain ${chain} is not supported`);\n }\n}\n"
5
6
  ],
6
- "mappings": "",
7
- "debugId": "6A33823FB1BB3FA564756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "A2A0AE3092B0C04664756E2164756E21",
8
9
  "names": []
9
10
  }
@@ -1,3 +1,3 @@
1
- var D={};$(D,{validateAddress:()=>Y,RadixToolbox:()=>B});module.exports=_(D);var W=require("@radixdlt/babylon-gateway-api-sdk"),X=require("@radixdlt/radix-dapp-toolkit"),O=require("@swapkit/helpers");function Y(j){return j.startsWith("account_rdx1")&&j.length===66}function q({networkApi:j}){return async function H(G){let L=await x({address:G,networkApi:j});return T({resources:L,networkApi:j})}}async function x({address:j,networkApi:H}){let G=!0,L,K=[],J=await v(H);while(G){let Q={address:j,limit_per_page:100,cursor:L,at_ledger_state:{state_version:J}},M=await H.state.innerClient.entityFungiblesPage({stateEntityFungiblesPageRequest:Q});if(K=K.concat(M.items),M.next_cursor)L=M.next_cursor;else G=!1}return K}async function T({resources:j,networkApi:H}){let G=[],L=50,K=[];for(let J=0;J<j.length;J+=50)K.push(j.slice(J,J+50));for(let J of K){let Q=J.map((z)=>z.resource_address),M=await H.state.getEntityDetailsVaultAggregated(Q),V=new Map;for(let z of M)if(z.details!==void 0){let N=z.metadata?.items.find((Z)=>Z.key==="symbol"),U=N?.value.typed.type==="String"?N.value.typed.value:"?";if(z.details.type==="FungibleResource")V.set(z.address,{decimals:z.details.divisibility,symbol:U})}for(let z of J)if(z.aggregation_level==="Global"){let N=V.get(z.resource_address)||{decimals:0,symbol:"?"},U=O.AssetValue.from({asset:N.symbol!==O.Chain.Radix?`${O.Chain.Radix}.${N.symbol}-${z.resource_address}`:"XRD.XRD",value:z.amount});G.push(U)}}return G}async function v(j){return j.status.getCurrent().then((H)=>H.ledger_state.state_version)}var B=async({dappConfig:j})=>{let H=X.RadixDappToolkit({...j,networkId:j.network?.networkId||1}),G=W.GatewayApiClient.initialize(H.gatewayApi.clientConfig);return{networkApi:G,getBalance:q({networkApi:G}),getAddress:()=>{return""},validateAddress:Y,signAndBroadcast:()=>{throw new Error("Not implemented")}}};
1
+ var I={};$(I,{radixValidateAddress:()=>Y,RadixToolbox:()=>B});module.exports=_(I);var N=require("@swapkit/helpers");function Y(j){return j.startsWith("account_rdx1")&&j.length===66}function q({networkApi:j}){return async function J(K){let M=await G({address:K,networkApi:j});return v({resources:M,networkApi:j})}}async function G({address:j,networkApi:J}){let K=!0,M,L=[],z=await x(J);while(K){let U={address:j,limit_per_page:100,cursor:M,at_ledger_state:{state_version:z}},O=await J.state.innerClient.entityFungiblesPage({stateEntityFungiblesPageRequest:U});if(L=L.concat(O.items),O.next_cursor)M=O.next_cursor;else K=!1}return L}async function v({resources:j,networkApi:J}){let K=[],M=50,L=[];for(let z=0;z<j.length;z+=50)L.push(j.slice(z,z+50));for(let z of L){let U=z.map((H)=>H.resource_address),O=await J.state.getEntityDetailsVaultAggregated(U),W=new Map;for(let H of O)if(H.details!==void 0){let Q=H.metadata?.items.find((Z)=>Z.key==="symbol"),V=Q?.value.typed.type==="String"?Q.value.typed.value:"?";if(H.details.type==="FungibleResource")W.set(H.address,{decimals:H.details.divisibility,symbol:V})}for(let H of z)if(H.aggregation_level==="Global"){let Q=W.get(H.resource_address)||{decimals:0,symbol:"?"},V=N.AssetValue.from({asset:Q.symbol!==N.Chain.Radix?`${N.Chain.Radix}.${Q.symbol}-${H.resource_address}`:"XRD.XRD",value:H.amount});K.push(V)}}return K}async function x(j){return j.status.getCurrent().then((J)=>J.ledger_state.state_version)}var B=async({dappConfig:j}={})=>{let{RadixDappToolkit:J}=await import("@radixdlt/radix-dapp-toolkit"),{GatewayApiClient:K}=await import("@radixdlt/babylon-gateway-api-sdk"),M=j||N.SKConfig.get("integrations").radix,L=J({...M,networkId:M.network?.networkId||1}),z=K.initialize(L.gatewayApi.clientConfig);return{getAddress:()=>"",getBalance:q({networkApi:z}),networkApi:z,validateAddress:Y,signAndBroadcast:()=>{throw new Error("Not implemented")}}};
2
2
 
3
- //# debugId=65EA723391DF799E64756E2164756E21
3
+ //# debugId=A29CBEBEA6434FF464756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/radix/index.ts"],
4
4
  "sourcesContent": [
5
- "import {\n type FungibleResourcesCollectionItem,\n GatewayApiClient,\n type StateEntityDetailsVaultResponseItem,\n type StateEntityFungiblesPageRequest,\n type StateEntityFungiblesPageResponse,\n} from \"@radixdlt/babylon-gateway-api-sdk\";\nimport { RadixDappToolkit } from \"@radixdlt/radix-dapp-toolkit\";\nimport { AssetValue, Chain, type SKConfigIntegrations } from \"@swapkit/helpers\";\n\nexport type RadixWallets = {\n [Chain.Radix]: Awaited<ReturnType<typeof RadixToolbox>>;\n};\n\ntype RadixGetBalanceParams = {\n address: string;\n networkApi: GatewayApiClient;\n};\n// Could not find anything sync in SDK, ask Radix team\nexport function validateAddress(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 radixToolkit = RadixDappToolkit({\n ...dappConfig,\n networkId: dappConfig.network?.networkId || 1,\n });\n\n const networkApi = GatewayApiClient.initialize(radixToolkit.gatewayApi.clientConfig);\n\n return {\n networkApi,\n getBalance: getBalance({ networkApi }),\n getAddress: () => {\n return \"\";\n },\n validateAddress,\n signAndBroadcast: (() => {\n throw new Error(\"Not implemented\");\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 } 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 Error(\"Not implemented\");\n }) as (params: any) => Promise<string>,\n };\n};\n"
6
6
  ],
7
- "mappings": "6EAMO,IANP,+CAOA,0CACA,8BAWO,SAAS,CAAe,CAAC,EAAiB,CAC/C,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,gBAE9C,GAAc,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,EAGnF,IAAM,EAAe,OAC1B,gBACmD,CACnD,IAAM,EAAe,mBAAiB,IACjC,EACH,UAAW,EAAW,SAAS,WAAa,CAC9C,CAAC,EAEK,EAAa,mBAAiB,WAAW,EAAa,WAAW,YAAY,EAEnF,MAAO,CACL,aACA,WAAY,EAAW,CAAE,YAAW,CAAC,EACrC,WAAY,IAAM,CAChB,MAAO,IAET,kBACA,iBAAmB,IAAM,CACvB,MAAM,IAAI,MAAM,iBAAiB,EAErC",
8
- "debugId": "65EA723391DF799E64756E2164756E21",
7
+ "mappings": "kFAOuE,IAAvE,8BASO,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,EAGnF,IAAM,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,MAAM,iBAAiB,EAErC",
8
+ "debugId": "A29CBEBEA6434FF464756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,3 +1,3 @@
1
- import"../chunk-tvrdndbw.js";import{GatewayApiClient as X}from"@radixdlt/babylon-gateway-api-sdk";import{RadixDappToolkit as Y}from"@radixdlt/radix-dapp-toolkit";import{AssetValue as Z,Chain as V}from"@swapkit/helpers";function _(j){return j.startsWith("account_rdx1")&&j.length===66}function $({networkApi:j}){return async function H(G){let L=await q({address:G,networkApi:j});return x({resources:L,networkApi:j})}}async function q({address:j,networkApi:H}){let G=!0,L,K=[],J=await T(H);while(G){let O={address:j,limit_per_page:100,cursor:L,at_ledger_state:{state_version:J}},M=await H.state.innerClient.entityFungiblesPage({stateEntityFungiblesPageRequest:O});if(K=K.concat(M.items),M.next_cursor)L=M.next_cursor;else G=!1}return K}async function x({resources:j,networkApi:H}){let G=[],L=50,K=[];for(let J=0;J<j.length;J+=50)K.push(j.slice(J,J+50));for(let J of K){let O=J.map((z)=>z.resource_address),M=await H.state.getEntityDetailsVaultAggregated(O),U=new Map;for(let z of M)if(z.details!==void 0){let N=z.metadata?.items.find((W)=>W.key==="symbol"),Q=N?.value.typed.type==="String"?N.value.typed.value:"?";if(z.details.type==="FungibleResource")U.set(z.address,{decimals:z.details.divisibility,symbol:Q})}for(let z of J)if(z.aggregation_level==="Global"){let N=U.get(z.resource_address)||{decimals:0,symbol:"?"},Q=Z.from({asset:N.symbol!==V.Radix?`${V.Radix}.${N.symbol}-${z.resource_address}`:"XRD.XRD",value:z.amount});G.push(Q)}}return G}async function T(j){return j.status.getCurrent().then((H)=>H.ledger_state.state_version)}var I=async({dappConfig:j})=>{let H=Y({...j,networkId:j.network?.networkId||1}),G=X.initialize(H.gatewayApi.clientConfig);return{networkApi:G,getBalance:$({networkApi:G}),getAddress:()=>{return""},validateAddress:_,signAndBroadcast:()=>{throw new Error("Not implemented")}}};export{_ as validateAddress,I as RadixToolbox};
1
+ import{c as W,d as X}from"../chunk-p1kdg37m.js";import{AssetValue as _,Chain as Y,SKConfig as $}from"@swapkit/helpers";function q(j){return j.startsWith("account_rdx1")&&j.length===66}function G({networkApi:j}){return async function J(K){let M=await v({address:K,networkApi:j});return x({resources:M,networkApi:j})}}async function v({address:j,networkApi:J}){let K=!0,M,L=[],z=await B(J);while(K){let Q={address:j,limit_per_page:100,cursor:M,at_ledger_state:{state_version:z}},N=await J.state.innerClient.entityFungiblesPage({stateEntityFungiblesPageRequest:Q});if(L=L.concat(N.items),N.next_cursor)M=N.next_cursor;else K=!1}return L}async function x({resources:j,networkApi:J}){let K=[],M=50,L=[];for(let z=0;z<j.length;z+=50)L.push(j.slice(z,z+50));for(let z of L){let Q=z.map((H)=>H.resource_address),N=await J.state.getEntityDetailsVaultAggregated(Q),V=new Map;for(let H of N)if(H.details!==void 0){let O=H.metadata?.items.find((Z)=>Z.key==="symbol"),U=O?.value.typed.type==="String"?O.value.typed.value:"?";if(H.details.type==="FungibleResource")V.set(H.address,{decimals:H.details.divisibility,symbol:U})}for(let H of z)if(H.aggregation_level==="Global"){let O=V.get(H.resource_address)||{decimals:0,symbol:"?"},U=_.from({asset:O.symbol!==Y.Radix?`${Y.Radix}.${O.symbol}-${H.resource_address}`:"XRD.XRD",value:H.amount});K.push(U)}}return K}async function B(j){return j.status.getCurrent().then((J)=>J.ledger_state.state_version)}var S=async({dappConfig:j}={})=>{let{RadixDappToolkit:J}=await import("@radixdlt/radix-dapp-toolkit"),{GatewayApiClient:K}=await import("@radixdlt/babylon-gateway-api-sdk"),M=j||$.get("integrations").radix,L=J({...M,networkId:M.network?.networkId||1}),z=K.initialize(L.gatewayApi.clientConfig);return{getAddress:()=>"",getBalance:G({networkApi:z}),networkApi:z,validateAddress:q,signAndBroadcast:()=>{throw new Error("Not implemented")}}};export{q as radixValidateAddress,S as RadixToolbox};
2
2
 
3
- //# debugId=1EC1285B373EA15064756E2164756E21
3
+ //# debugId=DD879EEE96AA5EA464756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/radix/index.ts"],
4
4
  "sourcesContent": [
5
- "import {\n type FungibleResourcesCollectionItem,\n GatewayApiClient,\n type StateEntityDetailsVaultResponseItem,\n type StateEntityFungiblesPageRequest,\n type StateEntityFungiblesPageResponse,\n} from \"@radixdlt/babylon-gateway-api-sdk\";\nimport { RadixDappToolkit } from \"@radixdlt/radix-dapp-toolkit\";\nimport { AssetValue, Chain, type SKConfigIntegrations } from \"@swapkit/helpers\";\n\nexport type RadixWallets = {\n [Chain.Radix]: Awaited<ReturnType<typeof RadixToolbox>>;\n};\n\ntype RadixGetBalanceParams = {\n address: string;\n networkApi: GatewayApiClient;\n};\n// Could not find anything sync in SDK, ask Radix team\nexport function validateAddress(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 radixToolkit = RadixDappToolkit({\n ...dappConfig,\n networkId: dappConfig.network?.networkId || 1,\n });\n\n const networkApi = GatewayApiClient.initialize(radixToolkit.gatewayApi.clientConfig);\n\n return {\n networkApi,\n getBalance: getBalance({ networkApi }),\n getAddress: () => {\n return \"\";\n },\n validateAddress,\n signAndBroadcast: (() => {\n throw new Error(\"Not implemented\");\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 } 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 Error(\"Not implemented\");\n }) as (params: any) => Promise<string>,\n };\n};\n"
6
6
  ],
7
- "mappings": "6BAAA,2BAEE,0CAKF,2BAAS,qCACT,qBAAS,WAAY,yBAWd,SAAS,CAAe,CAAC,EAAiB,CAC/C,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,gBAE9C,GAAc,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,EAGnF,IAAM,EAAe,OAC1B,gBACmD,CACnD,IAAM,EAAe,EAAiB,IACjC,EACH,UAAW,EAAW,SAAS,WAAa,CAC9C,CAAC,EAEK,EAAa,EAAiB,WAAW,EAAa,WAAW,YAAY,EAEnF,MAAO,CACL,aACA,WAAY,EAAW,CAAE,YAAW,CAAC,EACrC,WAAY,IAAM,CAChB,MAAO,IAET,kBACA,iBAAmB,IAAM,CACvB,MAAM,IAAI,MAAM,iBAAiB,EAErC",
8
- "debugId": "1EC1285B373EA15064756E2164756E21",
7
+ "mappings": "gDAOA,qBAAS,WAAY,cAAO,yBASrB,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,EAGnF,IAAM,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,MAAM,iBAAiB,EAErC",
8
+ "debugId": "DD879EEE96AA5EA464756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -0,0 +1,3 @@
1
+ var f={};O(f,{rippleValidateAddress:()=>R,getRippleToolbox:()=>W});module.exports=N(f);var j=require("@swapkit/helpers"),I=require("xrpl");function $(z){let y=I.Wallet.fromMnemonic(z);return{getAddress:()=>Promise.resolve(y.address),signTransaction:(M)=>Promise.resolve(y.sign(M))}}function R(z){return I.isValidAddress(z)}var W=async(z={})=>{let y="signer"in z&&z.signer?z.signer:("phrase"in z)&&z.phrase?$(z.phrase):void 0,M=j.SKConfig.get("rpcUrls")[j.Chain.Ripple];if(!M)throw new j.SwapKitError({errorKey:"toolbox_ripple_rpc_not_configured",info:{chain:j.Chain.Ripple}});let L=new I.Client(M);await L.connect();let P=()=>{if(!y)throw new j.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});return y.getAddress()},k=async(v)=>{let G=v||await P();try{await L.connect();let J=(await L.request({command:"account_info",account:G})).result.account_data.Balance;return[j.AssetValue.from({chain:j.Chain.Ripple,value:J,fromBaseDecimal:j.BaseDecimal[j.Chain.Ripple]})]}catch(q){if(q.data.error_code===19)return[j.AssetValue.from({chain:j.Chain.Ripple,value:0})];throw new j.SwapKitError("toolbox_ripple_get_balance_error",{info:{address:G,error:q}})}},F=async()=>{let G=(await L.request({command:"fee"})).result.drops.open_ledger_fee;return j.AssetValue.from({chain:j.Chain.Ripple,value:j.SwapKitNumber.fromBigInt(BigInt(G),j.BaseDecimal[j.Chain.Ripple])})},X=async({assetValue:v,recipient:G,memo:q,sender:J})=>{if(!y)throw new j.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});if(!R(G))throw new j.SwapKitError({errorKey:"core_transaction_invalid_recipient_address"});let Q=J||await P();if(!v.isGasAsset||v.chain!==j.Chain.Ripple)throw new j.SwapKitError({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:v.toString()}});let _={TransactionType:"Payment",Account:Q,Amount:I.xrpToDrops(v.getValue("string")),Destination:G};if(q)_.Memos=[{Memo:{MemoData:Buffer.from(q).toString("hex")}}];return await L.autofill(_)},Y=(v)=>{if(!y)throw new j.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});return y.signTransaction(v)},Z=async(v)=>{let q=(await L.submitAndWait(v)).result;if(q.engine_result==="tesSUCCESS"||q.engine_result==="terQUEUED")return q.tx_json?.hash||q.hash;let J=q.engine_result_message||"Unknown error",Q=q.engine_result||"Unknown code";throw new j.SwapKitError({errorKey:"toolbox_ripple_broadcast_error",info:{chain:j.Chain.Ripple,message:J,code:Q,result:q}})};return{signer:y,createSigner:$,getAddress:P,validateAddress:R,getBalance:k,createTransaction:X,signTransaction:Y,broadcastTransaction:Z,transfer:async(v)=>{if(!y)throw new j.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});let G=await y.getAddress(),q=await X({...v,sender:G}),J=await Y(q);return Z(J.tx_blob)},estimateTransactionFee:F}};
2
+
3
+ //# debugId=EA25C738F3A7B8B464756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/ripple/index.ts"],
4
+ "sourcesContent": [
5
+ "import {\n AssetValue,\n BaseDecimal,\n Chain,\n type ChainSigner,\n type GenericCreateTransactionParams,\n type GenericTransferParams,\n SKConfig,\n SwapKitError,\n SwapKitNumber,\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\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 = SKConfig.get(\"rpcUrls\")[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 await client.connect();\n const accountInfo = await client.request({\n command: \"account_info\",\n account: addr,\n });\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 === 19) {\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 }: Omit<GenericCreateTransactionParams, \"feeRate\">) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\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 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 // Cast result to any to bypass potential type mismatches in xrpl.js definitions\n const result: any = submitResult.result;\n\n // Check engine_result directly on result\n if (result.engine_result === \"tesSUCCESS\" || result.engine_result === \"terQUEUED\") {\n // Access hash from tx_json if available, otherwise fallback to result.hash\n return result.tx_json?.hash || result.hash;\n }\n\n const message = result.engine_result_message || \"Unknown error\";\n const code = result.engine_result || \"Unknown code\";\n\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_broadcast_error\",\n info: { chain: Chain.Ripple, message, code, result },\n // Remove explicit message when using object format\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 // Disconnect client on demand or handle elsewhere?\n // For now, let's assume connection is managed outside or persists.\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, // Optional: expose disconnect\n };\n};\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "EA25C738F3A7B8B464756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,3 @@
1
+ import"../chunk-p1kdg37m.js";import{AssetValue as R,BaseDecimal as $,Chain as G,SKConfig as W,SwapKitError as I,SwapKitNumber as f}from"@swapkit/helpers";import{Client as H,Wallet as U,isValidAddress as B,xrpToDrops as b}from"xrpl";function k(y){let v=U.fromMnemonic(y);return{getAddress:()=>Promise.resolve(v.address),signTransaction:(M)=>Promise.resolve(v.sign(M))}}function F(y){return B(y)}var K=async(y={})=>{let v="signer"in y&&y.signer?y.signer:("phrase"in y)&&y.phrase?k(y.phrase):void 0,M=W.get("rpcUrls")[G.Ripple];if(!M)throw new I({errorKey:"toolbox_ripple_rpc_not_configured",info:{chain:G.Ripple}});let L=new H(M);await L.connect();let P=()=>{if(!v)throw new I({errorKey:"toolbox_ripple_signer_not_found"});return v.getAddress()},N=async(q)=>{let z=q||await P();try{await L.connect();let J=(await L.request({command:"account_info",account:z})).result.account_data.Balance;return[R.from({chain:G.Ripple,value:J,fromBaseDecimal:$[G.Ripple]})]}catch(j){if(j.data.error_code===19)return[R.from({chain:G.Ripple,value:0})];throw new I("toolbox_ripple_get_balance_error",{info:{address:z,error:j}})}},O=async()=>{let z=(await L.request({command:"fee"})).result.drops.open_ledger_fee;return R.from({chain:G.Ripple,value:f.fromBigInt(BigInt(z),$[G.Ripple])})},X=async({assetValue:q,recipient:z,memo:j,sender:J})=>{if(!v)throw new I({errorKey:"toolbox_ripple_signer_not_found"});if(!F(z))throw new I({errorKey:"core_transaction_invalid_recipient_address"});let Q=J||await P();if(!q.isGasAsset||q.chain!==G.Ripple)throw new I({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:q.toString()}});let _={TransactionType:"Payment",Account:Q,Amount:b(q.getValue("string")),Destination:z};if(j)_.Memos=[{Memo:{MemoData:Buffer.from(j).toString("hex")}}];return await L.autofill(_)},Y=(q)=>{if(!v)throw new I({errorKey:"toolbox_ripple_signer_not_found"});return v.signTransaction(q)},Z=async(q)=>{let j=(await L.submitAndWait(q)).result;if(j.engine_result==="tesSUCCESS"||j.engine_result==="terQUEUED")return j.tx_json?.hash||j.hash;let J=j.engine_result_message||"Unknown error",Q=j.engine_result||"Unknown code";throw new I({errorKey:"toolbox_ripple_broadcast_error",info:{chain:G.Ripple,message:J,code:Q,result:j}})};return{signer:v,createSigner:k,getAddress:P,validateAddress:F,getBalance:N,createTransaction:X,signTransaction:Y,broadcastTransaction:Z,transfer:async(q)=>{if(!v)throw new I({errorKey:"toolbox_ripple_signer_not_found"});let z=await v.getAddress(),j=await X({...q,sender:z}),J=await Y(j);return Z(J.tx_blob)},estimateTransactionFee:O}};export{F as rippleValidateAddress,K as getRippleToolbox};
2
+
3
+ //# debugId=56E2ABE0A5F4DFCC64756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/ripple/index.ts"],
4
+ "sourcesContent": [
5
+ "import {\n AssetValue,\n BaseDecimal,\n Chain,\n type ChainSigner,\n type GenericCreateTransactionParams,\n type GenericTransferParams,\n SKConfig,\n SwapKitError,\n SwapKitNumber,\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\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 = SKConfig.get(\"rpcUrls\")[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 await client.connect();\n const accountInfo = await client.request({\n command: \"account_info\",\n account: addr,\n });\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 === 19) {\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 }: Omit<GenericCreateTransactionParams, \"feeRate\">) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\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 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 // Cast result to any to bypass potential type mismatches in xrpl.js definitions\n const result: any = submitResult.result;\n\n // Check engine_result directly on result\n if (result.engine_result === \"tesSUCCESS\" || result.engine_result === \"terQUEUED\") {\n // Access hash from tx_json if available, otherwise fallback to result.hash\n return result.tx_json?.hash || result.hash;\n }\n\n const message = result.engine_result_message || \"Unknown error\";\n const code = result.engine_result || \"Unknown code\";\n\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_broadcast_error\",\n info: { chain: Chain.Ripple, message, code, result },\n // Remove explicit message when using object format\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 // Disconnect client on demand or handle elsewhere?\n // For now, let's assume connection is managed outside or persists.\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, // Optional: expose disconnect\n };\n};\n"
6
+ ],
7
+ "mappings": "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",
8
+ "debugId": "56E2ABE0A5F4DFCC64756E2164756E21",
9
+ "names": []
10
+ }
@@ -1,3 +1,3 @@
1
- var I={};B(I,{getAddressValidator:()=>Z,createSolanaTokenTransaction:()=>$,SOLToolbox:()=>M});module.exports=D(I);var q=require("@swapkit/helpers");async function Z(){let{PublicKey:T}=await import("@solana/web3.js");return(p)=>{try{let h=new T(p);return T.isOnCurve(h.toBytes())}catch(h){return!1}}}async function $({tokenAddress:T,recipient:p,from:h,connection:S,amount:W,decimals:j}){let{getAssociatedTokenAddress:R,getAccount:z,createAssociatedTokenAccountInstruction:U,createTransferCheckedInstruction:g}=await import("@solana/spl-token"),{Transaction:L,PublicKey:E}=await import("@solana/web3.js"),x=new L,w=new E(T),J=await R(w,h),F=new E(p),Q=await R(w,F),X=!1;try{await z(S,Q),X=!0}catch(Y){}if(!X)x.add(U(h,Q,F,w));return x.add(g(J,w,Q,h,W,j)),x}var M=()=>{async function T(){let{Connection:p}=await import("@solana/web3.js");return new p(q.SKConfig.get("rpcUrls").SOL,"confirmed")}return{getConnection:T,createKeysForPath:H,getAddressFromKeys:_,createSolanaTransaction:v(T),getBalance:y(T),transfer:N(T),broadcastTransaction:b(T),getAddressValidator:Z}};function v(T){return async({recipient:p,assetValue:h,fromPublicKey:S,memo:W,isProgramDerivedAddress:j})=>{let{createMemoInstruction:R}=await import("@solana/spl-memo"),{Transaction:z,PublicKey:U,SystemProgram:g}=await import("@solana/web3.js"),L=await Z();if(!(j||L(p)))throw new q.SwapKitError("core_transaction_invalid_recipient_address");let E=await T(),x=h.isGasAsset?new z().add(g.transfer({fromPubkey:S,lamports:h.getBaseValue("number"),toPubkey:new U(p)})):h.address?await $({amount:h.getBaseValue("number"),connection:E,decimals:h.decimal,from:S,recipient:p,tokenAddress:h.address}):void 0;if(!x)throw new q.SwapKitError("core_transaction_invalid_sender_address");if(W)x.add(R(W));let w=await E.getLatestBlockhash();return x.recentBlockhash=w.blockhash,x.feePayer=S,x}}function N(T){return async({recipient:p,assetValue:h,fromKeypair:S,memo:W,isProgramDerivedAddress:j})=>{let{sendAndConfirmTransaction:R}=await import("@solana/web3.js"),z=await T(),U=await v(T)({recipient:p,assetValue:h,memo:W,fromPublicKey:S.publicKey,isProgramDerivedAddress:j});return R(z,U,[S])}}function b(T){return async(p)=>{return(await T()).sendRawTransaction(p.serialize())}}async function H({phrase:T,derivationPath:p=q.DerivationPath.SOL}){let{HDKey:h}=await import("micro-key-producer/slip10.js"),{mnemonicToSeedSync:S}=await import("@scure/bip39"),{Keypair:W}=await import("@solana/web3.js"),j=S(T),R=h.fromMasterSeed(j);return W.fromSeed(R.derive(p,!0).privateKey)}function _(T){return T.publicKey.toString()}async function P({connection:T,address:p}){let{PublicKey:h}=await import("@solana/web3.js"),{TOKEN_PROGRAM_ID:S}=await import("@solana/spl-token"),{TokenListProvider:W}=await import("@solana/spl-token-registry"),j=await T.getParsedTokenAccountsByOwner(new h(p),{programId:S}),U=(await new W().resolve()).filterByChainId(101).getList(),g=new Map;for await(let E of j.value){let x=E.account.data.parsed.info,w=x.mint,J=x.tokenAmount.decimals,F=BigInt(x.tokenAmount.amount);if(F<=BigInt(0))continue;let X=U.find((G)=>G.address===w)?.symbol??"UNKNOWN",Y=g.get(w);g.set(w,{amount:Y?Y.amount+F:F,decimal:J,symbol:X})}return Array.from(g.entries()).map(([E,{amount:x,decimal:w,symbol:J}])=>new q.AssetValue({value:q.SwapKitNumber.fromBigInt(x,w),decimal:w,identifier:`${q.Chain.Solana}.${J}${E?`-${E.toString()}`:""}`}))}function y(T){return async(p)=>{let{PublicKey:h}=await import("@solana/web3.js"),S=await T(),W=await S.getBalance(new h(p)),j=await P({connection:S,address:p});return[q.AssetValue.from({chain:q.Chain.Solana,value:BigInt(W)}),...j]}}
1
+ var I={};v(I,{getSolanaToolbox:()=>J,getSolanaAddressValidator:()=>j,createKeysForPath:()=>W});module.exports=$(I);var p=require("@swapkit/helpers"),M=require("ts-pattern"),B=require("ts-pattern");async function j(){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 J(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 B.match(a).with({phrase:M.P.string},({phrase:y})=>W({phrase:y,derivationPath:l})).with({signer:M.P.any},({signer:y})=>y).otherwise(()=>{return});function P(){return o?.publicKey?d(o.publicKey):""}return{getConnection:h,getAddress:P,createKeysForPath:W,getAddressFromPubKey:d,getPubkeyFromAddress:A,createTransaction:u(h),createTransactionFromInstructions:Y,getBalance:z(p.Chain.Solana),transfer:Z(h,o),broadcastTransaction:E(h),getAddressValidator:j,signTransaction:_(h,o),estimateTransactionFee:N(h)}}function N(a){return async({recipient:T,assetValue:l,memo:o,isProgramDerivedAddress:P,sender:y})=>{let S=await a(),b=(await u(a)({recipient:T,assetValue:l,memo:o,isProgramDerivedAddress:P,sender:y})).compileMessage(),m=await S.getFeeForMessage(b);if(m.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:m.value,fromBaseDecimal:p.BaseDecimal[p.Chain.Solana]})}}async function h(){let{Connection:a}=await import("@solana/web3.js");return new a(p.SKConfig.get("rpcUrls").SOL,"confirmed")}function Q(a){return async({assetValue:T,recipient:l,sender:o,isProgramDerivedAddress:P})=>{let y=await a(),S=await A(o);if(T.isGasAsset){let{Transaction:x,SystemProgram:b,PublicKey:m}=await import("@solana/web3.js");return new x().add(b.transfer({fromPubkey:S,lamports:T.getBaseValue("number"),toPubkey:new m(l)}))}if(T.address)return X({amount:T.getBaseValue("number"),connection:y,decimals:T.decimal,from:S,recipient:l,tokenAddress:T.address,isProgramDerivedAddress:P});return}}async function X({tokenAddress:a,recipient:T,from:l,connection:o,amount:P,decimals:y,isProgramDerivedAddress:S}){let{getAssociatedTokenAddress:x,getAccount:b,createAssociatedTokenAccountInstruction:m,createTransferCheckedInstruction:O}=await import("@solana/spl-token"),{Transaction:w,PublicKey:L}=await import("@solana/web3.js"),G=new w,R=new L(a),F=await x(R,l),U=new L(T),q=await x(R,U,S),V=!1;try{await b(o,q),V=!0}catch(H){}if(!V)G.add(m(l,q,U,R));return G.add(O(F,R,q,l,P,y)),G}function u(a){return async({recipient:T,assetValue:l,memo:o,isProgramDerivedAddress:P,sender:y})=>{let{createMemoInstruction:S}=await import("@solana/spl-memo"),x=await A(y),b=await j();if(!(P||b(T)))throw new p.SwapKitError("core_transaction_invalid_recipient_address");let m=await a(),O=await Q(a)({assetValue:l,recipient:T,sender:y,isProgramDerivedAddress:P});if(!O)throw new p.SwapKitError("core_transaction_invalid_sender_address");if(o)O.add(S(o));let w=await m.getLatestBlockhash();return O.recentBlockhash=w.blockhash,O.feePayer=x,O}}async function Y({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 Z(a,T){return async({recipient:l,assetValue:o,memo:P,isProgramDerivedAddress:y})=>{if(!T)throw new p.SwapKitError("core_transaction_invalid_sender_address");let S=T.publicKey?.toString()??(await T.connect()).publicKey.toString(),x=await u(a)({recipient:l,assetValue:o,memo:P,isProgramDerivedAddress:y,sender:S});if("connect"in T){let b=await T.signTransaction(x);return E(a)(b)}return x.sign(T),E(a)(x)}}function E(a){return async(T)=>{return(await a()).sendRawTransaction(T.serialize())}}function _(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 y=await(await a()).getLatestBlockhash();l.recentBlockhash=y.blockhash,l.feePayer=T.publicKey||void 0}if("connect"in T)return await T.signTransaction(l);return await l.sign([T]),l}}async function W({phrase:a,derivationPath:T=p.DerivationPath.SOL}){let{HDKey:l}=await import("micro-key-producer/slip10.js"),{mnemonicToSeedSync:o}=await import("@scure/bip39"),{Keypair:P}=await import("@solana/web3.js"),y=o(a),S=l.fromMasterSeed(y);return P.fromSeed(S.derive(T,!0).privateKey)}function d(a){return a.toString()}async function A(a){let{PublicKey:T}=await import("@solana/web3.js");return new T(a)}
2
2
 
3
- //# debugId=857DCD4407AD404264756E2164756E21
3
+ //# debugId=10DF173C02A9BC6564756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/solana/toolbox.ts"],
4
4
  "sourcesContent": [
5
- "import type { TokenInfo } from \"@solana/spl-token-registry\";\nimport type { Connection, Keypair, PublicKey, Transaction } from \"@solana/web3.js\";\nimport {\n AssetValue,\n Chain,\n DerivationPath,\n SKConfig,\n SwapKitError,\n SwapKitNumber,\n type WalletTxParams,\n} from \"@swapkit/helpers\";\n\nexport async function getAddressValidator() {\n const { PublicKey } = await import(\"@solana/web3.js\");\n\n return (address: string) => {\n try {\n const pubkey = new PublicKey(address);\n return PublicKey.isOnCurve(pubkey.toBytes());\n } catch (_) {\n return false;\n }\n };\n}\n\nexport async function createSolanaTokenTransaction({\n tokenAddress,\n recipient,\n from,\n connection,\n amount,\n decimals,\n}: {\n tokenAddress: string;\n recipient: string;\n from: PublicKey;\n connection: Connection;\n amount: number;\n decimals: number;\n}) {\n const {\n getAssociatedTokenAddress,\n getAccount,\n createAssociatedTokenAccountInstruction,\n createTransferCheckedInstruction,\n } = await import(\"@solana/spl-token\");\n const { Transaction, PublicKey } = await import(\"@solana/web3.js\");\n\n const transaction = new Transaction();\n const tokenPublicKey = new PublicKey(tokenAddress);\n const fromSPLAddress = await getAssociatedTokenAddress(tokenPublicKey, from);\n\n const recipientPublicKey = new PublicKey(recipient);\n const recipientSPLAddress = await getAssociatedTokenAddress(tokenPublicKey, recipientPublicKey);\n\n let recipientAccountExists = false;\n try {\n await getAccount(connection, recipientSPLAddress);\n recipientAccountExists = true;\n } catch (_) {\n // Recipient's associated token account doesn't exist\n }\n\n if (!recipientAccountExists) {\n transaction.add(\n createAssociatedTokenAccountInstruction(\n from,\n recipientSPLAddress,\n recipientPublicKey,\n tokenPublicKey,\n ),\n );\n }\n\n transaction.add(\n createTransferCheckedInstruction(\n fromSPLAddress,\n tokenPublicKey,\n recipientSPLAddress,\n from,\n amount,\n decimals,\n ),\n );\n\n return transaction;\n}\n\nexport const SOLToolbox = () => {\n async function getConnection() {\n const { Connection } = await import(\"@solana/web3.js\");\n return new Connection(SKConfig.get(\"rpcUrls\").SOL, \"confirmed\");\n }\n\n return {\n getConnection,\n createKeysForPath,\n getAddressFromKeys,\n createSolanaTransaction: createSolanaTransaction(getConnection),\n getBalance: getBalance(getConnection),\n transfer: transfer(getConnection),\n broadcastTransaction: broadcastTransaction(getConnection),\n getAddressValidator,\n };\n};\n\nfunction createSolanaTransaction(getConnection: () => Promise<Connection>) {\n return async ({\n recipient,\n assetValue,\n fromPublicKey,\n memo,\n isProgramDerivedAddress,\n }: WalletTxParams & {\n assetValue: AssetValue;\n fromPublicKey: PublicKey;\n isProgramDerivedAddress?: boolean;\n }) => {\n const { createMemoInstruction } = await import(\"@solana/spl-memo\");\n const { Transaction, PublicKey, SystemProgram } = await import(\"@solana/web3.js\");\n const validateAddress = await getAddressValidator();\n\n if (!(isProgramDerivedAddress || validateAddress(recipient))) {\n throw new SwapKitError(\"core_transaction_invalid_recipient_address\");\n }\n\n const connection = await getConnection();\n\n const transaction = assetValue.isGasAsset\n ? new Transaction().add(\n SystemProgram.transfer({\n fromPubkey: fromPublicKey,\n lamports: assetValue.getBaseValue(\"number\"),\n toPubkey: new PublicKey(recipient),\n }),\n )\n : assetValue.address\n ? await createSolanaTokenTransaction({\n amount: assetValue.getBaseValue(\"number\"),\n connection,\n decimals: assetValue.decimal as number,\n from: fromPublicKey,\n recipient,\n tokenAddress: assetValue.address,\n })\n : undefined;\n\n if (!transaction) {\n throw new SwapKitError(\"core_transaction_invalid_sender_address\");\n }\n\n if (memo) transaction.add(createMemoInstruction(memo));\n\n const blockHash = await connection.getLatestBlockhash();\n transaction.recentBlockhash = blockHash.blockhash;\n transaction.feePayer = fromPublicKey;\n\n return transaction;\n };\n}\n\nfunction transfer(getConnection: () => Promise<Connection>) {\n return async ({\n recipient,\n assetValue,\n fromKeypair,\n memo,\n isProgramDerivedAddress,\n }: WalletTxParams & {\n assetValue: AssetValue;\n fromKeypair: Keypair;\n isProgramDerivedAddress?: boolean;\n }) => {\n const { sendAndConfirmTransaction } = await import(\"@solana/web3.js\");\n const connection = await getConnection();\n\n const transaction = await createSolanaTransaction(getConnection)({\n recipient,\n assetValue,\n memo,\n fromPublicKey: fromKeypair.publicKey,\n isProgramDerivedAddress,\n });\n\n return sendAndConfirmTransaction(connection, transaction, [fromKeypair]);\n };\n}\n\nfunction broadcastTransaction(getConnection: () => Promise<Connection>) {\n return async (transaction: Transaction) => {\n const connection = await getConnection();\n return connection.sendRawTransaction(transaction.serialize());\n };\n}\n\nasync function createKeysForPath({\n phrase,\n derivationPath = DerivationPath.SOL,\n}: { phrase: string; derivationPath?: string }) {\n const { HDKey } = await import(\"micro-key-producer/slip10.js\");\n const { mnemonicToSeedSync } = await import(\"@scure/bip39\");\n const { Keypair } = await import(\"@solana/web3.js\");\n const seed = mnemonicToSeedSync(phrase);\n const hdKey = HDKey.fromMasterSeed(seed);\n\n return Keypair.fromSeed(hdKey.derive(derivationPath, true).privateKey);\n}\n\nfunction getAddressFromKeys(keypair: Keypair) {\n return keypair.publicKey.toString();\n}\n\nasync function getTokenBalances({\n connection,\n address,\n}: { connection: Connection; address: string }) {\n const { PublicKey } = await import(\"@solana/web3.js\");\n const { TOKEN_PROGRAM_ID } = await import(\"@solana/spl-token\");\n const { TokenListProvider } = await import(\"@solana/spl-token-registry\");\n\n const tokenAccounts = await connection.getParsedTokenAccountsByOwner(new PublicKey(address), {\n programId: TOKEN_PROGRAM_ID,\n });\n const tokenListProvider = new TokenListProvider();\n const tokenListContainer = await tokenListProvider.resolve();\n const tokenList = tokenListContainer.filterByChainId(101).getList();\n\n // Group token balances by mint address\n const tokenBalanceMap = new Map<string, { amount: bigint; decimal: number; symbol: string }>();\n\n for await (const tokenAccountInfo of tokenAccounts.value) {\n const accountInfo = tokenAccountInfo.account.data.parsed.info;\n const mintAddress = accountInfo.mint;\n const decimal = accountInfo.tokenAmount.decimals;\n const amount = BigInt(accountInfo.tokenAmount.amount);\n\n if (amount <= BigInt(0)) continue;\n\n const tokenInfo = tokenList.find((token: TokenInfo) => token.address === mintAddress);\n const tokenSymbol = tokenInfo?.symbol ?? \"UNKNOWN\";\n const existing = tokenBalanceMap.get(mintAddress);\n\n tokenBalanceMap.set(mintAddress, {\n amount: existing ? existing.amount + amount : amount,\n decimal,\n symbol: tokenSymbol,\n });\n }\n\n // Convert grouped balances to AssetValue array\n const tokenBalances: AssetValue[] = Array.from(tokenBalanceMap.entries()).map(\n ([mintAddress, { amount, decimal, symbol }]) =>\n new AssetValue({\n value: SwapKitNumber.fromBigInt(amount, decimal),\n decimal,\n identifier: `${Chain.Solana}.${symbol}${mintAddress ? `-${mintAddress.toString()}` : \"\"}`,\n }),\n );\n\n return tokenBalances;\n}\n\nfunction getBalance(getConnection: () => Promise<Connection>) {\n return async (address: string) => {\n const { PublicKey } = await import(\"@solana/web3.js\");\n const connection = await getConnection();\n const SOLBalance = await connection.getBalance(new PublicKey(address));\n const tokenBalances = await getTokenBalances({ connection, address });\n\n return [AssetValue.from({ chain: Chain.Solana, value: BigInt(SOLBalance) }), ...tokenBalances];\n };\n}\n"
5
+ "import type {\n Connection,\n PublicKey,\n Signer,\n Transaction,\n TransactionInstruction,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport {\n AssetValue,\n BaseDecimal,\n Chain,\n DerivationPath,\n type DerivationPathArray,\n type GenericCreateTransactionParams,\n NetworkDerivationPath,\n SKConfig,\n SwapKitError,\n derivationPathToString,\n updateDerivationPath,\n} from \"@swapkit/helpers\";\nimport { P } from \"ts-pattern\";\nimport { match } from \"ts-pattern\";\nimport type { SolanaCreateTransactionParams, SolanaProvider, SolanaTransferParams } from \".\";\nimport { getBalance } from \"../utils\";\n\ntype SolanaSigner = SolanaProvider | Signer;\n\nexport async function getSolanaAddressValidator() {\n const { PublicKey } = await import(\"@solana/web3.js\");\n\n return (address: string) => {\n try {\n const pubkey = new PublicKey(address);\n return PublicKey.isOnCurve(pubkey.toBytes());\n } catch (_) {\n return false;\n }\n };\n}\n\nexport async function getSolanaToolbox(\n toolboxParams?:\n | { signer?: SolanaSigner }\n | { phrase?: string; index?: number; derivationPath?: DerivationPathArray },\n) {\n const index = toolboxParams && \"index\" in toolboxParams ? toolboxParams.index || 0 : 0;\n const derivationPath = derivationPathToString(\n toolboxParams && \"derivationPath\" in toolboxParams && toolboxParams.derivationPath\n ? toolboxParams.derivationPath\n : updateDerivationPath(NetworkDerivationPath[Chain.Solana], { index }),\n );\n\n const signer = await match(toolboxParams)\n .with({ phrase: P.string }, ({ phrase }) => createKeysForPath({ phrase, derivationPath }))\n .with({ signer: P.any }, ({ signer }) => signer)\n .otherwise(() => undefined);\n\n function getAddress() {\n return signer?.publicKey ? getAddressFromPubKey(signer.publicKey) : \"\";\n }\n\n return {\n getConnection,\n getAddress,\n createKeysForPath,\n getAddressFromPubKey,\n getPubkeyFromAddress,\n createTransaction: createTransaction(getConnection),\n createTransactionFromInstructions,\n getBalance: getBalance(Chain.Solana),\n transfer: transfer(getConnection, signer),\n broadcastTransaction: broadcastTransaction(getConnection),\n getAddressValidator: getSolanaAddressValidator,\n signTransaction: signTransaction(getConnection, signer),\n estimateTransactionFee: estimateTransactionFee(getConnection),\n };\n}\n\nfunction estimateTransactionFee(getConnection: () => Promise<Connection>) {\n return async ({\n recipient,\n assetValue,\n memo,\n isProgramDerivedAddress,\n sender,\n }: Omit<GenericCreateTransactionParams, \"feeRate\"> & {\n isProgramDerivedAddress?: boolean;\n }) => {\n const connection = await getConnection();\n\n const transaction = await createTransaction(getConnection)({\n recipient,\n assetValue,\n memo,\n isProgramDerivedAddress,\n sender,\n });\n\n const message = transaction.compileMessage();\n const feeInLamports = await connection.getFeeForMessage(message);\n\n if (feeInLamports.value === null) {\n throw new SwapKitError(\n \"toolbox_solana_fee_estimation_failed\",\n \"Could not estimate Solana fee.\",\n );\n }\n\n return AssetValue.from({\n chain: Chain.Solana,\n value: feeInLamports.value,\n fromBaseDecimal: BaseDecimal[Chain.Solana],\n });\n };\n}\n\nasync function getConnection() {\n const { Connection } = await import(\"@solana/web3.js\");\n return new Connection(SKConfig.get(\"rpcUrls\").SOL, \"confirmed\");\n}\n\nfunction createAssetTransaction(getConnection: () => Promise<Connection>) {\n return async ({\n assetValue,\n recipient,\n sender,\n isProgramDerivedAddress,\n }: SolanaCreateTransactionParams) => {\n const connection = await getConnection();\n const fromPubkey = await getPubkeyFromAddress(sender);\n\n if (assetValue.isGasAsset) {\n const { Transaction, SystemProgram, PublicKey } = await import(\"@solana/web3.js\");\n\n return new Transaction().add(\n SystemProgram.transfer({\n fromPubkey: fromPubkey,\n lamports: assetValue.getBaseValue(\"number\"),\n toPubkey: new PublicKey(recipient),\n }),\n );\n }\n if (assetValue.address) {\n return createSolanaTokenTransaction({\n amount: assetValue.getBaseValue(\"number\"),\n connection,\n decimals: assetValue.decimal as number,\n from: fromPubkey,\n recipient,\n tokenAddress: assetValue.address,\n isProgramDerivedAddress,\n });\n }\n\n return undefined;\n };\n}\n\nasync function createSolanaTokenTransaction({\n tokenAddress,\n recipient,\n from,\n connection,\n amount,\n decimals,\n isProgramDerivedAddress,\n}: {\n tokenAddress: string;\n recipient: string;\n from: PublicKey;\n connection: Connection;\n amount: number;\n decimals: number;\n isProgramDerivedAddress?: boolean;\n}) {\n const {\n getAssociatedTokenAddress,\n getAccount,\n createAssociatedTokenAccountInstruction,\n createTransferCheckedInstruction,\n } = await import(\"@solana/spl-token\");\n const { Transaction, PublicKey } = await import(\"@solana/web3.js\");\n\n const transaction = new Transaction();\n const tokenPublicKey = new PublicKey(tokenAddress);\n const fromSPLAddress = await getAssociatedTokenAddress(tokenPublicKey, from);\n\n const recipientPublicKey = new PublicKey(recipient);\n const recipientSPLAddress = await getAssociatedTokenAddress(\n tokenPublicKey,\n recipientPublicKey,\n isProgramDerivedAddress,\n );\n\n let recipientAccountExists = false;\n try {\n await getAccount(connection, recipientSPLAddress);\n recipientAccountExists = true;\n } catch (_) {\n // Recipient's associated token account doesn't exist\n }\n\n if (!recipientAccountExists) {\n transaction.add(\n createAssociatedTokenAccountInstruction(\n from,\n recipientSPLAddress,\n recipientPublicKey,\n tokenPublicKey,\n ),\n );\n }\n\n transaction.add(\n createTransferCheckedInstruction(\n fromSPLAddress,\n tokenPublicKey,\n recipientSPLAddress,\n from,\n amount,\n decimals,\n ),\n );\n\n return transaction;\n}\n\nfunction createTransaction(getConnection: () => Promise<Connection>) {\n return async ({\n recipient,\n assetValue,\n memo,\n isProgramDerivedAddress,\n sender,\n }: SolanaCreateTransactionParams) => {\n const { createMemoInstruction } = await import(\"@solana/spl-memo\");\n\n const fromPubkey = await getPubkeyFromAddress(sender);\n const validateAddress = await getSolanaAddressValidator();\n\n if (!(isProgramDerivedAddress || validateAddress(recipient))) {\n throw new SwapKitError(\"core_transaction_invalid_recipient_address\");\n }\n\n const connection = await getConnection();\n const transaction = await createAssetTransaction(getConnection)({\n assetValue,\n recipient,\n sender,\n isProgramDerivedAddress,\n });\n\n if (!transaction) {\n throw new SwapKitError(\"core_transaction_invalid_sender_address\");\n }\n\n if (memo) transaction.add(createMemoInstruction(memo));\n\n const blockHash = await connection.getLatestBlockhash();\n transaction.recentBlockhash = blockHash.blockhash;\n transaction.feePayer = fromPubkey;\n\n return transaction;\n };\n}\n\nasync function createTransactionFromInstructions({\n instructions,\n}: { instructions: TransactionInstruction[]; isProgramDerivedAddress?: boolean }) {\n const { Transaction } = await import(\"@solana/web3.js\");\n const transaction = new Transaction().add(...instructions);\n\n if (!transaction) {\n throw new SwapKitError(\"core_transaction_invalid_sender_address\");\n }\n\n return transaction;\n}\n\nfunction transfer(getConnection: () => Promise<Connection>, signer?: SolanaSigner) {\n return async ({ recipient, assetValue, memo, isProgramDerivedAddress }: SolanaTransferParams) => {\n if (!signer) {\n throw new SwapKitError(\"core_transaction_invalid_sender_address\");\n }\n\n const sender =\n signer.publicKey?.toString() ??\n (await (signer as SolanaProvider).connect()).publicKey.toString();\n\n const transaction = await createTransaction(getConnection)({\n recipient,\n assetValue,\n memo,\n isProgramDerivedAddress,\n sender,\n });\n\n if (\"connect\" in signer) {\n const signedTransaction = await signer.signTransaction(transaction);\n return broadcastTransaction(getConnection)(signedTransaction);\n }\n\n transaction.sign(signer);\n\n return broadcastTransaction(getConnection)(transaction);\n };\n}\n\nfunction broadcastTransaction(getConnection: () => Promise<Connection>) {\n return async (transaction: Transaction | VersionedTransaction) => {\n const connection = await getConnection();\n return connection.sendRawTransaction(transaction.serialize());\n };\n}\n\nfunction signTransaction(getConnection: () => Promise<Connection>, signer?: SolanaSigner) {\n return async (transaction: Transaction | VersionedTransaction) => {\n const { VersionedTransaction } = await import(\"@solana/web3.js\");\n if (!signer) {\n throw new SwapKitError(\"toolbox_solana_no_signer\");\n }\n\n if (!(transaction instanceof VersionedTransaction)) {\n const connection = await getConnection();\n\n const blockHash = await connection.getLatestBlockhash();\n transaction.recentBlockhash = blockHash.blockhash;\n transaction.feePayer = signer.publicKey || undefined;\n }\n\n if (\"connect\" in signer) {\n const signedTransaction = await signer.signTransaction(transaction);\n return signedTransaction;\n }\n\n await transaction.sign([signer] as Signer & Signer[]);\n return transaction;\n };\n}\n\nexport async function createKeysForPath({\n phrase,\n derivationPath = DerivationPath.SOL,\n}: { phrase: string; derivationPath?: string }) {\n const { HDKey } = await import(\"micro-key-producer/slip10.js\");\n const { mnemonicToSeedSync } = await import(\"@scure/bip39\");\n const { Keypair } = await import(\"@solana/web3.js\");\n const seed = mnemonicToSeedSync(phrase);\n const hdKey = HDKey.fromMasterSeed(seed);\n\n return Keypair.fromSeed(hdKey.derive(derivationPath, true).privateKey);\n}\n\nfunction getAddressFromPubKey(publicKey: PublicKey) {\n return publicKey.toString();\n}\n\nasync function getPubkeyFromAddress(address: string) {\n const { PublicKey } = await import(\"@solana/web3.js\");\n return new PublicKey(address);\n}\n"
6
6
  ],
7
- "mappings": "kHAUO,IARP,8BAUA,eAAsB,CAAmB,EAAG,CAC1C,IAAQ,aAAc,KAAa,2BAEnC,MAAO,CAAC,IAAoB,CAC1B,GAAI,CACF,IAAM,EAAS,IAAI,EAAU,CAAO,EACpC,OAAO,EAAU,UAAU,EAAO,QAAQ,CAAC,QACpC,EAAP,CACA,MAAO,KAKb,eAAsB,CAA4B,EAChD,eACA,YACA,OACA,aACA,SACA,YAQC,CACD,IACE,4BACA,aACA,0CACA,oCACE,KAAa,8BACT,cAAa,aAAc,KAAa,2BAE1C,EAAc,IAAI,EAClB,EAAiB,IAAI,EAAU,CAAY,EAC3C,EAAiB,MAAM,EAA0B,EAAgB,CAAI,EAErE,EAAqB,IAAI,EAAU,CAAS,EAC5C,EAAsB,MAAM,EAA0B,EAAgB,CAAkB,EAE1F,EAAyB,GAC7B,GAAI,CACF,MAAM,EAAW,EAAY,CAAmB,EAChD,EAAyB,SAClB,EAAP,EAIF,IAAK,EACH,EAAY,IACV,EACE,EACA,EACA,EACA,CACF,CACF,EAcF,OAXA,EAAY,IACV,EACE,EACA,EACA,EACA,EACA,EACA,CACF,CACF,EAEO,EAGF,IAAM,EAAa,IAAM,CAC9B,eAAe,CAAa,EAAG,CAC7B,IAAQ,cAAe,KAAa,2BACpC,OAAO,IAAI,EAAW,WAAS,IAAI,SAAS,EAAE,IAAK,WAAW,EAGhE,MAAO,CACL,gBACA,oBACA,qBACA,wBAAyB,EAAwB,CAAa,EAC9D,WAAY,EAAW,CAAa,EACpC,SAAU,EAAS,CAAa,EAChC,qBAAsB,EAAqB,CAAa,EACxD,qBACF,GAGF,SAAS,CAAuB,CAAC,EAA0C,CACzE,MAAO,QACL,YACA,aACA,gBACA,OACA,6BAKI,CACJ,IAAQ,yBAA0B,KAAa,6BACvC,cAAa,YAAW,iBAAkB,KAAa,2BACzD,EAAkB,MAAM,EAAoB,EAElD,KAAM,GAA2B,EAAgB,CAAS,GACxD,MAAM,IAAI,eAAa,4CAA4C,EAGrE,IAAM,EAAa,MAAM,EAAc,EAEjC,EAAc,EAAW,WAC3B,IAAI,EAAY,EAAE,IAChB,EAAc,SAAS,CACrB,WAAY,EACZ,SAAU,EAAW,aAAa,QAAQ,EAC1C,SAAU,IAAI,EAAU,CAAS,CACnC,CAAC,CACH,EACA,EAAW,QACT,MAAM,EAA6B,CACjC,OAAQ,EAAW,aAAa,QAAQ,EACxC,aACA,SAAU,EAAW,QACrB,KAAM,EACN,YACA,aAAc,EAAW,OAC3B,CAAC,EACD,OAEN,IAAK,EACH,MAAM,IAAI,eAAa,yCAAyC,EAGlE,GAAI,EAAM,EAAY,IAAI,EAAsB,CAAI,CAAC,EAErD,IAAM,EAAY,MAAM,EAAW,mBAAmB,EAItD,OAHA,EAAY,gBAAkB,EAAU,UACxC,EAAY,SAAW,EAEhB,GAIX,SAAS,CAAQ,CAAC,EAA0C,CAC1D,MAAO,QACL,YACA,aACA,cACA,OACA,6BAKI,CACJ,IAAQ,6BAA8B,KAAa,2BAC7C,EAAa,MAAM,EAAc,EAEjC,EAAc,MAAM,EAAwB,CAAa,EAAE,CAC/D,YACA,aACA,OACA,cAAe,EAAY,UAC3B,yBACF,CAAC,EAED,OAAO,EAA0B,EAAY,EAAa,CAAC,CAAW,CAAC,GAI3E,SAAS,CAAoB,CAAC,EAA0C,CACtE,MAAO,OAAO,IAA6B,CAEzC,OADmB,MAAM,EAAc,GACrB,mBAAmB,EAAY,UAAU,CAAC,GAIhE,eAAe,CAAiB,EAC9B,SACA,iBAAiB,iBAAe,KACc,CAC9C,IAAQ,SAAU,KAAa,yCACvB,sBAAuB,KAAa,yBACpC,WAAY,KAAa,2BAC3B,EAAO,EAAmB,CAAM,EAChC,EAAQ,EAAM,eAAe,CAAI,EAEvC,OAAO,EAAQ,SAAS,EAAM,OAAO,EAAgB,EAAI,EAAE,UAAU,EAGvE,SAAS,CAAkB,CAAC,EAAkB,CAC5C,OAAO,EAAQ,UAAU,SAAS,EAGpC,eAAe,CAAgB,EAC7B,aACA,WAC8C,CAC9C,IAAQ,aAAc,KAAa,4BAC3B,oBAAqB,KAAa,8BAClC,qBAAsB,KAAa,sCAErC,EAAgB,MAAM,EAAW,8BAA8B,IAAI,EAAU,CAAO,EAAG,CAC3F,UAAW,CACb,CAAC,EAGK,GADqB,MADD,IAAI,EAAkB,EACG,QAAQ,GACtB,gBAAgB,GAAG,EAAE,QAAQ,EAG5D,EAAkB,IAAI,IAE5B,cAAiB,KAAoB,EAAc,MAAO,CACxD,IAAM,EAAc,EAAiB,QAAQ,KAAK,OAAO,KACnD,EAAc,EAAY,KAC1B,EAAU,EAAY,YAAY,SAClC,EAAS,OAAO,EAAY,YAAY,MAAM,EAEpD,GAAI,GAAU,OAAO,CAAC,EAAG,SAGzB,IAAM,EADY,EAAU,KAAK,CAAC,IAAqB,EAAM,UAAY,CAAW,GACrD,QAAU,UACnC,EAAW,EAAgB,IAAI,CAAW,EAEhD,EAAgB,IAAI,EAAa,CAC/B,OAAQ,EAAW,EAAS,OAAS,EAAS,EAC9C,UACA,OAAQ,CACV,CAAC,EAaH,OAToC,MAAM,KAAK,EAAgB,QAAQ,CAAC,EAAE,IACxE,EAAE,GAAe,SAAQ,UAAS,aAChC,IAAI,aAAW,CACb,MAAO,gBAAc,WAAW,EAAQ,CAAO,EAC/C,UACA,WAAY,GAAG,QAAM,UAAU,IAAS,EAAc,IAAI,EAAY,SAAS,IAAM,IACvF,CAAC,CACL,EAKF,SAAS,CAAU,CAAC,EAA0C,CAC5D,MAAO,OAAO,IAAoB,CAChC,IAAQ,aAAc,KAAa,2BAC7B,EAAa,MAAM,EAAc,EACjC,EAAa,MAAM,EAAW,WAAW,IAAI,EAAU,CAAO,CAAC,EAC/D,EAAgB,MAAM,EAAiB,CAAE,aAAY,SAAQ,CAAC,EAEpE,MAAO,CAAC,aAAW,KAAK,CAAE,MAAO,QAAM,OAAQ,MAAO,OAAO,CAAU,CAAE,CAAC,EAAG,GAAG,CAAa",
8
- "debugId": "857DCD4407AD404264756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "10DF173C02A9BC6564756E2164756E21",
9
9
  "names": []
10
10
  }
@@ -1,3 +1,3 @@
1
- import{a as q,b as O}from"../chunk-tvrdndbw.js";import{AssetValue as $,Chain as v,DerivationPath as b,SKConfig as H,SwapKitError as Z,SwapKitNumber as _}from"@swapkit/helpers";async function G(){let{PublicKey:T}=await import("@solana/web3.js");return(p)=>{try{let h=new T(p);return T.isOnCurve(h.toBytes())}catch(h){return!1}}}async function P({tokenAddress:T,recipient:p,from:h,connection:S,amount:W,decimals:j}){let{getAssociatedTokenAddress:R,getAccount:z,createAssociatedTokenAccountInstruction:U,createTransferCheckedInstruction:g}=await import("@solana/spl-token"),{Transaction:L,PublicKey:E}=await import("@solana/web3.js"),x=new L,w=new E(T),J=await R(w,h),F=new E(p),Q=await R(w,F),X=!1;try{await z(S,Q),X=!0}catch(Y){}if(!X)x.add(U(h,Q,F,w));return x.add(g(J,w,Q,h,W,j)),x}var A=()=>{async function T(){let{Connection:p}=await import("@solana/web3.js");return new p(H.get("rpcUrls").SOL,"confirmed")}return{getConnection:T,createKeysForPath:B,getAddressFromKeys:I,createSolanaTransaction:M(T),getBalance:l(T),transfer:y(T),broadcastTransaction:D(T),getAddressValidator:G}};function M(T){return async({recipient:p,assetValue:h,fromPublicKey:S,memo:W,isProgramDerivedAddress:j})=>{let{createMemoInstruction:R}=await import("@solana/spl-memo"),{Transaction:z,PublicKey:U,SystemProgram:g}=await import("@solana/web3.js"),L=await G();if(!(j||L(p)))throw new Z("core_transaction_invalid_recipient_address");let E=await T(),x=h.isGasAsset?new z().add(g.transfer({fromPubkey:S,lamports:h.getBaseValue("number"),toPubkey:new U(p)})):h.address?await P({amount:h.getBaseValue("number"),connection:E,decimals:h.decimal,from:S,recipient:p,tokenAddress:h.address}):void 0;if(!x)throw new Z("core_transaction_invalid_sender_address");if(W)x.add(R(W));let w=await E.getLatestBlockhash();return x.recentBlockhash=w.blockhash,x.feePayer=S,x}}function y(T){return async({recipient:p,assetValue:h,fromKeypair:S,memo:W,isProgramDerivedAddress:j})=>{let{sendAndConfirmTransaction:R}=await import("@solana/web3.js"),z=await T(),U=await M(T)({recipient:p,assetValue:h,memo:W,fromPublicKey:S.publicKey,isProgramDerivedAddress:j});return R(z,U,[S])}}function D(T){return async(p)=>{return(await T()).sendRawTransaction(p.serialize())}}async function B({phrase:T,derivationPath:p=b.SOL}){let{HDKey:h}=await import("micro-key-producer/slip10.js"),{mnemonicToSeedSync:S}=await import("@scure/bip39"),{Keypair:W}=await import("@solana/web3.js"),j=S(T),R=h.fromMasterSeed(j);return W.fromSeed(R.derive(p,!0).privateKey)}function I(T){return T.publicKey.toString()}async function V({connection:T,address:p}){let{PublicKey:h}=await import("@solana/web3.js"),{TOKEN_PROGRAM_ID:S}=await import("@solana/spl-token"),{TokenListProvider:W}=await import("@solana/spl-token-registry"),j=await T.getParsedTokenAccountsByOwner(new h(p),{programId:S}),U=(await new W().resolve()).filterByChainId(101).getList(),g=new Map;for await(let E of j.value){let x=E.account.data.parsed.info,w=x.mint,J=x.tokenAmount.decimals,F=BigInt(x.tokenAmount.amount);if(F<=BigInt(0))continue;let X=U.find((N)=>N.address===w)?.symbol??"UNKNOWN",Y=g.get(w);g.set(w,{amount:Y?Y.amount+F:F,decimal:J,symbol:X})}return Array.from(g.entries()).map(([E,{amount:x,decimal:w,symbol:J}])=>new $({value:_.fromBigInt(x,w),decimal:w,identifier:`${v.Solana}.${J}${E?`-${E.toString()}`:""}`}))}function l(T){return async(p)=>{let{PublicKey:h}=await import("@solana/web3.js"),S=await T(),W=await S.getBalance(new h(p)),j=await V({connection:S,address:p});return[$.from({chain:v.Solana,value:BigInt(W)}),...j]}}export{G as getAddressValidator,P as createSolanaTokenTransaction,A as SOLToolbox};
1
+ import{b as B}from"../chunk-0h4xdrwz.js";import{c as S,d as f}from"../chunk-p1kdg37m.js";import{AssetValue as N,BaseDecimal as Q,Chain as G,DerivationPath as X,NetworkDerivationPath as Y,SKConfig as Z,SwapKitError as R,derivationPathToString as _,updateDerivationPath as $}from"@swapkit/helpers";import{P as V}from"ts-pattern";import{match as v}from"ts-pattern";async function F(){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 g(a){let T=a&&"index"in a?a.index||0:0,l=_(a&&"derivationPath"in a&&a.derivationPath?a.derivationPath:$(Y[G.Solana],{index:T})),p=await v(a).with({phrase:V.string},({phrase:o})=>d({phrase:o,derivationPath:l})).with({signer:V.any},({signer:o})=>o).otherwise(()=>{return});function y(){return p?.publicKey?z(p.publicKey):""}return{getConnection:h,getAddress:y,createKeysForPath:d,getAddressFromPubKey:z,getPubkeyFromAddress:u,createTransaction:j(h),createTransactionFromInstructions:D,getBalance:B(G.Solana),transfer:k(h,p),broadcastTransaction:W(h),getAddressValidator:F,signTransaction:s(h,p),estimateTransactionFee:I(h)}}function I(a){return async({recipient:T,assetValue:l,memo:p,isProgramDerivedAddress:y,sender:o})=>{let P=await a(),b=(await j(a)({recipient:T,assetValue:l,memo:p,isProgramDerivedAddress:y,sender:o})).compileMessage(),m=await P.getFeeForMessage(b);if(m.value===null)throw new R("toolbox_solana_fee_estimation_failed","Could not estimate Solana fee.");return N.from({chain:G.Solana,value:m.value,fromBaseDecimal:Q[G.Solana]})}}async function h(){let{Connection:a}=await import("@solana/web3.js");return new a(Z.get("rpcUrls").SOL,"confirmed")}function H(a){return async({assetValue:T,recipient:l,sender:p,isProgramDerivedAddress:y})=>{let o=await a(),P=await u(p);if(T.isGasAsset){let{Transaction:x,SystemProgram:b,PublicKey:m}=await import("@solana/web3.js");return new x().add(b.transfer({fromPubkey:P,lamports:T.getBaseValue("number"),toPubkey:new m(l)}))}if(T.address)return K({amount:T.getBaseValue("number"),connection:o,decimals:T.decimal,from:P,recipient:l,tokenAddress:T.address,isProgramDerivedAddress:y});return}}async function K({tokenAddress:a,recipient:T,from:l,connection:p,amount:y,decimals:o,isProgramDerivedAddress:P}){let{getAssociatedTokenAddress:x,getAccount:b,createAssociatedTokenAccountInstruction:m,createTransferCheckedInstruction:O}=await import("@solana/spl-token"),{Transaction:q,PublicKey:A}=await import("@solana/web3.js"),M=new q,w=new A(a),J=await x(w,l),L=new A(T),E=await x(w,L,P),U=!1;try{await b(p,E),U=!0}catch(C){}if(!U)M.add(m(l,E,L,w));return M.add(O(J,w,E,l,y,o)),M}function j(a){return async({recipient:T,assetValue:l,memo:p,isProgramDerivedAddress:y,sender:o})=>{let{createMemoInstruction:P}=await import("@solana/spl-memo"),x=await u(o),b=await F();if(!(y||b(T)))throw new R("core_transaction_invalid_recipient_address");let m=await a(),O=await H(a)({assetValue:l,recipient:T,sender:o,isProgramDerivedAddress:y});if(!O)throw new R("core_transaction_invalid_sender_address");if(p)O.add(P(p));let q=await m.getLatestBlockhash();return O.recentBlockhash=q.blockhash,O.feePayer=x,O}}async function D({instructions:a}){let{Transaction:T}=await import("@solana/web3.js"),l=new T().add(...a);if(!l)throw new R("core_transaction_invalid_sender_address");return l}function k(a,T){return async({recipient:l,assetValue:p,memo:y,isProgramDerivedAddress:o})=>{if(!T)throw new R("core_transaction_invalid_sender_address");let P=T.publicKey?.toString()??(await T.connect()).publicKey.toString(),x=await j(a)({recipient:l,assetValue:p,memo:y,isProgramDerivedAddress:o,sender:P});if("connect"in T){let b=await T.signTransaction(x);return W(a)(b)}return x.sign(T),W(a)(x)}}function W(a){return async(T)=>{return(await a()).sendRawTransaction(T.serialize())}}function s(a,T){return async(l)=>{let{VersionedTransaction:p}=await import("@solana/web3.js");if(!T)throw new R("toolbox_solana_no_signer");if(!(l instanceof p)){let o=await(await a()).getLatestBlockhash();l.recentBlockhash=o.blockhash,l.feePayer=T.publicKey||void 0}if("connect"in T)return await T.signTransaction(l);return await l.sign([T]),l}}async function d({phrase:a,derivationPath:T=X.SOL}){let{HDKey:l}=await import("micro-key-producer/slip10.js"),{mnemonicToSeedSync:p}=await import("@scure/bip39"),{Keypair:y}=await import("@solana/web3.js"),o=p(a),P=l.fromMasterSeed(o);return y.fromSeed(P.derive(T,!0).privateKey)}function z(a){return a.toString()}async function u(a){let{PublicKey:T}=await import("@solana/web3.js");return new T(a)}export{g as getSolanaToolbox,F as getSolanaAddressValidator,d as createKeysForPath};
2
2
 
3
- //# debugId=049A2B1F2EFC50B264756E2164756E21
3
+ //# debugId=96EDFBAA436A5BDE64756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/solana/toolbox.ts"],
4
4
  "sourcesContent": [
5
- "import type { TokenInfo } from \"@solana/spl-token-registry\";\nimport type { Connection, Keypair, PublicKey, Transaction } from \"@solana/web3.js\";\nimport {\n AssetValue,\n Chain,\n DerivationPath,\n SKConfig,\n SwapKitError,\n SwapKitNumber,\n type WalletTxParams,\n} from \"@swapkit/helpers\";\n\nexport async function getAddressValidator() {\n const { PublicKey } = await import(\"@solana/web3.js\");\n\n return (address: string) => {\n try {\n const pubkey = new PublicKey(address);\n return PublicKey.isOnCurve(pubkey.toBytes());\n } catch (_) {\n return false;\n }\n };\n}\n\nexport async function createSolanaTokenTransaction({\n tokenAddress,\n recipient,\n from,\n connection,\n amount,\n decimals,\n}: {\n tokenAddress: string;\n recipient: string;\n from: PublicKey;\n connection: Connection;\n amount: number;\n decimals: number;\n}) {\n const {\n getAssociatedTokenAddress,\n getAccount,\n createAssociatedTokenAccountInstruction,\n createTransferCheckedInstruction,\n } = await import(\"@solana/spl-token\");\n const { Transaction, PublicKey } = await import(\"@solana/web3.js\");\n\n const transaction = new Transaction();\n const tokenPublicKey = new PublicKey(tokenAddress);\n const fromSPLAddress = await getAssociatedTokenAddress(tokenPublicKey, from);\n\n const recipientPublicKey = new PublicKey(recipient);\n const recipientSPLAddress = await getAssociatedTokenAddress(tokenPublicKey, recipientPublicKey);\n\n let recipientAccountExists = false;\n try {\n await getAccount(connection, recipientSPLAddress);\n recipientAccountExists = true;\n } catch (_) {\n // Recipient's associated token account doesn't exist\n }\n\n if (!recipientAccountExists) {\n transaction.add(\n createAssociatedTokenAccountInstruction(\n from,\n recipientSPLAddress,\n recipientPublicKey,\n tokenPublicKey,\n ),\n );\n }\n\n transaction.add(\n createTransferCheckedInstruction(\n fromSPLAddress,\n tokenPublicKey,\n recipientSPLAddress,\n from,\n amount,\n decimals,\n ),\n );\n\n return transaction;\n}\n\nexport const SOLToolbox = () => {\n async function getConnection() {\n const { Connection } = await import(\"@solana/web3.js\");\n return new Connection(SKConfig.get(\"rpcUrls\").SOL, \"confirmed\");\n }\n\n return {\n getConnection,\n createKeysForPath,\n getAddressFromKeys,\n createSolanaTransaction: createSolanaTransaction(getConnection),\n getBalance: getBalance(getConnection),\n transfer: transfer(getConnection),\n broadcastTransaction: broadcastTransaction(getConnection),\n getAddressValidator,\n };\n};\n\nfunction createSolanaTransaction(getConnection: () => Promise<Connection>) {\n return async ({\n recipient,\n assetValue,\n fromPublicKey,\n memo,\n isProgramDerivedAddress,\n }: WalletTxParams & {\n assetValue: AssetValue;\n fromPublicKey: PublicKey;\n isProgramDerivedAddress?: boolean;\n }) => {\n const { createMemoInstruction } = await import(\"@solana/spl-memo\");\n const { Transaction, PublicKey, SystemProgram } = await import(\"@solana/web3.js\");\n const validateAddress = await getAddressValidator();\n\n if (!(isProgramDerivedAddress || validateAddress(recipient))) {\n throw new SwapKitError(\"core_transaction_invalid_recipient_address\");\n }\n\n const connection = await getConnection();\n\n const transaction = assetValue.isGasAsset\n ? new Transaction().add(\n SystemProgram.transfer({\n fromPubkey: fromPublicKey,\n lamports: assetValue.getBaseValue(\"number\"),\n toPubkey: new PublicKey(recipient),\n }),\n )\n : assetValue.address\n ? await createSolanaTokenTransaction({\n amount: assetValue.getBaseValue(\"number\"),\n connection,\n decimals: assetValue.decimal as number,\n from: fromPublicKey,\n recipient,\n tokenAddress: assetValue.address,\n })\n : undefined;\n\n if (!transaction) {\n throw new SwapKitError(\"core_transaction_invalid_sender_address\");\n }\n\n if (memo) transaction.add(createMemoInstruction(memo));\n\n const blockHash = await connection.getLatestBlockhash();\n transaction.recentBlockhash = blockHash.blockhash;\n transaction.feePayer = fromPublicKey;\n\n return transaction;\n };\n}\n\nfunction transfer(getConnection: () => Promise<Connection>) {\n return async ({\n recipient,\n assetValue,\n fromKeypair,\n memo,\n isProgramDerivedAddress,\n }: WalletTxParams & {\n assetValue: AssetValue;\n fromKeypair: Keypair;\n isProgramDerivedAddress?: boolean;\n }) => {\n const { sendAndConfirmTransaction } = await import(\"@solana/web3.js\");\n const connection = await getConnection();\n\n const transaction = await createSolanaTransaction(getConnection)({\n recipient,\n assetValue,\n memo,\n fromPublicKey: fromKeypair.publicKey,\n isProgramDerivedAddress,\n });\n\n return sendAndConfirmTransaction(connection, transaction, [fromKeypair]);\n };\n}\n\nfunction broadcastTransaction(getConnection: () => Promise<Connection>) {\n return async (transaction: Transaction) => {\n const connection = await getConnection();\n return connection.sendRawTransaction(transaction.serialize());\n };\n}\n\nasync function createKeysForPath({\n phrase,\n derivationPath = DerivationPath.SOL,\n}: { phrase: string; derivationPath?: string }) {\n const { HDKey } = await import(\"micro-key-producer/slip10.js\");\n const { mnemonicToSeedSync } = await import(\"@scure/bip39\");\n const { Keypair } = await import(\"@solana/web3.js\");\n const seed = mnemonicToSeedSync(phrase);\n const hdKey = HDKey.fromMasterSeed(seed);\n\n return Keypair.fromSeed(hdKey.derive(derivationPath, true).privateKey);\n}\n\nfunction getAddressFromKeys(keypair: Keypair) {\n return keypair.publicKey.toString();\n}\n\nasync function getTokenBalances({\n connection,\n address,\n}: { connection: Connection; address: string }) {\n const { PublicKey } = await import(\"@solana/web3.js\");\n const { TOKEN_PROGRAM_ID } = await import(\"@solana/spl-token\");\n const { TokenListProvider } = await import(\"@solana/spl-token-registry\");\n\n const tokenAccounts = await connection.getParsedTokenAccountsByOwner(new PublicKey(address), {\n programId: TOKEN_PROGRAM_ID,\n });\n const tokenListProvider = new TokenListProvider();\n const tokenListContainer = await tokenListProvider.resolve();\n const tokenList = tokenListContainer.filterByChainId(101).getList();\n\n // Group token balances by mint address\n const tokenBalanceMap = new Map<string, { amount: bigint; decimal: number; symbol: string }>();\n\n for await (const tokenAccountInfo of tokenAccounts.value) {\n const accountInfo = tokenAccountInfo.account.data.parsed.info;\n const mintAddress = accountInfo.mint;\n const decimal = accountInfo.tokenAmount.decimals;\n const amount = BigInt(accountInfo.tokenAmount.amount);\n\n if (amount <= BigInt(0)) continue;\n\n const tokenInfo = tokenList.find((token: TokenInfo) => token.address === mintAddress);\n const tokenSymbol = tokenInfo?.symbol ?? \"UNKNOWN\";\n const existing = tokenBalanceMap.get(mintAddress);\n\n tokenBalanceMap.set(mintAddress, {\n amount: existing ? existing.amount + amount : amount,\n decimal,\n symbol: tokenSymbol,\n });\n }\n\n // Convert grouped balances to AssetValue array\n const tokenBalances: AssetValue[] = Array.from(tokenBalanceMap.entries()).map(\n ([mintAddress, { amount, decimal, symbol }]) =>\n new AssetValue({\n value: SwapKitNumber.fromBigInt(amount, decimal),\n decimal,\n identifier: `${Chain.Solana}.${symbol}${mintAddress ? `-${mintAddress.toString()}` : \"\"}`,\n }),\n );\n\n return tokenBalances;\n}\n\nfunction getBalance(getConnection: () => Promise<Connection>) {\n return async (address: string) => {\n const { PublicKey } = await import(\"@solana/web3.js\");\n const connection = await getConnection();\n const SOLBalance = await connection.getBalance(new PublicKey(address));\n const tokenBalances = await getTokenBalances({ connection, address });\n\n return [AssetValue.from({ chain: Chain.Solana, value: BigInt(SOLBalance) }), ...tokenBalances];\n };\n}\n"
5
+ "import type {\n Connection,\n PublicKey,\n Signer,\n Transaction,\n TransactionInstruction,\n VersionedTransaction,\n} from \"@solana/web3.js\";\nimport {\n AssetValue,\n BaseDecimal,\n Chain,\n DerivationPath,\n type DerivationPathArray,\n type GenericCreateTransactionParams,\n NetworkDerivationPath,\n SKConfig,\n SwapKitError,\n derivationPathToString,\n updateDerivationPath,\n} from \"@swapkit/helpers\";\nimport { P } from \"ts-pattern\";\nimport { match } from \"ts-pattern\";\nimport type { SolanaCreateTransactionParams, SolanaProvider, SolanaTransferParams } from \".\";\nimport { getBalance } from \"../utils\";\n\ntype SolanaSigner = SolanaProvider | Signer;\n\nexport async function getSolanaAddressValidator() {\n const { PublicKey } = await import(\"@solana/web3.js\");\n\n return (address: string) => {\n try {\n const pubkey = new PublicKey(address);\n return PublicKey.isOnCurve(pubkey.toBytes());\n } catch (_) {\n return false;\n }\n };\n}\n\nexport async function getSolanaToolbox(\n toolboxParams?:\n | { signer?: SolanaSigner }\n | { phrase?: string; index?: number; derivationPath?: DerivationPathArray },\n) {\n const index = toolboxParams && \"index\" in toolboxParams ? toolboxParams.index || 0 : 0;\n const derivationPath = derivationPathToString(\n toolboxParams && \"derivationPath\" in toolboxParams && toolboxParams.derivationPath\n ? toolboxParams.derivationPath\n : updateDerivationPath(NetworkDerivationPath[Chain.Solana], { index }),\n );\n\n const signer = await match(toolboxParams)\n .with({ phrase: P.string }, ({ phrase }) => createKeysForPath({ phrase, derivationPath }))\n .with({ signer: P.any }, ({ signer }) => signer)\n .otherwise(() => undefined);\n\n function getAddress() {\n return signer?.publicKey ? getAddressFromPubKey(signer.publicKey) : \"\";\n }\n\n return {\n getConnection,\n getAddress,\n createKeysForPath,\n getAddressFromPubKey,\n getPubkeyFromAddress,\n createTransaction: createTransaction(getConnection),\n createTransactionFromInstructions,\n getBalance: getBalance(Chain.Solana),\n transfer: transfer(getConnection, signer),\n broadcastTransaction: broadcastTransaction(getConnection),\n getAddressValidator: getSolanaAddressValidator,\n signTransaction: signTransaction(getConnection, signer),\n estimateTransactionFee: estimateTransactionFee(getConnection),\n };\n}\n\nfunction estimateTransactionFee(getConnection: () => Promise<Connection>) {\n return async ({\n recipient,\n assetValue,\n memo,\n isProgramDerivedAddress,\n sender,\n }: Omit<GenericCreateTransactionParams, \"feeRate\"> & {\n isProgramDerivedAddress?: boolean;\n }) => {\n const connection = await getConnection();\n\n const transaction = await createTransaction(getConnection)({\n recipient,\n assetValue,\n memo,\n isProgramDerivedAddress,\n sender,\n });\n\n const message = transaction.compileMessage();\n const feeInLamports = await connection.getFeeForMessage(message);\n\n if (feeInLamports.value === null) {\n throw new SwapKitError(\n \"toolbox_solana_fee_estimation_failed\",\n \"Could not estimate Solana fee.\",\n );\n }\n\n return AssetValue.from({\n chain: Chain.Solana,\n value: feeInLamports.value,\n fromBaseDecimal: BaseDecimal[Chain.Solana],\n });\n };\n}\n\nasync function getConnection() {\n const { Connection } = await import(\"@solana/web3.js\");\n return new Connection(SKConfig.get(\"rpcUrls\").SOL, \"confirmed\");\n}\n\nfunction createAssetTransaction(getConnection: () => Promise<Connection>) {\n return async ({\n assetValue,\n recipient,\n sender,\n isProgramDerivedAddress,\n }: SolanaCreateTransactionParams) => {\n const connection = await getConnection();\n const fromPubkey = await getPubkeyFromAddress(sender);\n\n if (assetValue.isGasAsset) {\n const { Transaction, SystemProgram, PublicKey } = await import(\"@solana/web3.js\");\n\n return new Transaction().add(\n SystemProgram.transfer({\n fromPubkey: fromPubkey,\n lamports: assetValue.getBaseValue(\"number\"),\n toPubkey: new PublicKey(recipient),\n }),\n );\n }\n if (assetValue.address) {\n return createSolanaTokenTransaction({\n amount: assetValue.getBaseValue(\"number\"),\n connection,\n decimals: assetValue.decimal as number,\n from: fromPubkey,\n recipient,\n tokenAddress: assetValue.address,\n isProgramDerivedAddress,\n });\n }\n\n return undefined;\n };\n}\n\nasync function createSolanaTokenTransaction({\n tokenAddress,\n recipient,\n from,\n connection,\n amount,\n decimals,\n isProgramDerivedAddress,\n}: {\n tokenAddress: string;\n recipient: string;\n from: PublicKey;\n connection: Connection;\n amount: number;\n decimals: number;\n isProgramDerivedAddress?: boolean;\n}) {\n const {\n getAssociatedTokenAddress,\n getAccount,\n createAssociatedTokenAccountInstruction,\n createTransferCheckedInstruction,\n } = await import(\"@solana/spl-token\");\n const { Transaction, PublicKey } = await import(\"@solana/web3.js\");\n\n const transaction = new Transaction();\n const tokenPublicKey = new PublicKey(tokenAddress);\n const fromSPLAddress = await getAssociatedTokenAddress(tokenPublicKey, from);\n\n const recipientPublicKey = new PublicKey(recipient);\n const recipientSPLAddress = await getAssociatedTokenAddress(\n tokenPublicKey,\n recipientPublicKey,\n isProgramDerivedAddress,\n );\n\n let recipientAccountExists = false;\n try {\n await getAccount(connection, recipientSPLAddress);\n recipientAccountExists = true;\n } catch (_) {\n // Recipient's associated token account doesn't exist\n }\n\n if (!recipientAccountExists) {\n transaction.add(\n createAssociatedTokenAccountInstruction(\n from,\n recipientSPLAddress,\n recipientPublicKey,\n tokenPublicKey,\n ),\n );\n }\n\n transaction.add(\n createTransferCheckedInstruction(\n fromSPLAddress,\n tokenPublicKey,\n recipientSPLAddress,\n from,\n amount,\n decimals,\n ),\n );\n\n return transaction;\n}\n\nfunction createTransaction(getConnection: () => Promise<Connection>) {\n return async ({\n recipient,\n assetValue,\n memo,\n isProgramDerivedAddress,\n sender,\n }: SolanaCreateTransactionParams) => {\n const { createMemoInstruction } = await import(\"@solana/spl-memo\");\n\n const fromPubkey = await getPubkeyFromAddress(sender);\n const validateAddress = await getSolanaAddressValidator();\n\n if (!(isProgramDerivedAddress || validateAddress(recipient))) {\n throw new SwapKitError(\"core_transaction_invalid_recipient_address\");\n }\n\n const connection = await getConnection();\n const transaction = await createAssetTransaction(getConnection)({\n assetValue,\n recipient,\n sender,\n isProgramDerivedAddress,\n });\n\n if (!transaction) {\n throw new SwapKitError(\"core_transaction_invalid_sender_address\");\n }\n\n if (memo) transaction.add(createMemoInstruction(memo));\n\n const blockHash = await connection.getLatestBlockhash();\n transaction.recentBlockhash = blockHash.blockhash;\n transaction.feePayer = fromPubkey;\n\n return transaction;\n };\n}\n\nasync function createTransactionFromInstructions({\n instructions,\n}: { instructions: TransactionInstruction[]; isProgramDerivedAddress?: boolean }) {\n const { Transaction } = await import(\"@solana/web3.js\");\n const transaction = new Transaction().add(...instructions);\n\n if (!transaction) {\n throw new SwapKitError(\"core_transaction_invalid_sender_address\");\n }\n\n return transaction;\n}\n\nfunction transfer(getConnection: () => Promise<Connection>, signer?: SolanaSigner) {\n return async ({ recipient, assetValue, memo, isProgramDerivedAddress }: SolanaTransferParams) => {\n if (!signer) {\n throw new SwapKitError(\"core_transaction_invalid_sender_address\");\n }\n\n const sender =\n signer.publicKey?.toString() ??\n (await (signer as SolanaProvider).connect()).publicKey.toString();\n\n const transaction = await createTransaction(getConnection)({\n recipient,\n assetValue,\n memo,\n isProgramDerivedAddress,\n sender,\n });\n\n if (\"connect\" in signer) {\n const signedTransaction = await signer.signTransaction(transaction);\n return broadcastTransaction(getConnection)(signedTransaction);\n }\n\n transaction.sign(signer);\n\n return broadcastTransaction(getConnection)(transaction);\n };\n}\n\nfunction broadcastTransaction(getConnection: () => Promise<Connection>) {\n return async (transaction: Transaction | VersionedTransaction) => {\n const connection = await getConnection();\n return connection.sendRawTransaction(transaction.serialize());\n };\n}\n\nfunction signTransaction(getConnection: () => Promise<Connection>, signer?: SolanaSigner) {\n return async (transaction: Transaction | VersionedTransaction) => {\n const { VersionedTransaction } = await import(\"@solana/web3.js\");\n if (!signer) {\n throw new SwapKitError(\"toolbox_solana_no_signer\");\n }\n\n if (!(transaction instanceof VersionedTransaction)) {\n const connection = await getConnection();\n\n const blockHash = await connection.getLatestBlockhash();\n transaction.recentBlockhash = blockHash.blockhash;\n transaction.feePayer = signer.publicKey || undefined;\n }\n\n if (\"connect\" in signer) {\n const signedTransaction = await signer.signTransaction(transaction);\n return signedTransaction;\n }\n\n await transaction.sign([signer] as Signer & Signer[]);\n return transaction;\n };\n}\n\nexport async function createKeysForPath({\n phrase,\n derivationPath = DerivationPath.SOL,\n}: { phrase: string; derivationPath?: string }) {\n const { HDKey } = await import(\"micro-key-producer/slip10.js\");\n const { mnemonicToSeedSync } = await import(\"@scure/bip39\");\n const { Keypair } = await import(\"@solana/web3.js\");\n const seed = mnemonicToSeedSync(phrase);\n const hdKey = HDKey.fromMasterSeed(seed);\n\n return Keypair.fromSeed(hdKey.derive(derivationPath, true).privateKey);\n}\n\nfunction getAddressFromPubKey(publicKey: PublicKey) {\n return publicKey.toString();\n}\n\nasync function getPubkeyFromAddress(address: string) {\n const { PublicKey } = await import(\"@solana/web3.js\");\n return new PublicKey(address);\n}\n"
6
6
  ],
7
- "mappings": "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",
8
- "debugId": "049A2B1F2EFC50B264756E2164756E21",
7
+ "mappings": "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",
8
+ "debugId": "96EDFBAA436A5BDE64756E2164756E21",
9
9
  "names": []
10
10
  }