@swapkit/plugins 4.0.0-beta.36 → 4.0.0-beta.38

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.
@@ -1,4 +1,4 @@
1
- var _={};T(_,{NearPlugin:()=>U});module.exports=b(_);var x=require("@swapkit/helpers"),D=require("@swapkit/helpers/api");var X=require("near-api-js/lib/utils/format"),V=2,P=64;function Z(Q){if(Q.length<V||Q.length>P)return!1;return/^[a-z0-9]+(-[a-z0-9]+)*$/.test(Q)}function y(Q){let B=Q.length,q;if(B<=2)q="50";else if(B<=3)q="20";else if(B<=4)q="5";else if(B<=5)q="1";else q="0.1";return X.parseNearAmount(q)||"0"}var U=x.createPlugin({name:"near",properties:{supportedSwapkitProviders:[x.ProviderName.NEAR]},methods:({getWallet:Q})=>({async swap({route:B,recipient:q}){let{meta:J}=B;if(!J?.nearSwapInfo)throw new x.SwapKitError("core_swap_invalid_params",{message:"Missing NEAR swap metadata"});let F=J.nearSwapInfo,Y=await Q(F.srcChain),j={...F,toAddress:q||await Y.getAddress()},$=await D.SwapKitApi.getNearDepositChannel?.(j);if(!$)throw new x.SwapKitError("core_plugin_not_found",{info:"NEAR deposit channel API not implemented"});let k=$;if(!k.isSuccess)throw new x.SwapKitError("core_swap_invalid_params",{message:"Failed to create NEAR deposit channel"});let{channelId:G,depositAddress:H}=k.response,L=x.AssetValue.from({chain:F.srcChain,symbol:F.srcToken,value:F.amount,decimal:B.srcToken.decimals});return await Y.transfer({assetValue:L,recipient:H,memo:G})},nearNames:{async resolve(B){try{let q=B.toLowerCase().replace(/\.near$/,"");if(!Z(q))throw new x.SwapKitError("plugin_near_invalid_name");let J=Q(x.Chain.Near);if(!J)throw new x.SwapKitError("plugin_near_no_connection");let F=await J.provider.query({request_type:"call_function",finality:"final",account_id:"near",method_name:"resolve",args_base64:Buffer.from(JSON.stringify({name:q})).toString("base64")});return JSON.parse(Buffer.from(F.result).toString())?.owner||null}catch{return null}},async isAvailable(B){return await this.resolve(B)===null},async getInfo(B){try{let q=B.toLowerCase().replace(/\.near$/,"");if(!Z(q))throw new x.SwapKitError("plugin_near_invalid_name");let J=Q(x.Chain.Near);if(!J)throw new x.SwapKitError("plugin_near_no_connection");let F=await J.provider.query({request_type:"call_function",finality:"final",account_id:"near",method_name:"get_info",args_base64:Buffer.from(JSON.stringify({name:q})).toString("base64")});return JSON.parse(Buffer.from(F.result).toString())||null}catch{return null}},async lookupNames(B){try{let q=Q(x.Chain.Near);if(!q)throw new x.SwapKitError("plugin_near_no_connection");let J=await q.provider.query({request_type:"call_function",finality:"final",account_id:"near",method_name:"get_names_by_owner",args_base64:Buffer.from(JSON.stringify({account_id:B})).toString("base64")}),F=JSON.parse(Buffer.from(J.result).toString());return Array.isArray(F)?F.map((Y)=>`${Y}.near`):[]}catch{return[]}},async register(B){let{name:q,publicKey:J}=B,F=q.toLowerCase().replace(/\.near$/,"");if(!Z(F))throw new x.SwapKitError("plugin_near_invalid_name");let Y=Q(x.Chain.Near),j=J||await Y.getPublicKey(),$=y(F);return Y.callFunction({contractId:"near",methodName:"create_account",args:{new_account_id:`${F}.near`,new_public_key:j},deposit:$})},transfer(B,q){let J=B.toLowerCase().replace(/\.near$/,"");if(!Z(J))throw new x.SwapKitError("plugin_near_invalid_name");return Q(x.Chain.Near).callFunction({contractId:"near",methodName:"transfer",args:{name:J,new_owner:q},deposit:"1"})}}})});
1
+ var S={};g(S,{NearPlugin:()=>y});module.exports=d(S);var r=require("@swapkit/helpers"),w=require("@swapkit/helpers/api");var u=require("near-api-js/lib/utils/format"),m=2,f=64;function i(o){if(o.length<m||o.length>f)return!1;return/^[a-z0-9]+(-[a-z0-9]+)*$/.test(o)}function p(o){let t=o.length,e;if(t<=2)e="50";else if(t<=3)e="20";else if(t<=4)e="5";else if(t<=5)e="1";else e="0.1";return u.parseNearAmount(e)||"0"}var y=r.createPlugin({name:"near",properties:{supportedSwapkitProviders:[r.ProviderName.NEAR]},methods:({getWallet:o})=>({async swap(t){let{route:{buyAsset:e,sellAsset:n,sellAmount:a,meta:{near:s}}}=t;if(!(n&&e&&s?.sellAsset))throw new r.SwapKitError("core_swap_asset_not_recognized");let l=await r.AssetValue.from({asyncTokenLookup:!0,asset:n,value:a}),c=o(l.chain);if(!c)throw new r.SwapKitError("core_wallet_connection_not_found");let{depositAddress:_}=await w.SwapKitApi.getNearDepositChannel(s);return await c.transfer({assetValue:l,recipient:_,isProgramDerivedAddress:!0})},nearNames:{async resolve(t){try{let e=t.toLowerCase().replace(/\.near$/,"");if(!i(e))throw new r.SwapKitError("plugin_near_invalid_name");let n=o(r.Chain.Near);if(!n)throw new r.SwapKitError("plugin_near_no_connection");let a=await n.provider.query({request_type:"call_function",finality:"final",account_id:"near",method_name:"resolve",args_base64:Buffer.from(JSON.stringify({name:e})).toString("base64")});return JSON.parse(Buffer.from(a.result).toString())?.owner||null}catch{return null}},async isAvailable(t){return await this.resolve(t)===null},async getInfo(t){try{let e=t.toLowerCase().replace(/\.near$/,"");if(!i(e))throw new r.SwapKitError("plugin_near_invalid_name");let n=o(r.Chain.Near);if(!n)throw new r.SwapKitError("plugin_near_no_connection");let a=await n.provider.query({request_type:"call_function",finality:"final",account_id:"near",method_name:"get_info",args_base64:Buffer.from(JSON.stringify({name:e})).toString("base64")});return JSON.parse(Buffer.from(a.result).toString())||null}catch{return null}},async lookupNames(t){try{let e=o(r.Chain.Near);if(!e)throw new r.SwapKitError("plugin_near_no_connection");let n=await e.provider.query({request_type:"call_function",finality:"final",account_id:"near",method_name:"get_names_by_owner",args_base64:Buffer.from(JSON.stringify({account_id:t})).toString("base64")}),a=JSON.parse(Buffer.from(n.result).toString());return Array.isArray(a)?a.map((s)=>`${s}.near`):[]}catch{return[]}},async register(t){let{name:e,publicKey:n}=t,a=e.toLowerCase().replace(/\.near$/,"");if(!i(a))throw new r.SwapKitError("plugin_near_invalid_name");let s=o(r.Chain.Near),l=n||await s.getPublicKey(),c=p(a);return s.callFunction({contractId:"near",methodName:"create_account",args:{new_account_id:`${a}.near`,new_public_key:l},deposit:c})},transfer(t,e){let n=t.toLowerCase().replace(/\.near$/,"");if(!i(n))throw new r.SwapKitError("plugin_near_invalid_name");return o(r.Chain.Near).callFunction({contractId:"near",methodName:"transfer",args:{name:n,new_owner:e},deposit:"1"})}}})});
2
2
 
3
- //# debugId=5DB17A38AECAA7AA64756E2164756E21
3
+ //# debugId=425E65333AF45BC164756E2164756E21
4
4
  //# sourceMappingURL=index.cjs.map
@@ -2,10 +2,10 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/near/plugin.ts", "../src/near/nearNames.ts"],
4
4
  "sourcesContent": [
5
- "import {\n AssetValue,\n Chain,\n ProviderName,\n SwapKitError,\n type SwapParams,\n createPlugin,\n} from \"@swapkit/helpers\";\nimport { SwapKitApi } from \"@swapkit/helpers/api\";\nimport type { NearWallet } from \"@swapkit/toolboxes/near\";\nimport { calculateNearNameCost, validateNearName } from \"./nearNames\";\nimport type {\n NearDepositChannelParams,\n NearNameRegistrationParams,\n NearSwapResponse,\n NearSwapRoute,\n} from \"./types\";\n\nexport const NearPlugin = createPlugin({\n name: \"near\",\n properties: {\n supportedSwapkitProviders: [ProviderName.NEAR],\n },\n methods: ({ getWallet }) => ({\n async swap({\n route,\n recipient,\n }: SwapParams<{\n route: NearSwapRoute & {\n meta?: {\n nearSwapInfo?: NearDepositChannelParams;\n };\n };\n }>) {\n const { meta } = route as any;\n if (!meta?.nearSwapInfo) {\n throw new SwapKitError(\"core_swap_invalid_params\", {\n message: \"Missing NEAR swap metadata\",\n });\n }\n\n const nearSwapInfo = meta.nearSwapInfo;\n const srcWallet = await getWallet(nearSwapInfo.srcChain);\n\n const nearDepositChannelParams: NearDepositChannelParams = {\n ...nearSwapInfo,\n toAddress: recipient || (await srcWallet.getAddress()),\n };\n\n // TODO: UPSTREAM getNearDepositChannel in SwapKitApi from v3 branch\n const response = await (SwapKitApi as any).getNearDepositChannel?.(nearDepositChannelParams);\n if (!response) {\n throw new SwapKitError(\"core_plugin_not_found\", {\n info: \"NEAR deposit channel API not implemented\",\n });\n }\n const nearResponse = response as NearSwapResponse;\n\n if (!nearResponse.isSuccess) {\n throw new SwapKitError(\"core_swap_invalid_params\", {\n message: \"Failed to create NEAR deposit channel\",\n });\n }\n\n const { channelId, depositAddress } = nearResponse.response;\n\n const assetValue = AssetValue.from({\n chain: nearSwapInfo.srcChain,\n symbol: nearSwapInfo.srcToken,\n value: nearSwapInfo.amount,\n decimal: (route as any).srcToken.decimals,\n });\n\n const txHash = await srcWallet.transfer({\n assetValue,\n recipient: depositAddress,\n memo: channelId,\n });\n\n return txHash;\n },\n\n // NEAR Names functionality\n nearNames: {\n async resolve(name: string) {\n try {\n const normalizedName = name.toLowerCase().replace(/\\.near$/, \"\");\n\n if (!validateNearName(normalizedName)) {\n throw new SwapKitError(\"plugin_near_invalid_name\");\n }\n\n const wallet = getWallet(Chain.Near);\n\n if (!wallet) {\n throw new SwapKitError(\"plugin_near_no_connection\");\n }\n\n const result = await wallet.provider.query({\n request_type: \"call_function\",\n finality: \"final\",\n account_id: \"near\",\n method_name: \"resolve\",\n args_base64: Buffer.from(JSON.stringify({ name: normalizedName })).toString(\"base64\"),\n });\n\n const response = JSON.parse(Buffer.from((result as any).result).toString());\n return response?.owner || null;\n } catch {\n return null;\n }\n },\n\n async isAvailable(name: string) {\n const owner = await this.resolve(name);\n return owner === null;\n },\n\n async getInfo(name: string) {\n try {\n const normalizedName = name.toLowerCase().replace(/\\.near$/, \"\");\n\n if (!validateNearName(normalizedName)) {\n throw new SwapKitError(\"plugin_near_invalid_name\");\n }\n\n const wallet = getWallet(Chain.Near);\n\n if (!wallet) {\n throw new SwapKitError(\"plugin_near_no_connection\");\n }\n\n const result = await wallet.provider.query({\n request_type: \"call_function\",\n finality: \"final\",\n account_id: \"near\",\n method_name: \"get_info\",\n args_base64: Buffer.from(JSON.stringify({ name: normalizedName })).toString(\"base64\"),\n });\n\n const response = JSON.parse(Buffer.from((result as any).result).toString());\n return response || null;\n } catch {\n return null;\n }\n },\n\n async lookupNames(accountId: string) {\n try {\n const wallet = getWallet(Chain.Near);\n\n if (!wallet) {\n throw new SwapKitError(\"plugin_near_no_connection\");\n }\n\n const result = await wallet.provider.query({\n request_type: \"call_function\",\n finality: \"final\",\n account_id: \"near\",\n method_name: \"get_names_by_owner\",\n args_base64: Buffer.from(JSON.stringify({ account_id: accountId })).toString(\"base64\"),\n });\n\n const response = JSON.parse(Buffer.from((result as any).result).toString());\n return Array.isArray(response) ? response.map((n) => `${n}.near`) : [];\n } catch {\n return [];\n }\n },\n\n async register(params: NearNameRegistrationParams) {\n const { name, publicKey: publicKeyOverwrite } = params;\n const normalizedName = name.toLowerCase().replace(/\\.near$/, \"\");\n\n if (!validateNearName(normalizedName)) {\n throw new SwapKitError(\"plugin_near_invalid_name\");\n }\n\n const wallet = getWallet(Chain.Near) as NearWallet;\n\n const newPublicKey = publicKeyOverwrite || (await wallet.getPublicKey());\n\n const cost = calculateNearNameCost(normalizedName);\n\n return wallet.callFunction({\n contractId: \"near\",\n methodName: \"create_account\",\n args: {\n new_account_id: `${normalizedName}.near`,\n new_public_key: newPublicKey,\n },\n deposit: cost,\n });\n },\n\n transfer(name: string, newOwner: string) {\n const normalizedName = name.toLowerCase().replace(/\\.near$/, \"\");\n\n if (!validateNearName(normalizedName)) {\n throw new SwapKitError(\"plugin_near_invalid_name\");\n }\n\n const wallet = getWallet(Chain.Near) as NearWallet;\n\n return wallet.callFunction({\n contractId: \"near\",\n methodName: \"transfer\",\n args: {\n name: normalizedName,\n new_owner: newOwner,\n },\n deposit: \"1\",\n });\n },\n },\n }),\n});\n",
5
+ "import {\n AssetValue,\n Chain,\n type CryptoChain,\n ProviderName,\n SwapKitError,\n type SwapParams,\n createPlugin,\n} from \"@swapkit/helpers\";\nimport { type QuoteResponseRoute, SwapKitApi } from \"@swapkit/helpers/api\";\nimport type { NearWallet } from \"@swapkit/toolboxes/near\";\nimport { calculateNearNameCost, validateNearName } from \"./nearNames\";\nimport type { NearNameRegistrationParams } from \"./types\";\n\nexport const NearPlugin = createPlugin({\n name: \"near\",\n properties: {\n supportedSwapkitProviders: [ProviderName.NEAR],\n },\n methods: ({ getWallet }) => ({\n async swap(swapParams: SwapParams<\"near\", QuoteResponseRoute>) {\n const {\n route: {\n buyAsset: buyAssetString,\n sellAsset: sellAssetString,\n sellAmount,\n meta: { near },\n },\n } = swapParams;\n\n if (!(sellAssetString && buyAssetString && near?.sellAsset)) {\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 Exclude<CryptoChain, Chain.Radix>);\n\n if (!wallet) {\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n }\n\n const { depositAddress } = await SwapKitApi.getNearDepositChannel(near);\n\n const tx = await wallet.transfer({\n assetValue: sellAsset,\n recipient: depositAddress,\n isProgramDerivedAddress: true,\n });\n\n return tx as string;\n },\n\n // NEAR Names functionality\n nearNames: {\n async resolve(name: string) {\n try {\n const normalizedName = name.toLowerCase().replace(/\\.near$/, \"\");\n\n if (!validateNearName(normalizedName)) {\n throw new SwapKitError(\"plugin_near_invalid_name\");\n }\n\n const wallet = getWallet(Chain.Near);\n\n if (!wallet) {\n throw new SwapKitError(\"plugin_near_no_connection\");\n }\n\n const result = await wallet.provider.query({\n request_type: \"call_function\",\n finality: \"final\",\n account_id: \"near\",\n method_name: \"resolve\",\n args_base64: Buffer.from(JSON.stringify({ name: normalizedName })).toString(\"base64\"),\n });\n\n const response = JSON.parse(Buffer.from((result as any).result).toString());\n return response?.owner || null;\n } catch {\n return null;\n }\n },\n\n async isAvailable(name: string) {\n const owner = await this.resolve(name);\n return owner === null;\n },\n\n async getInfo(name: string) {\n try {\n const normalizedName = name.toLowerCase().replace(/\\.near$/, \"\");\n\n if (!validateNearName(normalizedName)) {\n throw new SwapKitError(\"plugin_near_invalid_name\");\n }\n\n const wallet = getWallet(Chain.Near);\n\n if (!wallet) {\n throw new SwapKitError(\"plugin_near_no_connection\");\n }\n\n const result = await wallet.provider.query({\n request_type: \"call_function\",\n finality: \"final\",\n account_id: \"near\",\n method_name: \"get_info\",\n args_base64: Buffer.from(JSON.stringify({ name: normalizedName })).toString(\"base64\"),\n });\n\n const response = JSON.parse(Buffer.from((result as any).result).toString());\n return response || null;\n } catch {\n return null;\n }\n },\n\n async lookupNames(accountId: string) {\n try {\n const wallet = getWallet(Chain.Near);\n\n if (!wallet) {\n throw new SwapKitError(\"plugin_near_no_connection\");\n }\n\n const result = await wallet.provider.query({\n request_type: \"call_function\",\n finality: \"final\",\n account_id: \"near\",\n method_name: \"get_names_by_owner\",\n args_base64: Buffer.from(JSON.stringify({ account_id: accountId })).toString(\"base64\"),\n });\n\n const response = JSON.parse(Buffer.from((result as any).result).toString());\n return Array.isArray(response) ? response.map((n) => `${n}.near`) : [];\n } catch {\n return [];\n }\n },\n\n async register(params: NearNameRegistrationParams) {\n const { name, publicKey: publicKeyOverwrite } = params;\n const normalizedName = name.toLowerCase().replace(/\\.near$/, \"\");\n\n if (!validateNearName(normalizedName)) {\n throw new SwapKitError(\"plugin_near_invalid_name\");\n }\n\n const wallet = getWallet(Chain.Near) as NearWallet;\n\n const newPublicKey = publicKeyOverwrite || (await wallet.getPublicKey());\n\n const cost = calculateNearNameCost(normalizedName);\n\n return wallet.callFunction({\n contractId: \"near\",\n methodName: \"create_account\",\n args: {\n new_account_id: `${normalizedName}.near`,\n new_public_key: newPublicKey,\n },\n deposit: cost,\n });\n },\n\n transfer(name: string, newOwner: string) {\n const normalizedName = name.toLowerCase().replace(/\\.near$/, \"\");\n\n if (!validateNearName(normalizedName)) {\n throw new SwapKitError(\"plugin_near_invalid_name\");\n }\n\n const wallet = getWallet(Chain.Near) as NearWallet;\n\n return wallet.callFunction({\n contractId: \"near\",\n methodName: \"transfer\",\n args: {\n name: normalizedName,\n new_owner: newOwner,\n },\n deposit: \"1\",\n });\n },\n },\n }),\n});\n",
6
6
  "import { parseNearAmount } from \"near-api-js/lib/utils/format\";\n\nconst MINIMUM_NAME_LENGTH = 2;\nconst MAXIMUM_NAME_LENGTH = 64;\n\nexport function validateNearName(name: string): boolean {\n if (name.length < MINIMUM_NAME_LENGTH || name.length > MAXIMUM_NAME_LENGTH) {\n return false;\n }\n\n // Only lowercase letters, numbers, and hyphens\n // Cannot start or end with hyphen\n // No consecutive hyphens\n return /^[a-z0-9]+(-[a-z0-9]+)*$/.test(name);\n}\n\nexport function calculateNearNameCost(name: string): string {\n // Pricing based on name length\n // These are suggested prices, the actual minimum is ~0.00182 NEAR\n const length = name.length;\n\n let costInNear: string;\n if (length <= 2) {\n costInNear = \"50\"; // 50 NEAR for 2-char names\n } else if (length <= 3) {\n costInNear = \"20\"; // 20 NEAR for 3-char names\n } else if (length <= 4) {\n costInNear = \"5\"; // 5 NEAR for 4-char names\n } else if (length <= 5) {\n costInNear = \"1\"; // 1 NEAR for 5-char names\n } else {\n costInNear = \"0.1\"; // 0.1 NEAR for 6+ characters\n }\n\n // Convert NEAR to yoctoNEAR\n return parseNearAmount(costInNear) || \"0\";\n}\n"
7
7
  ],
