@rango-dev/provider-trezor 0.28.1-next.2 → 0.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/chunk-DRNBRMLU.js +2 -0
  2. package/dist/chunk-DRNBRMLU.js.map +7 -0
  3. package/dist/ethereum-AWO7VVVT.js +2 -0
  4. package/dist/ethereum-AWO7VVVT.js.map +7 -0
  5. package/dist/{utils.d.ts → legacy/helpers.d.ts} +2 -2
  6. package/dist/legacy/index.d.ts +18 -0
  7. package/dist/mod.d.ts +1 -1
  8. package/dist/mod.js +1 -1
  9. package/dist/mod.js.map +4 -4
  10. package/dist/provider-trezor.build.json +1 -1
  11. package/dist/provider.d.ts +1 -1
  12. package/dist/state.d.ts +0 -2
  13. package/package.json +4 -9
  14. package/readme.md +0 -15
  15. package/src/constants.ts +1 -23
  16. package/src/{utils.ts → legacy/helpers.ts} +14 -13
  17. package/src/legacy/index.ts +151 -0
  18. package/src/mod.ts +5 -1
  19. package/src/namespaces/evm.ts +14 -4
  20. package/src/provider.ts +0 -2
  21. package/src/signer.ts +0 -4
  22. package/src/signers/ethereum.ts +8 -8
  23. package/src/state.ts +0 -15
  24. package/dist/actions/utxo.d.ts +0 -12
  25. package/dist/chunk-4A5SID3U.js +0 -2
  26. package/dist/chunk-4A5SID3U.js.map +0 -7
  27. package/dist/chunk-KQD4IRQZ.js +0 -2
  28. package/dist/chunk-KQD4IRQZ.js.map +0 -7
  29. package/dist/ethereum-CRCQQH34.js +0 -2
  30. package/dist/ethereum-CRCQQH34.js.map +0 -7
  31. package/dist/init.d.ts +0 -1
  32. package/dist/namespaces/utxo.d.ts +0 -3
  33. package/dist/signers/utxo.d.ts +0 -8
  34. package/dist/utxo/config.d.ts +0 -17
  35. package/dist/utxo/psbt.d.ts +0 -29
  36. package/dist/utxo/psbt.test.d.ts +0 -1
  37. package/dist/utxo-BVUYSP2M.js +0 -2
  38. package/dist/utxo-BVUYSP2M.js.map +0 -7
  39. package/src/actions/utxo.ts +0 -56
  40. package/src/init.ts +0 -20
  41. package/src/namespaces/utxo.ts +0 -24
  42. package/src/signers/utxo.ts +0 -90
  43. package/src/utxo/config.ts +0 -67
  44. package/src/utxo/psbt.test.ts +0 -162
  45. package/src/utxo/psbt.ts +0 -96
