@swapkit/toolboxes 1.0.0-beta.5 → 1.0.0-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ripple/index.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
var f={};O(f,{rippleValidateAddress:()=>R,getRippleToolbox:()=>W});module.exports=N(f);var j=require("@swapkit/helpers"),I=require("xrpl");function $(
|
|
1
|
+
var f={};O(f,{rippleValidateAddress:()=>R,getRippleToolbox:()=>W});module.exports=N(f);var j=require("@swapkit/helpers"),I=require("xrpl");function $(y){let z=I.Wallet.fromMnemonic(y);return{getAddress:()=>Promise.resolve(z.address),signTransaction:(M)=>Promise.resolve(z.sign(M))}}function R(y){return I.isValidAddress(y)}var W=async(y={})=>{let z="signer"in y&&y.signer?y.signer:("phrase"in y)&&y.phrase?$(y.phrase):void 0,M=j.SKConfig.get("rpcUrls")[j.Chain.Ripple];if(!M)throw new j.SwapKitError({errorKey:"toolbox_ripple_rpc_not_configured",info:{chain:j.Chain.Ripple}});let L=new I.Client(M);await L.connect();let P=()=>{if(!z)throw new j.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});return z.getAddress()},k=async(v)=>{let G=v||await P();try{await L.connect();let J=(await L.request({command:"account_info",account:G})).result.account_data.Balance;return[j.AssetValue.from({chain:j.Chain.Ripple,value:J,fromBaseDecimal:j.BaseDecimal[j.Chain.Ripple]})]}catch(q){if(q.data.error_code===19)return[j.AssetValue.from({chain:j.Chain.Ripple,value:0})];throw new j.SwapKitError("toolbox_ripple_get_balance_error",{info:{address:G,error:q}})}},F=async()=>{let G=(await L.request({command:"fee"})).result.drops.open_ledger_fee;return j.AssetValue.from({chain:j.Chain.Ripple,value:j.SwapKitNumber.fromBigInt(BigInt(G),j.BaseDecimal[j.Chain.Ripple])})},X=async({assetValue:v,recipient:G,memo:q,sender:J})=>{if(!R(G))throw new j.SwapKitError({errorKey:"core_transaction_invalid_recipient_address"});let Q=J||await P();if(!v.isGasAsset||v.chain!==j.Chain.Ripple)throw new j.SwapKitError({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:v.toString()}});let _={TransactionType:"Payment",Account:Q,Amount:I.xrpToDrops(v.getValue("string")),Destination:G};if(q)_.Memos=[{Memo:{MemoData:Buffer.from(q).toString("hex")}}];return await L.autofill(_)},Y=(v)=>{if(!z)throw new j.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});return z.signTransaction(v)},Z=async(v)=>{let q=(await L.submitAndWait(v)).result;if(q.engine_result==="tesSUCCESS"||q.engine_result==="terQUEUED")return q.tx_json?.hash||q.hash;let J=q.engine_result_message||"Unknown error",Q=q.engine_result||"Unknown code";throw new j.SwapKitError({errorKey:"toolbox_ripple_broadcast_error",info:{chain:j.Chain.Ripple,message:J,code:Q,result:q}})};return{signer:z,createSigner:$,getAddress:P,validateAddress:R,getBalance:k,createTransaction:X,signTransaction:Y,broadcastTransaction:Z,transfer:async(v)=>{if(!z)throw new j.SwapKitError({errorKey:"toolbox_ripple_signer_not_found"});let G=await z.getAddress(),q=await X({...v,sender:G}),J=await Y(q);return Z(J.tx_blob)},estimateTransactionFee:F}};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=030A6CAB97355B8F64756E2164756E21
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/ripple/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import {\n AssetValue,\n BaseDecimal,\n Chain,\n type ChainSigner,\n type
|
|
5
|
+
"import {\n AssetValue,\n BaseDecimal,\n Chain,\n type ChainSigner,\n type GenericTransferParams,\n SKConfig,\n SwapKitError,\n SwapKitNumber,\n} from \"@swapkit/helpers\";\nimport type { Transaction } from \"xrpl\";\nimport { Client, type Payment, Wallet, isValidAddress, xrpToDrops } from \"xrpl\";\n\nexport type RippleWallet = Awaited<ReturnType<typeof getRippleToolbox>>;\n\n// Note: Ripple seeds generate a single address, no derivation path/index support.\nfunction createSigner(phrase: string): ChainSigner<Transaction, { tx_blob: string; hash: string }> {\n const wallet = Wallet.fromMnemonic(phrase);\n return {\n // publicKey: wallet.publicKey,\n // Address is sync, but interface requires async\n getAddress: () => Promise.resolve(wallet.address),\n // Signing is sync, but interface requires async\n signTransaction: (tx: Transaction) => Promise.resolve(wallet.sign(tx as Transaction)), // Cast needed as Wallet.sign expects Transaction\n };\n}\n\nexport function rippleValidateAddress(address: string) {\n return isValidAddress(address);\n}\n\ntype RippleToolboxParams =\n | { phrase: string }\n | { signer: ChainSigner<Transaction, { tx_blob: string; hash: string }> }\n | {};\n\nexport const getRippleToolbox = async (params: RippleToolboxParams = {}) => {\n const signer =\n \"signer\" in params && params.signer\n ? params.signer\n : \"phrase\" in params && params.phrase\n ? createSigner(params.phrase)\n : undefined;\n\n const rpcUrl = SKConfig.get(\"rpcUrls\")[Chain.Ripple];\n if (!rpcUrl) {\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_rpc_not_configured\",\n info: { chain: Chain.Ripple },\n });\n }\n\n const client = new Client(rpcUrl);\n await client.connect();\n\n const getAddress = () => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n return signer.getAddress();\n };\n\n const getBalance = async (address?: string) => {\n const addr = address || (await getAddress());\n\n try {\n await client.connect();\n const accountInfo = await client.request({\n command: \"account_info\",\n account: addr,\n });\n\n const balance = accountInfo.result.account_data.Balance;\n\n return [\n AssetValue.from({\n chain: Chain.Ripple,\n value: balance,\n fromBaseDecimal: BaseDecimal[Chain.Ripple],\n }),\n ];\n } catch (error) {\n // empty account\n if ((error as any).data.error_code === 19) {\n return [\n AssetValue.from({\n chain: Chain.Ripple,\n value: 0,\n }),\n ];\n }\n throw new SwapKitError(\"toolbox_ripple_get_balance_error\", {\n info: { address: addr, error },\n });\n }\n };\n\n const estimateTransactionFee = async () => {\n const feeResponse = await client.request({ command: \"fee\" });\n const feeDrops = feeResponse.result.drops.open_ledger_fee; // Fee in drops\n\n return AssetValue.from({\n chain: Chain.Ripple,\n value: SwapKitNumber.fromBigInt(BigInt(feeDrops), BaseDecimal[Chain.Ripple]),\n });\n };\n\n const createTransaction = async ({\n assetValue,\n recipient,\n memo,\n sender,\n }: { assetValue: AssetValue; recipient: string; sender?: string; memo?: string }) => {\n if (!rippleValidateAddress(recipient)) {\n throw new SwapKitError({ errorKey: \"core_transaction_invalid_recipient_address\" });\n }\n\n const senderAddress = sender || (await getAddress());\n\n if (!assetValue.isGasAsset || assetValue.chain !== Chain.Ripple) {\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_asset_not_supported\",\n info: { asset: assetValue.toString() },\n });\n }\n\n const transaction: Payment = {\n TransactionType: \"Payment\",\n Account: senderAddress,\n Amount: xrpToDrops(assetValue.getValue(\"string\")),\n Destination: recipient,\n };\n\n if (memo) {\n transaction.Memos = [{ Memo: { MemoData: Buffer.from(memo).toString(\"hex\") } }];\n }\n\n const preparedTx = await client.autofill(transaction);\n return preparedTx;\n };\n\n const signTransaction = (tx: Transaction) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n return signer.signTransaction(tx);\n };\n\n const broadcastTransaction = async (signedTxHex: string) => {\n const submitResult = await client.submitAndWait(signedTxHex);\n // Cast result to any to bypass potential type mismatches in xrpl.js definitions\n const result: any = submitResult.result;\n\n // Check engine_result directly on result\n if (result.engine_result === \"tesSUCCESS\" || result.engine_result === \"terQUEUED\") {\n // Access hash from tx_json if available, otherwise fallback to result.hash\n return result.tx_json?.hash || result.hash;\n }\n\n const message = result.engine_result_message || \"Unknown error\";\n const code = result.engine_result || \"Unknown code\";\n\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_broadcast_error\",\n info: { chain: Chain.Ripple, message, code, result },\n // Remove explicit message when using object format\n });\n };\n\n const transfer = async (params: GenericTransferParams) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n const sender = await signer.getAddress();\n const tx = await createTransaction({ ...params, sender });\n const signedTx = await signTransaction(tx);\n return broadcastTransaction(signedTx.tx_blob);\n };\n\n // Disconnect client on demand or handle elsewhere?\n // For now, let's assume connection is managed outside or persists.\n // const disconnect = () => client.disconnect();\n\n return {\n // Signer related\n signer, // Expose the signer instance if created/provided\n createSigner, // Expose the helper\n // Core methods\n getAddress,\n validateAddress: rippleValidateAddress,\n getBalance,\n createTransaction,\n signTransaction,\n broadcastTransaction,\n transfer,\n estimateTransactionFee,\n // disconnect, // Optional: expose disconnect\n };\n};\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "030A6CAB97355B8F64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/dist/ripple/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import"../chunk-p1kdg37m.js";import{AssetValue as R,BaseDecimal as $,Chain as G,SKConfig as W,SwapKitError as I,SwapKitNumber as f}from"@swapkit/helpers";import{Client as H,Wallet as U,isValidAddress as B,xrpToDrops as b}from"xrpl";function k(
|
|
1
|
+
import"../chunk-p1kdg37m.js";import{AssetValue as R,BaseDecimal as $,Chain as G,SKConfig as W,SwapKitError as I,SwapKitNumber as f}from"@swapkit/helpers";import{Client as H,Wallet as U,isValidAddress as B,xrpToDrops as b}from"xrpl";function k(v){let y=U.fromMnemonic(v);return{getAddress:()=>Promise.resolve(y.address),signTransaction:(M)=>Promise.resolve(y.sign(M))}}function F(v){return B(v)}var C=async(v={})=>{let y="signer"in v&&v.signer?v.signer:("phrase"in v)&&v.phrase?k(v.phrase):void 0,M=W.get("rpcUrls")[G.Ripple];if(!M)throw new I({errorKey:"toolbox_ripple_rpc_not_configured",info:{chain:G.Ripple}});let L=new H(M);await L.connect();let P=()=>{if(!y)throw new I({errorKey:"toolbox_ripple_signer_not_found"});return y.getAddress()},N=async(q)=>{let z=q||await P();try{await L.connect();let J=(await L.request({command:"account_info",account:z})).result.account_data.Balance;return[R.from({chain:G.Ripple,value:J,fromBaseDecimal:$[G.Ripple]})]}catch(j){if(j.data.error_code===19)return[R.from({chain:G.Ripple,value:0})];throw new I("toolbox_ripple_get_balance_error",{info:{address:z,error:j}})}},O=async()=>{let z=(await L.request({command:"fee"})).result.drops.open_ledger_fee;return R.from({chain:G.Ripple,value:f.fromBigInt(BigInt(z),$[G.Ripple])})},X=async({assetValue:q,recipient:z,memo:j,sender:J})=>{if(!F(z))throw new I({errorKey:"core_transaction_invalid_recipient_address"});let Q=J||await P();if(!q.isGasAsset||q.chain!==G.Ripple)throw new I({errorKey:"toolbox_ripple_asset_not_supported",info:{asset:q.toString()}});let _={TransactionType:"Payment",Account:Q,Amount:b(q.getValue("string")),Destination:z};if(j)_.Memos=[{Memo:{MemoData:Buffer.from(j).toString("hex")}}];return await L.autofill(_)},Y=(q)=>{if(!y)throw new I({errorKey:"toolbox_ripple_signer_not_found"});return y.signTransaction(q)},Z=async(q)=>{let j=(await L.submitAndWait(q)).result;if(j.engine_result==="tesSUCCESS"||j.engine_result==="terQUEUED")return j.tx_json?.hash||j.hash;let J=j.engine_result_message||"Unknown error",Q=j.engine_result||"Unknown code";throw new I({errorKey:"toolbox_ripple_broadcast_error",info:{chain:G.Ripple,message:J,code:Q,result:j}})};return{signer:y,createSigner:k,getAddress:P,validateAddress:F,getBalance:N,createTransaction:X,signTransaction:Y,broadcastTransaction:Z,transfer:async(q)=>{if(!y)throw new I({errorKey:"toolbox_ripple_signer_not_found"});let z=await y.getAddress(),j=await X({...q,sender:z}),J=await Y(j);return Z(J.tx_blob)},estimateTransactionFee:O}};export{F as rippleValidateAddress,C as getRippleToolbox};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=93BB2E78E5142B8564756E2164756E21
|
package/dist/ripple/index.js.map
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/ripple/index.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
-
"import {\n AssetValue,\n BaseDecimal,\n Chain,\n type ChainSigner,\n type
|
|
5
|
+
"import {\n AssetValue,\n BaseDecimal,\n Chain,\n type ChainSigner,\n type GenericTransferParams,\n SKConfig,\n SwapKitError,\n SwapKitNumber,\n} from \"@swapkit/helpers\";\nimport type { Transaction } from \"xrpl\";\nimport { Client, type Payment, Wallet, isValidAddress, xrpToDrops } from \"xrpl\";\n\nexport type RippleWallet = Awaited<ReturnType<typeof getRippleToolbox>>;\n\n// Note: Ripple seeds generate a single address, no derivation path/index support.\nfunction createSigner(phrase: string): ChainSigner<Transaction, { tx_blob: string; hash: string }> {\n const wallet = Wallet.fromMnemonic(phrase);\n return {\n // publicKey: wallet.publicKey,\n // Address is sync, but interface requires async\n getAddress: () => Promise.resolve(wallet.address),\n // Signing is sync, but interface requires async\n signTransaction: (tx: Transaction) => Promise.resolve(wallet.sign(tx as Transaction)), // Cast needed as Wallet.sign expects Transaction\n };\n}\n\nexport function rippleValidateAddress(address: string) {\n return isValidAddress(address);\n}\n\ntype RippleToolboxParams =\n | { phrase: string }\n | { signer: ChainSigner<Transaction, { tx_blob: string; hash: string }> }\n | {};\n\nexport const getRippleToolbox = async (params: RippleToolboxParams = {}) => {\n const signer =\n \"signer\" in params && params.signer\n ? params.signer\n : \"phrase\" in params && params.phrase\n ? createSigner(params.phrase)\n : undefined;\n\n const rpcUrl = SKConfig.get(\"rpcUrls\")[Chain.Ripple];\n if (!rpcUrl) {\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_rpc_not_configured\",\n info: { chain: Chain.Ripple },\n });\n }\n\n const client = new Client(rpcUrl);\n await client.connect();\n\n const getAddress = () => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n return signer.getAddress();\n };\n\n const getBalance = async (address?: string) => {\n const addr = address || (await getAddress());\n\n try {\n await client.connect();\n const accountInfo = await client.request({\n command: \"account_info\",\n account: addr,\n });\n\n const balance = accountInfo.result.account_data.Balance;\n\n return [\n AssetValue.from({\n chain: Chain.Ripple,\n value: balance,\n fromBaseDecimal: BaseDecimal[Chain.Ripple],\n }),\n ];\n } catch (error) {\n // empty account\n if ((error as any).data.error_code === 19) {\n return [\n AssetValue.from({\n chain: Chain.Ripple,\n value: 0,\n }),\n ];\n }\n throw new SwapKitError(\"toolbox_ripple_get_balance_error\", {\n info: { address: addr, error },\n });\n }\n };\n\n const estimateTransactionFee = async () => {\n const feeResponse = await client.request({ command: \"fee\" });\n const feeDrops = feeResponse.result.drops.open_ledger_fee; // Fee in drops\n\n return AssetValue.from({\n chain: Chain.Ripple,\n value: SwapKitNumber.fromBigInt(BigInt(feeDrops), BaseDecimal[Chain.Ripple]),\n });\n };\n\n const createTransaction = async ({\n assetValue,\n recipient,\n memo,\n sender,\n }: { assetValue: AssetValue; recipient: string; sender?: string; memo?: string }) => {\n if (!rippleValidateAddress(recipient)) {\n throw new SwapKitError({ errorKey: \"core_transaction_invalid_recipient_address\" });\n }\n\n const senderAddress = sender || (await getAddress());\n\n if (!assetValue.isGasAsset || assetValue.chain !== Chain.Ripple) {\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_asset_not_supported\",\n info: { asset: assetValue.toString() },\n });\n }\n\n const transaction: Payment = {\n TransactionType: \"Payment\",\n Account: senderAddress,\n Amount: xrpToDrops(assetValue.getValue(\"string\")),\n Destination: recipient,\n };\n\n if (memo) {\n transaction.Memos = [{ Memo: { MemoData: Buffer.from(memo).toString(\"hex\") } }];\n }\n\n const preparedTx = await client.autofill(transaction);\n return preparedTx;\n };\n\n const signTransaction = (tx: Transaction) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n return signer.signTransaction(tx);\n };\n\n const broadcastTransaction = async (signedTxHex: string) => {\n const submitResult = await client.submitAndWait(signedTxHex);\n // Cast result to any to bypass potential type mismatches in xrpl.js definitions\n const result: any = submitResult.result;\n\n // Check engine_result directly on result\n if (result.engine_result === \"tesSUCCESS\" || result.engine_result === \"terQUEUED\") {\n // Access hash from tx_json if available, otherwise fallback to result.hash\n return result.tx_json?.hash || result.hash;\n }\n\n const message = result.engine_result_message || \"Unknown error\";\n const code = result.engine_result || \"Unknown code\";\n\n throw new SwapKitError({\n errorKey: \"toolbox_ripple_broadcast_error\",\n info: { chain: Chain.Ripple, message, code, result },\n // Remove explicit message when using object format\n });\n };\n\n const transfer = async (params: GenericTransferParams) => {\n if (!signer) {\n throw new SwapKitError({ errorKey: \"toolbox_ripple_signer_not_found\" });\n }\n const sender = await signer.getAddress();\n const tx = await createTransaction({ ...params, sender });\n const signedTx = await signTransaction(tx);\n return broadcastTransaction(signedTx.tx_blob);\n };\n\n // Disconnect client on demand or handle elsewhere?\n // For now, let's assume connection is managed outside or persists.\n // const disconnect = () => client.disconnect();\n\n return {\n // Signer related\n signer, // Expose the signer instance if created/provided\n createSigner, // Expose the helper\n // Core methods\n getAddress,\n validateAddress: rippleValidateAddress,\n getBalance,\n createTransaction,\n signTransaction,\n broadcastTransaction,\n transfer,\n estimateTransactionFee,\n // disconnect, // Optional: expose disconnect\n };\n};\n"
|
|
6
6
|
],
|
|
7
|
-
"mappings": "6BAAA,qBACE,iBACA,WACA,
|
|
8
|
-
"debugId": "
|
|
7
|
+
"mappings": "6BAAA,qBACE,iBACA,WACA,cAGA,kBACA,mBACA,yBAGF,iBAAS,YAAsB,oBAAQ,gBAAgB,aAKvD,SAAS,CAAY,CAAC,EAA6E,CACjG,IAAM,EAAS,EAAO,aAAa,CAAM,EACzC,MAAO,CAGL,WAAY,IAAM,QAAQ,QAAQ,EAAO,OAAO,EAEhD,gBAAiB,CAAC,IAAoB,QAAQ,QAAQ,EAAO,KAAK,CAAiB,CAAC,CACtF,EAGK,SAAS,CAAqB,CAAC,EAAiB,CACrD,OAAO,EAAe,CAAO,EAQxB,IAAM,EAAmB,MAAO,EAA8B,CAAC,IAAM,CAC1E,IAAM,EACJ,WAAY,GAAU,EAAO,OACzB,EAAO,QACP,WAAY,IAAU,EAAO,OAC3B,EAAa,EAAO,MAAM,EAC1B,OAEF,EAAS,EAAS,IAAI,SAAS,EAAE,EAAM,QAC7C,IAAK,EACH,MAAM,IAAI,EAAa,CACrB,SAAU,oCACV,KAAM,CAAE,MAAO,EAAM,MAAO,CAC9B,CAAC,EAGH,IAAM,EAAS,IAAI,EAAO,CAAM,EAChC,MAAM,EAAO,QAAQ,EAErB,IAAM,EAAa,IAAM,CACvB,IAAK,EACH,MAAM,IAAI,EAAa,CAAE,SAAU,iCAAkC,CAAC,EAExE,OAAO,EAAO,WAAW,GAGrB,EAAa,MAAO,IAAqB,CAC7C,IAAM,EAAO,GAAY,MAAM,EAAW,EAE1C,GAAI,CACF,MAAM,EAAO,QAAQ,EAMrB,IAAM,GALc,MAAM,EAAO,QAAQ,CACvC,QAAS,eACT,QAAS,CACX,CAAC,GAE2B,OAAO,aAAa,QAEhD,MAAO,CACL,EAAW,KAAK,CACd,MAAO,EAAM,OACb,MAAO,EACP,gBAAiB,EAAY,EAAM,OACrC,CAAC,CACH,EACA,MAAO,EAAO,CAEd,GAAK,EAAc,KAAK,aAAe,GACrC,MAAO,CACL,EAAW,KAAK,CACd,MAAO,EAAM,OACb,MAAO,CACT,CAAC,CACH,EAEF,MAAM,IAAI,EAAa,mCAAoC,CACzD,KAAM,CAAE,QAAS,EAAM,OAAM,CAC/B,CAAC,IAIC,EAAyB,SAAY,CAEzC,IAAM,GADc,MAAM,EAAO,QAAQ,CAAE,QAAS,KAAM,CAAC,GAC9B,OAAO,MAAM,gBAE1C,OAAO,EAAW,KAAK,CACrB,MAAO,EAAM,OACb,MAAO,EAAc,WAAW,OAAO,CAAQ,EAAG,EAAY,EAAM,OAAO,CAC7E,CAAC,GAGG,EAAoB,OACxB,aACA,YACA,OACA,YACmF,CACnF,IAAK,EAAsB,CAAS,EAClC,MAAM,IAAI,EAAa,CAAE,SAAU,4CAA6C,CAAC,EAGnF,IAAM,EAAgB,GAAW,MAAM,EAAW,EAElD,IAAK,EAAW,YAAc,EAAW,QAAU,EAAM,OACvD,MAAM,IAAI,EAAa,CACrB,SAAU,qCACV,KAAM,CAAE,MAAO,EAAW,SAAS,CAAE,CACvC,CAAC,EAGH,IAAM,EAAuB,CAC3B,gBAAiB,UACjB,QAAS,EACT,OAAQ,EAAW,EAAW,SAAS,QAAQ,CAAC,EAChD,YAAa,CACf,EAEA,GAAI,EACF,EAAY,MAAQ,CAAC,CAAE,KAAM,CAAE,SAAU,OAAO,KAAK,CAAI,EAAE,SAAS,KAAK,CAAE,CAAE,CAAC,EAIhF,OADmB,MAAM,EAAO,SAAS,CAAW,GAIhD,EAAkB,CAAC,IAAoB,CAC3C,IAAK,EACH,MAAM,IAAI,EAAa,CAAE,SAAU,iCAAkC,CAAC,EAExE,OAAO,EAAO,gBAAgB,CAAE,GAG5B,EAAuB,MAAO,IAAwB,CAG1D,IAAM,GAFe,MAAM,EAAO,cAAc,CAAW,GAE1B,OAGjC,GAAI,EAAO,gBAAkB,cAAgB,EAAO,gBAAkB,YAEpE,OAAO,EAAO,SAAS,MAAQ,EAAO,KAGxC,IAAM,EAAU,EAAO,uBAAyB,gBAC1C,EAAO,EAAO,eAAiB,eAErC,MAAM,IAAI,EAAa,CACrB,SAAU,iCACV,KAAM,CAAE,MAAO,EAAM,OAAQ,UAAS,OAAM,QAAO,CAErD,CAAC,GAiBH,MAAO,CAEL,SACA,eAEA,aACA,gBAAiB,EACjB,aACA,oBACA,kBACA,uBACA,SAzBe,MAAO,IAAkC,CACxD,IAAK,EACH,MAAM,IAAI,EAAa,CAAE,SAAU,iCAAkC,CAAC,EAExE,IAAM,EAAS,MAAM,EAAO,WAAW,EACjC,EAAK,MAAM,EAAkB,IAAK,EAAQ,QAAO,CAAC,EAClD,EAAW,MAAM,EAAgB,CAAE,EACzC,OAAO,EAAqB,EAAS,OAAO,GAmB5C,wBAEF",
|
|
8
|
+
"debugId": "93BB2E78E5142B8564756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
package/package.json
CHANGED
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"@solana/spl-memo": "0.2.5",
|
|
24
24
|
"@solana/spl-token": "0.4.13",
|
|
25
25
|
"@solana/web3.js": "1.98.2",
|
|
26
|
-
"@swapkit/helpers": "3.0.0-beta.
|
|
26
|
+
"@swapkit/helpers": "3.0.0-beta.6",
|
|
27
27
|
"base64-js": "1.5.1",
|
|
28
28
|
"bitcoinjs-lib": "6.1.7",
|
|
29
29
|
"bs58check": "4.0.0",
|
|
@@ -105,5 +105,5 @@
|
|
|
105
105
|
"type-check:go": "tsgo"
|
|
106
106
|
},
|
|
107
107
|
"type": "module",
|
|
108
|
-
"version": "1.0.0-beta.
|
|
108
|
+
"version": "1.0.0-beta.7"
|
|
109
109
|
}
|
package/src/ripple/index.ts
CHANGED
|
@@ -3,7 +3,6 @@ import {
|
|
|
3
3
|
BaseDecimal,
|
|
4
4
|
Chain,
|
|
5
5
|
type ChainSigner,
|
|
6
|
-
type GenericCreateTransactionParams,
|
|
7
6
|
type GenericTransferParams,
|
|
8
7
|
SKConfig,
|
|
9
8
|
SwapKitError,
|
|
@@ -111,10 +110,7 @@ export const getRippleToolbox = async (params: RippleToolboxParams = {}) => {
|
|
|
111
110
|
recipient,
|
|
112
111
|
memo,
|
|
113
112
|
sender,
|
|
114
|
-
}:
|
|
115
|
-
if (!signer) {
|
|
116
|
-
throw new SwapKitError({ errorKey: "toolbox_ripple_signer_not_found" });
|
|
117
|
-
}
|
|
113
|
+
}: { assetValue: AssetValue; recipient: string; sender?: string; memo?: string }) => {
|
|
118
114
|
if (!rippleValidateAddress(recipient)) {
|
|
119
115
|
throw new SwapKitError({ errorKey: "core_transaction_invalid_recipient_address" });
|
|
120
116
|
}
|