@polkahub/ledger 0.2.1 → 0.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/provider.js CHANGED
@@ -117,7 +117,7 @@ let usingLedger = false;
117
117
  async function initializeLedgerSigner(createTransport) {
118
118
  if (!globalThis.Buffer) {
119
119
  const bufferModule = await import('buffer');
120
- globalThis.Buffer = bufferModule.Buffer;
120
+ globalThis.Buffer = bufferModule.default?.Buffer ?? bufferModule.Buffer;
121
121
  }
122
122
  if (usingLedger) throw new AlreadyInUseError();
123
123
  usingLedger = true;
@@ -1 +1 @@
1
- {"version":3,"file":"provider.js","sources":["../src/provider.ts"],"sourcesContent":["import type Transport from \"@ledgerhq/hw-transport\";\nimport { LedgerSigner } from \"@polkadot-api/ledger-signer\";\nimport {\n Account,\n AccountAddress,\n localStorageProvider,\n persistedState,\n PersistenceProvider,\n Plugin,\n} from \"@polkahub/plugin\";\nimport { DefaultedStateObservable, withDefault } from \"@react-rxjs/core\";\nimport { AccountId, type PolkadotSigner } from \"polkadot-api\";\nimport {\n catchError,\n combineLatest,\n concatMap,\n finalize,\n from,\n map,\n Observable,\n switchMap,\n} from \"rxjs\";\n\nexport const ledgerProviderId = \"ledger\";\n\nexport interface LedgerAccountInfo {\n address: AccountAddress;\n deviceId: number;\n index: number;\n}\nexport interface LedgerAccount extends Account {\n provider: \"ledger\";\n deviceId: number;\n index: number;\n}\n\nexport interface LedgerProvider extends Plugin<LedgerAccount> {\n id: \"ledger\";\n accounts$: DefaultedStateObservable<LedgerAccount[]>;\n\n setAccounts: (payload: LedgerAccountInfo[]) => void;\n addAccount: (payload: LedgerAccountInfo) => LedgerAccount;\n removeAccount: (payload: LedgerAccountInfo) => void;\n\n getLedgerAccounts$: (idx: Array<number>) => Observable<LedgerAccountInfo>;\n}\n\nexport type NetworkInfo = {\n decimals: number;\n tokenSymbol: string;\n};\n\nexport const createLedgerProvider = (\n createTransport: () => Promise<Transport>,\n getNetworkInfo: () => Promise<NetworkInfo>,\n opts?: Partial<{\n persist: PersistenceProvider;\n }>\n): LedgerProvider => {\n const { persist } = {\n persist: localStorageProvider(\"ledger-acc\"),\n ...opts,\n };\n let ss58Format = 42;\n\n const [ledgerAccounts$, setLedgerAccounts] = persistedState(\n persist,\n [] as LedgerAccountInfo[]\n );\n\n const getLedgerAccounts$ = (\n idxs: Array<number>\n ): Observable<LedgerAccountInfo> =>\n from(initializeLedgerSigner(createTransport)).pipe(\n switchMap((ledger) =>\n combineLatest({\n ledger: [ledger],\n deviceId: ledger.ledgerSigner.deviceId(),\n }).pipe(\n catchError((ex) => {\n ledger.close();\n throw ex;\n })\n )\n ),\n switchMap(({ ledger, deviceId }) =>\n from(idxs).pipe(\n concatMap(async (idx) => {\n const pk = await ledger.ledgerSigner.getPubkey(idx);\n return {\n address: AccountId(ss58Format).dec(pk),\n deviceId,\n index: idx,\n };\n }),\n finalize(() => ledger.close())\n )\n )\n );\n\n const createLedgerSigner = (account: LedgerAccountInfo): PolkadotSigner => {\n const publicKey = AccountId().enc(account.address);\n\n const operateWithSigner = async <R>(\n cb: (signer: PolkadotSigner) => Promise<R>\n ) => {\n const { ledgerSigner, close } = await initializeLedgerSigner(\n createTransport\n );\n try {\n const info = await getNetworkInfo();\n\n const signer = await ledgerSigner.getPolkadotSigner(\n info,\n account.index\n );\n if (!pkAreEq(publicKey, signer.publicKey)) {\n throw new Error(\"Device mismatch\");\n }\n\n return await cb(signer);\n } finally {\n close();\n }\n };\n\n return {\n publicKey,\n signBytes: (...args) =>\n operateWithSigner((signer) => signer.signBytes(...args)),\n signTx: (...args) =>\n operateWithSigner((signer) => signer.signTx(...args)),\n };\n };\n\n const toAccount = (info: LedgerAccountInfo): LedgerAccount => ({\n provider: ledgerProviderId,\n ...info,\n signer: createLedgerSigner(info),\n });\n\n const accounts$ = ledgerAccounts$.pipeState(\n map((accounts) => accounts.map(toAccount)),\n withDefault([])\n );\n\n const accountEq = (a: LedgerAccountInfo, b: LedgerAccountInfo) =>\n a.deviceId === b.deviceId && a.index === b.index;\n return {\n id: ledgerProviderId,\n deserialize: (acc) =>\n toAccount({\n address: acc.address,\n deviceId: (acc.extra as LedgerAccountInfo).deviceId,\n index: (acc.extra as LedgerAccountInfo).index,\n }),\n serialize: ({ address, deviceId, index, provider }) => ({\n address,\n provider,\n extra: { deviceId, index },\n }),\n eq: accountEq,\n accounts$,\n setAccounts: setLedgerAccounts,\n addAccount: (account) => {\n setLedgerAccounts((v) => {\n const set = new Set(v);\n set.add(account);\n return [...set];\n });\n return toAccount(account);\n },\n removeAccount: (account) =>\n setLedgerAccounts((v) => v.filter((acc) => !accountEq(acc, account))),\n getLedgerAccounts$,\n receiveContext(context) {\n ss58Format = context.ss58Format;\n },\n };\n};\n\nconst pkAreEq = (a: Uint8Array, b: Uint8Array) => a.every((v, i) => b[i] === v);\n\nexport class AlreadyInUseError extends Error {\n constructor() {\n super(\"Device already in use\");\n }\n}\n\nlet usingLedger = false;\nasync function initializeLedgerSigner(\n createTransport: () => Promise<Transport>\n) {\n if (!globalThis.Buffer) {\n const bufferModule = await import(\"buffer\");\n globalThis.Buffer = bufferModule.Buffer;\n }\n\n if (usingLedger) throw new AlreadyInUseError();\n usingLedger = true;\n\n let transport: Transport;\n try {\n transport = await createTransport();\n } catch (ex) {\n usingLedger = false;\n throw ex;\n }\n\n const close = () => {\n usingLedger = false;\n transport.close();\n };\n\n try {\n const ledgerSigner = new LedgerSigner(transport);\n return { ledgerSigner, transport, close };\n } catch (ex) {\n close();\n throw ex;\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provider.js","sources":["../src/provider.ts"],"sourcesContent":["import type Transport from \"@ledgerhq/hw-transport\";\nimport { LedgerSigner } from \"@polkadot-api/ledger-signer\";\nimport {\n Account,\n AccountAddress,\n localStorageProvider,\n persistedState,\n PersistenceProvider,\n Plugin,\n} from \"@polkahub/plugin\";\nimport { DefaultedStateObservable, withDefault } from \"@react-rxjs/core\";\nimport { AccountId, type PolkadotSigner } from \"polkadot-api\";\nimport {\n catchError,\n combineLatest,\n concatMap,\n finalize,\n from,\n map,\n Observable,\n switchMap,\n} from \"rxjs\";\n\nexport const ledgerProviderId = \"ledger\";\n\nexport interface LedgerAccountInfo {\n address: AccountAddress;\n deviceId: number;\n index: number;\n}\nexport interface LedgerAccount extends Account {\n provider: \"ledger\";\n deviceId: number;\n index: number;\n}\n\nexport interface LedgerProvider extends Plugin<LedgerAccount> {\n id: \"ledger\";\n accounts$: DefaultedStateObservable<LedgerAccount[]>;\n\n setAccounts: (payload: LedgerAccountInfo[]) => void;\n addAccount: (payload: LedgerAccountInfo) => LedgerAccount;\n removeAccount: (payload: LedgerAccountInfo) => void;\n\n getLedgerAccounts$: (idx: Array<number>) => Observable<LedgerAccountInfo>;\n}\n\nexport type NetworkInfo = {\n decimals: number;\n tokenSymbol: string;\n};\n\nexport const createLedgerProvider = (\n createTransport: () => Promise<Transport>,\n getNetworkInfo: () => Promise<NetworkInfo>,\n opts?: Partial<{\n persist: PersistenceProvider;\n }>\n): LedgerProvider => {\n const { persist } = {\n persist: localStorageProvider(\"ledger-acc\"),\n ...opts,\n };\n let ss58Format = 42;\n\n const [ledgerAccounts$, setLedgerAccounts] = persistedState(\n persist,\n [] as LedgerAccountInfo[]\n );\n\n const getLedgerAccounts$ = (\n idxs: Array<number>\n ): Observable<LedgerAccountInfo> =>\n from(initializeLedgerSigner(createTransport)).pipe(\n switchMap((ledger) =>\n combineLatest({\n ledger: [ledger],\n deviceId: ledger.ledgerSigner.deviceId(),\n }).pipe(\n catchError((ex) => {\n ledger.close();\n throw ex;\n })\n )\n ),\n switchMap(({ ledger, deviceId }) =>\n from(idxs).pipe(\n concatMap(async (idx) => {\n const pk = await ledger.ledgerSigner.getPubkey(idx);\n return {\n address: AccountId(ss58Format).dec(pk),\n deviceId,\n index: idx,\n };\n }),\n finalize(() => ledger.close())\n )\n )\n );\n\n const createLedgerSigner = (account: LedgerAccountInfo): PolkadotSigner => {\n const publicKey = AccountId().enc(account.address);\n\n const operateWithSigner = async <R>(\n cb: (signer: PolkadotSigner) => Promise<R>\n ) => {\n const { ledgerSigner, close } = await initializeLedgerSigner(\n createTransport\n );\n try {\n const info = await getNetworkInfo();\n\n const signer = await ledgerSigner.getPolkadotSigner(\n info,\n account.index\n );\n if (!pkAreEq(publicKey, signer.publicKey)) {\n throw new Error(\"Device mismatch\");\n }\n\n return await cb(signer);\n } finally {\n close();\n }\n };\n\n return {\n publicKey,\n signBytes: (...args) =>\n operateWithSigner((signer) => signer.signBytes(...args)),\n signTx: (...args) =>\n operateWithSigner((signer) => signer.signTx(...args)),\n };\n };\n\n const toAccount = (info: LedgerAccountInfo): LedgerAccount => ({\n provider: ledgerProviderId,\n ...info,\n signer: createLedgerSigner(info),\n });\n\n const accounts$ = ledgerAccounts$.pipeState(\n map((accounts) => accounts.map(toAccount)),\n withDefault([])\n );\n\n const accountEq = (a: LedgerAccountInfo, b: LedgerAccountInfo) =>\n a.deviceId === b.deviceId && a.index === b.index;\n return {\n id: ledgerProviderId,\n deserialize: (acc) =>\n toAccount({\n address: acc.address,\n deviceId: (acc.extra as LedgerAccountInfo).deviceId,\n index: (acc.extra as LedgerAccountInfo).index,\n }),\n serialize: ({ address, deviceId, index, provider }) => ({\n address,\n provider,\n extra: { deviceId, index },\n }),\n eq: accountEq,\n accounts$,\n setAccounts: setLedgerAccounts,\n addAccount: (account) => {\n setLedgerAccounts((v) => {\n const set = new Set(v);\n set.add(account);\n return [...set];\n });\n return toAccount(account);\n },\n removeAccount: (account) =>\n setLedgerAccounts((v) => v.filter((acc) => !accountEq(acc, account))),\n getLedgerAccounts$,\n receiveContext(context) {\n ss58Format = context.ss58Format;\n },\n };\n};\n\nconst pkAreEq = (a: Uint8Array, b: Uint8Array) => a.every((v, i) => b[i] === v);\n\nexport class AlreadyInUseError extends Error {\n constructor() {\n super(\"Device already in use\");\n }\n}\n\nlet usingLedger = false;\nasync function initializeLedgerSigner(\n createTransport: () => Promise<Transport>\n) {\n if (!globalThis.Buffer) {\n const bufferModule = await import(\"buffer\");\n globalThis.Buffer = bufferModule.default?.Buffer ?? bufferModule.Buffer;\n }\n\n if (usingLedger) throw new AlreadyInUseError();\n usingLedger = true;\n\n let transport: Transport;\n try {\n transport = await createTransport();\n } catch (ex) {\n usingLedger = false;\n throw ex;\n }\n\n const close = () => {\n usingLedger = false;\n transport.close();\n };\n\n try {\n const ledgerSigner = new LedgerSigner(transport);\n return { ledgerSigner, transport, close };\n } catch (ex) {\n close();\n throw ex;\n }\n}\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polkahub/ledger",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "license": "MIT",
5
5
  "sideEffects": false,
6
6
  "type": "module",
@@ -31,10 +31,10 @@
31
31
  "lucide-react": "^0.552.0",
32
32
  "polkadot-api": "^1.20.1",
33
33
  "rxjs": "^7.8.2",
34
- "@polkahub/context": "0.2.0",
35
- "@polkahub/plugin": "0.2.0",
36
- "@polkahub/select-account": "0.2.1",
37
- "@polkahub/ui-components": "0.2.0"
34
+ "@polkahub/context": "0.3.0",
35
+ "@polkahub/plugin": "0.3.0",
36
+ "@polkahub/select-account": "0.3.0",
37
+ "@polkahub/ui-components": "0.3.0"
38
38
  },
39
39
  "peerDependencies": {
40
40
  "@types/react": "^19.2.2",