@@ -0,0 +1,2 @@
1
+ var s=Object.defineProperty;var e=(t,r)=>s(t,"name",{value:r,configurable:!0});var n="";function l(t){n=t}e(l,"setDerivationPath");function a(){return n}e(a,"getDerivationPath");import{dynamicImportWithRefinedError as c,ETHEREUM_CHAIN_ID as i,Networks as u}from"@rango-dev/wallets-shared";var w={Failure_ActionCancelled:"User rejected the transaction."};async function d(){let t=await c(async()=>await import("@trezor/connect-web"));return t.default.default?t.default.default:t.default}e(d,"getTrezorModule");function E(){let t=new Map;return t.set(u.ETHEREUM,{chainId:i}),t}e(E,"getTrezorInstance");async function z(){let t=await d(),r=a(),o=await t.ethereumGetAddress({path:r});if(!o.success)throw new Error(o.payload.error);return{accounts:[o.payload.address],chainId:i,derivationPath:r}}e(z,"getEthereumAccounts");var P=e(t=>t&&!t.startsWith("m/")?"m/"+t:t,"getTrezorNormalizedDerivationPath");export{e as a,l as b,a as c,w as d,d as e,E as f,z as g,P as h};
2
+ //# sourceMappingURL=chunk-DRNBRMLU.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/state.ts", "../src/legacy/helpers.ts"],
4
+ "sourcesContent": ["// We keep derivationPath here because we need to maintain it for signing transactions after it is set in connect method\nlet derivationPath = '';\n\nexport function setDerivationPath(path: string) {\n derivationPath = path;\n}\n\nexport function getDerivationPath() {\n return derivationPath;\n}\n", "import type { TrezorConnect } from '@trezor/connect-web';\n\nimport {\n dynamicImportWithRefinedError,\n ETHEREUM_CHAIN_ID,\n Networks,\n type ProviderConnectResult,\n} from '@rango-dev/wallets-shared';\n\nimport { getDerivationPath } from '../state';\n\nexport const trezorErrorMessages: { [statusCode: string]: string } = {\n Failure_ActionCancelled: 'User rejected the transaction.',\n};\n\n// `@trezor/connect-web` is commonjs, when we are importing it dynamically, it has some differences in different tooling. for example vite (you can check widget-examples), goes throw error. this is a workaround for solving this interop issue.\nexport async function getTrezorModule() {\n const mod = await dynamicImportWithRefinedError(\n async () => await import('@trezor/connect-web')\n );\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (mod.default.default) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return mod.default.default as unknown as TrezorConnect;\n }\n\n return mod.default;\n}\n\nexport function getTrezorInstance() {\n /*\n * Instances have a required property which is `chainId` and is using in swap execution.\n * Here we are setting it as Ethereum always since we are supporting only eth for now.\n */\n const instances = new Map();\n\n instances.set(Networks.ETHEREUM, { chainId: ETHEREUM_CHAIN_ID });\n\n return instances;\n}\n\nexport async function getEthereumAccounts(): Promise<ProviderConnectResult> {\n const TrezorConnect = await getTrezorModule();\n const derivationPath = getDerivationPath();\n const result = await TrezorConnect.ethereumGetAddress({\n path: derivationPath,\n });\n\n if (!result.success) {\n throw new Error(result.payload.error);\n }\n\n return {\n accounts: [result.payload.address],\n chainId: ETHEREUM_CHAIN_ID,\n derivationPath,\n };\n}\n\nexport const getTrezorNormalizedDerivationPath = (\n path: string // TrezorConnect needs master node to be added to derivation path\n) => (path && !path.startsWith('m/') ? 'm/' + path : path);\n"],
5
+ "mappings": "+EACA,IAAIA,EAAiB,GAEd,SAASC,EAAkBC,EAAc,CAC9CF,EAAiBE,CACnB,CAFgBC,EAAAF,EAAA,qBAIT,SAASG,GAAoB,CAClC,OAAOJ,CACT,CAFgBG,EAAAC,EAAA,qBCLhB,OACE,iCAAAC,EACA,qBAAAC,EACA,YAAAC,MAEK,4BAIA,IAAMC,EAAwD,CACnE,wBAAyB,gCAC3B,EAGA,eAAsBC,GAAkB,CACtC,IAAMC,EAAM,MAAMC,EAChB,SAAY,KAAM,QAAO,qBAAqB,CAChD,EAGA,OAAID,EAAI,QAAQ,QAGPA,EAAI,QAAQ,QAGdA,EAAI,OACb,CAbsBE,EAAAH,EAAA,mBAef,SAASI,GAAoB,CAKlC,IAAMC,EAAY,IAAI,IAEtB,OAAAA,EAAU,IAAIC,EAAS,SAAU,CAAE,QAASC,CAAkB,CAAC,EAExDF,CACT,CAVgBF,EAAAC,EAAA,qBAYhB,eAAsBI,GAAsD,CAC1E,IAAMC,EAAgB,MAAMT,EAAgB,EACtCU,EAAiBC,EAAkB,EACnCC,EAAS,MAAMH,EAAc,mBAAmB,CACpD,KAAMC,CACR,CAAC,EAED,GAAI,CAACE,EAAO,QACV,MAAM,IAAI,MAAMA,EAAO,QAAQ,KAAK,EAGtC,MAAO,CACL,SAAU,CAACA,EAAO,QAAQ,OAAO,EACjC,QAASL,EACT,eAAAG,CACF,CACF,CAhBsBP,EAAAK,EAAA,uBAkBf,IAAMK,EAAoCV,EAC/CW,GACIA,GAAQ,CAACA,EAAK,WAAW,IAAI,EAAI,KAAOA,EAAOA,EAFJ",
6
+ "names": ["derivationPath", "setDerivationPath", "path", "__name", "getDerivationPath", "dynamicImportWithRefinedError", "ETHEREUM_CHAIN_ID", "Networks", "trezorErrorMessages", "getTrezorModule", "mod", "dynamicImportWithRefinedError", "__name", "getTrezorInstance", "instances", "Networks", "ETHEREUM_CHAIN_ID", "getEthereumAccounts", "TrezorConnect", "derivationPath", "getDerivationPath", "result", "getTrezorNormalizedDerivationPath", "path"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{a as p,c as u,d as P,e as h}from"./chunk-DRNBRMLU.js";import{cleanEvmError as G,toHexQuantity as s}from"@rango-dev/signer-evm";import{DEFAULT_ETHEREUM_RPC_URL as z}from"@rango-dev/wallets-shared";import{JsonRpcProvider as S,Transaction as b}from"ethers";import"rango-types";function R(r){return typeof r=="object"&&r!==null&&"shortMessage"in r&&typeof r.shortMessage=="string"?new Error(r.shortMessage,{cause:r}):G(r)}p(R,"getTrezorErrorMessage");var f=class{static{p(this,"EthereumSigner")}async signMessage(e){let a=await h(),{success:o,payload:t}=await a.ethereumSignMessage({message:e,path:u()});if(!o)throw new Error(t.error);return t.signature}async signAndSendTx(e,a,o){try{let t=await h(),{gasPrice:w,maxFeePerGas:i,maxPriorityFeePerGas:c}=e,n=i&&c;if(n&&!i)throw new Error("Missing maxFeePerGas");if(n&&!c)throw new Error("Missing maxPriorityFeePerGas");if(!n&&!w)throw new Error("Missing gasPrice");let d=new S(z),E=await d.getTransactionCount(a),l=n?{maxFeePerGas:s(i||"0"),maxPriorityFeePerGas:s(c||"0")}:{gasPrice:s(w||"0")},g={to:e.to,data:e.data||"0x",value:s(e.value?.toString()||"0"),gasLimit:s(e.gasLimit?.toString()||"0"),chainId:Number.parseInt(o),nonce:s(E.toString()),...l},{success:y,payload:m}=await t.ethereumSignTransaction({path:u(),transaction:g});if(!y){let F=P[m?.code||""]||m.error;throw new Error(F)}let{r:T,s:M,v}=m,x=b.from({...g,nonce:Number.parseInt(g.nonce),type:n?2:0,signature:{r:T,s:M,v:parseInt(v)}}).serialized;return{hash:(await d.broadcastTransaction(x)).hash}}catch(t){throw R(t)}}};export{f as EthereumSigner,R as getTrezorErrorMessage};
2
+ //# sourceMappingURL=ethereum-AWO7VVVT.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/signers/ethereum.ts"],
4
+ "sourcesContent": ["import type { EvmTransaction } from 'rango-types/mainApi';\n\nimport { cleanEvmError, toHexQuantity } from '@rango-dev/signer-evm';\nimport { DEFAULT_ETHEREUM_RPC_URL } from '@rango-dev/wallets-shared';\nimport { JsonRpcProvider, Transaction } from 'ethers';\nimport { type GenericSigner } from 'rango-types';\n\nimport { getTrezorModule, trezorErrorMessages } from '../legacy/helpers.js';\nimport { getDerivationPath } from '../state.js';\n\nexport function getTrezorErrorMessage(error: unknown) {\n if (\n typeof error === 'object' &&\n error !== null &&\n 'shortMessage' in error &&\n typeof error.shortMessage === 'string'\n ) {\n /*\n * Some error signs have lengthy, challenging-to-read messages.\n * shortMessage is used because it is shorter and easier to understand.\n */\n return new Error(error.shortMessage, { cause: error });\n }\n return cleanEvmError(error);\n}\n\nexport class EthereumSigner implements GenericSigner<EvmTransaction> {\n async signMessage(msg: string): Promise<string> {\n const TrezorConnect = await getTrezorModule();\n\n const { success, payload } = await TrezorConnect.ethereumSignMessage({\n message: msg,\n path: getDerivationPath(),\n });\n if (!success) {\n throw new Error(payload.error);\n }\n return payload.signature;\n }\n\n async signAndSendTx(\n tx: EvmTransaction,\n fromAddress: string,\n chainId: string\n ): Promise<{ hash: string }> {\n try {\n const TrezorConnect = await getTrezorModule();\n const { gasPrice, maxFeePerGas, maxPriorityFeePerGas } = tx;\n const isEIP1559 = maxFeePerGas && maxPriorityFeePerGas;\n\n if (isEIP1559 && !maxFeePerGas) {\n throw new Error('Missing maxFeePerGas');\n }\n if (isEIP1559 && !maxPriorityFeePerGas) {\n throw new Error('Missing maxPriorityFeePerGas');\n }\n if (!isEIP1559 && !gasPrice) {\n throw new Error('Missing gasPrice');\n }\n const provider = new JsonRpcProvider(DEFAULT_ETHEREUM_RPC_URL); // Provider to broadcast transaction\n const transactionCount = await provider.getTransactionCount(fromAddress); // Get nonce\n const additionalFields = isEIP1559\n ? {\n maxFeePerGas: toHexQuantity(maxFeePerGas || '0'),\n maxPriorityFeePerGas: toHexQuantity(maxPriorityFeePerGas || '0'),\n }\n : {\n gasPrice: toHexQuantity(gasPrice || '0'),\n };\n\n const transaction = {\n to: tx.to,\n data: tx.data || '0x',\n value: toHexQuantity(tx.value?.toString() || '0'),\n gasLimit: toHexQuantity(tx.gasLimit?.toString() || '0'),\n chainId: Number.parseInt(chainId),\n nonce: toHexQuantity(transactionCount.toString()),\n ...additionalFields,\n };\n\n const { success, payload } = await TrezorConnect.ethereumSignTransaction({\n path: getDerivationPath(),\n transaction,\n });\n\n if (!success) {\n const errorMessage =\n trezorErrorMessages[payload?.code || ''] || payload.error;\n throw new Error(errorMessage);\n }\n const { r, s, v } = payload;\n\n const serializedTx = Transaction.from({\n ...transaction,\n nonce: Number.parseInt(transaction.nonce),\n /*\n * Type 0: This refers to the legacy transaction type that has been used since Ethereum's inception.\n * Type 2: This refers to the new transaction type introduced with the EIP-1559 (Ethereum Improvement Proposal 1559) update,\n * which was part of the London hard fork.\n */\n type: isEIP1559 ? 2 : 0,\n signature: { r, s, v: parseInt(v) },\n }).serialized;\n const broadcastResult = await provider.broadcastTransaction(serializedTx);\n\n return { hash: broadcastResult.hash };\n } catch (error) {\n throw getTrezorErrorMessage(error);\n }\n }\n}\n"],
5
+ "mappings": "6DAEA,OAAS,iBAAAA,EAAe,iBAAAC,MAAqB,wBAC7C,OAAS,4BAAAC,MAAgC,4BACzC,OAAS,mBAAAC,EAAiB,eAAAC,MAAmB,SAC7C,MAAmC,cAK5B,SAASC,EAAsBC,EAAgB,CACpD,OACE,OAAOA,GAAU,UACjBA,IAAU,MACV,iBAAkBA,GAClB,OAAOA,EAAM,cAAiB,SAMvB,IAAI,MAAMA,EAAM,aAAc,CAAE,MAAOA,CAAM,CAAC,EAEhDC,EAAcD,CAAK,CAC5B,CAdgBE,EAAAH,EAAA,yBAgBT,IAAMI,EAAN,KAA8D,CA1BrE,MA0BqE,CAAAD,EAAA,uBACnE,MAAM,YAAYE,EAA8B,CAC9C,IAAMC,EAAgB,MAAMC,EAAgB,EAEtC,CAAE,QAAAC,EAAS,QAAAC,CAAQ,EAAI,MAAMH,EAAc,oBAAoB,CACnE,QAASD,EACT,KAAMK,EAAkB,CAC1B,CAAC,EACD,GAAI,CAACF,EACH,MAAM,IAAI,MAAMC,EAAQ,KAAK,EAE/B,OAAOA,EAAQ,SACjB,CAEA,MAAM,cACJE,EACAC,EACAC,EAC2B,CAC3B,GAAI,CACF,IAAMP,EAAgB,MAAMC,EAAgB,EACtC,CAAE,SAAAO,EAAU,aAAAC,EAAc,qBAAAC,CAAqB,EAAIL,EACnDM,EAAYF,GAAgBC,EAElC,GAAIC,GAAa,CAACF,EAChB,MAAM,IAAI,MAAM,sBAAsB,EAExC,GAAIE,GAAa,CAACD,EAChB,MAAM,IAAI,MAAM,8BAA8B,EAEhD,GAAI,CAACC,GAAa,CAACH,EACjB,MAAM,IAAI,MAAM,kBAAkB,EAEpC,IAAMI,EAAW,IAAIC,EAAgBC,CAAwB,EACvDC,EAAmB,MAAMH,EAAS,oBAAoBN,CAAW,EACjEU,EAAmBL,EACrB,CACE,aAAcM,EAAcR,GAAgB,GAAG,EAC/C,qBAAsBQ,EAAcP,GAAwB,GAAG,CACjE,EACA,CACE,SAAUO,EAAcT,GAAY,GAAG,CACzC,EAEEU,EAAc,CAClB,GAAIb,EAAG,GACP,KAAMA,EAAG,MAAQ,KACjB,MAAOY,EAAcZ,EAAG,OAAO,SAAS,GAAK,GAAG,EAChD,SAAUY,EAAcZ,EAAG,UAAU,SAAS,GAAK,GAAG,EACtD,QAAS,OAAO,SAASE,CAAO,EAChC,MAAOU,EAAcF,EAAiB,SAAS,CAAC,EAChD,GAAGC,CACL,EAEM,CAAE,QAAAd,EAAS,QAAAC,CAAQ,EAAI,MAAMH,EAAc,wBAAwB,CACvE,KAAMI,EAAkB,EACxB,YAAAc,CACF,CAAC,EAED,GAAI,CAAChB,EAAS,CACZ,IAAMiB,EACJC,EAAoBjB,GAAS,MAAQ,EAAE,GAAKA,EAAQ,MACtD,MAAM,IAAI,MAAMgB,CAAY,CAC9B,CACA,GAAM,CAAE,EAAAE,EAAG,EAAAC,EAAG,CAAE,EAAInB,EAEdoB,EAAeC,EAAY,KAAK,CACpC,GAAGN,EACH,MAAO,OAAO,SAASA,EAAY,KAAK,EAMxC,KAAMP,EAAY,EAAI,EACtB,UAAW,CAAE,EAAAU,EAAG,EAAAC,EAAG,EAAG,SAAS,CAAC,CAAE,CACpC,CAAC,EAAE,WAGH,MAAO,CAAE,MAFe,MAAMV,EAAS,qBAAqBW,CAAY,GAEzC,IAAK,CACtC,OAAS5B,EAAO,CACd,MAAMD,EAAsBC,CAAK,CACnC,CACF,CACF",
6
+ "names": ["cleanEvmError", "toHexQuantity", "DEFAULT_ETHEREUM_RPC_URL", "JsonRpcProvider", "Transaction", "getTrezorErrorMessage", "error", "cleanEvmError", "__name", "EthereumSigner", "msg", "TrezorConnect", "getTrezorModule", "success", "payload", "getDerivationPath", "tx", "fromAddress", "chainId", "gasPrice", "maxFeePerGas", "maxPriorityFeePerGas", "isEIP1559", "provider", "JsonRpcProvider", "DEFAULT_ETHEREUM_RPC_URL", "transactionCount", "additionalFields", "toHexQuantity", "transaction", "errorMessage", "trezorErrorMessages", "r", "s", "serializedTx", "Transaction"]
7
+ }
@@ -4,12 +4,12 @@ export declare const trezorErrorMessages: {
4
4
  [statusCode: string]: string;
5
5
  };
