@swapkit/plugins 1.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/chainflip/index.cjs +3 -0
  2. package/dist/chainflip/index.cjs.map +11 -0
  3. package/dist/chainflip/index.js +3 -0
  4. package/dist/chainflip/index.js.map +11 -0
  5. package/dist/chunk-fazw0jvt.js +3 -0
  6. package/dist/chunk-fazw0jvt.js.map +9 -0
  7. package/dist/chunk-tvrdndbw.js +4 -0
  8. package/dist/chunk-tvrdndbw.js.map +9 -0
  9. package/dist/evm/index.cjs +3 -0
  10. package/dist/evm/index.cjs.map +10 -0
  11. package/dist/evm/index.js +3 -0
  12. package/dist/evm/index.js.map +10 -0
  13. package/dist/index.cjs +3 -0
  14. package/dist/index.cjs.map +9 -0
  15. package/dist/index.js +2 -0
  16. package/dist/index.js.map +9 -0
  17. package/dist/kado/index.cjs +20 -0
  18. package/dist/kado/index.cjs.map +12 -0
  19. package/dist/kado/index.js +20 -0
  20. package/dist/kado/index.js.map +12 -0
  21. package/dist/radix/index.cjs +3 -0
  22. package/dist/radix/index.cjs.map +10 -0
  23. package/dist/radix/index.js +3 -0
  24. package/dist/radix/index.js.map +10 -0
  25. package/dist/thorchain/index.cjs +3 -0
  26. package/dist/thorchain/index.cjs.map +11 -0
  27. package/dist/thorchain/index.js +3 -0
  28. package/dist/thorchain/index.js.map +11 -0
  29. package/package.json +65 -0
  30. package/src/chainflip/broker.ts +126 -0
  31. package/src/chainflip/index.ts +3 -0
  32. package/src/chainflip/plugin.ts +78 -0
  33. package/src/chainflip/types.ts +48 -0
  34. package/src/evm/index.ts +82 -0
  35. package/src/index.ts +3 -0
  36. package/src/kado/helpers.ts +117 -0
  37. package/src/kado/index.ts +3 -0
  38. package/src/kado/plugin.ts +234 -0
  39. package/src/kado/types.ts +225 -0
  40. package/src/radix/index.ts +36 -0
  41. package/src/thorchain/index.ts +3 -0
  42. package/src/thorchain/plugin.ts +491 -0
  43. package/src/thorchain/shared.ts +23 -0
  44. package/src/thorchain/types.ts +93 -0
