@swapkit/wallet-hardware 4.9.5 → 4.9.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/chunk-3gajmdgz.js +4 -0
- package/dist/chunk-3gajmdgz.js.map +10 -0
- package/dist/chunk-jttnd211.js +4 -0
- package/dist/chunk-jttnd211.js.map +10 -0
- package/dist/keepkey/index.cjs +2 -2
- package/dist/keepkey/index.cjs.map +3 -3
- package/dist/keepkey/index.js +2 -2
- package/dist/keepkey/index.js.map +3 -3
- package/dist/ledger/index.cjs +3 -3
- package/dist/ledger/index.cjs.map +3 -3
- package/dist/ledger/index.js +3 -3
- package/dist/ledger/index.js.map +3 -3
- package/dist/trezor/index.cjs +2 -2
- package/dist/trezor/index.cjs.map +3 -3
- package/dist/trezor/index.js +2 -2
- package/dist/trezor/index.js.map +3 -3
- package/dist/types/ledger/clients/utxo-psbt.d.ts.map +1 -1
- package/dist/types/trezor/index.d.ts.map +1 -1
- package/package.json +7 -5
- package/src/keepkey/chains/utxo.ts +2 -2
- package/src/ledger/clients/utxo-psbt.ts +30 -10
- package/src/ledger/index.ts +2 -2
- package/src/trezor/index.ts +333 -27
- package/dist/chunk-9jd3dhjv.js +0 -4
- package/dist/chunk-9jd3dhjv.js.map +0 -10
- package/dist/chunk-m08x6an5.js +0 -4
- package/dist/chunk-m08x6an5.js.map +0 -10
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var C=require("@scure/base"),F=require("@scure/bip32"),R=require("@swapkit/helpers");function b(G){switch(G){case"bech32":return"wpkh(@0/**)";case"p2sh":return"sh(wpkh(@0/**))";case"legacy":return"pkh(@0/**)";default:return"wpkh(@0/**)"}}function P(G){return typeof G==="string"?G:R.derivationPathToString(G)}function X(G){return G.replace(/^m\//,"").replace(/^\/+/,"")}function x(G){return G.replace(/^m\//,"").split("/").filter(Boolean).map((Q)=>{let V=Q.endsWith("'"),Y=Number.parseInt(V?Q.slice(0,-1):Q,10);return V?(Y|2147483648)>>>0:Y})}function g(G,Q){let V=G.getInput(Q);return Boolean(V.bip32Derivation?.length)}var S=({chain:G})=>{return(Q,V)=>{let Y,H;async function $(){if(!Y){let q=V??await k(),{AppClient:J}=await import("ledger-bitcoin");Y=new J(q)}return Y}async function L(){if(!H)H=await(await $()).getMasterFingerprint();return H}let j=X(Q?P(Q):"84'/0'/0'/0/0"),w=j.split("/").filter(Boolean),N=w.slice(0,3).join("/"),E=w.slice(3),K=Number(E[0]??0),B=Number(E[1]??0),T=R.getWalletFormatFor(j),I=b(T),z,O;async function U(){let q=await $(),J=await L();if(!z)z=await q.getExtendedPubkey(`m/${N}`);let{DefaultWalletPolicy:M}=await import("ledger-bitcoin"),W=new M(I,`[${J}/${N}]${z}`);return{app:q,fpr:J,policy:W,xpub:z}}async function v(){if(!O){let{xpub:q}=await U(),M=F.HDKey.fromExtendedKey(q).derive(`m/${K}/${B}`);if(!M.publicKey)throw new R.SwapKitError("wallet_ledger_get_address_error",{message:`Cannot derive leaf pubkey for ${G}`});O=M.publicKey}return O}return{connect:async()=>{await $()},getAddress:async()=>{let{app:q,policy:J}=await U(),M=await q.getWalletAddress(J,null,K,B,!1);if(!M)throw new R.SwapKitError("wallet_ledger_get_address_error",{message:`Cannot get ${G} address from ledger derivation path: ${j}`});return M},getExtendedPublicKey:async(q=`m/${N}`)=>{return(await $()).getExtendedPubkey(`m/${X(q)}`)},signTransaction:async(q)=>{let{app:J,policy:M,fpr:W}=await U(),A=Number.parseInt(W,16)>>>0,f=x(j),D=Array.from({length:q.inputsLength},(Z,_)=>_).filter((Z)=>!g(q,Z));if(D.length>0){let Z=await v();for(let _ of D)q.updateInput(_,{bip32Derivation:[[Z,{fingerprint:A,path:f}]]})}let y=C.base64.encode(q.toPSBT(0)),m=await J.signPsbt(y,M,null);for(let[Z,_]of m)q.updateInput(Z,{partialSig:[[new Uint8Array(_.pubkey),new Uint8Array(_.signature)]]});return q}}}},l=S({chain:"bitcoin"}),s=S({chain:"litecoin"});
|
|
2
|
+
|
|
3
|
+
//# debugId=2C91C97B5CF5D4DF64756E2164756E21
|
|
4
|
+
//# sourceMappingURL=chunk-3gajmdgz.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/ledger/clients/utxo-psbt.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type Transport from \"@ledgerhq/hw-transport\";\nimport { base64 } from \"@scure/base\";\nimport { HDKey } from \"@scure/bip32\";\nimport { type DerivationPathArray, derivationPathToString, getWalletFormatFor, SwapKitError } from \"@swapkit/helpers\";\nimport type { Transaction } from \"@swapkit/utxo-signer\";\n\nimport { getLedgerTransport } from \"../helpers/getLedgerTransport\";\n\ntype SupportedCoin = \"bitcoin\" | \"litecoin\";\n\ntype DefaultDescriptorTemplate = \"wpkh(@0/**)\" | \"tr(@0/**)\" | \"sh(wpkh(@0/**))\" | \"pkh(@0/**)\";\n\nfunction templateForFormat(format: ReturnType<typeof getWalletFormatFor>): DefaultDescriptorTemplate {\n switch (format) {\n case \"bech32\":\n return \"wpkh(@0/**)\";\n case \"p2sh\":\n return \"sh(wpkh(@0/**))\";\n case \"legacy\":\n return \"pkh(@0/**)\";\n default:\n return \"wpkh(@0/**)\";\n }\n}\n\nfunction pathToString(path: DerivationPathArray | string): string {\n return typeof path === \"string\" ? path : derivationPathToString(path);\n}\n\nfunction normalizeLedgerPath(path: string): string {\n return path.replace(/^m\\//, \"\").replace(/^\\/+/, \"\");\n}\n\nfunction pathToNumberArray(path: string): number[] {\n return path\n .replace(/^m\\//, \"\")\n .split(\"/\")\n .filter(Boolean)\n .map((p) => {\n const hardened = p.endsWith(\"'\");\n const num = Number.parseInt(hardened ? p.slice(0, -1) : p, 10);\n return hardened ? (num | 0x80000000) >>> 0 : num;\n });\n}\n\nfunction hasBip32Derivation(tx: Transaction, inputIndex: number) {\n const input = tx.getInput(inputIndex) as { bip32Derivation?: Array<unknown> };\n\n return Boolean(input.bip32Derivation?.length);\n}\n\nconst BaseLedgerPsbtUTXO = ({ chain }: { chain: SupportedCoin }) => {\n return (derivationPathArray?: DerivationPathArray | string, injectedTransport?: Transport) => {\n // Per-call state — each BitcoinPsbtLedger/LitecoinPsbtLedger invocation has its own\n // AppClient and master fingerprint so different consumers (e.g. concurrent MCP\n // sessions on different devices) cannot inherit each other's ledger bindings or xpub.\n let appClient: import(\"ledger-bitcoin\").AppClient | undefined;\n let masterFingerprint: string | undefined;\n\n async function getAppClient() {\n if (!appClient) {\n const transport = injectedTransport ?? (await getLedgerTransport());\n const { AppClient } = await import(\"ledger-bitcoin\");\n appClient = new AppClient(transport);\n }\n return appClient;\n }\n\n async function getFingerprint() {\n if (!masterFingerprint) {\n const app = await getAppClient();\n masterFingerprint = await app.getMasterFingerprint();\n }\n return masterFingerprint;\n }\n\n // Single-address account: change == index == 0 by default.\n const derivationPath = normalizeLedgerPath(\n derivationPathArray ? pathToString(derivationPathArray) : \"84'/0'/0'/0/0\",\n );\n const pathSegments = derivationPath.split(\"/\").filter(Boolean);\n const accountPath = pathSegments.slice(0, 3).join(\"/\");\n const leafSegments = pathSegments.slice(3);\n const change = Number(leafSegments[0] ?? 0);\n const addressIndex = Number(leafSegments[1] ?? 0);\n const format = getWalletFormatFor(derivationPath);\n const template = templateForFormat(format);\n\n let cachedAccountXpub: string | undefined;\n let cachedLeafPubkey: Uint8Array | undefined;\n\n async function buildPolicy() {\n const app = await getAppClient();\n const fpr = await getFingerprint();\n if (!cachedAccountXpub) {\n cachedAccountXpub = await app.getExtendedPubkey(`m/${accountPath}`);\n }\n const { DefaultWalletPolicy } = await import(\"ledger-bitcoin\");\n const policy = new DefaultWalletPolicy(template, `[${fpr}/${accountPath}]${cachedAccountXpub}`);\n return { app, fpr, policy, xpub: cachedAccountXpub };\n }\n\n async function getLeafPubkey() {\n if (!cachedLeafPubkey) {\n const { xpub } = await buildPolicy();\n const accountKey = HDKey.fromExtendedKey(xpub);\n const leaf = accountKey.derive(`m/${change}/${addressIndex}`);\n if (!leaf.publicKey) {\n throw new SwapKitError(\"wallet_ledger_get_address_error\", {\n message: `Cannot derive leaf pubkey for ${chain}`,\n });\n }\n cachedLeafPubkey = leaf.publicKey;\n }\n return cachedLeafPubkey;\n }\n\n return {\n connect: async () => {\n await getAppClient();\n },\n getAddress: async () => {\n const { app, policy } = await buildPolicy();\n const address = await app.getWalletAddress(policy, null, change, addressIndex, false);\n if (!address) {\n throw new SwapKitError(\"wallet_ledger_get_address_error\", {\n message: `Cannot get ${chain} address from ledger derivation path: ${derivationPath}`,\n });\n }\n return address;\n },\n getExtendedPublicKey: async (path = `m/${accountPath}`) => {\n const app = await getAppClient();\n return app.getExtendedPubkey(`m/${normalizeLedgerPath(path)}`);\n },\n signTransaction: async (tx: Transaction): Promise<Transaction> => {\n const { app, policy, fpr } = await buildPolicy();\n const fingerprintBE = Number.parseInt(fpr, 16) >>> 0;\n const pathNumbers = pathToNumberArray(derivationPath);\n const missingDerivationIndexes = Array.from({ length: tx.inputsLength }, (_, inputIndex) => inputIndex).filter(\n (inputIndex) => !hasBip32Derivation(tx, inputIndex),\n );\n\n if (missingDerivationIndexes.length > 0) {\n const leafPubkey = await getLeafPubkey();\n\n // Fallback for PSBTs that do not include per-input HD key origins.\n for (const inputIndex of missingDerivationIndexes) {\n tx.updateInput(inputIndex, {\n bip32Derivation: [[leafPubkey, { fingerprint: fingerprintBE, path: pathNumbers }]],\n });\n }\n }\n\n const psbtB64 = base64.encode(tx.toPSBT(0));\n const sigs = await app.signPsbt(psbtB64, policy, null);\n\n for (const [idx, partial] of sigs) {\n tx.updateInput(idx, { partialSig: [[new Uint8Array(partial.pubkey), new Uint8Array(partial.signature)]] });\n }\n\n return tx;\n },\n };\n };\n};\n\nexport const BitcoinPsbtLedger = BaseLedgerPsbtUTXO({ chain: \"bitcoin\" });\nexport const LitecoinPsbtLedger = BaseLedgerPsbtUTXO({ chain: \"litecoin\" });\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "2C91C97B5CF5D4DF64756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{c as C}from"./chunk-3yr76n9s.js";import{d as D}from"./chunk-n05bv2n5.js";import{base64 as m}from"@scure/base";import{HDKey as b}from"@scure/bip32";import{derivationPathToString as P,getWalletFormatFor as x,SwapKitError as X}from"@swapkit/helpers";function g(G){switch(G){case"bech32":return"wpkh(@0/**)";case"p2sh":return"sh(wpkh(@0/**))";case"legacy":return"pkh(@0/**)";default:return"wpkh(@0/**)"}}function u(G){return typeof G==="string"?G:P(G)}function k(G){return G.replace(/^m\//,"").replace(/^\/+/,"")}function l(G){return G.replace(/^m\//,"").split("/").filter(Boolean).map((Q)=>{let R=Q.endsWith("'"),V=Number.parseInt(R?Q.slice(0,-1):Q,10);return R?(V|2147483648)>>>0:V})}function s(G,Q){let R=G.getInput(Q);return Boolean(R.bip32Derivation?.length)}var F=({chain:G})=>{return(Q,R)=>{let V,z;async function _(){if(!V){let q=R??await C(),{AppClient:J}=await import("ledger-bitcoin");V=new J(q)}return V}async function S(){if(!z)z=await(await _()).getMasterFingerprint();return z}let $=k(Q?u(Q):"84'/0'/0'/0/0"),W=$.split("/").filter(Boolean),H=W.slice(0,3).join("/"),w=W.slice(3),E=Number(w[0]??0),K=Number(w[1]??0),L=x($),T=g(L),j,N;async function O(){let q=await _(),J=await S();if(!j)j=await q.getExtendedPubkey(`m/${H}`);let{DefaultWalletPolicy:M}=await import("ledger-bitcoin"),U=new M(T,`[${J}/${H}]${j}`);return{app:q,fpr:J,policy:U,xpub:j}}async function I(){if(!N){let{xpub:q}=await O(),M=b.fromExtendedKey(q).derive(`m/${E}/${K}`);if(!M.publicKey)throw new X("wallet_ledger_get_address_error",{message:`Cannot derive leaf pubkey for ${G}`});N=M.publicKey}return N}return{connect:async()=>{await _()},getAddress:async()=>{let{app:q,policy:J}=await O(),M=await q.getWalletAddress(J,null,E,K,!1);if(!M)throw new X("wallet_ledger_get_address_error",{message:`Cannot get ${G} address from ledger derivation path: ${$}`});return M},getExtendedPublicKey:async(q=`m/${H}`)=>{return(await _()).getExtendedPubkey(`m/${k(q)}`)},signTransaction:async(q)=>{let{app:J,policy:M,fpr:U}=await O(),v=Number.parseInt(U,16)>>>0,A=l($),B=Array.from({length:q.inputsLength},(Y,Z)=>Z).filter((Y)=>!s(q,Y));if(B.length>0){let Y=await I();for(let Z of B)q.updateInput(Z,{bip32Derivation:[[Y,{fingerprint:v,path:A}]]})}let f=m.encode(q.toPSBT(0)),y=await J.signPsbt(f,M,null);for(let[Y,Z]of y)q.updateInput(Y,{partialSig:[[new Uint8Array(Z.pubkey),new Uint8Array(Z.signature)]]});return q}}}},n=F({chain:"bitcoin"}),p=F({chain:"litecoin"});export{p as LitecoinPsbtLedger,n as BitcoinPsbtLedger};
|
|
2
|
+
|
|
3
|
+
//# debugId=891D5D7B8F0B7C8C64756E2164756E21
|
|
4
|
+
//# sourceMappingURL=chunk-jttnd211.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/ledger/clients/utxo-psbt.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"import type Transport from \"@ledgerhq/hw-transport\";\nimport { base64 } from \"@scure/base\";\nimport { HDKey } from \"@scure/bip32\";\nimport { type DerivationPathArray, derivationPathToString, getWalletFormatFor, SwapKitError } from \"@swapkit/helpers\";\nimport type { Transaction } from \"@swapkit/utxo-signer\";\n\nimport { getLedgerTransport } from \"../helpers/getLedgerTransport\";\n\ntype SupportedCoin = \"bitcoin\" | \"litecoin\";\n\ntype DefaultDescriptorTemplate = \"wpkh(@0/**)\" | \"tr(@0/**)\" | \"sh(wpkh(@0/**))\" | \"pkh(@0/**)\";\n\nfunction templateForFormat(format: ReturnType<typeof getWalletFormatFor>): DefaultDescriptorTemplate {\n switch (format) {\n case \"bech32\":\n return \"wpkh(@0/**)\";\n case \"p2sh\":\n return \"sh(wpkh(@0/**))\";\n case \"legacy\":\n return \"pkh(@0/**)\";\n default:\n return \"wpkh(@0/**)\";\n }\n}\n\nfunction pathToString(path: DerivationPathArray | string): string {\n return typeof path === \"string\" ? path : derivationPathToString(path);\n}\n\nfunction normalizeLedgerPath(path: string): string {\n return path.replace(/^m\\//, \"\").replace(/^\\/+/, \"\");\n}\n\nfunction pathToNumberArray(path: string): number[] {\n return path\n .replace(/^m\\//, \"\")\n .split(\"/\")\n .filter(Boolean)\n .map((p) => {\n const hardened = p.endsWith(\"'\");\n const num = Number.parseInt(hardened ? p.slice(0, -1) : p, 10);\n return hardened ? (num | 0x80000000) >>> 0 : num;\n });\n}\n\nfunction hasBip32Derivation(tx: Transaction, inputIndex: number) {\n const input = tx.getInput(inputIndex) as { bip32Derivation?: Array<unknown> };\n\n return Boolean(input.bip32Derivation?.length);\n}\n\nconst BaseLedgerPsbtUTXO = ({ chain }: { chain: SupportedCoin }) => {\n return (derivationPathArray?: DerivationPathArray | string, injectedTransport?: Transport) => {\n // Per-call state — each BitcoinPsbtLedger/LitecoinPsbtLedger invocation has its own\n // AppClient and master fingerprint so different consumers (e.g. concurrent MCP\n // sessions on different devices) cannot inherit each other's ledger bindings or xpub.\n let appClient: import(\"ledger-bitcoin\").AppClient | undefined;\n let masterFingerprint: string | undefined;\n\n async function getAppClient() {\n if (!appClient) {\n const transport = injectedTransport ?? (await getLedgerTransport());\n const { AppClient } = await import(\"ledger-bitcoin\");\n appClient = new AppClient(transport);\n }\n return appClient;\n }\n\n async function getFingerprint() {\n if (!masterFingerprint) {\n const app = await getAppClient();\n masterFingerprint = await app.getMasterFingerprint();\n }\n return masterFingerprint;\n }\n\n // Single-address account: change == index == 0 by default.\n const derivationPath = normalizeLedgerPath(\n derivationPathArray ? pathToString(derivationPathArray) : \"84'/0'/0'/0/0\",\n );\n const pathSegments = derivationPath.split(\"/\").filter(Boolean);\n const accountPath = pathSegments.slice(0, 3).join(\"/\");\n const leafSegments = pathSegments.slice(3);\n const change = Number(leafSegments[0] ?? 0);\n const addressIndex = Number(leafSegments[1] ?? 0);\n const format = getWalletFormatFor(derivationPath);\n const template = templateForFormat(format);\n\n let cachedAccountXpub: string | undefined;\n let cachedLeafPubkey: Uint8Array | undefined;\n\n async function buildPolicy() {\n const app = await getAppClient();\n const fpr = await getFingerprint();\n if (!cachedAccountXpub) {\n cachedAccountXpub = await app.getExtendedPubkey(`m/${accountPath}`);\n }\n const { DefaultWalletPolicy } = await import(\"ledger-bitcoin\");\n const policy = new DefaultWalletPolicy(template, `[${fpr}/${accountPath}]${cachedAccountXpub}`);\n return { app, fpr, policy, xpub: cachedAccountXpub };\n }\n\n async function getLeafPubkey() {\n if (!cachedLeafPubkey) {\n const { xpub } = await buildPolicy();\n const accountKey = HDKey.fromExtendedKey(xpub);\n const leaf = accountKey.derive(`m/${change}/${addressIndex}`);\n if (!leaf.publicKey) {\n throw new SwapKitError(\"wallet_ledger_get_address_error\", {\n message: `Cannot derive leaf pubkey for ${chain}`,\n });\n }\n cachedLeafPubkey = leaf.publicKey;\n }\n return cachedLeafPubkey;\n }\n\n return {\n connect: async () => {\n await getAppClient();\n },\n getAddress: async () => {\n const { app, policy } = await buildPolicy();\n const address = await app.getWalletAddress(policy, null, change, addressIndex, false);\n if (!address) {\n throw new SwapKitError(\"wallet_ledger_get_address_error\", {\n message: `Cannot get ${chain} address from ledger derivation path: ${derivationPath}`,\n });\n }\n return address;\n },\n getExtendedPublicKey: async (path = `m/${accountPath}`) => {\n const app = await getAppClient();\n return app.getExtendedPubkey(`m/${normalizeLedgerPath(path)}`);\n },\n signTransaction: async (tx: Transaction): Promise<Transaction> => {\n const { app, policy, fpr } = await buildPolicy();\n const fingerprintBE = Number.parseInt(fpr, 16) >>> 0;\n const pathNumbers = pathToNumberArray(derivationPath);\n const missingDerivationIndexes = Array.from({ length: tx.inputsLength }, (_, inputIndex) => inputIndex).filter(\n (inputIndex) => !hasBip32Derivation(tx, inputIndex),\n );\n\n if (missingDerivationIndexes.length > 0) {\n const leafPubkey = await getLeafPubkey();\n\n // Fallback for PSBTs that do not include per-input HD key origins.\n for (const inputIndex of missingDerivationIndexes) {\n tx.updateInput(inputIndex, {\n bip32Derivation: [[leafPubkey, { fingerprint: fingerprintBE, path: pathNumbers }]],\n });\n }\n }\n\n const psbtB64 = base64.encode(tx.toPSBT(0));\n const sigs = await app.signPsbt(psbtB64, policy, null);\n\n for (const [idx, partial] of sigs) {\n tx.updateInput(idx, { partialSig: [[new Uint8Array(partial.pubkey), new Uint8Array(partial.signature)]] });\n }\n\n return tx;\n },\n };\n };\n};\n\nexport const BitcoinPsbtLedger = BaseLedgerPsbtUTXO({ chain: \"bitcoin\" });\nexport const LitecoinPsbtLedger = BaseLedgerPsbtUTXO({ chain: \"litecoin\" });\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "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",
|
|
8
|
+
"debugId": "891D5D7B8F0B7C8C64756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
package/dist/keepkey/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var Zz={};zz(Zz,{keepkeyWallet:()=>i,KEEPKEY_SUPPORTED_CHAINS:()=>Jz});module.exports=e(Zz);var a=require("@keepkey/keepkey-sdk"),z=require("@swapkit/helpers"),c=require("@swapkit/wallet-core");var x=require("@swapkit/helpers");async function d({sdk:Q,derivationPath:J}){let{DEFAULT_COSMOS_FEE_MAINNET:X,getCosmosToolbox:E,getFeeRateFromSwapKit:Y,createStargateClient:q}=await import("@swapkit/toolboxes/cosmos"),M=J?x.derivationPathToString(J):`${x.DerivationPath.GAIA}/0`,{address:B}=await Q.address.cosmosGetAddress({address_n:v(M)}),L=await E(x.Chain.Cosmos);if(X.amount[0])X.amount[0].amount=String(await Y(x.GAIAConfig.chainId,500));return{...L,address:B,transfer:async({assetValue:U,recipient:j,memo:F})=>{let y=U.getBaseValue("string"),b=await L.getAccount(B),K=await Q.cosmos.cosmosSignAmino({signDoc:{account_number:b?.accountNumber.toString()??"",chain_id:x.GAIAConfig.chainId,fee:X,memo:F||"",msgs:[{type:"cosmos-sdk/MsgSend",value:{amount:[{amount:y,denom:"uatom"}],from_address:B,to_address:j}}],sequence:b?.sequence.toString()??""},signerAddress:B}),V=atob(K.serialized),k=new Uint8Array(V.length).map((_,W)=>V.charCodeAt(W)),P=await x.getRPCUrl(x.Chain.Cosmos);return(await(await q(P)).broadcastTx(k)).transactionHash}}}var A=require("@swapkit/helpers"),o=require("ethers");class p extends o.AbstractSigner{sdk;chain;derivationPath;address;provider;constructor({sdk:Q,chain:J,derivationPath:X,provider:E}){super();this.sdk=Q,this.chain=J,this.derivationPath=X||A.NetworkDerivationPath.ETH,this.address="",this.provider=E}signTypedData=async(Q,J,X,E)=>{let{buildEIP712DomainType:Y}=await import("@swapkit/toolboxes/evm"),{TypedDataEncoder:q}=await import("ethers"),{EIP712Domain:M,...B}=J,L=E??q.from(B).primaryType,N=Y(Q),U=await this.getAddress(),j=await this.sdk.eth.ethSignTypedData({address:U,typedData:{domain:Q,message:X,primaryType:L,types:{EIP712Domain:N,...B}}});if(typeof j!=="string")throw new A.SwapKitError("wallet_keepkey_method_not_supported",{method:"signTypedData"});return j.startsWith("0x")?j:`0x${j}`};getAddress=async()=>{if(this.address)return this.address;let{address:Q}=await this.sdk.address.ethereumGetAddress({address_n:v(A.derivationPathToString(this.derivationPath))});return this.address=Q,Q};signMessage=(Q)=>this.sdk.eth.ethSign({address:this.address,message:Q});signTransaction=async({to:Q,value:J,gasLimit:X,nonce:E,data:Y,maxFeePerGas:q,maxPriorityFeePerGas:M,gasPrice:B})=>{if(!Q)throw new A.SwapKitError("wallet_keepkey_invalid_params",{reason:"Missing to address"});if(!X)throw new A.SwapKitError("wallet_keepkey_invalid_params",{reason:"Missing gasLimit"});if(!Y)throw new A.SwapKitError("wallet_keepkey_invalid_params",{reason:"Missing data"});let L=!!((q||M)&&!B);if(L&&!q)throw new A.SwapKitError("wallet_keepkey_invalid_params",{reason:"Missing maxFeePerGas"});if(L&&!M)throw new A.SwapKitError("wallet_keepkey_invalid_params",{reason:"Missing maxPriorityFeePerGas"});if(!(L||B))throw new A.SwapKitError("wallet_keepkey_invalid_params",{reason:"Missing gasPrice"});let{toHexString:N}=await import("@swapkit/toolboxes/evm"),U=E?BigInt(E):BigInt(await this.provider.getTransactionCount(await this.getAddress(),"pending")),j={addressNList:[2147483692,2147483708,2147483648,0,0],chainId:N(BigInt(A.ChainToChainId[this.chain])),data:Y,from:this.address,gas:N(BigInt(X)),nonce:N(U),to:Q.toString(),value:N(BigInt(J||0)),...L&&{maxFeePerGas:N(BigInt(q?.toString()||"0")),maxPriorityFeePerGas:N(BigInt(M?.toString()||"0"))},...!L&&{gasPrice:N(BigInt(B?.toString()||"0"))}};return(await this.sdk.eth.ethSignTransaction(j)).serialized};sendTransaction=async(Q)=>{if(!this.provider)throw new A.SwapKitError("wallet_keepkey_no_provider");let J=await this.signTransaction(Q);return await this.provider.broadcastTransaction(J)};connect=(Q)=>new p({chain:this.chain,derivationPath:this.derivationPath,provider:Q,sdk:this.sdk})}var S=require("@swapkit/helpers");async function r({sdk:Q,derivationPath:J}){let{createStargateClient:X,getCosmosToolbox:E}=await import("@swapkit/toolboxes/cosmos"),Y=await E(S.Chain.Maya),q=J?S.derivationPathToString(J):`${S.DerivationPath.MAYA}/0`,{address:M}=await Q.address.mayachainGetAddress({address_n:v(q)}),B=async({assetValue:U,recipient:j,sender:F,memo:y})=>{let b=await import("@cosmjs/amino"),K=b.makeSignDoc??b.default?.makeSignDoc,{getDenomWithChain:V}=await import("@swapkit/toolboxes/cosmos"),k=await Y.getAccount(F);if(!k)throw new S.SwapKitError("wallet_keepkey_account_not_found");let{accountNumber:P,sequence:Z=0}=k,$=U.getBaseValue("string"),_=j&&j!=="",W=_?{type:"mayachain/MsgSend",value:{amount:[{amount:$,denom:U.symbol.toLowerCase()}],from_address:F,to_address:j}}:{type:"mayachain/MsgDeposit",value:{coins:[{amount:$,asset:V(U)}],memo:y,signer:F}},H=K([W],{amount:[],gas:"500000000"},S.MAYAConfig.chainId,y,P?.toString(),Z),O=await(_?Q.mayachain.mayachainSignAminoTransfer:Q.mayachain.mayachainSignAminoDeposit)({signDoc:H,signerAddress:F}),G=atob(O.serialized);return new Uint8Array(G.length).map((T,f)=>G.charCodeAt(f))};return{...Y,address:M,deposit:async({assetValue:U,memo:j})=>{let F=await S.getRPCUrl(S.Chain.Maya),y=await X(F),b=await B({assetValue:U,memo:j,sender:M}),{transactionHash:K}=await y.broadcastTx(b);return K},transfer:async({assetValue:U,recipient:j,memo:F})=>{let y=await S.getRPCUrl(S.Chain.Maya),b=await X(y),K=await B({assetValue:U,memo:F,recipient:j,sender:M}),{transactionHash:V}=await b.broadcastTx(K);return V}}}var w=require("@swapkit/helpers");async function s({sdk:Q,derivationPath:J}){let X=await import("@cosmjs/amino"),E=X.makeSignDoc??X.default?.makeSignDoc,{buildAminoMsg:Y,getDefaultChainFee:q,createStargateClient:M,getCosmosToolbox:B}=await import("@swapkit/toolboxes/cosmos"),L=await B(w.Chain.THORChain),N=J?w.derivationPathToString(J):`${w.DerivationPath.THOR}/0`,{address:U}=await Q.address.thorchainGetAddress({address_n:v(N)}),j=async({assetValue:b,recipient:K,sender:V,memo:k})=>{let P=await L.getAccount(V);if(!P)throw new w.SwapKitError("wallet_keepkey_account_not_found");let{accountNumber:Z,sequence:$=0}=P,_=K&&K!=="",W=Y({assetValue:b,memo:k,recipient:K,sender:V}),H=E([W],q(w.Chain.THORChain),w.THORConfig.chainId,k,Z?.toString(),$),I=_?await Q.thorchain.thorchainSignAminoTransfer({signDoc:H,signerAddress:V}):await Q.thorchain.thorchainSignAminoDeposit({signDoc:H,signerAddress:V}),O=atob(I.serialized);return new Uint8Array(O.length).map((G,T)=>O.charCodeAt(T))};return{...L,address:U,deposit:async({assetValue:b,memo:K})=>{let V=await w.getRPCUrl(w.Chain.THORChain),k=await M(V),P=await j({assetValue:b,memo:K,sender:U}),{transactionHash:Z}=await k.broadcastTx(P);return Z},transfer:async({assetValue:b,recipient:K,memo:V})=>{let k=await w.getRPCUrl(w.Chain.THORChain),P=await M(k),Z=await j({assetValue:b,memo:V,recipient:K,sender:U}),{transactionHash:$}=await P.broadcastTx(Z);return $}}}var R=require("@swapkit/helpers"),D=require("@swapkit/toolboxes/utxo");async function n({sdk:Q,chain:J,derivationPath:X}){let{getUtxoToolbox:E}=await import("@swapkit/toolboxes/utxo"),Y=await E(J),q=[R.Chain.Bitcoin,R.Chain.Litecoin].includes(J)?"p2wpkh":"p2pkh",M=X?R.derivationPathToString(X):`${R.DerivationPath[J]}/0`,B={address_n:v(M),coin:m[J],script_type:q},L=(await Q.address.utxoGetAddress(B)).address,N=D.getNetworkForChain(J),U=async(Z,$,_="")=>{let W=[];for(let O=0;O<Z.outputsLength;O++){let G=Z.getOutput(O),T=Z.getOutputAddress(O,N),f=Number(G.amount);if(T===L)W.push({addressNList:B.address_n,addressType:"change",amount:f,isChange:!0,scriptType:q});else if(T){let g=J===R.Chain.BitcoinCash?D.stripToCashAddress(T):T;if(g)W.push({address:g,addressType:"spend",amount:f})}}let H=(O)=>{return O.filter((G)=>G!==null&&typeof G==="object"&&Object.keys(G).length>0)};return(await Q.utxo.utxoSignTransaction({coin:m[J],inputs:$,opReturnData:_,outputs:H(W)})).serializedTx?.toString()},j=async({recipient:Z,feeOptionKey:$,feeRate:_,memo:W,...H})=>{if(!L)throw new R.SwapKitError("wallet_keepkey_invalid_params",{reason:"From address must be provided"});if(!Z)throw new R.SwapKitError("wallet_keepkey_invalid_params",{reason:"Recipient address must be provided"});let I=J===R.Chain.BitcoinCash?Y.buildTx:Y.createTransaction,{tx:O,inputs:G}=await I({...H,feeRate:_||(await Y.getFeeRates())[$||R.FeeOption.Fast],fetchTxHex:!0,memo:W,recipient:Z,sender:L}),T=G.map(({value:g,index:C,hash:u,txHex:l})=>({addressNList:B.address_n,amount:g.toString(),hex:l||"",scriptType:q,txid:u,vout:C})),f=await U(O,T,W);return Y.broadcastTx(f)},F=async(Z,$,_="")=>{let W=v(X?R.derivationPathToString(X.slice(0,3)):R.DerivationPath[J]),H=[];for(let G=0;G<Z.outputsLength;G++){let T=Z.getOutput(G),f=Z.getOutputAddress(G,N),g=Number(T.amount);if(f===L)H.push({addressNList:B.address_n,addressType:"change",amount:g,isChange:!0,scriptType:q});else if(f){let C=J===R.Chain.BitcoinCash?D.stripToCashAddress(f):f;if(C)H.push({address:C,addressType:"spend",amount:g})}}let I=$.map(({hash:G,index:T,value:f,txHex:g,derivationIndex:C,isChange:u})=>{let l=u?1:0;return{addressNList:[...W,l,C],amount:f.toString(),hex:g||"",scriptType:q,txid:G,vout:T}});return(await Q.utxo.utxoSignTransaction({coin:m[J],inputs:I,opReturnData:_,outputs:H.filter((G)=>G!==null&&typeof G==="object"&&Object.keys(G).length>0)})).serializedTx?.toString()||""},y=async({utxos:Z,recipient:$,assetValue:_,memo:W,feeRate:H,feeOptionKey:I})=>{let O=H||(await Y.getFeeRates())[I||R.FeeOption.Fast],G=J===R.Chain.BitcoinCash?Y.buildTx:Y.createTransaction,{tx:T,inputs:f}=await G({assetValue:_,feeRate:O,fetchTxHex:!0,memo:W,recipient:$,sender:L}),g=f.map((u)=>{let l=Z.find((h)=>h.hash===u.hash&&h.index===u.index);return{...u,derivationIndex:l?.derivationIndex??0,isChange:l?.isChange??!1}}),C=await F(T,g,W);return Y.broadcastTx(C)};async function b({accountIndex:Z}={}){try{let $=D.getUTXOAccountPath({accountIndex:Z,chain:J,derivationPath:X}),_=R.derivationPathToString($),W={address_n:v(_),coin:m[J],script_type:q,showDisplay:!1,symbol:J.toUpperCase()},H=await Q.system.info.getPublicKey(W);return{accountIndex:D.getUTXOAccountIndexFromPath($),path:_,xpub:H.xpub}}catch($){throw new R.SwapKitError("wallet_keepkey_failed_to_get_public_key",{chain:J,error:$ instanceof Error?$.message:"Unknown error"})}}function K(){return b()}async function V({accountIndex:Z,index:$,change:_=!1}){try{D.assertDerivationIndex("index",$);let W=D.getUTXOAddressPath({accountIndex:Z,chain:J,change:_,derivationPath:X,index:$}),H=R.derivationPathToString(W),I=await Q.address.utxoGetAddress({address_n:v(H),coin:m[J],script_type:q}),O=I.address;if(J===R.Chain.BitcoinCash)O=D.stripToCashAddress(I.address);return{accountIndex:D.getUTXOAccountIndexFromPath(W),address:O,change:_,index:$,path:H,pubkey:""}}catch{return}}async function k({accountIndex:Z,count:$,startIndex:_=0,change:W=!1}){return D.assertDerivationIndex("count",$),D.assertDerivationIndex("startIndex",_),(await Promise.all(Array.from({length:$},(I,O)=>V({accountIndex:Z,change:W,index:_+O})))).filter((I)=>!!I)}let P=D.createHDWalletHelpers({chain:J,deriveAddress:V,getBalance:Y.getBalance,getUtxos:(Z)=>D.getUtxoApi(J).getUtxos({address:Z,fetchTxHex:!0})});return{...Y,...P,address:L,deriveAddressAtIndex:V,deriveAddresses:k,getExtendedPublicKey:K,getExtendedPublicKeyInfo:b,signTransaction:U,signTransactionWithMultipleInputs:F,transfer:j,transferFromMultipleAddresses:y}}var i=c.createWallet({connect:({addChain:Q,supportedChains:J,walletType:X})=>async function(Y,q){let M=z.filterSupportedChains({chains:Y,supportedChains:J,walletType:X}),B=z.SKConfig.get("integrations").keepKey;if(!B)throw Error("KeepKey config not found");let L=z.SKConfig.get("apiKeys").keepKey||"1234";await t();let N={apiKey:L,pairingInfo:B},U=await a.KeepKeySdk.create(N);if(N.apiKey&&N.apiKey!==L)z.SKConfig.setApiKey("keepKey",N.apiKey);return await Promise.all(M.map(async(j)=>{let F=await Qz({chain:j,derivationPath:q?.[j]||z.NetworkDerivationPath[j],sdk:U}),y=await F.getAddress()||"";Q({...F,address:y,chain:j,walletType:z.WalletOption.KEEPKEY})})),!0},directSigningSupport:{[z.Chain.Arbitrum]:!0,[z.Chain.Avalanche]:!0,[z.Chain.Base]:!0,[z.Chain.Berachain]:!0,[z.Chain.BinanceSmartChain]:!0,[z.Chain.Ethereum]:!0,[z.Chain.Gnosis]:!0,[z.Chain.Monad]:!0,[z.Chain.Optimism]:!0,[z.Chain.Polygon]:!0,[z.Chain.Ripple]:!0,[z.Chain.XLayer]:!0},name:"connectKeepkey",supportedChains:[z.Chain.Arbitrum,z.Chain.Avalanche,z.Chain.Base,z.Chain.Berachain,z.Chain.BinanceSmartChain,z.Chain.Bitcoin,z.Chain.BitcoinCash,z.Chain.Cosmos,z.Chain.Dogecoin,z.Chain.Dash,z.Chain.Ethereum,z.Chain.Gnosis,z.Chain.Litecoin,z.Chain.Monad,z.Chain.Ripple,z.Chain.Optimism,z.Chain.Polygon,z.Chain.THORChain,z.Chain.Maya,z.Chain.XLayer],walletType:z.WalletOption.KEEPKEY}),Jz=c.getWalletSupportedChains(i);async function Qz({sdk:Q,chain:J,derivationPath:X}){let{getProvider:E,getEvmToolboxAsync:Y}=await import("@swapkit/toolboxes/evm");switch(J){case z.Chain.BinanceSmartChain:case z.Chain.Arbitrum:case z.Chain.Berachain:case z.Chain.Optimism:case z.Chain.Polygon:case z.Chain.Avalanche:case z.Chain.Base:case z.Chain.Ethereum:case z.Chain.Gnosis:case z.Chain.Monad:case z.Chain.XLayer:{let q=await E(J),M=new p({chain:J,derivationPath:X,provider:q,sdk:Q});return await Y(J,{provider:q,signer:M})}case z.Chain.Cosmos:return d({derivationPath:X,sdk:Q});case z.Chain.THORChain:return s({derivationPath:X,sdk:Q});case z.Chain.Maya:return r({derivationPath:X,sdk:Q});case z.Chain.Bitcoin:case z.Chain.BitcoinCash:case z.Chain.Dash:case z.Chain.Dogecoin:case z.Chain.Litecoin:return n({chain:J,derivationPath:X,sdk:Q});case z.Chain.Ripple:{let{rippleWalletMethods:q}=await import("../chunk-8sth2w05.js");return q({derivationPath:X,sdk:Q})}default:throw new z.SwapKitError("wallet_keepkey_chain_not_supported",{chain:J})}}async function t(Q=0){if(Q>=3)alert("KeepKey desktop is required for keepkey-sdk, please go to https://keepkey.com/get-started");if(!await Xz())window.location.assign("keepkey://launch"),await new Promise((X)=>setTimeout(X,30000)),await t(Q+1)}async function Xz(Q="http://localhost:1646/spec/swagger.json"){try{return(await fetch(Q)).status===200}catch{return!1}}
|
|
1
|
+
var Zz={};zz(Zz,{keepkeyWallet:()=>i,KEEPKEY_SUPPORTED_CHAINS:()=>Jz});module.exports=e(Zz);var a=require("@keepkey/keepkey-sdk"),z=require("@swapkit/helpers"),c=require("@swapkit/wallet-core");var x=require("@swapkit/helpers");async function d({sdk:Q,derivationPath:J}){let{DEFAULT_COSMOS_FEE_MAINNET:X,getCosmosToolbox:E,getFeeRateFromSwapKit:Y,createStargateClient:q}=await import("@swapkit/toolboxes/cosmos"),M=J?x.derivationPathToString(J):`${x.DerivationPath.GAIA}/0`,{address:B}=await Q.address.cosmosGetAddress({address_n:v(M)}),L=await E(x.Chain.Cosmos);if(X.amount[0])X.amount[0].amount=String(await Y(x.GAIAConfig.chainId,500));return{...L,address:B,transfer:async({assetValue:U,recipient:j,memo:F})=>{let y=U.getBaseValue("string"),b=await L.getAccount(B),K=await Q.cosmos.cosmosSignAmino({signDoc:{account_number:b?.accountNumber.toString()??"",chain_id:x.GAIAConfig.chainId,fee:X,memo:F||"",msgs:[{type:"cosmos-sdk/MsgSend",value:{amount:[{amount:y,denom:"uatom"}],from_address:B,to_address:j}}],sequence:b?.sequence.toString()??""},signerAddress:B}),V=atob(K.serialized),k=new Uint8Array(V.length).map((_,W)=>V.charCodeAt(W)),P=await x.getRPCUrl(x.Chain.Cosmos);return(await(await q(P)).broadcastTx(k)).transactionHash}}}var A=require("@swapkit/helpers"),o=require("ethers");class p extends o.AbstractSigner{sdk;chain;derivationPath;address;provider;constructor({sdk:Q,chain:J,derivationPath:X,provider:E}){super();this.sdk=Q,this.chain=J,this.derivationPath=X||A.NetworkDerivationPath.ETH,this.address="",this.provider=E}signTypedData=async(Q,J,X,E)=>{let{buildEIP712DomainType:Y}=await import("@swapkit/toolboxes/evm"),{TypedDataEncoder:q}=await import("ethers"),{EIP712Domain:M,...B}=J,L=E??q.from(B).primaryType,N=Y(Q),U=await this.getAddress(),j=await this.sdk.eth.ethSignTypedData({address:U,typedData:{domain:Q,message:X,primaryType:L,types:{EIP712Domain:N,...B}}});if(typeof j!=="string")throw new A.SwapKitError("wallet_keepkey_method_not_supported",{method:"signTypedData"});return j.startsWith("0x")?j:`0x${j}`};getAddress=async()=>{if(this.address)return this.address;let{address:Q}=await this.sdk.address.ethereumGetAddress({address_n:v(A.derivationPathToString(this.derivationPath))});return this.address=Q,Q};signMessage=(Q)=>this.sdk.eth.ethSign({address:this.address,message:Q});signTransaction=async({to:Q,value:J,gasLimit:X,nonce:E,data:Y,maxFeePerGas:q,maxPriorityFeePerGas:M,gasPrice:B})=>{if(!Q)throw new A.SwapKitError("wallet_keepkey_invalid_params",{reason:"Missing to address"});if(!X)throw new A.SwapKitError("wallet_keepkey_invalid_params",{reason:"Missing gasLimit"});if(!Y)throw new A.SwapKitError("wallet_keepkey_invalid_params",{reason:"Missing data"});let L=!!((q||M)&&!B);if(L&&!q)throw new A.SwapKitError("wallet_keepkey_invalid_params",{reason:"Missing maxFeePerGas"});if(L&&!M)throw new A.SwapKitError("wallet_keepkey_invalid_params",{reason:"Missing maxPriorityFeePerGas"});if(!(L||B))throw new A.SwapKitError("wallet_keepkey_invalid_params",{reason:"Missing gasPrice"});let{toHexString:N}=await import("@swapkit/toolboxes/evm"),U=E?BigInt(E):BigInt(await this.provider.getTransactionCount(await this.getAddress(),"pending")),j={addressNList:[2147483692,2147483708,2147483648,0,0],chainId:N(BigInt(A.ChainToChainId[this.chain])),data:Y,from:this.address,gas:N(BigInt(X)),nonce:N(U),to:Q.toString(),value:N(BigInt(J||0)),...L&&{maxFeePerGas:N(BigInt(q?.toString()||"0")),maxPriorityFeePerGas:N(BigInt(M?.toString()||"0"))},...!L&&{gasPrice:N(BigInt(B?.toString()||"0"))}};return(await this.sdk.eth.ethSignTransaction(j)).serialized};sendTransaction=async(Q)=>{if(!this.provider)throw new A.SwapKitError("wallet_keepkey_no_provider");let J=await this.signTransaction(Q);return await this.provider.broadcastTransaction(J)};connect=(Q)=>new p({chain:this.chain,derivationPath:this.derivationPath,provider:Q,sdk:this.sdk})}var S=require("@swapkit/helpers");async function r({sdk:Q,derivationPath:J}){let{createStargateClient:X,getCosmosToolbox:E}=await import("@swapkit/toolboxes/cosmos"),Y=await E(S.Chain.Maya),q=J?S.derivationPathToString(J):`${S.DerivationPath.MAYA}/0`,{address:M}=await Q.address.mayachainGetAddress({address_n:v(q)}),B=async({assetValue:U,recipient:j,sender:F,memo:y})=>{let b=await import("@cosmjs/amino"),K=b.makeSignDoc??b.default?.makeSignDoc,{getDenomWithChain:V}=await import("@swapkit/toolboxes/cosmos"),k=await Y.getAccount(F);if(!k)throw new S.SwapKitError("wallet_keepkey_account_not_found");let{accountNumber:P,sequence:Z=0}=k,$=U.getBaseValue("string"),_=j&&j!=="",W=_?{type:"mayachain/MsgSend",value:{amount:[{amount:$,denom:U.symbol.toLowerCase()}],from_address:F,to_address:j}}:{type:"mayachain/MsgDeposit",value:{coins:[{amount:$,asset:V(U)}],memo:y,signer:F}},H=K([W],{amount:[],gas:"500000000"},S.MAYAConfig.chainId,y,P?.toString(),Z),O=await(_?Q.mayachain.mayachainSignAminoTransfer:Q.mayachain.mayachainSignAminoDeposit)({signDoc:H,signerAddress:F}),G=atob(O.serialized);return new Uint8Array(G.length).map((T,f)=>G.charCodeAt(f))};return{...Y,address:M,deposit:async({assetValue:U,memo:j})=>{let F=await S.getRPCUrl(S.Chain.Maya),y=await X(F),b=await B({assetValue:U,memo:j,sender:M}),{transactionHash:K}=await y.broadcastTx(b);return K},transfer:async({assetValue:U,recipient:j,memo:F})=>{let y=await S.getRPCUrl(S.Chain.Maya),b=await X(y),K=await B({assetValue:U,memo:F,recipient:j,sender:M}),{transactionHash:V}=await b.broadcastTx(K);return V}}}var w=require("@swapkit/helpers");async function s({sdk:Q,derivationPath:J}){let X=await import("@cosmjs/amino"),E=X.makeSignDoc??X.default?.makeSignDoc,{buildAminoMsg:Y,getDefaultChainFee:q,createStargateClient:M,getCosmosToolbox:B}=await import("@swapkit/toolboxes/cosmos"),L=await B(w.Chain.THORChain),N=J?w.derivationPathToString(J):`${w.DerivationPath.THOR}/0`,{address:U}=await Q.address.thorchainGetAddress({address_n:v(N)}),j=async({assetValue:b,recipient:K,sender:V,memo:k})=>{let P=await L.getAccount(V);if(!P)throw new w.SwapKitError("wallet_keepkey_account_not_found");let{accountNumber:Z,sequence:$=0}=P,_=K&&K!=="",W=Y({assetValue:b,memo:k,recipient:K,sender:V}),H=E([W],q(w.Chain.THORChain),w.THORConfig.chainId,k,Z?.toString(),$),I=_?await Q.thorchain.thorchainSignAminoTransfer({signDoc:H,signerAddress:V}):await Q.thorchain.thorchainSignAminoDeposit({signDoc:H,signerAddress:V}),O=atob(I.serialized);return new Uint8Array(O.length).map((G,T)=>O.charCodeAt(T))};return{...L,address:U,deposit:async({assetValue:b,memo:K})=>{let V=await w.getRPCUrl(w.Chain.THORChain),k=await M(V),P=await j({assetValue:b,memo:K,sender:U}),{transactionHash:Z}=await k.broadcastTx(P);return Z},transfer:async({assetValue:b,recipient:K,memo:V})=>{let k=await w.getRPCUrl(w.Chain.THORChain),P=await M(k),Z=await j({assetValue:b,memo:V,recipient:K,sender:U}),{transactionHash:$}=await P.broadcastTx(Z);return $}}}var R=require("@swapkit/helpers"),D=require("@swapkit/toolboxes/utxo");async function n({sdk:Q,chain:J,derivationPath:X}){let{getUtxoToolbox:E}=await import("@swapkit/toolboxes/utxo"),Y=await E(J),q=[R.Chain.Bitcoin,R.Chain.Litecoin].includes(J)?"p2wpkh":"p2pkh",M=X?R.derivationPathToString(X):`${R.DerivationPath[J]}/0`,B={address_n:v(M),coin:m[J],script_type:q},L=(await Q.address.utxoGetAddress(B)).address,N=D.getNetworkForChain(J),U=async(Z,$,_="")=>{let W=[];for(let O=0;O<Z.outputsLength;O++){let G=Z.getOutput(O),T=Z.getOutputAddress(O,N),f=Number(G.amount);if(T===L)W.push({addressNList:B.address_n,addressType:"change",amount:f,isChange:!0,scriptType:q});else if(T){let g=J===R.Chain.BitcoinCash?D.stripToCashAddress(T):T;if(g)W.push({address:g,addressType:"spend",amount:f})}}let H=(O)=>{return O.filter((G)=>G!==null&&typeof G==="object"&&Object.keys(G).length>0)};return(await Q.utxo.utxoSignTransaction({coin:m[J],inputs:$,opReturnData:_,outputs:H(W)})).serializedTx?.toString()},j=async({recipient:Z,feeOptionKey:$,feeRate:_,memo:W,...H})=>{if(!L)throw new R.SwapKitError("wallet_keepkey_invalid_params",{reason:"From address must be provided"});if(!Z)throw new R.SwapKitError("wallet_keepkey_invalid_params",{reason:"Recipient address must be provided"});let I=J===R.Chain.BitcoinCash?Y.buildTx:Y.createTransaction,{tx:O,inputs:G}=await I({...H,feeRate:_||(await Y.getFeeRates())[$||R.FeeOption.Fast],fetchTxHex:!0,memo:W,recipient:Z,sender:L}),T=G.map(({value:g,index:C,hash:u,txHex:l})=>({addressNList:B.address_n,amount:g.toString(),hex:l||"",scriptType:q,txid:u,vout:C})),f=await U(O,T,W);return Y.broadcastTx(f)},F=async(Z,$,_="")=>{let W=v(X?R.derivationPathToString(X.slice(0,3)):R.DerivationPath[J]),H=[];for(let G=0;G<Z.outputsLength;G++){let T=Z.getOutput(G),f=Z.getOutputAddress(G,N),g=Number(T.amount);if(f===L)H.push({addressNList:B.address_n,addressType:"change",amount:g,isChange:!0,scriptType:q});else if(f){let C=J===R.Chain.BitcoinCash?D.stripToCashAddress(f):f;if(C)H.push({address:C,addressType:"spend",amount:g})}}let I=$.map(({hash:G,index:T,value:f,txHex:g,derivationIndex:C,isChange:u})=>{let l=u?1:0;return{addressNList:[...W,l,C],amount:f.toString(),hex:g||"",scriptType:q,txid:G,vout:T}});return(await Q.utxo.utxoSignTransaction({coin:m[J],inputs:I,opReturnData:_,outputs:H.filter((G)=>G!==null&&typeof G==="object"&&Object.keys(G).length>0)})).serializedTx?.toString()||""},y=async({utxos:Z,recipient:$,assetValue:_,memo:W,feeRate:H,feeOptionKey:I})=>{let O=H||(await Y.getFeeRates())[I||R.FeeOption.Fast],G=J===R.Chain.BitcoinCash?Y.buildTx:Y.createTransaction,{tx:T,inputs:f}=await G({assetValue:_,feeRate:O,fetchTxHex:!0,memo:W,recipient:$,sender:L}),g=f.map((u)=>{let l=Z.find((h)=>h.hash===u.hash&&h.index===u.index);return{...u,derivationIndex:l?.derivationIndex??0,isChange:l?.isChange??!1}}),C=await F(T,g,W);return Y.broadcastTx(C)};async function b({accountIndex:Z}={}){try{let $=D.getUTXOAccountPath({accountIndex:Z,chain:J,derivationPath:X}),_=R.derivationPathToString($),W={address_n:v(_),coin:m[J],script_type:q,showDisplay:!1,symbol:J.toUpperCase()},H=await Q.system.info.getPublicKey(W);return{accountIndex:D.getUTXOAccountIndexFromPath($),path:_,xpub:H.xpub}}catch($){throw new R.SwapKitError("wallet_keepkey_failed_to_get_public_key",{chain:J,error:$ instanceof Error?$.message:"Unknown error"})}}function K(Z={}){return b(Z)}async function V({accountIndex:Z,index:$,change:_=!1}){try{D.assertDerivationIndex("index",$);let W=D.getUTXOAddressPath({accountIndex:Z,chain:J,change:_,derivationPath:X,index:$}),H=R.derivationPathToString(W),I=await Q.address.utxoGetAddress({address_n:v(H),coin:m[J],script_type:q}),O=I.address;if(J===R.Chain.BitcoinCash)O=D.stripToCashAddress(I.address);return{accountIndex:D.getUTXOAccountIndexFromPath(W),address:O,change:_,index:$,path:H,pubkey:""}}catch{return}}async function k({accountIndex:Z,count:$,startIndex:_=0,change:W=!1}){return D.assertDerivationIndex("count",$),D.assertDerivationIndex("startIndex",_),(await Promise.all(Array.from({length:$},(I,O)=>V({accountIndex:Z,change:W,index:_+O})))).filter((I)=>!!I)}let P=D.createHDWalletHelpers({chain:J,deriveAddress:V,getBalance:Y.getBalance,getUtxos:(Z)=>D.getUtxoApi(J).getUtxos({address:Z,fetchTxHex:!0})});return{...Y,...P,address:L,deriveAddressAtIndex:V,deriveAddresses:k,getExtendedPublicKey:K,getExtendedPublicKeyInfo:b,signTransaction:U,signTransactionWithMultipleInputs:F,transfer:j,transferFromMultipleAddresses:y}}var i=c.createWallet({connect:({addChain:Q,supportedChains:J,walletType:X})=>async function(Y,q){let M=z.filterSupportedChains({chains:Y,supportedChains:J,walletType:X}),B=z.SKConfig.get("integrations").keepKey;if(!B)throw Error("KeepKey config not found");let L=z.SKConfig.get("apiKeys").keepKey||"1234";await t();let N={apiKey:L,pairingInfo:B},U=await a.KeepKeySdk.create(N);if(N.apiKey&&N.apiKey!==L)z.SKConfig.setApiKey("keepKey",N.apiKey);return await Promise.all(M.map(async(j)=>{let F=await Qz({chain:j,derivationPath:q?.[j]||z.NetworkDerivationPath[j],sdk:U}),y=await F.getAddress()||"";Q({...F,address:y,chain:j,walletType:z.WalletOption.KEEPKEY})})),!0},directSigningSupport:{[z.Chain.Arbitrum]:!0,[z.Chain.Avalanche]:!0,[z.Chain.Base]:!0,[z.Chain.Berachain]:!0,[z.Chain.BinanceSmartChain]:!0,[z.Chain.Ethereum]:!0,[z.Chain.Gnosis]:!0,[z.Chain.Monad]:!0,[z.Chain.Optimism]:!0,[z.Chain.Polygon]:!0,[z.Chain.Ripple]:!0,[z.Chain.XLayer]:!0},name:"connectKeepkey",supportedChains:[z.Chain.Arbitrum,z.Chain.Avalanche,z.Chain.Base,z.Chain.Berachain,z.Chain.BinanceSmartChain,z.Chain.Bitcoin,z.Chain.BitcoinCash,z.Chain.Cosmos,z.Chain.Dogecoin,z.Chain.Dash,z.Chain.Ethereum,z.Chain.Gnosis,z.Chain.Litecoin,z.Chain.Monad,z.Chain.Ripple,z.Chain.Optimism,z.Chain.Polygon,z.Chain.THORChain,z.Chain.Maya,z.Chain.XLayer],walletType:z.WalletOption.KEEPKEY}),Jz=c.getWalletSupportedChains(i);async function Qz({sdk:Q,chain:J,derivationPath:X}){let{getProvider:E,getEvmToolboxAsync:Y}=await import("@swapkit/toolboxes/evm");switch(J){case z.Chain.BinanceSmartChain:case z.Chain.Arbitrum:case z.Chain.Berachain:case z.Chain.Optimism:case z.Chain.Polygon:case z.Chain.Avalanche:case z.Chain.Base:case z.Chain.Ethereum:case z.Chain.Gnosis:case z.Chain.Monad:case z.Chain.XLayer:{let q=await E(J),M=new p({chain:J,derivationPath:X,provider:q,sdk:Q});return await Y(J,{provider:q,signer:M})}case z.Chain.Cosmos:return d({derivationPath:X,sdk:Q});case z.Chain.THORChain:return s({derivationPath:X,sdk:Q});case z.Chain.Maya:return r({derivationPath:X,sdk:Q});case z.Chain.Bitcoin:case z.Chain.BitcoinCash:case z.Chain.Dash:case z.Chain.Dogecoin:case z.Chain.Litecoin:return n({chain:J,derivationPath:X,sdk:Q});case z.Chain.Ripple:{let{rippleWalletMethods:q}=await import("../chunk-8sth2w05.js");return q({derivationPath:X,sdk:Q})}default:throw new z.SwapKitError("wallet_keepkey_chain_not_supported",{chain:J})}}async function t(Q=0){if(Q>=3)alert("KeepKey desktop is required for keepkey-sdk, please go to https://keepkey.com/get-started");if(!await Xz())window.location.assign("keepkey://launch"),await new Promise((X)=>setTimeout(X,30000)),await t(Q+1)}async function Xz(Q="http://localhost:1646/spec/swagger.json"){try{return(await fetch(Q)).status===200}catch{return!1}}
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=45535A9905F9497364756E2164756E21
|
|
4
4
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
"import type { KeepKeySdk } from \"@keepkey/keepkey-sdk\";\nimport {\n type Chain,\n ChainToChainId,\n type DerivationPathArray,\n derivationPathToString,\n NetworkDerivationPath,\n SwapKitError,\n} from \"@swapkit/helpers\";\nimport type { JsonRpcProvider, Provider, TransactionRequest, TypedDataDomain, TypedDataField } from \"ethers\";\nimport { AbstractSigner } from \"ethers\";\n\nimport { bip32ToAddressNList } from \"../coins\";\n\ninterface KeepKeyEVMSignerParams {\n sdk: KeepKeySdk;\n chain: Chain;\n derivationPath?: DerivationPathArray;\n provider: Provider | JsonRpcProvider;\n}\n\nexport class KeepKeySigner extends AbstractSigner {\n private sdk: KeepKeySdk;\n private chain: Chain;\n private derivationPath: DerivationPathArray;\n private address: string;\n readonly provider: Provider | JsonRpcProvider;\n\n constructor({ sdk, chain, derivationPath, provider }: KeepKeyEVMSignerParams) {\n super();\n this.sdk = sdk;\n this.chain = chain;\n this.derivationPath = derivationPath || NetworkDerivationPath.ETH;\n this.address = \"\";\n this.provider = provider;\n }\n\n signTypedData = async (\n domain: TypedDataDomain,\n types: Record<string, TypedDataField[]>,\n value: Record<string, unknown>,\n explicitPrimaryType?: string,\n ) => {\n const { buildEIP712DomainType } = await import(\"@swapkit/toolboxes/evm\");\n const { TypedDataEncoder } = await import(\"ethers\");\n\n const { EIP712Domain: _, ...filteredTypes } = types;\n const primaryType = explicitPrimaryType ?? TypedDataEncoder.from(filteredTypes).primaryType;\n const domainTypes = buildEIP712DomainType(domain);\n\n const address = await this.getAddress();\n const result = await this.sdk.eth.ethSignTypedData({\n address,\n typedData: {\n domain: domain as Record<string, unknown>,\n message: value,\n primaryType,\n types: { EIP712Domain: domainTypes, ...filteredTypes },\n },\n });\n\n if (typeof result !== \"string\") {\n throw new SwapKitError(\"wallet_keepkey_method_not_supported\", { method: \"signTypedData\" });\n }\n\n return result.startsWith(\"0x\") ? result : `0x${result}`;\n };\n\n getAddress = async () => {\n if (this.address) return this.address;\n const { address } = await this.sdk.address.ethereumGetAddress({\n address_n: bip32ToAddressNList(derivationPathToString(this.derivationPath)),\n });\n\n this.address = address;\n return address;\n };\n\n signMessage = (message: string) => this.sdk.eth.ethSign({ address: this.address, message }) as Promise<string>;\n\n signTransaction = async ({\n to,\n value,\n gasLimit,\n nonce,\n data,\n maxFeePerGas,\n maxPriorityFeePerGas,\n gasPrice,\n }: TransactionRequest) => {\n if (!to) throw new SwapKitError(\"wallet_keepkey_invalid_params\", { reason: \"Missing to address\" });\n if (!gasLimit) throw new SwapKitError(\"wallet_keepkey_invalid_params\", { reason: \"Missing gasLimit\" });\n if (!data) throw new SwapKitError(\"wallet_keepkey_invalid_params\", { reason: \"Missing data\" });\n\n const isEIP1559 = !!((maxFeePerGas || maxPriorityFeePerGas) && !gasPrice);\n if (isEIP1559 && !maxFeePerGas)\n throw new SwapKitError(\"wallet_keepkey_invalid_params\", { reason: \"Missing maxFeePerGas\" });\n if (isEIP1559 && !maxPriorityFeePerGas)\n throw new SwapKitError(\"wallet_keepkey_invalid_params\", { reason: \"Missing maxPriorityFeePerGas\" });\n if (!(isEIP1559 || gasPrice))\n throw new SwapKitError(\"wallet_keepkey_invalid_params\", { reason: \"Missing gasPrice\" });\n\n const { toHexString } = await import(\"@swapkit/toolboxes/evm\");\n\n const nonceValue = nonce\n ? BigInt(nonce)\n : BigInt(await this.provider.getTransactionCount(await this.getAddress(), \"pending\"));\n\n const input = {\n addressNList: [2147483692, 2147483708, 2147483648, 0, 0],\n chainId: toHexString(BigInt(ChainToChainId[this.chain])),\n data,\n from: this.address,\n gas: toHexString(BigInt(gasLimit)),\n nonce: toHexString(nonceValue),\n to: to.toString(),\n value: toHexString(BigInt(value || 0)),\n ...(isEIP1559 && {\n maxFeePerGas: toHexString(BigInt(maxFeePerGas?.toString() || \"0\")),\n maxPriorityFeePerGas: toHexString(BigInt(maxPriorityFeePerGas?.toString() || \"0\")),\n }),\n ...(!isEIP1559 && {\n // Fixed syntax error and structure here\n gasPrice: toHexString(BigInt(gasPrice?.toString() || \"0\")),\n }),\n };\n const responseSign = await this.sdk.eth.ethSignTransaction(input);\n return responseSign.serialized;\n };\n\n sendTransaction = async (tx: TransactionRequest): Promise<any> => {\n if (!this.provider) throw new SwapKitError(\"wallet_keepkey_no_provider\");\n\n const signedTxHex = await this.signTransaction(tx);\n\n return await this.provider.broadcastTransaction(signedTxHex);\n };\n\n connect = (provider: Provider) =>\n new KeepKeySigner({ chain: this.chain, derivationPath: this.derivationPath, provider, sdk: this.sdk });\n}\n",
|
|
8
8
|
"import type { KeepKeySdk } from \"@keepkey/keepkey-sdk\";\nimport {\n type AssetValue,\n Chain,\n DerivationPath,\n type DerivationPathArray,\n derivationPathToString,\n type GenericTransferParams,\n getRPCUrl,\n MAYAConfig,\n SwapKitError,\n} from \"@swapkit/helpers\";\nimport type { ThorchainDepositParams } from \"@swapkit/toolboxes/cosmos\";\n\nimport { bip32ToAddressNList } from \"../coins\";\n\ntype SignTransactionParams = { assetValue: AssetValue; recipient?: string; sender: string; memo: string | undefined };\n\nexport async function mayachainWalletMethods({\n sdk,\n derivationPath,\n}: {\n sdk: KeepKeySdk;\n derivationPath?: DerivationPathArray;\n}): Promise<any> {\n const { createStargateClient, getCosmosToolbox } = await import(\"@swapkit/toolboxes/cosmos\");\n\n const toolbox = await getCosmosToolbox(Chain.Maya);\n const derivationPathString = derivationPath ? derivationPathToString(derivationPath) : `${DerivationPath.MAYA}/0`;\n\n const { address: fromAddress } = (await sdk.address.mayachainGetAddress({\n address_n: bip32ToAddressNList(derivationPathString),\n })) as { address: string };\n\n const signTransaction = async ({ assetValue, recipient, sender, memo }: SignTransactionParams) => {\n const importedAmino = await import(\"@cosmjs/amino\");\n const makeSignDoc = importedAmino.makeSignDoc ?? importedAmino.default?.makeSignDoc;\n const { getDenomWithChain } = await import(\"@swapkit/toolboxes/cosmos\");\n\n const account = await toolbox.getAccount(sender);\n if (!account) throw new SwapKitError(\"wallet_keepkey_account_not_found\");\n const { accountNumber, sequence = 0 } = account;\n const amount = assetValue.getBaseValue(\"string\");\n\n const isTransfer = recipient && recipient !== \"\";\n\n // TODO check if we can move to toolbox created msg\n const msg = isTransfer\n ? {\n type: \"mayachain/MsgSend\",\n value: {\n amount: [{ amount, denom: assetValue.symbol.toLowerCase() }],\n from_address: sender,\n to_address: recipient,\n },\n }\n : {\n type: \"mayachain/MsgDeposit\",\n value: { coins: [{ amount, asset: getDenomWithChain(assetValue) }], memo, signer: sender },\n };\n\n const signDoc = makeSignDoc(\n [msg],\n { amount: [], gas: \"500000000\" },\n MAYAConfig.chainId,\n memo,\n accountNumber?.toString(),\n sequence,\n );\n\n const sdkMethod = isTransfer ? sdk.mayachain.mayachainSignAminoTransfer : sdk.mayachain.mayachainSignAminoDeposit;\n\n // @ts-expect-error TC\n const signedTx = await sdkMethod({ signDoc, signerAddress: sender });\n const decodedBytes = atob(signedTx.serialized);\n return new Uint8Array(decodedBytes.length).map((_, i) => decodedBytes.charCodeAt(i));\n };\n\n const transfer = async ({ assetValue, recipient, memo }: GenericTransferParams) => {\n const rpcUrl = await getRPCUrl(Chain.Maya);\n const stargateClient = await createStargateClient(rpcUrl);\n const signedTransaction = await signTransaction({ assetValue, memo, recipient, sender: fromAddress });\n const { transactionHash } = await stargateClient.broadcastTx(signedTransaction);\n\n return transactionHash;\n };\n\n const deposit = async ({ assetValue, memo }: ThorchainDepositParams) => {\n const rpcUrl = await getRPCUrl(Chain.Maya);\n const stargateClient = await createStargateClient(rpcUrl);\n const signedTransaction = await signTransaction({ assetValue, memo, sender: fromAddress });\n const { transactionHash } = await stargateClient.broadcastTx(signedTransaction);\n\n return transactionHash;\n };\n\n return { ...toolbox, address: fromAddress, deposit, transfer };\n}\n",
|
|
9
9
|
"import type { KeepKeySdk, TypesThorchainSignDocDeposit, TypesThorchainSignDocTransfer } from \"@keepkey/keepkey-sdk\";\nimport {\n type AssetValue,\n Chain,\n DerivationPath,\n type DerivationPathArray,\n derivationPathToString,\n type GenericTransferParams,\n getRPCUrl,\n SwapKitError,\n THORConfig,\n} from \"@swapkit/helpers\";\nimport type { ThorchainDepositParams } from \"@swapkit/toolboxes/cosmos\";\n\nimport { bip32ToAddressNList } from \"../coins\";\n\ntype SignTransactionParams = { assetValue: AssetValue; recipient?: string; sender: string; memo: string | undefined };\n\nexport async function thorchainWalletMethods({\n sdk,\n derivationPath,\n}: {\n sdk: KeepKeySdk;\n derivationPath?: DerivationPathArray;\n}): Promise<any> {\n const importedAmino = await import(\"@cosmjs/amino\");\n const makeSignDoc = importedAmino.makeSignDoc ?? importedAmino.default?.makeSignDoc;\n const { buildAminoMsg, getDefaultChainFee, createStargateClient, getCosmosToolbox } = await import(\n \"@swapkit/toolboxes/cosmos\"\n );\n\n const toolbox = await getCosmosToolbox(Chain.THORChain);\n const derivationPathString = derivationPath ? derivationPathToString(derivationPath) : `${DerivationPath.THOR}/0`;\n\n const { address: fromAddress } = (await sdk.address.thorchainGetAddress({\n address_n: bip32ToAddressNList(derivationPathString),\n })) as { address: string };\n\n const signTransaction = async ({ assetValue, recipient, sender, memo }: SignTransactionParams) => {\n const account = await toolbox.getAccount(sender);\n if (!account) throw new SwapKitError(\"wallet_keepkey_account_not_found\");\n const { accountNumber, sequence = 0 } = account;\n\n const isTransfer = recipient && recipient !== \"\";\n const msg = buildAminoMsg({ assetValue, memo, recipient, sender });\n\n const signDoc = makeSignDoc(\n [msg],\n getDefaultChainFee(Chain.THORChain),\n THORConfig.chainId,\n memo,\n accountNumber?.toString(),\n sequence,\n );\n\n const signedTx = isTransfer\n ? await sdk.thorchain.thorchainSignAminoTransfer({\n signDoc: signDoc as TypesThorchainSignDocTransfer,\n signerAddress: sender,\n })\n : await sdk.thorchain.thorchainSignAminoDeposit({\n signDoc: signDoc as TypesThorchainSignDocDeposit,\n signerAddress: sender,\n });\n const decodedBytes = atob(signedTx.serialized);\n return new Uint8Array(decodedBytes.length).map((_, i) => decodedBytes.charCodeAt(i));\n };\n\n const transfer = async ({ assetValue, recipient, memo }: GenericTransferParams) => {\n const rpcUrl = await getRPCUrl(Chain.THORChain);\n const stargateClient = await createStargateClient(rpcUrl);\n const signedTransaction = await signTransaction({ assetValue, memo, recipient, sender: fromAddress });\n const { transactionHash } = await stargateClient.broadcastTx(signedTransaction);\n\n return transactionHash;\n };\n\n const deposit = async ({ assetValue, memo }: ThorchainDepositParams) => {\n const rpcUrl = await getRPCUrl(Chain.THORChain);\n const stargateClient = await createStargateClient(rpcUrl);\n const signedTransaction = await signTransaction({ assetValue, memo, sender: fromAddress });\n const { transactionHash } = await stargateClient.broadcastTx(signedTransaction);\n\n return transactionHash;\n };\n\n // const signMessage = async (message: string) => {\n // const stargateClient = await createStargateClient(RPCUrl.THORChain);\n // // return signedTx;\n // };\n\n return { ...toolbox, address: fromAddress, deposit, transfer };\n}\n",
|
|
10
|
-
"import type { KeepKeySdk } from \"@keepkey/keepkey-sdk\";\nimport {\n Chain,\n DerivationPath,\n type DerivationPathArray,\n derivationPathToString,\n FeeOption,\n type GenericTransferParams,\n SwapKitError,\n type UTXOChain,\n} from \"@swapkit/helpers\";\nimport {\n assertDerivationIndex,\n createHDWalletHelpers,\n getNetworkForChain,\n getUTXOAccountIndexFromPath,\n getUTXOAccountPath,\n getUTXOAddressPath,\n getUtxoApi,\n stripToCashAddress,\n type UTXOToolboxes,\n} from \"@swapkit/toolboxes/utxo\";\nimport type { Transaction } from \"@swapkit/utxo-signer\";\nimport { bip32ToAddressNList, ChainToKeepKeyName } from \"../coins\";\n\ninterface KeepKeyInputObject {\n addressNList: number[];\n scriptType: string;\n amount: string;\n vout: number;\n txid: string;\n hex: string;\n}\n\ntype KeepKeyUTXOWalletMethods = Record<string, unknown> & { address: string };\n\nexport async function utxoWalletMethods({\n sdk,\n chain,\n derivationPath,\n}: {\n sdk: KeepKeySdk;\n chain: Exclude<UTXOChain, typeof Chain.Zcash>;\n derivationPath?: DerivationPathArray;\n}): Promise<KeepKeyUTXOWalletMethods> {\n const { getUtxoToolbox } = await import(\"@swapkit/toolboxes/utxo\");\n // This might not work for BCH\n const toolbox = await getUtxoToolbox(chain);\n const scriptType = [Chain.Bitcoin, Chain.Litecoin].includes(chain as typeof Chain.Bitcoin)\n ? (\"p2wpkh\" as const)\n : (\"p2pkh\" as const);\n\n const derivationPathString = derivationPath ? derivationPathToString(derivationPath) : `${DerivationPath[chain]}/0`;\n\n const addressInfo = {\n address_n: bip32ToAddressNList(derivationPathString),\n coin: ChainToKeepKeyName[chain],\n script_type: scriptType,\n };\n\n const walletAddress: string = (await sdk.address.utxoGetAddress(addressInfo)).address;\n const network = getNetworkForChain(chain);\n\n const signTransaction = async (tx: Transaction, inputs: KeepKeyInputObject[], memo = \"\") => {\n const outputs: any[] = [];\n\n for (let i = 0; i < tx.outputsLength; i++) {\n const output = tx.getOutput(i);\n const address = tx.getOutputAddress(i, network);\n const value = Number(output.amount);\n\n if (address === walletAddress) {\n outputs.push({\n addressNList: addressInfo.address_n,\n addressType: \"change\",\n amount: value,\n isChange: true,\n scriptType,\n });\n } else if (address) {\n const outputAddress = chain === Chain.BitcoinCash ? stripToCashAddress(address) : address;\n\n if (outputAddress) {\n outputs.push({ address: outputAddress, addressType: \"spend\", amount: value });\n }\n }\n }\n\n const removeNullAndEmptyObjectsFromArray = (arr: any[]) => {\n return arr.filter((item) => item !== null && typeof item === \"object\" && Object.keys(item).length > 0);\n };\n\n const responseSign = await sdk.utxo.utxoSignTransaction({\n coin: ChainToKeepKeyName[chain],\n inputs,\n opReturnData: memo,\n outputs: removeNullAndEmptyObjectsFromArray(outputs),\n });\n\n return responseSign.serializedTx?.toString();\n };\n\n const transfer = async ({ recipient, feeOptionKey, feeRate, memo, ...rest }: GenericTransferParams) => {\n if (!walletAddress)\n throw new SwapKitError(\"wallet_keepkey_invalid_params\", { reason: \"From address must be provided\" });\n if (!recipient)\n throw new SwapKitError(\"wallet_keepkey_invalid_params\", { reason: \"Recipient address must be provided\" });\n\n const createTxMethod =\n chain === Chain.BitcoinCash\n ? (toolbox as UTXOToolboxes[\"BCH\"]).buildTx\n : (toolbox as UTXOToolboxes[\"BTC\"]).createTransaction;\n\n const { tx, inputs: rawInputs } = await createTxMethod({\n ...rest,\n feeRate: feeRate || (await toolbox.getFeeRates())[feeOptionKey || FeeOption.Fast],\n fetchTxHex: true,\n memo,\n recipient,\n sender: walletAddress,\n });\n\n const inputs = rawInputs.map(({ value, index, hash, txHex }) => ({\n //@TODO don't hardcode master, lookup on blockbook what input this is for and what path that address is!\n addressNList: addressInfo.address_n,\n amount: value.toString(),\n hex: txHex || \"\",\n scriptType,\n txid: hash,\n vout: index,\n }));\n\n const txHex = await signTransaction(tx, inputs, memo);\n return toolbox.broadcastTx(txHex);\n };\n\n const signTransactionWithMultipleInputs = async (\n tx: Transaction,\n inputs: Array<{\n hash: string;\n index: number;\n value: number;\n txHex?: string;\n derivationIndex: number;\n isChange: boolean;\n }>,\n memo = \"\",\n ) => {\n const accountAddressN = bip32ToAddressNList(\n derivationPath\n ? derivationPathToString(derivationPath.slice(0, 3) as DerivationPathArray)\n : DerivationPath[chain],\n );\n\n type KeepKeyOutput =\n | { addressNList: number[]; addressType: \"change\"; amount: number; isChange: true; scriptType: string }\n | { address: string; addressType: \"spend\"; amount: number };\n\n const outputs: KeepKeyOutput[] = [];\n for (let i = 0; i < tx.outputsLength; i++) {\n const output = tx.getOutput(i);\n const outputAddress = tx.getOutputAddress(i, network);\n const value = Number(output.amount);\n\n if (outputAddress === walletAddress) {\n outputs.push({\n addressNList: addressInfo.address_n,\n addressType: \"change\",\n amount: value,\n isChange: true,\n scriptType,\n });\n } else if (outputAddress) {\n const finalAddress = chain === Chain.BitcoinCash ? stripToCashAddress(outputAddress) : outputAddress;\n if (finalAddress) {\n outputs.push({ address: finalAddress, addressType: \"spend\", amount: value });\n }\n }\n }\n\n const keepKeyInputs = inputs.map(({ hash, index: inputIndex, value, txHex, derivationIndex, isChange }) => {\n const changePath = isChange ? 1 : 0;\n const inputAddressN = [...accountAddressN, changePath, derivationIndex];\n return {\n addressNList: inputAddressN,\n amount: value.toString(),\n hex: txHex || \"\",\n scriptType,\n txid: hash,\n vout: inputIndex,\n };\n });\n\n const responseSign = await sdk.utxo.utxoSignTransaction({\n coin: ChainToKeepKeyName[chain],\n inputs: keepKeyInputs,\n opReturnData: memo,\n outputs: outputs.filter((item) => item !== null && typeof item === \"object\" && Object.keys(item).length > 0),\n });\n\n return responseSign.serializedTx?.toString() || \"\";\n };\n\n const transferFromMultipleAddresses = async ({\n utxos,\n recipient,\n assetValue,\n memo,\n feeRate,\n feeOptionKey,\n }: {\n utxos: Array<{\n hash: string;\n index: number;\n value: number;\n txHex?: string;\n derivationIndex: number;\n isChange: boolean;\n address: string;\n }>;\n recipient: string;\n assetValue: { getBaseValue: (unit: string) => number; chain: string };\n memo?: string;\n feeRate?: number;\n feeOptionKey?: (typeof FeeOption)[keyof typeof FeeOption];\n }) => {\n const txFeeRate = feeRate || (await toolbox.getFeeRates())[feeOptionKey || FeeOption.Fast];\n\n const createTxMethod =\n chain === Chain.BitcoinCash\n ? (toolbox as UTXOToolboxes[\"BCH\"]).buildTx\n : (toolbox as UTXOToolboxes[\"BTC\"]).createTransaction;\n\n const { tx, inputs: selectedInputs } = await createTxMethod({\n assetValue: assetValue as any,\n feeRate: txFeeRate,\n fetchTxHex: true,\n memo,\n recipient,\n sender: walletAddress,\n });\n\n const inputsWithDerivation = selectedInputs.map(\n (input: { hash: string; index: number; value: number; txHex?: string }) => {\n const utxoInfo = utxos.find((u) => u.hash === input.hash && u.index === input.index);\n return { ...input, derivationIndex: utxoInfo?.derivationIndex ?? 0, isChange: utxoInfo?.isChange ?? false };\n },\n );\n\n const signedTxHex = await signTransactionWithMultipleInputs(tx, inputsWithDerivation, memo);\n return toolbox.broadcastTx(signedTxHex);\n };\n\n async function getExtendedPublicKeyInfo({ accountIndex }: { accountIndex?: number } = {}) {\n try {\n const resolvedAccountPath = getUTXOAccountPath({ accountIndex, chain, derivationPath });\n const resolvedAccountPathString = derivationPathToString(resolvedAccountPath);\n const path = {\n address_n: bip32ToAddressNList(resolvedAccountPathString),\n coin: ChainToKeepKeyName[chain],\n script_type: scriptType,\n showDisplay: false,\n symbol: chain.toUpperCase(),\n };\n\n const responsePubkey = await sdk.system.info.getPublicKey(path);\n\n return {\n accountIndex: getUTXOAccountIndexFromPath(resolvedAccountPath),\n path: resolvedAccountPathString,\n xpub: responsePubkey.xpub,\n };\n } catch (error) {\n throw new SwapKitError(\"wallet_keepkey_failed_to_get_public_key\", {\n chain,\n error: error instanceof Error ? error.message : \"Unknown error\",\n });\n }\n }\n\n function getExtendedPublicKey() {\n return getExtendedPublicKeyInfo();\n }\n\n async function deriveAddressAtIndex({\n accountIndex,\n index,\n change = false,\n }: {\n accountIndex?: number;\n index: number;\n change?: boolean;\n }) {\n try {\n assertDerivationIndex(\"index\", index);\n const fullPath = getUTXOAddressPath({ accountIndex, chain, change, derivationPath, index });\n const fullPathString = derivationPathToString(fullPath);\n\n const result = await sdk.address.utxoGetAddress({\n address_n: bip32ToAddressNList(fullPathString),\n coin: ChainToKeepKeyName[chain],\n script_type: scriptType,\n });\n\n let finalAddress = result.address;\n if (chain === Chain.BitcoinCash) {\n finalAddress = stripToCashAddress(result.address);\n }\n\n return {\n accountIndex: getUTXOAccountIndexFromPath(fullPath),\n address: finalAddress,\n change,\n index,\n path: fullPathString,\n pubkey: \"\",\n };\n } catch {\n return undefined;\n }\n }\n\n async function deriveAddresses({\n accountIndex,\n count,\n startIndex = 0,\n change = false,\n }: {\n accountIndex?: number;\n count: number;\n startIndex?: number;\n change?: boolean;\n }) {\n assertDerivationIndex(\"count\", count);\n assertDerivationIndex(\"startIndex\", startIndex);\n\n const addresses = await Promise.all(\n Array.from({ length: count }, (_, i) => deriveAddressAtIndex({ accountIndex, change, index: startIndex + i })),\n );\n\n return addresses.filter((address) => !!address);\n }\n\n const hdHelpers = createHDWalletHelpers({\n chain,\n deriveAddress: deriveAddressAtIndex,\n getBalance: toolbox.getBalance,\n getUtxos: (address: string) => getUtxoApi(chain).getUtxos({ address, fetchTxHex: true }),\n });\n\n return {\n ...toolbox,\n ...hdHelpers,\n address: walletAddress,\n deriveAddressAtIndex,\n deriveAddresses,\n getExtendedPublicKey,\n getExtendedPublicKeyInfo,\n signTransaction,\n signTransactionWithMultipleInputs,\n transfer,\n transferFromMultipleAddresses,\n };\n}\n"
|
|
10
|
+
"import type { KeepKeySdk } from \"@keepkey/keepkey-sdk\";\nimport {\n Chain,\n DerivationPath,\n type DerivationPathArray,\n derivationPathToString,\n FeeOption,\n type GenericTransferParams,\n SwapKitError,\n type UTXOChain,\n} from \"@swapkit/helpers\";\nimport {\n assertDerivationIndex,\n createHDWalletHelpers,\n getNetworkForChain,\n getUTXOAccountIndexFromPath,\n getUTXOAccountPath,\n getUTXOAddressPath,\n getUtxoApi,\n stripToCashAddress,\n type UTXOToolboxes,\n} from \"@swapkit/toolboxes/utxo\";\nimport type { Transaction } from \"@swapkit/utxo-signer\";\nimport { bip32ToAddressNList, ChainToKeepKeyName } from \"../coins\";\n\ninterface KeepKeyInputObject {\n addressNList: number[];\n scriptType: string;\n amount: string;\n vout: number;\n txid: string;\n hex: string;\n}\n\ntype KeepKeyUTXOWalletMethods = Record<string, unknown> & { address: string };\n\nexport async function utxoWalletMethods({\n sdk,\n chain,\n derivationPath,\n}: {\n sdk: KeepKeySdk;\n chain: Exclude<UTXOChain, typeof Chain.Zcash>;\n derivationPath?: DerivationPathArray;\n}): Promise<KeepKeyUTXOWalletMethods> {\n const { getUtxoToolbox } = await import(\"@swapkit/toolboxes/utxo\");\n // This might not work for BCH\n const toolbox = await getUtxoToolbox(chain);\n const scriptType = [Chain.Bitcoin, Chain.Litecoin].includes(chain as typeof Chain.Bitcoin)\n ? (\"p2wpkh\" as const)\n : (\"p2pkh\" as const);\n\n const derivationPathString = derivationPath ? derivationPathToString(derivationPath) : `${DerivationPath[chain]}/0`;\n\n const addressInfo = {\n address_n: bip32ToAddressNList(derivationPathString),\n coin: ChainToKeepKeyName[chain],\n script_type: scriptType,\n };\n\n const walletAddress: string = (await sdk.address.utxoGetAddress(addressInfo)).address;\n const network = getNetworkForChain(chain);\n\n const signTransaction = async (tx: Transaction, inputs: KeepKeyInputObject[], memo = \"\") => {\n const outputs: any[] = [];\n\n for (let i = 0; i < tx.outputsLength; i++) {\n const output = tx.getOutput(i);\n const address = tx.getOutputAddress(i, network);\n const value = Number(output.amount);\n\n if (address === walletAddress) {\n outputs.push({\n addressNList: addressInfo.address_n,\n addressType: \"change\",\n amount: value,\n isChange: true,\n scriptType,\n });\n } else if (address) {\n const outputAddress = chain === Chain.BitcoinCash ? stripToCashAddress(address) : address;\n\n if (outputAddress) {\n outputs.push({ address: outputAddress, addressType: \"spend\", amount: value });\n }\n }\n }\n\n const removeNullAndEmptyObjectsFromArray = (arr: any[]) => {\n return arr.filter((item) => item !== null && typeof item === \"object\" && Object.keys(item).length > 0);\n };\n\n const responseSign = await sdk.utxo.utxoSignTransaction({\n coin: ChainToKeepKeyName[chain],\n inputs,\n opReturnData: memo,\n outputs: removeNullAndEmptyObjectsFromArray(outputs),\n });\n\n return responseSign.serializedTx?.toString();\n };\n\n const transfer = async ({ recipient, feeOptionKey, feeRate, memo, ...rest }: GenericTransferParams) => {\n if (!walletAddress)\n throw new SwapKitError(\"wallet_keepkey_invalid_params\", { reason: \"From address must be provided\" });\n if (!recipient)\n throw new SwapKitError(\"wallet_keepkey_invalid_params\", { reason: \"Recipient address must be provided\" });\n\n const createTxMethod =\n chain === Chain.BitcoinCash\n ? (toolbox as UTXOToolboxes[\"BCH\"]).buildTx\n : (toolbox as UTXOToolboxes[\"BTC\"]).createTransaction;\n\n const { tx, inputs: rawInputs } = await createTxMethod({\n ...rest,\n feeRate: feeRate || (await toolbox.getFeeRates())[feeOptionKey || FeeOption.Fast],\n fetchTxHex: true,\n memo,\n recipient,\n sender: walletAddress,\n });\n\n const inputs = rawInputs.map(({ value, index, hash, txHex }) => ({\n //@TODO don't hardcode master, lookup on blockbook what input this is for and what path that address is!\n addressNList: addressInfo.address_n,\n amount: value.toString(),\n hex: txHex || \"\",\n scriptType,\n txid: hash,\n vout: index,\n }));\n\n const txHex = await signTransaction(tx, inputs, memo);\n return toolbox.broadcastTx(txHex);\n };\n\n const signTransactionWithMultipleInputs = async (\n tx: Transaction,\n inputs: Array<{\n hash: string;\n index: number;\n value: number;\n txHex?: string;\n derivationIndex: number;\n isChange: boolean;\n }>,\n memo = \"\",\n ) => {\n const accountAddressN = bip32ToAddressNList(\n derivationPath\n ? derivationPathToString(derivationPath.slice(0, 3) as DerivationPathArray)\n : DerivationPath[chain],\n );\n\n type KeepKeyOutput =\n | { addressNList: number[]; addressType: \"change\"; amount: number; isChange: true; scriptType: string }\n | { address: string; addressType: \"spend\"; amount: number };\n\n const outputs: KeepKeyOutput[] = [];\n for (let i = 0; i < tx.outputsLength; i++) {\n const output = tx.getOutput(i);\n const outputAddress = tx.getOutputAddress(i, network);\n const value = Number(output.amount);\n\n if (outputAddress === walletAddress) {\n outputs.push({\n addressNList: addressInfo.address_n,\n addressType: \"change\",\n amount: value,\n isChange: true,\n scriptType,\n });\n } else if (outputAddress) {\n const finalAddress = chain === Chain.BitcoinCash ? stripToCashAddress(outputAddress) : outputAddress;\n if (finalAddress) {\n outputs.push({ address: finalAddress, addressType: \"spend\", amount: value });\n }\n }\n }\n\n const keepKeyInputs = inputs.map(({ hash, index: inputIndex, value, txHex, derivationIndex, isChange }) => {\n const changePath = isChange ? 1 : 0;\n const inputAddressN = [...accountAddressN, changePath, derivationIndex];\n return {\n addressNList: inputAddressN,\n amount: value.toString(),\n hex: txHex || \"\",\n scriptType,\n txid: hash,\n vout: inputIndex,\n };\n });\n\n const responseSign = await sdk.utxo.utxoSignTransaction({\n coin: ChainToKeepKeyName[chain],\n inputs: keepKeyInputs,\n opReturnData: memo,\n outputs: outputs.filter((item) => item !== null && typeof item === \"object\" && Object.keys(item).length > 0),\n });\n\n return responseSign.serializedTx?.toString() || \"\";\n };\n\n const transferFromMultipleAddresses = async ({\n utxos,\n recipient,\n assetValue,\n memo,\n feeRate,\n feeOptionKey,\n }: {\n utxos: Array<{\n hash: string;\n index: number;\n value: number;\n txHex?: string;\n derivationIndex: number;\n isChange: boolean;\n address: string;\n }>;\n recipient: string;\n assetValue: { getBaseValue: (unit: string) => number; chain: string };\n memo?: string;\n feeRate?: number;\n feeOptionKey?: (typeof FeeOption)[keyof typeof FeeOption];\n }) => {\n const txFeeRate = feeRate || (await toolbox.getFeeRates())[feeOptionKey || FeeOption.Fast];\n\n const createTxMethod =\n chain === Chain.BitcoinCash\n ? (toolbox as UTXOToolboxes[\"BCH\"]).buildTx\n : (toolbox as UTXOToolboxes[\"BTC\"]).createTransaction;\n\n const { tx, inputs: selectedInputs } = await createTxMethod({\n assetValue: assetValue as any,\n feeRate: txFeeRate,\n fetchTxHex: true,\n memo,\n recipient,\n sender: walletAddress,\n });\n\n const inputsWithDerivation = selectedInputs.map(\n (input: { hash: string; index: number; value: number; txHex?: string }) => {\n const utxoInfo = utxos.find((u) => u.hash === input.hash && u.index === input.index);\n return { ...input, derivationIndex: utxoInfo?.derivationIndex ?? 0, isChange: utxoInfo?.isChange ?? false };\n },\n );\n\n const signedTxHex = await signTransactionWithMultipleInputs(tx, inputsWithDerivation, memo);\n return toolbox.broadcastTx(signedTxHex);\n };\n\n async function getExtendedPublicKeyInfo({ accountIndex }: { accountIndex?: number } = {}) {\n try {\n const resolvedAccountPath = getUTXOAccountPath({ accountIndex, chain, derivationPath });\n const resolvedAccountPathString = derivationPathToString(resolvedAccountPath);\n const path = {\n address_n: bip32ToAddressNList(resolvedAccountPathString),\n coin: ChainToKeepKeyName[chain],\n script_type: scriptType,\n showDisplay: false,\n symbol: chain.toUpperCase(),\n };\n\n const responsePubkey = await sdk.system.info.getPublicKey(path);\n\n return {\n accountIndex: getUTXOAccountIndexFromPath(resolvedAccountPath),\n path: resolvedAccountPathString,\n xpub: responsePubkey.xpub,\n };\n } catch (error) {\n throw new SwapKitError(\"wallet_keepkey_failed_to_get_public_key\", {\n chain,\n error: error instanceof Error ? error.message : \"Unknown error\",\n });\n }\n }\n\n function getExtendedPublicKey(params: { accountIndex?: number } = {}) {\n return getExtendedPublicKeyInfo(params);\n }\n\n async function deriveAddressAtIndex({\n accountIndex,\n index,\n change = false,\n }: {\n accountIndex?: number;\n index: number;\n change?: boolean;\n }) {\n try {\n assertDerivationIndex(\"index\", index);\n const fullPath = getUTXOAddressPath({ accountIndex, chain, change, derivationPath, index });\n const fullPathString = derivationPathToString(fullPath);\n\n const result = await sdk.address.utxoGetAddress({\n address_n: bip32ToAddressNList(fullPathString),\n coin: ChainToKeepKeyName[chain],\n script_type: scriptType,\n });\n\n let finalAddress = result.address;\n if (chain === Chain.BitcoinCash) {\n finalAddress = stripToCashAddress(result.address);\n }\n\n return {\n accountIndex: getUTXOAccountIndexFromPath(fullPath),\n address: finalAddress,\n change,\n index,\n path: fullPathString,\n pubkey: \"\",\n };\n } catch {\n return undefined;\n }\n }\n\n async function deriveAddresses({\n accountIndex,\n count,\n startIndex = 0,\n change = false,\n }: {\n accountIndex?: number;\n count: number;\n startIndex?: number;\n change?: boolean;\n }) {\n assertDerivationIndex(\"count\", count);\n assertDerivationIndex(\"startIndex\", startIndex);\n\n const addresses = await Promise.all(\n Array.from({ length: count }, (_, i) => deriveAddressAtIndex({ accountIndex, change, index: startIndex + i })),\n );\n\n return addresses.filter((address) => !!address);\n }\n\n const hdHelpers = createHDWalletHelpers({\n chain,\n deriveAddress: deriveAddressAtIndex,\n getBalance: toolbox.getBalance,\n getUtxos: (address: string) => getUtxoApi(chain).getUtxos({ address, fetchTxHex: true }),\n });\n\n return {\n ...toolbox,\n ...hdHelpers,\n address: walletAddress,\n deriveAddressAtIndex,\n deriveAddresses,\n getExtendedPublicKey,\n getExtendedPublicKeyInfo,\n signTransaction,\n signTransactionWithMultipleInputs,\n transfer,\n transferFromMultipleAddresses,\n };\n}\n"
|
|
11
11
|
],
|
|
12
|
-
"mappings": "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",
|
|
13
|
-
"debugId": "
|
|
12
|
+
"mappings": "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",
|
|
13
|
+
"debugId": "45535A9905F9497364756E2164756E21",
|
|
14
14
|
"names": []
|
|
15
15
|
}
|
package/dist/keepkey/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as C,b as f}from"../chunk-7fsaymh4.js";import{d as S}from"../chunk-n05bv2n5.js";import{KeepKeySdk as Iz}from"@keepkey/keepkey-sdk";import{Chain as z,filterSupportedChains as Tz,NetworkDerivationPath as fz,SKConfig as r,SwapKitError as Az,WalletOption as $z}from"@swapkit/helpers";import{createWallet as Sz,getWalletSupportedChains as yz}from"@swapkit/wallet-core";import{Chain as s,DerivationPath as qz,derivationPathToString as jz,GAIAConfig as n,getRPCUrl as Bz}from"@swapkit/helpers";async function a({sdk:Q,derivationPath:J}){let{DEFAULT_COSMOS_FEE_MAINNET:X,getCosmosToolbox:F,getFeeRateFromSwapKit:Y,createStargateClient:q}=await import("@swapkit/toolboxes/cosmos"),D=J?jz(J):`${qz.GAIA}/0`,{address:B}=await Q.address.cosmosGetAddress({address_n:f(D)}),L=await F(s.Cosmos);if(X.amount[0])X.amount[0].amount=String(await Y(n.chainId,500));return{...L,address:B,transfer:async({assetValue:R,recipient:j,memo:M})=>{let I=R.getBaseValue("string"),V=await L.getAccount(B),b=await Q.cosmos.cosmosSignAmino({signDoc:{account_number:V?.accountNumber.toString()??"",chain_id:n.chainId,fee:X,memo:M||"",msgs:[{type:"cosmos-sdk/MsgSend",value:{amount:[{amount:I,denom:"uatom"}],from_address:B,to_address:j}}],sequence:V?.sequence.toString()??""},signerAddress:B}),H=atob(b.serialized),T=new Uint8Array(H.length).map((U,W)=>H.charCodeAt(W)),A=await Bz(s.Cosmos);return(await(await q(A)).broadcastTx(T)).transactionHash}}}import{ChainToChainId as Lz,derivationPathToString as Wz,NetworkDerivationPath as Gz,SwapKitError as v}from"@swapkit/helpers";import{AbstractSigner as Rz}from"ethers";class u extends Rz{sdk;chain;derivationPath;address;provider;constructor({sdk:Q,chain:J,derivationPath:X,provider:F}){super();this.sdk=Q,this.chain=J,this.derivationPath=X||Gz.ETH,this.address="",this.provider=F}signTypedData=async(Q,J,X,F)=>{let{buildEIP712DomainType:Y}=await import("@swapkit/toolboxes/evm"),{TypedDataEncoder:q}=await import("ethers"),{EIP712Domain:D,...B}=J,L=F??q.from(B).primaryType,_=Y(Q),R=await this.getAddress(),j=await this.sdk.eth.ethSignTypedData({address:R,typedData:{domain:Q,message:X,primaryType:L,types:{EIP712Domain:_,...B}}});if(typeof j!=="string")throw new v("wallet_keepkey_method_not_supported",{method:"signTypedData"});return j.startsWith("0x")?j:`0x${j}`};getAddress=async()=>{if(this.address)return this.address;let{address:Q}=await this.sdk.address.ethereumGetAddress({address_n:f(Wz(this.derivationPath))});return this.address=Q,Q};signMessage=(Q)=>this.sdk.eth.ethSign({address:this.address,message:Q});signTransaction=async({to:Q,value:J,gasLimit:X,nonce:F,data:Y,maxFeePerGas:q,maxPriorityFeePerGas:D,gasPrice:B})=>{if(!Q)throw new v("wallet_keepkey_invalid_params",{reason:"Missing to address"});if(!X)throw new v("wallet_keepkey_invalid_params",{reason:"Missing gasLimit"});if(!Y)throw new v("wallet_keepkey_invalid_params",{reason:"Missing data"});let L=!!((q||D)&&!B);if(L&&!q)throw new v("wallet_keepkey_invalid_params",{reason:"Missing maxFeePerGas"});if(L&&!D)throw new v("wallet_keepkey_invalid_params",{reason:"Missing maxPriorityFeePerGas"});if(!(L||B))throw new v("wallet_keepkey_invalid_params",{reason:"Missing gasPrice"});let{toHexString:_}=await import("@swapkit/toolboxes/evm"),R=F?BigInt(F):BigInt(await this.provider.getTransactionCount(await this.getAddress(),"pending")),j={addressNList:[2147483692,2147483708,2147483648,0,0],chainId:_(BigInt(Lz[this.chain])),data:Y,from:this.address,gas:_(BigInt(X)),nonce:_(R),to:Q.toString(),value:_(BigInt(J||0)),...L&&{maxFeePerGas:_(BigInt(q?.toString()||"0")),maxPriorityFeePerGas:_(BigInt(D?.toString()||"0"))},...!L&&{gasPrice:_(BigInt(B?.toString()||"0"))}};return(await this.sdk.eth.ethSignTransaction(j)).serialized};sendTransaction=async(Q)=>{if(!this.provider)throw new v("wallet_keepkey_no_provider");let J=await this.signTransaction(Q);return await this.provider.broadcastTransaction(J)};connect=(Q)=>new u({chain:this.chain,derivationPath:this.derivationPath,provider:Q,sdk:this.sdk})}import{Chain as c,DerivationPath as Uz,derivationPathToString as _z,getRPCUrl as i,MAYAConfig as Nz,SwapKitError as Oz}from"@swapkit/helpers";async function t({sdk:Q,derivationPath:J}){let{createStargateClient:X,getCosmosToolbox:F}=await import("@swapkit/toolboxes/cosmos"),Y=await F(c.Maya),q=J?_z(J):`${Uz.MAYA}/0`,{address:D}=await Q.address.mayachainGetAddress({address_n:f(q)}),B=async({assetValue:R,recipient:j,sender:M,memo:I})=>{let V=await import("@cosmjs/amino"),b=V.makeSignDoc??V.default?.makeSignDoc,{getDenomWithChain:H}=await import("@swapkit/toolboxes/cosmos"),T=await Y.getAccount(M);if(!T)throw new Oz("wallet_keepkey_account_not_found");let{accountNumber:A,sequence:Z=0}=T,$=R.getBaseValue("string"),U=j&&j!=="",W=U?{type:"mayachain/MsgSend",value:{amount:[{amount:$,denom:R.symbol.toLowerCase()}],from_address:M,to_address:j}}:{type:"mayachain/MsgDeposit",value:{coins:[{amount:$,asset:H(R)}],memo:I,signer:M}},O=b([W],{amount:[],gas:"500000000"},Nz.chainId,I,A?.toString(),Z),N=await(U?Q.mayachain.mayachainSignAminoTransfer:Q.mayachain.mayachainSignAminoDeposit)({signDoc:O,signerAddress:M}),G=atob(N.serialized);return new Uint8Array(G.length).map((K,w)=>G.charCodeAt(w))};return{...Y,address:D,deposit:async({assetValue:R,memo:j})=>{let M=await i(c.Maya),I=await X(M),V=await B({assetValue:R,memo:j,sender:D}),{transactionHash:b}=await I.broadcastTx(V);return b},transfer:async({assetValue:R,recipient:j,memo:M})=>{let I=await i(c.Maya),V=await X(I),b=await B({assetValue:R,memo:M,recipient:j,sender:D}),{transactionHash:H}=await V.broadcastTx(b);return H}}}import{Chain as l,DerivationPath as Dz,derivationPathToString as Hz,getRPCUrl as e,SwapKitError as Mz,THORConfig as Vz}from"@swapkit/helpers";async function zz({sdk:Q,derivationPath:J}){let X=await import("@cosmjs/amino"),F=X.makeSignDoc??X.default?.makeSignDoc,{buildAminoMsg:Y,getDefaultChainFee:q,createStargateClient:D,getCosmosToolbox:B}=await import("@swapkit/toolboxes/cosmos"),L=await B(l.THORChain),_=J?Hz(J):`${Dz.THOR}/0`,{address:R}=await Q.address.thorchainGetAddress({address_n:f(_)}),j=async({assetValue:V,recipient:b,sender:H,memo:T})=>{let A=await L.getAccount(H);if(!A)throw new Mz("wallet_keepkey_account_not_found");let{accountNumber:Z,sequence:$=0}=A,U=b&&b!=="",W=Y({assetValue:V,memo:T,recipient:b,sender:H}),O=F([W],q(l.THORChain),Vz.chainId,T,Z?.toString(),$),E=U?await Q.thorchain.thorchainSignAminoTransfer({signDoc:O,signerAddress:H}):await Q.thorchain.thorchainSignAminoDeposit({signDoc:O,signerAddress:H}),N=atob(E.serialized);return new Uint8Array(N.length).map((G,K)=>N.charCodeAt(K))};return{...L,address:R,deposit:async({assetValue:V,memo:b})=>{let H=await e(l.THORChain),T=await D(H),A=await j({assetValue:V,memo:b,sender:R}),{transactionHash:Z}=await T.broadcastTx(A);return Z},transfer:async({assetValue:V,recipient:b,memo:H})=>{let T=await e(l.THORChain),A=await D(T),Z=await j({assetValue:V,memo:H,recipient:b,sender:R}),{transactionHash:$}=await A.broadcastTx(Z);return $}}}import{Chain as x,DerivationPath as Jz,derivationPathToString as m,FeeOption as Qz,SwapKitError as h}from"@swapkit/helpers";import{assertDerivationIndex as d,createHDWalletHelpers as Fz,getNetworkForChain as bz,getUTXOAccountIndexFromPath as Xz,getUTXOAccountPath as Ez,getUTXOAddressPath as Kz,getUtxoApi as wz,stripToCashAddress as o}from"@swapkit/toolboxes/utxo";async function Zz({sdk:Q,chain:J,derivationPath:X}){let{getUtxoToolbox:F}=await import("@swapkit/toolboxes/utxo"),Y=await F(J),q=[x.Bitcoin,x.Litecoin].includes(J)?"p2wpkh":"p2pkh",D=X?m(X):`${Jz[J]}/0`,B={address_n:f(D),coin:C[J],script_type:q},L=(await Q.address.utxoGetAddress(B)).address,_=bz(J),R=async(Z,$,U="")=>{let W=[];for(let N=0;N<Z.outputsLength;N++){let G=Z.getOutput(N),K=Z.getOutputAddress(N,_),w=Number(G.amount);if(K===L)W.push({addressNList:B.address_n,addressType:"change",amount:w,isChange:!0,scriptType:q});else if(K){let y=J===x.BitcoinCash?o(K):K;if(y)W.push({address:y,addressType:"spend",amount:w})}}let O=(N)=>{return N.filter((G)=>G!==null&&typeof G==="object"&&Object.keys(G).length>0)};return(await Q.utxo.utxoSignTransaction({coin:C[J],inputs:$,opReturnData:U,outputs:O(W)})).serializedTx?.toString()},j=async({recipient:Z,feeOptionKey:$,feeRate:U,memo:W,...O})=>{if(!L)throw new h("wallet_keepkey_invalid_params",{reason:"From address must be provided"});if(!Z)throw new h("wallet_keepkey_invalid_params",{reason:"Recipient address must be provided"});let E=J===x.BitcoinCash?Y.buildTx:Y.createTransaction,{tx:N,inputs:G}=await E({...O,feeRate:U||(await Y.getFeeRates())[$||Qz.Fast],fetchTxHex:!0,memo:W,recipient:Z,sender:L}),K=G.map(({value:y,index:k,hash:P,txHex:g})=>({addressNList:B.address_n,amount:y.toString(),hex:g||"",scriptType:q,txid:P,vout:k})),w=await R(N,K,W);return Y.broadcastTx(w)},M=async(Z,$,U="")=>{let W=f(X?m(X.slice(0,3)):Jz[J]),O=[];for(let G=0;G<Z.outputsLength;G++){let K=Z.getOutput(G),w=Z.getOutputAddress(G,_),y=Number(K.amount);if(w===L)O.push({addressNList:B.address_n,addressType:"change",amount:y,isChange:!0,scriptType:q});else if(w){let k=J===x.BitcoinCash?o(w):w;if(k)O.push({address:k,addressType:"spend",amount:y})}}let E=$.map(({hash:G,index:K,value:w,txHex:y,derivationIndex:k,isChange:P})=>{let g=P?1:0;return{addressNList:[...W,g,k],amount:w.toString(),hex:y||"",scriptType:q,txid:G,vout:K}});return(await Q.utxo.utxoSignTransaction({coin:C[J],inputs:E,opReturnData:U,outputs:O.filter((G)=>G!==null&&typeof G==="object"&&Object.keys(G).length>0)})).serializedTx?.toString()||""},I=async({utxos:Z,recipient:$,assetValue:U,memo:W,feeRate:O,feeOptionKey:E})=>{let N=O||(await Y.getFeeRates())[E||Qz.Fast],G=J===x.BitcoinCash?Y.buildTx:Y.createTransaction,{tx:K,inputs:w}=await G({assetValue:U,feeRate:N,fetchTxHex:!0,memo:W,recipient:$,sender:L}),y=w.map((P)=>{let g=Z.find((p)=>p.hash===P.hash&&p.index===P.index);return{...P,derivationIndex:g?.derivationIndex??0,isChange:g?.isChange??!1}}),k=await M(K,y,W);return Y.broadcastTx(k)};async function V({accountIndex:Z}={}){try{let $=Ez({accountIndex:Z,chain:J,derivationPath:X}),U=m($),W={address_n:f(U),coin:C[J],script_type:q,showDisplay:!1,symbol:J.toUpperCase()},O=await Q.system.info.getPublicKey(W);return{accountIndex:Xz($),path:U,xpub:O.xpub}}catch($){throw new h("wallet_keepkey_failed_to_get_public_key",{chain:J,error:$ instanceof Error?$.message:"Unknown error"})}}function b(){return V()}async function H({accountIndex:Z,index:$,change:U=!1}){try{d("index",$);let W=Kz({accountIndex:Z,chain:J,change:U,derivationPath:X,index:$}),O=m(W),E=await Q.address.utxoGetAddress({address_n:f(O),coin:C[J],script_type:q}),N=E.address;if(J===x.BitcoinCash)N=o(E.address);return{accountIndex:Xz(W),address:N,change:U,index:$,path:O,pubkey:""}}catch{return}}async function T({accountIndex:Z,count:$,startIndex:U=0,change:W=!1}){return d("count",$),d("startIndex",U),(await Promise.all(Array.from({length:$},(E,N)=>H({accountIndex:Z,change:W,index:U+N})))).filter((E)=>!!E)}let A=Fz({chain:J,deriveAddress:H,getBalance:Y.getBalance,getUtxos:(Z)=>wz(J).getUtxos({address:Z,fetchTxHex:!0})});return{...Y,...A,address:L,deriveAddressAtIndex:H,deriveAddresses:T,getExtendedPublicKey:b,getExtendedPublicKeyInfo:V,signTransaction:R,signTransactionWithMultipleInputs:M,transfer:j,transferFromMultipleAddresses:I}}var kz=Sz({connect:({addChain:Q,supportedChains:J,walletType:X})=>async function(Y,q){let D=Tz({chains:Y,supportedChains:J,walletType:X}),B=r.get("integrations").keepKey;if(!B)throw Error("KeepKey config not found");let L=r.get("apiKeys").keepKey||"1234";await Yz();let _={apiKey:L,pairingInfo:B},R=await Iz.create(_);if(_.apiKey&&_.apiKey!==L)r.setApiKey("keepKey",_.apiKey);return await Promise.all(D.map(async(j)=>{let M=await vz({chain:j,derivationPath:q?.[j]||fz[j],sdk:R}),I=await M.getAddress()||"";Q({...M,address:I,chain:j,walletType:$z.KEEPKEY})})),!0},directSigningSupport:{[z.Arbitrum]:!0,[z.Avalanche]:!0,[z.Base]:!0,[z.Berachain]:!0,[z.BinanceSmartChain]:!0,[z.Ethereum]:!0,[z.Gnosis]:!0,[z.Monad]:!0,[z.Optimism]:!0,[z.Polygon]:!0,[z.Ripple]:!0,[z.XLayer]:!0},name:"connectKeepkey",supportedChains:[z.Arbitrum,z.Avalanche,z.Base,z.Berachain,z.BinanceSmartChain,z.Bitcoin,z.BitcoinCash,z.Cosmos,z.Dogecoin,z.Dash,z.Ethereum,z.Gnosis,z.Litecoin,z.Monad,z.Ripple,z.Optimism,z.Polygon,z.THORChain,z.Maya,z.XLayer],walletType:$z.KEEPKEY}),qJ=yz(kz);async function vz({sdk:Q,chain:J,derivationPath:X}){let{getProvider:F,getEvmToolboxAsync:Y}=await import("@swapkit/toolboxes/evm");switch(J){case z.BinanceSmartChain:case z.Arbitrum:case z.Berachain:case z.Optimism:case z.Polygon:case z.Avalanche:case z.Base:case z.Ethereum:case z.Gnosis:case z.Monad:case z.XLayer:{let q=await F(J),D=new u({chain:J,derivationPath:X,provider:q,sdk:Q});return await Y(J,{provider:q,signer:D})}case z.Cosmos:return a({derivationPath:X,sdk:Q});case z.THORChain:return zz({derivationPath:X,sdk:Q});case z.Maya:return t({derivationPath:X,sdk:Q});case z.Bitcoin:case z.BitcoinCash:case z.Dash:case z.Dogecoin:case z.Litecoin:return Zz({chain:J,derivationPath:X,sdk:Q});case z.Ripple:{let{rippleWalletMethods:q}=await import("../chunk-vwv6z2mk.js");return q({derivationPath:X,sdk:Q})}default:throw new Az("wallet_keepkey_chain_not_supported",{chain:J})}}async function Yz(Q=0){if(Q>=3)alert("KeepKey desktop is required for keepkey-sdk, please go to https://keepkey.com/get-started");if(!await Pz())window.location.assign("keepkey://launch"),await new Promise((X)=>setTimeout(X,30000)),await Yz(Q+1)}async function Pz(Q="http://localhost:1646/spec/swagger.json"){try{return(await fetch(Q)).status===200}catch{return!1}}export{kz as keepkeyWallet,qJ as KEEPKEY_SUPPORTED_CHAINS};
|
|
1
|
+
import{a as C,b as f}from"../chunk-7fsaymh4.js";import{d as S}from"../chunk-n05bv2n5.js";import{KeepKeySdk as Iz}from"@keepkey/keepkey-sdk";import{Chain as z,filterSupportedChains as Tz,NetworkDerivationPath as fz,SKConfig as r,SwapKitError as Az,WalletOption as $z}from"@swapkit/helpers";import{createWallet as Sz,getWalletSupportedChains as yz}from"@swapkit/wallet-core";import{Chain as s,DerivationPath as qz,derivationPathToString as jz,GAIAConfig as n,getRPCUrl as Bz}from"@swapkit/helpers";async function a({sdk:Q,derivationPath:J}){let{DEFAULT_COSMOS_FEE_MAINNET:X,getCosmosToolbox:F,getFeeRateFromSwapKit:Y,createStargateClient:q}=await import("@swapkit/toolboxes/cosmos"),D=J?jz(J):`${qz.GAIA}/0`,{address:B}=await Q.address.cosmosGetAddress({address_n:f(D)}),L=await F(s.Cosmos);if(X.amount[0])X.amount[0].amount=String(await Y(n.chainId,500));return{...L,address:B,transfer:async({assetValue:R,recipient:j,memo:M})=>{let I=R.getBaseValue("string"),V=await L.getAccount(B),b=await Q.cosmos.cosmosSignAmino({signDoc:{account_number:V?.accountNumber.toString()??"",chain_id:n.chainId,fee:X,memo:M||"",msgs:[{type:"cosmos-sdk/MsgSend",value:{amount:[{amount:I,denom:"uatom"}],from_address:B,to_address:j}}],sequence:V?.sequence.toString()??""},signerAddress:B}),H=atob(b.serialized),T=new Uint8Array(H.length).map((U,W)=>H.charCodeAt(W)),A=await Bz(s.Cosmos);return(await(await q(A)).broadcastTx(T)).transactionHash}}}import{ChainToChainId as Lz,derivationPathToString as Wz,NetworkDerivationPath as Gz,SwapKitError as v}from"@swapkit/helpers";import{AbstractSigner as Rz}from"ethers";class u extends Rz{sdk;chain;derivationPath;address;provider;constructor({sdk:Q,chain:J,derivationPath:X,provider:F}){super();this.sdk=Q,this.chain=J,this.derivationPath=X||Gz.ETH,this.address="",this.provider=F}signTypedData=async(Q,J,X,F)=>{let{buildEIP712DomainType:Y}=await import("@swapkit/toolboxes/evm"),{TypedDataEncoder:q}=await import("ethers"),{EIP712Domain:D,...B}=J,L=F??q.from(B).primaryType,_=Y(Q),R=await this.getAddress(),j=await this.sdk.eth.ethSignTypedData({address:R,typedData:{domain:Q,message:X,primaryType:L,types:{EIP712Domain:_,...B}}});if(typeof j!=="string")throw new v("wallet_keepkey_method_not_supported",{method:"signTypedData"});return j.startsWith("0x")?j:`0x${j}`};getAddress=async()=>{if(this.address)return this.address;let{address:Q}=await this.sdk.address.ethereumGetAddress({address_n:f(Wz(this.derivationPath))});return this.address=Q,Q};signMessage=(Q)=>this.sdk.eth.ethSign({address:this.address,message:Q});signTransaction=async({to:Q,value:J,gasLimit:X,nonce:F,data:Y,maxFeePerGas:q,maxPriorityFeePerGas:D,gasPrice:B})=>{if(!Q)throw new v("wallet_keepkey_invalid_params",{reason:"Missing to address"});if(!X)throw new v("wallet_keepkey_invalid_params",{reason:"Missing gasLimit"});if(!Y)throw new v("wallet_keepkey_invalid_params",{reason:"Missing data"});let L=!!((q||D)&&!B);if(L&&!q)throw new v("wallet_keepkey_invalid_params",{reason:"Missing maxFeePerGas"});if(L&&!D)throw new v("wallet_keepkey_invalid_params",{reason:"Missing maxPriorityFeePerGas"});if(!(L||B))throw new v("wallet_keepkey_invalid_params",{reason:"Missing gasPrice"});let{toHexString:_}=await import("@swapkit/toolboxes/evm"),R=F?BigInt(F):BigInt(await this.provider.getTransactionCount(await this.getAddress(),"pending")),j={addressNList:[2147483692,2147483708,2147483648,0,0],chainId:_(BigInt(Lz[this.chain])),data:Y,from:this.address,gas:_(BigInt(X)),nonce:_(R),to:Q.toString(),value:_(BigInt(J||0)),...L&&{maxFeePerGas:_(BigInt(q?.toString()||"0")),maxPriorityFeePerGas:_(BigInt(D?.toString()||"0"))},...!L&&{gasPrice:_(BigInt(B?.toString()||"0"))}};return(await this.sdk.eth.ethSignTransaction(j)).serialized};sendTransaction=async(Q)=>{if(!this.provider)throw new v("wallet_keepkey_no_provider");let J=await this.signTransaction(Q);return await this.provider.broadcastTransaction(J)};connect=(Q)=>new u({chain:this.chain,derivationPath:this.derivationPath,provider:Q,sdk:this.sdk})}import{Chain as c,DerivationPath as Uz,derivationPathToString as _z,getRPCUrl as i,MAYAConfig as Nz,SwapKitError as Oz}from"@swapkit/helpers";async function t({sdk:Q,derivationPath:J}){let{createStargateClient:X,getCosmosToolbox:F}=await import("@swapkit/toolboxes/cosmos"),Y=await F(c.Maya),q=J?_z(J):`${Uz.MAYA}/0`,{address:D}=await Q.address.mayachainGetAddress({address_n:f(q)}),B=async({assetValue:R,recipient:j,sender:M,memo:I})=>{let V=await import("@cosmjs/amino"),b=V.makeSignDoc??V.default?.makeSignDoc,{getDenomWithChain:H}=await import("@swapkit/toolboxes/cosmos"),T=await Y.getAccount(M);if(!T)throw new Oz("wallet_keepkey_account_not_found");let{accountNumber:A,sequence:Z=0}=T,$=R.getBaseValue("string"),U=j&&j!=="",W=U?{type:"mayachain/MsgSend",value:{amount:[{amount:$,denom:R.symbol.toLowerCase()}],from_address:M,to_address:j}}:{type:"mayachain/MsgDeposit",value:{coins:[{amount:$,asset:H(R)}],memo:I,signer:M}},O=b([W],{amount:[],gas:"500000000"},Nz.chainId,I,A?.toString(),Z),N=await(U?Q.mayachain.mayachainSignAminoTransfer:Q.mayachain.mayachainSignAminoDeposit)({signDoc:O,signerAddress:M}),G=atob(N.serialized);return new Uint8Array(G.length).map((K,w)=>G.charCodeAt(w))};return{...Y,address:D,deposit:async({assetValue:R,memo:j})=>{let M=await i(c.Maya),I=await X(M),V=await B({assetValue:R,memo:j,sender:D}),{transactionHash:b}=await I.broadcastTx(V);return b},transfer:async({assetValue:R,recipient:j,memo:M})=>{let I=await i(c.Maya),V=await X(I),b=await B({assetValue:R,memo:M,recipient:j,sender:D}),{transactionHash:H}=await V.broadcastTx(b);return H}}}import{Chain as l,DerivationPath as Dz,derivationPathToString as Hz,getRPCUrl as e,SwapKitError as Mz,THORConfig as Vz}from"@swapkit/helpers";async function zz({sdk:Q,derivationPath:J}){let X=await import("@cosmjs/amino"),F=X.makeSignDoc??X.default?.makeSignDoc,{buildAminoMsg:Y,getDefaultChainFee:q,createStargateClient:D,getCosmosToolbox:B}=await import("@swapkit/toolboxes/cosmos"),L=await B(l.THORChain),_=J?Hz(J):`${Dz.THOR}/0`,{address:R}=await Q.address.thorchainGetAddress({address_n:f(_)}),j=async({assetValue:V,recipient:b,sender:H,memo:T})=>{let A=await L.getAccount(H);if(!A)throw new Mz("wallet_keepkey_account_not_found");let{accountNumber:Z,sequence:$=0}=A,U=b&&b!=="",W=Y({assetValue:V,memo:T,recipient:b,sender:H}),O=F([W],q(l.THORChain),Vz.chainId,T,Z?.toString(),$),E=U?await Q.thorchain.thorchainSignAminoTransfer({signDoc:O,signerAddress:H}):await Q.thorchain.thorchainSignAminoDeposit({signDoc:O,signerAddress:H}),N=atob(E.serialized);return new Uint8Array(N.length).map((G,K)=>N.charCodeAt(K))};return{...L,address:R,deposit:async({assetValue:V,memo:b})=>{let H=await e(l.THORChain),T=await D(H),A=await j({assetValue:V,memo:b,sender:R}),{transactionHash:Z}=await T.broadcastTx(A);return Z},transfer:async({assetValue:V,recipient:b,memo:H})=>{let T=await e(l.THORChain),A=await D(T),Z=await j({assetValue:V,memo:H,recipient:b,sender:R}),{transactionHash:$}=await A.broadcastTx(Z);return $}}}import{Chain as x,DerivationPath as Jz,derivationPathToString as m,FeeOption as Qz,SwapKitError as h}from"@swapkit/helpers";import{assertDerivationIndex as d,createHDWalletHelpers as Fz,getNetworkForChain as bz,getUTXOAccountIndexFromPath as Xz,getUTXOAccountPath as Ez,getUTXOAddressPath as Kz,getUtxoApi as wz,stripToCashAddress as o}from"@swapkit/toolboxes/utxo";async function Zz({sdk:Q,chain:J,derivationPath:X}){let{getUtxoToolbox:F}=await import("@swapkit/toolboxes/utxo"),Y=await F(J),q=[x.Bitcoin,x.Litecoin].includes(J)?"p2wpkh":"p2pkh",D=X?m(X):`${Jz[J]}/0`,B={address_n:f(D),coin:C[J],script_type:q},L=(await Q.address.utxoGetAddress(B)).address,_=bz(J),R=async(Z,$,U="")=>{let W=[];for(let N=0;N<Z.outputsLength;N++){let G=Z.getOutput(N),K=Z.getOutputAddress(N,_),w=Number(G.amount);if(K===L)W.push({addressNList:B.address_n,addressType:"change",amount:w,isChange:!0,scriptType:q});else if(K){let y=J===x.BitcoinCash?o(K):K;if(y)W.push({address:y,addressType:"spend",amount:w})}}let O=(N)=>{return N.filter((G)=>G!==null&&typeof G==="object"&&Object.keys(G).length>0)};return(await Q.utxo.utxoSignTransaction({coin:C[J],inputs:$,opReturnData:U,outputs:O(W)})).serializedTx?.toString()},j=async({recipient:Z,feeOptionKey:$,feeRate:U,memo:W,...O})=>{if(!L)throw new h("wallet_keepkey_invalid_params",{reason:"From address must be provided"});if(!Z)throw new h("wallet_keepkey_invalid_params",{reason:"Recipient address must be provided"});let E=J===x.BitcoinCash?Y.buildTx:Y.createTransaction,{tx:N,inputs:G}=await E({...O,feeRate:U||(await Y.getFeeRates())[$||Qz.Fast],fetchTxHex:!0,memo:W,recipient:Z,sender:L}),K=G.map(({value:y,index:k,hash:P,txHex:g})=>({addressNList:B.address_n,amount:y.toString(),hex:g||"",scriptType:q,txid:P,vout:k})),w=await R(N,K,W);return Y.broadcastTx(w)},M=async(Z,$,U="")=>{let W=f(X?m(X.slice(0,3)):Jz[J]),O=[];for(let G=0;G<Z.outputsLength;G++){let K=Z.getOutput(G),w=Z.getOutputAddress(G,_),y=Number(K.amount);if(w===L)O.push({addressNList:B.address_n,addressType:"change",amount:y,isChange:!0,scriptType:q});else if(w){let k=J===x.BitcoinCash?o(w):w;if(k)O.push({address:k,addressType:"spend",amount:y})}}let E=$.map(({hash:G,index:K,value:w,txHex:y,derivationIndex:k,isChange:P})=>{let g=P?1:0;return{addressNList:[...W,g,k],amount:w.toString(),hex:y||"",scriptType:q,txid:G,vout:K}});return(await Q.utxo.utxoSignTransaction({coin:C[J],inputs:E,opReturnData:U,outputs:O.filter((G)=>G!==null&&typeof G==="object"&&Object.keys(G).length>0)})).serializedTx?.toString()||""},I=async({utxos:Z,recipient:$,assetValue:U,memo:W,feeRate:O,feeOptionKey:E})=>{let N=O||(await Y.getFeeRates())[E||Qz.Fast],G=J===x.BitcoinCash?Y.buildTx:Y.createTransaction,{tx:K,inputs:w}=await G({assetValue:U,feeRate:N,fetchTxHex:!0,memo:W,recipient:$,sender:L}),y=w.map((P)=>{let g=Z.find((p)=>p.hash===P.hash&&p.index===P.index);return{...P,derivationIndex:g?.derivationIndex??0,isChange:g?.isChange??!1}}),k=await M(K,y,W);return Y.broadcastTx(k)};async function V({accountIndex:Z}={}){try{let $=Ez({accountIndex:Z,chain:J,derivationPath:X}),U=m($),W={address_n:f(U),coin:C[J],script_type:q,showDisplay:!1,symbol:J.toUpperCase()},O=await Q.system.info.getPublicKey(W);return{accountIndex:Xz($),path:U,xpub:O.xpub}}catch($){throw new h("wallet_keepkey_failed_to_get_public_key",{chain:J,error:$ instanceof Error?$.message:"Unknown error"})}}function b(Z={}){return V(Z)}async function H({accountIndex:Z,index:$,change:U=!1}){try{d("index",$);let W=Kz({accountIndex:Z,chain:J,change:U,derivationPath:X,index:$}),O=m(W),E=await Q.address.utxoGetAddress({address_n:f(O),coin:C[J],script_type:q}),N=E.address;if(J===x.BitcoinCash)N=o(E.address);return{accountIndex:Xz(W),address:N,change:U,index:$,path:O,pubkey:""}}catch{return}}async function T({accountIndex:Z,count:$,startIndex:U=0,change:W=!1}){return d("count",$),d("startIndex",U),(await Promise.all(Array.from({length:$},(E,N)=>H({accountIndex:Z,change:W,index:U+N})))).filter((E)=>!!E)}let A=Fz({chain:J,deriveAddress:H,getBalance:Y.getBalance,getUtxos:(Z)=>wz(J).getUtxos({address:Z,fetchTxHex:!0})});return{...Y,...A,address:L,deriveAddressAtIndex:H,deriveAddresses:T,getExtendedPublicKey:b,getExtendedPublicKeyInfo:V,signTransaction:R,signTransactionWithMultipleInputs:M,transfer:j,transferFromMultipleAddresses:I}}var kz=Sz({connect:({addChain:Q,supportedChains:J,walletType:X})=>async function(Y,q){let D=Tz({chains:Y,supportedChains:J,walletType:X}),B=r.get("integrations").keepKey;if(!B)throw Error("KeepKey config not found");let L=r.get("apiKeys").keepKey||"1234";await Yz();let _={apiKey:L,pairingInfo:B},R=await Iz.create(_);if(_.apiKey&&_.apiKey!==L)r.setApiKey("keepKey",_.apiKey);return await Promise.all(D.map(async(j)=>{let M=await vz({chain:j,derivationPath:q?.[j]||fz[j],sdk:R}),I=await M.getAddress()||"";Q({...M,address:I,chain:j,walletType:$z.KEEPKEY})})),!0},directSigningSupport:{[z.Arbitrum]:!0,[z.Avalanche]:!0,[z.Base]:!0,[z.Berachain]:!0,[z.BinanceSmartChain]:!0,[z.Ethereum]:!0,[z.Gnosis]:!0,[z.Monad]:!0,[z.Optimism]:!0,[z.Polygon]:!0,[z.Ripple]:!0,[z.XLayer]:!0},name:"connectKeepkey",supportedChains:[z.Arbitrum,z.Avalanche,z.Base,z.Berachain,z.BinanceSmartChain,z.Bitcoin,z.BitcoinCash,z.Cosmos,z.Dogecoin,z.Dash,z.Ethereum,z.Gnosis,z.Litecoin,z.Monad,z.Ripple,z.Optimism,z.Polygon,z.THORChain,z.Maya,z.XLayer],walletType:$z.KEEPKEY}),qJ=yz(kz);async function vz({sdk:Q,chain:J,derivationPath:X}){let{getProvider:F,getEvmToolboxAsync:Y}=await import("@swapkit/toolboxes/evm");switch(J){case z.BinanceSmartChain:case z.Arbitrum:case z.Berachain:case z.Optimism:case z.Polygon:case z.Avalanche:case z.Base:case z.Ethereum:case z.Gnosis:case z.Monad:case z.XLayer:{let q=await F(J),D=new u({chain:J,derivationPath:X,provider:q,sdk:Q});return await Y(J,{provider:q,signer:D})}case z.Cosmos:return a({derivationPath:X,sdk:Q});case z.THORChain:return zz({derivationPath:X,sdk:Q});case z.Maya:return t({derivationPath:X,sdk:Q});case z.Bitcoin:case z.BitcoinCash:case z.Dash:case z.Dogecoin:case z.Litecoin:return Zz({chain:J,derivationPath:X,sdk:Q});case z.Ripple:{let{rippleWalletMethods:q}=await import("../chunk-vwv6z2mk.js");return q({derivationPath:X,sdk:Q})}default:throw new Az("wallet_keepkey_chain_not_supported",{chain:J})}}async function Yz(Q=0){if(Q>=3)alert("KeepKey desktop is required for keepkey-sdk, please go to https://keepkey.com/get-started");if(!await Pz())window.location.assign("keepkey://launch"),await new Promise((X)=>setTimeout(X,30000)),await Yz(Q+1)}async function Pz(Q="http://localhost:1646/spec/swagger.json"){try{return(await fetch(Q)).status===200}catch{return!1}}export{kz as keepkeyWallet,qJ as KEEPKEY_SUPPORTED_CHAINS};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
3
|
+
//# debugId=D12D3B84F8B33D2564756E2164756E21
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -7,9 +7,9 @@
|
|
|
7
7
|
"import type { KeepKeySdk } from \"@keepkey/keepkey-sdk\";\nimport {\n type Chain,\n ChainToChainId,\n type DerivationPathArray,\n derivationPathToString,\n NetworkDerivationPath,\n SwapKitError,\n} from \"@swapkit/helpers\";\nimport type { JsonRpcProvider, Provider, TransactionRequest, TypedDataDomain, TypedDataField } from \"ethers\";\nimport { AbstractSigner } from \"ethers\";\n\nimport { bip32ToAddressNList } from \"../coins\";\n\ninterface KeepKeyEVMSignerParams {\n sdk: KeepKeySdk;\n chain: Chain;\n derivationPath?: DerivationPathArray;\n provider: Provider | JsonRpcProvider;\n}\n\nexport class KeepKeySigner extends AbstractSigner {\n private sdk: KeepKeySdk;\n private chain: Chain;\n private derivationPath: DerivationPathArray;\n private address: string;\n readonly provider: Provider | JsonRpcProvider;\n\n constructor({ sdk, chain, derivationPath, provider }: KeepKeyEVMSignerParams) {\n super();\n this.sdk = sdk;\n this.chain = chain;\n this.derivationPath = derivationPath || NetworkDerivationPath.ETH;\n this.address = \"\";\n this.provider = provider;\n }\n\n signTypedData = async (\n domain: TypedDataDomain,\n types: Record<string, TypedDataField[]>,\n value: Record<string, unknown>,\n explicitPrimaryType?: string,\n ) => {\n const { buildEIP712DomainType } = await import(\"@swapkit/toolboxes/evm\");\n const { TypedDataEncoder } = await import(\"ethers\");\n\n const { EIP712Domain: _, ...filteredTypes } = types;\n const primaryType = explicitPrimaryType ?? TypedDataEncoder.from(filteredTypes).primaryType;\n const domainTypes = buildEIP712DomainType(domain);\n\n const address = await this.getAddress();\n const result = await this.sdk.eth.ethSignTypedData({\n address,\n typedData: {\n domain: domain as Record<string, unknown>,\n message: value,\n primaryType,\n types: { EIP712Domain: domainTypes, ...filteredTypes },\n },\n });\n\n if (typeof result !== \"string\") {\n throw new SwapKitError(\"wallet_keepkey_method_not_supported\", { method: \"signTypedData\" });\n }\n\n return result.startsWith(\"0x\") ? result : `0x${result}`;\n };\n\n getAddress = async () => {\n if (this.address) return this.address;\n const { address } = await this.sdk.address.ethereumGetAddress({\n address_n: bip32ToAddressNList(derivationPathToString(this.derivationPath)),\n });\n\n this.address = address;\n return address;\n };\n\n signMessage = (message: string) => this.sdk.eth.ethSign({ address: this.address, message }) as Promise<string>;\n\n signTransaction = async ({\n to,\n value,\n gasLimit,\n nonce,\n data,\n maxFeePerGas,\n maxPriorityFeePerGas,\n gasPrice,\n }: TransactionRequest) => {\n if (!to) throw new SwapKitError(\"wallet_keepkey_invalid_params\", { reason: \"Missing to address\" });\n if (!gasLimit) throw new SwapKitError(\"wallet_keepkey_invalid_params\", { reason: \"Missing gasLimit\" });\n if (!data) throw new SwapKitError(\"wallet_keepkey_invalid_params\", { reason: \"Missing data\" });\n\n const isEIP1559 = !!((maxFeePerGas || maxPriorityFeePerGas) && !gasPrice);\n if (isEIP1559 && !maxFeePerGas)\n throw new SwapKitError(\"wallet_keepkey_invalid_params\", { reason: \"Missing maxFeePerGas\" });\n if (isEIP1559 && !maxPriorityFeePerGas)\n throw new SwapKitError(\"wallet_keepkey_invalid_params\", { reason: \"Missing maxPriorityFeePerGas\" });\n if (!(isEIP1559 || gasPrice))\n throw new SwapKitError(\"wallet_keepkey_invalid_params\", { reason: \"Missing gasPrice\" });\n\n const { toHexString } = await import(\"@swapkit/toolboxes/evm\");\n\n const nonceValue = nonce\n ? BigInt(nonce)\n : BigInt(await this.provider.getTransactionCount(await this.getAddress(), \"pending\"));\n\n const input = {\n addressNList: [2147483692, 2147483708, 2147483648, 0, 0],\n chainId: toHexString(BigInt(ChainToChainId[this.chain])),\n data,\n from: this.address,\n gas: toHexString(BigInt(gasLimit)),\n nonce: toHexString(nonceValue),\n to: to.toString(),\n value: toHexString(BigInt(value || 0)),\n ...(isEIP1559 && {\n maxFeePerGas: toHexString(BigInt(maxFeePerGas?.toString() || \"0\")),\n maxPriorityFeePerGas: toHexString(BigInt(maxPriorityFeePerGas?.toString() || \"0\")),\n }),\n ...(!isEIP1559 && {\n // Fixed syntax error and structure here\n gasPrice: toHexString(BigInt(gasPrice?.toString() || \"0\")),\n }),\n };\n const responseSign = await this.sdk.eth.ethSignTransaction(input);\n return responseSign.serialized;\n };\n\n sendTransaction = async (tx: TransactionRequest): Promise<any> => {\n if (!this.provider) throw new SwapKitError(\"wallet_keepkey_no_provider\");\n\n const signedTxHex = await this.signTransaction(tx);\n\n return await this.provider.broadcastTransaction(signedTxHex);\n };\n\n connect = (provider: Provider) =>\n new KeepKeySigner({ chain: this.chain, derivationPath: this.derivationPath, provider, sdk: this.sdk });\n}\n",
|
|
8
8
|
"import type { KeepKeySdk } from \"@keepkey/keepkey-sdk\";\nimport {\n type AssetValue,\n Chain,\n DerivationPath,\n type DerivationPathArray,\n derivationPathToString,\n type GenericTransferParams,\n getRPCUrl,\n MAYAConfig,\n SwapKitError,\n} from \"@swapkit/helpers\";\nimport type { ThorchainDepositParams } from \"@swapkit/toolboxes/cosmos\";\n\nimport { bip32ToAddressNList } from \"../coins\";\n\ntype SignTransactionParams = { assetValue: AssetValue; recipient?: string; sender: string; memo: string | undefined };\n\nexport async function mayachainWalletMethods({\n sdk,\n derivationPath,\n}: {\n sdk: KeepKeySdk;\n derivationPath?: DerivationPathArray;\n}): Promise<any> {\n const { createStargateClient, getCosmosToolbox } = await import(\"@swapkit/toolboxes/cosmos\");\n\n const toolbox = await getCosmosToolbox(Chain.Maya);\n const derivationPathString = derivationPath ? derivationPathToString(derivationPath) : `${DerivationPath.MAYA}/0`;\n\n const { address: fromAddress } = (await sdk.address.mayachainGetAddress({\n address_n: bip32ToAddressNList(derivationPathString),\n })) as { address: string };\n\n const signTransaction = async ({ assetValue, recipient, sender, memo }: SignTransactionParams) => {\n const importedAmino = await import(\"@cosmjs/amino\");\n const makeSignDoc = importedAmino.makeSignDoc ?? importedAmino.default?.makeSignDoc;\n const { getDenomWithChain } = await import(\"@swapkit/toolboxes/cosmos\");\n\n const account = await toolbox.getAccount(sender);\n if (!account) throw new SwapKitError(\"wallet_keepkey_account_not_found\");\n const { accountNumber, sequence = 0 } = account;\n const amount = assetValue.getBaseValue(\"string\");\n\n const isTransfer = recipient && recipient !== \"\";\n\n // TODO check if we can move to toolbox created msg\n const msg = isTransfer\n ? {\n type: \"mayachain/MsgSend\",\n value: {\n amount: [{ amount, denom: assetValue.symbol.toLowerCase() }],\n from_address: sender,\n to_address: recipient,\n },\n }\n : {\n type: \"mayachain/MsgDeposit\",\n value: { coins: [{ amount, asset: getDenomWithChain(assetValue) }], memo, signer: sender },\n };\n\n const signDoc = makeSignDoc(\n [msg],\n { amount: [], gas: \"500000000\" },\n MAYAConfig.chainId,\n memo,\n accountNumber?.toString(),\n sequence,\n );\n\n const sdkMethod = isTransfer ? sdk.mayachain.mayachainSignAminoTransfer : sdk.mayachain.mayachainSignAminoDeposit;\n\n // @ts-expect-error TC\n const signedTx = await sdkMethod({ signDoc, signerAddress: sender });\n const decodedBytes = atob(signedTx.serialized);\n return new Uint8Array(decodedBytes.length).map((_, i) => decodedBytes.charCodeAt(i));\n };\n\n const transfer = async ({ assetValue, recipient, memo }: GenericTransferParams) => {\n const rpcUrl = await getRPCUrl(Chain.Maya);\n const stargateClient = await createStargateClient(rpcUrl);\n const signedTransaction = await signTransaction({ assetValue, memo, recipient, sender: fromAddress });\n const { transactionHash } = await stargateClient.broadcastTx(signedTransaction);\n\n return transactionHash;\n };\n\n const deposit = async ({ assetValue, memo }: ThorchainDepositParams) => {\n const rpcUrl = await getRPCUrl(Chain.Maya);\n const stargateClient = await createStargateClient(rpcUrl);\n const signedTransaction = await signTransaction({ assetValue, memo, sender: fromAddress });\n const { transactionHash } = await stargateClient.broadcastTx(signedTransaction);\n\n return transactionHash;\n };\n\n return { ...toolbox, address: fromAddress, deposit, transfer };\n}\n",
|
|
9
9
|
"import type { KeepKeySdk, TypesThorchainSignDocDeposit, TypesThorchainSignDocTransfer } from \"@keepkey/keepkey-sdk\";\nimport {\n type AssetValue,\n Chain,\n DerivationPath,\n type DerivationPathArray,\n derivationPathToString,\n type GenericTransferParams,\n getRPCUrl,\n SwapKitError,\n THORConfig,\n} from \"@swapkit/helpers\";\nimport type { ThorchainDepositParams } from \"@swapkit/toolboxes/cosmos\";\n\nimport { bip32ToAddressNList } from \"../coins\";\n\ntype SignTransactionParams = { assetValue: AssetValue; recipient?: string; sender: string; memo: string | undefined };\n\nexport async function thorchainWalletMethods({\n sdk,\n derivationPath,\n}: {\n sdk: KeepKeySdk;\n derivationPath?: DerivationPathArray;\n}): Promise<any> {\n const importedAmino = await import(\"@cosmjs/amino\");\n const makeSignDoc = importedAmino.makeSignDoc ?? importedAmino.default?.makeSignDoc;\n const { buildAminoMsg, getDefaultChainFee, createStargateClient, getCosmosToolbox } = await import(\n \"@swapkit/toolboxes/cosmos\"\n );\n\n const toolbox = await getCosmosToolbox(Chain.THORChain);\n const derivationPathString = derivationPath ? derivationPathToString(derivationPath) : `${DerivationPath.THOR}/0`;\n\n const { address: fromAddress } = (await sdk.address.thorchainGetAddress({\n address_n: bip32ToAddressNList(derivationPathString),\n })) as { address: string };\n\n const signTransaction = async ({ assetValue, recipient, sender, memo }: SignTransactionParams) => {\n const account = await toolbox.getAccount(sender);\n if (!account) throw new SwapKitError(\"wallet_keepkey_account_not_found\");\n const { accountNumber, sequence = 0 } = account;\n\n const isTransfer = recipient && recipient !== \"\";\n const msg = buildAminoMsg({ assetValue, memo, recipient, sender });\n\n const signDoc = makeSignDoc(\n [msg],\n getDefaultChainFee(Chain.THORChain),\n THORConfig.chainId,\n memo,\n accountNumber?.toString(),\n sequence,\n );\n\n const signedTx = isTransfer\n ? await sdk.thorchain.thorchainSignAminoTransfer({\n signDoc: signDoc as TypesThorchainSignDocTransfer,\n signerAddress: sender,\n })\n : await sdk.thorchain.thorchainSignAminoDeposit({\n signDoc: signDoc as TypesThorchainSignDocDeposit,\n signerAddress: sender,\n });\n const decodedBytes = atob(signedTx.serialized);\n return new Uint8Array(decodedBytes.length).map((_, i) => decodedBytes.charCodeAt(i));\n };\n\n const transfer = async ({ assetValue, recipient, memo }: GenericTransferParams) => {\n const rpcUrl = await getRPCUrl(Chain.THORChain);\n const stargateClient = await createStargateClient(rpcUrl);\n const signedTransaction = await signTransaction({ assetValue, memo, recipient, sender: fromAddress });\n const { transactionHash } = await stargateClient.broadcastTx(signedTransaction);\n\n return transactionHash;\n };\n\n const deposit = async ({ assetValue, memo }: ThorchainDepositParams) => {\n const rpcUrl = await getRPCUrl(Chain.THORChain);\n const stargateClient = await createStargateClient(rpcUrl);\n const signedTransaction = await signTransaction({ assetValue, memo, sender: fromAddress });\n const { transactionHash } = await stargateClient.broadcastTx(signedTransaction);\n\n return transactionHash;\n };\n\n // const signMessage = async (message: string) => {\n // const stargateClient = await createStargateClient(RPCUrl.THORChain);\n // // return signedTx;\n // };\n\n return { ...toolbox, address: fromAddress, deposit, transfer };\n}\n",
|
|
10
|
-
"import type { KeepKeySdk } from \"@keepkey/keepkey-sdk\";\nimport {\n Chain,\n DerivationPath,\n type DerivationPathArray,\n derivationPathToString,\n FeeOption,\n type GenericTransferParams,\n SwapKitError,\n type UTXOChain,\n} from \"@swapkit/helpers\";\nimport {\n assertDerivationIndex,\n createHDWalletHelpers,\n getNetworkForChain,\n getUTXOAccountIndexFromPath,\n getUTXOAccountPath,\n getUTXOAddressPath,\n getUtxoApi,\n stripToCashAddress,\n type UTXOToolboxes,\n} from \"@swapkit/toolboxes/utxo\";\nimport type { Transaction } from \"@swapkit/utxo-signer\";\nimport { bip32ToAddressNList, ChainToKeepKeyName } from \"../coins\";\n\ninterface KeepKeyInputObject {\n addressNList: number[];\n scriptType: string;\n amount: string;\n vout: number;\n txid: string;\n hex: string;\n}\n\ntype KeepKeyUTXOWalletMethods = Record<string, unknown> & { address: string };\n\nexport async function utxoWalletMethods({\n sdk,\n chain,\n derivationPath,\n}: {\n sdk: KeepKeySdk;\n chain: Exclude<UTXOChain, typeof Chain.Zcash>;\n derivationPath?: DerivationPathArray;\n}): Promise<KeepKeyUTXOWalletMethods> {\n const { getUtxoToolbox } = await import(\"@swapkit/toolboxes/utxo\");\n // This might not work for BCH\n const toolbox = await getUtxoToolbox(chain);\n const scriptType = [Chain.Bitcoin, Chain.Litecoin].includes(chain as typeof Chain.Bitcoin)\n ? (\"p2wpkh\" as const)\n : (\"p2pkh\" as const);\n\n const derivationPathString = derivationPath ? derivationPathToString(derivationPath) : `${DerivationPath[chain]}/0`;\n\n const addressInfo = {\n address_n: bip32ToAddressNList(derivationPathString),\n coin: ChainToKeepKeyName[chain],\n script_type: scriptType,\n };\n\n const walletAddress: string = (await sdk.address.utxoGetAddress(addressInfo)).address;\n const network = getNetworkForChain(chain);\n\n const signTransaction = async (tx: Transaction, inputs: KeepKeyInputObject[], memo = \"\") => {\n const outputs: any[] = [];\n\n for (let i = 0; i < tx.outputsLength; i++) {\n const output = tx.getOutput(i);\n const address = tx.getOutputAddress(i, network);\n const value = Number(output.amount);\n\n if (address === walletAddress) {\n outputs.push({\n addressNList: addressInfo.address_n,\n addressType: \"change\",\n amount: value,\n isChange: true,\n scriptType,\n });\n } else if (address) {\n const outputAddress = chain === Chain.BitcoinCash ? stripToCashAddress(address) : address;\n\n if (outputAddress) {\n outputs.push({ address: outputAddress, addressType: \"spend\", amount: value });\n }\n }\n }\n\n const removeNullAndEmptyObjectsFromArray = (arr: any[]) => {\n return arr.filter((item) => item !== null && typeof item === \"object\" && Object.keys(item).length > 0);\n };\n\n const responseSign = await sdk.utxo.utxoSignTransaction({\n coin: ChainToKeepKeyName[chain],\n inputs,\n opReturnData: memo,\n outputs: removeNullAndEmptyObjectsFromArray(outputs),\n });\n\n return responseSign.serializedTx?.toString();\n };\n\n const transfer = async ({ recipient, feeOptionKey, feeRate, memo, ...rest }: GenericTransferParams) => {\n if (!walletAddress)\n throw new SwapKitError(\"wallet_keepkey_invalid_params\", { reason: \"From address must be provided\" });\n if (!recipient)\n throw new SwapKitError(\"wallet_keepkey_invalid_params\", { reason: \"Recipient address must be provided\" });\n\n const createTxMethod =\n chain === Chain.BitcoinCash\n ? (toolbox as UTXOToolboxes[\"BCH\"]).buildTx\n : (toolbox as UTXOToolboxes[\"BTC\"]).createTransaction;\n\n const { tx, inputs: rawInputs } = await createTxMethod({\n ...rest,\n feeRate: feeRate || (await toolbox.getFeeRates())[feeOptionKey || FeeOption.Fast],\n fetchTxHex: true,\n memo,\n recipient,\n sender: walletAddress,\n });\n\n const inputs = rawInputs.map(({ value, index, hash, txHex }) => ({\n //@TODO don't hardcode master, lookup on blockbook what input this is for and what path that address is!\n addressNList: addressInfo.address_n,\n amount: value.toString(),\n hex: txHex || \"\",\n scriptType,\n txid: hash,\n vout: index,\n }));\n\n const txHex = await signTransaction(tx, inputs, memo);\n return toolbox.broadcastTx(txHex);\n };\n\n const signTransactionWithMultipleInputs = async (\n tx: Transaction,\n inputs: Array<{\n hash: string;\n index: number;\n value: number;\n txHex?: string;\n derivationIndex: number;\n isChange: boolean;\n }>,\n memo = \"\",\n ) => {\n const accountAddressN = bip32ToAddressNList(\n derivationPath\n ? derivationPathToString(derivationPath.slice(0, 3) as DerivationPathArray)\n : DerivationPath[chain],\n );\n\n type KeepKeyOutput =\n | { addressNList: number[]; addressType: \"change\"; amount: number; isChange: true; scriptType: string }\n | { address: string; addressType: \"spend\"; amount: number };\n\n const outputs: KeepKeyOutput[] = [];\n for (let i = 0; i < tx.outputsLength; i++) {\n const output = tx.getOutput(i);\n const outputAddress = tx.getOutputAddress(i, network);\n const value = Number(output.amount);\n\n if (outputAddress === walletAddress) {\n outputs.push({\n addressNList: addressInfo.address_n,\n addressType: \"change\",\n amount: value,\n isChange: true,\n scriptType,\n });\n } else if (outputAddress) {\n const finalAddress = chain === Chain.BitcoinCash ? stripToCashAddress(outputAddress) : outputAddress;\n if (finalAddress) {\n outputs.push({ address: finalAddress, addressType: \"spend\", amount: value });\n }\n }\n }\n\n const keepKeyInputs = inputs.map(({ hash, index: inputIndex, value, txHex, derivationIndex, isChange }) => {\n const changePath = isChange ? 1 : 0;\n const inputAddressN = [...accountAddressN, changePath, derivationIndex];\n return {\n addressNList: inputAddressN,\n amount: value.toString(),\n hex: txHex || \"\",\n scriptType,\n txid: hash,\n vout: inputIndex,\n };\n });\n\n const responseSign = await sdk.utxo.utxoSignTransaction({\n coin: ChainToKeepKeyName[chain],\n inputs: keepKeyInputs,\n opReturnData: memo,\n outputs: outputs.filter((item) => item !== null && typeof item === \"object\" && Object.keys(item).length > 0),\n });\n\n return responseSign.serializedTx?.toString() || \"\";\n };\n\n const transferFromMultipleAddresses = async ({\n utxos,\n recipient,\n assetValue,\n memo,\n feeRate,\n feeOptionKey,\n }: {\n utxos: Array<{\n hash: string;\n index: number;\n value: number;\n txHex?: string;\n derivationIndex: number;\n isChange: boolean;\n address: string;\n }>;\n recipient: string;\n assetValue: { getBaseValue: (unit: string) => number; chain: string };\n memo?: string;\n feeRate?: number;\n feeOptionKey?: (typeof FeeOption)[keyof typeof FeeOption];\n }) => {\n const txFeeRate = feeRate || (await toolbox.getFeeRates())[feeOptionKey || FeeOption.Fast];\n\n const createTxMethod =\n chain === Chain.BitcoinCash\n ? (toolbox as UTXOToolboxes[\"BCH\"]).buildTx\n : (toolbox as UTXOToolboxes[\"BTC\"]).createTransaction;\n\n const { tx, inputs: selectedInputs } = await createTxMethod({\n assetValue: assetValue as any,\n feeRate: txFeeRate,\n fetchTxHex: true,\n memo,\n recipient,\n sender: walletAddress,\n });\n\n const inputsWithDerivation = selectedInputs.map(\n (input: { hash: string; index: number; value: number; txHex?: string }) => {\n const utxoInfo = utxos.find((u) => u.hash === input.hash && u.index === input.index);\n return { ...input, derivationIndex: utxoInfo?.derivationIndex ?? 0, isChange: utxoInfo?.isChange ?? false };\n },\n );\n\n const signedTxHex = await signTransactionWithMultipleInputs(tx, inputsWithDerivation, memo);\n return toolbox.broadcastTx(signedTxHex);\n };\n\n async function getExtendedPublicKeyInfo({ accountIndex }: { accountIndex?: number } = {}) {\n try {\n const resolvedAccountPath = getUTXOAccountPath({ accountIndex, chain, derivationPath });\n const resolvedAccountPathString = derivationPathToString(resolvedAccountPath);\n const path = {\n address_n: bip32ToAddressNList(resolvedAccountPathString),\n coin: ChainToKeepKeyName[chain],\n script_type: scriptType,\n showDisplay: false,\n symbol: chain.toUpperCase(),\n };\n\n const responsePubkey = await sdk.system.info.getPublicKey(path);\n\n return {\n accountIndex: getUTXOAccountIndexFromPath(resolvedAccountPath),\n path: resolvedAccountPathString,\n xpub: responsePubkey.xpub,\n };\n } catch (error) {\n throw new SwapKitError(\"wallet_keepkey_failed_to_get_public_key\", {\n chain,\n error: error instanceof Error ? error.message : \"Unknown error\",\n });\n }\n }\n\n function getExtendedPublicKey() {\n return getExtendedPublicKeyInfo();\n }\n\n async function deriveAddressAtIndex({\n accountIndex,\n index,\n change = false,\n }: {\n accountIndex?: number;\n index: number;\n change?: boolean;\n }) {\n try {\n assertDerivationIndex(\"index\", index);\n const fullPath = getUTXOAddressPath({ accountIndex, chain, change, derivationPath, index });\n const fullPathString = derivationPathToString(fullPath);\n\n const result = await sdk.address.utxoGetAddress({\n address_n: bip32ToAddressNList(fullPathString),\n coin: ChainToKeepKeyName[chain],\n script_type: scriptType,\n });\n\n let finalAddress = result.address;\n if (chain === Chain.BitcoinCash) {\n finalAddress = stripToCashAddress(result.address);\n }\n\n return {\n accountIndex: getUTXOAccountIndexFromPath(fullPath),\n address: finalAddress,\n change,\n index,\n path: fullPathString,\n pubkey: \"\",\n };\n } catch {\n return undefined;\n }\n }\n\n async function deriveAddresses({\n accountIndex,\n count,\n startIndex = 0,\n change = false,\n }: {\n accountIndex?: number;\n count: number;\n startIndex?: number;\n change?: boolean;\n }) {\n assertDerivationIndex(\"count\", count);\n assertDerivationIndex(\"startIndex\", startIndex);\n\n const addresses = await Promise.all(\n Array.from({ length: count }, (_, i) => deriveAddressAtIndex({ accountIndex, change, index: startIndex + i })),\n );\n\n return addresses.filter((address) => !!address);\n }\n\n const hdHelpers = createHDWalletHelpers({\n chain,\n deriveAddress: deriveAddressAtIndex,\n getBalance: toolbox.getBalance,\n getUtxos: (address: string) => getUtxoApi(chain).getUtxos({ address, fetchTxHex: true }),\n });\n\n return {\n ...toolbox,\n ...hdHelpers,\n address: walletAddress,\n deriveAddressAtIndex,\n deriveAddresses,\n getExtendedPublicKey,\n getExtendedPublicKeyInfo,\n signTransaction,\n signTransactionWithMultipleInputs,\n transfer,\n transferFromMultipleAddresses,\n };\n}\n"
|
|
10
|
+
"import type { KeepKeySdk } from \"@keepkey/keepkey-sdk\";\nimport {\n Chain,\n DerivationPath,\n type DerivationPathArray,\n derivationPathToString,\n FeeOption,\n type GenericTransferParams,\n SwapKitError,\n type UTXOChain,\n} from \"@swapkit/helpers\";\nimport {\n assertDerivationIndex,\n createHDWalletHelpers,\n getNetworkForChain,\n getUTXOAccountIndexFromPath,\n getUTXOAccountPath,\n getUTXOAddressPath,\n getUtxoApi,\n stripToCashAddress,\n type UTXOToolboxes,\n} from \"@swapkit/toolboxes/utxo\";\nimport type { Transaction } from \"@swapkit/utxo-signer\";\nimport { bip32ToAddressNList, ChainToKeepKeyName } from \"../coins\";\n\ninterface KeepKeyInputObject {\n addressNList: number[];\n scriptType: string;\n amount: string;\n vout: number;\n txid: string;\n hex: string;\n}\n\ntype KeepKeyUTXOWalletMethods = Record<string, unknown> & { address: string };\n\nexport async function utxoWalletMethods({\n sdk,\n chain,\n derivationPath,\n}: {\n sdk: KeepKeySdk;\n chain: Exclude<UTXOChain, typeof Chain.Zcash>;\n derivationPath?: DerivationPathArray;\n}): Promise<KeepKeyUTXOWalletMethods> {\n const { getUtxoToolbox } = await import(\"@swapkit/toolboxes/utxo\");\n // This might not work for BCH\n const toolbox = await getUtxoToolbox(chain);\n const scriptType = [Chain.Bitcoin, Chain.Litecoin].includes(chain as typeof Chain.Bitcoin)\n ? (\"p2wpkh\" as const)\n : (\"p2pkh\" as const);\n\n const derivationPathString = derivationPath ? derivationPathToString(derivationPath) : `${DerivationPath[chain]}/0`;\n\n const addressInfo = {\n address_n: bip32ToAddressNList(derivationPathString),\n coin: ChainToKeepKeyName[chain],\n script_type: scriptType,\n };\n\n const walletAddress: string = (await sdk.address.utxoGetAddress(addressInfo)).address;\n const network = getNetworkForChain(chain);\n\n const signTransaction = async (tx: Transaction, inputs: KeepKeyInputObject[], memo = \"\") => {\n const outputs: any[] = [];\n\n for (let i = 0; i < tx.outputsLength; i++) {\n const output = tx.getOutput(i);\n const address = tx.getOutputAddress(i, network);\n const value = Number(output.amount);\n\n if (address === walletAddress) {\n outputs.push({\n addressNList: addressInfo.address_n,\n addressType: \"change\",\n amount: value,\n isChange: true,\n scriptType,\n });\n } else if (address) {\n const outputAddress = chain === Chain.BitcoinCash ? stripToCashAddress(address) : address;\n\n if (outputAddress) {\n outputs.push({ address: outputAddress, addressType: \"spend\", amount: value });\n }\n }\n }\n\n const removeNullAndEmptyObjectsFromArray = (arr: any[]) => {\n return arr.filter((item) => item !== null && typeof item === \"object\" && Object.keys(item).length > 0);\n };\n\n const responseSign = await sdk.utxo.utxoSignTransaction({\n coin: ChainToKeepKeyName[chain],\n inputs,\n opReturnData: memo,\n outputs: removeNullAndEmptyObjectsFromArray(outputs),\n });\n\n return responseSign.serializedTx?.toString();\n };\n\n const transfer = async ({ recipient, feeOptionKey, feeRate, memo, ...rest }: GenericTransferParams) => {\n if (!walletAddress)\n throw new SwapKitError(\"wallet_keepkey_invalid_params\", { reason: \"From address must be provided\" });\n if (!recipient)\n throw new SwapKitError(\"wallet_keepkey_invalid_params\", { reason: \"Recipient address must be provided\" });\n\n const createTxMethod =\n chain === Chain.BitcoinCash\n ? (toolbox as UTXOToolboxes[\"BCH\"]).buildTx\n : (toolbox as UTXOToolboxes[\"BTC\"]).createTransaction;\n\n const { tx, inputs: rawInputs } = await createTxMethod({\n ...rest,\n feeRate: feeRate || (await toolbox.getFeeRates())[feeOptionKey || FeeOption.Fast],\n fetchTxHex: true,\n memo,\n recipient,\n sender: walletAddress,\n });\n\n const inputs = rawInputs.map(({ value, index, hash, txHex }) => ({\n //@TODO don't hardcode master, lookup on blockbook what input this is for and what path that address is!\n addressNList: addressInfo.address_n,\n amount: value.toString(),\n hex: txHex || \"\",\n scriptType,\n txid: hash,\n vout: index,\n }));\n\n const txHex = await signTransaction(tx, inputs, memo);\n return toolbox.broadcastTx(txHex);\n };\n\n const signTransactionWithMultipleInputs = async (\n tx: Transaction,\n inputs: Array<{\n hash: string;\n index: number;\n value: number;\n txHex?: string;\n derivationIndex: number;\n isChange: boolean;\n }>,\n memo = \"\",\n ) => {\n const accountAddressN = bip32ToAddressNList(\n derivationPath\n ? derivationPathToString(derivationPath.slice(0, 3) as DerivationPathArray)\n : DerivationPath[chain],\n );\n\n type KeepKeyOutput =\n | { addressNList: number[]; addressType: \"change\"; amount: number; isChange: true; scriptType: string }\n | { address: string; addressType: \"spend\"; amount: number };\n\n const outputs: KeepKeyOutput[] = [];\n for (let i = 0; i < tx.outputsLength; i++) {\n const output = tx.getOutput(i);\n const outputAddress = tx.getOutputAddress(i, network);\n const value = Number(output.amount);\n\n if (outputAddress === walletAddress) {\n outputs.push({\n addressNList: addressInfo.address_n,\n addressType: \"change\",\n amount: value,\n isChange: true,\n scriptType,\n });\n } else if (outputAddress) {\n const finalAddress = chain === Chain.BitcoinCash ? stripToCashAddress(outputAddress) : outputAddress;\n if (finalAddress) {\n outputs.push({ address: finalAddress, addressType: \"spend\", amount: value });\n }\n }\n }\n\n const keepKeyInputs = inputs.map(({ hash, index: inputIndex, value, txHex, derivationIndex, isChange }) => {\n const changePath = isChange ? 1 : 0;\n const inputAddressN = [...accountAddressN, changePath, derivationIndex];\n return {\n addressNList: inputAddressN,\n amount: value.toString(),\n hex: txHex || \"\",\n scriptType,\n txid: hash,\n vout: inputIndex,\n };\n });\n\n const responseSign = await sdk.utxo.utxoSignTransaction({\n coin: ChainToKeepKeyName[chain],\n inputs: keepKeyInputs,\n opReturnData: memo,\n outputs: outputs.filter((item) => item !== null && typeof item === \"object\" && Object.keys(item).length > 0),\n });\n\n return responseSign.serializedTx?.toString() || \"\";\n };\n\n const transferFromMultipleAddresses = async ({\n utxos,\n recipient,\n assetValue,\n memo,\n feeRate,\n feeOptionKey,\n }: {\n utxos: Array<{\n hash: string;\n index: number;\n value: number;\n txHex?: string;\n derivationIndex: number;\n isChange: boolean;\n address: string;\n }>;\n recipient: string;\n assetValue: { getBaseValue: (unit: string) => number; chain: string };\n memo?: string;\n feeRate?: number;\n feeOptionKey?: (typeof FeeOption)[keyof typeof FeeOption];\n }) => {\n const txFeeRate = feeRate || (await toolbox.getFeeRates())[feeOptionKey || FeeOption.Fast];\n\n const createTxMethod =\n chain === Chain.BitcoinCash\n ? (toolbox as UTXOToolboxes[\"BCH\"]).buildTx\n : (toolbox as UTXOToolboxes[\"BTC\"]).createTransaction;\n\n const { tx, inputs: selectedInputs } = await createTxMethod({\n assetValue: assetValue as any,\n feeRate: txFeeRate,\n fetchTxHex: true,\n memo,\n recipient,\n sender: walletAddress,\n });\n\n const inputsWithDerivation = selectedInputs.map(\n (input: { hash: string; index: number; value: number; txHex?: string }) => {\n const utxoInfo = utxos.find((u) => u.hash === input.hash && u.index === input.index);\n return { ...input, derivationIndex: utxoInfo?.derivationIndex ?? 0, isChange: utxoInfo?.isChange ?? false };\n },\n );\n\n const signedTxHex = await signTransactionWithMultipleInputs(tx, inputsWithDerivation, memo);\n return toolbox.broadcastTx(signedTxHex);\n };\n\n async function getExtendedPublicKeyInfo({ accountIndex }: { accountIndex?: number } = {}) {\n try {\n const resolvedAccountPath = getUTXOAccountPath({ accountIndex, chain, derivationPath });\n const resolvedAccountPathString = derivationPathToString(resolvedAccountPath);\n const path = {\n address_n: bip32ToAddressNList(resolvedAccountPathString),\n coin: ChainToKeepKeyName[chain],\n script_type: scriptType,\n showDisplay: false,\n symbol: chain.toUpperCase(),\n };\n\n const responsePubkey = await sdk.system.info.getPublicKey(path);\n\n return {\n accountIndex: getUTXOAccountIndexFromPath(resolvedAccountPath),\n path: resolvedAccountPathString,\n xpub: responsePubkey.xpub,\n };\n } catch (error) {\n throw new SwapKitError(\"wallet_keepkey_failed_to_get_public_key\", {\n chain,\n error: error instanceof Error ? error.message : \"Unknown error\",\n });\n }\n }\n\n function getExtendedPublicKey(params: { accountIndex?: number } = {}) {\n return getExtendedPublicKeyInfo(params);\n }\n\n async function deriveAddressAtIndex({\n accountIndex,\n index,\n change = false,\n }: {\n accountIndex?: number;\n index: number;\n change?: boolean;\n }) {\n try {\n assertDerivationIndex(\"index\", index);\n const fullPath = getUTXOAddressPath({ accountIndex, chain, change, derivationPath, index });\n const fullPathString = derivationPathToString(fullPath);\n\n const result = await sdk.address.utxoGetAddress({\n address_n: bip32ToAddressNList(fullPathString),\n coin: ChainToKeepKeyName[chain],\n script_type: scriptType,\n });\n\n let finalAddress = result.address;\n if (chain === Chain.BitcoinCash) {\n finalAddress = stripToCashAddress(result.address);\n }\n\n return {\n accountIndex: getUTXOAccountIndexFromPath(fullPath),\n address: finalAddress,\n change,\n index,\n path: fullPathString,\n pubkey: \"\",\n };\n } catch {\n return undefined;\n }\n }\n\n async function deriveAddresses({\n accountIndex,\n count,\n startIndex = 0,\n change = false,\n }: {\n accountIndex?: number;\n count: number;\n startIndex?: number;\n change?: boolean;\n }) {\n assertDerivationIndex(\"count\", count);\n assertDerivationIndex(\"startIndex\", startIndex);\n\n const addresses = await Promise.all(\n Array.from({ length: count }, (_, i) => deriveAddressAtIndex({ accountIndex, change, index: startIndex + i })),\n );\n\n return addresses.filter((address) => !!address);\n }\n\n const hdHelpers = createHDWalletHelpers({\n chain,\n deriveAddress: deriveAddressAtIndex,\n getBalance: toolbox.getBalance,\n getUtxos: (address: string) => getUtxoApi(chain).getUtxos({ address, fetchTxHex: true }),\n });\n\n return {\n ...toolbox,\n ...hdHelpers,\n address: walletAddress,\n deriveAddressAtIndex,\n deriveAddresses,\n getExtendedPublicKey,\n getExtendedPublicKeyInfo,\n signTransaction,\n signTransactionWithMultipleInputs,\n transfer,\n transferFromMultipleAddresses,\n };\n}\n"
|
|
11
11
|
],
|
|
12
|
-
"mappings": "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",
|
|
13
|
-
"debugId": "
|
|
12
|
+
"mappings": "8FAAA,gBAAS,8BACT,gBACE,2BAEA,4BACA,eACA,kBACA,mBACA,0BAKF,uBAAS,+BAAc,8BCXvB,gBACE,oBACA,6BAEA,iBACA,eACA,0BAKF,eAAsB,CAAmB,EACvC,MACA,kBAIe,CACf,IAAQ,6BAA4B,mBAAkB,wBAAuB,wBAAyB,KACpG,qCAEI,EAAuB,EAAiB,GAAuB,CAAc,EAAI,GAAG,GAAe,UAEjG,QAAS,GAAiB,MAAM,EAAI,QAAQ,iBAAiB,CACnE,UAAW,EAAoB,CAAoB,CACrD,CAAC,EAEK,EAAU,MAAM,EAAiB,EAAM,MAAM,EAEnD,GAAI,EAA2B,OAAO,GACpC,EAA2B,OAAO,GAAG,OAAS,OAAO,MAAM,EAAsB,EAAW,QAAS,GAAG,CAAC,EAmC3G,MAAO,IAAK,EAAS,QAAS,EAAa,SA/B1B,OAAS,aAAY,YAAW,UAAkC,CACjF,IAAM,EAAS,EAAW,aAAa,QAAQ,EACzC,EAAc,MAAM,EAAQ,WAAW,CAAW,EAElD,EAAkB,MAAM,EAAI,OAAO,gBAAgB,CACvD,QAAS,CACP,eAAgB,GAAa,cAAc,SAAS,GAAK,GACzD,SAAU,EAAW,QACrB,IAAK,EACL,KAAM,GAAQ,GACd,KAAM,CACJ,CACE,KAAM,qBACN,MAAO,CAAE,OAAQ,CAAC,CAAE,SAAQ,MAAO,OAAQ,CAAC,EAAG,aAAc,EAAa,WAAY,CAAU,CAClG,CACF,EACA,SAAU,GAAa,SAAS,SAAS,GAAK,EAChD,EACA,cAAe,CACjB,CAAC,EAEK,EAAe,KAAK,EAAgB,UAAU,EAC9C,EAAa,IAAI,WAAW,EAAa,MAAM,EAAE,IAAI,CAAC,EAAG,IAAM,EAAa,WAAW,CAAC,CAAC,EAEzF,EAAS,MAAM,GAAU,EAAM,MAAM,EAI3C,OAFiB,MADF,MAAM,EAAqB,CAAM,GAClB,YAAY,CAAU,GAEpC,gBAGkC,EClEtD,yBAEE,6BAEA,4BACA,mBACA,yBAGF,yBAAS,gBAWF,MAAM,UAAsB,EAAe,CACxC,IACA,MACA,eACA,QACC,SAET,WAAW,EAAG,MAAK,QAAO,iBAAgB,YAAoC,CAC5E,MAAM,EACN,KAAK,IAAM,EACX,KAAK,MAAQ,EACb,KAAK,eAAiB,GAAkB,GAAsB,IAC9D,KAAK,QAAU,GACf,KAAK,SAAW,EAGlB,cAAgB,MACd,EACA,EACA,EACA,IACG,CACH,IAAQ,yBAA0B,KAAa,mCACvC,oBAAqB,KAAa,mBAElC,aAAc,KAAM,GAAkB,EACxC,EAAc,GAAuB,EAAiB,KAAK,CAAa,EAAE,YAC1E,EAAc,EAAsB,CAAM,EAE1C,EAAU,MAAM,KAAK,WAAW,EAChC,EAAS,MAAM,KAAK,IAAI,IAAI,iBAAiB,CACjD,UACA,UAAW,CACT,OAAQ,EACR,QAAS,EACT,cACA,MAAO,CAAE,aAAc,KAAgB,CAAc,CACvD,CACF,CAAC,EAED,GAAI,OAAO,IAAW,SACpB,MAAM,IAAI,EAAa,sCAAuC,CAAE,OAAQ,eAAgB,CAAC,EAG3F,OAAO,EAAO,WAAW,IAAI,EAAI,EAAS,KAAK,KAGjD,WAAa,SAAY,CACvB,GAAI,KAAK,QAAS,OAAO,KAAK,QAC9B,IAAQ,WAAY,MAAM,KAAK,IAAI,QAAQ,mBAAmB,CAC5D,UAAW,EAAoB,GAAuB,KAAK,cAAc,CAAC,CAC5E,CAAC,EAGD,OADA,KAAK,QAAU,EACR,GAGT,YAAc,CAAC,IAAoB,KAAK,IAAI,IAAI,QAAQ,CAAE,QAAS,KAAK,QAAS,SAAQ,CAAC,EAE1F,gBAAkB,OAChB,KACA,QACA,WACA,QACA,OACA,eACA,uBACA,cACwB,CACxB,GAAI,CAAC,EAAI,MAAM,IAAI,EAAa,gCAAiC,CAAE,OAAQ,oBAAqB,CAAC,EACjG,GAAI,CAAC,EAAU,MAAM,IAAI,EAAa,gCAAiC,CAAE,OAAQ,kBAAmB,CAAC,EACrG,GAAI,CAAC,EAAM,MAAM,IAAI,EAAa,gCAAiC,CAAE,OAAQ,cAAe,CAAC,EAE7F,IAAM,EAAY,CAAC,GAAG,GAAgB,IAAyB,CAAC,GAChE,GAAI,GAAa,CAAC,EAChB,MAAM,IAAI,EAAa,gCAAiC,CAAE,OAAQ,sBAAuB,CAAC,EAC5F,GAAI,GAAa,CAAC,EAChB,MAAM,IAAI,EAAa,gCAAiC,CAAE,OAAQ,8BAA+B,CAAC,EACpG,GAAI,EAAE,GAAa,GACjB,MAAM,IAAI,EAAa,gCAAiC,CAAE,OAAQ,kBAAmB,CAAC,EAExF,IAAQ,eAAgB,KAAa,kCAE/B,EAAa,EACf,OAAO,CAAK,EACZ,OAAO,MAAM,KAAK,SAAS,oBAAoB,MAAM,KAAK,WAAW,EAAG,SAAS,CAAC,EAEhF,EAAQ,CACZ,aAAc,CAAC,WAAY,WAAY,WAAY,EAAG,CAAC,EACvD,QAAS,EAAY,OAAO,GAAe,KAAK,MAAM,CAAC,EACvD,OACA,KAAM,KAAK,QACX,IAAK,EAAY,OAAO,CAAQ,CAAC,EACjC,MAAO,EAAY,CAAU,EAC7B,GAAI,EAAG,SAAS,EAChB,MAAO,EAAY,OAAO,GAAS,CAAC,CAAC,KACjC,GAAa,CACf,aAAc,EAAY,OAAO,GAAc,SAAS,GAAK,GAAG,CAAC,EACjE,qBAAsB,EAAY,OAAO,GAAsB,SAAS,GAAK,GAAG,CAAC,CACnF,KACI,CAAC,GAAa,CAEhB,SAAU,EAAY,OAAO,GAAU,SAAS,GAAK,GAAG,CAAC,CAC3D,CACF,EAEA,OADqB,MAAM,KAAK,IAAI,IAAI,mBAAmB,CAAK,GAC5C,YAGtB,gBAAkB,MAAO,IAAyC,CAChE,GAAI,CAAC,KAAK,SAAU,MAAM,IAAI,EAAa,4BAA4B,EAEvE,IAAM,EAAc,MAAM,KAAK,gBAAgB,CAAE,EAEjD,OAAO,MAAM,KAAK,SAAS,qBAAqB,CAAW,GAG7D,QAAU,CAAC,IACT,IAAI,EAAc,CAAE,MAAO,KAAK,MAAO,eAAgB,KAAK,eAAgB,WAAU,IAAK,KAAK,GAAI,CAAC,CACzG,CC3IA,gBAEE,oBACA,6BAEA,gBAEA,gBACA,mBACA,0BAQF,eAAsB,CAAsB,EAC1C,MACA,kBAIe,CACf,IAAQ,uBAAsB,oBAAqB,KAAa,qCAE1D,EAAU,MAAM,EAAiB,EAAM,IAAI,EAC3C,EAAuB,EAAiB,GAAuB,CAAc,EAAI,GAAG,GAAe,UAEjG,QAAS,GAAiB,MAAM,EAAI,QAAQ,oBAAoB,CACtE,UAAW,EAAoB,CAAoB,CACrD,CAAC,EAEK,EAAkB,OAAS,aAAY,YAAW,SAAQ,UAAkC,CAChG,IAAM,EAAgB,KAAa,yBAC7B,EAAc,EAAc,aAAe,EAAc,SAAS,aAChE,qBAAsB,KAAa,qCAErC,EAAU,MAAM,EAAQ,WAAW,CAAM,EAC/C,GAAI,CAAC,EAAS,MAAM,IAAI,GAAa,kCAAkC,EACvE,IAAQ,gBAAe,WAAW,GAAM,EAClC,EAAS,EAAW,aAAa,QAAQ,EAEzC,EAAa,GAAa,IAAc,GAGxC,EAAM,EACR,CACE,KAAM,oBACN,MAAO,CACL,OAAQ,CAAC,CAAE,SAAQ,MAAO,EAAW,OAAO,YAAY,CAAE,CAAC,EAC3D,aAAc,EACd,WAAY,CACd,CACF,EACA,CACE,KAAM,uBACN,MAAO,CAAE,MAAO,CAAC,CAAE,SAAQ,MAAO,EAAkB,CAAU,CAAE,CAAC,EAAG,OAAM,OAAQ,CAAO,CAC3F,EAEE,EAAU,EACd,CAAC,CAAG,EACJ,CAAE,OAAQ,CAAC,EAAG,IAAK,WAAY,EAC/B,GAAW,QACX,EACA,GAAe,SAAS,EACxB,CACF,EAKM,EAAW,MAHC,EAAa,EAAI,UAAU,2BAA6B,EAAI,UAAU,2BAGvD,CAAE,UAAS,cAAe,CAAO,CAAC,EAC7D,EAAe,KAAK,EAAS,UAAU,EAC7C,OAAO,IAAI,WAAW,EAAa,MAAM,EAAE,IAAI,CAAC,EAAG,IAAM,EAAa,WAAW,CAAC,CAAC,GAqBrF,MAAO,IAAK,EAAS,QAAS,EAAa,QAT3B,OAAS,aAAY,UAAmC,CACtE,IAAM,EAAS,MAAM,EAAU,EAAM,IAAI,EACnC,EAAiB,MAAM,EAAqB,CAAM,EAClD,EAAoB,MAAM,EAAgB,CAAE,aAAY,OAAM,OAAQ,CAAY,CAAC,GACjF,mBAAoB,MAAM,EAAe,YAAY,CAAiB,EAE9E,OAAO,GAG2C,SAlBnC,OAAS,aAAY,YAAW,UAAkC,CACjF,IAAM,EAAS,MAAM,EAAU,EAAM,IAAI,EACnC,EAAiB,MAAM,EAAqB,CAAM,EAClD,EAAoB,MAAM,EAAgB,CAAE,aAAY,OAAM,YAAW,OAAQ,CAAY,CAAC,GAC5F,mBAAoB,MAAM,EAAe,YAAY,CAAiB,EAE9E,OAAO,EAYoD,EC/F/D,gBAEE,oBACA,6BAEA,gBAEA,kBACA,iBACA,0BAQF,eAAsB,EAAsB,EAC1C,MACA,kBAIe,CACf,IAAM,EAAgB,KAAa,yBAC7B,EAAc,EAAc,aAAe,EAAc,SAAS,aAChE,gBAAe,qBAAoB,uBAAsB,oBAAqB,KACpF,qCAGI,EAAU,MAAM,EAAiB,EAAM,SAAS,EAChD,EAAuB,EAAiB,GAAuB,CAAc,EAAI,GAAG,GAAe,UAEjG,QAAS,GAAiB,MAAM,EAAI,QAAQ,oBAAoB,CACtE,UAAW,EAAoB,CAAoB,CACrD,CAAC,EAEK,EAAkB,OAAS,aAAY,YAAW,SAAQ,UAAkC,CAChG,IAAM,EAAU,MAAM,EAAQ,WAAW,CAAM,EAC/C,GAAI,CAAC,EAAS,MAAM,IAAI,GAAa,kCAAkC,EACvE,IAAQ,gBAAe,WAAW,GAAM,EAElC,EAAa,GAAa,IAAc,GACxC,EAAM,EAAc,CAAE,aAAY,OAAM,YAAW,QAAO,CAAC,EAE3D,EAAU,EACd,CAAC,CAAG,EACJ,EAAmB,EAAM,SAAS,EAClC,GAAW,QACX,EACA,GAAe,SAAS,EACxB,CACF,EAEM,EAAW,EACb,MAAM,EAAI,UAAU,2BAA2B,CAC7C,QAAS,EACT,cAAe,CACjB,CAAC,EACD,MAAM,EAAI,UAAU,0BAA0B,CAC5C,QAAS,EACT,cAAe,CACjB,CAAC,EACC,EAAe,KAAK,EAAS,UAAU,EAC7C,OAAO,IAAI,WAAW,EAAa,MAAM,EAAE,IAAI,CAAC,EAAG,IAAM,EAAa,WAAW,CAAC,CAAC,GA0BrF,MAAO,IAAK,EAAS,QAAS,EAAa,QAd3B,OAAS,aAAY,UAAmC,CACtE,IAAM,EAAS,MAAM,EAAU,EAAM,SAAS,EACxC,EAAiB,MAAM,EAAqB,CAAM,EAClD,EAAoB,MAAM,EAAgB,CAAE,aAAY,OAAM,OAAQ,CAAY,CAAC,GACjF,mBAAoB,MAAM,EAAe,YAAY,CAAiB,EAE9E,OAAO,GAQ2C,SAvBnC,OAAS,aAAY,YAAW,UAAkC,CACjF,IAAM,EAAS,MAAM,EAAU,EAAM,SAAS,EACxC,EAAiB,MAAM,EAAqB,CAAM,EAClD,EAAoB,MAAM,EAAgB,CAAE,aAAY,OAAM,YAAW,OAAQ,CAAY,CAAC,GAC5F,mBAAoB,MAAM,EAAe,YAAY,CAAiB,EAE9E,OAAO,EAiBoD,EC1F/D,gBACE,oBACA,6BAEA,eACA,mBAEA,yBAGF,gCACE,2BACA,yBACA,kCACA,yBACA,yBACA,iBACA,yBACA,gCAiBF,eAAsB,EAAiB,EACrC,MACA,QACA,kBAKoC,CACpC,IAAQ,kBAAmB,KAAa,mCAElC,EAAU,MAAM,EAAe,CAAK,EACpC,EAAa,CAAC,EAAM,QAAS,EAAM,QAAQ,EAAE,SAAS,CAA6B,EACpF,SACA,QAEC,EAAuB,EAAiB,EAAuB,CAAc,EAAI,GAAG,GAAe,OAEnG,EAAc,CAClB,UAAW,EAAoB,CAAoB,EACnD,KAAM,EAAmB,GACzB,YAAa,CACf,EAEM,GAAyB,MAAM,EAAI,QAAQ,eAAe,CAAW,GAAG,QACxE,EAAU,GAAmB,CAAK,EAElC,EAAkB,MAAO,EAAiB,EAA8B,EAAO,KAAO,CAC1F,IAAM,EAAiB,CAAC,EAExB,QAAS,EAAI,EAAG,EAAI,EAAG,cAAe,IAAK,CACzC,IAAM,EAAS,EAAG,UAAU,CAAC,EACvB,EAAU,EAAG,iBAAiB,EAAG,CAAO,EACxC,EAAQ,OAAO,EAAO,MAAM,EAElC,GAAI,IAAY,EACd,EAAQ,KAAK,CACX,aAAc,EAAY,UAC1B,YAAa,SACb,OAAQ,EACR,SAAU,GACV,YACF,CAAC,EACI,QAAI,EAAS,CAClB,IAAM,EAAgB,IAAU,EAAM,YAAc,EAAmB,CAAO,EAAI,EAElF,GAAI,EACF,EAAQ,KAAK,CAAE,QAAS,EAAe,YAAa,QAAS,OAAQ,CAAM,CAAC,GAKlF,IAAM,EAAqC,CAAC,IAAe,CACzD,OAAO,EAAI,OAAO,CAAC,IAAS,IAAS,MAAQ,OAAO,IAAS,UAAY,OAAO,KAAK,CAAI,EAAE,OAAS,CAAC,GAUvG,OAPqB,MAAM,EAAI,KAAK,oBAAoB,CACtD,KAAM,EAAmB,GACzB,SACA,aAAc,EACd,QAAS,EAAmC,CAAO,CACrD,CAAC,GAEmB,cAAc,SAAS,GAGvC,EAAW,OAAS,YAAW,eAAc,UAAS,UAAS,KAAkC,CACrG,GAAI,CAAC,EACH,MAAM,IAAI,EAAa,gCAAiC,CAAE,OAAQ,+BAAgC,CAAC,EACrG,GAAI,CAAC,EACH,MAAM,IAAI,EAAa,gCAAiC,CAAE,OAAQ,oCAAqC,CAAC,EAE1G,IAAM,EACJ,IAAU,EAAM,YACX,EAAiC,QACjC,EAAiC,mBAEhC,KAAI,OAAQ,GAAc,MAAM,EAAe,IAClD,EACH,QAAS,IAAY,MAAM,EAAQ,YAAY,GAAG,GAAgB,GAAU,MAC5E,WAAY,GACZ,OACA,YACA,OAAQ,CACV,CAAC,EAEK,EAAS,EAAU,IAAI,EAAG,QAAO,QAAO,OAAM,YAAa,CAE/D,aAAc,EAAY,UAC1B,OAAQ,EAAM,SAAS,EACvB,IAAK,GAAS,GACd,aACA,KAAM,EACN,KAAM,CACR,EAAE,EAEI,EAAQ,MAAM,EAAgB,EAAI,EAAQ,CAAI,EACpD,OAAO,EAAQ,YAAY,CAAK,GAG5B,EAAoC,MACxC,EACA,EAQA,EAAO,KACJ,CACH,IAAM,EAAkB,EACtB,EACI,EAAuB,EAAe,MAAM,EAAG,CAAC,CAAwB,EACxE,GAAe,EACrB,EAMM,EAA2B,CAAC,EAClC,QAAS,EAAI,EAAG,EAAI,EAAG,cAAe,IAAK,CACzC,IAAM,EAAS,EAAG,UAAU,CAAC,EACvB,EAAgB,EAAG,iBAAiB,EAAG,CAAO,EAC9C,EAAQ,OAAO,EAAO,MAAM,EAElC,GAAI,IAAkB,EACpB,EAAQ,KAAK,CACX,aAAc,EAAY,UAC1B,YAAa,SACb,OAAQ,EACR,SAAU,GACV,YACF,CAAC,EACI,QAAI,EAAe,CACxB,IAAM,EAAe,IAAU,EAAM,YAAc,EAAmB,CAAa,EAAI,EACvF,GAAI,EACF,EAAQ,KAAK,CAAE,QAAS,EAAc,YAAa,QAAS,OAAQ,CAAM,CAAC,GAKjF,IAAM,EAAgB,EAAO,IAAI,EAAG,OAAM,MAAO,EAAY,QAAO,QAAO,kBAAiB,cAAe,CACzG,IAAM,EAAa,EAAW,EAAI,EAElC,MAAO,CACL,aAFoB,CAAC,GAAG,EAAiB,EAAY,CAAe,EAGpE,OAAQ,EAAM,SAAS,EACvB,IAAK,GAAS,GACd,aACA,KAAM,EACN,KAAM,CACR,EACD,EASD,OAPqB,MAAM,EAAI,KAAK,oBAAoB,CACtD,KAAM,EAAmB,GACzB,OAAQ,EACR,aAAc,EACd,QAAS,EAAQ,OAAO,CAAC,IAAS,IAAS,MAAQ,OAAO,IAAS,UAAY,OAAO,KAAK,CAAI,EAAE,OAAS,CAAC,CAC7G,CAAC,GAEmB,cAAc,SAAS,GAAK,IAG5C,EAAgC,OACpC,QACA,YACA,aACA,OACA,UACA,kBAgBI,CACJ,IAAM,EAAY,IAAY,MAAM,EAAQ,YAAY,GAAG,GAAgB,GAAU,MAE/E,EACJ,IAAU,EAAM,YACX,EAAiC,QACjC,EAAiC,mBAEhC,KAAI,OAAQ,GAAmB,MAAM,EAAe,CAC1D,WAAY,EACZ,QAAS,EACT,WAAY,GACZ,OACA,YACA,OAAQ,CACV,CAAC,EAEK,EAAuB,EAAe,IAC1C,CAAC,IAA0E,CACzE,IAAM,EAAW,EAAM,KAAK,CAAC,IAAM,EAAE,OAAS,EAAM,MAAQ,EAAE,QAAU,EAAM,KAAK,EACnF,MAAO,IAAK,EAAO,gBAAiB,GAAU,iBAAmB,EAAG,SAAU,GAAU,UAAY,EAAM,EAE9G,EAEM,EAAc,MAAM,EAAkC,EAAI,EAAsB,CAAI,EAC1F,OAAO,EAAQ,YAAY,CAAW,GAGxC,eAAe,CAAwB,EAAG,gBAA4C,CAAC,EAAG,CACxF,GAAI,CACF,IAAM,EAAsB,GAAmB,CAAE,eAAc,QAAO,gBAAe,CAAC,EAChF,EAA4B,EAAuB,CAAmB,EACtE,EAAO,CACX,UAAW,EAAoB,CAAyB,EACxD,KAAM,EAAmB,GACzB,YAAa,EACb,YAAa,GACb,OAAQ,EAAM,YAAY,CAC5B,EAEM,EAAiB,MAAM,EAAI,OAAO,KAAK,aAAa,CAAI,EAE9D,MAAO,CACL,aAAc,GAA4B,CAAmB,EAC7D,KAAM,EACN,KAAM,EAAe,IACvB,EACA,MAAO,EAAO,CACd,MAAM,IAAI,EAAa,0CAA2C,CAChE,QACA,MAAO,aAAiB,MAAQ,EAAM,QAAU,eAClD,CAAC,GAIL,SAAS,CAAoB,CAAC,EAAoC,CAAC,EAAG,CACpE,OAAO,EAAyB,CAAM,EAGxC,eAAe,CAAoB,EACjC,eACA,QACA,SAAS,IAKR,CACD,GAAI,CACF,EAAsB,QAAS,CAAK,EACpC,IAAM,EAAW,GAAmB,CAAE,eAAc,QAAO,SAAQ,iBAAgB,OAAM,CAAC,EACpF,EAAiB,EAAuB,CAAQ,EAEhD,EAAS,MAAM,EAAI,QAAQ,eAAe,CAC9C,UAAW,EAAoB,CAAc,EAC7C,KAAM,EAAmB,GACzB,YAAa,CACf,CAAC,EAEG,EAAe,EAAO,QAC1B,GAAI,IAAU,EAAM,YAClB,EAAe,EAAmB,EAAO,OAAO,EAGlD,MAAO,CACL,aAAc,GAA4B,CAAQ,EAClD,QAAS,EACT,SACA,QACA,KAAM,EACN,OAAQ,EACV,EACA,KAAM,CACN,QAIJ,eAAe,CAAe,EAC5B,eACA,QACA,aAAa,EACb,SAAS,IAMR,CAQD,OAPA,EAAsB,QAAS,CAAK,EACpC,EAAsB,aAAc,CAAU,GAE5B,MAAM,QAAQ,IAC9B,MAAM,KAAK,CAAE,OAAQ,CAAM,EAAG,CAAC,EAAG,IAAM,EAAqB,CAAE,eAAc,SAAQ,MAAO,EAAa,CAAE,CAAC,CAAC,CAC/G,GAEiB,OAAO,CAAC,IAAY,CAAC,CAAC,CAAO,EAGhD,IAAM,EAAY,GAAsB,CACtC,QACA,cAAe,EACf,WAAY,EAAQ,WACpB,SAAU,CAAC,IAAoB,GAAW,CAAK,EAAE,SAAS,CAAE,UAAS,WAAY,EAAK,CAAC,CACzF,CAAC,EAED,MAAO,IACF,KACA,EACH,QAAS,EACT,uBACA,kBACA,uBACA,2BACA,kBACA,oCACA,WACA,+BACF,ELtVK,IAAM,GAAgB,GAAa,CACxC,QAAS,EAAG,WAAU,kBAAiB,gBACrC,cAA6B,CAAC,EAAiB,EAAwD,CACrG,IAAM,EAAiB,GAAsB,CAAE,SAAQ,kBAAiB,YAAW,CAAC,EAC9E,EAAc,EAAS,IAAI,cAAc,EAAE,QACjD,GAAI,CAAC,EAAa,MAAU,MAAM,0BAA0B,EAE5D,IAAM,EAAgB,EAAS,IAAI,SAAS,EAAE,SAAW,OAEzD,MAAM,GAAe,EAGrB,IAAM,EAAgB,CAAE,OAAQ,EAAe,aAAY,EACrD,EAAa,MAAM,GAAW,OAAO,CAAa,EAGxD,GAAI,EAAc,QAAU,EAAc,SAAW,EACnD,EAAS,UAAU,UAAW,EAAc,MAAM,EAepD,OAZA,MAAM,QAAQ,IACZ,EAAe,IAAI,MAAO,IAAU,CAClC,IAAM,EAAgB,MAAM,GAAiB,CAC3C,QACA,eAAgB,IAAoB,IAAU,GAAsB,GACpE,IAAK,CACP,CAAC,EACK,EAAW,MAAM,EAAc,WAAW,GAAM,GAEtD,EAAS,IAAK,EAAe,UAAS,QAAO,WAAY,GAAa,OAAQ,CAAC,EAChF,CACH,EACO,IAEX,qBAAsB,EACnB,EAAM,UAAW,IACjB,EAAM,WAAY,IAClB,EAAM,MAAO,IACb,EAAM,WAAY,IAClB,EAAM,mBAAoB,IAC1B,EAAM,UAAW,IACjB,EAAM,QAAS,IACf,EAAM,OAAQ,IACd,EAAM,UAAW,IACjB,EAAM,SAAU,IAChB,EAAM,QAAS,IACf,EAAM,QAAS,EAElB,EACA,KAAM,iBACN,gBAAiB,CACf,EAAM,SACN,EAAM,UACN,EAAM,KACN,EAAM,UACN,EAAM,kBACN,EAAM,QACN,EAAM,YACN,EAAM,OACN,EAAM,SACN,EAAM,KACN,EAAM,SACN,EAAM,OACN,EAAM,SACN,EAAM,MACN,EAAM,OACN,EAAM,SACN,EAAM,QACN,EAAM,UACN,EAAM,KACN,EAAM,MACR,EACA,WAAY,GAAa,OAC3B,CAAC,EAEY,GAA2B,GAAyB,EAAa,EAE9E,eAAe,EAAgB,EAC7B,MACA,QACA,kBAKC,CACD,IAAQ,cAAa,sBAAuB,KAAa,kCAEzD,OAAQ,QACD,EAAM,uBACN,EAAM,cACN,EAAM,eACN,EAAM,cACN,EAAM,aACN,EAAM,eACN,EAAM,UACN,EAAM,cACN,EAAM,YACN,EAAM,WACN,EAAM,OAAQ,CACjB,IAAM,EAAW,MAAM,EAAY,CAAK,EAClC,EAAS,IAAI,EAAc,CAAE,QAAO,iBAAgB,WAAU,KAAI,CAAC,EAGzE,OAFgB,MAAM,EAAmB,EAAO,CAAE,WAAU,QAAO,CAAC,CAGtE,MACK,EAAM,OACT,OAAO,EAAoB,CAAE,iBAAgB,KAAI,CAAC,OAE/C,EAAM,UACT,OAAO,GAAuB,CAAE,iBAAgB,KAAI,CAAC,OAElD,EAAM,KACT,OAAO,EAAuB,CAAE,iBAAgB,KAAI,CAAC,OAElD,EAAM,aACN,EAAM,iBACN,EAAM,UACN,EAAM,cACN,EAAM,SACT,OAAO,GAAkB,CAAE,QAAO,iBAAgB,KAAI,CAAC,OAEpD,EAAM,OAAQ,CACjB,IAAQ,uBAAwB,KAAa,gCAC7C,OAAO,EAAoB,CAAE,iBAAgB,KAAI,CAAC,CACpD,SAEE,MAAM,IAAI,GAAa,qCAAsC,CAAE,OAAM,CAAC,GAM5E,eAAe,EAAc,CAAC,EAAW,EAAG,CAC1C,GAAI,GAAY,EACd,MAAM,2FAA2F,EAInG,GAAI,CAFgB,MAAM,GAAyB,EAGjD,OAAO,SAAS,OAAO,kBAAkB,EACzC,MAAM,IAAI,QAAQ,CAAC,IAAY,WAAW,EAAS,KAAK,CAAC,EACzD,MAAM,GAAe,EAAW,CAAC,EAIrC,eAAe,EAAwB,CAAC,EAAO,0CAA2C,CACxF,GAAI,CAEF,OADiB,MAAM,MAAM,CAAI,GACjB,SAAW,IAC3B,KAAM,CACN,MAAO",
|
|
13
|
+
"debugId": "D12D3B84F8B33D2564756E2164756E21",
|
|
14
14
|
"names": []
|
|
15
15
|
}
|