@polkahub/ledger 0.7.1 → 0.8.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 +6 -5
- package/dist/provider.js.map +1 -1
- package/dist/src/index.d.ts +4 -1
- package/package.json +3 -3
package/dist/provider.js
CHANGED
|
@@ -47,7 +47,7 @@ const createLedgerProvider = (createTransport, getNetworkInfo, opts) => {
|
|
|
47
47
|
const { ledgerSigner, close } = await initializeLedgerSigner(createTransport);
|
|
48
48
|
try {
|
|
49
49
|
const info = await getNetworkInfo();
|
|
50
|
-
const signer = await ledgerSigner.
|
|
50
|
+
const signer = await ledgerSigner.getTxCreator(info, account.index);
|
|
51
51
|
if (!pkAreEq(publicKey, signer.publicKey)) {
|
|
52
52
|
throw new Error("Device mismatch");
|
|
53
53
|
}
|
|
@@ -56,16 +56,17 @@ const createLedgerProvider = (createTransport, getNetworkInfo, opts) => {
|
|
|
56
56
|
close();
|
|
57
57
|
}
|
|
58
58
|
};
|
|
59
|
-
|
|
59
|
+
const createTx = (...args) => operateWithSigner((creator) => creator(...args));
|
|
60
|
+
const signerProps = {
|
|
60
61
|
publicKey,
|
|
61
|
-
signBytes: (...args) => operateWithSigner((signer) => signer.signBytes(...args))
|
|
62
|
-
signTx: (...args) => operateWithSigner((signer) => signer.signTx(...args))
|
|
62
|
+
signBytes: (...args) => operateWithSigner((signer) => signer.signBytes(...args))
|
|
63
63
|
};
|
|
64
|
+
return Object.assign(createTx, signerProps);
|
|
64
65
|
};
|
|
65
66
|
const toAccount = (info) => ({
|
|
66
67
|
provider: ledgerProviderId,
|
|
67
68
|
...info,
|
|
68
|
-
|
|
69
|
+
txCreator: createLedgerSigner(info)
|
|
69
70
|
});
|
|
70
71
|
const accounts$ = ledgerAccounts$.pipeState(
|
|
71
72
|
map((accounts) => accounts.map(toAccount)),
|
package/dist/provider.js.map
CHANGED
|
@@ -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 } =\n await initializeLedgerSigner(createTransport)\n try {\n const info = await getNetworkInfo()\n\n const signer = await ledgerSigner.getPolkadotSigner(info, account.index)\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 as any).Buffer) {\n const bufferModule = await import(\"buffer\")\n ;(globalThis as any).Buffer =\n 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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"}
|
|
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 } 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\ntype LedgerTxCreator = Awaited<ReturnType<LedgerSigner[\"getTxCreator\"]>>\n\nexport interface LedgerAccountInfo {\n address: AccountAddress\n deviceId: number\n index: number\n}\nexport interface LedgerAccount extends Account<LedgerTxCreator> {\n provider: \"ledger\"\n deviceId: number\n index: number\n txCreator: LedgerTxCreator\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): LedgerTxCreator => {\n const publicKey = AccountId().enc(account.address)\n\n const operateWithSigner = async <R>(\n cb: (signer: LedgerTxCreator) => Promise<R>,\n ) => {\n const { ledgerSigner, close } =\n await initializeLedgerSigner(createTransport)\n try {\n const info = await getNetworkInfo()\n\n const signer = await ledgerSigner.getTxCreator(info, account.index)\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 type FunctionOnly<T extends (...args: any) => any> = (\n ...args: Parameters<T>\n ) => ReturnType<T>\n const createTx: FunctionOnly<LedgerTxCreator> = (...args) =>\n operateWithSigner((creator) => creator(...args))\n\n type PropsOnly<T> = {\n [K in keyof T]: T[K]\n }\n const signerProps: PropsOnly<LedgerTxCreator> = {\n publicKey: publicKey as any,\n signBytes: (...args) =>\n operateWithSigner((signer) => signer.signBytes(...args)),\n }\n\n return Object.assign(createTx as LedgerTxCreator, signerProps)\n }\n\n const toAccount = (info: LedgerAccountInfo): LedgerAccount => ({\n provider: ledgerProviderId,\n ...info,\n txCreator: 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 as any).Buffer) {\n const bufferModule = await import(\"buffer\")\n ;(globalThis as any).Buffer =\n 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/dist/src/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import Transport from '@ledgerhq/hw-transport';
|
|
3
|
+
import { LedgerSigner } from '@polkadot-api/ledger-signer';
|
|
3
4
|
import { Account, AccountAddress, Plugin, PersistenceProvider } from '@polkahub/plugin';
|
|
4
5
|
import { DefaultedStateObservable } from '@react-rxjs/core';
|
|
5
6
|
import { Observable } from 'rxjs';
|
|
@@ -7,15 +8,17 @@ import { Observable } from 'rxjs';
|
|
|
7
8
|
declare const ManageLedger: () => react.JSX.Element;
|
|
8
9
|
|
|
9
10
|
declare const ledgerProviderId = "ledger";
|
|
11
|
+
type LedgerTxCreator = Awaited<ReturnType<LedgerSigner["getTxCreator"]>>;
|
|
10
12
|
interface LedgerAccountInfo {
|
|
11
13
|
address: AccountAddress;
|
|
12
14
|
deviceId: number;
|
|
13
15
|
index: number;
|
|
14
16
|
}
|
|
15
|
-
interface LedgerAccount extends Account {
|
|
17
|
+
interface LedgerAccount extends Account<LedgerTxCreator> {
|
|
16
18
|
provider: "ledger";
|
|
17
19
|
deviceId: number;
|
|
18
20
|
index: number;
|
|
21
|
+
txCreator: LedgerTxCreator;
|
|
19
22
|
}
|
|
20
23
|
interface LedgerProvider extends Plugin<LedgerAccount> {
|
|
21
24
|
id: "ledger";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polkahub/ledger",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"author": "Victor Oliva (https://github.com/voliva)",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"index.css"
|
|
29
29
|
],
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@polkadot-api/ledger-signer": "
|
|
31
|
+
"@polkadot-api/ledger-signer": "0.4.0-rc.2",
|
|
32
32
|
"@polkahub/context": "^*",
|
|
33
33
|
"@polkahub/plugin": "^*",
|
|
34
34
|
"@polkahub/select-account": "^*",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"@react-rxjs/utils": "^0.9.7",
|
|
38
38
|
"buffer": "^6.0.3",
|
|
39
39
|
"lucide-react": "^1.23.0",
|
|
40
|
-
"polkadot-api": "
|
|
40
|
+
"polkadot-api": "3.0.0-rc.4",
|
|
41
41
|
"rxjs": "^7.8.2"
|
|
42
42
|
},
|
|
43
43
|
"peerDependencies": {
|