6
6
  export declare function getTrezorModule(): Promise<TrezorConnect | (Omit<TrezorConnect, "init"> & {
7
- init: import("@trezor/connect/lib/types/api/init.js").InitType<import("@trezor/connect").ConnectSettingsWeb>;
7
+ init: import("@trezor/connect/lib/types/api/init").InitType<import("@trezor/connect").ConnectSettingsWeb>;
8
8
  } & {
9
9
  renderWebUSBButton: (className?: string) => void;
10
10
  disableWebUSB: () => void;
11
11
  requestWebUSBDevice: () => void;
12
12
  })>;
13
+ export declare function getTrezorInstance(): Map<any, any>;
13
14
  export declare function getEthereumAccounts(): Promise<ProviderConnectResult>;
14
- export declare const valueToHex: (value: string) => string;
15
15
  export declare const getTrezorNormalizedDerivationPath: (path: string) => string;
@@ -0,0 +1,18 @@
1
+ import type { Environments } from '../types.js';
2
+ import type { LegacyProviderInterface } from '@rango-dev/wallets-core/legacy';
3
+ import type { Connect, WalletInfo } from '@rango-dev/wallets-shared';
4
+ import { WalletTypes } from '@rango-dev/wallets-shared';
5
+ import { type BlockchainMeta, type SignerFactory } from 'rango-types';
6
+ import { getTrezorInstance } from './helpers.js';
7
+ export declare const config: {
8
+ type: WalletTypes;
9
+ };
10
+ export type { Environments };
11
+ type Provider = any;
12
+ export declare const init: (environments: Environments) => void;
13
+ export declare const getInstance: typeof getTrezorInstance;
14
+ export declare const connect: Connect;
15
+ export declare const getSigners: (provider: Provider) => Promise<SignerFactory>;
16
+ export declare const getWalletInfo: (allBlockChains: BlockchainMeta[]) => WalletInfo;
17
+ declare const buildLegacyProvider: () => LegacyProviderInterface;
18
+ export { buildLegacyProvider };
package/dist/mod.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- declare const versions: () => readonly [readonly ["1.0.0", import("@hub3js/core").Provider<Record<"evm", import("@hub3js/evm").EvmActions> & Record<"utxo", import("@rango-dev/wallets-core/namespaces/utxo").UtxoActions>>]];
1
+ declare const versions: () => readonly [readonly ["0.0.0", import("@rango-dev/wallets-core/legacy").LegacyProviderInterface], readonly ["1.0.0", import("@hub3js/core").Provider<Record<"evm", import("@hub3js/evm").EvmActions>>]];
2
2
  export { versions };
