@polkahub/ledger 0.1.0 → 0.2.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/ManageLedger.js +2 -1
- package/dist/ManageLedger.js.map +1 -1
- package/dist/provider.js +7 -4
- package/dist/provider.js.map +1 -1
- package/dist/src/index.d.ts +0 -1
- package/package.json +5 -5
package/dist/ManageLedger.js
CHANGED
|
@@ -9,6 +9,7 @@ import { useContext } from 'react';
|
|
|
9
9
|
import { debounceTime, map, concatMap, filter, take, switchMap, startWith, catchError } from 'rxjs';
|
|
10
10
|
import ledgerImg from './assets/ledger.webp.js';
|
|
11
11
|
import { ledgerProviderId } from './provider.js';
|
|
12
|
+
import { addrEq } from '@polkahub/plugin';
|
|
12
13
|
|
|
13
14
|
const ManageLedger = () => {
|
|
14
15
|
const { pushContent } = useContext(ModalContext);
|
|
@@ -151,7 +152,7 @@ const ImportAccounts = ({ onClose }) => {
|
|
|
151
152
|
Checkbox,
|
|
152
153
|
{
|
|
153
154
|
checked: ledgerAccounts.some(
|
|
154
|
-
(v) => v.deviceId === acc.deviceId && v.index === acc.index && v.address
|
|
155
|
+
(v) => v.deviceId === acc.deviceId && v.index === acc.index && addrEq(v.address, acc.address)
|
|
155
156
|
),
|
|
156
157
|
onCheckedChange: (chk) => {
|
|
157
158
|
if (chk) {
|
package/dist/ManageLedger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ManageLedger.js","sources":["../src/ManageLedger.tsx"],"sourcesContent":["import {\n AddressBalance,\n AddressIdentity,\n externalizePlugin,\n ModalContext,\n usePlugin,\n} from \"@polkahub/context\";\nimport { useSetSelectedAccount } from \"@polkahub/select-account\";\nimport {\n Button,\n CardPlaceholder,\n Checkbox,\n SourceButton,\n} from \"@polkahub/ui-components\";\nimport { state, useStateObservable } from \"@react-rxjs/core\";\nimport { createSignal } from \"@react-rxjs/utils\";\nimport {\n ChevronLeft,\n ChevronRight,\n Trash2,\n TriangleAlert,\n Usb,\n} from \"lucide-react\";\nimport { FC, useContext } from \"react\";\nimport {\n catchError,\n concatMap,\n debounceTime,\n filter,\n map,\n Observable,\n startWith,\n switchMap,\n take,\n} from \"rxjs\";\nimport ledgerImg from \"./assets/ledger.webp\";\nimport {\n LedgerAccountInfo,\n LedgerProvider,\n ledgerProviderId,\n} from \"./provider\";\n\nexport const ManageLedger = () => {\n const { pushContent } = useContext(ModalContext)!;\n const ledgerProvider = usePlugin<LedgerProvider>(ledgerProviderId);\n\n return (\n <SourceButton\n label=\"Ledger\"\n onClick={() =>\n pushContent({ title: \"Ledger Accounts\", element: <LedgerAccounts /> })\n }\n disabled={!ledgerProvider}\n >\n <img src={ledgerImg} alt=\"Ledger\" className=\"h-10 rounded\" />\n </SourceButton>\n );\n};\n\nconst LedgerAccounts: FC = () => {\n const { pushContent, popContent } = useContext(ModalContext)!;\n const ledgerProvider = usePlugin<LedgerProvider>(ledgerProviderId)!;\n const ledgerAccounts = useStateObservable(ledgerProvider.accounts$);\n const setAccount = useSetSelectedAccount();\n\n return (\n <div className=\"space-y-4\">\n {ledgerAccounts.length ? (\n <div>\n <h3 className=\"font-medium text-muted-foreground\">Added addresses</h3>\n <ul className=\"space-y-2\">\n {ledgerAccounts.map((acc) => (\n <li\n key={`${acc.address}-${acc.deviceId}-${acc.index}`}\n className=\"flex gap-2 items-center\"\n >\n <Button\n variant=\"outline\"\n className=\"text-destructive\"\n type=\"button\"\n onClick={() => ledgerProvider.removeAccount(acc)}\n >\n <Trash2 />\n </Button>\n <AddressIdentity addr={acc.address} />\n <div className=\"grow\" />\n <AddressBalance addr={acc.address} />\n {setAccount && (\n <Button\n variant=\"secondary\"\n onClick={() => {\n setAccount(acc);\n }}\n >\n Select\n </Button>\n )}\n </li>\n ))}\n </ul>\n </div>\n ) : (\n <div className=\"text-sm text-muted-foreground text-center\">\n No accounts imported\n </div>\n )}\n <div className=\"flex justify-end\">\n <Button\n type=\"button\"\n onClick={() =>\n pushContent({\n title: \"Import Ledger Accounts\",\n element: <ImportAccounts onClose={popContent} />,\n })\n }\n >\n <Usb />\n Import accounts\n </Button>\n </div>\n </div>\n );\n};\n\nconst PAGE_SIZE = 5;\n\nconst [pageChange$, setPage] = createSignal<number>();\nconst page$ = state(pageChange$, 0);\ntype PageAccounts = {\n accounts: Array<LedgerAccountInfo | null>;\n error: string | null;\n};\n\nconst [plugin$, useLedgerProvider] =\n externalizePlugin<LedgerProvider>(ledgerProviderId);\n\nconst pageAccounts$ = state(\n (ctxId: string) =>\n page$.pipe(\n // React might mess it up with a double re-render.\n debounceTime(200),\n map((page) =>\n new Array(PAGE_SIZE).fill(0).map((_, i) => page * PAGE_SIZE + i)\n ),\n concatMap((idxs): Observable<PageAccounts> => {\n const value: PageAccounts = {\n accounts: idxs.map(() => null),\n error: null,\n };\n\n return plugin$(ctxId).pipe(\n filter((v) => v != null),\n take(1),\n switchMap((ledgerProvider) =>\n ledgerProvider.getLedgerAccounts$(idxs)\n ),\n map((account, i) => {\n value.accounts[i] = account;\n\n return { ...value };\n }),\n startWith({ ...value }),\n catchError((ex) => {\n console.error(ex);\n return [\n {\n ...value,\n error: ex.message,\n },\n ];\n })\n );\n })\n ),\n {\n accounts: new Array(PAGE_SIZE).fill(null),\n error: null,\n } as PageAccounts\n);\n\nconst ImportAccounts: FC<{ onClose: () => void }> = ({ onClose }) => {\n const [id, ledgerProvider] = useLedgerProvider();\n const ledgerAccounts = useStateObservable(ledgerProvider!.accounts$);\n const page = useStateObservable(page$);\n const { accounts, error } = useStateObservable(pageAccounts$(id));\n\n const allLoading = accounts.every((v) => v == null);\n const allLoaded = accounts.every((v) => v != null);\n\n const PLACEHOLDER_HEIGHT = 232;\n\n return (\n <div className=\"space-y-2\">\n {error ? (\n <div className=\"space-y-2\" style={{ height: PLACEHOLDER_HEIGHT }}>\n <div className=\"flex items-center gap-1\">\n <TriangleAlert className=\"text-destructive\" />\n <p>Error: {error}</p>\n </div>\n <Button type=\"button\" onClick={() => setPage(page)}>\n Retry\n </Button>\n </div>\n ) : allLoading ? (\n <CardPlaceholder height={PLACEHOLDER_HEIGHT} />\n ) : (\n <ul className=\"space-y-2\">\n {accounts.map((acc, i) => (\n <li key={i} className=\"flex gap-2 items-center\">\n {acc ? (\n <>\n <div className=\"text-xs text-muted-foreground tabular-nums\">\n {acc.index}.\n </div>\n <Checkbox\n checked={ledgerAccounts.some(\n (v) =>\n v.deviceId === acc.deviceId &&\n v.index === acc.index &&\n v.address === acc.address\n )}\n onCheckedChange={(chk) => {\n if (chk) {\n ledgerProvider!.addAccount(acc);\n } else {\n ledgerProvider!.removeAccount(acc);\n }\n }}\n />\n <AddressIdentity addr={acc.address} />\n <div className=\"grow\" />\n <AddressBalance addr={acc.address} />\n </>\n ) : (\n <div className=\"bg-muted w-full rounded shadow animate-pulse h-10\" />\n )}\n </li>\n ))}\n </ul>\n )}\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Button\n onClick={() => setPage(page - 1)}\n variant=\"secondary\"\n type=\"button\"\n disabled={!allLoaded || page == 0}\n >\n <ChevronLeft />\n Prev\n </Button>\n <Button\n onClick={() => setPage(page + 1)}\n variant=\"secondary\"\n type=\"button\"\n disabled={!allLoaded}\n >\n Next\n <ChevronRight />\n </Button>\n </div>\n <Button onClick={onClose} type=\"button\">\n Done\n </Button>\n </div>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ManageLedger.js","sources":["../src/ManageLedger.tsx"],"sourcesContent":["import {\n AddressBalance,\n AddressIdentity,\n externalizePlugin,\n ModalContext,\n usePlugin,\n} from \"@polkahub/context\";\nimport { useSetSelectedAccount } from \"@polkahub/select-account\";\nimport {\n Button,\n CardPlaceholder,\n Checkbox,\n SourceButton,\n} from \"@polkahub/ui-components\";\nimport { state, useStateObservable } from \"@react-rxjs/core\";\nimport { createSignal } from \"@react-rxjs/utils\";\nimport {\n ChevronLeft,\n ChevronRight,\n Trash2,\n TriangleAlert,\n Usb,\n} from \"lucide-react\";\nimport { FC, useContext } from \"react\";\nimport {\n catchError,\n concatMap,\n debounceTime,\n filter,\n map,\n Observable,\n startWith,\n switchMap,\n take,\n} from \"rxjs\";\nimport ledgerImg from \"./assets/ledger.webp\";\nimport {\n LedgerAccountInfo,\n LedgerProvider,\n ledgerProviderId,\n} from \"./provider\";\nimport { addrEq } from \"@polkahub/plugin\";\n\nexport const ManageLedger = () => {\n const { pushContent } = useContext(ModalContext)!;\n const ledgerProvider = usePlugin<LedgerProvider>(ledgerProviderId);\n\n return (\n <SourceButton\n label=\"Ledger\"\n onClick={() =>\n pushContent({ title: \"Ledger Accounts\", element: <LedgerAccounts /> })\n }\n disabled={!ledgerProvider}\n >\n <img src={ledgerImg} alt=\"Ledger\" className=\"h-10 rounded\" />\n </SourceButton>\n );\n};\n\nconst LedgerAccounts: FC = () => {\n const { pushContent, popContent } = useContext(ModalContext)!;\n const ledgerProvider = usePlugin<LedgerProvider>(ledgerProviderId)!;\n const ledgerAccounts = useStateObservable(ledgerProvider.accounts$);\n const setAccount = useSetSelectedAccount();\n\n return (\n <div className=\"space-y-4\">\n {ledgerAccounts.length ? (\n <div>\n <h3 className=\"font-medium text-muted-foreground\">Added addresses</h3>\n <ul className=\"space-y-2\">\n {ledgerAccounts.map((acc) => (\n <li\n key={`${acc.address}-${acc.deviceId}-${acc.index}`}\n className=\"flex gap-2 items-center\"\n >\n <Button\n variant=\"outline\"\n className=\"text-destructive\"\n type=\"button\"\n onClick={() => ledgerProvider.removeAccount(acc)}\n >\n <Trash2 />\n </Button>\n <AddressIdentity addr={acc.address} />\n <div className=\"grow\" />\n <AddressBalance addr={acc.address} />\n {setAccount && (\n <Button\n variant=\"secondary\"\n onClick={() => {\n setAccount(acc);\n }}\n >\n Select\n </Button>\n )}\n </li>\n ))}\n </ul>\n </div>\n ) : (\n <div className=\"text-sm text-muted-foreground text-center\">\n No accounts imported\n </div>\n )}\n <div className=\"flex justify-end\">\n <Button\n type=\"button\"\n onClick={() =>\n pushContent({\n title: \"Import Ledger Accounts\",\n element: <ImportAccounts onClose={popContent} />,\n })\n }\n >\n <Usb />\n Import accounts\n </Button>\n </div>\n </div>\n );\n};\n\nconst PAGE_SIZE = 5;\n\nconst [pageChange$, setPage] = createSignal<number>();\nconst page$ = state(pageChange$, 0);\ntype PageAccounts = {\n accounts: Array<LedgerAccountInfo | null>;\n error: string | null;\n};\n\nconst [plugin$, useLedgerProvider] =\n externalizePlugin<LedgerProvider>(ledgerProviderId);\n\nconst pageAccounts$ = state(\n (ctxId: string) =>\n page$.pipe(\n // React might mess it up with a double re-render.\n debounceTime(200),\n map((page) =>\n new Array(PAGE_SIZE).fill(0).map((_, i) => page * PAGE_SIZE + i)\n ),\n concatMap((idxs): Observable<PageAccounts> => {\n const value: PageAccounts = {\n accounts: idxs.map(() => null),\n error: null,\n };\n\n return plugin$(ctxId).pipe(\n filter((v) => v != null),\n take(1),\n switchMap((ledgerProvider) =>\n ledgerProvider.getLedgerAccounts$(idxs)\n ),\n map((account, i) => {\n value.accounts[i] = account;\n\n return { ...value };\n }),\n startWith({ ...value }),\n catchError((ex) => {\n console.error(ex);\n return [\n {\n ...value,\n error: ex.message,\n },\n ];\n })\n );\n })\n ),\n {\n accounts: new Array(PAGE_SIZE).fill(null),\n error: null,\n } as PageAccounts\n);\n\nconst ImportAccounts: FC<{ onClose: () => void }> = ({ onClose }) => {\n const [id, ledgerProvider] = useLedgerProvider();\n const ledgerAccounts = useStateObservable(ledgerProvider!.accounts$);\n const page = useStateObservable(page$);\n const { accounts, error } = useStateObservable(pageAccounts$(id));\n\n const allLoading = accounts.every((v) => v == null);\n const allLoaded = accounts.every((v) => v != null);\n\n const PLACEHOLDER_HEIGHT = 232;\n\n return (\n <div className=\"space-y-2\">\n {error ? (\n <div className=\"space-y-2\" style={{ height: PLACEHOLDER_HEIGHT }}>\n <div className=\"flex items-center gap-1\">\n <TriangleAlert className=\"text-destructive\" />\n <p>Error: {error}</p>\n </div>\n <Button type=\"button\" onClick={() => setPage(page)}>\n Retry\n </Button>\n </div>\n ) : allLoading ? (\n <CardPlaceholder height={PLACEHOLDER_HEIGHT} />\n ) : (\n <ul className=\"space-y-2\">\n {accounts.map((acc, i) => (\n <li key={i} className=\"flex gap-2 items-center\">\n {acc ? (\n <>\n <div className=\"text-xs text-muted-foreground tabular-nums\">\n {acc.index}.\n </div>\n <Checkbox\n checked={ledgerAccounts.some(\n (v) =>\n v.deviceId === acc.deviceId &&\n v.index === acc.index &&\n addrEq(v.address, acc.address)\n )}\n onCheckedChange={(chk) => {\n if (chk) {\n ledgerProvider!.addAccount(acc);\n } else {\n ledgerProvider!.removeAccount(acc);\n }\n }}\n />\n <AddressIdentity addr={acc.address} />\n <div className=\"grow\" />\n <AddressBalance addr={acc.address} />\n </>\n ) : (\n <div className=\"bg-muted w-full rounded shadow animate-pulse h-10\" />\n )}\n </li>\n ))}\n </ul>\n )}\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Button\n onClick={() => setPage(page - 1)}\n variant=\"secondary\"\n type=\"button\"\n disabled={!allLoaded || page == 0}\n >\n <ChevronLeft />\n Prev\n </Button>\n <Button\n onClick={() => setPage(page + 1)}\n variant=\"secondary\"\n type=\"button\"\n disabled={!allLoaded}\n >\n Next\n <ChevronRight />\n </Button>\n </div>\n <Button onClick={onClose} type=\"button\">\n Done\n </Button>\n </div>\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
|
package/dist/provider.js
CHANGED
|
@@ -10,6 +10,7 @@ const createLedgerProvider = (createTransport, getNetworkInfo, opts) => {
|
|
|
10
10
|
persist: localStorageProvider("ledger-acc"),
|
|
11
11
|
...opts
|
|
12
12
|
};
|
|
13
|
+
let ss58Format = 42;
|
|
13
14
|
const [ledgerAccounts$, setLedgerAccounts] = persistedState(
|
|
14
15
|
persist,
|
|
15
16
|
[]
|
|
@@ -18,8 +19,7 @@ const createLedgerProvider = (createTransport, getNetworkInfo, opts) => {
|
|
|
18
19
|
switchMap(
|
|
19
20
|
(ledger) => combineLatest({
|
|
20
21
|
ledger: [ledger],
|
|
21
|
-
deviceId: ledger.ledgerSigner.deviceId()
|
|
22
|
-
ss58Format: getNetworkInfo().then((r) => r.ss58Format)
|
|
22
|
+
deviceId: ledger.ledgerSigner.deviceId()
|
|
23
23
|
}).pipe(
|
|
24
24
|
catchError((ex) => {
|
|
25
25
|
ledger.close();
|
|
@@ -28,7 +28,7 @@ const createLedgerProvider = (createTransport, getNetworkInfo, opts) => {
|
|
|
28
28
|
)
|
|
29
29
|
),
|
|
30
30
|
switchMap(
|
|
31
|
-
({ ledger, deviceId
|
|
31
|
+
({ ledger, deviceId }) => from(idxs).pipe(
|
|
32
32
|
concatMap(async (idx) => {
|
|
33
33
|
const pk = await ledger.ledgerSigner.getPubkey(idx);
|
|
34
34
|
return {
|
|
@@ -101,7 +101,10 @@ const createLedgerProvider = (createTransport, getNetworkInfo, opts) => {
|
|
|
101
101
|
return toAccount(account);
|
|
102
102
|
},
|
|
103
103
|
removeAccount: (account) => setLedgerAccounts((v) => v.filter((acc) => !accountEq(acc, account))),
|
|
104
|
-
getLedgerAccounts
|
|
104
|
+
getLedgerAccounts$,
|
|
105
|
+
receiveContext(context) {
|
|
106
|
+
ss58Format = context.ss58Format;
|
|
107
|
+
}
|
|
105
108
|
};
|
|
106
109
|
};
|
|
107
110
|
const pkAreEq = (a, b) => a.every((v, i) => b[i] === v);
|
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 ss58Format: number;\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\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 ss58Format: getNetworkInfo().then((r) => r.ss58Format),\n }).pipe(\n catchError((ex) => {\n ledger.close();\n throw ex;\n })\n )\n ),\n switchMap(({ ledger, deviceId, ss58Format }) =>\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 };\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.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
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@polkahub/ledger",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.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.
|
|
35
|
-
"@polkahub/plugin": "0.
|
|
36
|
-
"@polkahub/ui-components": "0.
|
|
37
|
-
"@polkahub/select-account": "0.
|
|
34
|
+
"@polkahub/context": "0.2.0",
|
|
35
|
+
"@polkahub/plugin": "0.2.0",
|
|
36
|
+
"@polkahub/ui-components": "0.2.0",
|
|
37
|
+
"@polkahub/select-account": "0.2.0"
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
40
40
|
"@types/react": "^19.2.2",
|