@@ -0,0 +1,3 @@
1
+ var F={};k(F,{assetIdentifierToChainflipTicker:()=>l,ChainflipPlugin:()=>b,ChainflipBroker:()=>E});module.exports=R(F);var g=require("@polkadot/keyring"),A=require("@polkadot/util"),s=require("@swapkit/helpers"),w=require("@swapkit/helpers/contracts"),l=new Map([["ARB.ETH","ArbEth"],["ARB.USDC-0XAF88D065E77C8CC2239327C5EDB3A432268E5831","ArbUsdc"],["BTC.BTC","Btc"],["DOT.DOT","Dot"],["ETH.ETH","Eth"],["ETH.FLIP-0X826180541412D574CF1336D22C0C0A287822678A","Flip"],["ETH.USDC-0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48","Usdc"],["ETH.USDT-0XDAC17F958D2EE523A2206206994597C13D831EC7","Usdt"],["SOL.SOL","Sol"],["SOL.USDC-EPJFWDD5AUFQSSQEM2QN1XZYBAPC8G4WEGGKZWYTDT1V","SolUsdc"]]),x=(e)=>()=>{let n=e.api.tx.swapping?.registerAsBroker?.();if(!n)throw new s.SwapKitError("chainflip_broker_register");return e.signAndBroadcast({tx:n,address:e.getAddress()})},B=(e)=>({feeAsset:n,recipient:r})=>{let i=n.chain===s.Chain.Polkadot,d=s.wrapWithThrow(()=>{return i?e.encodeAddress(e.decodeAddress(r),"hex"):r},"chainflip_broker_recipient_error");return new Promise((o)=>{let f=e.api.tx?.swapping?.withdraw?.(n.ticker.toLowerCase(),{[n.chain.toLowerCase()]:d});if(!f)throw new s.SwapKitError("chainflip_broker_withdraw");e.signAndBroadcast({tx:f,callback:async(c)=>{if(!c.status?.isFinalized)return;let a=c.events.find((y)=>y.event.method==="WithdrawalRequested");if(!a)throw new s.SwapKitError("chainflip_channel_error","Could not find 'WithdrawalRequested' event");let{event:{data:{egressId:h,egressAsset:u,egressAmount:p,egressFee:m,destinationAddress:C}}}=a.toHuman();o({egressId:h,egressAsset:u,egressAmount:p,egressFee:m,destinationAddress:C})}})})},D=(e)=>({evmToolbox:n,stateChainAccount:r,assetValue:i})=>{let d=s.AssetValue.from({asset:"ETH.FLIP"});if(!i.eqAsset(d))throw new s.SwapKitError("chainflip_broker_fund_only_flip_supported");if(!e.validateAddress(r))throw new s.SwapKitError("chainflip_broker_fund_invalid_address");let o=A.isHex(r)?r:A.u8aToHex(g.decodeAddress(r));return n.call({abi:w.chainflipGateway,contractAddress:"0x6995ab7c4d7f4b03f467cf4c8e920427d9621dbd",funcName:"fundStateChainAccount",funcParams:[o,i.getBaseValue("string")]})},E=(e)=>({registerAsBroker:x(e),fundStateChainAccount:D(e),withdrawFee:B(e)});var t=require("@swapkit/helpers"),T=require("@swapkit/helpers/api"),b=t.createPlugin({name:"chainflip",methods:({getWallet:e})=>({swap:async function n(r){let i=t.SKConfig.get("integrations").chainflip?.brokerUrl;if(!(r?.route?.buyAsset&&i&&r.route.meta.chainflip))throw new t.SwapKitError("core_swap_invalid_params",{...r,chainflipBrokerUrl:i});let{route:{buyAsset:d,sellAsset:o,sellAmount:f,destinationAddress:c,meta:{chainflip:a}},maxBoostFeeBps:h=0}=r;if(!(o&&d))throw new t.SwapKitError("core_swap_asset_not_recognized");let u=await t.AssetValue.from({asyncTokenLookup:!0,asset:o,value:f}),p=e(u.chain);if(!p)throw new t.SwapKitError("core_wallet_connection_not_found");let{depositAddress:m}=await T.SwapKitApi.getChainflipDepositChannel({...a,destinationAddress:c||a.destinationAddress,maxBoostFeeBps:h||a.maxBoostFeeBps});return await p.transfer({assetValue:u,from:p.address,recipient:m,isProgramDerivedAddress:!0})}}),properties:{supportedSwapkitProviders:[t.ProviderName.CHAINFLIP,t.ProviderName.CHAINFLIP_STREAMING]}});
2
+
3
+ //# debugId=3A4BB8F9C793E1D464756E2164756E21
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/chainflip/broker.ts", "../src/chainflip/plugin.ts"],
4
+ "sourcesContent": [
5
+ "import { decodeAddress } from \"@polkadot/keyring\";\nimport { isHex, u8aToHex } from \"@polkadot/util\";\nimport { AssetValue, Chain, SwapKitError, wrapWithThrow } from \"@swapkit/helpers\";\nimport { chainflipGateway } from \"@swapkit/helpers/contracts\";\nimport type { ETHToolbox } from \"@swapkit/toolboxes/evm\";\nimport type { ChainflipToolbox } from \"@swapkit/toolboxes/substrate\";\n\nimport type { WithdrawFeeResponse } from \"./types\";\n\nexport const assetIdentifierToChainflipTicker = new Map<string, string>([\n [\"ARB.ETH\", \"ArbEth\"],\n [\"ARB.USDC-0XAF88D065E77C8CC2239327C5EDB3A432268E5831\", \"ArbUsdc\"],\n [\"BTC.BTC\", \"Btc\"],\n [\"DOT.DOT\", \"Dot\"],\n [\"ETH.ETH\", \"Eth\"],\n [\"ETH.FLIP-0X826180541412D574CF1336D22C0C0A287822678A\", \"Flip\"],\n [\"ETH.USDC-0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48\", \"Usdc\"],\n [\"ETH.USDT-0XDAC17F958D2EE523A2206206994597C13D831EC7\", \"Usdt\"],\n [\"SOL.SOL\", \"Sol\"],\n [\"SOL.USDC-EPJFWDD5AUFQSSQEM2QN1XZYBAPC8G4WEGGKZWYTDT1V\", \"SolUsdc\"],\n]);\n\nconst registerAsBroker = (toolbox: Awaited<ReturnType<typeof ChainflipToolbox>>) => () => {\n const extrinsic = toolbox.api.tx.swapping?.registerAsBroker?.();\n\n if (!extrinsic) {\n throw new SwapKitError(\"chainflip_broker_register\");\n }\n\n return toolbox.signAndBroadcast({ tx: extrinsic, address: toolbox.getAddress() });\n};\n\nconst withdrawFee =\n (toolbox: Awaited<ReturnType<typeof ChainflipToolbox>>) =>\n ({ feeAsset, recipient }: { feeAsset: AssetValue; recipient: string }) => {\n const isFeeChainPolkadot = feeAsset.chain === Chain.Polkadot;\n\n const recipientAddress = wrapWithThrow(() => {\n return isFeeChainPolkadot\n ? toolbox.encodeAddress(toolbox.decodeAddress(recipient), \"hex\")\n : recipient;\n }, \"chainflip_broker_recipient_error\");\n\n return new Promise<WithdrawFeeResponse>((resolve) => {\n const extrinsic = toolbox.api.tx?.swapping?.withdraw?.(feeAsset.ticker.toLowerCase(), {\n [feeAsset.chain.toLowerCase()]: recipientAddress,\n });\n\n if (!extrinsic) {\n throw new SwapKitError(\"chainflip_broker_withdraw\");\n }\n\n toolbox.signAndBroadcast({\n tx: extrinsic,\n callback: async (result) => {\n if (!result.status?.isFinalized) {\n return;\n }\n\n const withdrawEvent = result.events.find(\n (event) => event.event.method === \"WithdrawalRequested\",\n );\n\n if (!withdrawEvent) {\n throw new SwapKitError(\n \"chainflip_channel_error\",\n \"Could not find 'WithdrawalRequested' event\",\n );\n }\n const {\n event: {\n data: { egressId, egressAsset, egressAmount, egressFee, destinationAddress },\n },\n } = withdrawEvent.toHuman() as any;\n resolve({\n egressId,\n egressAsset,\n egressAmount,\n egressFee,\n destinationAddress,\n });\n },\n });\n });\n };\n\nconst fundStateChainAccount =\n (chainflipToolbox: Awaited<ReturnType<typeof ChainflipToolbox>>) =>\n ({\n evmToolbox,\n stateChainAccount,\n assetValue,\n }: {\n evmToolbox: ReturnType<typeof ETHToolbox>;\n stateChainAccount: string;\n assetValue: AssetValue;\n }) => {\n const flipAssetValue = AssetValue.from({ asset: \"ETH.FLIP\" });\n\n if (!assetValue.eqAsset(flipAssetValue)) {\n throw new SwapKitError(\"chainflip_broker_fund_only_flip_supported\");\n }\n\n if (!chainflipToolbox.validateAddress(stateChainAccount)) {\n throw new SwapKitError(\"chainflip_broker_fund_invalid_address\");\n }\n\n const hexAddress = isHex(stateChainAccount)\n ? stateChainAccount\n : u8aToHex(decodeAddress(stateChainAccount));\n\n return evmToolbox.call<string>({\n abi: chainflipGateway,\n contractAddress: \"0x6995ab7c4d7f4b03f467cf4c8e920427d9621dbd\",\n funcName: \"fundStateChainAccount\",\n funcParams: [hexAddress, assetValue.getBaseValue(\"string\")],\n });\n };\n\nexport const ChainflipBroker = (\n chainflipToolbox: Awaited<ReturnType<typeof ChainflipToolbox>>,\n) => ({\n registerAsBroker: registerAsBroker(chainflipToolbox),\n fundStateChainAccount: fundStateChainAccount(chainflipToolbox),\n withdrawFee: withdrawFee(chainflipToolbox),\n});\n",
6
+ "import {\n AssetValue,\n type EVMWallets,\n ProviderName,\n SKConfig,\n type SolanaWallets,\n type SubstrateWallets,\n SwapKitError,\n type UTXOWallets,\n createPlugin,\n} from \"@swapkit/helpers\";\nimport { SwapKitApi } from \"@swapkit/helpers/api\";\nimport type { RequestSwapDepositAddressParams } from \"./types\";\n\ntype SupportedChain = keyof (EVMWallets & SubstrateWallets & UTXOWallets & SolanaWallets);\n\nexport const ChainflipPlugin = createPlugin({\n name: \"chainflip\",\n methods: ({ getWallet }) => ({\n swap: async function chainflipSwap(swapParams: RequestSwapDepositAddressParams) {\n const brokerUrl = SKConfig.get(\"integrations\").chainflip?.brokerUrl;\n\n if (!(swapParams?.route?.buyAsset && brokerUrl && swapParams.route.meta.chainflip)) {\n throw new SwapKitError(\"core_swap_invalid_params\", {\n ...swapParams,\n chainflipBrokerUrl: brokerUrl,\n });\n }\n\n const {\n route: {\n buyAsset: buyAssetString,\n sellAsset: sellAssetString,\n sellAmount,\n destinationAddress: recipient,\n meta: { chainflip },\n },\n maxBoostFeeBps = 0,\n } = swapParams;\n\n if (!(sellAssetString && buyAssetString)) {\n throw new SwapKitError(\"core_swap_asset_not_recognized\");\n }\n\n const sellAsset = await AssetValue.from({\n asyncTokenLookup: true,\n asset: sellAssetString,\n value: sellAmount,\n });\n\n const wallet = getWallet(sellAsset.chain as SupportedChain);\n\n if (!wallet) {\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n }\n\n const { depositAddress } = await SwapKitApi.getChainflipDepositChannel({\n ...chainflip,\n destinationAddress: recipient || chainflip.destinationAddress,\n maxBoostFeeBps: maxBoostFeeBps || chainflip.maxBoostFeeBps,\n });\n\n // @ts-expect-error TODO: right now it's inferred from toolboxes\n // we need to simplify this to one object params\n const tx = await wallet.transfer({\n assetValue: sellAsset,\n from: wallet.address,\n recipient: depositAddress,\n isProgramDerivedAddress: true,\n });\n\n return tx as string;\n },\n }),\n properties: {\n supportedSwapkitProviders: [ProviderName.CHAINFLIP, ProviderName.CHAINFLIP_STREAMING],\n },\n});\n"
7
+ ],
8
+ "mappings": "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",
9
+ "debugId": "3A4BB8F9C793E1D464756E2164756E21",
10
+ "names": []
11
+ }
@@ -0,0 +1,3 @@
1
+ import"../chunk-tvrdndbw.js";import{decodeAddress as w}from"@polkadot/keyring";import{isHex as T,u8aToHex as y}from"@polkadot/util";import{AssetValue as l,Chain as x,SwapKitError as d,wrapWithThrow as B}from"@swapkit/helpers";import{chainflipGateway as D}from"@swapkit/helpers/contracts";var L=new Map([["ARB.ETH","ArbEth"],["ARB.USDC-0XAF88D065E77C8CC2239327C5EDB3A432268E5831","ArbUsdc"],["BTC.BTC","Btc"],["DOT.DOT","Dot"],["ETH.ETH","Eth"],["ETH.FLIP-0X826180541412D574CF1336D22C0C0A287822678A","Flip"],["ETH.USDC-0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48","Usdc"],["ETH.USDT-0XDAC17F958D2EE523A2206206994597C13D831EC7","Usdt"],["SOL.SOL","Sol"],["SOL.USDC-EPJFWDD5AUFQSSQEM2QN1XZYBAPC8G4WEGGKZWYTDT1V","SolUsdc"]]),E=(e)=>()=>{let r=e.api.tx.swapping?.registerAsBroker?.();if(!r)throw new d("chainflip_broker_register");return e.signAndBroadcast({tx:r,address:e.getAddress()})},b=(e)=>({feeAsset:r,recipient:t})=>{let s=r.chain===x.Polkadot,o=B(()=>{return s?e.encodeAddress(e.decodeAddress(t),"hex"):t},"chainflip_broker_recipient_error");return new Promise((n)=>{let p=e.api.tx?.swapping?.withdraw?.(r.ticker.toLowerCase(),{[r.chain.toLowerCase()]:o});if(!p)throw new d("chainflip_broker_withdraw");e.signAndBroadcast({tx:p,callback:async(f)=>{if(!f.status?.isFinalized)return;let i=f.events.find((g)=>g.event.method==="WithdrawalRequested");if(!i)throw new d("chainflip_channel_error","Could not find 'WithdrawalRequested' event");let{event:{data:{egressId:u,egressAsset:c,egressAmount:a,egressFee:A,destinationAddress:m}}}=i.toHuman();n({egressId:u,egressAsset:c,egressAmount:a,egressFee:A,destinationAddress:m})}})})},R=(e)=>({evmToolbox:r,stateChainAccount:t,assetValue:s})=>{let o=l.from({asset:"ETH.FLIP"});if(!s.eqAsset(o))throw new d("chainflip_broker_fund_only_flip_supported");if(!e.validateAddress(t))throw new d("chainflip_broker_fund_invalid_address");let n=T(t)?t:y(w(t));return r.call({abi:D,contractAddress:"0x6995ab7c4d7f4b03f467cf4c8e920427d9621dbd",funcName:"fundStateChainAccount",funcParams:[n,s.getBaseValue("string")]})},U=(e)=>({registerAsBroker:E(e),fundStateChainAccount:R(e),withdrawFee:b(e)});import{AssetValue as k,ProviderName as C,SKConfig as F,SwapKitError as h,createPlugin as _}from"@swapkit/helpers";import{SwapKitApi as S}from"@swapkit/helpers/api";var M=_({name:"chainflip",methods:({getWallet:e})=>({swap:async function r(t){let s=F.get("integrations").chainflip?.brokerUrl;if(!(t?.route?.buyAsset&&s&&t.route.meta.chainflip))throw new h("core_swap_invalid_params",{...t,chainflipBrokerUrl:s});let{route:{buyAsset:o,sellAsset:n,sellAmount:p,destinationAddress:f,meta:{chainflip:i}},maxBoostFeeBps:u=0}=t;if(!(n&&o))throw new h("core_swap_asset_not_recognized");let c=await k.from({asyncTokenLookup:!0,asset:n,value:p}),a=e(c.chain);if(!a)throw new h("core_wallet_connection_not_found");let{depositAddress:A}=await S.getChainflipDepositChannel({...i,destinationAddress:f||i.destinationAddress,maxBoostFeeBps:u||i.maxBoostFeeBps});return await a.transfer({assetValue:c,from:a.address,recipient:A,isProgramDerivedAddress:!0})}}),properties:{supportedSwapkitProviders:[C.CHAINFLIP,C.CHAINFLIP_STREAMING]}});export{L as assetIdentifierToChainflipTicker,M as ChainflipPlugin,U as ChainflipBroker};
2
+
3
+ //# debugId=F0911CE1A2E4080064756E2164756E21
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/chainflip/broker.ts", "../src/chainflip/plugin.ts"],
4
+ "sourcesContent": [
5
+ "import { decodeAddress } from \"@polkadot/keyring\";\nimport { isHex, u8aToHex } from \"@polkadot/util\";\nimport { AssetValue, Chain, SwapKitError, wrapWithThrow } from \"@swapkit/helpers\";\nimport { chainflipGateway } from \"@swapkit/helpers/contracts\";\nimport type { ETHToolbox } from \"@swapkit/toolboxes/evm\";\nimport type { ChainflipToolbox } from \"@swapkit/toolboxes/substrate\";\n\nimport type { WithdrawFeeResponse } from \"./types\";\n\nexport const assetIdentifierToChainflipTicker = new Map<string, string>([\n [\"ARB.ETH\", \"ArbEth\"],\n [\"ARB.USDC-0XAF88D065E77C8CC2239327C5EDB3A432268E5831\", \"ArbUsdc\"],\n [\"BTC.BTC\", \"Btc\"],\n [\"DOT.DOT\", \"Dot\"],\n [\"ETH.ETH\", \"Eth\"],\n [\"ETH.FLIP-0X826180541412D574CF1336D22C0C0A287822678A\", \"Flip\"],\n [\"ETH.USDC-0XA0B86991C6218B36C1D19D4A2E9EB0CE3606EB48\", \"Usdc\"],\n [\"ETH.USDT-0XDAC17F958D2EE523A2206206994597C13D831EC7\", \"Usdt\"],\n [\"SOL.SOL\", \"Sol\"],\n [\"SOL.USDC-EPJFWDD5AUFQSSQEM2QN1XZYBAPC8G4WEGGKZWYTDT1V\", \"SolUsdc\"],\n]);\n\nconst registerAsBroker = (toolbox: Awaited<ReturnType<typeof ChainflipToolbox>>) => () => {\n const extrinsic = toolbox.api.tx.swapping?.registerAsBroker?.();\n\n if (!extrinsic) {\n throw new SwapKitError(\"chainflip_broker_register\");\n }\n\n return toolbox.signAndBroadcast({ tx: extrinsic, address: toolbox.getAddress() });\n};\n\nconst withdrawFee =\n (toolbox: Awaited<ReturnType<typeof ChainflipToolbox>>) =>\n ({ feeAsset, recipient }: { feeAsset: AssetValue; recipient: string }) => {\n const isFeeChainPolkadot = feeAsset.chain === Chain.Polkadot;\n\n const recipientAddress = wrapWithThrow(() => {\n return isFeeChainPolkadot\n ? toolbox.encodeAddress(toolbox.decodeAddress(recipient), \"hex\")\n : recipient;\n }, \"chainflip_broker_recipient_error\");\n\n return new Promise<WithdrawFeeResponse>((resolve) => {\n const extrinsic = toolbox.api.tx?.swapping?.withdraw?.(feeAsset.ticker.toLowerCase(), {\n [feeAsset.chain.toLowerCase()]: recipientAddress,\n });\n\n if (!extrinsic) {\n throw new SwapKitError(\"chainflip_broker_withdraw\");\n }\n\n toolbox.signAndBroadcast({\n tx: extrinsic,\n callback: async (result) => {\n if (!result.status?.isFinalized) {\n return;\n }\n\n const withdrawEvent = result.events.find(\n (event) => event.event.method === \"WithdrawalRequested\",\n );\n\n if (!withdrawEvent) {\n throw new SwapKitError(\n \"chainflip_channel_error\",\n \"Could not find 'WithdrawalRequested' event\",\n );\n }\n const {\n event: {\n data: { egressId, egressAsset, egressAmount, egressFee, destinationAddress },\n },\n } = withdrawEvent.toHuman() as any;\n resolve({\n egressId,\n egressAsset,\n egressAmount,\n egressFee,\n destinationAddress,\n });\n },\n });\n });\n };\n\nconst fundStateChainAccount =\n (chainflipToolbox: Awaited<ReturnType<typeof ChainflipToolbox>>) =>\n ({\n evmToolbox,\n stateChainAccount,\n assetValue,\n }: {\n evmToolbox: ReturnType<typeof ETHToolbox>;\n stateChainAccount: string;\n assetValue: AssetValue;\n }) => {\n const flipAssetValue = AssetValue.from({ asset: \"ETH.FLIP\" });\n\n if (!assetValue.eqAsset(flipAssetValue)) {\n throw new SwapKitError(\"chainflip_broker_fund_only_flip_supported\");\n }\n\n if (!chainflipToolbox.validateAddress(stateChainAccount)) {\n throw new SwapKitError(\"chainflip_broker_fund_invalid_address\");\n }\n\n const hexAddress = isHex(stateChainAccount)\n ? stateChainAccount\n : u8aToHex(decodeAddress(stateChainAccount));\n\n return evmToolbox.call<string>({\n abi: chainflipGateway,\n contractAddress: \"0x6995ab7c4d7f4b03f467cf4c8e920427d9621dbd\",\n funcName: \"fundStateChainAccount\",\n funcParams: [hexAddress, assetValue.getBaseValue(\"string\")],\n });\n };\n\nexport const ChainflipBroker = (\n chainflipToolbox: Awaited<ReturnType<typeof ChainflipToolbox>>,\n) => ({\n registerAsBroker: registerAsBroker(chainflipToolbox),\n fundStateChainAccount: fundStateChainAccount(chainflipToolbox),\n withdrawFee: withdrawFee(chainflipToolbox),\n});\n",
6
+ "import {\n AssetValue,\n type EVMWallets,\n ProviderName,\n SKConfig,\n type SolanaWallets,\n type SubstrateWallets,\n SwapKitError,\n type UTXOWallets,\n createPlugin,\n} from \"@swapkit/helpers\";\nimport { SwapKitApi } from \"@swapkit/helpers/api\";\nimport type { RequestSwapDepositAddressParams } from \"./types\";\n\ntype SupportedChain = keyof (EVMWallets & SubstrateWallets & UTXOWallets & SolanaWallets);\n\nexport const ChainflipPlugin = createPlugin({\n name: \"chainflip\",\n methods: ({ getWallet }) => ({\n swap: async function chainflipSwap(swapParams: RequestSwapDepositAddressParams) {\n const brokerUrl = SKConfig.get(\"integrations\").chainflip?.brokerUrl;\n\n if (!(swapParams?.route?.buyAsset && brokerUrl && swapParams.route.meta.chainflip)) {\n throw new SwapKitError(\"core_swap_invalid_params\", {\n ...swapParams,\n chainflipBrokerUrl: brokerUrl,\n });\n }\n\n const {\n route: {\n buyAsset: buyAssetString,\n sellAsset: sellAssetString,\n sellAmount,\n destinationAddress: recipient,\n meta: { chainflip },\n },\n maxBoostFeeBps = 0,\n } = swapParams;\n\n if (!(sellAssetString && buyAssetString)) {\n throw new SwapKitError(\"core_swap_asset_not_recognized\");\n }\n\n const sellAsset = await AssetValue.from({\n asyncTokenLookup: true,\n asset: sellAssetString,\n value: sellAmount,\n });\n\n const wallet = getWallet(sellAsset.chain as SupportedChain);\n\n if (!wallet) {\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n }\n\n const { depositAddress } = await SwapKitApi.getChainflipDepositChannel({\n ...chainflip,\n destinationAddress: recipient || chainflip.destinationAddress,\n maxBoostFeeBps: maxBoostFeeBps || chainflip.maxBoostFeeBps,\n });\n\n // @ts-expect-error TODO: right now it's inferred from toolboxes\n // we need to simplify this to one object params\n const tx = await wallet.transfer({\n assetValue: sellAsset,\n from: wallet.address,\n recipient: depositAddress,\n isProgramDerivedAddress: true,\n });\n\n return tx as string;\n },\n }),\n properties: {\n supportedSwapkitProviders: [ProviderName.CHAINFLIP, ProviderName.CHAINFLIP_STREAMING],\n },\n});\n"
7
+ ],
8
+ "mappings": "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",
9
+ "debugId": "F0911CE1A2E4080064756E2164756E21",
10
+ "names": []
11
+ }
@@ -0,0 +1,3 @@
1
+ var j=Object.create;var{getPrototypeOf:k,defineProperty:e,getOwnPropertyNames:h,getOwnPropertyDescriptor:l}=Object,i=Object.prototype.hasOwnProperty;var m=(a,b,c)=>{c=a!=null?j(k(a)):{};let d=b||!a||!a.__esModule?e(c,"default",{value:a,enumerable:!0}):c;for(let f of h(a))if(!i.call(d,f))e(d,f,{get:()=>a[f],enumerable:!0});return d},g=new WeakMap,n=(a)=>{var b=g.get(a),c;if(b)return b;if(b=e({},"__esModule",{value:!0}),a&&typeof a==="object"||typeof a==="function")h(a).map((d)=>!i.call(b,d)&&e(b,d,{get:()=>a[d],enumerable:!(c=l(a,d))||c.enumerable}));return g.set(a,b),b};var o=(a,b)=>{for(var c in b)e(a,c,{get:b[c],enumerable:!0,configurable:!0,set:(d)=>b[c]=()=>d})};
2
+
3
+ //# debugId=9E860276D712218864756E2164756E21
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "9E860276D712218864756E2164756E21",
8
+ "names": []
9
+ }
@@ -0,0 +1,4 @@
1
+ var g=Object.create;var{getPrototypeOf:h,defineProperty:f,getOwnPropertyNames:i}=Object;var j=Object.prototype.hasOwnProperty;var k=(a,c,b)=>{b=a!=null?g(h(a)):{};let d=c||!a||!a.__esModule?f(b,"default",{value:a,enumerable:!0}):b;for(let e of i(a))if(!j.call(d,e))f(d,e,{get:()=>a[e],enumerable:!0});return d};var l=((a)=>typeof require!=="undefined"?require:typeof Proxy!=="undefined"?new Proxy(a,{get:(c,b)=>(typeof require!=="undefined"?require:c)[b]}):a)(function(a){if(typeof require!=="undefined")return require.apply(this,arguments);throw Error('Dynamic require of "'+a+'" is not supported')});
2
+ export{k as a,l as b};
3
+
4
+ //# debugId=E19CD3C85B5D05D064756E2164756E21
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "E19CD3C85B5D05D064756E2164756E21",
8
+ "names": []
9
+ }
@@ -0,0 +1,3 @@
1
+ var E={};V(E,{EVMPlugin:()=>l});module.exports=m(E);var e=require("@swapkit/helpers");function v({approveMode:a,getWallet:c}){return function n({assetValue:s,spenderAddress:t}){let p=s.chain,r=e.EVMChains.includes(p);if(r&&s.isGasAsset||!r||s.isSynthetic){let d=a==="checkOnly"||"approved";return Promise.resolve(d)}let o=c(p),i=a==="checkOnly"?o.isApproved:o.approve;if(!(s.address&&o.address))throw new e.SwapKitError("core_approve_asset_address_or_from_not_found");return i({amount:s.getBaseValue("bigint"),assetAddress:s.address,from:o.address,spenderAddress:t})}}var l=e.createPlugin({name:"evm",properties:{supportedSwapkitProviders:[e.ProviderName.CAMELOT_V3,e.ProviderName.OPENOCEAN_V2,e.ProviderName.ONEINCH,e.ProviderName.PANCAKESWAP,e.ProviderName.PANGOLIN_V1,e.ProviderName.SUSHISWAP_V2,e.ProviderName.TRADERJOE_V2,e.ProviderName.UNISWAP_V2,e.ProviderName.UNISWAP_V3]},methods:({getWallet:a})=>({approveAssetValue:v({approveMode:e.ApproveMode.Approve,getWallet:a}),isAssetValueApproved:v({approveMode:e.ApproveMode.CheckOnly,getWallet:a}),swap:async function c({route:{tx:n,sellAsset:s},feeOptionKey:t}){let r=(await e.AssetValue.from({asset:s,asyncTokenLookup:!0})).chain,u=a(r);if(!(e.EVMChains.includes(r)&&n))throw new e.SwapKitError("core_swap_invalid_params");let{from:o,to:i,data:d,value:A}=n;return u.sendTransaction({from:o,to:i,data:d,value:BigInt(A)},t)}})});
2
+
3
+ //# debugId=628274D5369C305B64756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/evm/index.ts"],
4
+ "sourcesContent": [
5
+ "import {\n ApproveMode,\n type ApproveReturnType,\n AssetValue,\n type EVMChain,\n EVMChains,\n ProviderName,\n SwapKitError,\n type SwapKitPluginParams,\n type SwapParams,\n createPlugin,\n} from \"@swapkit/helpers\";\nimport type { EVMTransaction, QuoteResponseRoute } from \"@swapkit/helpers/api\";\n\nfunction approve<T extends ApproveMode>({\n approveMode,\n getWallet,\n}: { approveMode: T } & SwapKitPluginParams) {\n return function approveEVM({\n assetValue,\n spenderAddress,\n }: { spenderAddress: string; assetValue: AssetValue }) {\n const evmChain = assetValue.chain as EVMChain;\n const isEVMChain = EVMChains.includes(evmChain);\n const isNativeEVM = isEVMChain && assetValue.isGasAsset;\n\n if (isNativeEVM || !isEVMChain || assetValue.isSynthetic) {\n const isApproved = approveMode === \"checkOnly\" || \"approved\";\n return Promise.resolve(isApproved) as ApproveReturnType<T>;\n }\n\n const wallet = getWallet(evmChain);\n const walletAction = approveMode === \"checkOnly\" ? wallet.isApproved : wallet.approve;\n\n if (!(assetValue.address && wallet.address)) {\n throw new SwapKitError(\"core_approve_asset_address_or_from_not_found\");\n }\n\n return walletAction({\n amount: assetValue.getBaseValue(\"bigint\"),\n assetAddress: assetValue.address,\n from: wallet.address,\n spenderAddress,\n });\n };\n}\n\nexport const EVMPlugin = createPlugin({\n name: \"evm\",\n properties: {\n supportedSwapkitProviders: [\n ProviderName.CAMELOT_V3,\n ProviderName.OPENOCEAN_V2,\n ProviderName.ONEINCH,\n ProviderName.PANCAKESWAP,\n ProviderName.PANGOLIN_V1,\n ProviderName.SUSHISWAP_V2,\n ProviderName.TRADERJOE_V2,\n ProviderName.UNISWAP_V2,\n ProviderName.UNISWAP_V3,\n ],\n },\n methods: ({ getWallet }) => ({\n approveAssetValue: approve({ approveMode: ApproveMode.Approve, getWallet }),\n isAssetValueApproved: approve({ approveMode: ApproveMode.CheckOnly, getWallet }),\n swap: async function evmSwap({\n route: { tx, sellAsset },\n feeOptionKey,\n }: SwapParams<\"evm\", QuoteResponseRoute>) {\n const assetValue = await AssetValue.from({ asset: sellAsset, asyncTokenLookup: true });\n const evmChain = assetValue.chain as EVMChain;\n const wallet = getWallet(evmChain);\n\n if (!(EVMChains.includes(evmChain) && tx)) {\n throw new SwapKitError(\"core_swap_invalid_params\");\n }\n\n const { from, to, data, value } = tx as EVMTransaction;\n return wallet.sendTransaction({ from, to, data, value: BigInt(value) }, feeOptionKey);\n },\n }),\n});\n"
6
+ ],
7
+ "mappings": "oDAWO,IAXP,8BAcA,SAAS,CAA8B,EACrC,cACA,aAC2C,CAC3C,gBAAgB,CAAU,EACxB,aACA,kBACqD,CACrD,IAAM,EAAW,EAAW,MACtB,EAAa,YAAU,SAAS,CAAQ,EAG9C,GAFoB,GAAc,EAAW,aAEzB,GAAc,EAAW,YAAa,CACxD,IAAM,EAAa,IAAgB,aAAe,WAClD,OAAO,QAAQ,QAAQ,CAAU,EAGnC,IAAM,EAAS,EAAU,CAAQ,EAC3B,EAAe,IAAgB,YAAc,EAAO,WAAa,EAAO,QAE9E,KAAM,EAAW,SAAW,EAAO,SACjC,MAAM,IAAI,eAAa,8CAA8C,EAGvE,OAAO,EAAa,CAClB,OAAQ,EAAW,aAAa,QAAQ,EACxC,aAAc,EAAW,QACzB,KAAM,EAAO,QACb,gBACF,CAAC,GAIE,IAAM,EAAY,eAAa,CACpC,KAAM,MACN,WAAY,CACV,0BAA2B,CACzB,eAAa,WACb,eAAa,aACb,eAAa,QACb,eAAa,YACb,eAAa,YACb,eAAa,aACb,eAAa,aACb,eAAa,WACb,eAAa,UACf,CACF,EACA,QAAS,EAAG,gBAAiB,CAC3B,kBAAmB,EAAQ,CAAE,YAAa,cAAY,QAAS,WAAU,CAAC,EAC1E,qBAAsB,EAAQ,CAAE,YAAa,cAAY,UAAW,WAAU,CAAC,EAC/E,KAAM,eAAe,CAAO,EAC1B,OAAS,KAAI,aACb,gBACwC,CAExC,IAAM,GADa,MAAM,aAAW,KAAK,CAAE,MAAO,EAAW,iBAAkB,EAAK,CAAC,GACzD,MACtB,EAAS,EAAU,CAAQ,EAEjC,KAAM,YAAU,SAAS,CAAQ,GAAK,GACpC,MAAM,IAAI,eAAa,0BAA0B,EAGnD,IAAQ,OAAM,KAAI,OAAM,SAAU,EAClC,OAAO,EAAO,gBAAgB,CAAE,OAAM,KAAI,OAAM,MAAO,OAAO,CAAK,CAAE,EAAG,CAAY,EAExF,EACF,CAAC",
8
+ "debugId": "628274D5369C305B64756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,3 @@
1
+ import"../chunk-tvrdndbw.js";import{ApproveMode as v,AssetValue as E,EVMChains as m,ProviderName as e,SwapKitError as V,createPlugin as w}from"@swapkit/helpers";function A({approveMode:a,getWallet:c}){return function n({assetValue:s,spenderAddress:t}){let p=s.chain,r=m.includes(p);if(r&&s.isGasAsset||!r||s.isSynthetic){let d=a==="checkOnly"||"approved";return Promise.resolve(d)}let o=c(p),i=a==="checkOnly"?o.isApproved:o.approve;if(!(s.address&&o.address))throw new V("core_approve_asset_address_or_from_not_found");return i({amount:s.getBaseValue("bigint"),assetAddress:s.address,from:o.address,spenderAddress:t})}}var h=w({name:"evm",properties:{supportedSwapkitProviders:[e.CAMELOT_V3,e.OPENOCEAN_V2,e.ONEINCH,e.PANCAKESWAP,e.PANGOLIN_V1,e.SUSHISWAP_V2,e.TRADERJOE_V2,e.UNISWAP_V2,e.UNISWAP_V3]},methods:({getWallet:a})=>({approveAssetValue:A({approveMode:v.Approve,getWallet:a}),isAssetValueApproved:A({approveMode:v.CheckOnly,getWallet:a}),swap:async function c({route:{tx:n,sellAsset:s},feeOptionKey:t}){let r=(await E.from({asset:s,asyncTokenLookup:!0})).chain,u=a(r);if(!(m.includes(r)&&n))throw new V("core_swap_invalid_params");let{from:o,to:i,data:d,value:l}=n;return u.sendTransaction({from:o,to:i,data:d,value:BigInt(l)},t)}})});export{h as EVMPlugin};
2
+
3
+ //# debugId=89348AB3D65544D664756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/evm/index.ts"],
4
+ "sourcesContent": [
5
+ "import {\n ApproveMode,\n type ApproveReturnType,\n AssetValue,\n type EVMChain,\n EVMChains,\n ProviderName,\n SwapKitError,\n type SwapKitPluginParams,\n type SwapParams,\n createPlugin,\n} from \"@swapkit/helpers\";\nimport type { EVMTransaction, QuoteResponseRoute } from \"@swapkit/helpers/api\";\n\nfunction approve<T extends ApproveMode>({\n approveMode,\n getWallet,\n}: { approveMode: T } & SwapKitPluginParams) {\n return function approveEVM({\n assetValue,\n spenderAddress,\n }: { spenderAddress: string; assetValue: AssetValue }) {\n const evmChain = assetValue.chain as EVMChain;\n const isEVMChain = EVMChains.includes(evmChain);\n const isNativeEVM = isEVMChain && assetValue.isGasAsset;\n\n if (isNativeEVM || !isEVMChain || assetValue.isSynthetic) {\n const isApproved = approveMode === \"checkOnly\" || \"approved\";\n return Promise.resolve(isApproved) as ApproveReturnType<T>;\n }\n\n const wallet = getWallet(evmChain);\n const walletAction = approveMode === \"checkOnly\" ? wallet.isApproved : wallet.approve;\n\n if (!(assetValue.address && wallet.address)) {\n throw new SwapKitError(\"core_approve_asset_address_or_from_not_found\");\n }\n\n return walletAction({\n amount: assetValue.getBaseValue(\"bigint\"),\n assetAddress: assetValue.address,\n from: wallet.address,\n spenderAddress,\n });\n };\n}\n\nexport const EVMPlugin = createPlugin({\n name: \"evm\",\n properties: {\n supportedSwapkitProviders: [\n ProviderName.CAMELOT_V3,\n ProviderName.OPENOCEAN_V2,\n ProviderName.ONEINCH,\n ProviderName.PANCAKESWAP,\n ProviderName.PANGOLIN_V1,\n ProviderName.SUSHISWAP_V2,\n ProviderName.TRADERJOE_V2,\n ProviderName.UNISWAP_V2,\n ProviderName.UNISWAP_V3,\n ],\n },\n methods: ({ getWallet }) => ({\n approveAssetValue: approve({ approveMode: ApproveMode.Approve, getWallet }),\n isAssetValueApproved: approve({ approveMode: ApproveMode.CheckOnly, getWallet }),\n swap: async function evmSwap({\n route: { tx, sellAsset },\n feeOptionKey,\n }: SwapParams<\"evm\", QuoteResponseRoute>) {\n const assetValue = await AssetValue.from({ asset: sellAsset, asyncTokenLookup: true });\n const evmChain = assetValue.chain as EVMChain;\n const wallet = getWallet(evmChain);\n\n if (!(EVMChains.includes(evmChain) && tx)) {\n throw new SwapKitError(\"core_swap_invalid_params\");\n }\n\n const { from, to, data, value } = tx as EVMTransaction;\n return wallet.sendTransaction({ from, to, data, value: BigInt(value) }, feeOptionKey);\n },\n }),\n});\n"
6
+ ],
7
+ "mappings": "6BAAA,sBACE,gBAEA,eAEA,kBACA,kBACA,kBAGA,yBAIF,SAAS,CAA8B,EACrC,cACA,aAC2C,CAC3C,gBAAgB,CAAU,EACxB,aACA,kBACqD,CACrD,IAAM,EAAW,EAAW,MACtB,EAAa,EAAU,SAAS,CAAQ,EAG9C,GAFoB,GAAc,EAAW,aAEzB,GAAc,EAAW,YAAa,CACxD,IAAM,EAAa,IAAgB,aAAe,WAClD,OAAO,QAAQ,QAAQ,CAAU,EAGnC,IAAM,EAAS,EAAU,CAAQ,EAC3B,EAAe,IAAgB,YAAc,EAAO,WAAa,EAAO,QAE9E,KAAM,EAAW,SAAW,EAAO,SACjC,MAAM,IAAI,EAAa,8CAA8C,EAGvE,OAAO,EAAa,CAClB,OAAQ,EAAW,aAAa,QAAQ,EACxC,aAAc,EAAW,QACzB,KAAM,EAAO,QACb,gBACF,CAAC,GAIE,IAAM,EAAY,EAAa,CACpC,KAAM,MACN,WAAY,CACV,0BAA2B,CACzB,EAAa,WACb,EAAa,aACb,EAAa,QACb,EAAa,YACb,EAAa,YACb,EAAa,aACb,EAAa,aACb,EAAa,WACb,EAAa,UACf,CACF,EACA,QAAS,EAAG,gBAAiB,CAC3B,kBAAmB,EAAQ,CAAE,YAAa,EAAY,QAAS,WAAU,CAAC,EAC1E,qBAAsB,EAAQ,CAAE,YAAa,EAAY,UAAW,WAAU,CAAC,EAC/E,KAAM,eAAe,CAAO,EAC1B,OAAS,KAAI,aACb,gBACwC,CAExC,IAAM,GADa,MAAM,EAAW,KAAK,CAAE,MAAO,EAAW,iBAAkB,EAAK,CAAC,GACzD,MACtB,EAAS,EAAU,CAAQ,EAEjC,KAAM,EAAU,SAAS,CAAQ,GAAK,GACpC,MAAM,IAAI,EAAa,0BAA0B,EAGnD,IAAQ,OAAM,KAAI,OAAM,SAAU,EAClC,OAAO,EAAO,gBAAgB,CAAE,OAAM,KAAI,OAAM,MAAO,OAAO,CAAK,CAAE,EAAG,CAAY,EAExF,EACF,CAAC",
8
+ "debugId": "89348AB3D65544D664756E2164756E21",
9
+ "names": []
10
+ }
package/dist/index.cjs ADDED
@@ -0,0 +1,3 @@
1
+ var t={};module.exports=p(t);
2
+
3
+ //# debugId=872378DB8D5F6E0864756E2164756E21
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "872378DB8D5F6E0864756E2164756E21",
8
+ "names": []
9
+ }
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+
2
+ //# debugId=8B7D82A81ED7E36264756E2164756E21
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "8B7D82A81ED7E36264756E2164756E21",
8
+ "names": []
9
+ }
@@ -0,0 +1,20 @@
1
+ var k={};P(k,{mapKadoQuoteToQuoteResponse:()=>f,SupportedKadoChain:()=>b,KadoSupportedFiatCurrencies:()=>E,KadoPlugin:()=>O,KadoChainToChain:()=>I,ChainToKadoChain:()=>h});module.exports=N(k);var t=require("@swapkit/helpers"),b={thorchain:t.Chain.THORChain,solana:t.Chain.Solana,polygon:t.Chain.Polygon,Optimism:t.Chain.Optimism,litecoin:t.Chain.Litecoin,kujira:t.Chain.Kujira,ethereum:t.Chain.Ethereum,"cosmos hub":t.Chain.Cosmos,bitcoin:t.Chain.Bitcoin,base:t.Chain.Base,Avalanche:t.Chain.Avalanche,Arbitrum:t.Chain.Arbitrum};function h(n){let r=Object.entries(b).find(([e,a])=>a===n);if(!r)throw new Error(`Chain ${n} not supported`);return r[0]}function I(n){if(!Object.keys(b).includes(n))throw new Error(`KadoChain ${n} not supported`);return b[n]}function f({quote:n,sellAsset:o,buyAsset:r}){let e=o.chain,a=r.chain,c=e===t.Chain.Fiat,{receive:u,price:p,baseAmount:s,totalFee:m,processingFee:d,networkFee:g}=n.data.quote,y=r.set(c?u.unitCount.toString():u.amount.toString()),x=c?Math.round(m.amount/u.amount*1e4):Math.round(m.amount/(p.price*s.amount)*1e4),l=Math.ceil(t.blockTimes[e]*3),C=Math.ceil(60),K=Math.ceil(t.blockTimes[a]),S=[{buyAsset:r.toString(),destinationAddress:"{destinationAddress}",estimatedTime:{inbound:l,swap:C,outbound:K,total:l+C+K},expectedBuyAmount:y.getValue("string"),expectedBuyAmountMaxSlippage:y.getValue("string"),providers:[t.ProviderName.KADO],sellAmount:o.getValue("string"),sellAsset:o.toString(),sourceAddress:"{sourceAddress}",totalSlippageBps:x,fees:[{asset:d.currency,amount:d.amount.toString(),type:t.FeeTypeEnum.LIQUIDITY,protocol:t.ProviderName.KADO,chain:t.Chain.Fiat},{asset:g.currency,amount:g.amount.toString(),type:t.FeeTypeEnum.NETWORK,protocol:t.ProviderName.KADO,chain:r.chain}],legs:[{provider:t.ProviderName.KADO,sellAsset:o.toString(),sellAmount:o.getValue("string"),buyAsset:r.toString(),buyAmount:u.unitCount.toString(),buyAmountMaxSlippage:u.unitCount.toString(),fees:[{asset:d.currency,amount:d.amount.toString(),type:t.FeeTypeEnum.LIQUIDITY,protocol:t.ProviderName.KADO,chain:t.Chain.Fiat},{asset:g.currency,amount:g.amount.toString(),type:t.FeeTypeEnum.NETWORK,protocol:t.ProviderName.KADO,chain:r.chain}]}],warnings:[],meta:{tags:[]}}];return{quoteId:crypto.randomUUID(),routes:S,error:n.success?void 0:n.message}}var i=require("@swapkit/helpers");var O=i.createPlugin({name:"kado",methods:()=>({createPopover:R,getAssets:T,getBlockchains:v,getKadoWidgetUrl:F,getOrderStatus:M,fetchProviderQuote:D,swap:_}),properties:{supportedSwapkitProviders:[i.ProviderName.KADO]}});function _({route:n}){if(!(n.sourceAddress&&n.destinationAddress))throw new Error("Source and destination addresses are required");let o=i.AssetValue.from({asset:n.sellAsset}),r=i.AssetValue.from({asset:n.buyAsset}),e=o.chain===i.Chain.Fiat?"buy":"sell",a=F({sellAsset:o,buyAsset:r,recipient:n.destinationAddress,sender:n.sourceAddress,type:e,mode:"minimal"});return R(a),{status:"pending",txHash:null}}async function D({sellAsset:n,buyAsset:o,fiatMethod:r="credit_card"}){try{let e=n.chain===i.Chain.Fiat,[a,c]=e?[o,n]:[n,o],u=e?"buy":"sell",p={amount:a.getValue("string"),asset:a.symbol,blockchain:h(a.chain),currency:c.symbol,fiatMethod:r,partner:"fortress",transactionType:u},s=i.SKConfig.get("apiKeys").kado;i.warnOnce(!s,"plugin(kado): No Kado API key found");let m=await i.RequestClient.get("https://api.kado.money/v2/ramp/quote",{searchParams:p,headers:{"X-Widget-Id":s}});if(!m.success)throw new Error(m.message);return f({quote:m,sellAsset:n,buyAsset:o})}catch(e){throw new Error("core_swap_quote_error")}}async function v(){let n=await i.RequestClient.get("https://api.kado.money/v1/ramp/blockchains");if(!n.success)throw new Error(n.message);return n.data.blockchains}async function T(){let n=await i.RequestClient.get("https://api.kado.money/v1/ramp/supported-assets");if(!n.success)throw new Error(n.message);return n.data.assets}async function M(n){let o=i.SKConfig.get("apiKeys").kado;i.warnOnce(!o,"plugin(kado): No Kado API key found");try{let r=await i.RequestClient.get(`https://api.kado.money/v2/public/orders/${n}`,{headers:{"X-Widget-Id":o}});if(!r.success)throw new Error(r.message);return r.data.order}catch(r){throw new Error("Failed to get order status")}}function F({sellAsset:n,buyAsset:o,recipient:r,type:e,sender:a,mode:c}){let u=i.SKConfig.get("apiKeys").kado;i.warnOnce(!u,"plugin(kado): No Kado API key found");let p=e==="buy"?{onPayAmount:n.getValue("string"),onPayCurrency:n.symbol,onRevCurrency:o.symbol,...r?{onToAddress:r}:{}}:{offPayAmount:n.getValue("string"),offPayCurrency:n.symbol,offRevCurrency:o.symbol,...a?{offFromAddress:a}:{}},s=h(e==="buy"?o.chain:n.chain).toUpperCase();return`https://app.kado.money/?${new URLSearchParams({...p,apiKey:u,network:s,product:e.toUpperCase(),mode:c}).toString()}`}function R(n){let o=document.createElement("div");o.style.cssText=`
2
+ position: fixed;
3
+ top: 0;
4
+ left: 0;
5
+ width: 100%;
6
+ height: 100%;
7
+ background: rgba(0, 0, 0, 0.5);
8
+ display: flex;
9
+ justify-content: center;
10
+ align-items: center;
11
+ z-index: 9999;
12
+ `;let r=document.createElement("iframe");return r.src=n,r.style.cssText=`
13
+ width: 440px;
14
+ height: 700px;
15
+ border: none;
16
+ border-radius: 12px;
17
+ background: white;
18
+ `,o.appendChild(r),document.body.appendChild(o),o.addEventListener("click",(e)=>{if(e.target===o)document.body.removeChild(o)}),o}var E=["USD","CAD","GBP","EUR","MXN","COP","INR","CHF","AUD","ARS","BRL","CLP","JPY","KRW","PEN","PHP","SGD","TRY","UYU","TWD","VND","CRC","SEK","PLN","DKK","NOK","NZD"];
19
+
20
+ //# debugId=F14F09772CF1871864756E2164756E21
@@ -0,0 +1,12 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/kado/helpers.ts", "../src/kado/plugin.ts", "../src/kado/types.ts"],
4
+ "sourcesContent": [
5
+ "import { type AssetValue, Chain, FeeTypeEnum, ProviderName, blockTimes } from \"@swapkit/helpers\";\nimport type { QuoteResponse, QuoteResponseRoute } from \"@swapkit/helpers/api\";\nimport type { KadoQuoteResponse } from \"./types\";\n\nexport const SupportedKadoChain = {\n thorchain: Chain.THORChain,\n solana: Chain.Solana,\n polygon: Chain.Polygon,\n Optimism: Chain.Optimism,\n litecoin: Chain.Litecoin,\n kujira: Chain.Kujira,\n ethereum: Chain.Ethereum,\n \"cosmos hub\": Chain.Cosmos,\n bitcoin: Chain.Bitcoin,\n base: Chain.Base,\n Avalanche: Chain.Avalanche,\n Arbitrum: Chain.Arbitrum,\n};\n\nexport function ChainToKadoChain(chain: Chain) {\n const entries = Object.entries(SupportedKadoChain);\n const found = entries.find(([_, value]) => value === chain);\n if (!found) throw new Error(`Chain ${chain} not supported`);\n return found[0];\n}\n\nexport function KadoChainToChain(kadoChain: string) {\n const found = Object.keys(SupportedKadoChain).includes(kadoChain);\n if (!found) throw new Error(`KadoChain ${kadoChain} not supported`);\n return SupportedKadoChain[kadoChain as keyof typeof SupportedKadoChain];\n}\n\nexport function mapKadoQuoteToQuoteResponse({\n quote,\n sellAsset,\n buyAsset,\n}: { quote: KadoQuoteResponse; sellAsset: AssetValue; buyAsset: AssetValue }): QuoteResponse {\n const sellAssetChain = sellAsset.chain;\n const buyAssetChain = buyAsset.chain;\n const isOnRamp = sellAssetChain === Chain.Fiat;\n const { receive, price, baseAmount, totalFee, processingFee, networkFee } = quote.data.quote;\n\n const buyAssetAmount = buyAsset.set(\n isOnRamp ? receive.unitCount.toString() : receive.amount.toString(),\n );\n const totalSlippageBps = isOnRamp\n ? Math.round((totalFee.amount / receive.amount) * 10_000)\n : Math.round((totalFee.amount / (price.price * baseAmount.amount)) * 10_000);\n\n const inbound = Math.ceil(blockTimes[sellAssetChain] * 3);\n const swap = Math.ceil(60);\n const outbound = Math.ceil(blockTimes[buyAssetChain]);\n const routes: QuoteResponseRoute[] = [\n {\n buyAsset: buyAsset.toString(),\n destinationAddress: \"{destinationAddress}\",\n estimatedTime: { inbound, swap, outbound, total: inbound + swap + outbound },\n expectedBuyAmount: buyAssetAmount.getValue(\"string\"),\n expectedBuyAmountMaxSlippage: buyAssetAmount.getValue(\"string\"),\n providers: [ProviderName.KADO],\n sellAmount: sellAsset.getValue(\"string\"),\n sellAsset: sellAsset.toString(),\n sourceAddress: \"{sourceAddress}\",\n totalSlippageBps,\n fees: [\n {\n asset: processingFee.currency,\n amount: processingFee.amount.toString(),\n type: FeeTypeEnum.LIQUIDITY,\n protocol: ProviderName.KADO,\n chain: Chain.Fiat,\n },\n {\n asset: networkFee.currency,\n amount: networkFee.amount.toString(),\n type: FeeTypeEnum.NETWORK,\n protocol: ProviderName.KADO,\n chain: buyAsset.chain,\n },\n ],\n legs: [\n {\n provider: ProviderName.KADO,\n sellAsset: sellAsset.toString(),\n sellAmount: sellAsset.getValue(\"string\"),\n buyAsset: buyAsset.toString(),\n buyAmount: receive.unitCount.toString(),\n buyAmountMaxSlippage: receive.unitCount.toString(),\n fees: [\n {\n asset: processingFee.currency,\n amount: processingFee.amount.toString(),\n type: FeeTypeEnum.LIQUIDITY,\n protocol: ProviderName.KADO,\n chain: Chain.Fiat,\n },\n {\n asset: networkFee.currency,\n amount: networkFee.amount.toString(),\n type: FeeTypeEnum.NETWORK,\n protocol: ProviderName.KADO,\n chain: buyAsset.chain,\n },\n ],\n },\n ],\n warnings: [],\n meta: { tags: [] },\n },\n ];\n\n return {\n quoteId: crypto.randomUUID(),\n routes,\n error: quote.success ? undefined : quote.message,\n };\n}\n",
6
+ "import {\n AssetValue,\n Chain,\n ProviderName,\n RequestClient,\n SKConfig,\n type SwapParams,\n createPlugin,\n warnOnce,\n} from \"@swapkit/helpers\";\nimport type { QuoteResponse, QuoteResponseRoute } from \"@swapkit/helpers/api\";\nimport { ChainToKadoChain, mapKadoQuoteToQuoteResponse } from \"./helpers\";\nimport type {\n KadoAssetsResponse,\n KadoBlockchainsResponse,\n KadoFiatCurrency,\n KadoFiatMethod,\n KadoQuoteRequest,\n KadoQuoteResponse,\n} from \"./types\";\n\nexport const KadoPlugin = createPlugin({\n name: \"kado\",\n methods: () => ({\n createPopover,\n getAssets,\n getBlockchains,\n getKadoWidgetUrl,\n getOrderStatus,\n fetchProviderQuote,\n swap,\n }),\n properties: {\n supportedSwapkitProviders: [ProviderName.KADO],\n },\n});\n\nfunction swap({ route }: SwapParams<\"evm\", QuoteResponseRoute>) {\n if (!(route.sourceAddress && route.destinationAddress)) {\n throw new Error(\"Source and destination addresses are required\");\n }\n\n const sellAsset = AssetValue.from({ asset: route.sellAsset });\n const buyAsset = AssetValue.from({ asset: route.buyAsset });\n\n // Determine if this is a buy or sell operation\n const type = sellAsset.chain === Chain.Fiat ? \"buy\" : \"sell\";\n\n const url = getKadoWidgetUrl({\n sellAsset,\n buyAsset,\n recipient: route.destinationAddress,\n sender: route.sourceAddress,\n type,\n mode: \"minimal\",\n });\n\n createPopover(url);\n\n return {\n status: \"pending\",\n txHash: null,\n };\n}\n\nasync function fetchProviderQuote({\n sellAsset,\n buyAsset,\n fiatMethod = \"credit_card\",\n}: {\n sellAsset: AssetValue;\n buyAsset: AssetValue;\n fiatMethod: KadoFiatMethod;\n}): Promise<QuoteResponse> {\n try {\n const isOnRamp = sellAsset.chain === Chain.Fiat;\n const [paymentAsset, receiveAsset] = isOnRamp ? [buyAsset, sellAsset] : [sellAsset, buyAsset];\n const transactionType = isOnRamp ? \"buy\" : \"sell\";\n\n const quoteRequest: KadoQuoteRequest = {\n amount: paymentAsset.getValue(\"string\"),\n asset: paymentAsset.symbol,\n blockchain: ChainToKadoChain(paymentAsset.chain),\n currency: receiveAsset.symbol as KadoFiatCurrency,\n fiatMethod,\n partner: \"fortress\",\n transactionType,\n };\n\n const kadoApiKey = SKConfig.get(\"apiKeys\").kado;\n warnOnce(!kadoApiKey, \"plugin(kado): No Kado API key found\");\n\n const quote = await RequestClient.get<KadoQuoteResponse>(\n \"https://api.kado.money/v2/ramp/quote\",\n { searchParams: quoteRequest, headers: { \"X-Widget-Id\": kadoApiKey } },\n );\n\n if (!quote.success) {\n throw new Error(quote.message);\n }\n\n return mapKadoQuoteToQuoteResponse({ quote, sellAsset, buyAsset });\n } catch (_) {\n throw new Error(\"core_swap_quote_error\");\n }\n}\n\nasync function getBlockchains() {\n const response = await RequestClient.get<KadoBlockchainsResponse>(\n \"https://api.kado.money/v1/ramp/blockchains\",\n );\n\n if (!response.success) {\n throw new Error(response.message);\n }\n\n return response.data.blockchains;\n}\n\nasync function getAssets() {\n const response = await RequestClient.get<KadoAssetsResponse>(\n \"https://api.kado.money/v1/ramp/supported-assets\",\n );\n\n if (!response.success) {\n throw new Error(response.message);\n }\n\n return response.data.assets;\n}\n\nasync function getOrderStatus(orderId: string) {\n const kadoApiKey = SKConfig.get(\"apiKeys\").kado;\n warnOnce(!kadoApiKey, \"plugin(kado): No Kado API key found\");\n\n try {\n const response = await RequestClient.get<{\n success: boolean;\n message: string;\n data: { order: { status: string } };\n }>(`https://api.kado.money/v2/public/orders/${orderId}`, {\n headers: { \"X-Widget-Id\": kadoApiKey },\n });\n\n if (!response.success) {\n throw new Error(response.message);\n }\n\n return response.data.order;\n } catch (_error) {\n throw new Error(\"Failed to get order status\");\n }\n}\n\nfunction getKadoWidgetUrl({\n sellAsset,\n buyAsset,\n recipient,\n type,\n sender,\n mode,\n}: {\n sellAsset: AssetValue;\n buyAsset: AssetValue;\n recipient?: string;\n sender?: string;\n type: \"buy\" | \"sell\";\n mode: \"minimal\" | \"full\";\n}) {\n const kadoApiKey = SKConfig.get(\"apiKeys\").kado;\n warnOnce(!kadoApiKey, \"plugin(kado): No Kado API key found\");\n\n const buySellParams =\n type === \"buy\"\n ? {\n onPayAmount: sellAsset.getValue(\"string\"),\n onPayCurrency: sellAsset.symbol,\n onRevCurrency: buyAsset.symbol,\n ...(recipient ? { onToAddress: recipient } : {}),\n }\n : {\n offPayAmount: sellAsset.getValue(\"string\"),\n offPayCurrency: sellAsset.symbol,\n offRevCurrency: buyAsset.symbol,\n ...(sender ? { offFromAddress: sender } : {}),\n };\n const network = ChainToKadoChain(type === \"buy\" ? buyAsset.chain : sellAsset.chain).toUpperCase();\n const urlParams = new URLSearchParams({\n ...buySellParams,\n apiKey: kadoApiKey,\n network,\n product: type.toUpperCase(),\n mode,\n });\n\n return `https://app.kado.money/?${urlParams.toString()}`;\n}\n\nfunction createPopover(url: string) {\n const overlay = document.createElement(\"div\");\n overlay.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 9999;\n `;\n\n const iframe = document.createElement(\"iframe\");\n iframe.src = url;\n iframe.style.cssText = `\n width: 440px;\n height: 700px;\n border: none;\n border-radius: 12px;\n background: white;\n `;\n\n overlay.appendChild(iframe);\n document.body.appendChild(overlay);\n\n overlay.addEventListener(\"click\", (e) => {\n if (e.target === overlay) {\n document.body.removeChild(overlay);\n }\n });\n\n return overlay;\n}\n",
7
+ "import type { SupportedKadoChain } from \"./helpers\";\n\nexport const KadoSupportedFiatCurrencies = [\n \"USD\",\n \"CAD\",\n \"GBP\",\n \"EUR\",\n \"MXN\",\n \"COP\",\n \"INR\",\n \"CHF\",\n \"AUD\",\n \"ARS\",\n \"BRL\",\n \"CLP\",\n \"JPY\",\n \"KRW\",\n \"PEN\",\n \"PHP\",\n \"SGD\",\n \"TRY\",\n \"UYU\",\n \"TWD\",\n \"VND\",\n \"CRC\",\n \"SEK\",\n \"PLN\",\n \"DKK\",\n \"NOK\",\n \"NZD\",\n] as const;\n\nexport type KadoFiatCurrency = (typeof KadoSupportedFiatCurrencies)[number];\n\nexport type KadoFiatMethod =\n | \"ach\"\n | \"debit_card\"\n | \"credit_card\"\n | \"apple_pay_credit\"\n | \"apple_pay_debit\"\n | \"wire\"\n | \"sepa\"\n | \"pix\"\n | \"koywe\";\n\nexport type KadoQuoteRequest = {\n transactionType: \"buy\" | \"sell\";\n fiatMethod: KadoFiatMethod;\n partner: \"fortress\";\n amount: string;\n asset: string;\n blockchain: string;\n currency: KadoFiatCurrency;\n};\n\nexport type KadoAsset = {\n _id: string;\n name: string;\n description: string;\n label: string;\n symbol: string;\n supportedProviders: string[];\n stablecoin: boolean;\n liveOnRamp: boolean;\n createdAt: string;\n updatedAt: string;\n __v: number;\n priority: number;\n displayPrecision: number;\n usesAvaxRouter: boolean;\n squidChainId: string;\n coingeckoId: string;\n usesAxelarBridge: boolean;\n squidAssetId: string;\n address: string;\n blockExplorerURI: string;\n decimals: number;\n officialChainId: keyof typeof SupportedKadoChain;\n precision: number;\n rampProducts: string[];\n wallets: string[];\n rpcURI: string;\n usesPolygonFulfillment: boolean;\n usesOsmoRouter: boolean;\n ibcChannelIdOffRamp: number;\n ibcChannelIdOnRamp: number;\n osmoPfmChannel: number;\n osmoPfmReceiver: string;\n ibcDenom: string;\n isNative: boolean;\n avgOffRampTimeInSeconds: number;\n avgOnRampTimeInSeconds: number;\n providers: string[];\n trustekAssetId: string;\n trustekNetworkId: string;\n kycLevels: string[];\n};\n\nexport type KadoBlockchainsResponse = {\n success: boolean;\n message: string;\n data: {\n blockchains: {\n _id: string;\n supportedEnvironment: string;\n network: string;\n origin: string;\n label: string;\n associatedAssets: KadoAsset[];\n avgTransactionTimeSeconds: number;\n usesAvaxRouter: boolean;\n liveOnRamp: boolean;\n createdAt: string;\n updatedAt: string;\n __v: number;\n priority: number;\n }[];\n };\n};\n\nexport type KadoAssetsResponse = {\n success: boolean;\n message: string;\n data: {\n assets: {\n _id: string;\n name: string;\n description: string;\n label: string;\n symbol: string;\n supportedProviders: string[];\n stablecoin: boolean;\n liveOnRamp: boolean;\n createdAt: string;\n updatedAt: string;\n __v: number;\n priority: number;\n }[];\n };\n};\n\nexport type KadoQuoteResponse = {\n success: boolean;\n message: string;\n data: {\n request: {\n transactionType: string;\n fiatMethod: KadoFiatMethod;\n partner: string;\n amount: number;\n asset: string;\n blockchain: keyof typeof SupportedKadoChain;\n currency: KadoFiatCurrency;\n reverse: false;\n ipCountry: string;\n };\n quote: {\n asset: string;\n baseAmount: {\n amount: number;\n currency: KadoFiatCurrency;\n };\n price: {\n amount: number;\n price: number;\n symbol: string;\n unit: string;\n };\n bridgeFee: {\n amount: number;\n currency: KadoFiatCurrency;\n originalAmount: number;\n promotionModifier: number;\n };\n receiveAmountAfterFees: {\n originalAmount: number;\n amount: number;\n currency: KadoFiatCurrency;\n };\n receiveUnitCountAfterFees: {\n amount: number;\n currency: KadoFiatCurrency;\n };\n feeType: string;\n minValue: {\n amount: number;\n unit: string;\n };\n maxValue: {\n amount: number;\n unit: string;\n };\n receive: {\n amount: number;\n originalAmount: number;\n symbol: string;\n unit: string;\n unitCount: number;\n };\n networkFee: {\n amount: number;\n currency: KadoFiatCurrency;\n originalAmount: number;\n promotionModifier: number;\n };\n processingFee: {\n amount: number;\n currency: KadoFiatCurrency;\n originalAmount: number;\n promotionModifier: number;\n };\n totalFee: {\n amount: number;\n currency: KadoFiatCurrency;\n originalAmount: number;\n };\n smartContractFee: {\n amount: number;\n currency: KadoFiatCurrency;\n originalAmount: number;\n promotionModifier: number;\n };\n };\n };\n};\n"
8
+ ],
9
+ "mappings": "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",
10
+ "debugId": "F14F09772CF1871864756E2164756E21",
11
+ "names": []
12
+ }
@@ -0,0 +1,20 @@
1
+ import"../chunk-tvrdndbw.js";import{Chain as i,FeeTypeEnum as b,ProviderName as s,blockTimes as S}from"@swapkit/helpers";var f={thorchain:i.THORChain,solana:i.Solana,polygon:i.Polygon,Optimism:i.Optimism,litecoin:i.Litecoin,kujira:i.Kujira,ethereum:i.Ethereum,"cosmos hub":i.Cosmos,bitcoin:i.Bitcoin,base:i.Base,Avalanche:i.Avalanche,Arbitrum:i.Arbitrum};function y(n){let o=Object.entries(f).find(([r,e])=>e===n);if(!o)throw new Error(`Chain ${n} not supported`);return o[0]}function B(n){if(!Object.keys(f).includes(n))throw new Error(`KadoChain ${n} not supported`);return f[n]}function I({quote:n,sellAsset:t,buyAsset:o}){let r=t.chain,e=o.chain,m=r===i.Fiat,{receive:a,price:p,baseAmount:c,totalFee:u,processingFee:d,networkFee:g}=n.data.quote,K=o.set(m?a.unitCount.toString():a.amount.toString()),T=m?Math.round(u.amount/a.amount*1e4):Math.round(u.amount/(p.price*c.amount)*1e4),F=Math.ceil(S[r]*3),R=Math.ceil(60),x=Math.ceil(S[e]),M=[{buyAsset:o.toString(),destinationAddress:"{destinationAddress}",estimatedTime:{inbound:F,swap:R,outbound:x,total:F+R+x},expectedBuyAmount:K.getValue("string"),expectedBuyAmountMaxSlippage:K.getValue("string"),providers:[s.KADO],sellAmount:t.getValue("string"),sellAsset:t.toString(),sourceAddress:"{sourceAddress}",totalSlippageBps:T,fees:[{asset:d.currency,amount:d.amount.toString(),type:b.LIQUIDITY,protocol:s.KADO,chain:i.Fiat},{asset:g.currency,amount:g.amount.toString(),type:b.NETWORK,protocol:s.KADO,chain:o.chain}],legs:[{provider:s.KADO,sellAsset:t.toString(),sellAmount:t.getValue("string"),buyAsset:o.toString(),buyAmount:a.unitCount.toString(),buyAmountMaxSlippage:a.unitCount.toString(),fees:[{asset:d.currency,amount:d.amount.toString(),type:b.LIQUIDITY,protocol:s.KADO,chain:i.Fiat},{asset:g.currency,amount:g.amount.toString(),type:b.NETWORK,protocol:s.KADO,chain:o.chain}]}],warnings:[],meta:{tags:[]}}];return{quoteId:crypto.randomUUID(),routes:M,error:n.success?void 0:n.message}}import{AssetValue as O,Chain as _,ProviderName as E,RequestClient as h,SKConfig as l,createPlugin as N,warnOnce as C}from"@swapkit/helpers";var j=N({name:"kado",methods:()=>({createPopover:v,getAssets:Q,getBlockchains:U,getKadoWidgetUrl:D,getOrderStatus:w,fetchProviderQuote:k,swap:P}),properties:{supportedSwapkitProviders:[E.KADO]}});function P({route:n}){if(!(n.sourceAddress&&n.destinationAddress))throw new Error("Source and destination addresses are required");let t=O.from({asset:n.sellAsset}),o=O.from({asset:n.buyAsset}),r=t.chain===_.Fiat?"buy":"sell",e=D({sellAsset:t,buyAsset:o,recipient:n.destinationAddress,sender:n.sourceAddress,type:r,mode:"minimal"});return v(e),{status:"pending",txHash:null}}async function k({sellAsset:n,buyAsset:t,fiatMethod:o="credit_card"}){try{let r=n.chain===_.Fiat,[e,m]=r?[t,n]:[n,t],a=r?"buy":"sell",p={amount:e.getValue("string"),asset:e.symbol,blockchain:y(e.chain),currency:m.symbol,fiatMethod:o,partner:"fortress",transactionType:a},c=l.get("apiKeys").kado;C(!c,"plugin(kado): No Kado API key found");let u=await h.get("https://api.kado.money/v2/ramp/quote",{searchParams:p,headers:{"X-Widget-Id":c}});if(!u.success)throw new Error(u.message);return I({quote:u,sellAsset:n,buyAsset:t})}catch(r){throw new Error("core_swap_quote_error")}}async function U(){let n=await h.get("https://api.kado.money/v1/ramp/blockchains");if(!n.success)throw new Error(n.message);return n.data.blockchains}async function Q(){let n=await h.get("https://api.kado.money/v1/ramp/supported-assets");if(!n.success)throw new Error(n.message);return n.data.assets}async function w(n){let t=l.get("apiKeys").kado;C(!t,"plugin(kado): No Kado API key found");try{let o=await h.get(`https://api.kado.money/v2/public/orders/${n}`,{headers:{"X-Widget-Id":t}});if(!o.success)throw new Error(o.message);return o.data.order}catch(o){throw new Error("Failed to get order status")}}function D({sellAsset:n,buyAsset:t,recipient:o,type:r,sender:e,mode:m}){let a=l.get("apiKeys").kado;C(!a,"plugin(kado): No Kado API key found");let p=r==="buy"?{onPayAmount:n.getValue("string"),onPayCurrency:n.symbol,onRevCurrency:t.symbol,...o?{onToAddress:o}:{}}:{offPayAmount:n.getValue("string"),offPayCurrency:n.symbol,offRevCurrency:t.symbol,...e?{offFromAddress:e}:{}},c=y(r==="buy"?t.chain:n.chain).toUpperCase();return`https://app.kado.money/?${new URLSearchParams({...p,apiKey:a,network:c,product:r.toUpperCase(),mode:m}).toString()}`}function v(n){let t=document.createElement("div");t.style.cssText=`
2
+ position: fixed;
3
+ top: 0;
4
+ left: 0;
5
+ width: 100%;
6
+ height: 100%;
7
+ background: rgba(0, 0, 0, 0.5);
8
+ display: flex;
9
+ justify-content: center;
10
+ align-items: center;
11
+ z-index: 9999;
12
+ `;let o=document.createElement("iframe");return o.src=n,o.style.cssText=`
13
+ width: 440px;
14
+ height: 700px;
15
+ border: none;
16
+ border-radius: 12px;
17
+ background: white;
18
+ `,t.appendChild(o),document.body.appendChild(t),t.addEventListener("click",(r)=>{if(r.target===t)document.body.removeChild(t)}),t}var G=["USD","CAD","GBP","EUR","MXN","COP","INR","CHF","AUD","ARS","BRL","CLP","JPY","KRW","PEN","PHP","SGD","TRY","UYU","TWD","VND","CRC","SEK","PLN","DKK","NOK","NZD"];export{I as mapKadoQuoteToQuoteResponse,f as SupportedKadoChain,G as KadoSupportedFiatCurrencies,j as KadoPlugin,B as KadoChainToChain,y as ChainToKadoChain};
19
+
20
+ //# debugId=54E84AB67ECF50AF64756E2164756E21
@@ -0,0 +1,12 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/kado/helpers.ts", "../src/kado/plugin.ts", "../src/kado/types.ts"],
4
+ "sourcesContent": [
5
+ "import { type AssetValue, Chain, FeeTypeEnum, ProviderName, blockTimes } from \"@swapkit/helpers\";\nimport type { QuoteResponse, QuoteResponseRoute } from \"@swapkit/helpers/api\";\nimport type { KadoQuoteResponse } from \"./types\";\n\nexport const SupportedKadoChain = {\n thorchain: Chain.THORChain,\n solana: Chain.Solana,\n polygon: Chain.Polygon,\n Optimism: Chain.Optimism,\n litecoin: Chain.Litecoin,\n kujira: Chain.Kujira,\n ethereum: Chain.Ethereum,\n \"cosmos hub\": Chain.Cosmos,\n bitcoin: Chain.Bitcoin,\n base: Chain.Base,\n Avalanche: Chain.Avalanche,\n Arbitrum: Chain.Arbitrum,\n};\n\nexport function ChainToKadoChain(chain: Chain) {\n const entries = Object.entries(SupportedKadoChain);\n const found = entries.find(([_, value]) => value === chain);\n if (!found) throw new Error(`Chain ${chain} not supported`);\n return found[0];\n}\n\nexport function KadoChainToChain(kadoChain: string) {\n const found = Object.keys(SupportedKadoChain).includes(kadoChain);\n if (!found) throw new Error(`KadoChain ${kadoChain} not supported`);\n return SupportedKadoChain[kadoChain as keyof typeof SupportedKadoChain];\n}\n\nexport function mapKadoQuoteToQuoteResponse({\n quote,\n sellAsset,\n buyAsset,\n}: { quote: KadoQuoteResponse; sellAsset: AssetValue; buyAsset: AssetValue }): QuoteResponse {\n const sellAssetChain = sellAsset.chain;\n const buyAssetChain = buyAsset.chain;\n const isOnRamp = sellAssetChain === Chain.Fiat;\n const { receive, price, baseAmount, totalFee, processingFee, networkFee } = quote.data.quote;\n\n const buyAssetAmount = buyAsset.set(\n isOnRamp ? receive.unitCount.toString() : receive.amount.toString(),\n );\n const totalSlippageBps = isOnRamp\n ? Math.round((totalFee.amount / receive.amount) * 10_000)\n : Math.round((totalFee.amount / (price.price * baseAmount.amount)) * 10_000);\n\n const inbound = Math.ceil(blockTimes[sellAssetChain] * 3);\n const swap = Math.ceil(60);\n const outbound = Math.ceil(blockTimes[buyAssetChain]);\n const routes: QuoteResponseRoute[] = [\n {\n buyAsset: buyAsset.toString(),\n destinationAddress: \"{destinationAddress}\",\n estimatedTime: { inbound, swap, outbound, total: inbound + swap + outbound },\n expectedBuyAmount: buyAssetAmount.getValue(\"string\"),\n expectedBuyAmountMaxSlippage: buyAssetAmount.getValue(\"string\"),\n providers: [ProviderName.KADO],\n sellAmount: sellAsset.getValue(\"string\"),\n sellAsset: sellAsset.toString(),\n sourceAddress: \"{sourceAddress}\",\n totalSlippageBps,\n fees: [\n {\n asset: processingFee.currency,\n amount: processingFee.amount.toString(),\n type: FeeTypeEnum.LIQUIDITY,\n protocol: ProviderName.KADO,\n chain: Chain.Fiat,\n },\n {\n asset: networkFee.currency,\n amount: networkFee.amount.toString(),\n type: FeeTypeEnum.NETWORK,\n protocol: ProviderName.KADO,\n chain: buyAsset.chain,\n },\n ],\n legs: [\n {\n provider: ProviderName.KADO,\n sellAsset: sellAsset.toString(),\n sellAmount: sellAsset.getValue(\"string\"),\n buyAsset: buyAsset.toString(),\n buyAmount: receive.unitCount.toString(),\n buyAmountMaxSlippage: receive.unitCount.toString(),\n fees: [\n {\n asset: processingFee.currency,\n amount: processingFee.amount.toString(),\n type: FeeTypeEnum.LIQUIDITY,\n protocol: ProviderName.KADO,\n chain: Chain.Fiat,\n },\n {\n asset: networkFee.currency,\n amount: networkFee.amount.toString(),\n type: FeeTypeEnum.NETWORK,\n protocol: ProviderName.KADO,\n chain: buyAsset.chain,\n },\n ],\n },\n ],\n warnings: [],\n meta: { tags: [] },\n },\n ];\n\n return {\n quoteId: crypto.randomUUID(),\n routes,\n error: quote.success ? undefined : quote.message,\n };\n}\n",
6
+ "import {\n AssetValue,\n Chain,\n ProviderName,\n RequestClient,\n SKConfig,\n type SwapParams,\n createPlugin,\n warnOnce,\n} from \"@swapkit/helpers\";\nimport type { QuoteResponse, QuoteResponseRoute } from \"@swapkit/helpers/api\";\nimport { ChainToKadoChain, mapKadoQuoteToQuoteResponse } from \"./helpers\";\nimport type {\n KadoAssetsResponse,\n KadoBlockchainsResponse,\n KadoFiatCurrency,\n KadoFiatMethod,\n KadoQuoteRequest,\n KadoQuoteResponse,\n} from \"./types\";\n\nexport const KadoPlugin = createPlugin({\n name: \"kado\",\n methods: () => ({\n createPopover,\n getAssets,\n getBlockchains,\n getKadoWidgetUrl,\n getOrderStatus,\n fetchProviderQuote,\n swap,\n }),\n properties: {\n supportedSwapkitProviders: [ProviderName.KADO],\n },\n});\n\nfunction swap({ route }: SwapParams<\"evm\", QuoteResponseRoute>) {\n if (!(route.sourceAddress && route.destinationAddress)) {\n throw new Error(\"Source and destination addresses are required\");\n }\n\n const sellAsset = AssetValue.from({ asset: route.sellAsset });\n const buyAsset = AssetValue.from({ asset: route.buyAsset });\n\n // Determine if this is a buy or sell operation\n const type = sellAsset.chain === Chain.Fiat ? \"buy\" : \"sell\";\n\n const url = getKadoWidgetUrl({\n sellAsset,\n buyAsset,\n recipient: route.destinationAddress,\n sender: route.sourceAddress,\n type,\n mode: \"minimal\",\n });\n\n createPopover(url);\n\n return {\n status: \"pending\",\n txHash: null,\n };\n}\n\nasync function fetchProviderQuote({\n sellAsset,\n buyAsset,\n fiatMethod = \"credit_card\",\n}: {\n sellAsset: AssetValue;\n buyAsset: AssetValue;\n fiatMethod: KadoFiatMethod;\n}): Promise<QuoteResponse> {\n try {\n const isOnRamp = sellAsset.chain === Chain.Fiat;\n const [paymentAsset, receiveAsset] = isOnRamp ? [buyAsset, sellAsset] : [sellAsset, buyAsset];\n const transactionType = isOnRamp ? \"buy\" : \"sell\";\n\n const quoteRequest: KadoQuoteRequest = {\n amount: paymentAsset.getValue(\"string\"),\n asset: paymentAsset.symbol,\n blockchain: ChainToKadoChain(paymentAsset.chain),\n currency: receiveAsset.symbol as KadoFiatCurrency,\n fiatMethod,\n partner: \"fortress\",\n transactionType,\n };\n\n const kadoApiKey = SKConfig.get(\"apiKeys\").kado;\n warnOnce(!kadoApiKey, \"plugin(kado): No Kado API key found\");\n\n const quote = await RequestClient.get<KadoQuoteResponse>(\n \"https://api.kado.money/v2/ramp/quote\",\n { searchParams: quoteRequest, headers: { \"X-Widget-Id\": kadoApiKey } },\n );\n\n if (!quote.success) {\n throw new Error(quote.message);\n }\n\n return mapKadoQuoteToQuoteResponse({ quote, sellAsset, buyAsset });\n } catch (_) {\n throw new Error(\"core_swap_quote_error\");\n }\n}\n\nasync function getBlockchains() {\n const response = await RequestClient.get<KadoBlockchainsResponse>(\n \"https://api.kado.money/v1/ramp/blockchains\",\n );\n\n if (!response.success) {\n throw new Error(response.message);\n }\n\n return response.data.blockchains;\n}\n\nasync function getAssets() {\n const response = await RequestClient.get<KadoAssetsResponse>(\n \"https://api.kado.money/v1/ramp/supported-assets\",\n );\n\n if (!response.success) {\n throw new Error(response.message);\n }\n\n return response.data.assets;\n}\n\nasync function getOrderStatus(orderId: string) {\n const kadoApiKey = SKConfig.get(\"apiKeys\").kado;\n warnOnce(!kadoApiKey, \"plugin(kado): No Kado API key found\");\n\n try {\n const response = await RequestClient.get<{\n success: boolean;\n message: string;\n data: { order: { status: string } };\n }>(`https://api.kado.money/v2/public/orders/${orderId}`, {\n headers: { \"X-Widget-Id\": kadoApiKey },\n });\n\n if (!response.success) {\n throw new Error(response.message);\n }\n\n return response.data.order;\n } catch (_error) {\n throw new Error(\"Failed to get order status\");\n }\n}\n\nfunction getKadoWidgetUrl({\n sellAsset,\n buyAsset,\n recipient,\n type,\n sender,\n mode,\n}: {\n sellAsset: AssetValue;\n buyAsset: AssetValue;\n recipient?: string;\n sender?: string;\n type: \"buy\" | \"sell\";\n mode: \"minimal\" | \"full\";\n}) {\n const kadoApiKey = SKConfig.get(\"apiKeys\").kado;\n warnOnce(!kadoApiKey, \"plugin(kado): No Kado API key found\");\n\n const buySellParams =\n type === \"buy\"\n ? {\n onPayAmount: sellAsset.getValue(\"string\"),\n onPayCurrency: sellAsset.symbol,\n onRevCurrency: buyAsset.symbol,\n ...(recipient ? { onToAddress: recipient } : {}),\n }\n : {\n offPayAmount: sellAsset.getValue(\"string\"),\n offPayCurrency: sellAsset.symbol,\n offRevCurrency: buyAsset.symbol,\n ...(sender ? { offFromAddress: sender } : {}),\n };\n const network = ChainToKadoChain(type === \"buy\" ? buyAsset.chain : sellAsset.chain).toUpperCase();\n const urlParams = new URLSearchParams({\n ...buySellParams,\n apiKey: kadoApiKey,\n network,\n product: type.toUpperCase(),\n mode,\n });\n\n return `https://app.kado.money/?${urlParams.toString()}`;\n}\n\nfunction createPopover(url: string) {\n const overlay = document.createElement(\"div\");\n overlay.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0, 0, 0, 0.5);\n display: flex;\n justify-content: center;\n align-items: center;\n z-index: 9999;\n `;\n\n const iframe = document.createElement(\"iframe\");\n iframe.src = url;\n iframe.style.cssText = `\n width: 440px;\n height: 700px;\n border: none;\n border-radius: 12px;\n background: white;\n `;\n\n overlay.appendChild(iframe);\n document.body.appendChild(overlay);\n\n overlay.addEventListener(\"click\", (e) => {\n if (e.target === overlay) {\n document.body.removeChild(overlay);\n }\n });\n\n return overlay;\n}\n",
7
+ "import type { SupportedKadoChain } from \"./helpers\";\n\nexport const KadoSupportedFiatCurrencies = [\n \"USD\",\n \"CAD\",\n \"GBP\",\n \"EUR\",\n \"MXN\",\n \"COP\",\n \"INR\",\n \"CHF\",\n \"AUD\",\n \"ARS\",\n \"BRL\",\n \"CLP\",\n \"JPY\",\n \"KRW\",\n \"PEN\",\n \"PHP\",\n \"SGD\",\n \"TRY\",\n \"UYU\",\n \"TWD\",\n \"VND\",\n \"CRC\",\n \"SEK\",\n \"PLN\",\n \"DKK\",\n \"NOK\",\n \"NZD\",\n] as const;\n\nexport type KadoFiatCurrency = (typeof KadoSupportedFiatCurrencies)[number];\n\nexport type KadoFiatMethod =\n | \"ach\"\n | \"debit_card\"\n | \"credit_card\"\n | \"apple_pay_credit\"\n | \"apple_pay_debit\"\n | \"wire\"\n | \"sepa\"\n | \"pix\"\n | \"koywe\";\n\nexport type KadoQuoteRequest = {\n transactionType: \"buy\" | \"sell\";\n fiatMethod: KadoFiatMethod;\n partner: \"fortress\";\n amount: string;\n asset: string;\n blockchain: string;\n currency: KadoFiatCurrency;\n};\n\nexport type KadoAsset = {\n _id: string;\n name: string;\n description: string;\n label: string;\n symbol: string;\n supportedProviders: string[];\n stablecoin: boolean;\n liveOnRamp: boolean;\n createdAt: string;\n updatedAt: string;\n __v: number;\n priority: number;\n displayPrecision: number;\n usesAvaxRouter: boolean;\n squidChainId: string;\n coingeckoId: string;\n usesAxelarBridge: boolean;\n squidAssetId: string;\n address: string;\n blockExplorerURI: string;\n decimals: number;\n officialChainId: keyof typeof SupportedKadoChain;\n precision: number;\n rampProducts: string[];\n wallets: string[];\n rpcURI: string;\n usesPolygonFulfillment: boolean;\n usesOsmoRouter: boolean;\n ibcChannelIdOffRamp: number;\n ibcChannelIdOnRamp: number;\n osmoPfmChannel: number;\n osmoPfmReceiver: string;\n ibcDenom: string;\n isNative: boolean;\n avgOffRampTimeInSeconds: number;\n avgOnRampTimeInSeconds: number;\n providers: string[];\n trustekAssetId: string;\n trustekNetworkId: string;\n kycLevels: string[];\n};\n\nexport type KadoBlockchainsResponse = {\n success: boolean;\n message: string;\n data: {\n blockchains: {\n _id: string;\n supportedEnvironment: string;\n network: string;\n origin: string;\n label: string;\n associatedAssets: KadoAsset[];\n avgTransactionTimeSeconds: number;\n usesAvaxRouter: boolean;\n liveOnRamp: boolean;\n createdAt: string;\n updatedAt: string;\n __v: number;\n priority: number;\n }[];\n };\n};\n\nexport type KadoAssetsResponse = {\n success: boolean;\n message: string;\n data: {\n assets: {\n _id: string;\n name: string;\n description: string;\n label: string;\n symbol: string;\n supportedProviders: string[];\n stablecoin: boolean;\n liveOnRamp: boolean;\n createdAt: string;\n updatedAt: string;\n __v: number;\n priority: number;\n }[];\n };\n};\n\nexport type KadoQuoteResponse = {\n success: boolean;\n message: string;\n data: {\n request: {\n transactionType: string;\n fiatMethod: KadoFiatMethod;\n partner: string;\n amount: number;\n asset: string;\n blockchain: keyof typeof SupportedKadoChain;\n currency: KadoFiatCurrency;\n reverse: false;\n ipCountry: string;\n };\n quote: {\n asset: string;\n baseAmount: {\n amount: number;\n currency: KadoFiatCurrency;\n };\n price: {\n amount: number;\n price: number;\n symbol: string;\n unit: string;\n };\n bridgeFee: {\n amount: number;\n currency: KadoFiatCurrency;\n originalAmount: number;\n promotionModifier: number;\n };\n receiveAmountAfterFees: {\n originalAmount: number;\n amount: number;\n currency: KadoFiatCurrency;\n };\n receiveUnitCountAfterFees: {\n amount: number;\n currency: KadoFiatCurrency;\n };\n feeType: string;\n minValue: {\n amount: number;\n unit: string;\n };\n maxValue: {\n amount: number;\n unit: string;\n };\n receive: {\n amount: number;\n originalAmount: number;\n symbol: string;\n unit: string;\n unitCount: number;\n };\n networkFee: {\n amount: number;\n currency: KadoFiatCurrency;\n originalAmount: number;\n promotionModifier: number;\n };\n processingFee: {\n amount: number;\n currency: KadoFiatCurrency;\n originalAmount: number;\n promotionModifier: number;\n };\n totalFee: {\n amount: number;\n currency: KadoFiatCurrency;\n originalAmount: number;\n };\n smartContractFee: {\n amount: number;\n currency: KadoFiatCurrency;\n originalAmount: number;\n promotionModifier: number;\n };\n };\n };\n};\n"
8
+ ],
9
+ "mappings": "6BAAA,gBAA0B,iBAAO,kBAAa,gBAAc,yBAIrD,IAAM,EAAqB,CAChC,UAAW,EAAM,UACjB,OAAQ,EAAM,OACd,QAAS,EAAM,QACf,SAAU,EAAM,SAChB,SAAU,EAAM,SAChB,OAAQ,EAAM,OACd,SAAU,EAAM,SAChB,aAAc,EAAM,OACpB,QAAS,EAAM,QACf,KAAM,EAAM,KACZ,UAAW,EAAM,UACjB,SAAU,EAAM,QAClB,EAEO,SAAS,CAAgB,CAAC,EAAc,CAE7C,IAAM,EADU,OAAO,QAAQ,CAAkB,EAC3B,KAAK,EAAE,EAAG,KAAW,IAAU,CAAK,EAC1D,IAAK,EAAO,MAAM,IAAI,MAAM,SAAS,iBAAqB,EAC1D,OAAO,EAAM,GAGR,SAAS,CAAgB,CAAC,EAAmB,CAElD,IADc,OAAO,KAAK,CAAkB,EAAE,SAAS,CAAS,EACpD,MAAM,IAAI,MAAM,aAAa,iBAAyB,EAClE,OAAO,EAAmB,GAGrB,SAAS,CAA2B,EACzC,QACA,YACA,YAC2F,CAC3F,IAAM,EAAiB,EAAU,MAC3B,EAAgB,EAAS,MACzB,EAAW,IAAmB,EAAM,MAClC,UAAS,QAAO,aAAY,WAAU,gBAAe,cAAe,EAAM,KAAK,MAEjF,EAAiB,EAAS,IAC9B,EAAW,EAAQ,UAAU,SAAS,EAAI,EAAQ,OAAO,SAAS,CACpE,EACM,EAAmB,EACrB,KAAK,MAAO,EAAS,OAAS,EAAQ,OAAU,GAAM,EACtD,KAAK,MAAO,EAAS,QAAU,EAAM,MAAQ,EAAW,QAAW,GAAM,EAEvE,EAAU,KAAK,KAAK,EAAW,GAAkB,CAAC,EAClD,EAAO,KAAK,KAAK,EAAE,EACnB,EAAW,KAAK,KAAK,EAAW,EAAc,EAC9C,EAA+B,CACnC,CACE,SAAU,EAAS,SAAS,EAC5B,mBAAoB,uBACpB,cAAe,CAAE,UAAS,OAAM,WAAU,MAAO,EAAU,EAAO,CAAS,EAC3E,kBAAmB,EAAe,SAAS,QAAQ,EACnD,6BAA8B,EAAe,SAAS,QAAQ,EAC9D,UAAW,CAAC,EAAa,IAAI,EAC7B,WAAY,EAAU,SAAS,QAAQ,EACvC,UAAW,EAAU,SAAS,EAC9B,cAAe,kBACf,mBACA,KAAM,CACJ,CACE,MAAO,EAAc,SACrB,OAAQ,EAAc,OAAO,SAAS,EACtC,KAAM,EAAY,UAClB,SAAU,EAAa,KACvB,MAAO,EAAM,IACf,EACA,CACE,MAAO,EAAW,SAClB,OAAQ,EAAW,OAAO,SAAS,EACnC,KAAM,EAAY,QAClB,SAAU,EAAa,KACvB,MAAO,EAAS,KAClB,CACF,EACA,KAAM,CACJ,CACE,SAAU,EAAa,KACvB,UAAW,EAAU,SAAS,EAC9B,WAAY,EAAU,SAAS,QAAQ,EACvC,SAAU,EAAS,SAAS,EAC5B,UAAW,EAAQ,UAAU,SAAS,EACtC,qBAAsB,EAAQ,UAAU,SAAS,EACjD,KAAM,CACJ,CACE,MAAO,EAAc,SACrB,OAAQ,EAAc,OAAO,SAAS,EACtC,KAAM,EAAY,UAClB,SAAU,EAAa,KACvB,MAAO,EAAM,IACf,EACA,CACE,MAAO,EAAW,SAClB,OAAQ,EAAW,OAAO,SAAS,EACnC,KAAM,EAAY,QAClB,SAAU,EAAa,KACvB,MAAO,EAAS,KAClB,CACF,CACF,CACF,EACA,SAAU,CAAC,EACX,KAAM,CAAE,KAAM,CAAC,CAAE,CACnB,CACF,EAEA,MAAO,CACL,QAAS,OAAO,WAAW,EAC3B,SACA,MAAO,EAAM,QAAU,OAAY,EAAM,OAC3C,ECnHF,qBACE,WACA,kBACA,mBACA,cACA,kBAEA,cACA,yBAaK,IAAM,EAAa,EAAa,CACrC,KAAM,OACN,QAAS,KAAO,CACd,gBACA,YACA,iBACA,mBACA,iBACA,qBACA,MACF,GACA,WAAY,CACV,0BAA2B,CAAC,EAAa,IAAI,CAC/C,CACF,CAAC,EAED,SAAS,CAAI,EAAG,SAAgD,CAC9D,KAAM,EAAM,eAAiB,EAAM,oBACjC,MAAM,IAAI,MAAM,+CAA+C,EAGjE,IAAM,EAAY,EAAW,KAAK,CAAE,MAAO,EAAM,SAAU,CAAC,EACtD,EAAW,EAAW,KAAK,CAAE,MAAO,EAAM,QAAS,CAAC,EAGpD,EAAO,EAAU,QAAU,EAAM,KAAO,MAAQ,OAEhD,EAAM,EAAiB,CAC3B,YACA,WACA,UAAW,EAAM,mBACjB,OAAQ,EAAM,cACd,OACA,KAAM,SACR,CAAC,EAID,OAFA,EAAc,CAAG,EAEV,CACL,OAAQ,UACR,OAAQ,IACV,EAGF,eAAe,CAAkB,EAC/B,YACA,WACA,aAAa,eAKY,CACzB,GAAI,CACF,IAAM,EAAW,EAAU,QAAU,EAAM,MACpC,EAAc,GAAgB,EAAW,CAAC,EAAU,CAAS,EAAI,CAAC,EAAW,CAAQ,EACtF,EAAkB,EAAW,MAAQ,OAErC,EAAiC,CACrC,OAAQ,EAAa,SAAS,QAAQ,EACtC,MAAO,EAAa,OACpB,WAAY,EAAiB,EAAa,KAAK,EAC/C,SAAU,EAAa,OACvB,aACA,QAAS,WACT,iBACF,EAEM,EAAa,EAAS,IAAI,SAAS,EAAE,KAC3C,GAAU,EAAY,qCAAqC,EAE3D,IAAM,EAAQ,MAAM,EAAc,IAChC,uCACA,CAAE,aAAc,EAAc,QAAS,CAAE,cAAe,CAAW,CAAE,CACvE,EAEA,IAAK,EAAM,QACT,MAAM,IAAI,MAAM,EAAM,OAAO,EAG/B,OAAO,EAA4B,CAAE,QAAO,YAAW,UAAS,CAAC,QAC1D,EAAP,CACA,MAAM,IAAI,MAAM,uBAAuB,GAI3C,eAAe,CAAc,EAAG,CAC9B,IAAM,EAAW,MAAM,EAAc,IACnC,4CACF,EAEA,IAAK,EAAS,QACZ,MAAM,IAAI,MAAM,EAAS,OAAO,EAGlC,OAAO,EAAS,KAAK,YAGvB,eAAe,CAAS,EAAG,CACzB,IAAM,EAAW,MAAM,EAAc,IACnC,iDACF,EAEA,IAAK,EAAS,QACZ,MAAM,IAAI,MAAM,EAAS,OAAO,EAGlC,OAAO,EAAS,KAAK,OAGvB,eAAe,CAAc,CAAC,EAAiB,CAC7C,IAAM,EAAa,EAAS,IAAI,SAAS,EAAE,KAC3C,GAAU,EAAY,qCAAqC,EAE3D,GAAI,CACF,IAAM,EAAW,MAAM,EAAc,IAIlC,2CAA2C,IAAW,CACvD,QAAS,CAAE,cAAe,CAAW,CACvC,CAAC,EAED,IAAK,EAAS,QACZ,MAAM,IAAI,MAAM,EAAS,OAAO,EAGlC,OAAO,EAAS,KAAK,YACd,EAAP,CACA,MAAM,IAAI,MAAM,4BAA4B,GAIhD,SAAS,CAAgB,EACvB,YACA,WACA,YACA,OACA,SACA,QAQC,CACD,IAAM,EAAa,EAAS,IAAI,SAAS,EAAE,KAC3C,GAAU,EAAY,qCAAqC,EAE3D,IAAM,EACJ,IAAS,MACL,CACE,YAAa,EAAU,SAAS,QAAQ,EACxC,cAAe,EAAU,OACzB,cAAe,EAAS,UACpB,EAAY,CAAE,YAAa,CAAU,EAAI,CAAC,CAChD,EACA,CACE,aAAc,EAAU,SAAS,QAAQ,EACzC,eAAgB,EAAU,OAC1B,eAAgB,EAAS,UACrB,EAAS,CAAE,eAAgB,CAAO,EAAI,CAAC,CAC7C,EACA,EAAU,EAAiB,IAAS,MAAQ,EAAS,MAAQ,EAAU,KAAK,EAAE,YAAY,EAShG,MAAO,2BARW,IAAI,gBAAgB,IACjC,EACH,OAAQ,EACR,UACA,QAAS,EAAK,YAAY,EAC1B,MACF,CAAC,EAE2C,SAAS,IAGvD,SAAS,CAAa,CAAC,EAAa,CAClC,IAAM,EAAU,SAAS,cAAc,KAAK,EAC5C,EAAQ,MAAM,QAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAaxB,IAAM,EAAS,SAAS,cAAc,QAAQ,EAmB9C,OAlBA,EAAO,IAAM,EACb,EAAO,MAAM,QAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQvB,EAAQ,YAAY,CAAM,EAC1B,SAAS,KAAK,YAAY,CAAO,EAEjC,EAAQ,iBAAiB,QAAS,CAAC,IAAM,CACvC,GAAI,EAAE,SAAW,EACf,SAAS,KAAK,YAAY,CAAO,EAEpC,EAEM,ECtOF,IAAM,EAA8B,CACzC,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,MACA,KACF",
10
+ "debugId": "54E84AB67ECF50AF64756E2164756E21",
11
+ "names": []
12
+ }
@@ -0,0 +1,3 @@
1
+ var c={};u(c,{RadixPlugin:()=>w});module.exports=p(c);var a=require("@swapkit/helpers"),w=a.createPlugin({name:"radix",properties:{supportedSwapkitProviders:[a.ProviderName.CAVIAR_V1]},methods:({getWallet:r})=>({swap:async function d({route:{tx:t,sellAmount:s,sellAsset:o}}){let e=await a.AssetValue.from({asyncTokenLookup:!0,value:s,asset:o});if(a.Chain.Radix!==e.chain)throw new a.SwapKitError("core_swap_invalid_params");let i=r(e.chain);try{return i.signAndBroadcast({manifest:t})}catch(n){throw new a.SwapKitError("core_swap_invalid_params",n)}}})});
2
+
3
+ //# debugId=0E4076998B38FA0B64756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/radix/index.ts"],
4
+ "sourcesContent": [
5
+ "import {\n AssetValue,\n Chain,\n ProviderName,\n SwapKitError,\n type SwapParams,\n createPlugin,\n} from \"@swapkit/helpers\";\nimport type { QuoteResponseRoute } from \"@swapkit/helpers/api\";\n\nexport const RadixPlugin = createPlugin({\n name: \"radix\",\n properties: { supportedSwapkitProviders: [ProviderName.CAVIAR_V1] },\n methods: ({ getWallet }) => ({\n swap: async function radixSwap({\n route: { tx, sellAmount, sellAsset },\n }: SwapParams<\"radix\", QuoteResponseRoute>) {\n const assetValue = await AssetValue.from({\n asyncTokenLookup: true,\n value: sellAmount,\n asset: sellAsset,\n });\n\n if (Chain.Radix !== assetValue.chain) {\n throw new SwapKitError(\"core_swap_invalid_params\");\n }\n\n const wallet = getWallet(assetValue.chain);\n try {\n return wallet.signAndBroadcast({ manifest: tx as string });\n } catch (error) {\n throw new SwapKitError(\"core_swap_invalid_params\", error);\n }\n },\n }),\n});\n"
6
+ ],
7
+ "mappings": "sDAOO,IAPP,8BAUa,EAAc,eAAa,CACtC,KAAM,QACN,WAAY,CAAE,0BAA2B,CAAC,eAAa,SAAS,CAAE,EAClE,QAAS,EAAG,gBAAiB,CAC3B,KAAM,eAAe,CAAS,EAC5B,OAAS,KAAI,aAAY,cACiB,CAC1C,IAAM,EAAa,MAAM,aAAW,KAAK,CACvC,iBAAkB,GAClB,MAAO,EACP,MAAO,CACT,CAAC,EAED,GAAI,QAAM,QAAU,EAAW,MAC7B,MAAM,IAAI,eAAa,0BAA0B,EAGnD,IAAM,EAAS,EAAU,EAAW,KAAK,EACzC,GAAI,CACF,OAAO,EAAO,iBAAiB,CAAE,SAAU,CAAa,CAAC,QAClD,EAAP,CACA,MAAM,IAAI,eAAa,2BAA4B,CAAK,GAG9D,EACF,CAAC",
8
+ "debugId": "0E4076998B38FA0B64756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,3 @@
1
+ import"../chunk-tvrdndbw.js";import{AssetValue as p,Chain as u,ProviderName as w,SwapKitError as e,createPlugin as c}from"@swapkit/helpers";var l=c({name:"radix",properties:{supportedSwapkitProviders:[w.CAVIAR_V1]},methods:({getWallet:r})=>({swap:async function d({route:{tx:t,sellAmount:s,sellAsset:o}}){let a=await p.from({asyncTokenLookup:!0,value:s,asset:o});if(u.Radix!==a.chain)throw new e("core_swap_invalid_params");let i=r(a.chain);try{return i.signAndBroadcast({manifest:t})}catch(n){throw new e("core_swap_invalid_params",n)}}})});export{l as RadixPlugin};
2
+
3
+ //# debugId=1CB0136C68E6C70064756E2164756E21
@@ -0,0 +1,10 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/radix/index.ts"],
4
+ "sourcesContent": [
5
+ "import {\n AssetValue,\n Chain,\n ProviderName,\n SwapKitError,\n type SwapParams,\n createPlugin,\n} from \"@swapkit/helpers\";\nimport type { QuoteResponseRoute } from \"@swapkit/helpers/api\";\n\nexport const RadixPlugin = createPlugin({\n name: \"radix\",\n properties: { supportedSwapkitProviders: [ProviderName.CAVIAR_V1] },\n methods: ({ getWallet }) => ({\n swap: async function radixSwap({\n route: { tx, sellAmount, sellAsset },\n }: SwapParams<\"radix\", QuoteResponseRoute>) {\n const assetValue = await AssetValue.from({\n asyncTokenLookup: true,\n value: sellAmount,\n asset: sellAsset,\n });\n\n if (Chain.Radix !== assetValue.chain) {\n throw new SwapKitError(\"core_swap_invalid_params\");\n }\n\n const wallet = getWallet(assetValue.chain);\n try {\n return wallet.signAndBroadcast({ manifest: tx as string });\n } catch (error) {\n throw new SwapKitError(\"core_swap_invalid_params\", error);\n }\n },\n }),\n});\n"
6
+ ],
7
+ "mappings": "6BAAA,qBACE,WACA,kBACA,kBACA,kBAEA,yBAIK,IAAM,EAAc,EAAa,CACtC,KAAM,QACN,WAAY,CAAE,0BAA2B,CAAC,EAAa,SAAS,CAAE,EAClE,QAAS,EAAG,gBAAiB,CAC3B,KAAM,eAAe,CAAS,EAC5B,OAAS,KAAI,aAAY,cACiB,CAC1C,IAAM,EAAa,MAAM,EAAW,KAAK,CACvC,iBAAkB,GAClB,MAAO,EACP,MAAO,CACT,CAAC,EAED,GAAI,EAAM,QAAU,EAAW,MAC7B,MAAM,IAAI,EAAa,0BAA0B,EAGnD,IAAM,EAAS,EAAU,EAAW,KAAK,EACzC,GAAI,CACF,OAAO,EAAO,iBAAiB,CAAE,SAAU,CAAa,CAAC,QAClD,EAAP,CACA,MAAM,IAAI,EAAa,2BAA4B,CAAK,GAG9D,EACF,CAAC",
8
+ "debugId": "1CB0136C68E6C70064756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,3 @@
1
+ var xx={};e(xx,{validateAddressType:()=>B,ThorchainPlugin:()=>S,MayachainPlugin:()=>b});module.exports=a(xx);var x=require("@swapkit/helpers"),M=require("@swapkit/helpers/api"),Y=require("@swapkit/helpers/contracts");var T=require("@swapkit/helpers");function B({chain:J,address:_}){if(!_)return!1;switch(J){case T.Chain.Bitcoin:return!_.startsWith("bc1p");default:return!0}}function y({assetValue:J,from:_,memo:Q="",...N}){return{...N,memo:Q,from:_,assetValue:J}}var l={[x.FeeOption.Average]:1.2,[x.FeeOption.Fast]:1.5,[x.FeeOption.Fastest]:2},i={[x.Chain.Avalanche]:Y.TCAvalancheDepositABI,[x.Chain.Base]:Y.TCBaseDepositABI,[x.Chain.BinanceSmartChain]:Y.TCBscDepositABI,[x.Chain.Ethereum]:Y.TCEthereumVaultAbi},t={[x.Chain.Arbitrum]:Y.MayaArbitrumVaultAbi,[x.Chain.Ethereum]:Y.MayaEthereumVaultAbi},S=x.createPlugin({name:"thorchain",methods:w(x.Chain.THORChain),properties:{supportedSwapkitProviders:[x.ProviderName.THORCHAIN,x.ProviderName.THORCHAIN_STREAMING]}}),b=x.createPlugin({name:"mayachain",methods:w(x.Chain.Maya),properties:{supportedSwapkitProviders:[x.ProviderName.MAYACHAIN]}});function s(J){return async function _(Q){if(J==="thorchain"&&Q===x.Chain.THORChain||J==="mayachain"&&Q===x.Chain.Maya)return{gas_rate:"0",router:"",address:"",halted:!1,chain:Q};let Z=(await M.SwapKitApi.thornode.getInboundAddresses(J)).find((v)=>v.chain===Q);if(!Z)throw new x.SwapKitError("core_inbound_data_not_found");if(Z?.halted)throw new x.SwapKitError("core_chain_halted");return Z}}function w(J){return function _({getWallet:Q}){let N=J===x.Chain.Maya?"mayachain":"thorchain",Z=s(N);async function v({assetValue:U,type:X="checkOnly"}){let q=(await Z(U.chain)).router,L=U.chain,z=x.EVMChains.includes(L);if(z&&U.isGasAsset||!z||U.isSynthetic)return Promise.resolve(X==="checkOnly"?!0:"approved");let H=Q(L);if(!H)throw new x.SwapKitError("core_wallet_connection_not_found");let R=X==="checkOnly"?H.isApproved:H.approve;if(!(U.address&&H.address))throw new x.SwapKitError("core_approve_asset_address_or_from_not_found");return R({amount:U.getBaseValue("bigint"),assetAddress:U.address,from:H.address,spenderAddress:q})}async function W({assetValue:U,recipient:X,router:q,...L}){let z=N==="thorchain"?i:t,{chain:k,symbol:H,ticker:R}=U,P=Q(k);if(!P)throw new x.SwapKitError("core_wallet_connection_not_found");let{address:f}=P;if(!B({address:f,chain:k}))throw new x.SwapKitError("core_transaction_invalid_sender_address");let O=y({from:f,assetValue:U,recipient:X,router:q,...L});try{let $=z?.[k];if(!$){let I=Q(k);return J===k&&X===""?I.deposit(O):I.transfer(O)}let{getChecksumAddressFromAsset:j}=await import("@swapkit/toolboxes/evm");return Q(k).call({abi:$,contractAddress:q||(await Z(k)).router,funcName:"depositWithExpiry",funcParams:[X,j({chain:k,symbol:H,ticker:R},k),U.getBaseValue("string"),O.memo,L.expiration||Number.parseInt(`${(Date.now()+900000)/1000}`)],txOverrides:{from:O.from,value:U.isGasAsset?U.getBaseValue("bigint"):void 0}})}catch($){let j=typeof $==="string"?$.toLowerCase():$?.message.toLowerCase(),D=j?.includes("insufficient funds"),I=j?.includes("gas"),E=j?.includes("server"),r=j?.includes("user rejected");throw new x.SwapKitError(D?"core_transaction_deposit_insufficient_funds_error":I?"core_transaction_deposit_gas_error":E?"core_transaction_deposit_server_error":r?"core_transaction_user_rejected":"core_transaction_deposit_error",$)}}async function F({memo:U,assetValue:X}){let q=await M.SwapKitApi.thornode.getMimirInfo(N);if(q.HALTCHAINGLOBAL>=1||q.HALTTHORCHAIN>=1)throw new x.SwapKitError("thorchain_chain_halted");return W({assetValue:X,recipient:"",memo:U})}async function G({assetValue:U,memo:X,feeOptionKey:q=x.FeeOption.Fast}){let{gas_rate:L="0",router:z,address:k}=await Z(U.chain);return W({assetValue:U,recipient:k,memo:X,router:z,feeRate:Number.parseInt(L)*l[q]})}function C(U){return v({...U,type:x.ApproveMode.Approve})}function A(U){return v({...U,type:x.ApproveMode.CheckOnly})}function c({assetValue:U,...X}){return F({assetValue:U,memo:x.getMemoForNameRegister(X)})}function m({assetValue:U,payoutAddress:X,name:q,ownerAddress:L}){let z=X||Q(U.chain)?.address;if(!z)throw new x.SwapKitError("thorchain_preferred_asset_payout_required");return F({assetValue:x.AssetValue.from({chain:J}),memo:x.getMemoForNamePreferredAssetRegister({asset:U.toString(),chain:U.chain,name:q,owner:L,payout:z})})}function g({type:U,assetValue:X,address:q}){let L=U===x.MemoType.UNBOND?x.getMemoForUnbond({address:q,unbondAmount:X.getBaseValue("number")}):x.getMemoForLeaveAndBond({type:U,address:q}),z=U===x.MemoType.BOND?X:x.getMinAmountByChain(J);return F({memo:L,assetValue:z})}async function h({baseAssetValue:U,assetValue:X}){if(U.lte(0)||X.lte(0))throw new x.SwapKitError("core_transaction_create_liquidity_invalid_params");let q=Q(X.chain).address,L=Q(J).address,z=await x.wrapWithThrow(()=>{return G({assetValue:U,memo:x.getMemoForDeposit({...X,address:q})})},"core_transaction_create_liquidity_base_error"),k=await x.wrapWithThrow(()=>{return G({assetValue:X,memo:x.getMemoForDeposit({...X,address:L})})},"core_transaction_create_liquidity_asset_error");return{baseAssetTx:z,assetTx:k}}function V({assetValue:U,poolAddress:X,address:q,symmetric:L}){if(L&&!q)throw new x.SwapKitError("core_transaction_add_liquidity_invalid_params");let z=x.getMemoForDeposit({chain:X.split(".")[0],symbol:X.split(".")[1],address:L?q:""});return G({assetValue:U,memo:z})}async function p({baseAssetValue:U,assetValue:X,baseAssetAddr:q,assetAddr:L,isPendingSymmAsset:z,mode:k="sym"}){let{chain:H,symbol:R}=X,P=k==="sym",f=U?.gt(0)&&(P||k==="baseAsset"),K=X?.gt(0)&&(P||k==="asset"),O=z||f,$=Q(J).address,j=O?q||$:"",D=P||k==="asset"?L||Q(H).address:"";if(!(f||K))throw new x.SwapKitError("core_transaction_add_liquidity_invalid_params");if(O&&!j)throw new x.SwapKitError("core_transaction_add_liquidity_base_address");let I=f&&U?await x.wrapWithThrow(()=>{return G({assetValue:U,memo:x.getMemoForDeposit({chain:H,symbol:R,address:D})})},"core_transaction_add_liquidity_base_error"):void 0,E=K&&X?await x.wrapWithThrow(()=>{return G({assetValue:X,memo:x.getMemoForDeposit({chain:H,symbol:R,address:j})})},"core_transaction_add_liquidity_asset_error"):void 0;return{baseAssetTx:I,assetTx:E}}function n({assetValue:U,memo:X,percent:q,type:L}){let{chain:z,symbol:k}=U,H=L==="add",R=H?x.getMemoForSaverDeposit({symbol:k,chain:z}):x.getMemoForSaverWithdraw({basisPoints:Math.min(1e4,Math.round(q*100)),symbol:k,chain:z});return G({memo:X||R,assetValue:H?U:x.getMinAmountByChain(z)})}function d({memo:U,assetValue:X,percent:q,from:L,to:z}){let k=z==="baseAsset"&&L!=="baseAsset"?x.AssetValue.from({chain:J}):L==="sym"&&z==="sym"||L==="baseAsset"||L==="asset"?void 0:X,H=x.getMinAmountByChain(L==="asset"?X.chain:J),R=U||x.getMemoForWithdraw({symbol:X.symbol,chain:X.chain,ticker:X.ticker,basisPoints:Math.min(1e4,Math.round(q*100)),targetAsset:k?.toString()});return G({assetValue:H,memo:R})}async function u({feeOptionKey:U,route:X}){let{memo:q,expiration:L,targetAddress:z}=X,k=await x.AssetValue.from({asyncTokenLookup:!0,asset:X.sellAsset,value:X.sellAmount});if(!k)throw new x.SwapKitError("core_swap_asset_not_recognized");if(!B({address:X.destinationAddress,chain:x.AssetValue.from({asset:X.buyAsset}).chain}))throw new x.SwapKitError("core_transaction_invalid_recipient_address");let{address:R}=await Z(k.chain);return W({expiration:Number(L),assetValue:k,memo:q,feeOptionKey:U,router:z,recipient:R})}return{addLiquidity:p,addLiquidityPart:V,approveAssetValue:C,createLiquidity:h,deposit:W,depositToPool:G,getInboundDataByChain:Z,isAssetValueApproved:A,nodeAction:g,registerName:c,registerPreferredAsset:m,savings:n,swap:u,withdraw:d}}}
2
+
3
+ //# debugId=D5EBD8AE1F18104964756E2164756E21
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/thorchain/plugin.ts", "../src/thorchain/shared.ts"],
4
+ "sourcesContent": [
5
+ "import {\n ApproveMode,\n type ApproveReturnType,\n AssetValue,\n Chain,\n type EVMChain,\n EVMChains,\n type ErrorKeys,\n FeeOption,\n MemoType,\n ProviderName,\n SwapKitError,\n type SwapKitPluginParams,\n type SwapParams,\n createPlugin,\n getMemoForDeposit,\n getMemoForLeaveAndBond,\n getMemoForNamePreferredAssetRegister,\n getMemoForNameRegister,\n getMemoForSaverDeposit,\n getMemoForSaverWithdraw,\n getMemoForUnbond,\n getMemoForWithdraw,\n getMinAmountByChain,\n wrapWithThrow,\n} from \"@swapkit/helpers\";\nimport { type QuoteResponseRoute, SwapKitApi, type THORNodeType } from \"@swapkit/helpers/api\";\nimport {\n MayaArbitrumVaultAbi,\n MayaEthereumVaultAbi,\n TCAvalancheDepositABI,\n TCBaseDepositABI,\n TCBscDepositABI,\n TCEthereumVaultAbi,\n} from \"@swapkit/helpers/contracts\";\n\nimport { prepareTxParams, validateAddressType } from \"./shared\";\nimport type {\n AddLiquidityParams,\n AddLiquidityPartParams,\n ApproveParams,\n CoreTxParams,\n CreateLiquidityParams,\n NodeActionParams,\n RegisterThornameParams,\n SavingsParams,\n SupportedChain,\n WithdrawParams,\n} from \"./types\";\n\nconst gasFeeMultiplier: Record<FeeOption, number> = {\n [FeeOption.Average]: 1.2,\n [FeeOption.Fast]: 1.5,\n [FeeOption.Fastest]: 2,\n};\n\nconst TCSpecificAbi = {\n [Chain.Avalanche]: TCAvalancheDepositABI,\n [Chain.Base]: TCBaseDepositABI,\n [Chain.BinanceSmartChain]: TCBscDepositABI,\n [Chain.Ethereum]: TCEthereumVaultAbi,\n};\n\nconst MayaSpecificAbi = {\n [Chain.Arbitrum]: MayaArbitrumVaultAbi,\n [Chain.Ethereum]: MayaEthereumVaultAbi,\n};\n\nexport const ThorchainPlugin = createPlugin({\n name: \"thorchain\",\n methods: createTCBasedPlugin(Chain.THORChain),\n properties: {\n supportedSwapkitProviders: [ProviderName.THORCHAIN, ProviderName.THORCHAIN_STREAMING],\n },\n});\n\nexport const MayachainPlugin = createPlugin({\n name: \"mayachain\",\n methods: createTCBasedPlugin(Chain.Maya),\n properties: {\n supportedSwapkitProviders: [ProviderName.MAYACHAIN],\n },\n});\n\nfunction getInboundDataFunction(type?: THORNodeType) {\n return async function getInboundDataByChain<T extends Chain>(chain: T) {\n if (\n (type === \"thorchain\" && chain === Chain.THORChain) ||\n (type === \"mayachain\" && chain === Chain.Maya)\n ) {\n return { gas_rate: \"0\", router: \"\", address: \"\", halted: false, chain };\n }\n\n const inboundData = await SwapKitApi.thornode.getInboundAddresses(type);\n const chainAddressData = inboundData.find((item) => item.chain === chain);\n\n if (!chainAddressData) throw new SwapKitError(\"core_inbound_data_not_found\");\n if (chainAddressData?.halted) throw new SwapKitError(\"core_chain_halted\");\n\n return chainAddressData;\n };\n}\n\ntype PluginChain = Chain.Maya | Chain.THORChain;\n\nfunction createTCBasedPlugin<T extends PluginChain>(pluginChain: T) {\n return function plugin({ getWallet }: SwapKitPluginParams) {\n const pluginType = pluginChain === Chain.Maya ? \"mayachain\" : \"thorchain\";\n const getInboundDataByChain = getInboundDataFunction(pluginType);\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO: refactor/split\n async function approve<T extends ApproveMode>({\n assetValue,\n type = \"checkOnly\" as T,\n }: { type: T; assetValue: AssetValue }) {\n const router = (await getInboundDataByChain(assetValue.chain)).router as string;\n\n const chain = assetValue.chain as EVMChain;\n\n const isEVMChain = EVMChains.includes(chain as EVMChain);\n const isNativeEVM = isEVMChain && assetValue.isGasAsset;\n\n if (isNativeEVM || !isEVMChain || assetValue.isSynthetic) {\n return Promise.resolve(type === \"checkOnly\" ? true : \"approved\") as ApproveReturnType<T>;\n }\n\n const wallet = getWallet(chain);\n\n if (!wallet) {\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n }\n\n const walletAction = type === \"checkOnly\" ? wallet.isApproved : wallet.approve;\n\n if (!(assetValue.address && wallet.address)) {\n throw new SwapKitError(\"core_approve_asset_address_or_from_not_found\");\n }\n\n return walletAction({\n amount: assetValue.getBaseValue(\"bigint\"),\n assetAddress: assetValue.address,\n from: wallet.address,\n spenderAddress: router,\n });\n }\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO refactor\n async function deposit({\n assetValue,\n recipient,\n router,\n ...rest\n }: CoreTxParams & { router?: string }) {\n const abis = pluginType === \"thorchain\" ? TCSpecificAbi : MayaSpecificAbi;\n const { chain, symbol, ticker } = assetValue;\n\n const wallet = getWallet(chain as SupportedChain);\n if (!wallet) {\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n }\n const { address } = wallet;\n const isAddressValidated = validateAddressType({ address, chain });\n if (!isAddressValidated) {\n throw new SwapKitError(\"core_transaction_invalid_sender_address\");\n }\n\n const params = prepareTxParams({ from: address, assetValue, recipient, router, ...rest });\n\n try {\n const abi = abis?.[chain as keyof typeof abis];\n\n if (!abi) {\n const wallet = getWallet(chain as PluginChain);\n const shouldDeposit = pluginChain === chain && recipient === \"\";\n return shouldDeposit ? wallet.deposit(params) : wallet.transfer(params);\n }\n\n const { getChecksumAddressFromAsset } = await import(\"@swapkit/toolboxes/evm\");\n const wallet = getWallet(chain as EVMChain);\n\n return wallet.call<string>({\n abi,\n contractAddress: router || ((await getInboundDataByChain(chain)).router as string),\n funcName: \"depositWithExpiry\",\n funcParams: [\n recipient,\n getChecksumAddressFromAsset({ chain, symbol, ticker }, chain as EVMChain),\n assetValue.getBaseValue(\"string\"),\n params.memo,\n rest.expiration || Number.parseInt(`${(Date.now() + 15 * 60 * 1000) / 1000}`),\n ],\n txOverrides: {\n from: params.from,\n value: assetValue.isGasAsset ? assetValue.getBaseValue(\"bigint\") : undefined,\n },\n });\n } catch (error) {\n const errorMessage =\n // @ts-expect-error Fine to use error as string\n typeof error === \"string\" ? error.toLowerCase() : error?.message.toLowerCase();\n const isInsufficientFunds = errorMessage?.includes(\"insufficient funds\");\n const isGas = errorMessage?.includes(\"gas\");\n const isServer = errorMessage?.includes(\"server\");\n const isUserRejected = errorMessage?.includes(\"user rejected\");\n const errorKey: ErrorKeys = isInsufficientFunds\n ? \"core_transaction_deposit_insufficient_funds_error\"\n : isGas\n ? \"core_transaction_deposit_gas_error\"\n : isServer\n ? \"core_transaction_deposit_server_error\"\n : isUserRejected\n ? \"core_transaction_user_rejected\"\n : \"core_transaction_deposit_error\";\n\n throw new SwapKitError(errorKey, error);\n }\n }\n\n async function depositToProtocol({\n memo,\n assetValue,\n }: { assetValue: AssetValue; memo: string }) {\n const mimir = await SwapKitApi.thornode.getMimirInfo(pluginType);\n\n // check if trading is halted or not\n if (mimir.HALTCHAINGLOBAL >= 1 || mimir.HALTTHORCHAIN >= 1) {\n throw new SwapKitError(\"thorchain_chain_halted\");\n }\n\n return deposit({ assetValue, recipient: \"\", memo });\n }\n\n async function depositToPool({\n assetValue,\n memo,\n feeOptionKey = FeeOption.Fast,\n }: { assetValue: AssetValue; memo: string; feeOptionKey?: FeeOption }) {\n const {\n gas_rate = \"0\",\n router,\n address: poolAddress,\n } = await getInboundDataByChain(assetValue.chain);\n\n return deposit({\n assetValue,\n recipient: poolAddress,\n memo,\n router,\n feeRate: Number.parseInt(gas_rate) * gasFeeMultiplier[feeOptionKey],\n });\n }\n\n function approveAssetValue(params: ApproveParams) {\n return approve({ ...params, type: ApproveMode.Approve });\n }\n\n function isAssetValueApproved(params: ApproveParams) {\n return approve({ ...params, type: ApproveMode.CheckOnly });\n }\n\n function registerName({ assetValue, ...params }: RegisterThornameParams) {\n return depositToProtocol({ assetValue, memo: getMemoForNameRegister(params) });\n }\n\n function registerPreferredAsset({\n assetValue,\n payoutAddress,\n name,\n ownerAddress,\n }: {\n assetValue: AssetValue;\n payoutAddress?: string;\n name: string;\n ownerAddress: string;\n }) {\n const payout = payoutAddress || getWallet(assetValue.chain as SupportedChain)?.address;\n\n if (!payout) {\n throw new SwapKitError(\"thorchain_preferred_asset_payout_required\");\n }\n\n return depositToProtocol({\n assetValue: AssetValue.from({ chain: pluginChain }),\n memo: getMemoForNamePreferredAssetRegister({\n asset: assetValue.toString(),\n chain: assetValue.chain,\n name,\n owner: ownerAddress,\n payout,\n }),\n });\n }\n\n function nodeAction({ type, assetValue, address }: NodeActionParams) {\n const memo =\n type === MemoType.UNBOND\n ? getMemoForUnbond({ address, unbondAmount: assetValue.getBaseValue(\"number\") })\n : getMemoForLeaveAndBond({ type, address });\n\n const assetToTransfer =\n type === MemoType.BOND ? assetValue : getMinAmountByChain(pluginChain);\n return depositToProtocol({ memo, assetValue: assetToTransfer });\n }\n\n async function createLiquidity({ baseAssetValue, assetValue }: CreateLiquidityParams) {\n if (baseAssetValue.lte(0) || assetValue.lte(0)) {\n throw new SwapKitError(\"core_transaction_create_liquidity_invalid_params\");\n }\n\n const assetAddress = getWallet(assetValue.chain as SupportedChain).address;\n const baseAssetAddress = getWallet(pluginChain).address;\n\n const baseAssetTx = await wrapWithThrow(() => {\n return depositToPool({\n assetValue: baseAssetValue,\n memo: getMemoForDeposit({ ...assetValue, address: assetAddress }),\n });\n }, \"core_transaction_create_liquidity_base_error\");\n\n const assetTx = await wrapWithThrow(() => {\n return depositToPool({\n assetValue,\n memo: getMemoForDeposit({ ...assetValue, address: baseAssetAddress }),\n });\n }, \"core_transaction_create_liquidity_asset_error\");\n\n return { baseAssetTx, assetTx };\n }\n\n function addLiquidityPart({\n assetValue,\n poolAddress,\n address,\n symmetric,\n }: AddLiquidityPartParams) {\n if (symmetric && !address) {\n throw new SwapKitError(\"core_transaction_add_liquidity_invalid_params\");\n }\n const memo = getMemoForDeposit({\n chain: poolAddress.split(\".\")[0] as Chain,\n symbol: poolAddress.split(\".\")[1] as string,\n address: symmetric ? address : \"\",\n });\n\n return depositToPool({ assetValue, memo });\n }\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: TODO: Refactor\n async function addLiquidity({\n baseAssetValue,\n assetValue,\n baseAssetAddr,\n assetAddr,\n isPendingSymmAsset,\n mode = \"sym\",\n }: AddLiquidityParams) {\n const { chain, symbol } = assetValue;\n const isSym = mode === \"sym\";\n const baseTransfer = baseAssetValue?.gt(0) && (isSym || mode === \"baseAsset\");\n const assetTransfer = assetValue?.gt(0) && (isSym || mode === \"asset\");\n const includeBaseAddress = isPendingSymmAsset || baseTransfer;\n const baseAssetWalletAddress = getWallet(pluginChain).address;\n\n const baseAddress = includeBaseAddress ? baseAssetAddr || baseAssetWalletAddress : \"\";\n const assetAddress =\n isSym || mode === \"asset\" ? assetAddr || getWallet(chain as SupportedChain).address : \"\";\n\n if (!(baseTransfer || assetTransfer)) {\n throw new SwapKitError(\"core_transaction_add_liquidity_invalid_params\");\n }\n if (includeBaseAddress && !baseAddress) {\n throw new SwapKitError(\"core_transaction_add_liquidity_base_address\");\n }\n\n const baseAssetTx =\n baseTransfer && baseAssetValue\n ? await wrapWithThrow(() => {\n return depositToPool({\n assetValue: baseAssetValue,\n memo: getMemoForDeposit({ chain, symbol, address: assetAddress }),\n });\n }, \"core_transaction_add_liquidity_base_error\")\n : undefined;\n\n const assetTx =\n assetTransfer && assetValue\n ? await wrapWithThrow(() => {\n return depositToPool({\n assetValue,\n memo: getMemoForDeposit({ chain, symbol, address: baseAddress }),\n });\n }, \"core_transaction_add_liquidity_asset_error\")\n : undefined;\n\n return { baseAssetTx, assetTx };\n }\n\n function savings({ assetValue, memo, percent, type }: SavingsParams) {\n const { chain, symbol } = assetValue;\n const isDeposit = type === \"add\";\n const memoString = isDeposit\n ? getMemoForSaverDeposit({ symbol, chain })\n : getMemoForSaverWithdraw({\n basisPoints: Math.min(10000, Math.round(percent * 100)),\n symbol,\n chain,\n });\n\n return depositToPool({\n memo: memo || memoString,\n assetValue: isDeposit ? assetValue : getMinAmountByChain(chain),\n });\n }\n\n function withdraw({ memo, assetValue, percent, from, to }: WithdrawParams) {\n const targetAsset =\n to === \"baseAsset\" && from !== \"baseAsset\"\n ? AssetValue.from({ chain: pluginChain })\n : (from === \"sym\" && to === \"sym\") || from === \"baseAsset\" || from === \"asset\"\n ? undefined\n : assetValue;\n\n const value = getMinAmountByChain(from === \"asset\" ? assetValue.chain : pluginChain);\n const memoString =\n memo ||\n getMemoForWithdraw({\n symbol: assetValue.symbol,\n chain: assetValue.chain,\n ticker: assetValue.ticker,\n basisPoints: Math.min(10000, Math.round(percent * 100)),\n targetAsset: targetAsset?.toString(),\n });\n\n return depositToPool({ assetValue: value, memo: memoString });\n }\n\n async function swap({\n feeOptionKey,\n route,\n }: SwapParams<typeof pluginType, QuoteResponseRoute>) {\n const { memo, expiration, targetAddress } = route;\n\n const assetValue = await AssetValue.from({\n asyncTokenLookup: true,\n asset: route.sellAsset,\n value: route.sellAmount,\n });\n\n if (!assetValue) {\n throw new SwapKitError(\"core_swap_asset_not_recognized\");\n }\n\n const isRecipientValidated = validateAddressType({\n address: route.destinationAddress,\n chain: AssetValue.from({ asset: route.buyAsset }).chain,\n });\n\n if (!isRecipientValidated) {\n throw new SwapKitError(\"core_transaction_invalid_recipient_address\");\n }\n\n const { address: recipient } = await getInboundDataByChain(assetValue.chain);\n\n return deposit({\n expiration: Number(expiration),\n assetValue,\n memo,\n feeOptionKey,\n router: targetAddress,\n recipient,\n });\n }\n\n return {\n addLiquidity,\n addLiquidityPart,\n approveAssetValue,\n createLiquidity,\n deposit,\n depositToPool,\n getInboundDataByChain,\n isAssetValueApproved,\n nodeAction,\n registerName,\n registerPreferredAsset,\n savings,\n swap,\n withdraw,\n };\n };\n}\n",
6
+ "import { Chain } from \"@swapkit/helpers\";\nimport type { CoreTxParams } from \"./types\";\n\nexport function validateAddressType({ chain, address }: { chain?: Chain; address?: string }) {\n if (!address) return false;\n\n switch (chain) {\n case Chain.Bitcoin:\n // filter out taproot addresses\n return !address.startsWith(\"bc1p\");\n default:\n return true;\n }\n}\n\nexport function prepareTxParams({\n assetValue,\n from,\n memo = \"\",\n ...restTxParams\n}: CoreTxParams & { from: string; router?: string }) {\n return { ...restTxParams, memo, from, assetValue };\n}\n"
7
+ ],
8
+ "mappings": "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",
9
+ "debugId": "D5EBD8AE1F18104964756E2164756E21",
10
+ "names": []
11
+ }
@@ -0,0 +1,3 @@
1
+ import{a as xx,b as Ux}from"../chunk-tvrdndbw.js";import{ApproveMode as A,AssetValue as B,Chain as Y,EVMChains as Xx,FeeOption as T,MemoType as c,ProviderName as w,SwapKitError as Q,createPlugin as m,getMemoForDeposit as v,getMemoForLeaveAndBond as Lx,getMemoForNamePreferredAssetRegister as kx,getMemoForNameRegister as qx,getMemoForSaverDeposit as zx,getMemoForSaverWithdraw as Hx,getMemoForUnbond as Jx,getMemoForWithdraw as Qx,getMinAmountByChain as b,wrapWithThrow as M}from"@swapkit/helpers";import{SwapKitApi as g}from"@swapkit/helpers/api";import{MayaArbitrumVaultAbi as Rx,MayaEthereumVaultAbi as Yx,TCAvalancheDepositABI as Zx,TCBaseDepositABI as $x,TCBscDepositABI as jx,TCEthereumVaultAbi as Gx}from"@swapkit/helpers/contracts";import{Chain as e}from"@swapkit/helpers";function K({chain:H,address:_}){if(!_)return!1;switch(H){case e.Bitcoin:return!_.startsWith("bc1p");default:return!0}}function C({assetValue:H,from:_,memo:J="",...N}){return{...N,memo:J,from:_,assetValue:H}}var Ox={[T.Average]:1.2,[T.Fast]:1.5,[T.Fastest]:2},_x={[Y.Avalanche]:Zx,[Y.Base]:$x,[Y.BinanceSmartChain]:jx,[Y.Ethereum]:Gx},Nx={[Y.Arbitrum]:Rx,[Y.Ethereum]:Yx},Px=m({name:"thorchain",methods:h(Y.THORChain),properties:{supportedSwapkitProviders:[w.THORCHAIN,w.THORCHAIN_STREAMING]}}),fx=m({name:"mayachain",methods:h(Y.Maya),properties:{supportedSwapkitProviders:[w.MAYACHAIN]}});function Ix(H){return async function _(J){if(H==="thorchain"&&J===Y.THORChain||H==="mayachain"&&J===Y.Maya)return{gas_rate:"0",router:"",address:"",halted:!1,chain:J};let Z=(await g.thornode.getInboundAddresses(H)).find((W)=>W.chain===J);if(!Z)throw new Q("core_inbound_data_not_found");if(Z?.halted)throw new Q("core_chain_halted");return Z}}function h(H){return function _({getWallet:J}){let N=H===Y.Maya?"mayachain":"thorchain",Z=Ix(N);async function W({assetValue:x,type:U="checkOnly"}){let k=(await Z(x.chain)).router,X=x.chain,q=Xx.includes(X);if(q&&x.isGasAsset||!q||x.isSynthetic)return Promise.resolve(U==="checkOnly"?!0:"approved");let z=J(X);if(!z)throw new Q("core_wallet_connection_not_found");let R=U==="checkOnly"?z.isApproved:z.approve;if(!(x.address&&z.address))throw new Q("core_approve_asset_address_or_from_not_found");return R({amount:x.getBaseValue("bigint"),assetAddress:x.address,from:z.address,spenderAddress:k})}async function D({assetValue:x,recipient:U,router:k,...X}){let q=N==="thorchain"?_x:Nx,{chain:L,symbol:z,ticker:R}=x,P=J(L);if(!P)throw new Q("core_wallet_connection_not_found");let{address:f}=P;if(!K({address:f,chain:L}))throw new Q("core_transaction_invalid_sender_address");let O=C({from:f,assetValue:x,recipient:U,router:k,...X});try{let $=q?.[L];if(!$){let I=J(L);return H===L&&U===""?I.deposit(O):I.transfer(O)}let{getChecksumAddressFromAsset:j}=await import("@swapkit/toolboxes/evm");return J(L).call({abi:$,contractAddress:k||(await Z(L)).router,funcName:"depositWithExpiry",funcParams:[U,j({chain:L,symbol:z,ticker:R},L),x.getBaseValue("string"),O.memo,X.expiration||Number.parseInt(`${(Date.now()+900000)/1000}`)],txOverrides:{from:O.from,value:x.isGasAsset?x.getBaseValue("bigint"):void 0}})}catch($){let j=typeof $==="string"?$.toLowerCase():$?.message.toLowerCase(),E=j?.includes("insufficient funds"),I=j?.includes("gas"),F=j?.includes("server"),a=j?.includes("user rejected");throw new Q(E?"core_transaction_deposit_insufficient_funds_error":I?"core_transaction_deposit_gas_error":F?"core_transaction_deposit_server_error":a?"core_transaction_user_rejected":"core_transaction_deposit_error",$)}}async function y({memo:x,assetValue:U}){let k=await g.thornode.getMimirInfo(N);if(k.HALTCHAINGLOBAL>=1||k.HALTTHORCHAIN>=1)throw new Q("thorchain_chain_halted");return D({assetValue:U,recipient:"",memo:x})}async function G({assetValue:x,memo:U,feeOptionKey:k=T.Fast}){let{gas_rate:X="0",router:q,address:L}=await Z(x.chain);return D({assetValue:x,recipient:L,memo:U,router:q,feeRate:Number.parseInt(X)*Ox[k]})}function V(x){return W({...x,type:A.Approve})}function p(x){return W({...x,type:A.CheckOnly})}function n({assetValue:x,...U}){return y({assetValue:x,memo:qx(U)})}function d({assetValue:x,payoutAddress:U,name:k,ownerAddress:X}){let q=U||J(x.chain)?.address;if(!q)throw new Q("thorchain_preferred_asset_payout_required");return y({assetValue:B.from({chain:H}),memo:kx({asset:x.toString(),chain:x.chain,name:k,owner:X,payout:q})})}function u({type:x,assetValue:U,address:k}){let X=x===c.UNBOND?Jx({address:k,unbondAmount:U.getBaseValue("number")}):Lx({type:x,address:k}),q=x===c.BOND?U:b(H);return y({memo:X,assetValue:q})}async function r({baseAssetValue:x,assetValue:U}){if(x.lte(0)||U.lte(0))throw new Q("core_transaction_create_liquidity_invalid_params");let k=J(U.chain).address,X=J(H).address,q=await M(()=>{return G({assetValue:x,memo:v({...U,address:k})})},"core_transaction_create_liquidity_base_error"),L=await M(()=>{return G({assetValue:U,memo:v({...U,address:X})})},"core_transaction_create_liquidity_asset_error");return{baseAssetTx:q,assetTx:L}}function o({assetValue:x,poolAddress:U,address:k,symmetric:X}){if(X&&!k)throw new Q("core_transaction_add_liquidity_invalid_params");let q=v({chain:U.split(".")[0],symbol:U.split(".")[1],address:X?k:""});return G({assetValue:x,memo:q})}async function l({baseAssetValue:x,assetValue:U,baseAssetAddr:k,assetAddr:X,isPendingSymmAsset:q,mode:L="sym"}){let{chain:z,symbol:R}=U,P=L==="sym",f=x?.gt(0)&&(P||L==="baseAsset"),S=U?.gt(0)&&(P||L==="asset"),O=q||f,$=J(H).address,j=O?k||$:"",E=P||L==="asset"?X||J(z).address:"";if(!(f||S))throw new Q("core_transaction_add_liquidity_invalid_params");if(O&&!j)throw new Q("core_transaction_add_liquidity_base_address");let I=f&&x?await M(()=>{return G({assetValue:x,memo:v({chain:z,symbol:R,address:E})})},"core_transaction_add_liquidity_base_error"):void 0,F=S&&U?await M(()=>{return G({assetValue:U,memo:v({chain:z,symbol:R,address:j})})},"core_transaction_add_liquidity_asset_error"):void 0;return{baseAssetTx:I,assetTx:F}}function i({assetValue:x,memo:U,percent:k,type:X}){let{chain:q,symbol:L}=x,z=X==="add",R=z?zx({symbol:L,chain:q}):Hx({basisPoints:Math.min(1e4,Math.round(k*100)),symbol:L,chain:q});return G({memo:U||R,assetValue:z?x:b(q)})}function t({memo:x,assetValue:U,percent:k,from:X,to:q}){let L=q==="baseAsset"&&X!=="baseAsset"?B.from({chain:H}):X==="sym"&&q==="sym"||X==="baseAsset"||X==="asset"?void 0:U,z=b(X==="asset"?U.chain:H),R=x||Qx({symbol:U.symbol,chain:U.chain,ticker:U.ticker,basisPoints:Math.min(1e4,Math.round(k*100)),targetAsset:L?.toString()});return G({assetValue:z,memo:R})}async function s({feeOptionKey:x,route:U}){let{memo:k,expiration:X,targetAddress:q}=U,L=await B.from({asyncTokenLookup:!0,asset:U.sellAsset,value:U.sellAmount});if(!L)throw new Q("core_swap_asset_not_recognized");if(!K({address:U.destinationAddress,chain:B.from({asset:U.buyAsset}).chain}))throw new Q("core_transaction_invalid_recipient_address");let{address:R}=await Z(L.chain);return D({expiration:Number(X),assetValue:L,memo:k,feeOptionKey:x,router:q,recipient:R})}return{addLiquidity:l,addLiquidityPart:o,approveAssetValue:V,createLiquidity:r,deposit:D,depositToPool:G,getInboundDataByChain:Z,isAssetValueApproved:p,nodeAction:u,registerName:n,registerPreferredAsset:d,savings:i,swap:s,withdraw:t}}}export{K as validateAddressType,Px as ThorchainPlugin,fx as MayachainPlugin};
2
+
3
+ //# debugId=864D82FA30B3205464756E2164756E21