package/dist/mod.js CHANGED
@@ -1,2 +1,2 @@
1
- import{a as f,b as g,c as h}from"./chunk-4A5SID3U.js";import{a as o,b as d,d as l,g as a,h as u,j as c}from"./chunk-KQD4IRQZ.js";import{defineVersions as J}from"@hub3js/core/utils";import{ProviderBuilder as G}from"@hub3js/core";import{Networks as E,WalletTypes as L}from"@rango-dev/wallets-shared";import"rango-types";import{dynamicImportWithRefinedError as T}from"@rango-dev/wallets-shared";import{DefaultSignerFactory as _,TransactionType as v}from"rango-types";async function p(){let t=new _,{EthereumSigner:e}=await T(async()=>await import("./ethereum-CRCQQH34.js")),{BTCSigner:r}=await T(async()=>await import("./utxo-BVUYSP2M.js"));return t.registerSigner(v.EVM,new e),t.registerSigner(v.TRANSFER,new r),t}o(p,"getSigners");var i=L.TREZOR,w={name:"Trezor",icon:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/trezor/icon.svg",extensions:{homepage:"https://trezor.io/learn/a/download-verify-trezor-suite"},properties:[{name:"namespaces",value:{selection:"single",data:[{label:"Ethereum",value:"EVM",id:"ETH",getSupportedChains:t=>t.filter(e=>e.name===E.ETHEREUM)},{label:"Bitcoin",value:"UTXO",id:"BTC",getSupportedChains:t=>t.filter(e=>e.name===E.BTC)}]}},{name:"derivationPath",value:{data:[{id:"metamask",label:"Metamask (m/44'/60'/0'/0/index)",namespace:"EVM",generateDerivationPath:t=>`44'/60'/0'/0/${t}`},{id:"ledgerLive",label:"LedgerLive (m/44'/60'/index'/0/0)",namespace:"EVM",generateDerivationPath:t=>`44'/60'/${t}'/0/0`},{id:"legacy",label:"Legacy (m/44'/60'/0'/index)",namespace:"EVM",generateDerivationPath:t=>`44'/60'/0'/${t}`},...g.map(t=>({id:`bitcoin-${t.id}`,label:`${t.label} (m/${t.purpose}'/0'/index')`,namespace:"UTXO",generateDerivationPath:e=>`${t.purpose}'/0'/${e}'/0/0`}))]}},{name:"signers",value:{getSigners:async()=>p()}}]};import{NamespaceBuilder as N}from"@hub3js/core";import{builders as A,utils as U}from"@hub3js/evm";import*as b from"@hub3js/std/builders";import{standardizeAndThrowError as k}from"@hub3js/std/operators";import{ETHEREUM_CHAIN_ID as O}from"@rango-dev/wallets-shared";var x=!1;async function s(){if(x)return;await(await a()).init({lazyLoad:!0,manifest:y()}),x=!0}o(s,"initTrezor");var R=A.connect().action(async function(t,e,r){if(!r?.derivationPath)throw new Error("Derivation Path can not be empty.");d(c(r.derivationPath)),await s();let n=await u();return{accounts:U.formatAccountsToCAIP(n.accounts,n.chainId),network:n.chainId}}).or(k).build(),W=b.disconnect().build(),$=A.getChainId().action(()=>O).build(),z=new N("EVM",i).action(R).action(W).action($).build();import{NamespaceBuilder as j}from"@hub3js/core";import*as C from"@hub3js/std/builders";import{standardizeAndThrowError as X}from"@hub3js/std/operators";import{builders as q}from"@rango-dev/wallets-core/namespaces/utxo";import{CAIP_BITCOIN_CHAIN_ID as V,utils as F}from"@rango-dev/wallets-core/namespaces/utxo";function H(){return async(t,e)=>{if(!e?.derivationPath)throw new Error("Derivation Path can not be empty.");await s();let r=c(e.derivationPath),n=h(r);l(r);let m=await(await a()).getAddress({path:r,coin:f,scriptType:n,showOnTrezor:!1});if(!m.success)throw new Error(m.payload.error);let{address:S}=m.payload;return F.formatAccountsToCAIP([S],V)}}o(H,"connect");var P={connect:H};var Y=q.connect().action(P.connect()).or(X).build(),Z=C.disconnect().build(),I=new j("UTXO",i).action(Y).action(Z).build();var M,y=o(()=>M,"getTrezorManifest"),B=o(()=>new G(i).init(function(t,e){let[,r]=t.state();if(!e.manifest)throw new Error("Trezor manifest is required");M=e.manifest,r("installed",!0),console.debug("[trezor] instance detected.",t)}).config("metadata",w).add("evm",z).add("utxo",I).build(),"buildProvider");var $t=o(()=>J().version("1.0.0",B()).build(),"versions");export{$t as versions};
1
+ import{a as o,b as s,e as c,f as d,g as m,h as l}from"./chunk-DRNBRMLU.js";import{defineVersions as j}from"@hub3js/core/utils";import{Networks as f,WalletTypes as L}from"@rango-dev/wallets-shared";import"rango-types";import{dynamicImportWithRefinedError as z}from"@rango-dev/wallets-shared";import{DefaultSignerFactory as b,TransactionType as x}from"rango-types";async function i(){let e=new b,{EthereumSigner:r}=await z(async()=>await import("./ethereum-AWO7VVVT.js"));return e.registerSigner(x.EVM,new r),e}o(i,"getSigners");var I={appUrl:"",email:""},D={type:L.TREZOR};var k=d,g=!1,A=o(async({namespaces:e})=>{let r=[],n=await c(),t=e?.find(a=>a.namespace==="EVM");if(t)if(t.derivationPath){s(l(t.derivationPath)),g||(await n.init({lazyLoad:!0,manifest:I}),g=!0);let a=await m();r.push(a)}else throw new Error("Derivation Path can not be empty.");else throw new Error(`It appears that you have selected a namespace that is not yet supported by our system. Your namespaces: ${e?.map(a=>a.namespace)}`);return r},"connect"),C=i,S=o(e=>{let r=[],n=e.find(t=>t.name===f.ETHEREUM);return n&&r.push(n),{name:"Trezor",img:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/trezor/icon.svg",installLink:{DEFAULT:"https://trezor.io/learn/a/download-verify-trezor-suite"},color:"black",supportedChains:r,showOnMobile:!1,needsNamespace:{selection:"single",data:[{id:"ETH",value:"EVM",label:"Ethereum",getSupportedChains:t=>t.filter(a=>a.name===f.ETHEREUM)}]},needsDerivationPath:{data:[{id:"metamask",label:"Metamask (m/44'/60'/0'/0/index)",namespace:"EVM",generateDerivationPath:t=>`44'/60'/0'/0/${t}`},{id:"ledgerLive",label:"LedgerLive (m/44'/60'/index'/0/0)",namespace:"EVM",generateDerivationPath:t=>`44'/60'/${t}'/0/0`},{id:"legacy",label:"Legacy (m/44'/60'/0'/index)",namespace:"EVM",generateDerivationPath:t=>`44'/60'/0'/${t}`}]}}},"getWalletInfo"),u=o(()=>({config:D,getInstance:k,connect:A,getSigners:C,getWalletInfo:S}),"buildLegacyProvider");import{ProviderBuilder as U}from"@hub3js/core";import{Networks as B,WalletTypes as V}from"@rango-dev/wallets-shared";import"rango-types";var p=V.TREZOR,v={name:"Trezor",icon:"https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/trezor/icon.svg",extensions:{homepage:"https://trezor.io/learn/a/download-verify-trezor-suite"},properties:[{name:"namespaces",value:{selection:"single",data:[{label:"Ethereum",value:"EVM",id:"ETH",getSupportedChains:e=>e.filter(r=>r.name===B.ETHEREUM)}]}},{name:"derivationPath",value:{data:[{id:"metamask",label:"Metamask (m/44'/60'/0'/0/index)",namespace:"EVM",generateDerivationPath:e=>`44'/60'/0'/0/${e}`},{id:"ledgerLive",label:"LedgerLive (m/44'/60'/index'/0/0)",namespace:"EVM",generateDerivationPath:e=>`44'/60'/${e}'/0/0`},{id:"legacy",label:"Legacy (m/44'/60'/0'/index)",namespace:"EVM",generateDerivationPath:e=>`44'/60'/0'/${e}`}]}},{name:"signers",value:{getSigners:async()=>i()}}]};import{NamespaceBuilder as R}from"@hub3js/core";import{builders as E,utils as W}from"@hub3js/evm";import*as y from"@hub3js/std/builders";import{standardizeAndThrowError as N}from"@hub3js/std/operators";import{ETHEREUM_CHAIN_ID as H}from"@rango-dev/wallets-shared";var h=!1,_=E.connect().action(async function(e,r,n){if(!n?.derivationPath)throw new Error("Derivation Path can not be empty.");s(l(n.derivationPath)),h||(await(await c()).init({lazyLoad:!0,manifest:P()}),h=!0);let t=await m();return{accounts:W.formatAccountsToCAIP(t.accounts,t.chainId),network:t.chainId}}).or(N).build(),$=y.disconnect().build(),F=E.getChainId().action(()=>H).build(),T=new R("EVM",p).action(_).action($).action(F).build();var w,P=o(()=>w,"getTrezorManifest"),M=o(()=>new U(p).init(function(e,r){let[,n]=e.state();if(!r.manifest)throw new Error("Trezor manifest is required");w=r.manifest,n("installed",!0),console.debug("[trezor] instance detected.",e)}).config("metadata",v).add("evm",T).build(),"buildProvider");var ze=o(()=>j().version("0.0.0",u()).version("1.0.0",M()).build(),"versions");export{ze as versions};
2
2
  //# sourceMappingURL=mod.js.map
package/dist/mod.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/mod.ts", "../src/provider.ts", "../src/constants.ts", "../src/signer.ts", "../src/namespaces/evm.ts", "../src/init.ts", "../src/namespaces/utxo.ts", "../src/actions/utxo.ts"],
4
- "sourcesContent": ["import { defineVersions } from '@hub3js/core/utils';\n\nimport { buildProvider } from './provider.js';\n\nconst versions = () =>\n defineVersions().version('1.0.0', buildProvider()).build();\n\nexport { versions };\n", "import type { Environments } from './types.js';\n\nimport { ProviderBuilder } from '@hub3js/core';\n\nimport { metadata, WALLET_ID } from './constants.js';\nimport { evm } from './namespaces/evm.js';\nimport { utxo } from './namespaces/utxo.js';\n\nlet trezorManifest: Environments['manifest'];\n\nexport const getTrezorManifest = () => trezorManifest;\n\nconst buildProvider = () =>\n new ProviderBuilder(WALLET_ID)\n .init(function (context, environments: Environments) {\n const [, setState] = context.state();\n\n if (!environments.manifest) {\n throw new Error('Trezor manifest is required');\n }\n\n trezorManifest = environments.manifest;\n setState('installed', true);\n console.debug('[trezor] instance detected.', context);\n })\n .config('metadata', metadata)\n .add('evm', evm)\n .add('utxo', utxo)\n .build();\n\nexport { buildProvider };\n", "import type { ProviderMetadata } from '@hub3js/core';\n\nimport { Networks, WalletTypes } from '@rango-dev/wallets-shared';\nimport { type BlockchainMeta, type TransferBlockchainMeta } from 'rango-types';\n\nimport getSigners from './signer.js';\nimport { BITCOIN_ADDRESS_TYPES } from './utxo/config.js';\n\nexport const WALLET_ID = WalletTypes.TREZOR;\n\nexport const metadata: ProviderMetadata = {\n name: 'Trezor',\n icon: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/trezor/icon.svg',\n extensions: {\n homepage: 'https://trezor.io/learn/a/download-verify-trezor-suite',\n },\n properties: [\n {\n name: 'namespaces',\n value: {\n selection: 'single',\n data: [\n {\n label: 'Ethereum',\n value: 'EVM',\n id: 'ETH',\n getSupportedChains: (allBlockchains: BlockchainMeta[]) =>\n allBlockchains.filter(\n (chain) => chain.name === Networks.ETHEREUM\n ),\n },\n {\n label: 'Bitcoin',\n value: 'UTXO',\n id: 'BTC',\n getSupportedChains: (allBlockchains: BlockchainMeta[]) =>\n allBlockchains.filter(\n (chain): chain is TransferBlockchainMeta =>\n chain.name === Networks.BTC\n ),\n },\n ],\n },\n },\n {\n name: 'derivationPath',\n value: {\n data: [\n {\n id: 'metamask',\n label: `Metamask (m/44'/60'/0'/0/index)`,\n namespace: 'EVM',\n generateDerivationPath: (index: string) => `44'/60'/0'/0/${index}`,\n },\n {\n id: 'ledgerLive',\n label: `LedgerLive (m/44'/60'/index'/0/0)`,\n namespace: 'EVM',\n generateDerivationPath: (index: string) => `44'/60'/${index}'/0/0`,\n },\n {\n id: 'legacy',\n label: `Legacy (m/44'/60'/0'/index)`,\n namespace: 'EVM',\n generateDerivationPath: (index: string) => `44'/60'/0'/${index}`,\n },\n /*\n * Bitcoin derivation templates. The BIP-43 purpose (and thus the address\n * type) is what the user picks here; `index` selects the account.\n */\n ...BITCOIN_ADDRESS_TYPES.map((addressType) => ({\n id: `bitcoin-${addressType.id}`,\n label: `${addressType.label} (m/${addressType.purpose}'/0'/index')`,\n namespace: 'UTXO',\n generateDerivationPath: (index: string) =>\n `${addressType.purpose}'/0'/${index}'/0/0`,\n })),\n ],\n },\n },\n {\n name: 'signers',\n value: { getSigners: async () => getSigners() },\n },\n ],\n};\n", "import type { SignerFactory } from 'rango-types';\n\nimport { dynamicImportWithRefinedError } from '@rango-dev/wallets-shared';\nimport { DefaultSignerFactory, TransactionType as TxType } from 'rango-types';\n\nexport default async function getSigners(): Promise<SignerFactory> {\n const signers = new DefaultSignerFactory();\n const { EthereumSigner } = await dynamicImportWithRefinedError(\n async () => await import('./signers/ethereum.js')\n );\n const { BTCSigner } = await dynamicImportWithRefinedError(\n async () => await import('./signers/utxo.js')\n );\n signers.registerSigner(TxType.EVM, new EthereumSigner());\n signers.registerSigner(TxType.TRANSFER, new BTCSigner());\n return signers;\n}\n", "import type { EvmActions } from '@hub3js/evm';\n\nimport { NamespaceBuilder } from '@hub3js/core';\nimport { builders, utils } from '@hub3js/evm';\nimport * as commonBuilders from '@hub3js/std/builders';\nimport { standardizeAndThrowError } from '@hub3js/std/operators';\nimport { ETHEREUM_CHAIN_ID } from '@rango-dev/wallets-shared';\n\nimport { WALLET_ID } from '../constants.js';\nimport { initTrezor } from '../init.js';\nimport { setDerivationPath } from '../state.js';\nimport {\n getEthereumAccounts,\n getTrezorNormalizedDerivationPath,\n} from '../utils.js';\n\nconst connect = builders\n .connect()\n .action(async function (_context, _chain, options) {\n if (!options?.derivationPath) {\n throw new Error('Derivation Path can not be empty.');\n }\n setDerivationPath(\n getTrezorNormalizedDerivationPath(options.derivationPath)\n );\n\n await initTrezor();\n\n const result = await getEthereumAccounts();\n\n const formatAccounts = utils.formatAccountsToCAIP(\n result.accounts,\n result.chainId\n );\n\n return {\n accounts: formatAccounts,\n network: result.chainId,\n };\n })\n .or(standardizeAndThrowError)\n .build();\n\nconst disconnect = commonBuilders.disconnect<EvmActions>().build();\n\nconst getChainId = builders\n .getChainId()\n .action(() => ETHEREUM_CHAIN_ID)\n .build();\n\nconst evm = new NamespaceBuilder<EvmActions>('EVM', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .action(getChainId)\n .build();\n\nexport { evm };\n", "import { getTrezorManifest } from './provider.js';\nimport { getTrezorModule } from './utils.js';\n\nlet isTrezorInitialized = false;\n\n/*\n * `TrezorConnect.init` throws if called twice, so initialization is shared across every\n * namespace (EVM, UTXO). `lazyLoad` defers iframe injection until the first method call.\n */\nexport async function initTrezor() {\n if (isTrezorInitialized) {\n return;\n }\n const TrezorConnect = await getTrezorModule();\n await TrezorConnect.init({\n lazyLoad: true,\n manifest: getTrezorManifest(),\n });\n isTrezorInitialized = true;\n}\n", "import type { UtxoActions } from '@rango-dev/wallets-core/namespaces/utxo';\n\nimport { NamespaceBuilder } from '@hub3js/core';\nimport * as commonBuilders from '@hub3js/std/builders';\nimport { standardizeAndThrowError } from '@hub3js/std/operators';\nimport { builders } from '@rango-dev/wallets-core/namespaces/utxo';\n\nimport { utxoActions } from '../actions/utxo.js';\nimport { WALLET_ID } from '../constants.js';\n\nconst connect = builders\n .connect()\n .action(utxoActions.connect())\n .or(standardizeAndThrowError)\n .build();\n\nconst disconnect = commonBuilders.disconnect<UtxoActions>().build();\n\nconst utxo = new NamespaceBuilder<UtxoActions>('UTXO', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .build();\n\nexport { utxo };\n", "import type { Context, FunctionWithContext } from '@hub3js/core';\nimport type { UtxoActions } from '@rango-dev/wallets-core/namespaces/utxo';\n\nimport {\n CAIP_BITCOIN_CHAIN_ID,\n utils,\n} from '@rango-dev/wallets-core/namespaces/utxo';\n\nimport { initTrezor } from '../init.js';\nimport { setBitcoinDerivationPath } from '../state.js';\nimport {\n getTrezorModule,\n getTrezorNormalizedDerivationPath,\n} from '../utils.js';\nimport { BITCOIN_COIN_NAME, resolveBitcoinScriptType } from '../utxo/config.js';\n\n/**\n * Connect the Bitcoin account for the selected derivation path: derive the receive\n * address and return it CAIP-encoded with the bip122 Bitcoin chain id. The path is kept\n * (like the EVM namespace does) because Rango's PSBT has no derivation data, so the\n * signer needs it at signing time.\n */\nexport function connect(): FunctionWithContext<\n UtxoActions['connect'],\n Context\n> {\n return async (_context, options) => {\n if (!options?.derivationPath) {\n throw new Error('Derivation Path can not be empty.');\n }\n\n await initTrezor();\n\n const path = getTrezorNormalizedDerivationPath(options.derivationPath);\n const inputScriptType = resolveBitcoinScriptType(path);\n setBitcoinDerivationPath(path);\n\n const TrezorConnect = await getTrezorModule();\n const result = await TrezorConnect.getAddress({\n path,\n coin: BITCOIN_COIN_NAME,\n scriptType: inputScriptType,\n showOnTrezor: false,\n });\n\n if (!result.success) {\n throw new Error(result.payload.error);\n }\n\n const { address } = result.payload;\n\n return utils.formatAccountsToCAIP([address], CAIP_BITCOIN_CHAIN_ID);\n };\n}\n\nexport const utxoActions = { connect };\n"],
5
- "mappings": "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",
6
- "names": ["defineVersions", "ProviderBuilder", "Networks", "WalletTypes", "dynamicImportWithRefinedError", "DefaultSignerFactory", "TxType", "getSigners", "signers", "DefaultSignerFactory", "EthereumSigner", "dynamicImportWithRefinedError", "BTCSigner", "TxType", "__name", "WALLET_ID", "WalletTypes", "metadata", "allBlockchains", "chain", "Networks", "index", "BITCOIN_ADDRESS_TYPES", "addressType", "getSigners", "NamespaceBuilder", "builders", "utils", "commonBuilders", "standardizeAndThrowError", "ETHEREUM_CHAIN_ID", "isTrezorInitialized", "initTrezor", "getTrezorModule", "getTrezorManifest", "__name", "connect", "builders", "_context", "_chain", "options", "setDerivationPath", "getTrezorNormalizedDerivationPath", "initTrezor", "result", "getEthereumAccounts", "utils", "standardizeAndThrowError", "disconnect", "getChainId", "ETHEREUM_CHAIN_ID", "evm", "NamespaceBuilder", "WALLET_ID", "NamespaceBuilder", "commonBuilders", "standardizeAndThrowError", "builders", "CAIP_BITCOIN_CHAIN_ID", "utils", "connect", "_context", "options", "initTrezor", "path", "getTrezorNormalizedDerivationPath", "inputScriptType", "resolveBitcoinScriptType", "setBitcoinDerivationPath", "result", "getTrezorModule", "BITCOIN_COIN_NAME", "address", "utils", "CAIP_BITCOIN_CHAIN_ID", "__name", "utxoActions", "connect", "builders", "utxoActions", "standardizeAndThrowError", "disconnect", "utxo", "NamespaceBuilder", "WALLET_ID", "trezorManifest", "getTrezorManifest", "__name", "buildProvider", "ProviderBuilder", "WALLET_ID", "context", "environments", "setState", "metadata", "evm", "utxo", "versions", "__name", "defineVersions", "buildProvider"]
3
+ "sources": ["../src/mod.ts", "../src/legacy/index.ts", "../src/signer.ts", "../src/provider.ts", "../src/constants.ts", "../src/namespaces/evm.ts"],
4
+ "sourcesContent": ["import { defineVersions } from '@hub3js/core/utils';\n\nimport { buildLegacyProvider } from './legacy/index.js';\nimport { buildProvider } from './provider.js';\n\nconst versions = () =>\n defineVersions()\n .version('0.0.0', buildLegacyProvider())\n .version('1.0.0', buildProvider())\n .build();\n\nexport { versions };\n", "import type { Environments } from '../types.js';\nimport type { LegacyProviderInterface } from '@rango-dev/wallets-core/legacy';\nimport type {\n Connect,\n ProviderConnectResult,\n WalletInfo,\n} from '@rango-dev/wallets-shared';\n\nimport { Networks, WalletTypes } from '@rango-dev/wallets-shared';\nimport { type BlockchainMeta, type SignerFactory } from 'rango-types';\n\nimport signer from '../signer.js';\nimport { setDerivationPath } from '../state.js';\n\nimport {\n getEthereumAccounts,\n getTrezorInstance,\n getTrezorModule,\n getTrezorNormalizedDerivationPath,\n} from './helpers.js';\n\nlet trezorManifest: Environments['manifest'] = {\n appUrl: '',\n email: '',\n};\nexport const config = {\n type: WalletTypes.TREZOR,\n};\n\nexport type { Environments };\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Provider = any;\n\nexport const init = (environments: Environments) => {\n trezorManifest = environments.manifest;\n};\n\nexport const getInstance = getTrezorInstance;\n\nlet isTrezorInitialized = false;\nexport const connect: Connect = async ({ namespaces }) => {\n const results: ProviderConnectResult[] = [];\n\n const TrezorConnect = await getTrezorModule();\n\n const evmNamespace = namespaces?.find(\n (namespaceItem) => namespaceItem.namespace === 'EVM'\n );\n\n if (evmNamespace) {\n if (evmNamespace.derivationPath) {\n setDerivationPath(\n getTrezorNormalizedDerivationPath(evmNamespace.derivationPath)\n );\n\n if (!isTrezorInitialized) {\n await TrezorConnect.init({\n lazyLoad: true, // this param will prevent iframe injection until TrezorConnect.method will be called\n manifest: trezorManifest,\n });\n\n isTrezorInitialized = true;\n }\n\n const accounts = await getEthereumAccounts();\n results.push(accounts);\n } else {\n throw new Error('Derivation Path can not be empty.');\n }\n } else {\n throw new Error(\n `It appears that you have selected a namespace that is not yet supported by our system. Your namespaces: ${namespaces?.map(\n (namespaceItem) => namespaceItem.namespace\n )}`\n );\n }\n\n return results;\n};\n\nexport const getSigners: (provider: Provider) => Promise<SignerFactory> =\n signer;\n\nexport const getWalletInfo: (allBlockChains: BlockchainMeta[]) => WalletInfo = (\n allBlockChains\n) => {\n const supportedChains: BlockchainMeta[] = [];\n\n const ethereumBlockchain = allBlockChains.find(\n (chain) => chain.name === Networks.ETHEREUM\n );\n if (ethereumBlockchain) {\n supportedChains.push(ethereumBlockchain);\n }\n\n return {\n name: 'Trezor',\n img: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/trezor/icon.svg',\n installLink: {\n DEFAULT: 'https://trezor.io/learn/a/download-verify-trezor-suite',\n },\n color: 'black',\n supportedChains,\n showOnMobile: false,\n\n needsNamespace: {\n selection: 'single',\n data: [\n {\n id: 'ETH',\n value: 'EVM',\n label: 'Ethereum',\n getSupportedChains: (allBlockchains: BlockchainMeta[]) =>\n allBlockchains.filter((chain) => chain.name === Networks.ETHEREUM),\n },\n ],\n },\n needsDerivationPath: {\n data: [\n {\n id: 'metamask',\n label: `Metamask (m/44'/60'/0'/0/index)`,\n namespace: 'EVM',\n generateDerivationPath: (index: string) => `44'/60'/0'/0/${index}`,\n },\n {\n id: 'ledgerLive',\n label: `LedgerLive (m/44'/60'/index'/0/0)`,\n namespace: 'EVM',\n generateDerivationPath: (index: string) => `44'/60'/${index}'/0/0`,\n },\n {\n id: 'legacy',\n label: `Legacy (m/44'/60'/0'/index)`,\n namespace: 'EVM',\n generateDerivationPath: (index: string) => `44'/60'/0'/${index}`,\n },\n ],\n },\n };\n};\n\nconst buildLegacyProvider: () => LegacyProviderInterface = () => ({\n config,\n getInstance,\n connect,\n getSigners,\n getWalletInfo,\n});\n\nexport { buildLegacyProvider };\n", "import type { SignerFactory } from 'rango-types';\n\nimport { dynamicImportWithRefinedError } from '@rango-dev/wallets-shared';\nimport { DefaultSignerFactory, TransactionType as TxType } from 'rango-types';\n\nexport default async function getSigners(): Promise<SignerFactory> {\n const signers = new DefaultSignerFactory();\n const { EthereumSigner } = await dynamicImportWithRefinedError(\n async () => await import('./signers/ethereum.js')\n );\n signers.registerSigner(TxType.EVM, new EthereumSigner());\n return signers;\n}\n", "import type { Environments } from './types.js';\n\nimport { ProviderBuilder } from '@hub3js/core';\n\nimport { metadata, WALLET_ID } from './constants.js';\nimport { evm } from './namespaces/evm.js';\n\nlet trezorManifest: Environments['manifest'];\n\nexport const getTrezorManifest = () => trezorManifest;\n\nconst buildProvider = () =>\n new ProviderBuilder(WALLET_ID)\n .init(function (context, environments: Environments) {\n const [, setState] = context.state();\n\n if (!environments.manifest) {\n throw new Error('Trezor manifest is required');\n }\n\n trezorManifest = environments.manifest;\n setState('installed', true);\n console.debug('[trezor] instance detected.', context);\n })\n .config('metadata', metadata)\n .add('evm', evm)\n .build();\n\nexport { buildProvider };\n", "import type { ProviderMetadata } from '@hub3js/core';\n\nimport { Networks, WalletTypes } from '@rango-dev/wallets-shared';\nimport { type BlockchainMeta } from 'rango-types';\n\nimport getSigners from './signer.js';\n\nexport const WALLET_ID = WalletTypes.TREZOR;\n\nexport const metadata: ProviderMetadata = {\n name: 'Trezor',\n icon: 'https://raw.githubusercontent.com/rango-exchange/assets/main/wallets/trezor/icon.svg',\n extensions: {\n homepage: 'https://trezor.io/learn/a/download-verify-trezor-suite',\n },\n properties: [\n {\n name: 'namespaces',\n value: {\n selection: 'single',\n data: [\n {\n label: 'Ethereum',\n value: 'EVM',\n id: 'ETH',\n getSupportedChains: (allBlockchains: BlockchainMeta[]) =>\n allBlockchains.filter(\n (chain) => chain.name === Networks.ETHEREUM\n ),\n },\n ],\n },\n },\n {\n name: 'derivationPath',\n value: {\n data: [\n {\n id: 'metamask',\n label: `Metamask (m/44'/60'/0'/0/index)`,\n namespace: 'EVM',\n generateDerivationPath: (index: string) => `44'/60'/0'/0/${index}`,\n },\n {\n id: 'ledgerLive',\n label: `LedgerLive (m/44'/60'/index'/0/0)`,\n namespace: 'EVM',\n generateDerivationPath: (index: string) => `44'/60'/${index}'/0/0`,\n },\n {\n id: 'legacy',\n label: `Legacy (m/44'/60'/0'/index)`,\n namespace: 'EVM',\n generateDerivationPath: (index: string) => `44'/60'/0'/${index}`,\n },\n ],\n },\n },\n {\n name: 'signers',\n value: { getSigners: async () => getSigners() },\n },\n ],\n};\n", "import type { EvmActions } from '@hub3js/evm';\n\nimport { NamespaceBuilder } from '@hub3js/core';\nimport { builders, utils } from '@hub3js/evm';\nimport * as commonBuilders from '@hub3js/std/builders';\nimport { standardizeAndThrowError } from '@hub3js/std/operators';\nimport { ETHEREUM_CHAIN_ID } from '@rango-dev/wallets-shared';\n\nimport { WALLET_ID } from '../constants.js';\nimport {\n getEthereumAccounts,\n getTrezorModule,\n getTrezorNormalizedDerivationPath,\n} from '../legacy/helpers.js';\nimport { getTrezorManifest } from '../provider.js';\nimport { setDerivationPath } from '../state.js';\n\nlet isTrezorInitialized = false;\n\nconst connect = builders\n .connect()\n .action(async function (_context, _chain, options) {\n if (!options?.derivationPath) {\n throw new Error('Derivation Path can not be empty.');\n }\n setDerivationPath(\n getTrezorNormalizedDerivationPath(options.derivationPath)\n );\n\n if (!isTrezorInitialized) {\n const TrezorConnect = await getTrezorModule();\n await TrezorConnect.init({\n lazyLoad: true, // this param will prevent iframe injection until TrezorConnect.method will be called\n manifest: getTrezorManifest(),\n });\n isTrezorInitialized = true;\n }\n\n const result = await getEthereumAccounts();\n\n const formatAccounts = utils.formatAccountsToCAIP(\n result.accounts,\n result.chainId\n );\n\n return {\n accounts: formatAccounts,\n network: result.chainId,\n };\n })\n .or(standardizeAndThrowError)\n .build();\n\nconst disconnect = commonBuilders.disconnect<EvmActions>().build();\n\nconst getChainId = builders\n .getChainId()\n .action(() => ETHEREUM_CHAIN_ID)\n .build();\n\nconst evm = new NamespaceBuilder<EvmActions>('EVM', WALLET_ID)\n .action(connect)\n .action(disconnect)\n .action(getChainId)\n .build();\n\nexport { evm };\n"],
5
+ "mappings": "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",
6
+ "names": ["defineVersions", "Networks", "WalletTypes", "dynamicImportWithRefinedError", "DefaultSignerFactory", "TxType", "getSigners", "signers", "DefaultSignerFactory", "EthereumSigner", "dynamicImportWithRefinedError", "TxType", "__name", "trezorManifest", "config", "WalletTypes", "getInstance", "getTrezorInstance", "isTrezorInitialized", "connect", "__name", "namespaces", "results", "TrezorConnect", "getTrezorModule", "evmNamespace", "namespaceItem", "setDerivationPath", "getTrezorNormalizedDerivationPath", "trezorManifest", "accounts", "getEthereumAccounts", "getSigners", "getWalletInfo", "allBlockChains", "supportedChains", "ethereumBlockchain", "chain", "Networks", "allBlockchains", "index", "buildLegacyProvider", "config", "ProviderBuilder", "Networks", "WalletTypes", "WALLET_ID", "WalletTypes", "metadata", "allBlockchains", "chain", "Networks", "index", "getSigners", "NamespaceBuilder", "builders", "utils", "commonBuilders", "standardizeAndThrowError", "ETHEREUM_CHAIN_ID", "isTrezorInitialized", "connect", "builders", "_context", "_chain", "options", "setDerivationPath", "getTrezorNormalizedDerivationPath", "getTrezorModule", "getTrezorManifest", "result", "getEthereumAccounts", "utils", "standardizeAndThrowError", "disconnect", "getChainId", "ETHEREUM_CHAIN_ID", "evm", "NamespaceBuilder", "WALLET_ID", "trezorManifest", "getTrezorManifest", "__name", "buildProvider", "ProviderBuilder", "WALLET_ID", "context", "environments", "setState", "metadata", "evm", "versions", "__name", "defineVersions", "buildLegacyProvider", "buildProvider"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"src/state.ts":{"bytes":744,"imports":[{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/utils.ts":{"bytes":2068,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"src/state.ts","kind":"import-statement","original":"./state.js"},{"path":"@trezor/connect-web","kind":"dynamic-import","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/signers/ethereum.ts":{"bytes":3804,"imports":[{"path":"@rango-dev/signer-evm","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"ethers","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/state.ts","kind":"import-statement","original":"../state.js"},{"path":"src/utils.ts","kind":"import-statement","original":"../utils.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/utxo/config.ts":{"bytes":1961,"imports":[{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/utxo/psbt.ts":{"bytes":3426,"imports":[{"path":"@bitcoinerlab/secp256k1","kind":"import-statement","external":true},{"path":"bitcoinjs-lib","kind":"import-statement","external":true},{"path":"src/utxo/config.ts","kind":"import-statement","original":"./config.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/signers/utxo.ts":{"bytes":2629,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/state.ts","kind":"import-statement","original":"../state.js"},{"path":"src/utils.ts","kind":"import-statement","original":"../utils.js"},{"path":"src/utxo/config.ts","kind":"import-statement","original":"../utxo/config.js"},{"path":"src/utxo/psbt.ts","kind":"import-statement","original":"../utxo/psbt.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/signer.ts":{"bytes":702,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/signers/ethereum.ts","kind":"dynamic-import","original":"./signers/ethereum.js"},{"path":"src/signers/utxo.ts","kind":"dynamic-import","original":"./signers/utxo.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/constants.ts":{"bytes":2728,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/signer.ts","kind":"import-statement","original":"./signer.js"},{"path":"src/utxo/config.ts","kind":"import-statement","original":"./utxo/config.js"}],"format":"esm"},"src/init.ts":{"bytes":571,"imports":[{"path":"src/provider.ts","kind":"import-statement","original":"./provider.js"},{"path":"src/utils.ts","kind":"import-statement","original":"./utils.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/namespaces/evm.ts":{"bytes":1477,"imports":[{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@hub3js/evm","kind":"import-statement","external":true},{"path":"@hub3js/std/builders","kind":"import-statement","external":true},{"path":"@hub3js/std/operators","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"src/constants.ts","kind":"import-statement","original":"../constants.js"},{"path":"src/init.ts","kind":"import-statement","original":"../init.js"},{"path":"src/state.ts","kind":"import-statement","original":"../state.js"},{"path":"src/utils.ts","kind":"import-statement","original":"../utils.js"}],"format":"esm"},"src/actions/utxo.ts":{"bytes":1692,"imports":[{"path":"@rango-dev/wallets-core/namespaces/utxo","kind":"import-statement","external":true},{"path":"src/init.ts","kind":"import-statement","original":"../init.js"},{"path":"src/state.ts","kind":"import-statement","original":"../state.js"},{"path":"src/utils.ts","kind":"import-statement","original":"../utils.js"},{"path":"src/utxo/config.ts","kind":"import-statement","original":"../utxo/config.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/namespaces/utxo.ts":{"bytes":736,"imports":[{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@hub3js/std/builders","kind":"import-statement","external":true},{"path":"@hub3js/std/operators","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/namespaces/utxo","kind":"import-statement","external":true},{"path":"src/actions/utxo.ts","kind":"import-statement","original":"../actions/utxo.js"},{"path":"src/constants.ts","kind":"import-statement","original":"../constants.js"}],"format":"esm"},"src/provider.ts":{"bytes":878,"imports":[{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"src/constants.ts","kind":"import-statement","original":"./constants.js"},{"path":"src/namespaces/evm.ts","kind":"import-statement","original":"./namespaces/evm.js"},{"path":"src/namespaces/utxo.ts","kind":"import-statement","original":"./namespaces/utxo.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/mod.ts":{"bytes":209,"imports":[{"path":"@hub3js/core/utils","kind":"import-statement","external":true},{"path":"src/provider.ts","kind":"import-statement","original":"./provider.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"dist/mod.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":14560},"dist/mod.js":{"imports":[{"path":"dist/chunk-4A5SID3U.js","kind":"import-statement"},{"path":"dist/chunk-KQD4IRQZ.js","kind":"import-statement"},{"path":"@hub3js/core/utils","kind":"import-statement","external":true},{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"dist/ethereum-CRCQQH34.js","kind":"dynamic-import"},{"path":"dist/utxo-BVUYSP2M.js","kind":"dynamic-import"},{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@hub3js/evm","kind":"import-statement","external":true},{"path":"@hub3js/std/builders","kind":"import-statement","external":true},{"path":"@hub3js/std/operators","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@hub3js/std/builders","kind":"import-statement","external":true},{"path":"@hub3js/std/operators","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/namespaces/utxo","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-core/namespaces/utxo","kind":"import-statement","external":true}],"exports":["versions"],"entryPoint":"src/mod.ts","inputs":{"src/mod.ts":{"bytesInOutput":110},"src/provider.ts":{"bytesInOutput":353},"src/constants.ts":{"bytesInOutput":1141},"src/signer.ts":{"bytesInOutput":412},"src/namespaces/evm.ts":{"bytesInOutput":650},"src/init.ts":{"bytesInOutput":113},"src/namespaces/utxo.ts":{"bytesInOutput":342},"src/actions/utxo.ts":{"bytesInOutput":470}},"bytes":3776},"dist/ethereum-CRCQQH34.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":6375},"dist/ethereum-CRCQQH34.js":{"imports":[{"path":"dist/chunk-KQD4IRQZ.js","kind":"import-statement"},{"path":"@rango-dev/signer-evm","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"ethers","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true}],"exports":["EthereumSigner","getTrezorErrorMessage"],"entryPoint":"src/signers/ethereum.ts","inputs":{"src/signers/ethereum.ts":{"bytesInOutput":1455}},"bytes":1625},"dist/utxo-BVUYSP2M.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":9115},"dist/utxo-BVUYSP2M.js":{"imports":[{"path":"dist/chunk-4A5SID3U.js","kind":"import-statement"},{"path":"dist/chunk-KQD4IRQZ.js","kind":"import-statement"},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@bitcoinerlab/secp256k1","kind":"import-statement","external":true},{"path":"bitcoinjs-lib","kind":"import-statement","external":true}],"exports":["BTCSigner"],"entryPoint":"src/signers/utxo.ts","inputs":{"src/signers/utxo.ts":{"bytesInOutput":1107},"src/utxo/psbt.ts":{"bytesInOutput":1006}},"bytes":2280},"dist/chunk-4A5SID3U.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":2802},"dist/chunk-4A5SID3U.js":{"imports":[{"path":"dist/chunk-KQD4IRQZ.js","kind":"import-statement"}],"exports":["a","b","c"],"inputs":{"src/utxo/config.ts":{"bytesInOutput":585}},"bytes":698},"dist/chunk-KQD4IRQZ.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":4510},"dist/chunk-KQD4IRQZ.js":{"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"@trezor/connect-web","kind":"dynamic-import","external":true}],"exports":["a","b","c","d","e","f","g","h","i","j"],"inputs":{"src/state.ts":{"bytesInOutput":212},"src/utils.ts":{"bytesInOutput":709}},"bytes":1122}}}
1
+ {"inputs":{"src/state.ts":{"bytes":290,"imports":[{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/legacy/helpers.ts":{"bytes":2053,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"src/state.ts","kind":"import-statement","original":"../state"},{"path":"@trezor/connect-web","kind":"dynamic-import","external":true},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/signers/ethereum.ts":{"bytes":3834,"imports":[{"path":"@rango-dev/signer-evm","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"ethers","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/legacy/helpers.ts","kind":"import-statement","original":"../legacy/helpers.js"},{"path":"src/state.ts","kind":"import-statement","original":"../state.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/signer.ts":{"bytes":526,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/signers/ethereum.ts","kind":"dynamic-import","original":"./signers/ethereum.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/legacy/index.ts":{"bytes":4024,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/signer.ts","kind":"import-statement","original":"../signer.js"},{"path":"src/state.ts","kind":"import-statement","original":"../state.js"},{"path":"src/legacy/helpers.ts","kind":"import-statement","original":"./helpers.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/constants.ts":{"bytes":1774,"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"src/signer.ts","kind":"import-statement","original":"./signer.js"}],"format":"esm"},"src/namespaces/evm.ts":{"bytes":1843,"imports":[{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@hub3js/evm","kind":"import-statement","external":true},{"path":"@hub3js/std/builders","kind":"import-statement","external":true},{"path":"@hub3js/std/operators","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"src/constants.ts","kind":"import-statement","original":"../constants.js"},{"path":"src/legacy/helpers.ts","kind":"import-statement","original":"../legacy/helpers.js"},{"path":"src/provider.ts","kind":"import-statement","original":"../provider.js"},{"path":"src/state.ts","kind":"import-statement","original":"../state.js"}],"format":"esm"},"src/provider.ts":{"bytes":810,"imports":[{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"src/constants.ts","kind":"import-statement","original":"./constants.js"},{"path":"src/namespaces/evm.ts","kind":"import-statement","original":"./namespaces/evm.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"},"src/mod.ts":{"bytes":321,"imports":[{"path":"@hub3js/core/utils","kind":"import-statement","external":true},{"path":"src/legacy/index.ts","kind":"import-statement","original":"./legacy/index.js"},{"path":"src/provider.ts","kind":"import-statement","original":"./provider.js"},{"path":"<runtime>","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"dist/mod.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":14876},"dist/mod.js":{"imports":[{"path":"dist/chunk-DRNBRMLU.js","kind":"import-statement"},{"path":"@hub3js/core/utils","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"dist/ethereum-AWO7VVVT.js","kind":"dynamic-import"},{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true},{"path":"@hub3js/core","kind":"import-statement","external":true},{"path":"@hub3js/evm","kind":"import-statement","external":true},{"path":"@hub3js/std/builders","kind":"import-statement","external":true},{"path":"@hub3js/std/operators","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true}],"exports":["versions"],"entryPoint":"src/mod.ts","inputs":{"src/mod.ts":{"bytesInOutput":131},"src/legacy/index.ts":{"bytesInOutput":1528},"src/signer.ts":{"bytesInOutput":310},"src/provider.ts":{"bytesInOutput":339},"src/constants.ts":{"bytesInOutput":894},"src/namespaces/evm.ts":{"bytesInOutput":705}},"bytes":4038},"dist/ethereum-AWO7VVVT.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":6437},"dist/ethereum-AWO7VVVT.js":{"imports":[{"path":"dist/chunk-DRNBRMLU.js","kind":"import-statement"},{"path":"@rango-dev/signer-evm","kind":"import-statement","external":true},{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"ethers","kind":"import-statement","external":true},{"path":"rango-types","kind":"import-statement","external":true}],"exports":["EthereumSigner","getTrezorErrorMessage"],"entryPoint":"src/signers/ethereum.ts","inputs":{"src/signers/ethereum.ts":{"bytesInOutput":1474}},"bytes":1637},"dist/chunk-DRNBRMLU.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":3837},"dist/chunk-DRNBRMLU.js":{"imports":[{"path":"@rango-dev/wallets-shared","kind":"import-statement","external":true},{"path":"@trezor/connect-web","kind":"dynamic-import","external":true}],"exports":["a","b","c","d","e","f","g","h"],"inputs":{"src/state.ts":{"bytesInOutput":99},"src/legacy/helpers.ts":{"bytesInOutput":720}},"bytes":1006}}}
@@ -2,5 +2,5 @@ export declare const getTrezorManifest: () => {
2
2
  appUrl: string;
3
3
  email: string;
4
4
  };
5
- declare const buildProvider: () => import("@hub3js/core").Provider<Record<"evm", import("@hub3js/evm").EvmActions> & Record<"utxo", import("@rango-dev/wallets-core/namespaces/utxo").UtxoActions>>;
5
+ declare const buildProvider: () => import("@hub3js/core").Provider<Record<"evm", import("@hub3js/evm").EvmActions>>;
6
6
  export { buildProvider };
package/dist/state.d.ts CHANGED
@@ -1,4 +1,2 @@
1
1
  export declare function setDerivationPath(path: string): void;
2
2
  export declare function getDerivationPath(): string;
3
- export declare function setBitcoinDerivationPath(path: string): void;
4
- export declare function getBitcoinDerivationPath(): string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rango-dev/provider-trezor",
3
- "version": "0.28.1-next.2",
3
+ "version": "0.29.0",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "source": "./src/mod.ts",
@@ -21,18 +21,13 @@
21
21
  "lint": "eslint \"**/*.{ts,tsx}\""
22
22
  },
23
23
  "dependencies": {
24
- "@bitcoinerlab/secp256k1": "^1.2.0",
25
- "@hub3js/core": "^0.61.0",
26
- "@hub3js/evm": "^0.3.0",
27
- "@hub3js/std": "^0.2.0",
28
- "@rango-dev/signer-evm": "^0.43.0",
29
- "@rango-dev/wallets-shared": "^0.61.1-next.1",
24
+ "@rango-dev/signer-evm": "^0.44.0",
25
+ "@rango-dev/wallets-shared": "^0.61.0",
30
26
  "@trezor/connect-web": "^9.5.0",
31
- "bitcoinjs-lib": "^6.1.7",
32
27
  "ethers": "^6.13.2",
33
28
  "rango-types": "^0.5.0"
34
29
  },
35
30
  "publishConfig": {
36
31
  "access": "public"
37
32
  }
38
- }
33
+ }
package/readme.md CHANGED
@@ -11,21 +11,6 @@ Trezor integration for hub.
11
11
 
12
12
  We only support Ethereum for now.
13
13
 
14
- #### ⚠️ UTXO
15
-
16
- We support Bitcoin only. The connect flow lets the user pick the address type via
17
- derivation path (Native SegWit `84'`, Nested SegWit `49'`, Legacy `44'`, Taproot `86'`).
18
-
19
- Trezor Connect has no PSBT API — its `signTransaction` takes explicit `inputs`/`outputs` —
20
- so Rango's BTC PSBT is parsed with `bitcoinjs-lib` and translated into that shape, then
21
- signed and broadcast via Trezor's Blockbook backend (`push: true`). `version`, `locktime`
22
- and per-input `sequence` are preserved from the PSBT; only `SIGHASH_ALL` is supported.
23
- Rango's PSBT carries no `bip32Derivation`, so the connect-time path is kept (like the EVM
24
- signer) and applied to the inputs.
25
-
26
- Other UTXO chains (LTC/DOGE/BCH/ZEC) are not implemented — they arrive from Rango as plain
27
- transfers (no PSBT) and would use Trezor's `composeTransaction` instead.
28
-
29
14
  ### Feature
30
15
 
31
16
  #### ❌ Switch Account
package/src/constants.ts CHANGED
@@ -1,10 +1,9 @@
1
1
  import type { ProviderMetadata } from '@hub3js/core';
2
2
 
3
3
  import { Networks, WalletTypes } from '@rango-dev/wallets-shared';
4
- import { type BlockchainMeta, type TransferBlockchainMeta } from 'rango-types';
4
+ import { type BlockchainMeta } from 'rango-types';
5
5
 
6
6
  import getSigners from './signer.js';
7
- import { BITCOIN_ADDRESS_TYPES } from './utxo/config.js';
8
7
 
9
8
  export const WALLET_ID = WalletTypes.TREZOR;
10
9
 
@@ -29,16 +28,6 @@ export const metadata: ProviderMetadata = {
29
28
  (chain) => chain.name === Networks.ETHEREUM
30
29
  ),
31
30
  },
32
- {
33
- label: 'Bitcoin',
34
- value: 'UTXO',
35
- id: 'BTC',
36
- getSupportedChains: (allBlockchains: BlockchainMeta[]) =>
37
- allBlockchains.filter(
38
- (chain): chain is TransferBlockchainMeta =>
39
- chain.name === Networks.BTC
40
- ),
41
- },
42
31
  ],
43
32
  },
44
33
  },
@@ -64,17 +53,6 @@ export const metadata: ProviderMetadata = {
64
53
  namespace: 'EVM',
65
54
  generateDerivationPath: (index: string) => `44'/60'/0'/${index}`,
66
55
  },
67
- /*
68
- * Bitcoin derivation templates. The BIP-43 purpose (and thus the address
69
- * type) is what the user picks here; `index` selects the account.
70
- */
71
- ...BITCOIN_ADDRESS_TYPES.map((addressType) => ({
72
- id: `bitcoin-${addressType.id}`,
73
- label: `${addressType.label} (m/${addressType.purpose}'/0'/index')`,
74
- namespace: 'UTXO',
75
- generateDerivationPath: (index: string) =>
76
- `${addressType.purpose}'/0'/${index}'/0/0`,
77
- })),
78
56
  ],
79
57
  },
80
58
  },
@@ -3,10 +3,11 @@ import type { TrezorConnect } from '@trezor/connect-web';
3
3
  import {
4
4
  dynamicImportWithRefinedError,
5
5
  ETHEREUM_CHAIN_ID,
6
+ Networks,
6
7
  type ProviderConnectResult,
7
8
  } from '@rango-dev/wallets-shared';
8
9
 
9
- import { getDerivationPath } from './state.js';
10
+ import { getDerivationPath } from '../state';
10
11
 
11
12
  export const trezorErrorMessages: { [statusCode: string]: string } = {
12
13
  Failure_ActionCancelled: 'User rejected the transaction.',
@@ -28,6 +29,18 @@ export async function getTrezorModule() {
28
29
  return mod.default;
29
30
  }
30
31
 
32
+ export function getTrezorInstance() {
33
+ /*
34
+ * Instances have a required property which is `chainId` and is using in swap execution.
35
+ * Here we are setting it as Ethereum always since we are supporting only eth for now.
36
+ */
37
+ const instances = new Map();
38
+
39
+ instances.set(Networks.ETHEREUM, { chainId: ETHEREUM_CHAIN_ID });
40
+
41
+ return instances;
42
+ }
43
+
31
44
  export async function getEthereumAccounts(): Promise<ProviderConnectResult> {
32
45
  const TrezorConnect = await getTrezorModule();
33
46
  const derivationPath = getDerivationPath();
@@ -46,18 +59,6 @@ export async function getEthereumAccounts(): Promise<ProviderConnectResult> {
46
59
  };
47
60
  }
48
61
 
49
- /*
50
- * Using BigInt in the valueToHex function ensures that the function
51
- * can handle very large integer values that exceed the range of standard JavaScript number types.
52
- */
53
- export const valueToHex = (value: string) => {
54
- const ZERO_BIGINT = BigInt(0);
55
- const HEX_BASE = 16;
56
- return BigInt(value) > ZERO_BIGINT
57
- ? `0x${BigInt(value).toString(HEX_BASE)}`
58
- : '0x0';
59
- };
60
-
61
62
  export const getTrezorNormalizedDerivationPath = (
62
63
  path: string // TrezorConnect needs master node to be added to derivation path
63
64
  ) => (path && !path.startsWith('m/') ? 'm/' + path : path);