@swapkit/toolboxes 4.0.0-beta.50 → 4.0.0-beta.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/cosmos/index.cjs +2 -2
- package/dist/src/cosmos/index.cjs.map +10 -6
- package/dist/src/cosmos/index.js +2 -2
- package/dist/src/cosmos/index.js.map +10 -6
- package/dist/src/evm/index.cjs +2 -2
- package/dist/src/evm/index.cjs.map +10 -8
- package/dist/src/evm/index.js +2 -2
- package/dist/src/evm/index.js.map +10 -8
- package/dist/src/index.cjs +4 -2
- package/dist/src/index.cjs.map +54 -4
- package/dist/src/index.js +4 -2
- package/dist/src/index.js.map +54 -4
- package/dist/src/near/index.cjs +2 -2
- package/dist/src/near/index.cjs.map +7 -5
- package/dist/src/near/index.js +2 -2
- package/dist/src/near/index.js.map +7 -5
- package/dist/src/radix/index.cjs +2 -2
- package/dist/src/radix/index.cjs.map +2 -2
- package/dist/src/radix/index.js +2 -2
- package/dist/src/radix/index.js.map +2 -2
- package/dist/src/ripple/index.cjs +2 -2
- package/dist/src/ripple/index.cjs.map +2 -2
- package/dist/src/ripple/index.js +2 -2
- package/dist/src/ripple/index.js.map +2 -2
- package/dist/src/solana/index.cjs +2 -2
- package/dist/src/solana/index.cjs.map +5 -4
- package/dist/src/solana/index.js +2 -2
- package/dist/src/solana/index.js.map +5 -4
- package/dist/src/substrate/index.cjs +2 -2
- package/dist/src/substrate/index.cjs.map +6 -5
- package/dist/src/substrate/index.js +2 -2
- package/dist/src/substrate/index.js.map +6 -5
- package/dist/src/tron/index.cjs +2 -2
- package/dist/src/tron/index.cjs.map +6 -5
- package/dist/src/tron/index.js +2 -2
- package/dist/src/tron/index.js.map +6 -5
- package/dist/src/utxo/index.cjs +4 -4
- package/dist/src/utxo/index.cjs.map +10 -7
- package/dist/src/utxo/index.js +4 -4
- package/dist/src/utxo/index.js.map +10 -7
- package/{src/cosmos/index.ts → dist/types/cosmos/index.d.ts} +1 -0
- package/dist/types/cosmos/index.d.ts.map +1 -0
- package/dist/types/cosmos/thorchainUtils/addressFormat.d.ts +5 -0
- package/dist/types/cosmos/thorchainUtils/addressFormat.d.ts.map +1 -0
- package/{src/cosmos/thorchainUtils/index.ts → dist/types/cosmos/thorchainUtils/index.d.ts} +1 -0
- package/dist/types/cosmos/thorchainUtils/index.d.ts.map +1 -0
- package/dist/types/cosmos/thorchainUtils/messages.d.ts +208 -0
- package/dist/types/cosmos/thorchainUtils/messages.d.ts.map +1 -0
- package/dist/types/cosmos/thorchainUtils/registry.d.ts +4 -0
- package/dist/types/cosmos/thorchainUtils/registry.d.ts.map +1 -0
- package/dist/types/cosmos/thorchainUtils/types/MsgCompiled.d.ts +2 -0
- package/dist/types/cosmos/thorchainUtils/types/MsgCompiled.d.ts.map +1 -0
- package/dist/types/cosmos/thorchainUtils/types/client-types.d.ts +66 -0
- package/dist/types/cosmos/thorchainUtils/types/client-types.d.ts.map +1 -0
- package/dist/types/cosmos/thorchainUtils/types/index.d.ts +2 -0
- package/dist/types/cosmos/thorchainUtils/types/index.d.ts.map +1 -0
- package/dist/types/cosmos/toolbox/cosmos.d.ts +93 -0
- package/dist/types/cosmos/toolbox/cosmos.d.ts.map +1 -0
- package/dist/types/cosmos/toolbox/index.d.ts +14 -0
- package/dist/types/cosmos/toolbox/index.d.ts.map +1 -0
- package/dist/types/cosmos/toolbox/thorchain.d.ts +158 -0
- package/dist/types/cosmos/toolbox/thorchain.d.ts.map +1 -0
- package/{src/cosmos/types.ts → dist/types/cosmos/types.d.ts} +24 -29
- package/dist/types/cosmos/types.d.ts.map +1 -0
- package/dist/types/cosmos/util.d.ts +68 -0
- package/dist/types/cosmos/util.d.ts.map +1 -0
- package/dist/types/evm/api.d.ts +8 -0
- package/dist/types/evm/api.d.ts.map +1 -0
- package/dist/types/evm/contracts/eth/multicall.d.ts +36 -0
- package/dist/types/evm/contracts/eth/multicall.d.ts.map +1 -0
- package/dist/types/evm/contracts/op/gasOracle.d.ts +40 -0
- package/dist/types/evm/contracts/op/gasOracle.d.ts.map +1 -0
- package/dist/types/evm/helpers.d.ts +20 -0
- package/dist/types/evm/helpers.d.ts.map +1 -0
- package/{src/evm/index.ts → dist/types/evm/index.d.ts} +1 -0
- package/dist/types/evm/index.d.ts.map +1 -0
- package/dist/types/evm/toolbox/baseEVMToolbox.d.ts +82 -0
- package/dist/types/evm/toolbox/baseEVMToolbox.d.ts.map +1 -0
- package/dist/types/evm/toolbox/evm.d.ts +367 -0
- package/dist/types/evm/toolbox/evm.d.ts.map +1 -0
- package/dist/types/evm/toolbox/index.d.ts +89 -0
- package/dist/types/evm/toolbox/index.d.ts.map +1 -0
- package/dist/types/evm/toolbox/op.d.ts +62 -0
- package/dist/types/evm/toolbox/op.d.ts.map +1 -0
- package/dist/types/evm/types.d.ts +98 -0
- package/dist/types/evm/types.d.ts.map +1 -0
- package/dist/types/index.d.ts +63 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/near/helpers/core.d.ts +15 -0
- package/dist/types/near/helpers/core.d.ts.map +1 -0
- package/dist/types/near/helpers/gasEstimation.d.ts +41 -0
- package/dist/types/near/helpers/gasEstimation.d.ts.map +1 -0
- package/dist/types/near/helpers/nep141.d.ts +72 -0
- package/dist/types/near/helpers/nep141.d.ts.map +1 -0
- package/dist/types/near/index.d.ts +10 -0
- package/dist/types/near/index.d.ts.map +1 -0
- package/dist/types/near/toolbox.d.ts +4 -0
- package/dist/types/near/toolbox.d.ts.map +1 -0
- package/dist/types/near/types/contract.d.ts +38 -0
- package/dist/types/near/types/contract.d.ts.map +1 -0
- package/dist/types/near/types/nep141.d.ts +56 -0
- package/dist/types/near/types/nep141.d.ts.map +1 -0
- package/dist/types/near/types/toolbox.d.ts +57 -0
- package/dist/types/near/types/toolbox.d.ts.map +1 -0
- package/dist/types/near/types.d.ts +44 -0
- package/dist/types/near/types.d.ts.map +1 -0
- package/dist/types/radix/index.d.ts +14 -0
- package/dist/types/radix/index.d.ts.map +1 -0
- package/dist/types/ripple/index.d.ts +43 -0
- package/dist/types/ripple/index.d.ts.map +1 -0
- package/dist/types/solana/index.d.ts +37 -0
- package/dist/types/solana/index.d.ts.map +1 -0
- package/dist/types/solana/toolbox.d.ts +41 -0
- package/dist/types/solana/toolbox.d.ts.map +1 -0
- package/dist/types/substrate/balance.d.ts +17 -0
- package/dist/types/substrate/balance.d.ts.map +1 -0
- package/{src/substrate/index.ts → dist/types/substrate/index.d.ts} +1 -0
- package/dist/types/substrate/index.d.ts.map +1 -0
- package/dist/types/substrate/substrate.d.ts +148 -0
- package/dist/types/substrate/substrate.d.ts.map +1 -0
- package/dist/types/substrate/types.d.ts +100 -0
- package/dist/types/substrate/types.d.ts.map +1 -0
- package/dist/types/tron/helpers/trc20.abi.d.ts +156 -0
- package/dist/types/tron/helpers/trc20.abi.d.ts.map +1 -0
- package/dist/types/tron/helpers/trongrid.d.ts +8 -0
- package/dist/types/tron/helpers/trongrid.d.ts.map +1 -0
- package/dist/types/tron/index.d.ts +6 -0
- package/dist/types/tron/index.d.ts.map +1 -0
- package/dist/types/tron/toolbox.d.ts +26 -0
- package/dist/types/tron/toolbox.d.ts.map +1 -0
- package/dist/types/tron/types.d.ts +101 -0
- package/dist/types/tron/types.d.ts.map +1 -0
- package/dist/types/types.d.ts +18 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/utils.d.ts +4 -0
- package/dist/types/utils.d.ts.map +1 -0
- package/dist/types/utxo/helpers/api.d.ts +133 -0
- package/dist/types/utxo/helpers/api.d.ts.map +1 -0
- package/dist/types/utxo/helpers/bchaddrjs.d.ts +10 -0
- package/dist/types/utxo/helpers/bchaddrjs.d.ts.map +1 -0
- package/dist/types/utxo/helpers/coinselect.d.ts +16 -0
- package/dist/types/utxo/helpers/coinselect.d.ts.map +1 -0
- package/{src/utxo/helpers/index.ts → dist/types/utxo/helpers/index.d.ts} +1 -0
- package/dist/types/utxo/helpers/index.d.ts.map +1 -0
- package/dist/types/utxo/helpers/txSize.d.ts +21 -0
- package/dist/types/utxo/helpers/txSize.d.ts.map +1 -0
- package/{src/utxo/index.ts → dist/types/utxo/index.d.ts} +1 -0
- package/dist/types/utxo/index.d.ts.map +1 -0
- package/dist/types/utxo/toolbox/bitcoinCash.d.ts +104 -0
- package/dist/types/utxo/toolbox/bitcoinCash.d.ts.map +1 -0
- package/dist/types/utxo/toolbox/index.d.ts +50 -0
- package/dist/types/utxo/toolbox/index.d.ts.map +1 -0
- package/dist/types/utxo/toolbox/utxo.d.ts +102 -0
- package/dist/types/utxo/toolbox/utxo.d.ts.map +1 -0
- package/dist/types/utxo/toolbox/zcash.d.ts +83 -0
- package/dist/types/utxo/toolbox/zcash.d.ts.map +1 -0
- package/dist/types/utxo/types.d.ts +46 -0
- package/dist/types/utxo/types.d.ts.map +1 -0
- package/package.json +15 -18
- package/dist/chunk-0h4xdrwz.js +0 -5
- package/dist/chunk-0h4xdrwz.js.map +0 -10
- package/dist/chunk-4yap1fvd.js +0 -4
- package/dist/chunk-4yap1fvd.js.map +0 -10
- package/dist/chunk-9bqegm61.js +0 -4
- package/dist/chunk-9bqegm61.js.map +0 -10
- package/dist/chunk-fazw0jvt.js +0 -4
- package/dist/chunk-fazw0jvt.js.map +0 -9
- package/dist/chunk-fjfxga2v.js +0 -4
- package/dist/chunk-fjfxga2v.js.map +0 -10
- package/dist/chunk-s47y8512.js +0 -5
- package/dist/chunk-s47y8512.js.map +0 -9
- package/dist/chunk-vtd17cje.js +0 -4
- package/dist/chunk-vtd17cje.js.map +0 -10
- package/dist/chunk-zcdeg6h9.js +0 -5
- package/dist/chunk-zcdeg6h9.js.map +0 -10
- package/src/cosmos/thorchainUtils/addressFormat.ts +0 -26
- package/src/cosmos/thorchainUtils/messages.ts +0 -262
- package/src/cosmos/thorchainUtils/registry.ts +0 -44
- package/src/cosmos/thorchainUtils/types/MsgCompiled.ts +0 -2800
- package/src/cosmos/thorchainUtils/types/client-types.ts +0 -73
- package/src/cosmos/thorchainUtils/types/index.ts +0 -1
- package/src/cosmos/toolbox/cosmos.ts +0 -375
- package/src/cosmos/toolbox/index.ts +0 -33
- package/src/cosmos/toolbox/thorchain.ts +0 -313
- package/src/cosmos/util.ts +0 -266
- package/src/evm/__tests__/address-validation.test.ts +0 -86
- package/src/evm/__tests__/ethereum.test.ts +0 -141
- package/src/evm/api.ts +0 -21
- package/src/evm/contracts/eth/multicall.ts +0 -165
- package/src/evm/contracts/op/gasOracle.ts +0 -151
- package/src/evm/helpers.ts +0 -194
- package/src/evm/toolbox/baseEVMToolbox.ts +0 -762
- package/src/evm/toolbox/evm.ts +0 -66
- package/src/evm/toolbox/index.ts +0 -52
- package/src/evm/toolbox/op.ts +0 -131
- package/src/evm/types.ts +0 -146
- package/src/index.ts +0 -263
- package/src/near/__tests__/core.test.ts +0 -80
- package/src/near/helpers/contractFactory.ts +0 -22
- package/src/near/helpers/core.ts +0 -91
- package/src/near/helpers/gasEstimation.ts +0 -110
- package/src/near/helpers/index.ts +0 -5
- package/src/near/helpers/nep141.ts +0 -110
- package/src/near/index.ts +0 -24
- package/src/near/toolbox.ts +0 -509
- package/src/near/types/contract.ts +0 -48
- package/src/near/types/nep141.ts +0 -66
- package/src/near/types.ts +0 -57
- package/src/radix/index.ts +0 -156
- package/src/ripple/index.ts +0 -192
- package/src/solana/index.ts +0 -55
- package/src/solana/toolbox.ts +0 -433
- package/src/substrate/balance.ts +0 -92
- package/src/substrate/substrate.ts +0 -320
- package/src/substrate/types.ts +0 -120
- package/src/tron/__tests__/toolbox.test.ts +0 -147
- package/src/tron/helpers/trc20.abi.ts +0 -107
- package/src/tron/helpers/trongrid.ts +0 -54
- package/src/tron/index.ts +0 -17
- package/src/tron/toolbox.ts +0 -650
- package/src/tron/types.ts +0 -120
- package/src/utils.ts +0 -27
- package/src/utxo/__tests__/zcash-integration.test.ts +0 -114
- package/src/utxo/helpers/api.ts +0 -560
- package/src/utxo/helpers/bchaddrjs.ts +0 -183
- package/src/utxo/helpers/coinselect.ts +0 -98
- package/src/utxo/helpers/txSize.ts +0 -104
- package/src/utxo/toolbox/bitcoinCash.ts +0 -320
- package/src/utxo/toolbox/index.ts +0 -90
- package/src/utxo/toolbox/utxo.ts +0 -525
- package/src/utxo/toolbox/zcash.ts +0 -208
- package/src/utxo/types.ts +0 -57
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import type {\n FungibleResourcesCollectionItem,\n GatewayApiClient,\n StateEntityDetailsVaultResponseItem,\n StateEntityFungiblesPageRequest,\n StateEntityFungiblesPageResponse,\n} from \"@radixdlt/babylon-gateway-api-sdk\";\nimport {\n AssetValue,\n Chain,\n SKConfig,\n type SKConfigIntegrations,\n SwapKitError,\n} from \"@swapkit/helpers\";\n\nexport type RadixWallet = Awaited<ReturnType<typeof RadixToolbox>>;\n\ntype RadixGetBalanceParams = {\n address: string;\n networkApi: GatewayApiClient;\n};\n// Could not find anything sync in SDK, ask Radix team\nexport function radixValidateAddress(address: string) {\n return address.startsWith(\"account_rdx1\") && address.length === 66;\n}\n\nfunction getBalance({ networkApi }: { networkApi: GatewayApiClient }) {\n return async function getBalance(address: string) {\n const fungibleResources = await fetchFungibleResources({ address, networkApi });\n const fungibleBalances = convertResourcesToBalances({\n resources: fungibleResources,\n networkApi,\n });\n return fungibleBalances;\n };\n}\n\nasync function fetchFungibleResources({\n address,\n networkApi,\n}: RadixGetBalanceParams): Promise<FungibleResourcesCollectionItem[]> {\n let hasNextPage = true;\n let nextCursor: string | undefined;\n let fungibleResources: FungibleResourcesCollectionItem[] = [];\n const stateVersion = await currentStateVersion(networkApi);\n while (hasNextPage) {\n const stateEntityFungiblesPageRequest: StateEntityFungiblesPageRequest = {\n address: address,\n limit_per_page: 100,\n cursor: nextCursor,\n at_ledger_state: {\n state_version: stateVersion,\n },\n };\n\n const stateEntityFungiblesPageResponse: StateEntityFungiblesPageResponse =\n await networkApi.state.innerClient.entityFungiblesPage({\n stateEntityFungiblesPageRequest: stateEntityFungiblesPageRequest,\n });\n\n fungibleResources = fungibleResources.concat(stateEntityFungiblesPageResponse.items);\n if (stateEntityFungiblesPageResponse.next_cursor) {\n nextCursor = stateEntityFungiblesPageResponse.next_cursor;\n } else {\n hasNextPage = false;\n }\n }\n return fungibleResources;\n}\n\n// biome-ignore lint/complexity/noExcessiveCognitiveComplexity: <explanation>\nasync function convertResourcesToBalances({\n resources,\n networkApi,\n}: {\n resources: FungibleResourcesCollectionItem[]; //| NonFungibleResourcesCollectionItem[];\n networkApi: GatewayApiClient;\n}): Promise<AssetValue[]> {\n const balances: AssetValue[] = [];\n const BATCH_SIZE = 50;\n\n // Split resources into batches of up to 50 items\n const resourceBatches: FungibleResourcesCollectionItem[][] = [];\n for (let i = 0; i < resources.length; i += BATCH_SIZE) {\n resourceBatches.push(resources.slice(i, i + BATCH_SIZE));\n }\n\n for (const batch of resourceBatches) {\n const addresses = batch.map((item) => item.resource_address);\n const response: StateEntityDetailsVaultResponseItem[] =\n await networkApi.state.getEntityDetailsVaultAggregated(addresses);\n\n const divisibilities = new Map<string, { decimals: number; symbol: string }>();\n\n for (const result of response) {\n if (result.details !== undefined) {\n const metaDataSymbol = result.metadata?.items.find((item) => item.key === \"symbol\");\n const symbol =\n metaDataSymbol?.value.typed.type === \"String\" ? metaDataSymbol.value.typed.value : \"?\";\n\n if (result.details.type === \"FungibleResource\") {\n divisibilities.set(result.address, {\n decimals: result.details.divisibility,\n symbol,\n });\n }\n }\n }\n\n for (const item of batch) {\n if (item.aggregation_level === \"Global\") {\n const assetInfo = divisibilities.get(item.resource_address) || { decimals: 0, symbol: \"?\" };\n\n const balance = AssetValue.from({\n asset:\n assetInfo.symbol !== Chain.Radix\n ? `${Chain.Radix}.${assetInfo.symbol}-${item.resource_address}`\n : \"XRD.XRD\",\n value: item.amount,\n });\n balances.push(balance);\n }\n }\n }\n\n return balances;\n}\n\nasync function currentStateVersion(networkApi: GatewayApiClient) {\n return networkApi.status.getCurrent().then((status) => status.ledger_state.state_version);\n}\n\nexport const RadixToolbox = async ({\n dappConfig,\n}: { dappConfig?: SKConfigIntegrations[\"radix\"] } = {}) => {\n const { RadixDappToolkit } = await import(\"@radixdlt/radix-dapp-toolkit\");\n const { GatewayApiClient } = await import(\"@radixdlt/babylon-gateway-api-sdk\");\n const config = dappConfig || SKConfig.get(\"integrations\").radix;\n\n const radixToolkit = RadixDappToolkit({\n ...config,\n networkId: config.network?.networkId || 1,\n });\n\n const networkApi = GatewayApiClient.initialize(radixToolkit.gatewayApi.clientConfig);\n\n return {\n getAddress: () => \"\",\n getBalance: getBalance({ networkApi }),\n networkApi,\n validateAddress: radixValidateAddress,\n signAndBroadcast: (() => {\n throw new SwapKitError(\"toolbox_radix_method_not_supported\", { method: \"signAndBroadcast\" });\n }) as (params: any) => Promise<string>,\n };\n};\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "6xBAOA,qBACE,WACA,cACA,kBAEA,yBAUK,SAAS,CAAoB,CAAC,EAAiB,CACpD,OAAO,EAAQ,WAAW,cAAc,GAAK,EAAQ,SAAW,GAGlE,SAAS,CAAU,EAAG,cAAgD,CACpE,OAAO,eAAe,CAAU,CAAC,EAAiB,CAChD,IAAM,EAAoB,MAAM,EAAuB,CAAE,UAAS,YAAW,CAAC,EAK9E,OAJyB,EAA2B,CAClD,UAAW,EACX,YACF,CAAC,GAKL,eAAe,CAAsB,EACnC,UACA,cACoE,CACpE,IAAI,EAAc,GACd,EACA,EAAuD,CAAC,EACtD,EAAe,MAAM,EAAoB,CAAU,EACzD,MAAO,EAAa,CAClB,IAAM,EAAmE,CACvE,QAAS,EACT,eAAgB,IAChB,OAAQ,EACR,gBAAiB,CACf,cAAe,CACjB,CACF,EAEM,EACJ,MAAM,EAAW,MAAM,YAAY,oBAAoB,CACrD,gCAAiC,CACnC,CAAC,EAGH,GADA,EAAoB,EAAkB,OAAO,EAAiC,KAAK,EAC/E,EAAiC,YACnC,EAAa,EAAiC,YAE9C,OAAc,GAGlB,OAAO,EAIT,eAAe,CAA0B,EACvC,YACA,cAIwB,CACxB,IAAM,EAAyB,CAAC,EAC1B,EAAa,GAGb,EAAuD,CAAC,EAC9D,QAAS,EAAI,EAAG,EAAI,EAAU,OAAQ,GAJnB,GAKjB,EAAgB,KAAK,EAAU,MAAM,EAAG,EALvB,EAKqC,CAAC,EAGzD,QAAW,KAAS,EAAiB,CACnC,IAAM,EAAY,EAAM,IAAI,CAAC,IAAS,EAAK,gBAAgB,EACrD,EACJ,MAAM,EAAW,MAAM,gCAAgC,CAAS,EAE5D,EAAiB,IAAI,IAE3B,QAAW,KAAU,EACnB,GAAI,EAAO,UAAY,OAAW,CAChC,IAAM,EAAiB,EAAO,UAAU,MAAM,KAAK,CAAC,IAAS,EAAK,MAAQ,QAAQ,EAC5E,EACJ,GAAgB,MAAM,MAAM,OAAS,SAAW,EAAe,MAAM,MAAM,MAAQ,IAErF,GAAI,EAAO,QAAQ,OAAS,mBAC1B,EAAe,IAAI,EAAO,QAAS,CACjC,SAAU,EAAO,QAAQ,aACzB,QACF,CAAC,EAKP,QAAW,KAAQ,EACjB,GAAI,EAAK,oBAAsB,SAAU,CACvC,IAAM,EAAY,EAAe,IAAI,EAAK,gBAAgB,GAAK,CAAE,SAAU,EAAG,OAAQ,GAAI,EAEpF,EAAU,EAAW,KAAK,CAC9B,MACE,EAAU,SAAW,EAAM,MACvB,GAAG,EAAM,SAAS,EAAU,UAAU,EAAK,mBAC3C,UACN,MAAO,EAAK,MACd,CAAC,EACD,EAAS,KAAK,CAAO,GAK3B,OAAO,EAGT,eAAe,CAAmB,CAAC,EAA8B,CAC/D,OAAO,EAAW,OAAO,WAAW,EAAE,KAAK,CAAC,IAAW,EAAO,aAAa,aAAa,MAG7E,EAAe,OAC1B,cACkD,CAAC,IAAM,CACzD,IAAQ,oBAAqB,KAAa,yCAClC,oBAAqB,KAAa,6CACpC,EAAS,GAAc,EAAS,IAAI,cAAc,EAAE,MAEpD,EAAe,EAAiB,IACjC,EACH,UAAW,EAAO,SAAS,WAAa,CAC1C,CAAC,EAEK,EAAa,EAAiB,WAAW,EAAa,WAAW,YAAY,EAEnF,MAAO,CACL,WAAY,IAAM,GAClB,WAAY,EAAW,CAAE,YAAW,CAAC,EACrC,aACA,gBAAiB,EACjB,iBAAmB,IAAM,CACvB,MAAM,IAAI,EAAa,qCAAsC,CAAE,OAAQ,kBAAmB,CAAC,EAE/F",
|
|
8
|
+
"debugId": "9021B99FBD3DB8AA64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var B={};
|
|
1
|
+
var B=Object.create;var{getPrototypeOf:b,defineProperty:$,getOwnPropertyNames:W,getOwnPropertyDescriptor:R}=Object,H=Object.prototype.hasOwnProperty;var x=(j,y,G)=>{G=j!=null?B(b(j)):{};let z=y||!j||!j.__esModule?$(G,"default",{value:j,enumerable:!0}):G;for(let Y of W(j))if(!H.call(z,Y))$(z,Y,{get:()=>j[Y],enumerable:!0});return z},N=new WeakMap,D=(j)=>{var y=N.get(j),G;if(y)return y;if(y=$({},"__esModule",{value:!0}),j&&typeof j==="object"||typeof j==="function")W(j).map((z)=>!H.call(y,z)&&$(y,z,{get:()=>j[z],enumerable:!(G=R(j,z))||G.enumerable}));return N.set(j,y),y};var A=(j,y)=>{for(var G in y)$(j,G,{get:y[G],enumerable:!0,configurable:!0,set:(z)=>y[G]=()=>z})};var K=(j,y)=>()=>(j&&(y=j(j=0)),y);var C={};A(C,{rippleValidateAddress:()=>k,hashes:()=>P.hashes,getRippleToolbox:()=>w});module.exports=D(C);function O(j){let y=X.Wallet.fromMnemonic(j);return{getAddress:()=>Promise.resolve(y.address),signTransaction:(G)=>Promise.resolve(y.sign(G))}}function k(j){return X.isValidAddress(j)}var q,X,P,T,w=async(j={})=>{let y="signer"in j&&j.signer?j.signer:("phrase"in j)&&j.phrase?O(j.phrase):void 0,G=q.SKConfig.get("rpcUrls")[q.Chain.Ripple];if(!G)throw new q.SwapKitError({errorKey:"toolbox_ripple_rpc_not_configured",info:{chain:q.Chain.Ripple}});let z=new X.Client(G);await z.connect();let Y=()=>{if(!y)throw new q.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});return y.getAddress()},U=async(J)=>{let Q=J||await Y();try{let Z=(await z.request({command:"account_info",account:Q})).result.account_data.Balance;return[q.AssetValue.from({chain:q.Chain.Ripple,value:Z,fromBaseDecimal:q.BaseDecimal[q.Chain.Ripple]})]}catch(M){if(M.data.error_code===T.ACCOUNT_NOT_FOUND)return[q.AssetValue.from({chain:q.Chain.Ripple,value:0})];throw new q.SwapKitError("toolbox_ripple_get_balance_error",{info:{address:Q,error:M}})}},_=async()=>{let Q=(await z.request({command:"fee"})).result.drops.open_ledger_fee;return q.AssetValue.from({chain:q.Chain.Ripple,value:q.SwapKitNumber.fromBigInt(BigInt(Q),q.BaseDecimal[q.Chain.Ripple])})},v=async({assetValue:J,recipient:Q,memo:M,sender:Z})=>{if(!k(Q))throw new q.SwapKitError({errorKey:"core_transaction_invalid_recipient_address"});let f=Z||await Y();if(!J.isGasAsset||J.chain!==q.Chain.Ripple)throw new q.SwapKitError({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:J.toString()}});let L={TransactionType:"Payment",Account:f,Amount:X.xrpToDrops(J.getValue("string")),Destination:Q};if(M)L.Memos=[{Memo:{MemoData:Buffer.from(M).toString("hex")}}];return await z.autofill(L)},F=(J)=>{if(!y)throw new q.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});return y.signTransaction(J)},I=async(J)=>{let M=(await z.submitAndWait(J)).result;if(M.validated)return M.hash;throw new q.SwapKitError({errorKey:"toolbox_ripple_broadcast_error",info:{chain:q.Chain.Ripple}})};return{signer:y,createSigner:O,getAddress:Y,validateAddress:k,getBalance:U,createTransaction:v,signTransaction:F,broadcastTransaction:I,transfer:async(J)=>{if(!y)throw new q.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});let Q=await y.getAddress(),M=await v({...J,sender:Q}),Z=await F(M);return I(Z.tx_blob)},estimateTransactionFee:_,disconnect:()=>z.disconnect()}};var E=K(()=>{q=require("@swapkit/helpers"),X=require("xrpl"),P=require("xrpl"),T={ACCOUNT_NOT_FOUND:19}});E();
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=C4188E65493EE0C164756E2164756E21
|
|
4
4
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import {\n AssetValue,\n BaseDecimal,\n Chain,\n type ChainSigner,\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\nexport { hashes, type Transaction } from \"xrpl\";\n\nconst RIPPLE_ERROR_CODES = {\n ACCOUNT_NOT_FOUND: 19,\n} as const;\n\n// Note: Ripple seeds generate a single address, no derivation path/index support.\nfunction createSigner(phrase: string): ChainSigner<Transaction, { tx_blob: string; hash: string }> {\n const wallet = Wallet.fromMnemonic(phrase);\n return {\n // publicKey: wallet.publicKey,\n // Address is sync, but interface requires async\n getAddress: () => Promise.resolve(wallet.address),\n // Signing is sync, but interface requires async\n signTransaction: (tx: Transaction) => Promise.resolve(wallet.sign(tx as Transaction)), // Cast needed as Wallet.sign expects Transaction\n };\n}\n\nexport function rippleValidateAddress(address: string) {\n return isValidAddress(address);\n}\n\ntype RippleToolboxParams =\n | { phrase: string }\n | { signer: ChainSigner<Transaction, { tx_blob: string; hash: string }> }\n | {};\n\nexport const getRippleToolbox = async (params: RippleToolboxParams = {}) => {\n const signer =\n \"signer\" in params && params.signer\n ? params.signer\n : \"phrase\" in params && params.phrase\n ? createSigner(params.phrase)\n : undefined;\n\n const rpcUrl = 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 const accountInfo = await client.request({ command: \"account_info\", account: addr });\n\n const balance = accountInfo.result.account_data.Balance;\n\n return [\n AssetValue.from({\n chain: Chain.Ripple,\n value: balance,\n fromBaseDecimal: BaseDecimal[Chain.Ripple],\n }),\n ];\n } catch (error) {\n // empty account\n if ((error as any).data.error_code === RIPPLE_ERROR_CODES.ACCOUNT_NOT_FOUND) {\n return [\n AssetValue.from({\n chain: Chain.Ripple,\n value: 0,\n }),\n ];\n }\n throw new SwapKitError(\"toolbox_ripple_get_balance_error\", {\n info: { address: addr, error },\n });\n }\n };\n\n const estimateTransactionFee = async () => {\n const feeResponse = await client.request({ command: \"fee\" });\n const feeDrops = feeResponse.result.drops.open_ledger_fee; // Fee in drops\n\n return AssetValue.from({\n chain: Chain.Ripple,\n value: SwapKitNumber.fromBigInt(BigInt(feeDrops), BaseDecimal[Chain.Ripple]),\n });\n };\n\n const createTransaction = async ({\n assetValue,\n recipient,\n memo,\n sender,\n }: { assetValue: AssetValue; recipient: string; sender?: string; memo?: string }) => {\n if (!rippleValidateAddress(recipient)) {\n throw new SwapKitError({ errorKey: \"core_transaction_invalid_recipient_address\" });\n }\n\n const senderAddress = sender || (await getAddress());\n\n if (!assetValue.isGasAsset || assetValue.chain !== Chain.Ripple) {\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_asset_not_supported\",\n info: { asset: assetValue.toString() },\n });\n }\n\n const transaction: Payment = {\n TransactionType: \"Payment\",\n Account: senderAddress,\n Amount: xrpToDrops(assetValue.getValue(\"string\")),\n Destination: recipient,\n };\n\n if (memo) {\n transaction.Memos = [{ Memo: { MemoData: Buffer.from(memo).toString(\"hex\") } }];\n }\n\n const preparedTx = await client.autofill(transaction);\n return preparedTx;\n };\n\n const signTransaction = (tx: Transaction) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n return signer.signTransaction(tx);\n };\n\n const broadcastTransaction = async (signedTxHex: string) => {\n const submitResult = await client.submitAndWait(signedTxHex);\n const result = submitResult.result;\n\n if (result.validated) {\n return result.hash;\n }\n\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_broadcast_error\",\n info: { chain: Chain.Ripple },\n });\n };\n\n const transfer = async (params: GenericTransferParams) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n const sender = await signer.getAddress();\n const tx = await createTransaction({ ...params, sender });\n const signedTx = await signTransaction(tx);\n return broadcastTransaction(signedTx.tx_blob);\n };\n\n const disconnect = () => client.disconnect();\n\n return {\n // Signer related\n signer, // Expose the signer instance if created/provided\n createSigner, // Expose the helper\n // Core methods\n getAddress,\n validateAddress: rippleValidateAddress,\n getBalance,\n createTransaction,\n signTransaction,\n broadcastTransaction,\n transfer,\n estimateTransactionFee,\n disconnect,\n };\n};\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "izBAsBA,SAAS,CAAY,CAAC,EAA6E,CACjG,IAAM,EAAS,SAAO,aAAa,CAAM,EACzC,MAAO,CAGL,WAAY,IAAM,QAAQ,QAAQ,EAAO,OAAO,EAEhD,gBAAiB,CAAC,IAAoB,QAAQ,QAAQ,EAAO,KAAK,CAAiB,CAAC,CACtF,EAGK,SAAS,CAAqB,CAAC,EAAiB,CACrD,OAAO,iBAAe,CAAO,MAlC/B,EAWA,EAIA,EAEM,EAyBO,EAAmB,MAAO,EAA8B,CAAC,IAAM,CAC1E,IAAM,EACJ,WAAY,GAAU,EAAO,OACzB,EAAO,QACP,WAAY,IAAU,EAAO,OAC3B,EAAa,EAAO,MAAM,EAC1B,OAEF,EAAS,WAAS,IAAI,SAAS,EAAE,QAAM,QAC7C,IAAK,EACH,MAAM,IAAI,eAAa,CACrB,SAAU,oCACV,KAAM,CAAE,MAAO,QAAM,MAAO,CAC9B,CAAC,EAGH,IAAM,EAAS,IAAI,SAAO,CAAM,EAChC,MAAM,EAAO,QAAQ,EAErB,IAAM,EAAa,IAAM,CACvB,IAAK,EACH,MAAM,IAAI,eAAa,CAAE,SAAU,iCAAkC,CAAC,EAExE,OAAO,EAAO,WAAW,GAGrB,EAAa,MAAO,IAAqB,CAC7C,IAAM,EAAO,GAAY,MAAM,EAAW,EAE1C,GAAI,CAGF,IAAM,GAFc,MAAM,EAAO,QAAQ,CAAE,QAAS,eAAgB,QAAS,CAAK,CAAC,GAEvD,OAAO,aAAa,QAEhD,MAAO,CACL,aAAW,KAAK,CACd,MAAO,QAAM,OACb,MAAO,EACP,gBAAiB,cAAY,QAAM,OACrC,CAAC,CACH,EACA,MAAO,EAAO,CAEd,GAAK,EAAc,KAAK,aAAe,EAAmB,kBACxD,MAAO,CACL,aAAW,KAAK,CACd,MAAO,QAAM,OACb,MAAO,CACT,CAAC,CACH,EAEF,MAAM,IAAI,eAAa,mCAAoC,CACzD,KAAM,CAAE,QAAS,EAAM,OAAM,CAC/B,CAAC,IAIC,EAAyB,SAAY,CAEzC,IAAM,GADc,MAAM,EAAO,QAAQ,CAAE,QAAS,KAAM,CAAC,GAC9B,OAAO,MAAM,gBAE1C,OAAO,aAAW,KAAK,CACrB,MAAO,QAAM,OACb,MAAO,gBAAc,WAAW,OAAO,CAAQ,EAAG,cAAY,QAAM,OAAO,CAC7E,CAAC,GAGG,EAAoB,OACxB,aACA,YACA,OACA,YACmF,CACnF,IAAK,EAAsB,CAAS,EAClC,MAAM,IAAI,eAAa,CAAE,SAAU,4CAA6C,CAAC,EAGnF,IAAM,EAAgB,GAAW,MAAM,EAAW,EAElD,IAAK,EAAW,YAAc,EAAW,QAAU,QAAM,OACvD,MAAM,IAAI,eAAa,CACrB,SAAU,qCACV,KAAM,CAAE,MAAO,EAAW,SAAS,CAAE,CACvC,CAAC,EAGH,IAAM,EAAuB,CAC3B,gBAAiB,UACjB,QAAS,EACT,OAAQ,aAAW,EAAW,SAAS,QAAQ,CAAC,EAChD,YAAa,CACf,EAEA,GAAI,EACF,EAAY,MAAQ,CAAC,CAAE,KAAM,CAAE,SAAU,OAAO,KAAK,CAAI,EAAE,SAAS,KAAK,CAAE,CAAE,CAAC,EAIhF,OADmB,MAAM,EAAO,SAAS,CAAW,GAIhD,EAAkB,CAAC,IAAoB,CAC3C,IAAK,EACH,MAAM,IAAI,eAAa,CAAE,SAAU,iCAAkC,CAAC,EAExE,OAAO,EAAO,gBAAgB,CAAE,GAG5B,EAAuB,MAAO,IAAwB,CAE1D,IAAM,GADe,MAAM,EAAO,cAAc,CAAW,GAC/B,OAE5B,GAAI,EAAO,UACT,OAAO,EAAO,KAGhB,MAAM,IAAI,eAAa,CACrB,SAAU,iCACV,KAAM,CAAE,MAAO,QAAM,MAAO,CAC9B,CAAC,GAeH,MAAO,CAEL,SACA,eAEA,aACA,gBAAiB,EACjB,aACA,oBACA,kBACA,uBACA,SAvBe,MAAO,IAAkC,CACxD,IAAK,EACH,MAAM,IAAI,eAAa,CAAE,SAAU,iCAAkC,CAAC,EAExE,IAAM,EAAS,MAAM,EAAO,WAAW,EACjC,EAAK,MAAM,EAAkB,IAAK,EAAQ,QAAO,CAAC,EAClD,EAAW,MAAM,EAAgB,CAAE,EACzC,OAAO,EAAqB,EAAS,OAAO,GAiB5C,yBACA,WAfiB,IAAM,EAAO,WAAW,CAgB3C,gBA9LF,8BAWA,kBAIA,kBAEM,EAAqB,CACzB,kBAAmB,EACrB",
|
|
8
|
+
"debugId": "C4188E65493EE0C164756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/dist/src/ripple/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
var _=Object.create;var{getPrototypeOf:f,defineProperty:$,getOwnPropertyNames:B}=Object;var b=Object.prototype.hasOwnProperty;var o=(j,q,y)=>{y=j!=null?_(f(j)):{};let G=q||!j||!j.__esModule?$(y,"default",{value:j,enumerable:!0}):y;for(let Y of B(j))if(!b.call(G,Y))$(G,Y,{get:()=>j[Y],enumerable:!0});return G};var R=(j,q)=>{for(var y in q)$(j,y,{get:q[y],enumerable:!0,configurable:!0,set:(G)=>q[y]=()=>G})};var D=(j,q)=>()=>(j&&(q=j(j=0)),q);var l=((j)=>typeof require!=="undefined"?require:typeof Proxy!=="undefined"?new Proxy(j,{get:(q,y)=>(typeof require!=="undefined"?require:q)[y]}):j)(function(j){if(typeof require!=="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+j+'" is not supported')});var V={};R(V,{rippleValidateAddress:()=>v,hashes:()=>x,getRippleToolbox:()=>u});import{AssetValue as k,BaseDecimal as W,Chain as Q,SKConfig as A,SwapKitError as X,SwapKitNumber as K}from"@swapkit/helpers";import{Client as T,Wallet as w,isValidAddress as C,xrpToDrops as E}from"xrpl";import{hashes as x}from"xrpl";function H(j){let q=w.fromMnemonic(j);return{getAddress:()=>Promise.resolve(q.address),signTransaction:(y)=>Promise.resolve(q.sign(y))}}function v(j){return C(j)}var S,u=async(j={})=>{let q="signer"in j&&j.signer?j.signer:("phrase"in j)&&j.phrase?H(j.phrase):void 0,y=A.get("rpcUrls")[Q.Ripple];if(!y)throw new X({errorKey:"toolbox_ripple_rpc_not_configured",info:{chain:Q.Ripple}});let G=new T(y);await G.connect();let Y=()=>{if(!q)throw new X({errorKey:"toolbox_ripple_signer_not_found"});return q.getAddress()},O=async(z)=>{let M=z||await Y();try{let Z=(await G.request({command:"account_info",account:M})).result.account_data.Balance;return[k.from({chain:Q.Ripple,value:Z,fromBaseDecimal:W[Q.Ripple]})]}catch(J){if(J.data.error_code===S.ACCOUNT_NOT_FOUND)return[k.from({chain:Q.Ripple,value:0})];throw new X("toolbox_ripple_get_balance_error",{info:{address:M,error:J}})}},P=async()=>{let M=(await G.request({command:"fee"})).result.drops.open_ledger_fee;return k.from({chain:Q.Ripple,value:K.fromBigInt(BigInt(M),W[Q.Ripple])})},F=async({assetValue:z,recipient:M,memo:J,sender:Z})=>{if(!v(M))throw new X({errorKey:"core_transaction_invalid_recipient_address"});let U=Z||await Y();if(!z.isGasAsset||z.chain!==Q.Ripple)throw new X({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:z.toString()}});let N={TransactionType:"Payment",Account:U,Amount:E(z.getValue("string")),Destination:M};if(J)N.Memos=[{Memo:{MemoData:Buffer.from(J).toString("hex")}}];return await G.autofill(N)},I=(z)=>{if(!q)throw new X({errorKey:"toolbox_ripple_signer_not_found"});return q.signTransaction(z)},L=async(z)=>{let J=(await G.submitAndWait(z)).result;if(J.validated)return J.hash;throw new X({errorKey:"toolbox_ripple_broadcast_error",info:{chain:Q.Ripple}})};return{signer:q,createSigner:H,getAddress:Y,validateAddress:v,getBalance:O,createTransaction:F,signTransaction:I,broadcastTransaction:L,transfer:async(z)=>{if(!q)throw new X({errorKey:"toolbox_ripple_signer_not_found"});let M=await q.getAddress(),J=await F({...z,sender:M}),Z=await I(J);return L(Z.tx_blob)},estimateTransactionFee:P,disconnect:()=>G.disconnect()}};var h=D(()=>{S={ACCOUNT_NOT_FOUND:19}});h();export{v as rippleValidateAddress,x as hashes,u as getRippleToolbox};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=6312846837C570AC64756E2164756E21
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import {\n AssetValue,\n BaseDecimal,\n Chain,\n type ChainSigner,\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\nexport { hashes, type Transaction } from \"xrpl\";\n\nconst RIPPLE_ERROR_CODES = {\n ACCOUNT_NOT_FOUND: 19,\n} as const;\n\n// Note: Ripple seeds generate a single address, no derivation path/index support.\nfunction createSigner(phrase: string): ChainSigner<Transaction, { tx_blob: string; hash: string }> {\n const wallet = Wallet.fromMnemonic(phrase);\n return {\n // publicKey: wallet.publicKey,\n // Address is sync, but interface requires async\n getAddress: () => Promise.resolve(wallet.address),\n // Signing is sync, but interface requires async\n signTransaction: (tx: Transaction) => Promise.resolve(wallet.sign(tx as Transaction)), // Cast needed as Wallet.sign expects Transaction\n };\n}\n\nexport function rippleValidateAddress(address: string) {\n return isValidAddress(address);\n}\n\ntype RippleToolboxParams =\n | { phrase: string }\n | { signer: ChainSigner<Transaction, { tx_blob: string; hash: string }> }\n | {};\n\nexport const getRippleToolbox = async (params: RippleToolboxParams = {}) => {\n const signer =\n \"signer\" in params && params.signer\n ? params.signer\n : \"phrase\" in params && params.phrase\n ? createSigner(params.phrase)\n : undefined;\n\n const rpcUrl = 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 const accountInfo = await client.request({ command: \"account_info\", account: addr });\n\n const balance = accountInfo.result.account_data.Balance;\n\n return [\n AssetValue.from({\n chain: Chain.Ripple,\n value: balance,\n fromBaseDecimal: BaseDecimal[Chain.Ripple],\n }),\n ];\n } catch (error) {\n // empty account\n if ((error as any).data.error_code === RIPPLE_ERROR_CODES.ACCOUNT_NOT_FOUND) {\n return [\n AssetValue.from({\n chain: Chain.Ripple,\n value: 0,\n }),\n ];\n }\n throw new SwapKitError(\"toolbox_ripple_get_balance_error\", {\n info: { address: addr, error },\n });\n }\n };\n\n const estimateTransactionFee = async () => {\n const feeResponse = await client.request({ command: \"fee\" });\n const feeDrops = feeResponse.result.drops.open_ledger_fee; // Fee in drops\n\n return AssetValue.from({\n chain: Chain.Ripple,\n value: SwapKitNumber.fromBigInt(BigInt(feeDrops), BaseDecimal[Chain.Ripple]),\n });\n };\n\n const createTransaction = async ({\n assetValue,\n recipient,\n memo,\n sender,\n }: { assetValue: AssetValue; recipient: string; sender?: string; memo?: string }) => {\n if (!rippleValidateAddress(recipient)) {\n throw new SwapKitError({ errorKey: \"core_transaction_invalid_recipient_address\" });\n }\n\n const senderAddress = sender || (await getAddress());\n\n if (!assetValue.isGasAsset || assetValue.chain !== Chain.Ripple) {\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_asset_not_supported\",\n info: { asset: assetValue.toString() },\n });\n }\n\n const transaction: Payment = {\n TransactionType: \"Payment\",\n Account: senderAddress,\n Amount: xrpToDrops(assetValue.getValue(\"string\")),\n Destination: recipient,\n };\n\n if (memo) {\n transaction.Memos = [{ Memo: { MemoData: Buffer.from(memo).toString(\"hex\") } }];\n }\n\n const preparedTx = await client.autofill(transaction);\n return preparedTx;\n };\n\n const signTransaction = (tx: Transaction) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n return signer.signTransaction(tx);\n };\n\n const broadcastTransaction = async (signedTxHex: string) => {\n const submitResult = await client.submitAndWait(signedTxHex);\n const result = submitResult.result;\n\n if (result.validated) {\n return result.hash;\n }\n\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_broadcast_error\",\n info: { chain: Chain.Ripple },\n });\n };\n\n const transfer = async (params: GenericTransferParams) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n const sender = await signer.getAddress();\n const tx = await createTransaction({ ...params, sender });\n const signedTx = await signTransaction(tx);\n return broadcastTransaction(signedTx.tx_blob);\n };\n\n const disconnect = () => client.disconnect();\n\n return {\n // Signer related\n signer, // Expose the signer instance if created/provided\n createSigner, // Expose the helper\n // Core methods\n getAddress,\n validateAddress: rippleValidateAddress,\n getBalance,\n createTransaction,\n signTransaction,\n broadcastTransaction,\n transfer,\n estimateTransactionFee,\n disconnect,\n };\n};\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "6312846837C570AC64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var
|
|
1
|
+
var Z=Object.create;var{getPrototypeOf:_,defineProperty:M,getOwnPropertyNames:B,getOwnPropertyDescriptor:$}=Object,F=Object.prototype.hasOwnProperty;var f=(a,T,l)=>{l=a!=null?Z(_(a)):{};let p=T||!a||!a.__esModule?M(l,"default",{value:a,enumerable:!0}):l;for(let y of B(a))if(!F.call(p,y))M(p,y,{get:()=>a[y],enumerable:!0});return p},z=new WeakMap,v=(a)=>{var T=z.get(a),l;if(T)return T;if(T=M({},"__esModule",{value:!0}),a&&typeof a==="object"||typeof a==="function")B(a).map((p)=>!F.call(T,p)&&M(T,p,{get:()=>a[p],enumerable:!(l=$(a,p))||l.enumerable}));return z.set(a,T),T};var I=(a,T)=>{for(var l in T)M(a,l,{get:T[l],enumerable:!0,configurable:!0,set:(p)=>T[l]=()=>p})};var J=(a,T)=>()=>(a&&(T=a(a=0)),T);async function H(a){try{let T=await fetch(`https://lite-api.jup.ag/tokens/v1/token/${a}`);if(!T.ok)return null;return await T.json()}catch{return null}}async function K(a){let T=await h(),{PublicKey:l}=await import("@solana/web3.js"),{TOKEN_PROGRAM_ID:p}=await import("@solana/spl-token"),y=new l(a),P=[],S=await T.getBalance(y);if(S>0)P.push(o.AssetValue.from({chain:o.Chain.Solana,value:S,fromBaseDecimal:o.BaseDecimal[o.Chain.Solana]}));let x=await T.getParsedTokenAccountsByOwner(y,{programId:p});for(let{account:m}of x.value){let b=m.data.parsed.info,O=b.mint,R=b.tokenAmount.amount;if(Number(R)===0)continue;let G=await H(O),q=G?.symbol||"UNKNOWN",w=G?.decimals||b.tokenAmount.decimals;P.push(o.AssetValue.from({asset:`${o.Chain.Solana}.${q}-${O}`,value:R,fromBaseDecimal:w}))}return P}async function A(){let{PublicKey:a}=await import("@solana/web3.js");return(T)=>{try{let l=new a(T);return a.isOnCurve(l.toBytes())}catch(l){return!1}}}async function D(a){let T=a&&"index"in a?a.index||0:0,l=o.derivationPathToString(a&&"derivationPath"in a&&a.derivationPath?a.derivationPath:o.updateDerivationPath(o.NetworkDerivationPath[o.Chain.Solana],{index:T})),p=await Q.match(a).with({phrase:W.P.string},({phrase:P})=>u({phrase:P,derivationPath:l})).with({signer:W.P.any},({signer:P})=>P).otherwise(()=>{return});function y(){return p?.publicKey?N(p.publicKey):""}return{getConnection:h,getAddress:y,createKeysForPath:u,getAddressFromPubKey:N,getPubkeyFromAddress:U,createTransaction:L(h),createTransactionFromInstructions:n,getBalance:(P)=>{let S=P||y();if(!S)throw new o.SwapKitError("core_wallet_connection_not_found");return K(S)},transfer:t(h,p),broadcastTransaction:j(h),getAddressValidator:A,signTransaction:r(h,p),estimateTransactionFee:k(h)}}function k(a){return async({recipient:T,assetValue:l,memo:p,isProgramDerivedAddress:y,sender:P})=>{let S=await a(),m=(await L(a)({recipient:T,assetValue:l,memo:p,isProgramDerivedAddress:y,sender:P})).compileMessage(),b=await S.getFeeForMessage(m);if(b.value===null)throw new o.SwapKitError("toolbox_solana_fee_estimation_failed","Could not estimate Solana fee.");return o.AssetValue.from({chain:o.Chain.Solana,value:b.value,fromBaseDecimal:o.BaseDecimal[o.Chain.Solana]})}}async function h(){let{Connection:a}=await import("@solana/web3.js");return new a(o.SKConfig.get("rpcUrls").SOL,"confirmed")}function s(a){return async({assetValue:T,recipient:l,sender:p,isProgramDerivedAddress:y})=>{let P=await a(),S=await U(p);if(T.isGasAsset){let{Transaction:x,SystemProgram:m,PublicKey:b}=await import("@solana/web3.js");return new x().add(m.transfer({fromPubkey:S,lamports:T.getBaseValue("number"),toPubkey:new b(l)}))}if(T.address)return C({amount:T.getBaseValue("number"),connection:P,decimals:T.decimal,from:S,recipient:l,tokenAddress:T.address,isProgramDerivedAddress:y});return}}async function C({tokenAddress:a,recipient:T,from:l,connection:p,amount:y,decimals:P,isProgramDerivedAddress:S}){let{getAssociatedTokenAddress:x,getAccount:m,createAssociatedTokenAccountInstruction:b,createTransferCheckedInstruction:O}=await import("@solana/spl-token"),{Transaction:R,PublicKey:G}=await import("@solana/web3.js"),q=new R,w=new G(a),Y=await x(w,l),V=new G(T),E=await x(w,V,S),d=!1;try{await m(p,E),d=!0}catch(e){}if(!d)q.add(b(l,E,V,w));return q.add(O(Y,w,E,l,y,P)),q}function L(a){return async({recipient:T,assetValue:l,memo:p,isProgramDerivedAddress:y,sender:P})=>{let{createMemoInstruction:S}=await import("@solana/spl-memo"),x=await U(P),m=await A();if(!(y||m(T)))throw new o.SwapKitError("core_transaction_invalid_recipient_address");let b=await a(),O=await s(a)({assetValue:l,recipient:T,sender:P,isProgramDerivedAddress:y});if(!O)throw new o.SwapKitError("core_transaction_invalid_sender_address");if(p)O.add(S(p));let R=await b.getLatestBlockhash();return O.recentBlockhash=R.blockhash,O.feePayer=x,O}}async function n({instructions:a}){let{Transaction:T}=await import("@solana/web3.js"),l=new T().add(...a);if(!l)throw new o.SwapKitError("core_transaction_invalid_sender_address");return l}function t(a,T){return async({recipient:l,assetValue:p,memo:y,isProgramDerivedAddress:P})=>{if(!T)throw new o.SwapKitError("core_transaction_invalid_sender_address");let S=T.publicKey?.toString()??(await T.connect()).publicKey.toString(),x=await L(a)({recipient:l,assetValue:p,memo:y,isProgramDerivedAddress:P,sender:S});if("connect"in T){let m=await T.signTransaction(x);return j(a)(m)}return x.sign(T),j(a)(x)}}function j(a){return async(T)=>{return(await a()).sendRawTransaction(T.serialize())}}function r(a,T){return async(l)=>{let{VersionedTransaction:p}=await import("@solana/web3.js");if(!T)throw new o.SwapKitError("toolbox_solana_no_signer");if(!(l instanceof p)){let P=await(await a()).getLatestBlockhash();l.recentBlockhash=P.blockhash,l.feePayer=T.publicKey||void 0}if("connect"in T)return await T.signTransaction(l);return await l.sign([T]),l}}async function u({phrase:a,derivationPath:T=o.DerivationPath.SOL}){let{HDKey:l}=await import("micro-key-producer/slip10.js"),{mnemonicToSeedSync:p}=await import("@scure/bip39"),{Keypair:y}=await import("@solana/web3.js"),P=p(a),S=l.fromMasterSeed(P);return y.fromSeed(S.derive(T,!0).privateKey)}function N(a){return a.toString()}async function U(a){let{PublicKey:T}=await import("@solana/web3.js");return new T(a)}var o,W,Q;var X=J(()=>{o=require("@swapkit/helpers"),W=require("ts-pattern"),Q=require("ts-pattern")});var c={};I(c,{getSolanaToolbox:()=>D,getSolanaAddressValidator:()=>A,createKeysForPath:()=>u});module.exports=v(c);var g=J(()=>{X()});g();
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=28BEA18680ABC01F64756E2164756E21
|
|
4
4
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/solana/toolbox.ts"],
|
|
3
|
+
"sources": ["../src/solana/toolbox.ts", "../src/solana/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
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 \".\";\n\ntype SolanaSigner = SolanaProvider | Signer;\n\ntype TokenMetadata = {\n name: string;\n symbol: string;\n decimals: number;\n logoURI?: string;\n tags?: string[];\n daily_volume?: number;\n};\n\nasync function fetchTokenMetaData(mintAddress: string): Promise<TokenMetadata | null> {\n try {\n const response = await fetch(`https://lite-api.jup.ag/tokens/v1/token/${mintAddress}`);\n if (!response.ok) return null;\n return await response.json();\n } catch {\n return null;\n }\n}\n\nasync function getSolanaBalance(address: string) {\n const connection = await getConnection();\n const { PublicKey } = await import(\"@solana/web3.js\");\n const { TOKEN_PROGRAM_ID } = await import(\"@solana/spl-token\");\n const publicKey = new PublicKey(address);\n\n const balances: AssetValue[] = [];\n\n // Get SOL balance\n const solBalance = await connection.getBalance(publicKey);\n if (solBalance > 0) {\n balances.push(\n AssetValue.from({\n chain: Chain.Solana,\n value: solBalance,\n fromBaseDecimal: BaseDecimal[Chain.Solana],\n }),\n );\n }\n\n // Get token balances\n const tokenAccounts = await connection.getParsedTokenAccountsByOwner(publicKey, {\n programId: TOKEN_PROGRAM_ID,\n });\n\n for (const { account } of tokenAccounts.value) {\n const tokenInfo = account.data.parsed.info;\n const mintAddress = tokenInfo.mint;\n const amount = tokenInfo.tokenAmount.amount;\n\n if (Number(amount) === 0) continue;\n\n // Fetch token metadata from Jupiter\n const metadata = await fetchTokenMetaData(mintAddress);\n const symbol = metadata?.symbol || \"UNKNOWN\";\n const decimals = metadata?.decimals || tokenInfo.tokenAmount.decimals;\n\n balances.push(\n AssetValue.from({\n asset: `${Chain.Solana}.${symbol}-${mintAddress}`,\n value: amount,\n fromBaseDecimal: decimals,\n }),\n );\n }\n\n return balances;\n}\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: (addressParam?: string) => {\n const address = addressParam || getAddress();\n if (!address) throw new SwapKitError(\"core_wallet_connection_not_found\");\n return getSolanaBalance(address);\n },\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"
|
|
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 \"./index\";\n\ntype SolanaSigner = SolanaProvider | Signer;\n\ntype TokenMetadata = {\n name: string;\n symbol: string;\n decimals: number;\n logoURI?: string;\n tags?: string[];\n daily_volume?: number;\n};\n\nasync function fetchTokenMetaData(mintAddress: string): Promise<TokenMetadata | null> {\n try {\n const response = await fetch(`https://lite-api.jup.ag/tokens/v1/token/${mintAddress}`);\n if (!response.ok) return null;\n return await response.json();\n } catch {\n return null;\n }\n}\n\nasync function getSolanaBalance(address: string) {\n const connection = await getConnection();\n const { PublicKey } = await import(\"@solana/web3.js\");\n const { TOKEN_PROGRAM_ID } = await import(\"@solana/spl-token\");\n const publicKey = new PublicKey(address);\n\n const balances: AssetValue[] = [];\n\n // Get SOL balance\n const solBalance = await connection.getBalance(publicKey);\n if (solBalance > 0) {\n balances.push(\n AssetValue.from({\n chain: Chain.Solana,\n value: solBalance,\n fromBaseDecimal: BaseDecimal[Chain.Solana],\n }),\n );\n }\n\n // Get token balances\n const tokenAccounts = await connection.getParsedTokenAccountsByOwner(publicKey, {\n programId: TOKEN_PROGRAM_ID,\n });\n\n for (const { account } of tokenAccounts.value) {\n const tokenInfo = account.data.parsed.info;\n const mintAddress = tokenInfo.mint;\n const amount = tokenInfo.tokenAmount.amount;\n\n if (Number(amount) === 0) continue;\n\n // Fetch token metadata from Jupiter\n const metadata = await fetchTokenMetaData(mintAddress);\n const symbol = metadata?.symbol || \"UNKNOWN\";\n const decimals = metadata?.decimals || tokenInfo.tokenAmount.decimals;\n\n balances.push(\n AssetValue.from({\n asset: `${Chain.Solana}.${symbol}-${mintAddress}`,\n value: amount,\n fromBaseDecimal: decimals,\n }),\n );\n }\n\n return balances;\n}\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: (addressParam?: string) => {\n const address = addressParam || getAddress();\n if (!address) throw new SwapKitError(\"core_wallet_connection_not_found\");\n return getSolanaBalance(address);\n },\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
|
+
"import type { PublicKey, SendOptions, Transaction, VersionedTransaction } from \"@solana/web3.js\";\nimport type { GenericCreateTransactionParams, GenericTransferParams } from \"@swapkit/helpers\";\nimport type { getSolanaToolbox } from \"./toolbox\";\n\ntype DisplayEncoding = \"utf8\" | \"hex\";\n\ntype PhantomEvent = \"connect\" | \"disconnect\" | \"accountChanged\";\n\ntype PhantomRequestMethod =\n | \"connect\"\n | \"disconnect\"\n | \"signAndSendTransaction\"\n | \"signAndSendTransactionV0\"\n | \"signAndSendTransactionV0WithLookupTable\"\n | \"signTransaction\"\n | \"signAllTransactions\"\n | \"signMessage\";\n\ninterface ConnectOpts {\n onlyIfTrusted: boolean;\n}\n\nexport * from \"./toolbox\";\n\nexport type SolanaWallet = Awaited<ReturnType<typeof getSolanaToolbox>>;\n\nexport interface SolanaProvider {\n connect: (opts?: Partial<ConnectOpts>) => Promise<{ publicKey: PublicKey }>;\n disconnect: () => Promise<void>;\n getAddress: () => Promise<string>;\n isConnected: boolean | null;\n isPhantom: boolean;\n on: (event: PhantomEvent, handler: (args: any) => void) => void;\n publicKey: PublicKey | null;\n request: (method: PhantomRequestMethod, params: any) => Promise<unknown>;\n signMessage: (message: Uint8Array | string, display?: DisplayEncoding) => Promise<any>;\n signAndSendTransaction: (\n transaction: Transaction | VersionedTransaction,\n opts?: SendOptions,\n ) => Promise<{ signature: string; publicKey: PublicKey }>;\n signTransaction: <T extends Transaction | VersionedTransaction = Transaction>(\n transaction: T,\n ) => Promise<T>;\n signAllTransactions: <T extends Transaction | VersionedTransaction = Transaction>(\n transactions: T[],\n ) => Promise<T[]>;\n}\n\nexport type SolanaCreateTransactionParams = Omit<GenericCreateTransactionParams, \"feeRate\"> & {\n isProgramDerivedAddress?: boolean;\n};\n\nexport type SolanaTransferParams = Omit<GenericTransferParams, \"feeRate\"> & {\n isProgramDerivedAddress?: boolean;\n};\n"
|
|
6
7
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "28BEA18680ABC01F64756E2164756E21",
|
|
9
10
|
"names": []
|
|
10
11
|
}
|
package/dist/src/solana/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
var Z=Object.create;var{getPrototypeOf:_,defineProperty:j,getOwnPropertyNames:$}=Object;var v=Object.prototype.hasOwnProperty;var S=(a,T,l)=>{l=a!=null?Z(_(a)):{};let p=T||!a||!a.__esModule?j(l,"default",{value:a,enumerable:!0}):l;for(let o of $(a))if(!v.call(p,o))j(p,o,{get:()=>a[o],enumerable:!0});return p};var I=(a,T)=>{for(var l in T)j(a,l,{get:T[l],enumerable:!0,configurable:!0,set:(p)=>T[l]=()=>p})};var F=(a,T)=>()=>(a&&(T=a(a=0)),T);var f=((a)=>typeof require!=="undefined"?require:typeof Proxy!=="undefined"?new Proxy(a,{get:(T,l)=>(typeof require!=="undefined"?require:T)[l]}):a)(function(a){if(typeof require!=="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+a+'" is not supported')});import{AssetValue as u,BaseDecimal as Q,Chain as q,DerivationPath as H,NetworkDerivationPath as K,SKConfig as D,SwapKitError as R,derivationPathToString as k,updateDerivationPath as s}from"@swapkit/helpers";import{P as J}from"ts-pattern";import{match as C}from"ts-pattern";async function n(a){try{let T=await fetch(`https://lite-api.jup.ag/tokens/v1/token/${a}`);if(!T.ok)return null;return await T.json()}catch{return null}}async function t(a){let T=await h(),{PublicKey:l}=await import("@solana/web3.js"),{TOKEN_PROGRAM_ID:p}=await import("@solana/spl-token"),o=new l(a),y=[],P=await T.getBalance(o);if(P>0)y.push(u.from({chain:q.Solana,value:P,fromBaseDecimal:Q[q.Solana]}));let x=await T.getParsedTokenAccountsByOwner(o,{programId:p});for(let{account:m}of x.value){let b=m.data.parsed.info,O=b.mint,w=b.tokenAmount.amount;if(Number(w)===0)continue;let M=await n(O),E=M?.symbol||"UNKNOWN",G=M?.decimals||b.tokenAmount.decimals;y.push(u.from({asset:`${q.Solana}.${E}-${O}`,value:w,fromBaseDecimal:G}))}return y}async function U(){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 r(a){let T=a&&"index"in a?a.index||0:0,l=k(a&&"derivationPath"in a&&a.derivationPath?a.derivationPath:s(K[q.Solana],{index:T})),p=await C(a).with({phrase:J.string},({phrase:y})=>L({phrase:y,derivationPath:l})).with({signer:J.any},({signer:y})=>y).otherwise(()=>{return});function o(){return p?.publicKey?N(p.publicKey):""}return{getConnection:h,getAddress:o,createKeysForPath:L,getAddressFromPubKey:N,getPubkeyFromAddress:d,createTransaction:V(h),createTransactionFromInstructions:i,getBalance:(y)=>{let P=y||o();if(!P)throw new R("core_wallet_connection_not_found");return t(P)},transfer:aa(h,p),broadcastTransaction:A(h),getAddressValidator:U,signTransaction:Ta(h,p),estimateTransactionFee:c(h)}}function c(a){return async({recipient:T,assetValue:l,memo:p,isProgramDerivedAddress:o,sender:y})=>{let P=await a(),m=(await V(a)({recipient:T,assetValue:l,memo:p,isProgramDerivedAddress:o,sender:y})).compileMessage(),b=await P.getFeeForMessage(m);if(b.value===null)throw new R("toolbox_solana_fee_estimation_failed","Could not estimate Solana fee.");return u.from({chain:q.Solana,value:b.value,fromBaseDecimal:Q[q.Solana]})}}async function h(){let{Connection:a}=await import("@solana/web3.js");return new a(D.get("rpcUrls").SOL,"confirmed")}function g(a){return async({assetValue:T,recipient:l,sender:p,isProgramDerivedAddress:o})=>{let y=await a(),P=await d(p);if(T.isGasAsset){let{Transaction:x,SystemProgram:m,PublicKey:b}=await import("@solana/web3.js");return new x().add(m.transfer({fromPubkey:P,lamports:T.getBaseValue("number"),toPubkey:new b(l)}))}if(T.address)return e({amount:T.getBaseValue("number"),connection:y,decimals:T.decimal,from:P,recipient:l,tokenAddress:T.address,isProgramDerivedAddress:o});return}}async function e({tokenAddress:a,recipient:T,from:l,connection:p,amount:o,decimals:y,isProgramDerivedAddress:P}){let{getAssociatedTokenAddress:x,getAccount:m,createAssociatedTokenAccountInstruction:b,createTransferCheckedInstruction:O}=await import("@solana/spl-token"),{Transaction:w,PublicKey:M}=await import("@solana/web3.js"),E=new w,G=new M(a),Y=await x(G,l),z=new M(T),W=await x(G,z,P),B=!1;try{await m(p,W),B=!0}catch(oa){}if(!B)E.add(b(l,W,z,G));return E.add(O(Y,G,W,l,o,y)),E}function V(a){return async({recipient:T,assetValue:l,memo:p,isProgramDerivedAddress:o,sender:y})=>{let{createMemoInstruction:P}=await import("@solana/spl-memo"),x=await d(y),m=await U();if(!(o||m(T)))throw new R("core_transaction_invalid_recipient_address");let b=await a(),O=await g(a)({assetValue:l,recipient:T,sender:y,isProgramDerivedAddress:o});if(!O)throw new R("core_transaction_invalid_sender_address");if(p)O.add(P(p));let w=await b.getLatestBlockhash();return O.recentBlockhash=w.blockhash,O.feePayer=x,O}}async function i({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 aa(a,T){return async({recipient:l,assetValue:p,memo:o,isProgramDerivedAddress:y})=>{if(!T)throw new R("core_transaction_invalid_sender_address");let P=T.publicKey?.toString()??(await T.connect()).publicKey.toString(),x=await V(a)({recipient:l,assetValue:p,memo:o,isProgramDerivedAddress:y,sender:P});if("connect"in T){let m=await T.signTransaction(x);return A(a)(m)}return x.sign(T),A(a)(x)}}function A(a){return async(T)=>{return(await a()).sendRawTransaction(T.serialize())}}function Ta(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 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 L({phrase:a,derivationPath:T=H.SOL}){let{HDKey:l}=await import("micro-key-producer/slip10.js"),{mnemonicToSeedSync:p}=await import("@scure/bip39"),{Keypair:o}=await import("@solana/web3.js"),y=p(a),P=l.fromMasterSeed(y);return o.fromSeed(P.derive(T,!0).privateKey)}function N(a){return a.toString()}async function d(a){let{PublicKey:T}=await import("@solana/web3.js");return new T(a)}var X=()=>{};var la={};I(la,{getSolanaToolbox:()=>r,getSolanaAddressValidator:()=>U,createKeysForPath:()=>L});var pa=F(()=>{X()});pa();export{r as getSolanaToolbox,U as getSolanaAddressValidator,L as createKeysForPath};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=BA72D96190655E7264756E2164756E21
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/solana/toolbox.ts"],
|
|
3
|
+
"sources": ["../src/solana/toolbox.ts", "../src/solana/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
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 \".\";\n\ntype SolanaSigner = SolanaProvider | Signer;\n\ntype TokenMetadata = {\n name: string;\n symbol: string;\n decimals: number;\n logoURI?: string;\n tags?: string[];\n daily_volume?: number;\n};\n\nasync function fetchTokenMetaData(mintAddress: string): Promise<TokenMetadata | null> {\n try {\n const response = await fetch(`https://lite-api.jup.ag/tokens/v1/token/${mintAddress}`);\n if (!response.ok) return null;\n return await response.json();\n } catch {\n return null;\n }\n}\n\nasync function getSolanaBalance(address: string) {\n const connection = await getConnection();\n const { PublicKey } = await import(\"@solana/web3.js\");\n const { TOKEN_PROGRAM_ID } = await import(\"@solana/spl-token\");\n const publicKey = new PublicKey(address);\n\n const balances: AssetValue[] = [];\n\n // Get SOL balance\n const solBalance = await connection.getBalance(publicKey);\n if (solBalance > 0) {\n balances.push(\n AssetValue.from({\n chain: Chain.Solana,\n value: solBalance,\n fromBaseDecimal: BaseDecimal[Chain.Solana],\n }),\n );\n }\n\n // Get token balances\n const tokenAccounts = await connection.getParsedTokenAccountsByOwner(publicKey, {\n programId: TOKEN_PROGRAM_ID,\n });\n\n for (const { account } of tokenAccounts.value) {\n const tokenInfo = account.data.parsed.info;\n const mintAddress = tokenInfo.mint;\n const amount = tokenInfo.tokenAmount.amount;\n\n if (Number(amount) === 0) continue;\n\n // Fetch token metadata from Jupiter\n const metadata = await fetchTokenMetaData(mintAddress);\n const symbol = metadata?.symbol || \"UNKNOWN\";\n const decimals = metadata?.decimals || tokenInfo.tokenAmount.decimals;\n\n balances.push(\n AssetValue.from({\n asset: `${Chain.Solana}.${symbol}-${mintAddress}`,\n value: amount,\n fromBaseDecimal: decimals,\n }),\n );\n }\n\n return balances;\n}\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: (addressParam?: string) => {\n const address = addressParam || getAddress();\n if (!address) throw new SwapKitError(\"core_wallet_connection_not_found\");\n return getSolanaBalance(address);\n },\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"
|
|
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 \"./index\";\n\ntype SolanaSigner = SolanaProvider | Signer;\n\ntype TokenMetadata = {\n name: string;\n symbol: string;\n decimals: number;\n logoURI?: string;\n tags?: string[];\n daily_volume?: number;\n};\n\nasync function fetchTokenMetaData(mintAddress: string): Promise<TokenMetadata | null> {\n try {\n const response = await fetch(`https://lite-api.jup.ag/tokens/v1/token/${mintAddress}`);\n if (!response.ok) return null;\n return await response.json();\n } catch {\n return null;\n }\n}\n\nasync function getSolanaBalance(address: string) {\n const connection = await getConnection();\n const { PublicKey } = await import(\"@solana/web3.js\");\n const { TOKEN_PROGRAM_ID } = await import(\"@solana/spl-token\");\n const publicKey = new PublicKey(address);\n\n const balances: AssetValue[] = [];\n\n // Get SOL balance\n const solBalance = await connection.getBalance(publicKey);\n if (solBalance > 0) {\n balances.push(\n AssetValue.from({\n chain: Chain.Solana,\n value: solBalance,\n fromBaseDecimal: BaseDecimal[Chain.Solana],\n }),\n );\n }\n\n // Get token balances\n const tokenAccounts = await connection.getParsedTokenAccountsByOwner(publicKey, {\n programId: TOKEN_PROGRAM_ID,\n });\n\n for (const { account } of tokenAccounts.value) {\n const tokenInfo = account.data.parsed.info;\n const mintAddress = tokenInfo.mint;\n const amount = tokenInfo.tokenAmount.amount;\n\n if (Number(amount) === 0) continue;\n\n // Fetch token metadata from Jupiter\n const metadata = await fetchTokenMetaData(mintAddress);\n const symbol = metadata?.symbol || \"UNKNOWN\";\n const decimals = metadata?.decimals || tokenInfo.tokenAmount.decimals;\n\n balances.push(\n AssetValue.from({\n asset: `${Chain.Solana}.${symbol}-${mintAddress}`,\n value: amount,\n fromBaseDecimal: decimals,\n }),\n );\n }\n\n return balances;\n}\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: (addressParam?: string) => {\n const address = addressParam || getAddress();\n if (!address) throw new SwapKitError(\"core_wallet_connection_not_found\");\n return getSolanaBalance(address);\n },\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
|
+
"import type { PublicKey, SendOptions, Transaction, VersionedTransaction } from \"@solana/web3.js\";\nimport type { GenericCreateTransactionParams, GenericTransferParams } from \"@swapkit/helpers\";\nimport type { getSolanaToolbox } from \"./toolbox\";\n\ntype DisplayEncoding = \"utf8\" | \"hex\";\n\ntype PhantomEvent = \"connect\" | \"disconnect\" | \"accountChanged\";\n\ntype PhantomRequestMethod =\n | \"connect\"\n | \"disconnect\"\n | \"signAndSendTransaction\"\n | \"signAndSendTransactionV0\"\n | \"signAndSendTransactionV0WithLookupTable\"\n | \"signTransaction\"\n | \"signAllTransactions\"\n | \"signMessage\";\n\ninterface ConnectOpts {\n onlyIfTrusted: boolean;\n}\n\nexport * from \"./toolbox\";\n\nexport type SolanaWallet = Awaited<ReturnType<typeof getSolanaToolbox>>;\n\nexport interface SolanaProvider {\n connect: (opts?: Partial<ConnectOpts>) => Promise<{ publicKey: PublicKey }>;\n disconnect: () => Promise<void>;\n getAddress: () => Promise<string>;\n isConnected: boolean | null;\n isPhantom: boolean;\n on: (event: PhantomEvent, handler: (args: any) => void) => void;\n publicKey: PublicKey | null;\n request: (method: PhantomRequestMethod, params: any) => Promise<unknown>;\n signMessage: (message: Uint8Array | string, display?: DisplayEncoding) => Promise<any>;\n signAndSendTransaction: (\n transaction: Transaction | VersionedTransaction,\n opts?: SendOptions,\n ) => Promise<{ signature: string; publicKey: PublicKey }>;\n signTransaction: <T extends Transaction | VersionedTransaction = Transaction>(\n transaction: T,\n ) => Promise<T>;\n signAllTransactions: <T extends Transaction | VersionedTransaction = Transaction>(\n transactions: T[],\n ) => Promise<T[]>;\n}\n\nexport type SolanaCreateTransactionParams = Omit<GenericCreateTransactionParams, \"feeRate\"> & {\n isProgramDerivedAddress?: boolean;\n};\n\nexport type SolanaTransferParams = Omit<GenericTransferParams, \"feeRate\"> & {\n isProgramDerivedAddress?: boolean;\n};\n"
|
|
6
7
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
8
|
+
"mappings": "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",
|
|
9
|
+
"debugId": "BA72D96190655E7264756E2164756E21",
|
|
9
10
|
"names": []
|
|
10
11
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var
|
|
1
|
+
var G=Object.create;var{getPrototypeOf:B,defineProperty:f,getOwnPropertyNames:C,getOwnPropertyDescriptor:V}=Object,A=Object.prototype.hasOwnProperty;var P=(e,t,n)=>{n=e!=null?G(B(e)):{};let r=t||!e||!e.__esModule?f(n,"default",{value:e,enumerable:!0}):n;for(let a of C(e))if(!A.call(r,a))f(r,a,{get:()=>e[a],enumerable:!0});return r},v=new WeakMap,L=(e)=>{var t=v.get(e),n;if(t)return t;if(t=f({},"__esModule",{value:!0}),e&&typeof e==="object"||typeof e==="function")C(e).map((r)=>!A.call(t,r)&&f(t,r,{get:()=>e[r],enumerable:!(n=V(e,r))||n.enumerable}));return v.set(e,t),t};var U=(e,t)=>{for(var n in t)f(e,n,{get:t[n],enumerable:!0,configurable:!0,set:(r)=>t[n]=()=>r})};var g=(e,t)=>()=>(e&&(t=e(e=0)),t);async function H(e,t,n){try{let r=await e.query.system?.account?.(n);if(!r)return[t.set(0)];let{data:{free:a}}=r,o=l.SwapKitNumber.fromBigInt(BigInt(a.toString()),t.decimal).getValue("string");return[t.set(o)]}catch(r){return console.error("Error fetching substrate balance:",r),[t.set(0)]}}async function W(e,t,n){try{let r=await e.query.flip?.account?.(n);if(!r)return[t.set(0)];let a=r.balance||r.data?.balance;if(!a||a.isEmpty)return[t.set(0)];let o=l.SwapKitNumber.fromBigInt(BigInt(a.toString()),t.decimal).getValue("string");return[t.set(o)]}catch(r){return console.error("Error fetching chainflip balance:",r),[t.set(0)]}}function E(e,t){return function n(r){let a=l.AssetValue.from({chain:e});switch(e){case l.Chain.Chainflip:return W(t,a,r);default:return H(t,a,r)}}}var l;var K=g(()=>{l=require("@swapkit/helpers")});var O,q,z,d;var x=g(()=>{O={prefix:0,network:"polkadot",displayName:"Polkadot Relay Chain",symbols:["DOT"],decimals:[10],standardAccount:"*25519",website:"https://polkadot.network"},q={prefix:2112,network:"chainflip",displayName:"Chainflip",symbols:["FLIP"],decimals:[18],standardAccount:"*25519",website:"https://chainflip.io/"},z={prefix:42,network:"substrate",displayName:"Substrate",symbols:[],decimals:[],standardAccount:"*25519",website:"https://substrate.io/"},d={DOT:O,FLIP:q,GENERIC:z}});function J(e,t){switch(e){case i.Chain.Chainflip:return N(t);case i.Chain.Polkadot:return j(t);default:throw new i.SwapKitError("toolbox_substrate_not_supported",{chain:e})}}function p(e){return"address"in e}async function S(e,t){let{Keyring:n}=await import("@polkadot/api"),{cryptoWaitReady:r}=await import("@polkadot/util-crypto");return await r(),new n({type:"sr25519",ss58Format:t}).addFromUri(e)}function te(e,t){let n=m.decodeAddress(e);return m.encodeAddress(n,t)}function R(e,t){return u.isHex(e)?u.hexToU8a(e):m.decodeAddress(e,void 0,t)}function D(e,t="ss58",n){if(t==="hex")return u.u8aToHex(e);return m.encodeAddress(e,n)}async function T({generic:e,chain:t,...n}){let{ApiPromise:r,WsProvider:a}=await import("@polkadot/api"),o=new a(i.SKConfig.get("rpcUrls")[t]),s=await r.create({provider:o}),c=i.AssetValue.from({chain:t}),y=e?d.GENERIC:d[t],_=await b.match(n).with({phrase:b.P.string},({phrase:w})=>S(w,d[t].prefix)).with({signer:b.P.any},({signer:w})=>w).otherwise(()=>{return});return M({api:s,signer:_,gasAsset:c,network:y,chain:t})}var u,m,i,b,j=({generic:e=!1,...t}={})=>{return T({chain:i.Chain.Polkadot,generic:e,...t})},N=async({generic:e=!1,...t}={})=>{return{...await T({chain:i.Chain.Chainflip,generic:e,...t})}},k=(e,t)=>e.rpc.system.accountNextIndex(t),h=(e,t)=>{try{let n=R(e,t);return D(n,"ss58",t),!0}catch(n){return!1}},I=(e,{recipient:t,assetValue:n})=>e.tx.balances?.transferAllowDeath?.(t,n.getBaseValue("number")),Q=async(e,t,{recipient:n,assetValue:r,sender:a})=>{let o=I(e,{recipient:n,assetValue:r}),s=p(t);if(!o)return;let c=s?t.address:a;if(!c)throw new i.SwapKitError("core_transaction_invalid_sender_address");let y=await k(e,c);return(await o.signAndSend(s?t:c,{signer:s?void 0:t,nonce:y}))?.toString()},X=async(e,t,n,{recipient:r,assetValue:a,sender:o})=>{let s=I(e,{recipient:r,assetValue:a}),c=p(t)?t.address:o;if(!c)return;let y=await s?.paymentInfo(c,{nonce:await k(e,c)})||{partialFee:0};return n.set(i.SwapKitNumber.fromBigInt(BigInt(y.partialFee.toString()),n.decimal).getValue("string"))},Y=async(e,t)=>{if(t)return e.send(t);return(await e.send()).toString()},Z=async(e,t)=>{return await t.signAsync(e)},$=(e,t,n)=>{if(n)return t.signAndSend(e,n);return t.signAndSend(e).toString()},ee=async({signer:e,address:t,tx:n,callback:r,api:a})=>{let o=await k(a,t);if(r)n.signAndSend(t,{nonce:o,signer:e},r);return n.signAndSend(t,{nonce:o,signer:e}).toString()},M=({api:e,network:t,gasAsset:n,signer:r,chain:a})=>({api:e,network:t,gasAsset:n,decodeAddress:R,encodeAddress:D,convertAddress:te,getBalance:E(a||i.Chain.Polkadot,e),createKeyring:(o)=>S(o,t.prefix),getAddress:(o)=>{let s=o||r;if(!s)throw new i.SwapKitError("core_wallet_not_keypair_wallet");return p(s)?s.address:void 0},createTransaction:(o)=>I(e,o),validateAddress:(o)=>h(o,t.prefix),transfer:(o)=>{if(!r)throw new i.SwapKitError("core_wallet_not_keypair_wallet");return Q(e,r,o)},estimateTransactionFee:(o)=>{if(!r)throw new i.SwapKitError("core_wallet_not_keypair_wallet");return X(e,r,n,o)},sign:(o)=>{if(!r)throw new i.SwapKitError("core_wallet_not_keypair_wallet");if(p(r))return Z(r,o);throw new i.SwapKitError("core_wallet_not_keypair_wallet","Signer does not have keyring pair capabilities required for signing.")},broadcast:Y,signAndBroadcast:({tx:o,callback:s,address:c})=>{if(!r)throw new i.SwapKitError("core_wallet_not_keypair_wallet");if(p(r))return $(r,o,s);if(c)return ee({signer:r,address:c,tx:o,callback:s,api:e});throw new i.SwapKitError("core_wallet_not_keypair_wallet","Signer does not have keyring pair capabilities required for signing.")}}),re=({address:e,chain:t})=>{let{prefix:n}=t===i.Chain.Polkadot?d.DOT:d.FLIP;return h(e,n)||h(e,d.GENERIC.prefix)};var F=g(()=>{u=require("@polkadot/util"),m=require("@polkadot/util-crypto"),i=require("@swapkit/helpers"),b=require("ts-pattern");K();x()});var ne={};U(ne,{substrateValidateAddress:()=>re,isKeyringPair:()=>p,getSubstrateToolbox:()=>J,createSubstrateToolbox:()=>T,createKeyring:()=>S,SubstrateNetwork:()=>d,PolkadotToolbox:()=>j,ChainflipToolbox:()=>N,BaseSubstrateToolbox:()=>M});module.exports=L(ne);var oe=g(()=>{F();x()});oe();
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=0217F1FF1B7AE85664756E2164756E21
|
|
4
4
|
//# sourceMappingURL=index.cjs.map
|