@swapkit/wallet-hardware 6.2.0 → 6.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/THIRD_PARTY_LICENSES.md +4 -4
- package/dist/{chunk-rydhx4se.js → chunk-0k1b2ddn.js} +3 -3
- package/dist/{chunk-rydhx4se.js.map → chunk-0k1b2ddn.js.map} +2 -2
- package/dist/{chunk-j3n6fbqh.js → chunk-2tzsz8f3.js} +4 -4
- package/dist/{chunk-j3n6fbqh.js.map → chunk-2tzsz8f3.js.map} +1 -1
- package/dist/{chunk-2jddegc1.js → chunk-410fpx61.js} +4 -4
- package/dist/{chunk-2jddegc1.js.map → chunk-410fpx61.js.map} +1 -1
- package/dist/chunk-8mkdjmw2.js +4 -0
- package/dist/chunk-8mkdjmw2.js.map +10 -0
- package/dist/{chunk-7kwtpk70.js → chunk-96p7njae.js} +3 -3
- package/dist/{chunk-7kwtpk70.js.map → chunk-96p7njae.js.map} +2 -2
- package/dist/{chunk-g6rrzxcx.js → chunk-97nsp4z6.js} +3 -3
- package/dist/{chunk-g6rrzxcx.js.map → chunk-97nsp4z6.js.map} +1 -1
- package/dist/{chunk-kaw35ae2.js → chunk-9a9gn4pb.js} +3 -3
- package/dist/{chunk-a47dwwv6.js.map → chunk-9a9gn4pb.js.map} +1 -1
- package/dist/chunk-a39rm9nv.js +4 -0
- package/dist/{chunk-42xrtarj.js.map → chunk-a39rm9nv.js.map} +5 -5
- package/dist/chunk-c8mwf9cn.js +4 -0
- package/dist/{chunk-kaw35ae2.js.map → chunk-c8mwf9cn.js.map} +1 -1
- package/dist/{chunk-b7htg03t.js → chunk-dhhmywmb.js} +4 -4
- package/dist/{chunk-b7htg03t.js.map → chunk-dhhmywmb.js.map} +1 -1
- package/dist/{chunk-x28a37pz.js → chunk-dsa641rq.js} +3 -3
- package/dist/{chunk-x28a37pz.js.map → chunk-dsa641rq.js.map} +2 -2
- package/dist/{chunk-7rbvcts9.js → chunk-grj9nvte.js} +3 -3
- package/dist/{chunk-7rbvcts9.js.map → chunk-grj9nvte.js.map} +1 -1
- package/dist/{chunk-tecse0bj.js → chunk-napm4102.js} +3 -3
- package/dist/{chunk-tecse0bj.js.map → chunk-napm4102.js.map} +1 -1
- package/dist/{chunk-a47dwwv6.js → chunk-nb08g045.js} +3 -3
- package/dist/{chunk-sp3dq5hr.js.map → chunk-nb08g045.js.map} +1 -1
- package/dist/chunk-npe2r2ge.js +4 -0
- package/dist/{chunk-tm5gk51g.js.map → chunk-npe2r2ge.js.map} +1 -1
- package/dist/chunk-p9mwkgye.js +4 -0
- package/dist/{chunk-s2akss77.js.map → chunk-p9mwkgye.js.map} +14 -12
- package/dist/{chunk-b093ajcq.js → chunk-qjp8j8e5.js} +3 -3
- package/dist/{chunk-b093ajcq.js.map → chunk-qjp8j8e5.js.map} +1 -1
- package/dist/{chunk-71kfnwdp.js → chunk-r1fk1sx9.js} +3 -3
- package/dist/{chunk-71kfnwdp.js.map → chunk-r1fk1sx9.js.map} +1 -1
- package/dist/{chunk-5xg0xc0g.js → chunk-ta7bqmy3.js} +3 -3
- package/dist/{chunk-5xg0xc0g.js.map → chunk-ta7bqmy3.js.map} +1 -1
- package/dist/{chunk-545s1tsc.js → chunk-tgvgr630.js} +3 -3
- package/dist/{chunk-545s1tsc.js.map → chunk-tgvgr630.js.map} +2 -2
- package/dist/{chunk-035dayv6.js → chunk-v8x9ptxs.js} +3 -3
- package/dist/{chunk-035dayv6.js.map → chunk-v8x9ptxs.js.map} +1 -1
- package/dist/{chunk-mzan0m09.js → chunk-wm89desc.js} +20 -20
- package/dist/{chunk-mzan0m09.js.map → chunk-wm89desc.js.map} +12 -10
- package/dist/{chunk-a6vcbcyd.js → chunk-wtyhjt5e.js} +3 -3
- package/dist/{chunk-a6vcbcyd.js.map → chunk-wtyhjt5e.js.map} +1 -1
- package/dist/{chunk-s5a5v0m1.js → chunk-xskdbz15.js} +3 -3
- package/dist/{chunk-s5a5v0m1.js.map → chunk-xskdbz15.js.map} +2 -2
- package/dist/{chunk-sbebfr50.js → chunk-ytjqb1sd.js} +3 -3
- package/dist/{chunk-sbebfr50.js.map → chunk-ytjqb1sd.js.map} +1 -1
- package/dist/{chunk-ys51wj1c.js → chunk-zbesf7sy.js} +3 -3
- package/dist/{chunk-ys51wj1c.js.map → chunk-zbesf7sy.js.map} +1 -1
- package/dist/keepkey/index.js +2 -2
- package/dist/keepkey/index.js.map +1 -1
- package/dist/ledger/index.cjs +28 -28
- package/dist/ledger/index.cjs.map +28 -24
- package/dist/ledger/index.js +2 -2
- package/dist/ledger/index.js.map +4 -4
- package/dist/trezor/index.cjs +2 -2
- package/dist/trezor/index.cjs.map +5 -4
- package/dist/trezor/index.js +2 -2
- package/dist/trezor/index.js.map +3 -3
- package/dist/types/ledger/clients/zcash.d.ts.map +1 -1
- package/dist/types/trezor/hypercoreSigner.d.ts +22 -0
- package/dist/types/trezor/hypercoreSigner.d.ts.map +1 -0
- package/dist/types/trezor/index.d.ts +2 -2
- package/dist/types/trezor/index.d.ts.map +1 -1
- package/package.json +12 -12
- package/src/ledger/clients/zcash.ts +16 -6
- package/src/ledger/index.ts +2 -2
- package/src/trezor/hypercoreSigner.ts +96 -0
- package/src/trezor/index.ts +72 -16
- package/dist/chunk-42xrtarj.js +0 -4
- package/dist/chunk-s2akss77.js +0 -4
- package/dist/chunk-sp3dq5hr.js +0 -4
- package/dist/chunk-tm5gk51g.js +0 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ce as N}from"./chunk-9a9gn4pb.js";import{Chain as y,derivationPathToString as g,SwapKitError as I}from"@swapkit/helpers";import{tronAddressToHex as K}from"@swapkit/toolboxes/tron";var P=/^41[0-9a-f]{40}$/i,R=new Set(["contract","data","expiration","fee_limit","ref_block_bytes","ref_block_hash","timestamp"]),V=new Set(["parameter","type"]),b={TransferContract:new Set(["amount","owner_address","to_address"]),TriggerSmartContract:new Set(["contract_address","data","owner_address"])},x=[void 0,null,0,"",!1];function Y(q){return new I({errorKey:"wallet_trezor_method_not_supported",info:{chain:y.Tron,reason:q}})}function X(q,j,J){let G=Object.keys(q).filter((M)=>!j.has(M)&&!x.includes(q[M]));if(G.length>0)throw Y(`Trezor cannot sign Tron ${J} with ${G.join(", ")}`)}function U(q,j){let J=q[j];if(typeof J!=="string"||!J)throw Y(`Missing ${j} in Tron contract`);return J}function D(q){let{amount:j}=q;if(!(typeof j==="number"&&Number.isSafeInteger(j)&&j>0||typeof j==="string"&&/^[1-9]\d*$/.test(j)))throw Y("Invalid amount in Tron contract");return String(j)}function k(q){let[j,...J]=q.raw_data.contract;if(!j||J.length>0)throw Y("Trezor signs Tron transactions with exactly one contract");let G=j.parameter.value,M=b[j.type];if(!M)throw Y(`Unsupported Tron contract type: ${j.type}`);X(q.raw_data,R,"transactions"),X(j,V,"contracts"),X(G,M,j.type);let Q=(B)=>{let Z=U(G,B);if(q.visible!==!1)return K(Z);if(P.test(Z))return Z.toLowerCase();throw Y(`Invalid hex ${B} in Tron contract`)},$=Q("owner_address");if(j.type==="TransferContract")return{parameter:{value:{amount:D(G),owner_address:$,to_address:Q("to_address")}},type:"TransferContract"};return{parameter:{value:{contract_address:Q("contract_address"),data:U(G,"data"),owner_address:$}},type:"TriggerSmartContract"}}function m({address:q,derivationPath:j}){let J=g(j),G=q??"";return{getAddress:async()=>{if(G)return G;let Q=await(await import("@trezor/connect-web")).default.tronGetAddress({path:J,showOnTrezor:!0});if(!Q.success)throw new I({errorKey:"wallet_trezor_failed_to_get_address",info:{chain:y.Tron,derivationPath:j,error:Q.payload.error}});return G=Q.payload.address,G},signTransaction:async(M)=>{let Q=k(M),$=(await import("@trezor/connect-web")).default,{data:B,expiration:Z,fee_limit:z,ref_block_bytes:H,ref_block_hash:L,timestamp:O}=M.raw_data,W=await $.tronSignTransaction({contract:[Q],data:B,expiration:Z,fee_limit:z,path:J,ref_block_bytes:H,ref_block_hash:L,timestamp:O});if(!W.success)throw new I({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:y.Tron,error:W.payload.error}});return{...M,signature:[W.payload.signature.replace(/^0x/,"")]}}}}export{k as toTrezorTronContract,m as getTronSigner};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
4
|
-
//# sourceMappingURL=chunk-
|
|
3
|
+
//# debugId=B4DD8FE4F92C40B564756E2164756E21
|
|
4
|
+
//# sourceMappingURL=chunk-qjp8j8e5.js.map
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"import { Chain, type DerivationPathArray, derivationPathToString, SwapKitError } from \"@swapkit/helpers\";\nimport {\n type TronSignedTransaction,\n type TronSigner,\n type TronTransaction,\n tronAddressToHex,\n} from \"@swapkit/toolboxes/tron\";\n\ntype TronFields = Record<string, unknown>;\n\nconst TRON_HEX_ADDRESS = /^41[0-9a-f]{40}$/i;\n// Fields Trezor rebuilds itself; anything else would change the bytes it signs\nconst RAW_DATA_FIELDS = new Set([\n \"contract\",\n \"data\",\n \"expiration\",\n \"fee_limit\",\n \"ref_block_bytes\",\n \"ref_block_hash\",\n \"timestamp\",\n]);\nconst CONTRACT_FIELDS = new Set([\"parameter\", \"type\"]);\nconst CONTRACT_VALUE_FIELDS: Record<string, Set<string>> = {\n TransferContract: new Set([\"amount\", \"owner_address\", \"to_address\"]),\n TriggerSmartContract: new Set([\"contract_address\", \"data\", \"owner_address\"]),\n};\nconst PROTOBUF_DEFAULTS: unknown[] = [undefined, null, 0, \"\", false];\n\nfunction notSupported(reason: string) {\n return new SwapKitError({ errorKey: \"wallet_trezor_method_not_supported\", info: { chain: Chain.Tron, reason } });\n}\n\nfunction assertKnownFields(fields: TronFields, allowed: Set<string>, scope: string) {\n const unknown = Object.keys(fields).filter(\n (field) => !allowed.has(field) && !PROTOBUF_DEFAULTS.includes(fields[field]),\n );\n if (unknown.length > 0) throw notSupported(`Trezor cannot sign Tron ${scope} with ${unknown.join(\", \")}`);\n}\n\nfunction getStringField(value: TronFields, field: string) {\n const fieldValue = value[field];\n if (typeof fieldValue !== \"string\" || !fieldValue) throw notSupported(`Missing ${field} in Tron contract`);\n return fieldValue;\n}\n\nfunction getAmount(value: TronFields) {\n const { amount } = value;\n const isValid =\n (typeof amount === \"number\" && Number.isSafeInteger(amount) && amount > 0) ||\n (typeof amount === \"string\" && /^[1-9]\\d*$/.test(amount));\n\n if (!isValid) throw notSupported(\"Invalid amount in Tron contract\");\n return String(amount);\n}\n\nexport function toTrezorTronContract(transaction: TronTransaction) {\n const [contract, ...rest] = transaction.raw_data.contract;\n if (!contract || rest.length > 0) throw notSupported(\"Trezor signs Tron transactions with exactly one contract\");\n\n const value = contract.parameter.value;\n const allowedValueFields = CONTRACT_VALUE_FIELDS[contract.type];\n if (!allowedValueFields) throw notSupported(`Unsupported Tron contract type: ${contract.type}`);\n\n assertKnownFields(transaction.raw_data as unknown as TronFields, RAW_DATA_FIELDS, \"transactions\");\n assertKnownFields(contract as unknown as TronFields, CONTRACT_FIELDS, \"contracts\");\n assertKnownFields(value, allowedValueFields, contract.type);\n\n // `visible: false` means the node already returned the addresses in hex\n const toHexAddress = (field: string) => {\n const address = getStringField(value, field);\n if (transaction.visible !== false) return tronAddressToHex(address);\n if (TRON_HEX_ADDRESS.test(address)) return address.toLowerCase();\n\n throw notSupported(`Invalid hex ${field} in Tron contract`);\n };\n\n const owner_address = toHexAddress(\"owner_address\");\n\n if (contract.type === \"TransferContract\") {\n return {\n parameter: { value: { amount: getAmount(value), owner_address, to_address: toHexAddress(\"to_address\") } },\n type: \"TransferContract\" as const,\n };\n }\n\n return {\n parameter: {\n value: { contract_address: toHexAddress(\"contract_address\"), data: getStringField(value, \"data\"), owner_address },\n },\n type: \"TriggerSmartContract\" as const,\n };\n}\n\nexport function getTronSigner({\n address: knownAddress,\n derivationPath,\n}: {\n address?: string;\n derivationPath: DerivationPathArray;\n}): TronSigner {\n const path = derivationPathToString(derivationPath);\n let address = knownAddress ?? \"\";\n\n return {\n getAddress: async () => {\n if (address) return address;\n\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n const result = await TrezorConnect.tronGetAddress({ path, showOnTrezor: true });\n\n if (!result.success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_get_address\",\n info: { chain: Chain.Tron, derivationPath, error: result.payload.error },\n });\n }\n\n address = result.payload.address;\n return address;\n },\n\n signTransaction: async (transaction: TronTransaction): Promise<TronSignedTransaction> => {\n const contract = toTrezorTronContract(transaction);\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n const { data, expiration, fee_limit, ref_block_bytes, ref_block_hash, timestamp } = transaction.raw_data;\n\n const result = await TrezorConnect.tronSignTransaction({\n contract: [contract],\n data,\n expiration,\n fee_limit,\n path,\n ref_block_bytes,\n ref_block_hash,\n timestamp,\n });\n\n if (!result.success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain: Chain.Tron, error: result.payload.error },\n });\n }\n\n return { ...transaction, signature: [result.payload.signature.replace(/^0x/, \"\")] };\n },\n };\n}\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": "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",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "B4DD8FE4F92C40B564756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ce as X}from"./chunk-9a9gn4pb.js";import{ed25519 as f}from"@noble/curves/ed25519.js";import{hex as Y}from"@scure/base";import{PublicKey as W}from"@solana/web3.js";import{Chain as F,derivationPathToString as j,SwapKitError as G}from"@swapkit/helpers";function x(q){return new G({errorKey:"wallet_trezor_method_not_supported",info:{chain:F.Solana,reason:q}})}function O(q){if("version"in q){let{header:B,staticAccountKeys:D}=q.message;return{message:q.message.serialize(),signerKeys:D.slice(0,B.numRequiredSignatures)}}return{message:q.serializeMessage(),signerKeys:q.signatures.map(({publicKey:B})=>B)}}function _(q,B){let{message:D,signerKeys:H}=O(q),J=H.find((L)=>L.toBase58()===B);if(!J)throw x("Trezor account is not a required signer of this transaction");return{message:D,signerKey:J}}function A(q,{message:B,signature:D,signerKey:H}){if(D.length!==64)throw new G({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:F.Solana,error:`Invalid signature length: ${D.length}`}});if(!f.verify(D,B,H.toBytes()))throw new G({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:F.Solana,error:"Signature does not match the Trezor account"}});return q.addSignature(H,Buffer.from(D)),q}function E({address:q,derivationPath:B}){let[D,H]=B;if(D!==44||H!==501||B.length>4)throw new G({errorKey:"wallet_trezor_derivation_path_not_supported",info:{chain:F.Solana,derivationPath:B}});let J=j(B,{allHardened:!0}),L=q?new W(q):null,M=null;async function Q(N){if(M)return M.toBase58();let I=await(await import("@trezor/connect-web")).default.solanaGetAddress({path:J,showOnTrezor:N});if(!I.success)throw new G({errorKey:"wallet_trezor_failed_to_get_address",info:{chain:F.Solana,derivationPath:B,error:I.payload.error}});let U=new W(I.payload.address);if(L&&!U.equals(L))throw new G({errorKey:"wallet_trezor_failed_to_get_address",info:{chain:F.Solana,derivationPath:B,error:"Trezor account does not match the restored address"}});return M=U,I.payload.address}async function Z(N){let{message:R,signerKey:I}=_(N,await Q(!1)),V=await(await import("@trezor/connect-web")).default.solanaSignTransaction({path:J,serializedTx:Y.encode(R)});if(!V.success)throw new G({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:F.Solana,error:V.payload.error}});let $=Y.decode(V.payload.signature.replace(/^0x/,""));return A(N,{message:R,signature:$,signerKey:I})}return{connect:async()=>({publicKey:new W(await Q(!0))}),disconnect:()=>Promise.resolve(),getAddress:()=>Q(!0),get publicKey(){return M??L},signTransaction:Z}}export{E as getSolanaSigner};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
4
|
-
//# sourceMappingURL=chunk-
|
|
3
|
+
//# debugId=219B21DCDA1454DB64756E2164756E21
|
|
4
|
+
//# sourceMappingURL=chunk-r1fk1sx9.js.map
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"import { ed25519 } from \"@noble/curves/ed25519.js\";\nimport { hex } from \"@scure/base\";\nimport { PublicKey, type Transaction, type VersionedTransaction } from \"@solana/web3.js\";\nimport { Chain, type DerivationPathArray, derivationPathToString, SwapKitError } from \"@swapkit/helpers\";\n\ntype SolanaTransaction = Transaction | VersionedTransaction;\n\nfunction notSupported(reason: string) {\n return new SwapKitError({ errorKey: \"wallet_trezor_method_not_supported\", info: { chain: Chain.Solana, reason } });\n}\n\nfunction getSigners(transaction: SolanaTransaction) {\n if (\"version\" in transaction) {\n const { header, staticAccountKeys } = transaction.message;\n return {\n message: transaction.message.serialize(),\n signerKeys: staticAccountKeys.slice(0, header.numRequiredSignatures),\n };\n }\n\n return {\n message: transaction.serializeMessage(),\n signerKeys: transaction.signatures.map(({ publicKey }) => publicKey),\n };\n}\n\nfunction getSolanaSigningPayload(transaction: SolanaTransaction, address: string) {\n const { message, signerKeys } = getSigners(transaction);\n const signerKey = signerKeys.find((key) => key.toBase58() === address);\n\n if (!signerKey) throw notSupported(\"Trezor account is not a required signer of this transaction\");\n\n return { message, signerKey };\n}\n\nfunction addSolanaSignature<T extends SolanaTransaction>(\n transaction: T,\n { message, signature, signerKey }: { message: Uint8Array; signature: Uint8Array; signerKey: PublicKey },\n) {\n if (signature.length !== 64) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain: Chain.Solana, error: `Invalid signature length: ${signature.length}` },\n });\n }\n\n if (!ed25519.verify(signature, message, signerKey.toBytes())) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain: Chain.Solana, error: \"Signature does not match the Trezor account\" },\n });\n }\n\n transaction.addSignature(signerKey, Buffer.from(signature));\n return transaction;\n}\n\nexport function getSolanaSigner({\n address,\n derivationPath,\n}: {\n address?: string;\n derivationPath: DerivationPathArray;\n}) {\n // Trezor firmware only accepts m/44'/501' plus up to two more levels.\n const [purpose, coinType] = derivationPath;\n if (purpose !== 44 || coinType !== 501 || derivationPath.length > 4) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_derivation_path_not_supported\",\n info: { chain: Chain.Solana, derivationPath },\n });\n }\n\n const path = derivationPathToString(derivationPath, { allHardened: true });\n const knownKey = address ? new PublicKey(address) : null;\n let publicKey: PublicKey | null = null;\n\n async function loadAddress(showOnTrezor: boolean) {\n if (publicKey) return publicKey.toBase58();\n\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n const result = await TrezorConnect.solanaGetAddress({ path, showOnTrezor });\n\n if (!result.success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_get_address\",\n info: { chain: Chain.Solana, derivationPath, error: result.payload.error },\n });\n }\n\n const deviceKey = new PublicKey(result.payload.address);\n if (knownKey && !deviceKey.equals(knownKey)) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_get_address\",\n info: { chain: Chain.Solana, derivationPath, error: \"Trezor account does not match the restored address\" },\n });\n }\n\n publicKey = deviceKey;\n return result.payload.address;\n }\n\n async function signTransaction<T extends SolanaTransaction>(transaction: T) {\n const { message, signerKey } = getSolanaSigningPayload(transaction, await loadAddress(false));\n const TrezorConnect = (await import(\"@trezor/connect-web\")).default;\n\n const result = await TrezorConnect.solanaSignTransaction({ path, serializedTx: hex.encode(message) });\n\n if (!result.success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain: Chain.Solana, error: result.payload.error },\n });\n }\n\n const signature = hex.decode(result.payload.signature.replace(/^0x/, \"\"));\n return addSolanaSignature(transaction, { message, signature, signerKey });\n }\n\n return {\n connect: async () => ({ publicKey: new PublicKey(await loadAddress(true)) }),\n disconnect: () => Promise.resolve(),\n getAddress: () => loadAddress(true),\n get publicKey() {\n return publicKey ?? knownKey;\n },\n signTransaction,\n };\n}\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": "yCAAA,kBAAS,iCACT,cAAS,oBACT,oBAAS,wBACT,gBAAS,4BAAiC,kBAAwB,yBAIlE,SAAS,CAAY,CAAC,EAAgB,CACpC,OAAO,IAAI,EAAa,CAAE,SAAU,qCAAsC,KAAM,CAAE,MAAO,EAAM,OAAQ,QAAO,CAAE,CAAC,EAGnH,SAAS,CAAU,CAAC,EAAgC,CAClD,GAAI,YAAa,EAAa,CAC5B,IAAQ,SAAQ,qBAAsB,EAAY,QAClD,MAAO,CACL,QAAS,EAAY,QAAQ,UAAU,EACvC,WAAY,EAAkB,MAAM,EAAG,EAAO,qBAAqB,CACrE,EAGF,MAAO,CACL,QAAS,EAAY,iBAAiB,EACtC,WAAY,EAAY,WAAW,IAAI,EAAG,eAAgB,CAAS,CACrE,EAGF,SAAS,CAAuB,CAAC,EAAgC,EAAiB,CAChF,IAAQ,UAAS,cAAe,EAAW,CAAW,EAChD,EAAY,EAAW,KAAK,CAAC,IAAQ,EAAI,SAAS,IAAM,CAAO,EAErE,GAAI,CAAC,EAAW,MAAM,EAAa,6DAA6D,EAEhG,MAAO,CAAE,UAAS,WAAU,EAG9B,SAAS,CAA+C,CACtD,GACE,UAAS,YAAW,aACtB,CACA,GAAI,EAAU,SAAW,GACvB,MAAM,IAAI,EAAa,CACrB,SAAU,2CACV,KAAM,CAAE,MAAO,EAAM,OAAQ,MAAO,6BAA6B,EAAU,QAAS,CACtF,CAAC,EAGH,GAAI,CAAC,EAAQ,OAAO,EAAW,EAAS,EAAU,QAAQ,CAAC,EACzD,MAAM,IAAI,EAAa,CACrB,SAAU,2CACV,KAAM,CAAE,MAAO,EAAM,OAAQ,MAAO,6CAA8C,CACpF,CAAC,EAIH,OADA,EAAY,aAAa,EAAW,OAAO,KAAK,CAAS,CAAC,EACnD,EAGF,SAAS,CAAe,EAC7B,UACA,kBAIC,CAED,IAAO,EAAS,GAAY,EAC5B,GAAI,IAAY,IAAM,IAAa,KAAO,EAAe,OAAS,EAChE,MAAM,IAAI,EAAa,CACrB,SAAU,8CACV,KAAM,CAAE,MAAO,EAAM,OAAQ,gBAAe,CAC9C,CAAC,EAGH,IAAM,EAAO,EAAuB,EAAgB,CAAE,YAAa,EAAK,CAAC,EACnE,EAAW,EAAU,IAAI,EAAU,CAAO,EAAI,KAChD,EAA8B,KAElC,eAAe,CAAW,CAAC,EAAuB,CAChD,GAAI,EAAW,OAAO,EAAU,SAAS,EAGzC,IAAM,EAAS,MADQ,KAAa,gCAAwB,QACzB,iBAAiB,CAAE,OAAM,cAAa,CAAC,EAE1E,GAAI,CAAC,EAAO,QACV,MAAM,IAAI,EAAa,CACrB,SAAU,sCACV,KAAM,CAAE,MAAO,EAAM,OAAQ,iBAAgB,MAAO,EAAO,QAAQ,KAAM,CAC3E,CAAC,EAGH,IAAM,EAAY,IAAI,EAAU,EAAO,QAAQ,OAAO,EACtD,GAAI,GAAY,CAAC,EAAU,OAAO,CAAQ,EACxC,MAAM,IAAI,EAAa,CACrB,SAAU,sCACV,KAAM,CAAE,MAAO,EAAM,OAAQ,iBAAgB,MAAO,oDAAqD,CAC3G,CAAC,EAIH,OADA,EAAY,EACL,EAAO,QAAQ,QAGxB,eAAe,CAA4C,CAAC,EAAgB,CAC1E,IAAQ,UAAS,aAAc,EAAwB,EAAa,MAAM,EAAY,EAAK,CAAC,EAGtF,EAAS,MAFQ,KAAa,gCAAwB,QAEzB,sBAAsB,CAAE,OAAM,aAAc,EAAI,OAAO,CAAO,CAAE,CAAC,EAEpG,GAAI,CAAC,EAAO,QACV,MAAM,IAAI,EAAa,CACrB,SAAU,2CACV,KAAM,CAAE,MAAO,EAAM,OAAQ,MAAO,EAAO,QAAQ,KAAM,CAC3D,CAAC,EAGH,IAAM,EAAY,EAAI,OAAO,EAAO,QAAQ,UAAU,QAAQ,MAAO,EAAE,CAAC,EACxE,OAAO,EAAmB,EAAa,CAAE,UAAS,YAAW,WAAU,CAAC,EAG1E,MAAO,CACL,QAAS,UAAa,CAAE,UAAW,IAAI,EAAU,MAAM,EAAY,EAAI,CAAC,CAAE,GAC1E,WAAY,IAAM,QAAQ,QAAQ,EAClC,WAAY,IAAM,EAAY,EAAI,KAC9B,UAAS,EAAG,CACd,OAAO,GAAa,GAEtB,iBACF",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "219B21DCDA1454DB64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Na as z}from"./chunk-napm4102.js";import"./chunk-9a9gn4pb.js";import{Chain as W,DerivationPath as X,derivationPathToString as Y}from"@swapkit/helpers";import{getRippleToolbox as Z}from"@swapkit/toolboxes/ripple";var w=async({sdk:E,derivationPath:F})=>{let G=F?Y(F):`${X[W.Ripple]}/0`,{address:j}=await E.address.xrpGetAddress({address_n:z(G)}),y=await Z({signer:{getAddress:()=>Promise.resolve(j),signTransaction:()=>{throw Error("signTransaction not supported via toolbox")}}});return{...y,address:j,getAddress:()=>j,transfer:async({recipient:I,assetValue:M,memo:q})=>{let f=await y.createTransaction({assetValue:M,memo:q,recipient:I,sender:j}),O={type:"auth/StdTx",value:{fee:{amount:[{amount:"1000",denom:"drop"}],gas:"28000"},memo:q&&q.length>0?q:"",msg:[{type:"ripple-sdk/MsgSend",value:{amount:[{amount:f.Amount,denom:"drop"}],from_address:j,to_address:I}}],signatures:null}},Q={addressNList:z(G),flags:f.Flags===0?void 0:f.Flags,lastLedgerSequence:f.LastLedgerSequence?.toString(),payment:{amount:f.Amount,destination:f.Destination,destinationTag:(f.DestinationTag??"0").toString()},sequence:(f.Sequence??0).toString(),tx:O},J=JSON.parse(await E.xrp.xrpSignTransaction(Q)),K=J.tx_blob??J.value?.signatures?.[0]?.serializedTx;if(!K)throw Error("KeepKey XRP sign failed");let U=Buffer.from(K,"base64").toString("hex");return y.broadcastTransaction(U)}}};export{w as rippleWalletMethods};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
4
|
-
//# sourceMappingURL=chunk-
|
|
3
|
+
//# debugId=B72C4C3232710E6064756E2164756E21
|
|
4
|
+
//# sourceMappingURL=chunk-ta7bqmy3.js.map
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"import type { KeepKeySdk } from \"@keepkey/keepkey-sdk\";\nimport {\n Chain,\n DerivationPath,\n type DerivationPathArray,\n derivationPathToString,\n type GenericTransferParams,\n} from \"@swapkit/helpers\";\nimport { getRippleToolbox } from \"@swapkit/toolboxes/ripple\";\nimport { bip32ToAddressNList } from \"../coins\";\n\nexport const rippleWalletMethods = async ({\n sdk,\n derivationPath,\n}: {\n sdk: KeepKeySdk;\n derivationPath?: DerivationPathArray;\n}) => {\n // Derivation path handling (default to standard XRP 44'/144'/0'/0/0)\n const derivationPathString = derivationPath\n ? derivationPathToString(derivationPath)\n : `${DerivationPath[Chain.Ripple]}/0`;\n\n // Fetch address from KeepKey\n const { address } = await (sdk as any).address.xrpGetAddress({\n address_n: bip32ToAddressNList(derivationPathString),\n });\n\n // Inject minimal signer so toolbox's address helpers work\n const signer = {\n getAddress: () => Promise.resolve(address),\n signTransaction: () => {\n throw new Error(\"signTransaction not supported via toolbox\");\n },\n };\n\n const toolbox = await getRippleToolbox({ signer });\n\n const transfer = async ({ recipient, assetValue, memo }: GenericTransferParams) => {\n // Build XRPL Payment tx using toolbox helper\n const tx = await toolbox.createTransaction({ assetValue, memo, recipient, sender: address });\n\n // Convert toolbox Payment tx into KeepKey StdTx wrapper (KeepKey-specific format)\n const stdTx = {\n type: \"auth/StdTx\",\n value: {\n fee: { amount: [{ amount: \"1000\", denom: \"drop\" }], gas: \"28000\" },\n memo: memo && memo.length > 0 ? memo : \"\",\n msg: [\n {\n type: \"ripple-sdk/MsgSend\",\n value: { amount: [{ amount: tx.Amount, denom: \"drop\" }], from_address: address, to_address: recipient },\n },\n ],\n signatures: null,\n },\n };\n\n const unsignedTx = {\n addressNList: bip32ToAddressNList(derivationPathString),\n flags: tx.Flags === 0 ? undefined : tx.Flags,\n lastLedgerSequence: tx.LastLedgerSequence?.toString(),\n payment: {\n amount: tx.Amount,\n destination: tx.Destination,\n destinationTag: (tx.DestinationTag ?? \"0\").toString(),\n },\n sequence: (tx.Sequence ?? 0).toString(),\n tx: stdTx,\n } as any;\n\n // Sign with KeepKey\n const responseSign = JSON.parse(await (sdk as any).xrp.xrpSignTransaction(unsignedTx));\n\n // keepkey-sdk may return either { tx_blob } or StdTx with Base64 serializedTx\n const txBlob: string | undefined =\n (responseSign as any).tx_blob ?? (responseSign as any).value?.signatures?.[0]?.serializedTx;\n if (!txBlob) throw new Error(\"KeepKey XRP sign failed\");\n\n const buffer = Buffer.from(txBlob, \"base64\");\n const txBlobHex = buffer.toString(\"hex\");\n\n // Broadcast signed tx via toolbox\n return toolbox.broadcastTransaction(txBlobHex);\n };\n\n return { ...toolbox, address, getAddress: () => address, transfer };\n};\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": "2EACA,UACE,oBACA,4BAEA,yBAGF,2BAAS,kCAGF,IAAM,EAAsB,OACjC,MACA,oBAII,CAEJ,IAAM,EAAuB,EACzB,EAAuB,CAAc,EACrC,GAAG,EAAe,EAAM,aAGpB,WAAY,MAAO,EAAY,QAAQ,cAAc,CAC3D,UAAW,EAAoB,CAAoB,CACrD,CAAC,EAUK,EAAU,MAAM,EAAiB,CAAE,OAP1B,CACb,WAAY,IAAM,QAAQ,QAAQ,CAAO,EACzC,gBAAiB,IAAM,CACrB,MAAU,MAAM,2CAA2C,EAE/D,CAEgD,CAAC,EAkDjD,MAAO,IAAK,EAAS,UAAS,WAAY,IAAM,EAAS,SAhDxC,OAAS,YAAW,aAAY,UAAkC,CAEjF,IAAM,EAAK,MAAM,EAAQ,kBAAkB,CAAE,aAAY,OAAM,YAAW,OAAQ,CAAQ,CAAC,EAGrF,EAAQ,CACZ,KAAM,aACN,MAAO,CACL,IAAK,CAAE,OAAQ,CAAC,CAAE,OAAQ,OAAQ,MAAO,MAAO,CAAC,EAAG,IAAK,OAAQ,EACjE,KAAM,GAAQ,EAAK,OAAS,EAAI,EAAO,GACvC,IAAK,CACH,CACE,KAAM,qBACN,MAAO,CAAE,OAAQ,CAAC,CAAE,OAAQ,EAAG,OAAQ,MAAO,MAAO,CAAC,EAAG,aAAc,EAAS,WAAY,CAAU,CACxG,CACF,EACA,WAAY,IACd,CACF,EAEM,EAAa,CACjB,aAAc,EAAoB,CAAoB,EACtD,MAAO,EAAG,QAAU,EAAI,OAAY,EAAG,MACvC,mBAAoB,EAAG,oBAAoB,SAAS,EACpD,QAAS,CACP,OAAQ,EAAG,OACX,YAAa,EAAG,YAChB,gBAAiB,EAAG,gBAAkB,KAAK,SAAS,CACtD,EACA,UAAW,EAAG,UAAY,GAAG,SAAS,EACtC,GAAI,CACN,EAGM,EAAe,KAAK,MAAM,MAAO,EAAY,IAAI,mBAAmB,CAAU,CAAC,EAG/E,EACH,EAAqB,SAAY,EAAqB,OAAO,aAAa,IAAI,aACjF,GAAI,CAAC,EAAQ,MAAU,MAAM,yBAAyB,EAGtD,IAAM,EADS,OAAO,KAAK,EAAQ,QAAQ,EAClB,SAAS,KAAK,EAGvC,OAAO,EAAQ,qBAAqB,CAAS,EAGmB",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "B72C4C3232710E6064756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Ab as n,Cc as Gf,Dd as Ef,Ed as zf,Hd as qf,Id as Kf,Mb as D,Ob as Xf,Qb as O,Rb as q,Sd as Bf,Td as e,_b as a,uc as u,wc as Df,xc as b,yc as L,zc as t}from"./chunk-wm89desc.js";import"./chunk-9a9gn4pb.js";class d extends u{constructor(A){super(A);this.err=A}_tag="WebHidTransportNotSupportedError"}class v extends u{constructor(A){super(A);this.err=A}_tag="WebHidSendReportError"}/*! *****************************************************************************
|
|
2
2
|
Copyright (c) Microsoft Corporation.
|
|
3
3
|
|
|
4
4
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
@@ -13,5 +13,5 @@ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
|
13
13
|
PERFORMANCE OF THIS SOFTWARE.
|
|
14
14
|
***************************************************************************** */var Y=function(){return Y=Object.assign||function(f){for(var T,N=1,I=arguments.length;N<I;N++){T=arguments[N];for(var W in T)if(Object.prototype.hasOwnProperty.call(T,W))f[W]=T[W]}return f},Y.apply(this,arguments)};function Nf(A){var f=typeof Symbol==="function"&&Symbol.iterator,T=f&&A[f],N=0;if(T)return T.call(A);if(A&&typeof A.length==="number")return{next:function(){if(A&&N>=A.length)A=void 0;return{value:A&&A[N++],done:!A}}};throw TypeError(f?"Object is not iterable.":"Symbol.iterator is not defined.")}function B(A,f){var T=typeof Symbol==="function"&&A[Symbol.iterator];if(!T)return A;var N=T.call(A),I,W=[],Q;try{while((f===void 0||f-- >0)&&!(I=N.next()).done)W.push(I.value)}catch(J){Q={error:J}}finally{try{if(I&&!I.done&&(T=N.return))T.call(N)}finally{if(Q)throw Q.error}}return W}function R(){for(var A=[],f=0;f<arguments.length;f++)A=A.concat(B(arguments[f]));return A}function If(){return typeof __SENTRY_BROWSER_BUNDLE__<"u"&&!!__SENTRY_BROWSER_BUNDLE__}function K(){return!If()&&Object.prototype.toString.call(typeof process<"u"?process:0)==="[object process]"}function Wf(A,f){return A.require(f)}var Mf={};function F(){return K()?global:typeof window<"u"?window:typeof self<"u"?self:Mf}function P(A,f,T){var N=T||F(),I=N.__SENTRY__=N.__SENTRY__||{},W=I[A]||(I[A]=f());return W}var Lf=Object.prototype.toString;function yf(A,f){return Lf.call(A)==="[object "+f+"]"}function y(A){return yf(A,"Object")}function w(A){return Boolean(A&&A.then&&typeof A.then==="function")}var _=typeof __SENTRY_DEBUG__>"u"?!0:__SENTRY_DEBUG__;var wf=F(),jf="Sentry Logger ",g=["debug","info","warn","error","log","assert"];function x(A){var f=F();if(!("console"in f))return A();var T=f.console,N={};g.forEach(function(I){var W=T[I]&&T[I].__sentry_original__;if(I in f.console&&W)N[I]=T[I],T[I]=W});try{return A()}finally{Object.keys(N).forEach(function(I){T[I]=N[I]})}}function Yf(){var A=!1,f={enable:function(){A=!0},disable:function(){A=!1}};if(_)g.forEach(function(T){f[T]=function(){var N=[];for(var I=0;I<arguments.length;I++)N[I]=arguments[I];if(A)x(function(){var W;(W=wf.console)[T].apply(W,R([jf+"["+T+"]:"],N))})}});else g.forEach(function(T){f[T]=function(){return}});return f}var U;if(_)U=P("logger",Yf);else U=Yf();function j(A){var f,T;if(y(A)){var N={};try{for(var I=Nf(Object.keys(A)),W=I.next();!W.done;W=I.next()){var Q=W.value;if(typeof A[Q]<"u")N[Q]=j(A[Q])}}catch(J){f={error:J}}finally{try{if(W&&!W.done&&(T=I.return))T.call(I)}finally{if(f)throw f.error}}return N}if(Array.isArray(A))return A.map(j);return A}function G(){var A=F(),f=A.crypto||A.msCrypto;if(f!==void 0&&f.getRandomValues){var T=new Uint16Array(8);f.getRandomValues(T),T[3]=T[3]&4095|16384,T[4]=T[4]&16383|32768;var N=function(I){var W=I.toString(16);while(W.length<4)W="0"+W;return W};return N(T[0])+N(T[1])+N(T[2])+N(T[3])+N(T[4])+N(T[5])+N(T[6])+N(T[7])}return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,function(I){var W=Math.random()*16|0,Q=I==="x"?W:W&3|8;return Q.toString(16)})}var Qf=function(){function A(f){var T=this;this._state=0,this._handlers=[],this._resolve=function(N){T._setResult(1,N)},this._reject=function(N){T._setResult(2,N)},this._setResult=function(N,I){if(T._state!==0)return;if(w(I)){I.then(T._resolve,T._reject);return}T._state=N,T._value=I,T._executeHandlers()},this._executeHandlers=function(){if(T._state===0)return;var N=T._handlers.slice();T._handlers=[],N.forEach(function(I){if(I[0])return;if(T._state===1)I[1](T._value);if(T._state===2)I[2](T._value);I[0]=!0})};try{f(this._resolve,this._reject)}catch(N){this._reject(N)}}return A.prototype.then=function(f,T){var N=this;return new A(function(I,W){N._handlers.push([!1,function(Q){if(!f)I(Q);else try{I(f(Q))}catch(J){W(J)}},function(Q){if(!T)W(Q);else try{I(T(Q))}catch(J){W(J)}}]),N._executeHandlers()})},A.prototype.catch=function(f){return this.then(function(T){return T},f)},A.prototype.finally=function(f){var T=this;return new A(function(N,I){var W,Q;return T.then(function(J){if(Q=!1,W=J,f)f()},function(J){if(Q=!0,W=J,f)f()}).then(function(){if(Q){I(W);return}N(W)})})},A}();var l={nowSeconds:function(){return Date.now()/1000}};function Hf(){var A=F().performance;if(!A||!A.now)return;var f=Date.now()-A.now();return{now:function(){return A.now()},timeOrigin:f}}function kf(){try{var A=Wf(hf,"perf_hooks");return A.performance}catch(f){return}}var m=K()?kf():Hf(),Jf=m===void 0?l:{nowSeconds:function(){return(m.timeOrigin+m.now())/1000}},k=l.nowSeconds.bind(l),p=Jf.nowSeconds.bind(Jf);var H,z0=function(){var A=F().performance;if(!A||!A.now){H="none";return}var f=3600000,T=A.now(),N=Date.now(),I=A.timeOrigin?Math.abs(A.timeOrigin+T-N):f,W=I<f,Q=A.timing&&A.timing.navigationStart,J=typeof Q==="number",Z=J?Math.abs(Q+T-N):f,$=Z<f;if(W||$)if(I<=Z)return H="timeOrigin",A.timeOrigin;else return H="navigationStart",Q;return H="dateNow",N}();var r=typeof __SENTRY_DEBUG__>"u"?!0:__SENTRY_DEBUG__;var Zf=100,h=function(){function A(){this._notifyingListeners=!1,this._scopeListeners=[],this._eventProcessors=[],this._breadcrumbs=[],this._user={},this._tags={},this._extra={},this._contexts={},this._sdkProcessingMetadata={}}return A.clone=function(f){var T=new A;if(f)T._breadcrumbs=R(f._breadcrumbs),T._tags=Y({},f._tags),T._extra=Y({},f._extra),T._contexts=Y({},f._contexts),T._user=f._user,T._level=f._level,T._span=f._span,T._session=f._session,T._transactionName=f._transactionName,T._fingerprint=f._fingerprint,T._eventProcessors=R(f._eventProcessors),T._requestSession=f._requestSession;return T},A.prototype.addScopeListener=function(f){this._scopeListeners.push(f)},A.prototype.addEventProcessor=function(f){return this._eventProcessors.push(f),this},A.prototype.setUser=function(f){if(this._user=f||{},this._session)this._session.update({user:f});return this._notifyScopeListeners(),this},A.prototype.getUser=function(){return this._user},A.prototype.getRequestSession=function(){return this._requestSession},A.prototype.setRequestSession=function(f){return this._requestSession=f,this},A.prototype.setTags=function(f){return this._tags=Y(Y({},this._tags),f),this._notifyScopeListeners(),this},A.prototype.setTag=function(f,T){var N;return this._tags=Y(Y({},this._tags),(N={},N[f]=T,N)),this._notifyScopeListeners(),this},A.prototype.setExtras=function(f){return this._extra=Y(Y({},this._extra),f),this._notifyScopeListeners(),this},A.prototype.setExtra=function(f,T){var N;return this._extra=Y(Y({},this._extra),(N={},N[f]=T,N)),this._notifyScopeListeners(),this},A.prototype.setFingerprint=function(f){return this._fingerprint=f,this._notifyScopeListeners(),this},A.prototype.setLevel=function(f){return this._level=f,this._notifyScopeListeners(),this},A.prototype.setTransactionName=function(f){return this._transactionName=f,this._notifyScopeListeners(),this},A.prototype.setTransaction=function(f){return this.setTransactionName(f)},A.prototype.setContext=function(f,T){var N;if(T===null)delete this._contexts[f];else this._contexts=Y(Y({},this._contexts),(N={},N[f]=T,N));return this._notifyScopeListeners(),this},A.prototype.setSpan=function(f){return this._span=f,this._notifyScopeListeners(),this},A.prototype.getSpan=function(){return this._span},A.prototype.getTransaction=function(){var f=this.getSpan();return f&&f.transaction},A.prototype.setSession=function(f){if(!f)delete this._session;else this._session=f;return this._notifyScopeListeners(),this},A.prototype.getSession=function(){return this._session},A.prototype.update=function(f){if(!f)return this;if(typeof f==="function"){var T=f(this);return T instanceof A?T:this}if(f instanceof A){if(this._tags=Y(Y({},this._tags),f._tags),this._extra=Y(Y({},this._extra),f._extra),this._contexts=Y(Y({},this._contexts),f._contexts),f._user&&Object.keys(f._user).length)this._user=f._user;if(f._level)this._level=f._level;if(f._fingerprint)this._fingerprint=f._fingerprint;if(f._requestSession)this._requestSession=f._requestSession}else if(y(f)){if(f=f,this._tags=Y(Y({},this._tags),f.tags),this._extra=Y(Y({},this._extra),f.extra),this._contexts=Y(Y({},this._contexts),f.contexts),f.user)this._user=f.user;if(f.level)this._level=f.level;if(f.fingerprint)this._fingerprint=f.fingerprint;if(f.requestSession)this._requestSession=f.requestSession}return this},A.prototype.clear=function(){return this._breadcrumbs=[],this._tags={},this._extra={},this._user={},this._contexts={},this._level=void 0,this._transactionName=void 0,this._fingerprint=void 0,this._requestSession=void 0,this._span=void 0,this._session=void 0,this._notifyScopeListeners(),this},A.prototype.addBreadcrumb=function(f,T){var N=typeof T==="number"?Math.min(T,Zf):Zf;if(N<=0)return this;var I=Y({timestamp:k()},f);return this._breadcrumbs=R(this._breadcrumbs,[I]).slice(-N),this._notifyScopeListeners(),this},A.prototype.clearBreadcrumbs=function(){return this._breadcrumbs=[],this._notifyScopeListeners(),this},A.prototype.applyToEvent=function(f,T){if(this._extra&&Object.keys(this._extra).length)f.extra=Y(Y({},this._extra),f.extra);if(this._tags&&Object.keys(this._tags).length)f.tags=Y(Y({},this._tags),f.tags);if(this._user&&Object.keys(this._user).length)f.user=Y(Y({},this._user),f.user);if(this._contexts&&Object.keys(this._contexts).length)f.contexts=Y(Y({},this._contexts),f.contexts);if(this._level)f.level=this._level;if(this._transactionName)f.transaction=this._transactionName;if(this._span){f.contexts=Y({trace:this._span.getTraceContext()},f.contexts);var N=this._span.transaction&&this._span.transaction.name;if(N)f.tags=Y({transaction:N},f.tags)}return this._applyFingerprint(f),f.breadcrumbs=R(f.breadcrumbs||[],this._breadcrumbs),f.breadcrumbs=f.breadcrumbs.length>0?f.breadcrumbs:void 0,f.sdkProcessingMetadata=this._sdkProcessingMetadata,this._notifyEventProcessors(R(Sf(),this._eventProcessors),f,T)},A.prototype.setSDKProcessingMetadata=function(f){return this._sdkProcessingMetadata=Y(Y({},this._sdkProcessingMetadata),f),this},A.prototype._notifyEventProcessors=function(f,T,N,I){var W=this;if(I===void 0)I=0;return new Qf(function(Q,J){var Z=f[I];if(T===null||typeof Z!=="function")Q(T);else{var $=Z(Y({},T),N);if(w($))$.then(function(X){return W._notifyEventProcessors(f,X,N,I+1).then(Q)}).then(null,J);else W._notifyEventProcessors(f,$,N,I+1).then(Q).then(null,J)}})},A.prototype._notifyScopeListeners=function(){var f=this;if(!this._notifyingListeners)this._notifyingListeners=!0,this._scopeListeners.forEach(function(T){T(f)}),this._notifyingListeners=!1},A.prototype._applyFingerprint=function(f){if(f.fingerprint=f.fingerprint?Array.isArray(f.fingerprint)?f.fingerprint:[f.fingerprint]:[],this._fingerprint)f.fingerprint=f.fingerprint.concat(this._fingerprint);if(f.fingerprint&&!f.fingerprint.length)delete f.fingerprint},A}();function Sf(){return P("globalEventProcessors",function(){return[]})}var $f=function(){function A(f){this.errors=0,this.sid=G(),this.duration=0,this.status="ok",this.init=!0,this.ignoreDuration=!1;var T=p();if(this.timestamp=T,this.started=T,f)this.update(f)}return A.prototype.update=function(f){if(f===void 0)f={};if(f.user){if(!this.ipAddress&&f.user.ip_address)this.ipAddress=f.user.ip_address;if(!this.did&&!f.did)this.did=f.user.id||f.user.email||f.user.username}if(this.timestamp=f.timestamp||p(),f.ignoreDuration)this.ignoreDuration=f.ignoreDuration;if(f.sid)this.sid=f.sid.length===32?f.sid:G();if(f.init!==void 0)this.init=f.init;if(!this.did&&f.did)this.did=""+f.did;if(typeof f.started==="number")this.started=f.started;if(this.ignoreDuration)this.duration=void 0;else if(typeof f.duration==="number")this.duration=f.duration;else{var T=this.timestamp-this.started;this.duration=T>=0?T:0}if(f.release)this.release=f.release;if(f.environment)this.environment=f.environment;if(!this.ipAddress&&f.ipAddress)this.ipAddress=f.ipAddress;if(!this.userAgent&&f.userAgent)this.userAgent=f.userAgent;if(typeof f.errors==="number")this.errors=f.errors;if(f.status)this.status=f.status},A.prototype.close=function(f){if(f)this.update({status:f});else if(this.status==="ok")this.update({status:"exited"});else this.update()},A.prototype.toJSON=function(){return j({sid:""+this.sid,init:this.init,started:new Date(this.started*1000).toISOString(),timestamp:new Date(this.timestamp*1000).toISOString(),status:this.status,errors:this.errors,did:typeof this.did==="number"||typeof this.did==="string"?""+this.did:void 0,duration:this.duration,attrs:{release:this.release,environment:this.environment,ip_address:this.ipAddress,user_agent:this.userAgent}})},A}();var c=4,Cf=100,S=function(){function A(f,T,N){if(T===void 0)T=new h;if(N===void 0)N=c;if(this._version=N,this._stack=[{}],this.getStackTop().scope=T,f)this.bindClient(f)}return A.prototype.isOlderThan=function(f){return this._version<f},A.prototype.bindClient=function(f){var T=this.getStackTop();if(T.client=f,f&&f.setupIntegrations)f.setupIntegrations()},A.prototype.pushScope=function(){var f=h.clone(this.getScope());return this.getStack().push({client:this.getClient(),scope:f}),f},A.prototype.popScope=function(){if(this.getStack().length<=1)return!1;return!!this.getStack().pop()},A.prototype.withScope=function(f){var T=this.pushScope();try{f(T)}finally{this.popScope()}},A.prototype.getClient=function(){return this.getStackTop().client},A.prototype.getScope=function(){return this.getStackTop().scope},A.prototype.getStack=function(){return this._stack},A.prototype.getStackTop=function(){return this._stack[this._stack.length-1]},A.prototype.captureException=function(f,T){var N=this._lastEventId=T&&T.event_id?T.event_id:G(),I=T;if(!T){var W=void 0;try{throw Error("Sentry syntheticException")}catch(Q){W=Q}I={originalException:f,syntheticException:W}}return this._invokeClient("captureException",f,Y(Y({},I),{event_id:N})),N},A.prototype.captureMessage=function(f,T,N){var I=this._lastEventId=N&&N.event_id?N.event_id:G(),W=N;if(!N){var Q=void 0;try{throw Error(f)}catch(J){Q=J}W={originalException:f,syntheticException:Q}}return this._invokeClient("captureMessage",f,T,Y(Y({},W),{event_id:I})),I},A.prototype.captureEvent=function(f,T){var N=T&&T.event_id?T.event_id:G();if(f.type!=="transaction")this._lastEventId=N;return this._invokeClient("captureEvent",f,Y(Y({},T),{event_id:N})),N},A.prototype.lastEventId=function(){return this._lastEventId},A.prototype.addBreadcrumb=function(f,T){var N=this.getStackTop(),I=N.scope,W=N.client;if(!I||!W)return;var Q=W.getOptions&&W.getOptions()||{},J=Q.beforeBreadcrumb,Z=J===void 0?null:J,$=Q.maxBreadcrumbs,X=$===void 0?Cf:$;if(X<=0)return;var E=k(),Af=Y({timestamp:E},f),Tf=Z?x(function(){return Z(Af,T)}):Af;if(Tf===null)return;I.addBreadcrumb(Tf,X)},A.prototype.setUser=function(f){var T=this.getScope();if(T)T.setUser(f)},A.prototype.setTags=function(f){var T=this.getScope();if(T)T.setTags(f)},A.prototype.setExtras=function(f){var T=this.getScope();if(T)T.setExtras(f)},A.prototype.setTag=function(f,T){var N=this.getScope();if(N)N.setTag(f,T)},A.prototype.setExtra=function(f,T){var N=this.getScope();if(N)N.setExtra(f,T)},A.prototype.setContext=function(f,T){var N=this.getScope();if(N)N.setContext(f,T)},A.prototype.configureScope=function(f){var T=this.getStackTop(),N=T.scope,I=T.client;if(N&&I)f(N)},A.prototype.run=function(f){var T=o(this);try{f(this)}finally{o(T)}},A.prototype.getIntegration=function(f){var T=this.getClient();if(!T)return null;try{return T.getIntegration(f)}catch(N){return r&&U.warn("Cannot retrieve integration "+f.id+" from the current Hub"),null}},A.prototype.startSpan=function(f){return this._callExtensionMethod("startSpan",f)},A.prototype.startTransaction=function(f,T){return this._callExtensionMethod("startTransaction",f,T)},A.prototype.traceHeaders=function(){return this._callExtensionMethod("traceHeaders")},A.prototype.captureSession=function(f){if(f===void 0)f=!1;if(f)return this.endSession();this._sendSessionUpdate()},A.prototype.endSession=function(){var f=this.getStackTop(),T=f&&f.scope,N=T&&T.getSession();if(N)N.close();if(this._sendSessionUpdate(),T)T.setSession()},A.prototype.startSession=function(f){var T=this.getStackTop(),N=T.scope,I=T.client,W=I&&I.getOptions()||{},Q=W.release,J=W.environment,Z=F(),$=(Z.navigator||{}).userAgent,X=new $f(Y(Y(Y({release:Q,environment:J},N&&{user:N.getUser()}),$&&{userAgent:$}),f));if(N){var E=N.getSession&&N.getSession();if(E&&E.status==="ok")E.update({status:"exited"});this.endSession(),N.setSession(X)}return X},A.prototype._sendSessionUpdate=function(){var f=this.getStackTop(),T=f.scope,N=f.client;if(!T)return;var I=T.getSession&&T.getSession();if(I){if(N&&N.captureSession)N.captureSession(I)}},A.prototype._invokeClient=function(f){var T,N=[];for(var I=1;I<arguments.length;I++)N[I-1]=arguments[I];var W=this.getStackTop(),Q=W.scope,J=W.client;if(J&&J[f])(T=J)[f].apply(T,R(N,[Q]))},A.prototype._callExtensionMethod=function(f){var T=[];for(var N=1;N<arguments.length;N++)T[N-1]=arguments[N];var I=M(),W=I.__SENTRY__;if(W&&W.extensions&&typeof W.extensions[f]==="function")return W.extensions[f].apply(this,T);r&&U.warn("Extension method "+f+" couldn't be found, doing nothing.")},A}();function M(){var A=F();return A.__SENTRY__=A.__SENTRY__||{extensions:{},hub:void 0},A}function o(A){var f=M(),T=V(f);return C(f,A),T}function i(){var A=M();if(!Rf(A)||V(A).isOlderThan(c))C(A,new S);if(K())return bf(A);return V(A)}function bf(A){try{var f=M().__SENTRY__,T=f&&f.extensions&&f.extensions.domain&&f.extensions.domain.active;if(!T)return V(A);if(!Rf(T)||V(T).isOlderThan(c)){var N=V(A).getStackTop();C(T,new S(N.client,h.clone(N.scope)))}return V(T)}catch(I){return V(A)}}function Rf(A){return!!(A&&A.__SENTRY__&&A.__SENTRY__.hub)}function V(A){return P("hub",function(){return new S},A)}function C(A,f){if(!A)return!1;var T=A.__SENTRY__=A.__SENTRY__||{};return T.hub=f,!0}function uf(A){var f=[];for(var T=1;T<arguments.length;T++)f[T-1]=arguments[T];var N=i();if(N&&N[A])return N[A].apply(N,R(f));throw Error("No hub defined or "+A+" was not found on the hub, please open a bug report.")}function z(A,f){var T=Error("Sentry syntheticException");return uf("captureException",A,{captureContext:f,originalException:A,syntheticException:T})}import{BehaviorSubject as df,from as Pf,map as vf,switchMap as _f}from"rxjs";var Of=64,Vf=6000;class s{dependencies;apduSender;apduReceiver;sendApduPromiseResolver;logger;constructor({dependencies:A,apduSenderFactory:f,apduReceiverFactory:T},N){let I=D.of(zf.numberToByteArray(Math.floor(Math.random()*65535),2));this.logger=N("WebHidApduSender"),this.apduSender=f({frameSize:Of,channel:I,padding:!0}),this.apduReceiver=T({channel:I}),this.sendApduPromiseResolver=Xf,this.dependencies=A,this.logger.info("\uD83D\uDD0C Connected to device")}async sendApdu(A,f,T){let N,I=new Promise((W)=>{this.sendApduPromiseResolver=D.of((...Q)=>(N&&clearTimeout(N),W(...Q)))});for(let W of this.apduSender.getFrames(A))try{await this.dependencies.device.sendReport(0,new Uint8Array(W.getRawData()))}catch(Q){return this.logger.info("Error sending frame",{data:{error:Q}}),Promise.resolve(O(new v(Q)))}return this.logger.debug(qf(A)),T&&(N=setTimeout(()=>{this.logger.debug("[sendApdu] Abort timeout",{data:{abortTimeout:T}}),this.sendApduPromiseResolver.map((W)=>W(O(new Gf("Abort timeout"))))},T)),I}receiveHidInputReport(A){let f=new Uint8Array(A.data.buffer);this.apduReceiver.handleFrame(f).map((T)=>{T.map((N)=>{this.logger.debug(Kf(N)),this.sendApduPromiseResolver.map((I)=>I(q(N)))})}).mapLeft((T)=>{this.sendApduPromiseResolver.map((N)=>N(O(T)))})}getDependencies(){return this.dependencies}setDependencies(A){this.dependencies=A}async setupConnection(){try{this.dependencies.device.oninputreport=(A)=>this.receiveHidInputReport(A),await this.dependencies.device.open()}catch(A){if(A instanceof DOMException&&A.name==="InvalidStateError")this.logger.info("Device is already opened");else{let f=new L(A);throw this.logger.error("Error while opening device",{data:{error:A}}),z(f),A}}}closeConnection(){this.logger.info("\uD83D\uDD1A Disconnect"),this.dependencies.device.close().catch((A)=>{this.logger.error("Error while closing device",{data:{device:this.dependencies.device,error:A}})})}}var Uf="WEB-HID";class ff{constructor(A,f,T,N,I=(Q)=>new Bf(Q),W=(Q,J)=>new s(Q,J)){this._deviceModelDataSource=A,this._loggerServiceFactory=f,this._apduSenderFactory=T,this._apduReceiverFactory=N,this._deviceConnectionStateMachineFactory=I,this._deviceApduSenderFactory=W,this._logger=f("WebWebHidTransport"),this.startListeningToConnectionEvents()}_transportDiscoveredDevices=new df([]);_deviceConnectionsByHidDevice=new Map;_deviceConnectionsPendingReconnection=new Set;_connectionListenersAbortController=new AbortController;_logger;connectionType="USB";identifier=Uf;get hidApi(){return this.isSupported()?q(navigator.hid):O(new d("WebHID not supported"))}isSupported(){try{let A=!!navigator?.hid;return this._logger.debug(`isSupported: ${A}`),A}catch(A){return this._logger.error("isSupported: error",{data:{error:A}}),!1}}getIdentifier(){return this.identifier}async getDevices(){return a.liftEither(this.hidApi).map(async(A)=>{try{return(await A.getDevices()).filter((f)=>f.vendorId===n)}catch(f){let T=new b(f);throw this._logger.error("getDevices: error getting devices",{data:{error:f}}),z(T),T}})}mapHIDDeviceToTransportDiscoveredDevice(A){let f=this._transportDiscoveredDevices.getValue().find((N)=>N.hidDevice===A);if(f)return f;let T=this._deviceConnectionsByHidDevice.get(A);return this.getDeviceModel(A).caseOf({Just:(N)=>{let I=T?.getDeviceId()??Ef(),W={id:I,deviceModel:N,hidDevice:A,transport:this.identifier};return this._logger.debug(`Discovered device ${I} ${W.deviceModel.productName}`),W},Nothing:()=>{throw this._logger.warn(`Device not recognized: hidDevice.productId: 0x${A.productId.toString(16)}`),new Df(`Device not recognized: hidDevice.productId: 0x${A.productId.toString(16)}`)}})}listenToAvailableDevices(){return this.updateTransportDiscoveredDevices(),this._transportDiscoveredDevices.pipe(vf((A)=>A.map(({hidDevice:f,...T})=>T)))}async updateTransportDiscoveredDevices(){(await this.getDevices()).caseOf({Left:(A)=>{this._logger.error("Error while getting accessible device",{data:{error:A}}),z(A)},Right:(A)=>{this._transportDiscoveredDevices.next(A.map((f)=>this.mapHIDDeviceToTransportDiscoveredDevice(f)))}})}async promptDeviceAccess(){return a.liftEither(this.hidApi).map(async(A)=>{let f=[];try{f=await A.requestDevice({filters:[{vendorId:n}]}),await this.updateTransportDiscoveredDevices()}catch(N){let I=new b(N);throw this._logger.error("promptDeviceAccess: error requesting device",{data:{error:N}}),z(I),I}if(this._logger.debug(`promptDeviceAccess: hidDevices len ${f.length}`),f.length===0)throw this._logger.warn("No device was selected"),new b("No selected device");let T=[];for(let N of f)T.push(N),this._logger.debug("promptDeviceAccess: selected device",{data:{hidDevice:N}});return T}).run()}startDiscovering(){return this._logger.debug("startDiscovering"),Pf(this.promptDeviceAccess()).pipe(_f((A)=>A.caseOf({Left:(f)=>{throw this._logger.error("Error while getting accessible device",{data:{error:f}}),z(f),f},Right:(f)=>{this._logger.info(`Got access to ${f.length} HID devices`);let T=f.map((N)=>this.mapHIDDeviceToTransportDiscoveredDevice(N));return Pf(T)}})))}stopDiscovering(){}startListeningToConnectionEvents(){this._logger.debug("startListeningToConnectionEvents"),this.hidApi.map((A)=>{A.addEventListener("connect",(f)=>this.handleDeviceConnectionEvent(f),{signal:this._connectionListenersAbortController.signal}),A.addEventListener("disconnect",(f)=>this.handleDeviceDisconnectionEvent(f),{signal:this._connectionListenersAbortController.signal})})}stopListeningToConnectionEvents(){this._logger.debug("stopListeningToConnectionEvents"),this._connectionListenersAbortController.abort()}async connect({deviceId:A,onDisconnect:f}){this._logger.debug("connect",{data:{deviceId:A}});let T=this._transportDiscoveredDevices.getValue().find((Z)=>Z.id===A);if(!T)return this._logger.error(`Unknown device ${A}`),O(new t(`Unknown device ${A}`));let{deviceModel:N}=T,I=this._deviceConnectionsByHidDevice.get(T.hidDevice);if(I)return q(new e({id:A,deviceModel:N,type:this.connectionType,sendApdu:(...Z)=>I.sendApdu(...Z),transport:this.identifier}));let W=this._deviceApduSenderFactory({apduSenderFactory:this._apduSenderFactory,apduReceiverFactory:this._apduReceiverFactory,dependencies:{device:T.hidDevice}},this._loggerServiceFactory),Q=this._deviceConnectionStateMachineFactory({deviceId:A,deviceApduSender:W,timeoutDuration:Vf,tryToReconnect:()=>{this._deviceConnectionsByHidDevice.forEach((Z,$)=>{Z.getDeviceId()===A&&(this._deviceConnectionsPendingReconnection.add(Z),this._deviceConnectionsByHidDevice.delete($))})},onTerminated:()=>{this._deviceConnectionsPendingReconnection.forEach((Z)=>{Z.getDeviceId()===A&&(this._deviceConnectionsPendingReconnection.delete(Z),f(Z.getDeviceId()))}),this._deviceConnectionsByHidDevice.forEach((Z,$)=>{Z.getDeviceId()===A&&(this._deviceConnectionsByHidDevice.delete($),f(Z.getDeviceId()))})}});try{await W.setupConnection()}catch(Z){return Z instanceof L?O(Z):O(new L(Z))}this._deviceConnectionsByHidDevice.set(T.hidDevice,Q);let J=new e({sendApdu:(...Z)=>Q.sendApdu(...Z),deviceModel:N,id:A,type:this.connectionType,transport:this.identifier});return q(J)}getDeviceModel(A){let{productId:f}=A,T=this._deviceModelDataSource.getAllDeviceModels().find((N)=>N.usbProductId===f>>8||N.bootloaderUsbProductId===f);return T?D.of(T):D.zero()}getHidUsbProductId(A){return this.getDeviceModel(A).caseOf({Just:(f)=>f.usbProductId,Nothing:()=>A.productId>>8})}async disconnect(A){this._logger.debug("disconnect",{data:{connectedDevice:A}});let f=Array.from(this._deviceConnectionsByHidDevice.values()).find((T)=>T.getDeviceId()===A.connectedDevice.id);return f?(f.closeConnection(),Promise.resolve(q(void 0))):(this._logger.error("No matching device connection found",{data:{connectedDevice:A}}),Promise.resolve(O(new t(`Unknown device ${A.connectedDevice.id}`))))}isHIDConnectionEvent(A){return"device"in A&&typeof A.device=="object"&&A.device!==null&&"productId"in A.device&&typeof A.device.productId=="number"}async handleDeviceDisconnectionEvent(A){if(!this.isHIDConnectionEvent(A)){this._logger.error("Invalid event",{data:{event:A}});return}this._logger.info("[handleDeviceDisconnectionEvent] Device disconnected",{data:{event:A}}),this.updateTransportDiscoveredDevices();try{await A.device.close()}catch(T){this._logger.error("Error while closing device ",{data:{event:A,error:T}})}let f=this._deviceConnectionsByHidDevice.get(A.device);f&&f.eventDeviceDisconnected()}async handleDeviceReconnection(A,f){this._deviceConnectionsPendingReconnection.delete(A),this._deviceConnectionsByHidDevice.set(f,A);try{A.setDependencies({device:f}),await A.setupConnection(),A.eventDeviceConnected()}catch(T){this._logger.error("Error while reconnecting to device",{data:{event,error:T}}),A.closeConnection()}}async handleDeviceConnectionEvent(A){if(!this.isHIDConnectionEvent(A)){this._logger.error("Invalid event",{data:{event:A}});return}this._logger.info("[handleDeviceConnectionEvent] Device connected",{data:{event:A}});let f=Array.from(this._deviceConnectionsPendingReconnection).find((T)=>this.getHidUsbProductId(T.getDependencies().device)===this.getHidUsbProductId(A.device));f&&await this.handleDeviceReconnection(f,A.device),this.updateTransportDiscoveredDevices()}destroy(){this.stopListeningToConnectionEvents(),this._deviceConnectionsByHidDevice.forEach((A)=>{A.closeConnection()}),this._deviceConnectionsPendingReconnection.clear()}}var gf=({deviceModelDataSource:A,loggerServiceFactory:f,apduSenderServiceFactory:T,apduReceiverServiceFactory:N})=>new ff(A,f,T,N);export{gf as webHidTransportFactory,Uf as webHidIdentifier,d as WebHidTransportNotSupportedError,ff as WebHidTransport,v as WebHidSendReportError};
|
|
15
15
|
|
|
16
|
-
//# debugId=
|
|
17
|
-
//# sourceMappingURL=chunk-
|
|
16
|
+
//# debugId=7AEA1F8CEAB9F36664756E2164756E21
|
|
17
|
+
//# sourceMappingURL=chunk-tgvgr630.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../node_modules/.bun/@ledgerhq+device-transport-kit-web-hid@1.2.4+
|
|
3
|
+
"sources": ["../../../node_modules/.bun/@ledgerhq+device-transport-kit-web-hid@1.2.4+7c70d570025ef4d2/node_modules/@ledgerhq/device-transport-kit-web-hid/lib/esm/api/model/Errors.js", "../../../node_modules/.bun/tslib@1.14.1/node_modules/tslib/tslib.es6.js", "../../../node_modules/.bun/@sentry+utils@6.19.7/node_modules/@sentry/utils/esm/env.js", "../../../node_modules/.bun/@sentry+utils@6.19.7/node_modules/@sentry/utils/esm/node.js", "../../../node_modules/.bun/@sentry+utils@6.19.7/node_modules/@sentry/utils/esm/global.js", "../../../node_modules/.bun/@sentry+utils@6.19.7/node_modules/@sentry/utils/esm/is.js", "../../../node_modules/.bun/@sentry+utils@6.19.7/node_modules/@sentry/utils/esm/flags.js", "../../../node_modules/.bun/@sentry+utils@6.19.7/node_modules/@sentry/utils/esm/logger.js", "../../../node_modules/.bun/@sentry+utils@6.19.7/node_modules/@sentry/utils/esm/object.js", "../../../node_modules/.bun/@sentry+utils@6.19.7/node_modules/@sentry/utils/esm/misc.js", "../../../node_modules/.bun/@sentry+utils@6.19.7/node_modules/@sentry/utils/esm/syncpromise.js", "../../../node_modules/.bun/@sentry+utils@6.19.7/node_modules/@sentry/utils/esm/time.js", "../../../node_modules/.bun/@sentry+hub@6.19.7/node_modules/@sentry/hub/esm/flags.js", "../../../node_modules/.bun/@sentry+hub@6.19.7/node_modules/@sentry/hub/esm/scope.js", "../../../node_modules/.bun/@sentry+hub@6.19.7/node_modules/@sentry/hub/esm/session.js", "../../../node_modules/.bun/@sentry+hub@6.19.7/node_modules/@sentry/hub/esm/hub.js", "../../../node_modules/.bun/@sentry+minimal@6.19.7/node_modules/@sentry/minimal/esm/index.js", "../../../node_modules/.bun/@ledgerhq+device-transport-kit-web-hid@1.2.4+7c70d570025ef4d2/node_modules/@ledgerhq/device-transport-kit-web-hid/lib/esm/api/transport/WebHidTransport.js", "../../../node_modules/.bun/@ledgerhq+device-transport-kit-web-hid@1.2.4+7c70d570025ef4d2/node_modules/@ledgerhq/device-transport-kit-web-hid/lib/esm/api/data/WebHidConfig.js", "../../../node_modules/.bun/@ledgerhq+device-transport-kit-web-hid@1.2.4+7c70d570025ef4d2/node_modules/@ledgerhq/device-transport-kit-web-hid/lib/esm/api/transport/WebHidApduSender.js"],
|
|
4
4
|
"sourcesContent": [
|
|
5
5
|
"import{GeneralDmkError as o}from\"@ledgerhq/device-management-kit\";class d extends o{constructor(r){super(r);this.err=r}_tag=\"WebHidTransportNotSupportedError\"}class p extends o{constructor(r){super(r);this.err=r}_tag=\"WebHidSendReportError\"}export{p as WebHidSendReportError,d as WebHidTransportNotSupportedError};\n//# sourceMappingURL=Errors.js.map\n",
|
|
6
6
|
"/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n",
|
|
@@ -24,6 +24,6 @@
|
|
|
24
24
|
"import{formatApduReceivedLog as c,formatApduSentLog as a,FramerUtils as u,OpeningConnectionError as v,SendApduTimeoutError as m}from\"@ledgerhq/device-management-kit\";import*as g from\"@sentry/minimal\";import{Left as p,Maybe as s,Nothing as h,Right as l}from\"purify-ts\";import{FRAME_SIZE as A}from\"../data/WebHidConfig\";import{WebHidSendReportError as y}from\"../model/Errors\";class E{dependencies;apduSender;apduReceiver;sendApduPromiseResolver;logger;constructor({dependencies:e,apduSenderFactory:n,apduReceiverFactory:d},r){const i=s.of(u.numberToByteArray(Math.floor(Math.random()*65535),2));this.logger=r(\"WebHidApduSender\"),this.apduSender=n({frameSize:A,channel:i,padding:!0}),this.apduReceiver=d({channel:i}),this.sendApduPromiseResolver=h,this.dependencies=e,this.logger.info(\"\\u{1F50C} Connected to device\")}async sendApdu(e,n,d){let r;const i=new Promise(t=>{this.sendApduPromiseResolver=s.of((...o)=>(r&&clearTimeout(r),t(...o)))});for(const t of this.apduSender.getFrames(e))try{await this.dependencies.device.sendReport(0,new Uint8Array(t.getRawData()))}catch(o){return this.logger.info(\"Error sending frame\",{data:{error:o}}),Promise.resolve(p(new y(o)))}return this.logger.debug(a(e)),d&&(r=setTimeout(()=>{this.logger.debug(\"[sendApdu] Abort timeout\",{data:{abortTimeout:d}}),this.sendApduPromiseResolver.map(t=>t(p(new m(\"Abort timeout\"))))},d)),i}receiveHidInputReport(e){const n=new Uint8Array(e.data.buffer);this.apduReceiver.handleFrame(n).map(r=>{r.map(i=>{this.logger.debug(c(i)),this.sendApduPromiseResolver.map(t=>t(l(i)))})}).mapLeft(r=>{this.sendApduPromiseResolver.map(i=>i(p(r)))})}getDependencies(){return this.dependencies}setDependencies(e){this.dependencies=e}async setupConnection(){try{this.dependencies.device.oninputreport=e=>this.receiveHidInputReport(e),await this.dependencies.device.open()}catch(e){if(e instanceof DOMException&&e.name===\"InvalidStateError\")this.logger.info(\"Device is already opened\");else{const n=new v(e);throw this.logger.error(\"Error while opening device\",{data:{error:e}}),g.captureException(n),e}}}closeConnection(){this.logger.info(\"\\u{1F51A} Disconnect\"),this.dependencies.device.close().catch(e=>{this.logger.error(\"Error while closing device\",{data:{device:this.dependencies.device,error:e}})})}}export{E as WebHidApduSender};\n//# sourceMappingURL=WebHidApduSender.js.map\n"
|
|
25
25
|
],
|
|
26
26
|
"mappings": "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",
|
|
27
|
-
"debugId": "
|
|
27
|
+
"debugId": "7AEA1F8CEAB9F36664756E2164756E21",
|
|
28
28
|
"names": []
|
|
29
29
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{Ka as S}from"./chunk-97nsp4z6.js";import"./chunk-9a9gn4pb.js";import{hex as W}from"@scure/base";import{Chain as z,derivationPathToString as R,SwapKitError as B}from"@swapkit/helpers";import{addCardanoVkeyWitnesses as K,decodeCardanoTransaction as A,getCardanoAddressFromBytes as m,getCardanoPublicKeyHash as O}from"@swapkit/toolboxes/cardano";function T({CARDANO:j,PROTO:q}){return{derivationType:q.CardanoDerivationType.ICARUS,mainnet:{networkId:j.NETWORK_IDS.mainnet,protocolMagic:j.PROTOCOL_MAGICS.mainnet}}}function g(j){return new B({errorKey:"wallet_trezor_method_not_supported",info:{chain:z.Cardano,reason:j}})}function D(j){return new B({errorKey:"wallet_trezor_failed_to_sign_transaction",info:{chain:z.Cardano,error:j}})}async function H({address:j,amount:q,format:X,tokenGroups:Z},L,M){let Q=await m(j),J=Q===L.address?{addressParameters:{addressType:M.CardanoAddressType.BASE,path:L.path,stakingPath:L.stakingPath}}:{address:Q},U=Z?.map(({policyId:_,tokens:f})=>({policyId:W.encode(_),tokenAmounts:f.map(({amount:$,assetName:Y})=>({amount:$,assetNameBytes:W.encode(Y)}))}));return{...J,amount:q,format:X==="legacy"?M.CardanoTxOutputSerializationFormat.ARRAY_LEGACY:M.CardanoTxOutputSerializationFormat.MAP_BABBAGE,...U===void 0?{}:{tokenBundle:U}}}async function v(j,q,X){let{body:Z}=await A(j),{derivationType:L,mainnet:M}=T(X),{PROTO:Q}=X,{auxiliaryDataHash:J,fee:U,inputs:_,outputs:f,tagCborSets:$,ttl:Y,validityIntervalStart:V}=S(Z,"Trezor",g);return{inputs:_.map(({index:E,txHash:I})=>({path:q.path,prev_hash:W.encode(I),prev_index:E})),tagCborSets:$,...M,derivationType:L,fee:U,outputs:await Promise.all(f.map((E)=>H(E,q,Q))),signingMode:Q.CardanoTxSigningMode.ORDINARY_TRANSACTION,...J?{auxiliaryData:{hash:W.encode(J)}}:{},...Y===void 0?{}:{ttl:Y},...V===void 0?{}:{validityIntervalStart:V}}}async function w(j,{hash:q,witnesses:X},Z,{PROTO:L}){let{bodyHash:M}=await A(j);if(q.toLowerCase()!==M)throw D("Trezor signed a different transaction body");let Q=X.map(({pubKey:J,signature:U,type:_})=>{if(_!==L.CardanoTxWitnessType.SHELLEY_WITNESS||J.toLowerCase()!==Z)throw D("Trezor returned a witness for an unexpected key");return{publicKey:W.decode(J),signature:W.decode(U)}});return K(j,Q)}async function y({connect:j,derivationPath:q}){let[X,Z,L,M,Q]=q;if(q.length!==5||M!==0||Q===void 0)throw new B({errorKey:"wallet_trezor_derivation_path_not_supported",info:{chain:z.Cardano,derivationPath:q}});let J=R(q),U=R([X,Z,L,2,0]),{derivationType:_,mainnet:f}=T(j),$=j.default,Y=await $.cardanoGetPublicKey({bundle:[J,U].map((G)=>({derivationType:_,path:G}))});if(!Y.success)throw new B({errorKey:"wallet_trezor_failed_to_get_address",info:{chain:z.Cardano,derivationPath:q,error:Y.payload.error}});let[V,E]=Y.payload.map(({node:G})=>Buffer.from(G.public_key,"hex")),I=await O(V),N=await m(Buffer.concat([Buffer.from([f.networkId]),I,await O(E)]));async function b(G){let k=await v(G,{address:N,path:J,stakingPath:U},j),F=await $.cardanoSignTransaction(k);if(!F.success)throw D(F.payload.error);return w(G,F.payload,V.toString("hex"),j)}return{getAddress:()=>N,publicKey:V,publicKeyHash:I,signTransaction:b}}export{v as toTrezorCardanoTransaction,y as getCardanoSigner,w as addTrezorWitnesses};
|
|
2
2
|
|
|
3
|
-
//# debugId=
|
|
4
|
-
//# sourceMappingURL=chunk-
|
|
3
|
+
//# debugId=D293C8FF00D8F9DB64756E2164756E21
|
|
4
|
+
//# sourceMappingURL=chunk-v8x9ptxs.js.map
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"import { hex } from \"@scure/base\";\nimport { Chain, type DerivationPathArray, derivationPathToString, SwapKitError } from \"@swapkit/helpers\";\nimport {\n addCardanoVkeyWitnesses,\n decodeCardanoTransaction,\n getCardanoAddressFromBytes,\n getCardanoPublicKeyHash,\n} from \"@swapkit/toolboxes/cardano\";\nimport type {\n CardanoAssetGroup,\n CardanoOutput,\n CardanoSignedTxData,\n CardanoSignTransaction,\n} from \"@trezor/connect-web\";\n\nimport { type CardanoOutputFields, readCardanoBody } from \"../helpers/cardano\";\n\ntype CardanoAddressParams = { address: string; path: string; stakingPath: string };\nexport type TrezorConnectModule = typeof import(\"@trezor/connect-web\");\n\nfunction getConnectParams({ CARDANO, PROTO }: TrezorConnectModule) {\n return {\n // Trezor Suite default, same as the SwapKit keystore\n derivationType: PROTO.CardanoDerivationType.ICARUS,\n mainnet: { networkId: CARDANO.NETWORK_IDS.mainnet, protocolMagic: CARDANO.PROTOCOL_MAGICS.mainnet },\n };\n}\n\nfunction notSupported(reason: string) {\n return new SwapKitError({ errorKey: \"wallet_trezor_method_not_supported\", info: { chain: Chain.Cardano, reason } });\n}\n\nfunction signFailed(error: string) {\n return new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_sign_transaction\",\n info: { chain: Chain.Cardano, error },\n });\n}\n\nasync function toTrezorOutput(\n { address, amount, format, tokenGroups }: CardanoOutputFields,\n own: CardanoAddressParams,\n proto: TrezorConnectModule[\"PROTO\"],\n): Promise<CardanoOutput> {\n const outputAddress = await getCardanoAddressFromBytes(address);\n const destination =\n outputAddress === own.address\n ? {\n addressParameters: {\n addressType: proto.CardanoAddressType.BASE,\n path: own.path,\n stakingPath: own.stakingPath,\n },\n }\n : { address: outputAddress };\n const tokenBundle: CardanoAssetGroup[] | undefined = tokenGroups?.map(({ policyId, tokens }) => ({\n policyId: hex.encode(policyId),\n tokenAmounts: tokens.map(({ amount, assetName }) => ({ amount, assetNameBytes: hex.encode(assetName) })),\n }));\n\n return {\n ...destination,\n amount,\n format:\n format === \"legacy\"\n ? proto.CardanoTxOutputSerializationFormat.ARRAY_LEGACY\n : proto.CardanoTxOutputSerializationFormat.MAP_BABBAGE,\n ...(tokenBundle === undefined ? {} : { tokenBundle }),\n };\n}\n\nexport async function toTrezorCardanoTransaction(\n txHex: string,\n own: CardanoAddressParams,\n connect: TrezorConnectModule,\n): Promise<CardanoSignTransaction> {\n const { body } = await decodeCardanoTransaction(txHex);\n const { derivationType, mainnet } = getConnectParams(connect);\n const { PROTO: proto } = connect;\n const { auxiliaryDataHash, fee, inputs, outputs, tagCborSets, ttl, validityIntervalStart } = readCardanoBody(\n body,\n \"Trezor\",\n notSupported,\n );\n\n return {\n inputs: inputs.map(({ index, txHash }) => ({ path: own.path, prev_hash: hex.encode(txHash), prev_index: index })),\n tagCborSets,\n ...mainnet,\n derivationType,\n fee,\n outputs: await Promise.all(outputs.map((output) => toTrezorOutput(output, own, proto))),\n signingMode: proto.CardanoTxSigningMode.ORDINARY_TRANSACTION,\n ...(auxiliaryDataHash ? { auxiliaryData: { hash: hex.encode(auxiliaryDataHash) } } : {}),\n ...(ttl === undefined ? {} : { ttl }),\n ...(validityIntervalStart === undefined ? {} : { validityIntervalStart }),\n };\n}\n\nexport async function addTrezorWitnesses(\n txHex: string,\n { hash, witnesses }: Pick<CardanoSignedTxData, \"hash\" | \"witnesses\">,\n publicKey: string,\n { PROTO: proto }: TrezorConnectModule,\n) {\n const { bodyHash } = await decodeCardanoTransaction(txHex);\n\n if (hash.toLowerCase() !== bodyHash) throw signFailed(\"Trezor signed a different transaction body\");\n\n const vkeyWitnesses = witnesses.map(({ pubKey, signature, type }) => {\n if (type !== proto.CardanoTxWitnessType.SHELLEY_WITNESS || pubKey.toLowerCase() !== publicKey) {\n throw signFailed(\"Trezor returned a witness for an unexpected key\");\n }\n return { publicKey: hex.decode(pubKey), signature: hex.decode(signature) };\n });\n\n return addCardanoVkeyWitnesses(txHex, vkeyWitnesses);\n}\n\nexport async function getCardanoSigner({\n connect,\n derivationPath,\n}: {\n connect: TrezorConnectModule;\n derivationPath: DerivationPathArray;\n}) {\n const [purpose, coinType, account, role, index] = derivationPath;\n if (derivationPath.length !== 5 || role !== 0 || index === undefined) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_derivation_path_not_supported\",\n info: { chain: Chain.Cardano, derivationPath },\n });\n }\n\n const path = derivationPathToString(derivationPath);\n const stakingPath = derivationPathToString([purpose, coinType, account, 2, 0] as DerivationPathArray);\n const { derivationType, mainnet } = getConnectParams(connect);\n const TrezorConnect = connect.default;\n\n // One device call: a second one right after would need a new Connect popup\n const keysResult = await TrezorConnect.cardanoGetPublicKey({\n bundle: [path, stakingPath].map((keyPath) => ({ derivationType, path: keyPath })),\n });\n if (!keysResult.success) {\n throw new SwapKitError({\n errorKey: \"wallet_trezor_failed_to_get_address\",\n info: { chain: Chain.Cardano, derivationPath, error: keysResult.payload.error },\n });\n }\n\n const [publicKey, stakingKey] = keysResult.payload.map(({ node }) => Buffer.from(node.public_key, \"hex\")) as [\n Buffer,\n Buffer,\n ];\n const publicKeyHash = await getCardanoPublicKeyHash(publicKey);\n const address = await getCardanoAddressFromBytes(\n Buffer.concat([Buffer.from([mainnet.networkId]), publicKeyHash, await getCardanoPublicKeyHash(stakingKey)]),\n );\n\n async function signTransaction(txHex: string) {\n const params = await toTrezorCardanoTransaction(txHex, { address, path, stakingPath }, connect);\n const result = await TrezorConnect.cardanoSignTransaction(params);\n\n if (!result.success) throw signFailed(result.payload.error);\n\n return addTrezorWitnesses(txHex, result.payload, publicKey.toString(\"hex\"), connect);\n }\n\n return { getAddress: () => address, publicKey, publicKeyHash, signTransaction };\n}\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": "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",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "D293C8FF00D8F9DB64756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|