8
- "mappings": "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",
9
- "debugId": "5DB17A38AECAA7AA64756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "425E65333AF45BC164756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -1,4 +1,4 @@
1
- import"../chunk-wfktpptf.js";import{AssetValue as U,Chain as $,ProviderName as b,SwapKitError as Q,createPlugin as T}from"@swapkit/helpers";import{SwapKitApi as _}from"@swapkit/helpers/api";import{parseNearAmount as L}from"near-api-js/lib/utils/format";var V=2,P=64;function Z(J){if(J.length<V||J.length>P)return!1;return/^[a-z0-9]+(-[a-z0-9]+)*$/.test(J)}function y(J){let q=J.length,x;if(q<=2)x="50";else if(q<=3)x="20";else if(q<=4)x="5";else if(q<=5)x="1";else x="0.1";return L(x)||"0"}var R=T({name:"near",properties:{supportedSwapkitProviders:[b.NEAR]},methods:({getWallet:J})=>({async swap({route:q,recipient:x}){let{meta:F}=q;if(!F?.nearSwapInfo)throw new Q("core_swap_invalid_params",{message:"Missing NEAR swap metadata"});let B=F.nearSwapInfo,Y=await J(B.srcChain),k={...B,toAddress:x||await Y.getAddress()},j=await _.getNearDepositChannel?.(k);if(!j)throw new Q("core_plugin_not_found",{info:"NEAR deposit channel API not implemented"});let X=j;if(!X.isSuccess)throw new Q("core_swap_invalid_params",{message:"Failed to create NEAR deposit channel"});let{channelId:D,depositAddress:G}=X.response,H=U.from({chain:B.srcChain,symbol:B.srcToken,value:B.amount,decimal:q.srcToken.decimals});return await Y.transfer({assetValue:H,recipient:G,memo:D})},nearNames:{async resolve(q){try{let x=q.toLowerCase().replace(/\.near$/,"");if(!Z(x))throw new Q("plugin_near_invalid_name");let F=J($.Near);if(!F)throw new Q("plugin_near_no_connection");let B=await F.provider.query({request_type:"call_function",finality:"final",account_id:"near",method_name:"resolve",args_base64:Buffer.from(JSON.stringify({name:x})).toString("base64")});return JSON.parse(Buffer.from(B.result).toString())?.owner||null}catch{return null}},async isAvailable(q){return await this.resolve(q)===null},async getInfo(q){try{let x=q.toLowerCase().replace(/\.near$/,"");if(!Z(x))throw new Q("plugin_near_invalid_name");let F=J($.Near);if(!F)throw new Q("plugin_near_no_connection");let B=await F.provider.query({request_type:"call_function",finality:"final",account_id:"near",method_name:"get_info",args_base64:Buffer.from(JSON.stringify({name:x})).toString("base64")});return JSON.parse(Buffer.from(B.result).toString())||null}catch{return null}},async lookupNames(q){try{let x=J($.Near);if(!x)throw new Q("plugin_near_no_connection");let F=await x.provider.query({request_type:"call_function",finality:"final",account_id:"near",method_name:"get_names_by_owner",args_base64:Buffer.from(JSON.stringify({account_id:q})).toString("base64")}),B=JSON.parse(Buffer.from(F.result).toString());return Array.isArray(B)?B.map((Y)=>`${Y}.near`):[]}catch{return[]}},async register(q){let{name:x,publicKey:F}=q,B=x.toLowerCase().replace(/\.near$/,"");if(!Z(B))throw new Q("plugin_near_invalid_name");let Y=J($.Near),k=F||await Y.getPublicKey(),j=y(B);return Y.callFunction({contractId:"near",methodName:"create_account",args:{new_account_id:`${B}.near`,new_public_key:k},deposit:j})},transfer(q,x){let F=q.toLowerCase().replace(/\.near$/,"");if(!Z(F))throw new Q("plugin_near_invalid_name");return J($.Near).callFunction({contractId:"near",methodName:"transfer",args:{name:F,new_owner:x},deposit:"1"})}}})});export{R as NearPlugin};
1
+ import"../chunk-wfktpptf.js";import{AssetValue as y,Chain as l,ProviderName as d,SwapKitError as s,createPlugin as g}from"@swapkit/helpers";import{SwapKitApi as S}from"@swapkit/helpers/api";import{parseNearAmount as _}from"near-api-js/lib/utils/format";var m=2,f=64;function i(a){if(a.length<m||a.length>f)return!1;return/^[a-z0-9]+(-[a-z0-9]+)*$/.test(a)}function p(a){let r=a.length,e;if(r<=2)e="50";else if(r<=3)e="20";else if(r<=4)e="5";else if(r<=5)e="1";else e="0.1";return _(e)||"0"}var C=g({name:"near",properties:{supportedSwapkitProviders:[d.NEAR]},methods:({getWallet:a})=>({async swap(r){let{route:{buyAsset:e,sellAsset:t,sellAmount:n,meta:{near:o}}}=r;if(!(t&&e&&o?.sellAsset))throw new s("core_swap_asset_not_recognized");let c=await y.from({asyncTokenLookup:!0,asset:t,value:n}),u=a(c.chain);if(!u)throw new s("core_wallet_connection_not_found");let{depositAddress:w}=await S.getNearDepositChannel(o);return await u.transfer({assetValue:c,recipient:w,isProgramDerivedAddress:!0})},nearNames:{async resolve(r){try{let e=r.toLowerCase().replace(/\.near$/,"");if(!i(e))throw new s("plugin_near_invalid_name");let t=a(l.Near);if(!t)throw new s("plugin_near_no_connection");let n=await t.provider.query({request_type:"call_function",finality:"final",account_id:"near",method_name:"resolve",args_base64:Buffer.from(JSON.stringify({name:e})).toString("base64")});return JSON.parse(Buffer.from(n.result).toString())?.owner||null}catch{return null}},async isAvailable(r){return await this.resolve(r)===null},async getInfo(r){try{let e=r.toLowerCase().replace(/\.near$/,"");if(!i(e))throw new s("plugin_near_invalid_name");let t=a(l.Near);if(!t)throw new s("plugin_near_no_connection");let n=await t.provider.query({request_type:"call_function",finality:"final",account_id:"near",method_name:"get_info",args_base64:Buffer.from(JSON.stringify({name:e})).toString("base64")});return JSON.parse(Buffer.from(n.result).toString())||null}catch{return null}},async lookupNames(r){try{let e=a(l.Near);if(!e)throw new s("plugin_near_no_connection");let t=await e.provider.query({request_type:"call_function",finality:"final",account_id:"near",method_name:"get_names_by_owner",args_base64:Buffer.from(JSON.stringify({account_id:r})).toString("base64")}),n=JSON.parse(Buffer.from(t.result).toString());return Array.isArray(n)?n.map((o)=>`${o}.near`):[]}catch{return[]}},async register(r){let{name:e,publicKey:t}=r,n=e.toLowerCase().replace(/\.near$/,"");if(!i(n))throw new s("plugin_near_invalid_name");let o=a(l.Near),c=t||await o.getPublicKey(),u=p(n);return o.callFunction({contractId:"near",methodName:"create_account",args:{new_account_id:`${n}.near`,new_public_key:c},deposit:u})},transfer(r,e){let t=r.toLowerCase().replace(/\.near$/,"");if(!i(t))throw new s("plugin_near_invalid_name");return a(l.Near).callFunction({contractId:"near",methodName:"transfer",args:{name:t,new_owner:e},deposit:"1"})}}})});export{C as NearPlugin};
2
2
 
3
- //# debugId=D977A83716DD691F64756E2164756E21
3
+ //# debugId=21F9A07322F2947864756E2164756E21
4
4
  //# sourceMappingURL=index.js.map
@@ -2,10 +2,10 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/near/plugin.ts", "../src/near/nearNames.ts"],
4
4
  "sourcesContent": [
5
- "import {\n AssetValue,\n Chain,\n ProviderName,\n SwapKitError,\n type SwapParams,\n createPlugin,\n} from \"@swapkit/helpers\";\nimport { SwapKitApi } from \"@swapkit/helpers/api\";\nimport type { NearWallet } from \"@swapkit/toolboxes/near\";\nimport { calculateNearNameCost, validateNearName } from \"./nearNames\";\nimport type {\n NearDepositChannelParams,\n NearNameRegistrationParams,\n NearSwapResponse,\n NearSwapRoute,\n} from \"./types\";\n\nexport const NearPlugin = createPlugin({\n name: \"near\",\n properties: {\n supportedSwapkitProviders: [ProviderName.NEAR],\n },\n methods: ({ getWallet }) => ({\n async swap({\n route,\n recipient,\n }: SwapParams<{\n route: NearSwapRoute & {\n meta?: {\n nearSwapInfo?: NearDepositChannelParams;\n };\n };\n }>) {\n const { meta } = route as any;\n if (!meta?.nearSwapInfo) {\n throw new SwapKitError(\"core_swap_invalid_params\", {\n message: \"Missing NEAR swap metadata\",\n });\n }\n\n const nearSwapInfo = meta.nearSwapInfo;\n const srcWallet = await getWallet(nearSwapInfo.srcChain);\n\n const nearDepositChannelParams: NearDepositChannelParams = {\n ...nearSwapInfo,\n toAddress: recipient || (await srcWallet.getAddress()),\n };\n\n // TODO: UPSTREAM getNearDepositChannel in SwapKitApi from v3 branch\n const response = await (SwapKitApi as any).getNearDepositChannel?.(nearDepositChannelParams);\n if (!response) {\n throw new SwapKitError(\"core_plugin_not_found\", {\n info: \"NEAR deposit channel API not implemented\",\n });\n }\n const nearResponse = response as NearSwapResponse;\n\n if (!nearResponse.isSuccess) {\n throw new SwapKitError(\"core_swap_invalid_params\", {\n message: \"Failed to create NEAR deposit channel\",\n });\n }\n\n const { channelId, depositAddress } = nearResponse.response;\n\n const assetValue = AssetValue.from({\n chain: nearSwapInfo.srcChain,\n symbol: nearSwapInfo.srcToken,\n value: nearSwapInfo.amount,\n decimal: (route as any).srcToken.decimals,\n });\n\n const txHash = await srcWallet.transfer({\n assetValue,\n recipient: depositAddress,\n memo: channelId,\n });\n\n return txHash;\n },\n\n // NEAR Names functionality\n nearNames: {\n async resolve(name: string) {\n try {\n const normalizedName = name.toLowerCase().replace(/\\.near$/, \"\");\n\n if (!validateNearName(normalizedName)) {\n throw new SwapKitError(\"plugin_near_invalid_name\");\n }\n\n const wallet = getWallet(Chain.Near);\n\n if (!wallet) {\n throw new SwapKitError(\"plugin_near_no_connection\");\n }\n\n const result = await wallet.provider.query({\n request_type: \"call_function\",\n finality: \"final\",\n account_id: \"near\",\n method_name: \"resolve\",\n args_base64: Buffer.from(JSON.stringify({ name: normalizedName })).toString(\"base64\"),\n });\n\n const response = JSON.parse(Buffer.from((result as any).result).toString());\n return response?.owner || null;\n } catch {\n return null;\n }\n },\n\n async isAvailable(name: string) {\n const owner = await this.resolve(name);\n return owner === null;\n },\n\n async getInfo(name: string) {\n try {\n const normalizedName = name.toLowerCase().replace(/\\.near$/, \"\");\n\n if (!validateNearName(normalizedName)) {\n throw new SwapKitError(\"plugin_near_invalid_name\");\n }\n\n const wallet = getWallet(Chain.Near);\n\n if (!wallet) {\n throw new SwapKitError(\"plugin_near_no_connection\");\n }\n\n const result = await wallet.provider.query({\n request_type: \"call_function\",\n finality: \"final\",\n account_id: \"near\",\n method_name: \"get_info\",\n args_base64: Buffer.from(JSON.stringify({ name: normalizedName })).toString(\"base64\"),\n });\n\n const response = JSON.parse(Buffer.from((result as any).result).toString());\n return response || null;\n } catch {\n return null;\n }\n },\n\n async lookupNames(accountId: string) {\n try {\n const wallet = getWallet(Chain.Near);\n\n if (!wallet) {\n throw new SwapKitError(\"plugin_near_no_connection\");\n }\n\n const result = await wallet.provider.query({\n request_type: \"call_function\",\n finality: \"final\",\n account_id: \"near\",\n method_name: \"get_names_by_owner\",\n args_base64: Buffer.from(JSON.stringify({ account_id: accountId })).toString(\"base64\"),\n });\n\n const response = JSON.parse(Buffer.from((result as any).result).toString());\n return Array.isArray(response) ? response.map((n) => `${n}.near`) : [];\n } catch {\n return [];\n }\n },\n\n async register(params: NearNameRegistrationParams) {\n const { name, publicKey: publicKeyOverwrite } = params;\n const normalizedName = name.toLowerCase().replace(/\\.near$/, \"\");\n\n if (!validateNearName(normalizedName)) {\n throw new SwapKitError(\"plugin_near_invalid_name\");\n }\n\n const wallet = getWallet(Chain.Near) as NearWallet;\n\n const newPublicKey = publicKeyOverwrite || (await wallet.getPublicKey());\n\n const cost = calculateNearNameCost(normalizedName);\n\n return wallet.callFunction({\n contractId: \"near\",\n methodName: \"create_account\",\n args: {\n new_account_id: `${normalizedName}.near`,\n new_public_key: newPublicKey,\n },\n deposit: cost,\n });\n },\n\n transfer(name: string, newOwner: string) {\n const normalizedName = name.toLowerCase().replace(/\\.near$/, \"\");\n\n if (!validateNearName(normalizedName)) {\n throw new SwapKitError(\"plugin_near_invalid_name\");\n }\n\n const wallet = getWallet(Chain.Near) as NearWallet;\n\n return wallet.callFunction({\n contractId: \"near\",\n methodName: \"transfer\",\n args: {\n name: normalizedName,\n new_owner: newOwner,\n },\n deposit: \"1\",\n });\n },\n },\n }),\n});\n",
5
+ "import {\n AssetValue,\n Chain,\n type CryptoChain,\n ProviderName,\n SwapKitError,\n type SwapParams,\n createPlugin,\n} from \"@swapkit/helpers\";\nimport { type QuoteResponseRoute, SwapKitApi } from \"@swapkit/helpers/api\";\nimport type { NearWallet } from \"@swapkit/toolboxes/near\";\nimport { calculateNearNameCost, validateNearName } from \"./nearNames\";\nimport type { NearNameRegistrationParams } from \"./types\";\n\nexport const NearPlugin = createPlugin({\n name: \"near\",\n properties: {\n supportedSwapkitProviders: [ProviderName.NEAR],\n },\n methods: ({ getWallet }) => ({\n async swap(swapParams: SwapParams<\"near\", QuoteResponseRoute>) {\n const {\n route: {\n buyAsset: buyAssetString,\n sellAsset: sellAssetString,\n sellAmount,\n meta: { near },\n },\n } = swapParams;\n\n if (!(sellAssetString && buyAssetString && near?.sellAsset)) {\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 Exclude<CryptoChain, Chain.Radix>);\n\n if (!wallet) {\n throw new SwapKitError(\"core_wallet_connection_not_found\");\n }\n\n const { depositAddress } = await SwapKitApi.getNearDepositChannel(near);\n\n const tx = await wallet.transfer({\n assetValue: sellAsset,\n recipient: depositAddress,\n isProgramDerivedAddress: true,\n });\n\n return tx as string;\n },\n\n // NEAR Names functionality\n nearNames: {\n async resolve(name: string) {\n try {\n const normalizedName = name.toLowerCase().replace(/\\.near$/, \"\");\n\n if (!validateNearName(normalizedName)) {\n throw new SwapKitError(\"plugin_near_invalid_name\");\n }\n\n const wallet = getWallet(Chain.Near);\n\n if (!wallet) {\n throw new SwapKitError(\"plugin_near_no_connection\");\n }\n\n const result = await wallet.provider.query({\n request_type: \"call_function\",\n finality: \"final\",\n account_id: \"near\",\n method_name: \"resolve\",\n args_base64: Buffer.from(JSON.stringify({ name: normalizedName })).toString(\"base64\"),\n });\n\n const response = JSON.parse(Buffer.from((result as any).result).toString());\n return response?.owner || null;\n } catch {\n return null;\n }\n },\n\n async isAvailable(name: string) {\n const owner = await this.resolve(name);\n return owner === null;\n },\n\n async getInfo(name: string) {\n try {\n const normalizedName = name.toLowerCase().replace(/\\.near$/, \"\");\n\n if (!validateNearName(normalizedName)) {\n throw new SwapKitError(\"plugin_near_invalid_name\");\n }\n\n const wallet = getWallet(Chain.Near);\n\n if (!wallet) {\n throw new SwapKitError(\"plugin_near_no_connection\");\n }\n\n const result = await wallet.provider.query({\n request_type: \"call_function\",\n finality: \"final\",\n account_id: \"near\",\n method_name: \"get_info\",\n args_base64: Buffer.from(JSON.stringify({ name: normalizedName })).toString(\"base64\"),\n });\n\n const response = JSON.parse(Buffer.from((result as any).result).toString());\n return response || null;\n } catch {\n return null;\n }\n },\n\n async lookupNames(accountId: string) {\n try {\n const wallet = getWallet(Chain.Near);\n\n if (!wallet) {\n throw new SwapKitError(\"plugin_near_no_connection\");\n }\n\n const result = await wallet.provider.query({\n request_type: \"call_function\",\n finality: \"final\",\n account_id: \"near\",\n method_name: \"get_names_by_owner\",\n args_base64: Buffer.from(JSON.stringify({ account_id: accountId })).toString(\"base64\"),\n });\n\n const response = JSON.parse(Buffer.from((result as any).result).toString());\n return Array.isArray(response) ? response.map((n) => `${n}.near`) : [];\n } catch {\n return [];\n }\n },\n\n async register(params: NearNameRegistrationParams) {\n const { name, publicKey: publicKeyOverwrite } = params;\n const normalizedName = name.toLowerCase().replace(/\\.near$/, \"\");\n\n if (!validateNearName(normalizedName)) {\n throw new SwapKitError(\"plugin_near_invalid_name\");\n }\n\n const wallet = getWallet(Chain.Near) as NearWallet;\n\n const newPublicKey = publicKeyOverwrite || (await wallet.getPublicKey());\n\n const cost = calculateNearNameCost(normalizedName);\n\n return wallet.callFunction({\n contractId: \"near\",\n methodName: \"create_account\",\n args: {\n new_account_id: `${normalizedName}.near`,\n new_public_key: newPublicKey,\n },\n deposit: cost,\n });\n },\n\n transfer(name: string, newOwner: string) {\n const normalizedName = name.toLowerCase().replace(/\\.near$/, \"\");\n\n if (!validateNearName(normalizedName)) {\n throw new SwapKitError(\"plugin_near_invalid_name\");\n }\n\n const wallet = getWallet(Chain.Near) as NearWallet;\n\n return wallet.callFunction({\n contractId: \"near\",\n methodName: \"transfer\",\n args: {\n name: normalizedName,\n new_owner: newOwner,\n },\n deposit: \"1\",\n });\n },\n },\n }),\n});\n",
6
6
  "import { parseNearAmount } from \"near-api-js/lib/utils/format\";\n\nconst MINIMUM_NAME_LENGTH = 2;\nconst MAXIMUM_NAME_LENGTH = 64;\n\nexport function validateNearName(name: string): boolean {\n if (name.length < MINIMUM_NAME_LENGTH || name.length > MAXIMUM_NAME_LENGTH) {\n return false;\n }\n\n // Only lowercase letters, numbers, and hyphens\n // Cannot start or end with hyphen\n // No consecutive hyphens\n return /^[a-z0-9]+(-[a-z0-9]+)*$/.test(name);\n}\n\nexport function calculateNearNameCost(name: string): string {\n // Pricing based on name length\n // These are suggested prices, the actual minimum is ~0.00182 NEAR\n const length = name.length;\n\n let costInNear: string;\n if (length <= 2) {\n costInNear = \"50\"; // 50 NEAR for 2-char names\n } else if (length <= 3) {\n costInNear = \"20\"; // 20 NEAR for 3-char names\n } else if (length <= 4) {\n costInNear = \"5\"; // 5 NEAR for 4-char names\n } else if (length <= 5) {\n costInNear = \"1\"; // 1 NEAR for 5-char names\n } else {\n costInNear = \"0.1\"; // 0.1 NEAR for 6+ characters\n }\n\n // Convert NEAR to yoctoNEAR\n return parseNearAmount(costInNear) || \"0\";\n}\n"
7
7
  ],
8
- "mappings": "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",
9
- "debugId": "D977A83716DD691F64756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "21F9A07322F2947864756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -1,4 +1,4 @@
1
- var e={};a(e,{validateAddressType:()=>B,ThorchainPlugin:()=>y,MayachainPlugin:()=>b});module.exports=s(e);var x=require("@swapkit/helpers"),M=require("@swapkit/helpers/api"),Y=require("@swapkit/helpers/contracts");var S=require("@swapkit/helpers");function B({chain:R,address:N}){if(!N)return!1;return R===S.Chain.Bitcoin?!N.startsWith("bc1p"):!0}function T({assetValue:R,from:N,memo:U="",...O}){return{...O,memo:U,from:N,assetValue:R}}var o={[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},l={[x.Chain.Arbitrum]:Y.MayaArbitrumVaultAbi,[x.Chain.Ethereum]:Y.MayaEthereumVaultAbi},y=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 t(R){return async function N(U){if(R==="thorchain"&&U===x.Chain.THORChain||R==="mayachain"&&U===x.Chain.Maya)return{gas_rate:"0",router:"",address:"",halted:!1,chain:U};let $=(await M.SwapKitApi.thornode.getInboundAddresses(R)).find((v)=>v.chain===U);if(!$)throw new x.SwapKitError("core_inbound_data_not_found");if($?.halted)throw new x.SwapKitError("core_chain_halted");return $}}function w(R){return function N({getWallet:U}){let O=R===x.Chain.Maya?"mayachain":"thorchain",$=t(O);async function v({assetValue:q,type:z="checkOnly"}){let J=(await $(q.chain)).router,H=q.chain,Q=x.EVMChains.includes(H);if(Q&&q.isGasAsset||!Q||q.isSynthetic)return Promise.resolve(z==="checkOnly"?!0:"approved");let X=U(H);if(!X)throw new x.SwapKitError("core_wallet_connection_not_found");let Z=z==="checkOnly"?X.isApproved:X.approve;if(!(q.address&&X.address))throw new x.SwapKitError("core_approve_asset_address_or_from_not_found");return Z({amount:q.getBaseValue("bigint"),assetAddress:q.address,from:X.address,spenderAddress:J})}async function D({assetValue:q,recipient:z,router:J,...H}){let Q=O==="thorchain"?i:l,{chain:L,symbol:X,ticker:Z}=q,P=U(L);if(!P)throw new x.SwapKitError("core_wallet_connection_not_found");let{address:f}=P;if(!B({address:f,chain:L}))throw new x.SwapKitError("core_transaction_invalid_sender_address");let _=T({from:f,assetValue:q,recipient:z,router:J,...H});try{let j=Q?.[L];if(!j){let I=U(L);return R===L&&z===""?I.deposit(_):I.transfer(_)}let{getChecksumAddressFromAsset:k}=await import("@swapkit/toolboxes/evm");return U(L).call({abi:j,contractAddress:J||(await $(L)).router,funcName:"depositWithExpiry",funcParams:[z,k({chain:L,symbol:X,ticker:Z},L),q.getBaseValue("string"),_.memo,H.expiration||Number.parseInt(`${(Date.now()+900000)/1000}`)],txOverrides:{from:_.from,value:q.isGasAsset?q.getBaseValue("bigint"):void 0}})}catch(j){let k=typeof j==="string"?j.toLowerCase():j?.message.toLowerCase(),F=k?.includes("insufficient funds"),I=k?.includes("gas"),E=k?.includes("server"),u=k?.includes("user rejected");throw new x.SwapKitError(F?"core_transaction_deposit_insufficient_funds_error":I?"core_transaction_deposit_gas_error":E?"core_transaction_deposit_server_error":u?"core_transaction_user_rejected":"core_transaction_deposit_error",j)}}async function K({memo:q,assetValue:z}){let J=await M.SwapKitApi.thornode.getMimirInfo(O);if(J.HALTCHAINGLOBAL>=1||J.HALTTHORCHAIN>=1)throw new x.SwapKitError("thorchain_chain_halted");return D({assetValue:z,recipient:"",memo:q})}async function G({assetValue:q,memo:z,feeOptionKey:J=x.FeeOption.Fast}){let{gas_rate:H="0",router:Q,address:L}=await $(q.chain);return D({assetValue:q,recipient:L,memo:z,router:Q,feeRate:Number.parseInt(H)*o[J]})}function C({assetValue:q}){return v({assetValue:q,type:x.ApproveMode.Approve})}function A({assetValue:q}){return v({assetValue:q,type:x.ApproveMode.CheckOnly})}function m({assetValue:q,...z}){return K({assetValue:q,memo:x.getMemoForNameRegister(z)})}function c({assetValue:q,payoutAddress:z,name:J,ownerAddress:H}){let Q=z||U(q.chain)?.address;if(!Q)throw new x.SwapKitError("thorchain_preferred_asset_payout_required");return K({assetValue:x.AssetValue.from({chain:R}),memo:x.getMemoForNamePreferredAssetRegister({asset:q.toString(),chain:q.chain,name:J,owner:H,payout:Q})})}function g({type:q,assetValue:z,address:J}){let H=q===x.MemoType.UNBOND?x.getMemoForUnbond({address:J,unbondAmount:z.getBaseValue("number")}):x.getMemoForLeaveAndBond({type:q,address:J}),Q=q===x.MemoType.BOND?z:x.getMinAmountByChain(R);return K({memo:H,assetValue:Q})}async function h({baseAssetValue:q,assetValue:z}){if(q.lte(0)||z.lte(0))throw new x.SwapKitError("core_transaction_create_liquidity_invalid_params");let J=U(z.chain).address,H=U(R).address,Q=await x.wrapWithThrow(()=>{return G({assetValue:q,memo:x.getMemoForDeposit({...z,address:J})})},"core_transaction_create_liquidity_base_error"),L=await x.wrapWithThrow(()=>{return G({assetValue:z,memo:x.getMemoForDeposit({...z,address:H})})},"core_transaction_create_liquidity_asset_error");return{baseAssetTx:Q,assetTx:L}}function V({assetValue:q,poolAddress:z,address:J,symmetric:H}){if(H&&!J)throw new x.SwapKitError("core_transaction_add_liquidity_invalid_params");let Q=x.getMemoForDeposit({chain:z.split(".")[0],symbol:z.split(".")[1],address:H?J:""});return G({assetValue:q,memo:Q})}async function p({baseAssetValue:q,assetValue:z,baseAssetAddr:J,assetAddr:H,isPendingSymmAsset:Q,mode:L="sym"}){let{chain:X,symbol:Z}=z,P=L==="sym",f=q?.gt(0)&&(P||L==="baseAsset"),W=z?.gt(0)&&(P||L==="asset"),_=Q||f,j=U(R).address,k=_?J||j:"",F=P||L==="asset"?H||U(X).address:"";if(!(f||W))throw new x.SwapKitError("core_transaction_add_liquidity_invalid_params");if(_&&!k)throw new x.SwapKitError("core_transaction_add_liquidity_base_address");let I=f&&q?await x.wrapWithThrow(()=>{return G({assetValue:q,memo:x.getMemoForDeposit({chain:X,symbol:Z,address:F})})},"core_transaction_add_liquidity_base_error"):void 0,E=W&&z?await x.wrapWithThrow(()=>{return G({assetValue:z,memo:x.getMemoForDeposit({chain:X,symbol:Z,address:k})})},"core_transaction_add_liquidity_asset_error"):void 0;return{baseAssetTx:I,assetTx:E}}function n({memo:q,assetValue:z,percent:J,from:H,to:Q}){let L=Q==="baseAsset"&&H!=="baseAsset"?x.AssetValue.from({chain:R}):H==="sym"&&Q==="sym"||H==="baseAsset"||H==="asset"?void 0:z,X=x.getMinAmountByChain(H==="asset"?z.chain:R),Z=q||x.getMemoForWithdraw({symbol:z.symbol,chain:z.chain,ticker:z.ticker,basisPoints:Math.min(1e4,Math.round(J*100)),targetAsset:L?.toString()});return G({assetValue:X,memo:Z})}async function d({feeOptionKey:q,route:z}){let{memo:J,expiration:H,targetAddress:Q}=z,L=await x.AssetValue.from({asyncTokenLookup:!0,asset:z.sellAsset,value:z.sellAmount});if(!L)throw new x.SwapKitError("core_swap_asset_not_recognized");if(!B({address:z.destinationAddress,chain:x.AssetValue.from({asset:z.buyAsset}).chain}))throw new x.SwapKitError("core_transaction_invalid_recipient_address");let{address:Z}=await $(L.chain);return D({expiration:Number(H),assetValue:L,memo:J,feeOptionKey:q,router:Q,recipient:Z})}return{addLiquidity:p,addLiquidityPart:V,approveAssetValue:C,createLiquidity:h,deposit:D,depositToPool:G,getInboundDataByChain:$,isAssetValueApproved:A,nodeAction:g,registerName:m,registerPreferredAsset:c,swap:d,withdraw:n}}}
1
+ var qx={};xx(qx,{validateAddressType:()=>B,ThorchainPlugin:()=>T,MayachainPlugin:()=>y});module.exports=e(qx);var x=require("@swapkit/helpers"),S=require("@swapkit/helpers/api"),Y=require("@swapkit/helpers/contracts");var M=require("@swapkit/helpers");function B({chain:R,address:O}){if(!O)return!1;return R===M.Chain.Bitcoin?!O.startsWith("bc1p"):!0}function b({assetValue:R,from:O,memo:U="",...P}){return{...P,memo:U,from:O,assetValue:R}}var l={[x.FeeOption.Average]:1.2,[x.FeeOption.Fast]:1.5,[x.FeeOption.Fastest]:2},t={[x.Chain.Avalanche]:Y.TCAvalancheDepositABI,[x.Chain.Base]:Y.TCBaseDepositABI,[x.Chain.BinanceSmartChain]:Y.TCBscDepositABI,[x.Chain.Ethereum]:Y.TCEthereumVaultAbi},s={[x.Chain.Arbitrum]:Y.MayaArbitrumVaultAbi,[x.Chain.Ethereum]:Y.MayaEthereumVaultAbi},T=x.createPlugin({name:"thorchain",methods:w(x.Chain.THORChain),properties:{supportedSwapkitProviders:[x.ProviderName.THORCHAIN,x.ProviderName.THORCHAIN_STREAMING]}}),y=x.createPlugin({name:"mayachain",methods:w(x.Chain.Maya),properties:{supportedSwapkitProviders:[x.ProviderName.MAYACHAIN]}});function a(R){return async function O(U){if(R==="thorchain"&&U===x.Chain.THORChain||R==="mayachain"&&U===x.Chain.Maya)return{gas_rate:"0",router:"",address:"",halted:!1,chain:U,dust_threshold:"0"};let Z=(await S.SwapKitApi.thornode.getInboundAddresses(R)).find((F)=>F.chain===U);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(R){return function O({getWallet:U}){let P=R===x.Chain.Maya?"mayachain":"thorchain",Z=a(P);async function F({assetValue:q,type:z="checkOnly"}){let H=(await Z(q.chain)).router,J=q.chain,Q=x.EVMChains.includes(J);if(Q&&q.isGasAsset||!Q||q.isSynthetic)return Promise.resolve(z==="checkOnly"?!0:"approved");let X=U(J);if(!X)throw new x.SwapKitError("core_wallet_connection_not_found");let $=z==="checkOnly"?X.isApproved:X.approve;if(!(q.address&&X.address))throw new x.SwapKitError("core_approve_asset_address_or_from_not_found");return $({amount:q.getBaseValue("bigint"),assetAddress:q.address,from:X.address,spenderAddress:H})}async function k({assetValue:q,recipient:z,router:H,...J}){let Q=P==="thorchain"?t:s,{chain:L,symbol:X,ticker:$}=q,f=U(L);if(!f)throw new x.SwapKitError("core_wallet_connection_not_found");let{address:I}=f;if(!B({address:I,chain:L}))throw new x.SwapKitError("core_transaction_invalid_sender_address");let _=b({from:I,assetValue:q,recipient:z,router:H,...J});try{let j=Q?.[L];if(!j){let v=U(L);return R===L&&z===""?v.deposit(_):v.transfer(_)}let{getChecksumAddressFromAsset:G}=await import("@swapkit/toolboxes/evm");return U(L).call({abi:j,contractAddress:H||(await Z(L)).router,funcName:"depositWithExpiry",funcParams:[z,G({chain:L,symbol:X,ticker:$},L),q.getBaseValue("string"),_.memo,J.expiration||Number.parseInt(`${(Date.now()+900000)/1000}`)],txOverrides:{from:_.from,value:q.isGasAsset?q.getBaseValue("bigint"):void 0}})}catch(j){let G=typeof j==="string"?j.toLowerCase():j?.message.toLowerCase(),E=G?.includes("insufficient funds"),v=G?.includes("gas"),K=G?.includes("server"),o=G?.includes("user rejected");throw new x.SwapKitError(E?"core_transaction_deposit_insufficient_funds_error":v?"core_transaction_deposit_gas_error":K?"core_transaction_deposit_server_error":o?"core_transaction_user_rejected":"core_transaction_deposit_error",j)}}async function D({memo:q,assetValue:z}){let H=await S.SwapKitApi.thornode.getMimirInfo(P);if(H.HALTCHAINGLOBAL>=1||H.HALTTHORCHAIN>=1)throw new x.SwapKitError("thorchain_chain_halted");return k({assetValue:z,recipient:"",memo:q})}async function N({assetValue:q,memo:z,feeOptionKey:H=x.FeeOption.Fast}){let{gas_rate:J="0",router:Q,address:L}=await Z(q.chain);return k({assetValue:q,recipient:L,memo:z,router:Q,feeRate:Number.parseInt(J)*l[H]})}function C({assetValue:q}){return F({assetValue:q,type:x.ApproveMode.Approve})}function g({assetValue:q}){return F({assetValue:q,type:x.ApproveMode.CheckOnly})}function A({assetValue:q,...z}){return D({assetValue:q,memo:x.getMemoForNameRegister(z)})}function m({assetValue:q,payoutAddress:z,name:H,ownerAddress:J}){let Q=z||U(q.chain)?.address;if(!Q)throw new x.SwapKitError("thorchain_preferred_asset_payout_required");return D({assetValue:x.AssetValue.from({chain:R}),memo:x.getMemoForNamePreferredAssetRegister({asset:q.toString(),chain:q.chain,name:H,owner:J,payout:Q})})}function c({type:q,assetValue:z,address:H}){let J=q===x.MemoType.UNBOND?x.getMemoForUnbond({address:H,unbondAmount:z.getBaseValue("number")}):x.getMemoForLeaveAndBond({type:q,address:H}),Q=q===x.MemoType.BOND?z:x.getMinAmountByChain(R);return D({memo:J,assetValue:Q})}async function h({baseAssetValue:q,assetValue:z}){if(q.lte(0)||z.lte(0))throw new x.SwapKitError("core_transaction_create_liquidity_invalid_params");let H=U(z.chain).address,J=U(R).address,Q=await x.wrapWithThrow(()=>{return N({assetValue:q,memo:x.getMemoForDeposit({...z,address:H})})},"core_transaction_create_liquidity_base_error"),L=await x.wrapWithThrow(()=>{return N({assetValue:z,memo:x.getMemoForDeposit({...z,address:J})})},"core_transaction_create_liquidity_asset_error");return{baseAssetTx:Q,assetTx:L}}function V({assetValue:q,poolAddress:z,address:H,symmetric:J}){if(J&&!H)throw new x.SwapKitError("core_transaction_add_liquidity_invalid_params");let Q=x.getMemoForDeposit({chain:z.split(".")[0],symbol:z.split(".")[1],address:J?H:""});return N({assetValue:q,memo:Q})}async function p({baseAssetValue:q,assetValue:z,baseAssetAddr:H,assetAddr:J,isPendingSymmAsset:Q,mode:L="sym"}){let{chain:X,symbol:$}=z,f=L==="sym",I=q?.gt(0)&&(f||L==="baseAsset"),W=z?.gt(0)&&(f||L==="asset"),_=Q||I,j=U(R).address,G=_?H||j:"",E=f||L==="asset"?J||U(X).address:"";if(!(I||W))throw new x.SwapKitError("core_transaction_add_liquidity_invalid_params");if(_&&!G)throw new x.SwapKitError("core_transaction_add_liquidity_base_address");let v=I&&q?await x.wrapWithThrow(()=>{return N({assetValue:q,memo:x.getMemoForDeposit({chain:X,symbol:$,address:E})})},"core_transaction_add_liquidity_base_error"):void 0,K=W&&z?await x.wrapWithThrow(()=>{return N({assetValue:z,memo:x.getMemoForDeposit({chain:X,symbol:$,address:G})})},"core_transaction_add_liquidity_asset_error"):void 0;return{baseAssetTx:v,assetTx:K}}function n({memo:q,assetValue:z,percent:H,from:J,to:Q}){let L=Q==="baseAsset"&&J!=="baseAsset"?x.AssetValue.from({chain:R}):J==="sym"&&Q==="sym"||J==="baseAsset"||J==="asset"?void 0:z,X=x.getMinAmountByChain(J==="asset"?z.chain:R),$=q||x.getMemoForWithdraw({symbol:z.symbol,chain:z.chain,ticker:z.ticker,basisPoints:Math.min(1e4,Math.round(H*100)),targetAsset:L?.toString()});return N({assetValue:X,memo:$})}async function d({chain:q,thorAddress:z}){let H=await Z(q),J=H.dust_threshold;return k({assetValue:x.AssetValue.from({chain:q,fromBaseDecimal:Math.min(x.BaseDecimal[q],x.BaseDecimal[x.Chain.THORChain]),value:q!==x.Chain.THORChain?J:0}),recipient:H.address,memo:x.getMemoForTcyClaim(x.MemoType.CLAIM_TCY,{address:z}),router:H.router})}function u(q){if(q.type==="stake"){if(q.assetValue.toString()!=="THOR.TCY")throw new x.SwapKitError("thorchain_asset_is_not_tcy");return k({assetValue:q.assetValue,recipient:"",memo:x.getMemoForTcyStake(x.MemoType.STAKE_TCY,{})})}return k({assetValue:x.AssetValue.from({chain:x.Chain.THORChain}),recipient:"",memo:x.getMemoForTcyStake(x.MemoType.UNSTAKE_TCY,{unstakeBps:q.unstakeBps})})}async function r({feeOptionKey:q,route:z}){let{memo:H,expiration:J,targetAddress:Q}=z,L=await x.AssetValue.from({asyncTokenLookup:!0,asset:z.sellAsset,value:z.sellAmount});if(!L)throw new x.SwapKitError("core_swap_asset_not_recognized");if(!B({address:z.destinationAddress,chain:x.AssetValue.from({asset:z.buyAsset}).chain}))throw new x.SwapKitError("core_transaction_invalid_recipient_address");let{address:$}=await Z(L.chain);return k({expiration:Number(J),assetValue:L,memo:H,feeOptionKey:q,router:Q,recipient:$})}return{addLiquidity:p,addLiquidityPart:V,approveAssetValue:C,createLiquidity:h,deposit:k,depositToPool:N,getInboundDataByChain:Z,isAssetValueApproved:g,nodeAction:c,registerName:A,registerPreferredAsset:m,claimTcy:d,stakeTcyAction:u,swap:r,withdraw:n}}}
2
2
 
3
- //# debugId=5AD9581C3502FCE164756E2164756E21
3
+ //# debugId=6FDC58A02E63EB1164756E2164756E21
4
4
  //# sourceMappingURL=index.cjs.map
@@ -2,10 +2,10 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/thorchain/plugin.ts", "../src/thorchain/shared.ts"],
4
4
  "sourcesContent": [
5
- "import {\n ApproveMode,\n type ApproveReturnType,\n AssetValue,\n Chain,\n type CryptoChain,\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 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\";\nimport { prepareTxParams, validateAddressType } from \"./shared\";\nimport type {\n AddLiquidityParams,\n AddLiquidityPartParams,\n CoreTxParams,\n CreateLiquidityParams,\n NodeActionParams,\n RegisterThornameParams,\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 CryptoChain);\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 // @Towan: Is that the same action? :)\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({ assetValue }: { assetValue: AssetValue }) {\n return approve({ assetValue, type: ApproveMode.Approve });\n }\n\n function isAssetValueApproved({ assetValue }: { assetValue: AssetValue }) {\n return approve({ assetValue, 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 CryptoChain)?.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 CryptoChain).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 CryptoChain).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 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 swap,\n withdraw,\n };\n };\n}\n",
5
+ "import {\n ApproveMode,\n type ApproveReturnType,\n AssetValue,\n BaseDecimal,\n Chain,\n type CryptoChain,\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 getMemoForTcyClaim,\n getMemoForTcyStake,\n getMemoForUnbond,\n getMemoForWithdraw,\n getMinAmountByChain,\n wrapWithThrow,\n} from \"@swapkit/helpers\";\nimport {\n type InboundAddressesItem,\n type QuoteResponseRoute,\n SwapKitApi,\n type THORNodeType,\n} from \"@swapkit/helpers/api\";\nimport {\n MayaArbitrumVaultAbi,\n MayaEthereumVaultAbi,\n TCAvalancheDepositABI,\n TCBaseDepositABI,\n TCBscDepositABI,\n TCEthereumVaultAbi,\n} from \"@swapkit/helpers/contracts\";\nimport { prepareTxParams, validateAddressType } from \"./shared\";\nimport type {\n AddLiquidityParams,\n AddLiquidityPartParams,\n CoreTxParams,\n CreateLiquidityParams,\n NodeActionParams,\n RegisterThornameParams,\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 {\n gas_rate: \"0\",\n router: \"\",\n address: \"\",\n halted: false,\n chain,\n dust_threshold: \"0\",\n } as InboundAddressesItem;\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 CryptoChain);\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 // @Towan: Is that the same action? :)\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({ assetValue }: { assetValue: AssetValue }) {\n return approve({ assetValue, type: ApproveMode.Approve });\n }\n\n function isAssetValueApproved({ assetValue }: { assetValue: AssetValue }) {\n return approve({ assetValue, 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 CryptoChain)?.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 CryptoChain).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 CryptoChain).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 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 claimTcy({ chain, thorAddress }: { chain: Chain; thorAddress: string }) {\n const inboundData = await getInboundDataByChain(chain);\n const dust_threshold = inboundData.dust_threshold;\n\n return deposit({\n assetValue: AssetValue.from({\n chain,\n fromBaseDecimal: Math.min(BaseDecimal[chain], BaseDecimal[Chain.THORChain]),\n value: chain !== Chain.THORChain ? dust_threshold : 0,\n }),\n recipient: inboundData.address,\n memo: getMemoForTcyClaim(MemoType.CLAIM_TCY, { address: thorAddress }),\n router: inboundData.router,\n });\n }\n\n function stakeTcyAction(\n params: { type: \"unstake\"; unstakeBps: number } | { type: \"stake\"; assetValue: AssetValue },\n ) {\n if (params.type === \"stake\") {\n if (params.assetValue.toString() !== \"THOR.TCY\") {\n throw new SwapKitError(\"thorchain_asset_is_not_tcy\");\n }\n\n return deposit({\n assetValue: params.assetValue,\n recipient: \"\",\n memo: getMemoForTcyStake(MemoType.STAKE_TCY, {}),\n });\n }\n\n return deposit({\n assetValue: AssetValue.from({\n chain: Chain.THORChain,\n }),\n recipient: \"\",\n memo: getMemoForTcyStake(MemoType.UNSTAKE_TCY, {\n unstakeBps: params.unstakeBps,\n }),\n });\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 claimTcy,\n stakeTcyAction,\n swap,\n withdraw,\n };\n };\n}\n",
6
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 return chain === Chain.Bitcoin ? !address.startsWith(\"bc1p\") : true;\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
7
  ],
8
- "mappings": "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",
9
- "debugId": "5AD9581C3502FCE164756E2164756E21",
8
+ "mappings": "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",
9
+ "debugId": "6FDC58A02E63EB1164756E2164756E21",
10
10
  "names": []
11
11
  }
@@ -1,4 +1,4 @@
1
- import{a as e,b as xx}from"../chunk-wfktpptf.js";import{ApproveMode as C,AssetValue as B,Chain as Y,EVMChains as qx,FeeOption as S,MemoType as A,ProviderName as b,SwapKitError as U,createPlugin as c,getMemoForDeposit as v,getMemoForLeaveAndBond as zx,getMemoForNamePreferredAssetRegister as Hx,getMemoForNameRegister as Jx,getMemoForUnbond as Lx,getMemoForWithdraw as Qx,getMinAmountByChain as m,wrapWithThrow as M}from"@swapkit/helpers";import{SwapKitApi as g}from"@swapkit/helpers/api";import{MayaArbitrumVaultAbi as Rx,MayaEthereumVaultAbi as Ux,TCAvalancheDepositABI as Xx,TCBaseDepositABI as Yx,TCBscDepositABI as Zx,TCEthereumVaultAbi as $x}from"@swapkit/helpers/contracts";import{Chain as a}from"@swapkit/helpers";function W({chain:Q,address:N}){if(!N)return!1;return Q===a.Bitcoin?!N.startsWith("bc1p"):!0}function w({assetValue:Q,from:N,memo:R="",...O}){return{...O,memo:R,from:N,assetValue:Q}}var jx={[S.Average]:1.2,[S.Fast]:1.5,[S.Fastest]:2},kx={[Y.Avalanche]:Xx,[Y.Base]:Yx,[Y.BinanceSmartChain]:Zx,[Y.Ethereum]:$x},Gx={[Y.Arbitrum]:Rx,[Y.Ethereum]:Ux},_x=c({name:"thorchain",methods:h(Y.THORChain),properties:{supportedSwapkitProviders:[b.THORCHAIN,b.THORCHAIN_STREAMING]}}),Nx=c({name:"mayachain",methods:h(Y.Maya),properties:{supportedSwapkitProviders:[b.MAYACHAIN]}});function Ox(Q){return async function N(R){if(Q==="thorchain"&&R===Y.THORChain||Q==="mayachain"&&R===Y.Maya)return{gas_rate:"0",router:"",address:"",halted:!1,chain:R};let $=(await g.thornode.getInboundAddresses(Q)).find((D)=>D.chain===R);if(!$)throw new U("core_inbound_data_not_found");if($?.halted)throw new U("core_chain_halted");return $}}function h(Q){return function N({getWallet:R}){let O=Q===Y.Maya?"mayachain":"thorchain",$=Ox(O);async function D({assetValue:x,type:q="checkOnly"}){let H=(await $(x.chain)).router,z=x.chain,L=qx.includes(z);if(L&&x.isGasAsset||!L||x.isSynthetic)return Promise.resolve(q==="checkOnly"?!0:"approved");let X=R(z);if(!X)throw new U("core_wallet_connection_not_found");let Z=q==="checkOnly"?X.isApproved:X.approve;if(!(x.address&&X.address))throw new U("core_approve_asset_address_or_from_not_found");return Z({amount:x.getBaseValue("bigint"),assetAddress:x.address,from:X.address,spenderAddress:H})}async function F({assetValue:x,recipient:q,router:H,...z}){let L=O==="thorchain"?kx:Gx,{chain:J,symbol:X,ticker:Z}=x,P=R(J);if(!P)throw new U("core_wallet_connection_not_found");let{address:f}=P;if(!W({address:f,chain:J}))throw new U("core_transaction_invalid_sender_address");let _=w({from:f,assetValue:x,recipient:q,router:H,...z});try{let j=L?.[J];if(!j){let I=R(J);return Q===J&&q===""?I.deposit(_):I.transfer(_)}let{getChecksumAddressFromAsset:k}=await import("@swapkit/toolboxes/evm");return R(J).call({abi:j,contractAddress:H||(await $(J)).router,funcName:"depositWithExpiry",funcParams:[q,k({chain:J,symbol:X,ticker:Z},J),x.getBaseValue("string"),_.memo,z.expiration||Number.parseInt(`${(Date.now()+900000)/1000}`)],txOverrides:{from:_.from,value:x.isGasAsset?x.getBaseValue("bigint"):void 0}})}catch(j){let k=typeof j==="string"?j.toLowerCase():j?.message.toLowerCase(),E=k?.includes("insufficient funds"),I=k?.includes("gas"),K=k?.includes("server"),s=k?.includes("user rejected");throw new U(E?"core_transaction_deposit_insufficient_funds_error":I?"core_transaction_deposit_gas_error":K?"core_transaction_deposit_server_error":s?"core_transaction_user_rejected":"core_transaction_deposit_error",j)}}async function T({memo:x,assetValue:q}){let H=await g.thornode.getMimirInfo(O);if(H.HALTCHAINGLOBAL>=1||H.HALTTHORCHAIN>=1)throw new U("thorchain_chain_halted");return F({assetValue:q,recipient:"",memo:x})}async function G({assetValue:x,memo:q,feeOptionKey:H=S.Fast}){let{gas_rate:z="0",router:L,address:J}=await $(x.chain);return F({assetValue:x,recipient:J,memo:q,router:L,feeRate:Number.parseInt(z)*jx[H]})}function V({assetValue:x}){return D({assetValue:x,type:C.Approve})}function p({assetValue:x}){return D({assetValue:x,type:C.CheckOnly})}function n({assetValue:x,...q}){return T({assetValue:x,memo:Jx(q)})}function d({assetValue:x,payoutAddress:q,name:H,ownerAddress:z}){let L=q||R(x.chain)?.address;if(!L)throw new U("thorchain_preferred_asset_payout_required");return T({assetValue:B.from({chain:Q}),memo:Hx({asset:x.toString(),chain:x.chain,name:H,owner:z,payout:L})})}function u({type:x,assetValue:q,address:H}){let z=x===A.UNBOND?Lx({address:H,unbondAmount:q.getBaseValue("number")}):zx({type:x,address:H}),L=x===A.BOND?q:m(Q);return T({memo:z,assetValue:L})}async function r({baseAssetValue:x,assetValue:q}){if(x.lte(0)||q.lte(0))throw new U("core_transaction_create_liquidity_invalid_params");let H=R(q.chain).address,z=R(Q).address,L=await M(()=>{return G({assetValue:x,memo:v({...q,address:H})})},"core_transaction_create_liquidity_base_error"),J=await M(()=>{return G({assetValue:q,memo:v({...q,address:z})})},"core_transaction_create_liquidity_asset_error");return{baseAssetTx:L,assetTx:J}}function o({assetValue:x,poolAddress:q,address:H,symmetric:z}){if(z&&!H)throw new U("core_transaction_add_liquidity_invalid_params");let L=v({chain:q.split(".")[0],symbol:q.split(".")[1],address:z?H:""});return G({assetValue:x,memo:L})}async function i({baseAssetValue:x,assetValue:q,baseAssetAddr:H,assetAddr:z,isPendingSymmAsset:L,mode:J="sym"}){let{chain:X,symbol:Z}=q,P=J==="sym",f=x?.gt(0)&&(P||J==="baseAsset"),y=q?.gt(0)&&(P||J==="asset"),_=L||f,j=R(Q).address,k=_?H||j:"",E=P||J==="asset"?z||R(X).address:"";if(!(f||y))throw new U("core_transaction_add_liquidity_invalid_params");if(_&&!k)throw new U("core_transaction_add_liquidity_base_address");let I=f&&x?await M(()=>{return G({assetValue:x,memo:v({chain:X,symbol:Z,address:E})})},"core_transaction_add_liquidity_base_error"):void 0,K=y&&q?await M(()=>{return G({assetValue:q,memo:v({chain:X,symbol:Z,address:k})})},"core_transaction_add_liquidity_asset_error"):void 0;return{baseAssetTx:I,assetTx:K}}function l({memo:x,assetValue:q,percent:H,from:z,to:L}){let J=L==="baseAsset"&&z!=="baseAsset"?B.from({chain:Q}):z==="sym"&&L==="sym"||z==="baseAsset"||z==="asset"?void 0:q,X=m(z==="asset"?q.chain:Q),Z=x||Qx({symbol:q.symbol,chain:q.chain,ticker:q.ticker,basisPoints:Math.min(1e4,Math.round(H*100)),targetAsset:J?.toString()});return G({assetValue:X,memo:Z})}async function t({feeOptionKey:x,route:q}){let{memo:H,expiration:z,targetAddress:L}=q,J=await B.from({asyncTokenLookup:!0,asset:q.sellAsset,value:q.sellAmount});if(!J)throw new U("core_swap_asset_not_recognized");if(!W({address:q.destinationAddress,chain:B.from({asset:q.buyAsset}).chain}))throw new U("core_transaction_invalid_recipient_address");let{address:Z}=await $(J.chain);return F({expiration:Number(z),assetValue:J,memo:H,feeOptionKey:x,router:L,recipient:Z})}return{addLiquidity:i,addLiquidityPart:o,approveAssetValue:V,createLiquidity:r,deposit:F,depositToPool:G,getInboundDataByChain:$,isAssetValueApproved:p,nodeAction:u,registerName:n,registerPreferredAsset:d,swap:t,withdraw:l}}}export{W as validateAddressType,_x as ThorchainPlugin,Nx as MayachainPlugin};
1
+ import{a as Hx,b as Jx}from"../chunk-wfktpptf.js";import{ApproveMode as g,AssetValue as O,BaseDecimal as A,Chain as Y,EVMChains as Lx,FeeOption as b,MemoType as F,ProviderName as w,SwapKitError as U,createPlugin as h,getMemoForDeposit as E,getMemoForLeaveAndBond as Qx,getMemoForNamePreferredAssetRegister as Rx,getMemoForNameRegister as Ux,getMemoForTcyClaim as Xx,getMemoForTcyStake as m,getMemoForUnbond as Yx,getMemoForWithdraw as Zx,getMinAmountByChain as c,wrapWithThrow as M}from"@swapkit/helpers";import{SwapKitApi as V}from"@swapkit/helpers/api";import{MayaArbitrumVaultAbi as $x,MayaEthereumVaultAbi as jx,TCAvalancheDepositABI as Gx,TCBaseDepositABI as kx,TCBscDepositABI as Nx,TCEthereumVaultAbi as _x}from"@swapkit/helpers/contracts";import{Chain as zx}from"@swapkit/helpers";function S({chain:Q,address:P}){if(!P)return!1;return Q===zx.Bitcoin?!P.startsWith("bc1p"):!0}function C({assetValue:Q,from:P,memo:R="",...f}){return{...f,memo:R,from:P,assetValue:Q}}var Ox={[b.Average]:1.2,[b.Fast]:1.5,[b.Fastest]:2},Px={[Y.Avalanche]:Gx,[Y.Base]:kx,[Y.BinanceSmartChain]:Nx,[Y.Ethereum]:_x},fx={[Y.Arbitrum]:$x,[Y.Ethereum]:jx},Ix=h({name:"thorchain",methods:p(Y.THORChain),properties:{supportedSwapkitProviders:[w.THORCHAIN,w.THORCHAIN_STREAMING]}}),vx=h({name:"mayachain",methods:p(Y.Maya),properties:{supportedSwapkitProviders:[w.MAYACHAIN]}});function Bx(Q){return async function P(R){if(Q==="thorchain"&&R===Y.THORChain||Q==="mayachain"&&R===Y.Maya)return{gas_rate:"0",router:"",address:"",halted:!1,chain:R,dust_threshold:"0"};let Z=(await V.thornode.getInboundAddresses(Q)).find((K)=>K.chain===R);if(!Z)throw new U("core_inbound_data_not_found");if(Z?.halted)throw new U("core_chain_halted");return Z}}function p(Q){return function P({getWallet:R}){let f=Q===Y.Maya?"mayachain":"thorchain",Z=Bx(f);async function K({assetValue:x,type:q="checkOnly"}){let z=(await Z(x.chain)).router,H=x.chain,L=Lx.includes(H);if(L&&x.isGasAsset||!L||x.isSynthetic)return Promise.resolve(q==="checkOnly"?!0:"approved");let X=R(H);if(!X)throw new U("core_wallet_connection_not_found");let $=q==="checkOnly"?X.isApproved:X.approve;if(!(x.address&&X.address))throw new U("core_approve_asset_address_or_from_not_found");return $({amount:x.getBaseValue("bigint"),assetAddress:x.address,from:X.address,spenderAddress:z})}async function k({assetValue:x,recipient:q,router:z,...H}){let L=f==="thorchain"?Px:fx,{chain:J,symbol:X,ticker:$}=x,I=R(J);if(!I)throw new U("core_wallet_connection_not_found");let{address:v}=I;if(!S({address:v,chain:J}))throw new U("core_transaction_invalid_sender_address");let _=C({from:v,assetValue:x,recipient:q,router:z,...H});try{let j=L?.[J];if(!j){let B=R(J);return Q===J&&q===""?B.deposit(_):B.transfer(_)}let{getChecksumAddressFromAsset:G}=await import("@swapkit/toolboxes/evm");return R(J).call({abi:j,contractAddress:z||(await Z(J)).router,funcName:"depositWithExpiry",funcParams:[q,G({chain:J,symbol:X,ticker:$},J),x.getBaseValue("string"),_.memo,H.expiration||Number.parseInt(`${(Date.now()+900000)/1000}`)],txOverrides:{from:_.from,value:x.isGasAsset?x.getBaseValue("bigint"):void 0}})}catch(j){let G=typeof j==="string"?j.toLowerCase():j?.message.toLowerCase(),D=G?.includes("insufficient funds"),B=G?.includes("gas"),W=G?.includes("server"),qx=G?.includes("user rejected");throw new U(D?"core_transaction_deposit_insufficient_funds_error":B?"core_transaction_deposit_gas_error":W?"core_transaction_deposit_server_error":qx?"core_transaction_user_rejected":"core_transaction_deposit_error",j)}}async function T({memo:x,assetValue:q}){let z=await V.thornode.getMimirInfo(f);if(z.HALTCHAINGLOBAL>=1||z.HALTTHORCHAIN>=1)throw new U("thorchain_chain_halted");return k({assetValue:q,recipient:"",memo:x})}async function N({assetValue:x,memo:q,feeOptionKey:z=b.Fast}){let{gas_rate:H="0",router:L,address:J}=await Z(x.chain);return k({assetValue:x,recipient:J,memo:q,router:L,feeRate:Number.parseInt(H)*Ox[z]})}function n({assetValue:x}){return K({assetValue:x,type:g.Approve})}function d({assetValue:x}){return K({assetValue:x,type:g.CheckOnly})}function u({assetValue:x,...q}){return T({assetValue:x,memo:Ux(q)})}function r({assetValue:x,payoutAddress:q,name:z,ownerAddress:H}){let L=q||R(x.chain)?.address;if(!L)throw new U("thorchain_preferred_asset_payout_required");return T({assetValue:O.from({chain:Q}),memo:Rx({asset:x.toString(),chain:x.chain,name:z,owner:H,payout:L})})}function o({type:x,assetValue:q,address:z}){let H=x===F.UNBOND?Yx({address:z,unbondAmount:q.getBaseValue("number")}):Qx({type:x,address:z}),L=x===F.BOND?q:c(Q);return T({memo:H,assetValue:L})}async function i({baseAssetValue:x,assetValue:q}){if(x.lte(0)||q.lte(0))throw new U("core_transaction_create_liquidity_invalid_params");let z=R(q.chain).address,H=R(Q).address,L=await M(()=>{return N({assetValue:x,memo:E({...q,address:z})})},"core_transaction_create_liquidity_base_error"),J=await M(()=>{return N({assetValue:q,memo:E({...q,address:H})})},"core_transaction_create_liquidity_asset_error");return{baseAssetTx:L,assetTx:J}}function l({assetValue:x,poolAddress:q,address:z,symmetric:H}){if(H&&!z)throw new U("core_transaction_add_liquidity_invalid_params");let L=E({chain:q.split(".")[0],symbol:q.split(".")[1],address:H?z:""});return N({assetValue:x,memo:L})}async function t({baseAssetValue:x,assetValue:q,baseAssetAddr:z,assetAddr:H,isPendingSymmAsset:L,mode:J="sym"}){let{chain:X,symbol:$}=q,I=J==="sym",v=x?.gt(0)&&(I||J==="baseAsset"),y=q?.gt(0)&&(I||J==="asset"),_=L||v,j=R(Q).address,G=_?z||j:"",D=I||J==="asset"?H||R(X).address:"";if(!(v||y))throw new U("core_transaction_add_liquidity_invalid_params");if(_&&!G)throw new U("core_transaction_add_liquidity_base_address");let B=v&&x?await M(()=>{return N({assetValue:x,memo:E({chain:X,symbol:$,address:D})})},"core_transaction_add_liquidity_base_error"):void 0,W=y&&q?await M(()=>{return N({assetValue:q,memo:E({chain:X,symbol:$,address:G})})},"core_transaction_add_liquidity_asset_error"):void 0;return{baseAssetTx:B,assetTx:W}}function s({memo:x,assetValue:q,percent:z,from:H,to:L}){let J=L==="baseAsset"&&H!=="baseAsset"?O.from({chain:Q}):H==="sym"&&L==="sym"||H==="baseAsset"||H==="asset"?void 0:q,X=c(H==="asset"?q.chain:Q),$=x||Zx({symbol:q.symbol,chain:q.chain,ticker:q.ticker,basisPoints:Math.min(1e4,Math.round(z*100)),targetAsset:J?.toString()});return N({assetValue:X,memo:$})}async function a({chain:x,thorAddress:q}){let z=await Z(x),H=z.dust_threshold;return k({assetValue:O.from({chain:x,fromBaseDecimal:Math.min(A[x],A[Y.THORChain]),value:x!==Y.THORChain?H:0}),recipient:z.address,memo:Xx(F.CLAIM_TCY,{address:q}),router:z.router})}function e(x){if(x.type==="stake"){if(x.assetValue.toString()!=="THOR.TCY")throw new U("thorchain_asset_is_not_tcy");return k({assetValue:x.assetValue,recipient:"",memo:m(F.STAKE_TCY,{})})}return k({assetValue:O.from({chain:Y.THORChain}),recipient:"",memo:m(F.UNSTAKE_TCY,{unstakeBps:x.unstakeBps})})}async function xx({feeOptionKey:x,route:q}){let{memo:z,expiration:H,targetAddress:L}=q,J=await O.from({asyncTokenLookup:!0,asset:q.sellAsset,value:q.sellAmount});if(!J)throw new U("core_swap_asset_not_recognized");if(!S({address:q.destinationAddress,chain:O.from({asset:q.buyAsset}).chain}))throw new U("core_transaction_invalid_recipient_address");let{address:$}=await Z(J.chain);return k({expiration:Number(H),assetValue:J,memo:z,feeOptionKey:x,router:L,recipient:$})}return{addLiquidity:t,addLiquidityPart:l,approveAssetValue:n,createLiquidity:i,deposit:k,depositToPool:N,getInboundDataByChain:Z,isAssetValueApproved:d,nodeAction:o,registerName:u,registerPreferredAsset:r,claimTcy:a,stakeTcyAction:e,swap:xx,withdraw:s}}}export{S as validateAddressType,Ix as ThorchainPlugin,vx as MayachainPlugin};
2
2
 
3
- //# debugId=9E969DDFEF3179D664756E2164756E21
3
+ //# debugId=F6AA30731600153364756E2164756E21
4
4
  //# sourceMappingURL=index.js.map
@@ -2,10 +2,10 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/thorchain/plugin.ts", "../src/thorchain/shared.ts"],
4
4
  "sourcesContent": [
5
- "import {\n ApproveMode,\n type ApproveReturnType,\n AssetValue,\n Chain,\n type CryptoChain,\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 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\";\nimport { prepareTxParams, validateAddressType } from \"./shared\";\nimport type {\n AddLiquidityParams,\n AddLiquidityPartParams,\n CoreTxParams,\n CreateLiquidityParams,\n NodeActionParams,\n RegisterThornameParams,\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 CryptoChain);\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 // @Towan: Is that the same action? :)\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({ assetValue }: { assetValue: AssetValue }) {\n return approve({ assetValue, type: ApproveMode.Approve });\n }\n\n function isAssetValueApproved({ assetValue }: { assetValue: AssetValue }) {\n return approve({ assetValue, 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 CryptoChain)?.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 CryptoChain).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 CryptoChain).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 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 swap,\n withdraw,\n };\n };\n}\n",
5
+ "import {\n ApproveMode,\n type ApproveReturnType,\n AssetValue,\n BaseDecimal,\n Chain,\n type CryptoChain,\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 getMemoForTcyClaim,\n getMemoForTcyStake,\n getMemoForUnbond,\n getMemoForWithdraw,\n getMinAmountByChain,\n wrapWithThrow,\n} from \"@swapkit/helpers\";\nimport {\n type InboundAddressesItem,\n type QuoteResponseRoute,\n SwapKitApi,\n type THORNodeType,\n} from \"@swapkit/helpers/api\";\nimport {\n MayaArbitrumVaultAbi,\n MayaEthereumVaultAbi,\n TCAvalancheDepositABI,\n TCBaseDepositABI,\n TCBscDepositABI,\n TCEthereumVaultAbi,\n} from \"@swapkit/helpers/contracts\";\nimport { prepareTxParams, validateAddressType } from \"./shared\";\nimport type {\n AddLiquidityParams,\n AddLiquidityPartParams,\n CoreTxParams,\n CreateLiquidityParams,\n NodeActionParams,\n RegisterThornameParams,\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 {\n gas_rate: \"0\",\n router: \"\",\n address: \"\",\n halted: false,\n chain,\n dust_threshold: \"0\",\n } as InboundAddressesItem;\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 CryptoChain);\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 // @Towan: Is that the same action? :)\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({ assetValue }: { assetValue: AssetValue }) {\n return approve({ assetValue, type: ApproveMode.Approve });\n }\n\n function isAssetValueApproved({ assetValue }: { assetValue: AssetValue }) {\n return approve({ assetValue, 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 CryptoChain)?.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 CryptoChain).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 CryptoChain).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 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 claimTcy({ chain, thorAddress }: { chain: Chain; thorAddress: string }) {\n const inboundData = await getInboundDataByChain(chain);\n const dust_threshold = inboundData.dust_threshold;\n\n return deposit({\n assetValue: AssetValue.from({\n chain,\n fromBaseDecimal: Math.min(BaseDecimal[chain], BaseDecimal[Chain.THORChain]),\n value: chain !== Chain.THORChain ? dust_threshold : 0,\n }),\n recipient: inboundData.address,\n memo: getMemoForTcyClaim(MemoType.CLAIM_TCY, { address: thorAddress }),\n router: inboundData.router,\n });\n }\n\n function stakeTcyAction(\n params: { type: \"unstake\"; unstakeBps: number } | { type: \"stake\"; assetValue: AssetValue },\n ) {\n if (params.type === \"stake\") {\n if (params.assetValue.toString() !== \"THOR.TCY\") {\n throw new SwapKitError(\"thorchain_asset_is_not_tcy\");\n }\n\n return deposit({\n assetValue: params.assetValue,\n recipient: \"\",\n memo: getMemoForTcyStake(MemoType.STAKE_TCY, {}),\n });\n }\n\n return deposit({\n assetValue: AssetValue.from({\n chain: Chain.THORChain,\n }),\n recipient: \"\",\n memo: getMemoForTcyStake(MemoType.UNSTAKE_TCY, {\n unstakeBps: params.unstakeBps,\n }),\n });\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 claimTcy,\n stakeTcyAction,\n swap,\n withdraw,\n };\n };\n}\n",
6
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 return chain === Chain.Bitcoin ? !address.startsWith(\"bc1p\") : true;\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
7
  ],
8
- "mappings": "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",
9
- "debugId": "9E969DDFEF3179D664756E2164756E21",
8
+ "mappings": "kDAAA,sBACE,gBAEA,iBACA,WACA,eAGA,gBAEA,cACA,kBACA,kBACA,kBAGA,uBACA,4BACA,2CACA,6BACA,yBACA,yBACA,sBACA,yBACA,0BACA,mBACA,yBAEF,qBAGE,6BAGF,+BACE,2BACA,4BACA,uBACA,sBACA,yBACA,oCCxCF,gBAAS,0BAGF,SAAS,CAAmB,EAAG,QAAO,WAAgD,CAC3F,IAAK,EAAS,MAAO,GAErB,OAAO,IAAU,GAAM,SAAW,EAAQ,WAAW,MAAM,EAAI,GAG1D,SAAS,CAAe,EAC7B,aACA,OACA,OAAO,MACJ,GACgD,CACnD,MAAO,IAAK,EAAc,OAAM,OAAM,YAAW,EDsCnD,IAAM,GAA8C,EACjD,EAAU,SAAU,KACpB,EAAU,MAAO,KACjB,EAAU,SAAU,CACvB,EAEM,GAAgB,EACnB,EAAM,WAAY,IAClB,EAAM,MAAO,IACb,EAAM,mBAAoB,IAC1B,EAAM,UAAW,EACpB,EAEM,GAAkB,EACrB,EAAM,UAAW,IACjB,EAAM,UAAW,EACpB,EAEa,GAAkB,EAAa,CAC1C,KAAM,YACN,QAAS,EAAoB,EAAM,SAAS,EAC5C,WAAY,CACV,0BAA2B,CAAC,EAAa,UAAW,EAAa,mBAAmB,CACtF,CACF,CAAC,EAEY,GAAkB,EAAa,CAC1C,KAAM,YACN,QAAS,EAAoB,EAAM,IAAI,EACvC,WAAY,CACV,0BAA2B,CAAC,EAAa,SAAS,CACpD,CACF,CAAC,EAED,SAAS,EAAsB,CAAC,EAAqB,CACnD,OAAO,eAAe,CAAsC,CAAC,EAAU,CACrE,GACG,IAAS,aAAe,IAAU,EAAM,WACxC,IAAS,aAAe,IAAU,EAAM,KAEzC,MAAO,CACL,SAAU,IACV,OAAQ,GACR,QAAS,GACT,OAAQ,GACR,QACA,eAAgB,GAClB,EAIF,IAAM,GADc,MAAM,EAAW,SAAS,oBAAoB,CAAI,GACjC,KAAK,CAAC,IAAS,EAAK,QAAU,CAAK,EAExE,IAAK,EAAkB,MAAM,IAAI,EAAa,6BAA6B,EAC3E,GAAI,GAAkB,OAAQ,MAAM,IAAI,EAAa,mBAAmB,EAExE,OAAO,GAMX,SAAS,CAA0C,CAAC,EAAgB,CAClE,OAAO,SAAS,CAAM,EAAG,aAAkC,CACzD,IAAM,EAAa,IAAgB,EAAM,KAAO,YAAc,YACxD,EAAwB,GAAuB,CAAU,EAG/D,eAAe,CAA8B,EAC3C,aACA,OAAO,aAC+B,CACtC,IAAM,GAAU,MAAM,EAAsB,EAAW,KAAK,GAAG,OAEzD,EAAQ,EAAW,MAEnB,EAAa,GAAU,SAAS,CAAiB,EAGvD,GAFoB,GAAc,EAAW,aAEzB,GAAc,EAAW,YAC3C,OAAO,QAAQ,QAAQ,IAAS,YAAc,GAAO,UAAU,EAGjE,IAAM,EAAS,EAAU,CAAK,EAE9B,IAAK,EACH,MAAM,IAAI,EAAa,kCAAkC,EAG3D,IAAM,EAAe,IAAS,YAAc,EAAO,WAAa,EAAO,QAEvE,KAAM,EAAW,SAAW,EAAO,SACjC,MAAM,IAAI,EAAa,8CAA8C,EAGvE,OAAO,EAAa,CAClB,OAAQ,EAAW,aAAa,QAAQ,EACxC,aAAc,EAAW,QACzB,KAAM,EAAO,QACb,eAAgB,CAClB,CAAC,EAIH,eAAe,CAAO,EACpB,aACA,YACA,YACG,GACkC,CACrC,IAAM,EAAO,IAAe,YAAc,GAAgB,IAClD,QAAO,SAAQ,UAAW,EAE5B,EAAS,EAAU,CAAoB,EAC7C,IAAK,EACH,MAAM,IAAI,EAAa,kCAAkC,EAE3D,IAAQ,WAAY,EAEpB,IAD2B,EAAoB,CAAE,UAAS,OAAM,CAAC,EAE/D,MAAM,IAAI,EAAa,yCAAyC,EAGlE,IAAM,EAAS,EAAgB,CAAE,KAAM,EAAS,aAAY,YAAW,YAAW,CAAK,CAAC,EAExF,GAAI,CACF,IAAM,EAAM,IAAO,GAEnB,IAAK,EAAK,CACR,IAAM,EAAS,EAAU,CAAoB,EAG7C,OAFsB,IAAgB,GAAS,IAAc,GAEtC,EAAO,QAAQ,CAAM,EAAI,EAAO,SAAS,CAAM,EAGxE,IAAQ,+BAAgC,KAAa,kCAGrD,OAFe,EAAU,CAAiB,EAE5B,KAAa,CACzB,MACA,gBAAiB,IAAY,MAAM,EAAsB,CAAK,GAAG,OACjE,SAAU,oBACV,WAAY,CACV,EACA,EAA4B,CAAE,QAAO,SAAQ,QAAO,EAAG,CAAiB,EACxE,EAAW,aAAa,QAAQ,EAChC,EAAO,KACP,EAAK,YAAc,OAAO,SAAS,IAAI,KAAK,IAAI,EAAI,QAAkB,MAAM,CAC9E,EACA,YAAa,CACX,KAAM,EAAO,KACb,MAAO,EAAW,WAAa,EAAW,aAAa,QAAQ,EAAI,MACrE,CACF,CAAC,EACD,MAAO,EAAO,CACd,IAAM,EAEJ,OAAO,IAAU,SAAW,EAAM,YAAY,EAAI,GAAO,QAAQ,YAAY,EACzE,EAAsB,GAAc,SAAS,oBAAoB,EACjE,EAAQ,GAAc,SAAS,KAAK,EACpC,EAAW,GAAc,SAAS,QAAQ,EAC1C,GAAiB,GAAc,SAAS,eAAe,EAW7D,MAAM,IAAI,EAVkB,EACxB,oDACA,EACE,qCACA,EACE,wCACA,GACE,iCACA,iCAEuB,CAAK,GAI1C,eAAe,CAAiB,EAC9B,OACA,cAC2C,CAC3C,IAAM,EAAQ,MAAM,EAAW,SAAS,aAAa,CAAU,EAG/D,GAAI,EAAM,iBAAmB,GAAK,EAAM,eAAiB,EACvD,MAAM,IAAI,EAAa,wBAAwB,EAGjD,OAAO,EAAQ,CAAE,aAAY,UAAW,GAAI,MAAK,CAAC,EAGpD,eAAe,CAAa,EAC1B,aACA,OACA,eAAe,EAAU,MAC4C,CACrE,IACE,WAAW,IACX,SACA,QAAS,GACP,MAAM,EAAsB,EAAW,KAAK,EAEhD,OAAO,EAAQ,CACb,aACA,UAAW,EACX,OACA,SACA,QAAS,OAAO,SAAS,CAAQ,EAAI,GAAiB,EACxD,CAAC,EAGH,SAAS,CAAiB,EAAG,cAA0C,CACrE,OAAO,EAAQ,CAAE,aAAY,KAAM,EAAY,OAAQ,CAAC,EAG1D,SAAS,CAAoB,EAAG,cAA0C,CACxE,OAAO,EAAQ,CAAE,aAAY,KAAM,EAAY,SAAU,CAAC,EAG5D,SAAS,CAAY,EAAG,gBAAe,GAAkC,CACvE,OAAO,EAAkB,CAAE,aAAY,KAAM,GAAuB,CAAM,CAAE,CAAC,EAG/E,SAAS,CAAsB,EAC7B,aACA,gBACA,OACA,gBAMC,CACD,IAAM,EAAS,GAAiB,EAAU,EAAW,KAAoB,GAAG,QAE5E,IAAK,EACH,MAAM,IAAI,EAAa,2CAA2C,EAGpE,OAAO,EAAkB,CACvB,WAAY,EAAW,KAAK,CAAE,MAAO,CAAY,CAAC,EAClD,KAAM,GAAqC,CACzC,MAAO,EAAW,SAAS,EAC3B,MAAO,EAAW,MAClB,OACA,MAAO,EACP,QACF,CAAC,CACH,CAAC,EAGH,SAAS,CAAU,EAAG,OAAM,aAAY,WAA6B,CACnE,IAAM,EACJ,IAAS,EAAS,OACd,GAAiB,CAAE,UAAS,aAAc,EAAW,aAAa,QAAQ,CAAE,CAAC,EAC7E,GAAuB,CAAE,OAAM,SAAQ,CAAC,EAExC,EACJ,IAAS,EAAS,KAAO,EAAa,EAAoB,CAAW,EACvE,OAAO,EAAkB,CAAE,OAAM,WAAY,CAAgB,CAAC,EAGhE,eAAe,CAAe,EAAG,iBAAgB,cAAqC,CACpF,GAAI,EAAe,IAAI,CAAC,GAAK,EAAW,IAAI,CAAC,EAC3C,MAAM,IAAI,EAAa,kDAAkD,EAG3E,IAAM,EAAe,EAAU,EAAW,KAAoB,EAAE,QAC1D,EAAmB,EAAU,CAAW,EAAE,QAE1C,EAAc,MAAM,EAAc,IAAM,CAC5C,OAAO,EAAc,CACnB,WAAY,EACZ,KAAM,EAAkB,IAAK,EAAY,QAAS,CAAa,CAAC,CAClE,CAAC,GACA,8CAA8C,EAE3C,EAAU,MAAM,EAAc,IAAM,CACxC,OAAO,EAAc,CACnB,aACA,KAAM,EAAkB,IAAK,EAAY,QAAS,CAAiB,CAAC,CACtE,CAAC,GACA,+CAA+C,EAElD,MAAO,CAAE,cAAa,SAAQ,EAGhC,SAAS,CAAgB,EACvB,aACA,cACA,UACA,aACyB,CACzB,GAAI,IAAc,EAChB,MAAM,IAAI,EAAa,+CAA+C,EAExE,IAAM,EAAO,EAAkB,CAC7B,MAAO,EAAY,MAAM,GAAG,EAAE,GAC9B,OAAQ,EAAY,MAAM,GAAG,EAAE,GAC/B,QAAS,EAAY,EAAU,EACjC,CAAC,EAED,OAAO,EAAc,CAAE,aAAY,MAAK,CAAC,EAI3C,eAAe,CAAY,EACzB,iBACA,aACA,gBACA,YACA,qBACA,OAAO,OACc,CACrB,IAAQ,QAAO,UAAW,EACpB,EAAQ,IAAS,MACjB,EAAe,GAAgB,GAAG,CAAC,IAAM,GAAS,IAAS,aAC3D,EAAgB,GAAY,GAAG,CAAC,IAAM,GAAS,IAAS,SACxD,EAAqB,GAAsB,EAC3C,EAAyB,EAAU,CAAW,EAAE,QAEhD,EAAc,EAAqB,GAAiB,EAAyB,GAC7E,EACJ,GAAS,IAAS,QAAU,GAAa,EAAU,CAAoB,EAAE,QAAU,GAErF,KAAM,GAAgB,GACpB,MAAM,IAAI,EAAa,+CAA+C,EAExE,GAAI,IAAuB,EACzB,MAAM,IAAI,EAAa,6CAA6C,EAGtE,IAAM,EACJ,GAAgB,EACZ,MAAM,EAAc,IAAM,CACxB,OAAO,EAAc,CACnB,WAAY,EACZ,KAAM,EAAkB,CAAE,QAAO,SAAQ,QAAS,CAAa,CAAC,CAClE,CAAC,GACA,2CAA2C,EAC9C,OAEA,EACJ,GAAiB,EACb,MAAM,EAAc,IAAM,CACxB,OAAO,EAAc,CACnB,aACA,KAAM,EAAkB,CAAE,QAAO,SAAQ,QAAS,CAAY,CAAC,CACjE,CAAC,GACA,4CAA4C,EAC/C,OAEN,MAAO,CAAE,cAAa,SAAQ,EAGhC,SAAS,CAAQ,EAAG,OAAM,aAAY,UAAS,OAAM,MAAsB,CACzE,IAAM,EACJ,IAAO,aAAe,IAAS,YAC3B,EAAW,KAAK,CAAE,MAAO,CAAY,CAAC,EACrC,IAAS,OAAS,IAAO,OAAU,IAAS,aAAe,IAAS,QACnE,OACA,EAEF,EAAQ,EAAoB,IAAS,QAAU,EAAW,MAAQ,CAAW,EAC7E,EACJ,GACA,GAAmB,CACjB,OAAQ,EAAW,OACnB,MAAO,EAAW,MAClB,OAAQ,EAAW,OACnB,YAAa,KAAK,IAAI,IAAO,KAAK,MAAM,EAAU,GAAG,CAAC,EACtD,YAAa,GAAa,SAAS,CACrC,CAAC,EAEH,OAAO,EAAc,CAAE,WAAY,EAAO,KAAM,CAAW,CAAC,EAG9D,eAAe,CAAQ,EAAG,QAAO,eAAsD,CACrF,IAAM,EAAc,MAAM,EAAsB,CAAK,EAC/C,EAAiB,EAAY,eAEnC,OAAO,EAAQ,CACb,WAAY,EAAW,KAAK,CAC1B,QACA,gBAAiB,KAAK,IAAI,EAAY,GAAQ,EAAY,EAAM,UAAU,EAC1E,MAAO,IAAU,EAAM,UAAY,EAAiB,CACtD,CAAC,EACD,UAAW,EAAY,QACvB,KAAM,GAAmB,EAAS,UAAW,CAAE,QAAS,CAAY,CAAC,EACrE,OAAQ,EAAY,MACtB,CAAC,EAGH,SAAS,CAAc,CACrB,EACA,CACA,GAAI,EAAO,OAAS,QAAS,CAC3B,GAAI,EAAO,WAAW,SAAS,IAAM,WACnC,MAAM,IAAI,EAAa,4BAA4B,EAGrD,OAAO,EAAQ,CACb,WAAY,EAAO,WACnB,UAAW,GACX,KAAM,EAAmB,EAAS,UAAW,CAAC,CAAC,CACjD,CAAC,EAGH,OAAO,EAAQ,CACb,WAAY,EAAW,KAAK,CAC1B,MAAO,EAAM,SACf,CAAC,EACD,UAAW,GACX,KAAM,EAAmB,EAAS,YAAa,CAC7C,WAAY,EAAO,UACrB,CAAC,CACH,CAAC,EAGH,eAAe,EAAI,EACjB,eACA,SACoD,CACpD,IAAQ,OAAM,aAAY,iBAAkB,EAEtC,EAAa,MAAM,EAAW,KAAK,CACvC,iBAAkB,GAClB,MAAO,EAAM,UACb,MAAO,EAAM,UACf,CAAC,EAED,IAAK,EACH,MAAM,IAAI,EAAa,gCAAgC,EAQzD,IAL6B,EAAoB,CAC/C,QAAS,EAAM,mBACf,MAAO,EAAW,KAAK,CAAE,MAAO,EAAM,QAAS,CAAC,EAAE,KACpD,CAAC,EAGC,MAAM,IAAI,EAAa,4CAA4C,EAGrE,IAAQ,QAAS,GAAc,MAAM,EAAsB,EAAW,KAAK,EAE3E,OAAO,EAAQ,CACb,WAAY,OAAO,CAAU,EAC7B,aACA,OACA,eACA,OAAQ,EACR,WACF,CAAC,EAGH,MAAO,CACL,eACA,mBACA,oBACA,kBACA,UACA,gBACA,wBACA,uBACA,aACA,eACA,yBACA,WACA,iBACA,QACA,UACF",
9
+ "debugId": "F6AA30731600153364756E2164756E21",
10
10
  "names": []
11
11
  }
package/package.json CHANGED
@@ -4,8 +4,8 @@
4
4
  "@polkadot/keyring": "^13.5.0",
5
5
  "@polkadot/util": "^13.5.0",
6
6
  "@solana/web3.js": "^1.98.0",
7
- "@swapkit/helpers": "^4.0.0-beta.24",
8
- "@swapkit/toolboxes": "^4.0.0-beta.36",
7
+ "@swapkit/helpers": "^4.0.0-beta.26",
8
+ "@swapkit/toolboxes": "^4.0.0-beta.38",
9
9
  "ts-pattern": "^5.0.0"
10
10
  },
11
11
  "devDependencies": {
@@ -56,13 +56,13 @@
56
56
  "src/",
57
57
  "dist/"
58
58
  ],
59
- "homepage": "https://github.com/thorswap/SwapKit",
59
+ "homepage": "https://github.com/swapkit/SwapKit",
60
60
  "license": "Apache-2.0",
61
61
  "name": "@swapkit/plugins",
62
62
  "repository": {
63
63
  "directory": "packages/plugins",
64
64
  "type": "git",
65
- "url": "git+https://github.com/thorswap/SwapKit.git"
65
+ "url": "git+https://github.com/swapkit/SwapKit.git"
66
66
  },
67
67
  "scripts": {
68
68
  "build": "bun run ./build.ts",
@@ -72,5 +72,5 @@
72
72
  "type-check:go": "tsgo"
73
73
  },
74
74
  "type": "module",
75
- "version": "4.0.0-beta.36"
75
+ "version": "4.0.0-beta.38"
76
76
  }
package/src/near/index.ts CHANGED
@@ -1,9 +1,2 @@
1
1
  export * from "./plugin";
2
- export type {
3
- NearDepositChannelParams,
4
- NearSwapResponse,
5
- NearSwapRoute,
6
- NearTokenInfo,
7
- NearNameInfo,
8
- NearNameRegistrationParams,
9
- } from "./types";
2
+ export * from "./types";
@@ -1,20 +1,16 @@
1
1
  import {
2
2
  AssetValue,
3
3
  Chain,
4
+ type CryptoChain,
4
5
  ProviderName,
5
6
  SwapKitError,
6
7
  type SwapParams,
7
8
  createPlugin,
8
9
  } from "@swapkit/helpers";
9
- import { SwapKitApi } from "@swapkit/helpers/api";
10
+ import { type QuoteResponseRoute, SwapKitApi } from "@swapkit/helpers/api";
10
11
  import type { NearWallet } from "@swapkit/toolboxes/near";
11
12
  import { calculateNearNameCost, validateNearName } from "./nearNames";
12
- import type {
13
- NearDepositChannelParams,
14
- NearNameRegistrationParams,
15
- NearSwapResponse,
16
- NearSwapRoute,
17
- } from "./types";
13
+ import type { NearNameRegistrationParams } from "./types";
18
14
 
19
15
  export const NearPlugin = createPlugin({
20
16
  name: "near",
@@ -22,62 +18,41 @@ export const NearPlugin = createPlugin({
22
18
  supportedSwapkitProviders: [ProviderName.NEAR],
23
19
  },
24
20
  methods: ({ getWallet }) => ({
25
- async swap({
26
- route,
27
- recipient,
28
- }: SwapParams<{
29
- route: NearSwapRoute & {
30
- meta?: {
31
- nearSwapInfo?: NearDepositChannelParams;
32
- };
33
- };
34
- }>) {
35
- const { meta } = route as any;
36
- if (!meta?.nearSwapInfo) {
37
- throw new SwapKitError("core_swap_invalid_params", {
38
- message: "Missing NEAR swap metadata",
39
- });
21
+ async swap(swapParams: SwapParams<"near", QuoteResponseRoute>) {
22
+ const {
23
+ route: {
24
+ buyAsset: buyAssetString,
25
+ sellAsset: sellAssetString,
26
+ sellAmount,
27
+ meta: { near },
28
+ },
29
+ } = swapParams;
30
+
31
+ if (!(sellAssetString && buyAssetString && near?.sellAsset)) {
32
+ throw new SwapKitError("core_swap_asset_not_recognized");
40
33
  }
41
34
 
42
- const nearSwapInfo = meta.nearSwapInfo;
43
- const srcWallet = await getWallet(nearSwapInfo.srcChain);
44
-
45
- const nearDepositChannelParams: NearDepositChannelParams = {
46
- ...nearSwapInfo,
47
- toAddress: recipient || (await srcWallet.getAddress()),
48
- };
35
+ const sellAsset = await AssetValue.from({
36
+ asyncTokenLookup: true,
37
+ asset: sellAssetString,
38
+ value: sellAmount,
39
+ });
49
40
 
50
- // TODO: UPSTREAM getNearDepositChannel in SwapKitApi from v3 branch
51
- const response = await (SwapKitApi as any).getNearDepositChannel?.(nearDepositChannelParams);
52
- if (!response) {
53
- throw new SwapKitError("core_plugin_not_found", {
54
- info: "NEAR deposit channel API not implemented",
55
- });
56
- }
57
- const nearResponse = response as NearSwapResponse;
41
+ const wallet = getWallet(sellAsset.chain as Exclude<CryptoChain, Chain.Radix>);
58
42
 
59
- if (!nearResponse.isSuccess) {
60
- throw new SwapKitError("core_swap_invalid_params", {
61
- message: "Failed to create NEAR deposit channel",
62
- });
43
+ if (!wallet) {
44
+ throw new SwapKitError("core_wallet_connection_not_found");
63
45
  }
64
46
 
65
- const { channelId, depositAddress } = nearResponse.response;
66
-
67
- const assetValue = AssetValue.from({
68
- chain: nearSwapInfo.srcChain,
69
- symbol: nearSwapInfo.srcToken,
70
- value: nearSwapInfo.amount,
71
- decimal: (route as any).srcToken.decimals,
72
- });
47
+ const { depositAddress } = await SwapKitApi.getNearDepositChannel(near);
73
48
 
74
- const txHash = await srcWallet.transfer({
75
- assetValue,
49
+ const tx = await wallet.transfer({
50
+ assetValue: sellAsset,
76
51
  recipient: depositAddress,
77
- memo: channelId,
52
+ isProgramDerivedAddress: true,
78
53
  });
79
54
 
80
- return txHash;
55
+ return tx as string;
81
56
  },
82
57
 
83
58
  // NEAR Names functionality
package/src/near/types.ts CHANGED
@@ -1,59 +1,3 @@
1
- export type NearTokenInfo = {
2
- address: string;
3
- chainId: number;
4
- decimals: number;
5
- identifier: string;
6
- ticker: string;
7
- };
8
-
9
- export type NearSwapRoute = {
10
- amount: string;
11
- dstToken: NearTokenInfo;
12
- srcToken: NearTokenInfo;
13
- };
14
-
15
- export type NearDepositChannelParams = {
16
- amount: string;
17
- blockNumber: number;
18
- fromAddress: string;
19
- srcToken?: string;
20
- toAddress: string;
21
- affiliate?: string;
22
- affiliateFee?: number;
23
- channelId?: string;
24
- chainId?: number;
25
- dstChain?: string;
26
- dstToken?: string;
27
- isAffiliateFeeFlat?: boolean;
28
- srcChain?: string;
29
- txnMetadata?: string;
30
- };
31
-
32
- export type NearSwapResponse = {
33
- amount: {
34
- deposit: string;
35
- estimatedOutput: string;
36
- };
37
- dstChain: string;
38
- dstToken: string;
39
- estimatedWaitTime: {
40
- deposit: string;
41
- swap: string;
42
- };
43
- isSuccess: boolean;
44
- response: {
45
- channelId: string;
46
- depositAddress: string;
47
- depositChannelBrokerCommissionBps: string;
48
- estimatedDepositChannelExpiryTime: number;
49
- issuedBlock: number;
50
- maxBoostFeeBps: number;
51
- srcChainExpiryBlock: string;
52
- };
53
- srcChain: string;
54
- srcToken: string;
55
- };
56
-
57
1
  export type NearNameInfo = {
58
2
  owner: string;
59
3
  price?: string;
@@ -2,6 +2,7 @@ import {
2
2
  ApproveMode,
3
3
  type ApproveReturnType,
4
4
  AssetValue,
5
+ BaseDecimal,
5
6
  Chain,
6
7
  type CryptoChain,
7
8
  type EVMChain,
@@ -18,12 +19,19 @@ import {
18
19
  getMemoForLeaveAndBond,
19
20
  getMemoForNamePreferredAssetRegister,
20
21
  getMemoForNameRegister,
22
+ getMemoForTcyClaim,
23
+ getMemoForTcyStake,
21
24
  getMemoForUnbond,
22
25
  getMemoForWithdraw,
23
26
  getMinAmountByChain,
24
27
  wrapWithThrow,
25
28
  } from "@swapkit/helpers";
26
- import { type QuoteResponseRoute, SwapKitApi, type THORNodeType } from "@swapkit/helpers/api";
29
+ import {
30
+ type InboundAddressesItem,
31
+ type QuoteResponseRoute,
32
+ SwapKitApi,
33
+ type THORNodeType,
34
+ } from "@swapkit/helpers/api";
27
35
  import {
28
36
  MayaArbitrumVaultAbi,
29
37
  MayaEthereumVaultAbi,
@@ -83,7 +91,14 @@ function getInboundDataFunction(type?: THORNodeType) {
83
91
  (type === "thorchain" && chain === Chain.THORChain) ||
84
92
  (type === "mayachain" && chain === Chain.Maya)
85
93
  ) {
86
- return { gas_rate: "0", router: "", address: "", halted: false, chain };
94
+ return {
95
+ gas_rate: "0",
96
+ router: "",
97
+ address: "",
98
+ halted: false,
99
+ chain,
100
+ dust_threshold: "0",
101
+ } as InboundAddressesItem;
87
102
  }
88
103
 
89
104
  const inboundData = await SwapKitApi.thornode.getInboundAddresses(type);
@@ -413,6 +428,48 @@ function createTCBasedPlugin<T extends PluginChain>(pluginChain: T) {
413
428
  return depositToPool({ assetValue: value, memo: memoString });
414
429
  }
415
430
 
431
+ async function claimTcy({ chain, thorAddress }: { chain: Chain; thorAddress: string }) {
432
+ const inboundData = await getInboundDataByChain(chain);
433
+ const dust_threshold = inboundData.dust_threshold;
434
+
435
+ return deposit({
436
+ assetValue: AssetValue.from({
437
+ chain,
438
+ fromBaseDecimal: Math.min(BaseDecimal[chain], BaseDecimal[Chain.THORChain]),
439
+ value: chain !== Chain.THORChain ? dust_threshold : 0,
440
+ }),
441
+ recipient: inboundData.address,
442
+ memo: getMemoForTcyClaim(MemoType.CLAIM_TCY, { address: thorAddress }),
443
+ router: inboundData.router,
444
+ });
445
+ }
446
+
447
+ function stakeTcyAction(
448
+ params: { type: "unstake"; unstakeBps: number } | { type: "stake"; assetValue: AssetValue },
449
+ ) {
450
+ if (params.type === "stake") {
451
+ if (params.assetValue.toString() !== "THOR.TCY") {
452
+ throw new SwapKitError("thorchain_asset_is_not_tcy");
453
+ }
454
+
455
+ return deposit({
456
+ assetValue: params.assetValue,
457
+ recipient: "",
458
+ memo: getMemoForTcyStake(MemoType.STAKE_TCY, {}),
459
+ });
460
+ }
461
+
462
+ return deposit({
463
+ assetValue: AssetValue.from({
464
+ chain: Chain.THORChain,
465
+ }),
466
+ recipient: "",
467
+ memo: getMemoForTcyStake(MemoType.UNSTAKE_TCY, {
468
+ unstakeBps: params.unstakeBps,
469
+ }),
470
+ });
471
+ }
472
+
416
473
  async function swap({
417
474
  feeOptionKey,
418
475
  route,
@@ -462,6 +519,8 @@ function createTCBasedPlugin<T extends PluginChain>(pluginChain: T) {
462
519
  nodeAction,
463
520
  registerName,
464
521
  registerPreferredAsset,
522
+ claimTcy,
523
+ stakeTcyAction,
465
524
  swap,
466
525
  withdraw,
467
526
  };