@sidhujag/sysweb3-keyring 1.0.627 → 2.0.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/CHANGELOG.md +42 -0
- package/README.md +66 -0
- package/cjs/hardware-wallet-manager.js +302 -128
- package/cjs/hardware-wallet-manager.js.map +1 -1
- package/cjs/keyring-core.js +2605 -0
- package/cjs/keyring-core.js.map +1 -0
- package/cjs/keyring-manager.js +31 -2439
- package/cjs/keyring-manager.js.map +1 -1
- package/cjs/ledger/bitcoin_client/lib/appClient.js.map +1 -1
- package/cjs/ledger/host-types.js +10 -0
- package/cjs/ledger/host-types.js.map +1 -0
- package/cjs/ledger/index.js +243 -447
- package/cjs/ledger/index.js.map +1 -1
- package/cjs/ledger/prepare-psbt.js +177 -0
- package/cjs/ledger/prepare-psbt.js.map +1 -0
- package/cjs/software-hd-account.js +23 -0
- package/cjs/software-hd-account.js.map +1 -0
- package/cjs/software.js +74 -0
- package/cjs/software.js.map +1 -0
- package/cjs/storage-core.js +227 -0
- package/cjs/storage-core.js.map +1 -0
- package/cjs/storage.js +15 -210
- package/cjs/storage.js.map +1 -1
- package/cjs/transactions/ethereum.js +176 -39
- package/cjs/transactions/ethereum.js.map +1 -1
- package/cjs/transactions/evm-local-signer.js +11 -1
- package/cjs/transactions/evm-local-signer.js.map +1 -1
- package/cjs/transactions/hardware-psbt.js +159 -0
- package/cjs/transactions/hardware-psbt.js.map +1 -0
- package/cjs/transactions/prepared-evm.js +196 -0
- package/cjs/transactions/prepared-evm.js.map +1 -0
- package/cjs/transactions/syscoin-core.js +651 -0
- package/cjs/transactions/syscoin-core.js.map +1 -0
- package/cjs/transactions/syscoin.js +8 -768
- package/cjs/transactions/syscoin.js.map +1 -1
- package/cjs/trezor/connect.js +243 -0
- package/cjs/trezor/connect.js.map +1 -0
- package/cjs/trezor/index.js +96 -58
- package/cjs/trezor/index.js.map +1 -1
- package/cjs/trezor/witness.js +25 -0
- package/cjs/trezor/witness.js.map +1 -0
- package/cjs/types.js.map +1 -1
- package/cjs/utils/psbt-account-scope.js +5 -3
- package/cjs/utils/psbt-account-scope.js.map +1 -1
- package/esm/errorUtils.js +72 -0
- package/esm/errorUtils.js.map +1 -0
- package/esm/ethers-v6.js +207 -0
- package/esm/ethers-v6.js.map +1 -0
- package/esm/hardware-wallet-manager.js +643 -0
- package/esm/hardware-wallet-manager.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/appClient.js +279 -0
- package/esm/ledger/bitcoin_client/lib/appClient.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/bip32.js +49 -0
- package/esm/ledger/bitcoin_client/lib/bip32.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/buffertools.js +119 -0
- package/esm/ledger/bitcoin_client/lib/buffertools.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/clientCommands.js +269 -0
- package/esm/ledger/bitcoin_client/lib/clientCommands.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/merkelizedPsbt.js +50 -0
- package/esm/ledger/bitcoin_client/lib/merkelizedPsbt.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/merkle.js +111 -0
- package/esm/ledger/bitcoin_client/lib/merkle.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/merkleMap.js +42 -0
- package/esm/ledger/bitcoin_client/lib/merkleMap.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/policy.js +68 -0
- package/esm/ledger/bitcoin_client/lib/policy.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/psbtv2.js +645 -0
- package/esm/ledger/bitcoin_client/lib/psbtv2.js.map +1 -0
- package/esm/ledger/bitcoin_client/lib/varint.js +108 -0
- package/esm/ledger/bitcoin_client/lib/varint.js.map +1 -0
- package/esm/ledger/consts.js +4 -0
- package/esm/ledger/consts.js.map +1 -0
- package/esm/ledger/dmk-evm.js +258 -0
- package/esm/ledger/dmk-evm.js.map +1 -0
- package/esm/ledger/dmk-session.js +264 -0
- package/esm/ledger/dmk-session.js.map +1 -0
- package/esm/ledger/dmk-utxo.js +279 -0
- package/esm/ledger/dmk-utxo.js.map +1 -0
- package/esm/ledger/host-types.js +5 -0
- package/esm/ledger/host-types.js.map +1 -0
- package/esm/ledger/index.js +268 -0
- package/esm/ledger/index.js.map +1 -0
- package/esm/ledger/prepare-psbt.js +141 -0
- package/esm/ledger/prepare-psbt.js.map +1 -0
- package/esm/ledger/types.js +2 -0
- package/esm/ledger/types.js.map +1 -0
- package/esm/ledger-host.js +36 -0
- package/esm/ledger-host.js.map +1 -0
- package/esm/private-records.js +153 -0
- package/esm/private-records.js.map +1 -0
- package/esm/providers.js +588 -0
- package/esm/providers.js.map +1 -0
- package/esm/signers.js +28 -0
- package/esm/signers.js.map +1 -0
- package/esm/trezor/connect.js +206 -0
- package/esm/trezor/connect.js.map +1 -0
- package/esm/trezor/index.js +876 -0
- package/esm/trezor/index.js.map +1 -0
- package/esm/trezor/witness.js +21 -0
- package/esm/trezor/witness.js.map +1 -0
- package/esm/types.js +17 -0
- package/esm/types.js.map +1 -0
- package/esm/utils/derivation-paths.js +109 -0
- package/esm/utils/derivation-paths.js.map +1 -0
- package/esm/utils/psbt-account-scope.js +310 -0
- package/esm/utils/psbt-account-scope.js.map +1 -0
- package/package.json +55 -8
- package/types/hardware-wallet-manager.d.ts +12 -19
- package/types/keyring-core.d.ts +263 -0
- package/types/keyring-manager.d.ts +7 -224
- package/types/ledger/bitcoin_client/lib/appClient.d.ts +6 -3
- package/types/ledger/dmk-evm.d.ts +8 -0
- package/types/ledger/dmk-session.d.ts +60 -0
- package/types/ledger/dmk-utxo.d.ts +26 -0
- package/types/ledger/host-types.d.ts +131 -0
- package/types/ledger/index.d.ts +21 -58
- package/types/ledger/prepare-psbt.d.ts +3 -0
- package/types/ledger/types.d.ts +3 -0
- package/types/ledger-host.d.ts +7 -0
- package/types/software-hd-account.d.ts +16 -0
- package/types/software.d.ts +39 -0
- package/types/storage-core.d.ts +22 -0
- package/types/storage.d.ts +1 -4
- package/types/transactions/ethereum.d.ts +17 -7
- package/types/transactions/evm-local-signer.d.ts +3 -1
- package/types/transactions/hardware-psbt.d.ts +7 -0
- package/types/transactions/prepared-evm.d.ts +53 -0
- package/types/transactions/syscoin-core.d.ts +92 -0
- package/types/transactions/syscoin.d.ts +8 -67
- package/types/trezor/connect.d.ts +42 -0
- package/types/trezor/index.d.ts +22 -4
- package/types/trezor/witness.d.ts +3 -0
- package/types/types.d.ts +10 -0
- package/types/utils/psbt-account-scope.d.ts +1 -0
- package/cjs/transactions/__tests__/integration.test.js +0 -237
- package/cjs/transactions/__tests__/integration.test.js.map +0 -1
- package/cjs/transactions/__tests__/syscoin.test.js +0 -361
- package/cjs/transactions/__tests__/syscoin.test.js.map +0 -1
- package/types/transactions/__tests__/integration.test.d.ts +0 -1
- package/types/transactions/__tests__/syscoin.test.d.ts +0 -1
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/** Serializable Ledger requests. This module must remain free of device SDK imports. */
|
|
2
|
+
export interface LedgerProgress {
|
|
3
|
+
status: 'not-started' | 'pending' | 'stopped' | 'completed' | 'error';
|
|
4
|
+
requiredUserInteraction?: string;
|
|
5
|
+
step?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface LedgerOperationOptions {
|
|
8
|
+
signal?: AbortSignal;
|
|
9
|
+
onProgress?: (progress: LedgerProgress) => void;
|
|
10
|
+
}
|
|
11
|
+
export interface LedgerUtxoAccount {
|
|
12
|
+
currency: string;
|
|
13
|
+
slip44: number;
|
|
14
|
+
accountIndex: number;
|
|
15
|
+
}
|
|
16
|
+
export interface LedgerPartialSignature {
|
|
17
|
+
inputIndex: number;
|
|
18
|
+
pubkeyHex: string;
|
|
19
|
+
signatureHex: string;
|
|
20
|
+
tapleafHashHex?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface LedgerTypedData {
|
|
23
|
+
domain: Record<string, unknown>;
|
|
24
|
+
types: Record<string, {
|
|
25
|
+
name: string;
|
|
26
|
+
type: string;
|
|
27
|
+
}[]>;
|
|
28
|
+
primaryType: string;
|
|
29
|
+
message: Record<string, unknown>;
|
|
30
|
+
}
|
|
31
|
+
export type LedgerBlindSigningIntent = Readonly<{
|
|
32
|
+
kind: 'transaction';
|
|
33
|
+
accountIndex: number;
|
|
34
|
+
derivationPath: string;
|
|
35
|
+
expectedAddress: string;
|
|
36
|
+
unsignedTxHex: string;
|
|
37
|
+
chainId: string;
|
|
38
|
+
digest: string;
|
|
39
|
+
} | {
|
|
40
|
+
kind: 'typed-data';
|
|
41
|
+
accountIndex: number;
|
|
42
|
+
derivationPath: string;
|
|
43
|
+
expectedAddress: string;
|
|
44
|
+
version: 'V3' | 'V4';
|
|
45
|
+
data: LedgerTypedData;
|
|
46
|
+
digest: string;
|
|
47
|
+
}>;
|
|
48
|
+
/** Trusted host policy, never a field accepted from a dapp request. */
|
|
49
|
+
export interface LedgerEvmConfig {
|
|
50
|
+
/**
|
|
51
|
+
* The public DSK may fall back to blind signing. The host must disclose that
|
|
52
|
+
* limitation and approve this exact intent each time. No callback means deny.
|
|
53
|
+
*/
|
|
54
|
+
confirmBlindSigning?: (intent: LedgerBlindSigningIntent, signal: AbortSignal) => boolean | Promise<boolean>;
|
|
55
|
+
}
|
|
56
|
+
export interface LedgerEvmHost {
|
|
57
|
+
getAddress(request: {
|
|
58
|
+
accountIndex: number;
|
|
59
|
+
checkOnDevice?: boolean;
|
|
60
|
+
chainId?: number;
|
|
61
|
+
}, options?: LedgerOperationOptions): Promise<{
|
|
62
|
+
address: string;
|
|
63
|
+
publicKey: string;
|
|
64
|
+
}>;
|
|
65
|
+
signTransaction(request: {
|
|
66
|
+
accountIndex: number;
|
|
67
|
+
unsignedTxHex: string;
|
|
68
|
+
expectedAddress: string;
|
|
69
|
+
}, options?: LedgerOperationOptions): Promise<{
|
|
70
|
+
r: string;
|
|
71
|
+
s: string;
|
|
72
|
+
v: string;
|
|
73
|
+
}>;
|
|
74
|
+
signPersonalMessage(request: {
|
|
75
|
+
accountIndex: number;
|
|
76
|
+
messageHex: string;
|
|
77
|
+
expectedAddress: string;
|
|
78
|
+
}, options?: LedgerOperationOptions): Promise<string>;
|
|
79
|
+
signTypedData(request: {
|
|
80
|
+
accountIndex: number;
|
|
81
|
+
version: 'V3' | 'V4';
|
|
82
|
+
data: LedgerTypedData;
|
|
83
|
+
expectedAddress: string;
|
|
84
|
+
}, options?: LedgerOperationOptions): Promise<string>;
|
|
85
|
+
}
|
|
86
|
+
export interface LedgerUtxoHost {
|
|
87
|
+
getXpub(request: LedgerUtxoAccount & {
|
|
88
|
+
checkOnDevice?: boolean;
|
|
89
|
+
}, options?: LedgerOperationOptions): Promise<string>;
|
|
90
|
+
getAddress(request: LedgerUtxoAccount & {
|
|
91
|
+
checkOnDevice?: boolean;
|
|
92
|
+
}, options?: LedgerOperationOptions): Promise<string>;
|
|
93
|
+
getAccount(request: LedgerUtxoAccount & {
|
|
94
|
+
checkOnDevice?: boolean;
|
|
95
|
+
}, options?: LedgerOperationOptions): Promise<{
|
|
96
|
+
xpub: string;
|
|
97
|
+
fingerprint: string;
|
|
98
|
+
address: string;
|
|
99
|
+
}>;
|
|
100
|
+
signMessage(request: LedgerUtxoAccount & {
|
|
101
|
+
message: string;
|
|
102
|
+
addressIndex?: number;
|
|
103
|
+
change?: boolean;
|
|
104
|
+
accountXpub: string;
|
|
105
|
+
}, options?: LedgerOperationOptions): Promise<string>;
|
|
106
|
+
signPsbt(request: LedgerUtxoAccount & {
|
|
107
|
+
psbtBase64: string;
|
|
108
|
+
accountXpub: string;
|
|
109
|
+
}, options?: LedgerOperationOptions): Promise<{
|
|
110
|
+
fingerprint: string;
|
|
111
|
+
signatures: LedgerPartialSignature[];
|
|
112
|
+
}>;
|
|
113
|
+
}
|
|
114
|
+
/** The wallet authority injects this port; an absent host never opens a device. */
|
|
115
|
+
export interface LedgerHost {
|
|
116
|
+
connect(request?: {
|
|
117
|
+
useGrantedDevices?: boolean;
|
|
118
|
+
}, options?: LedgerOperationOptions): Promise<void>;
|
|
119
|
+
disconnect(): Promise<void>;
|
|
120
|
+
getStatus(): {
|
|
121
|
+
connected: boolean;
|
|
122
|
+
};
|
|
123
|
+
readonly evm: LedgerEvmHost;
|
|
124
|
+
readonly utxo: LedgerUtxoHost;
|
|
125
|
+
}
|
|
126
|
+
export declare function ledgerHostError(code: string, message: string): Error & {
|
|
127
|
+
code: string;
|
|
128
|
+
};
|
|
129
|
+
export declare const ledgerCancelledError: () => Error & {
|
|
130
|
+
code: string;
|
|
131
|
+
};
|
package/types/ledger/index.d.ts
CHANGED
|
@@ -1,62 +1,25 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import type {
|
|
4
|
-
import { IEvmMethods, IUTXOMethods } from './types';
|
|
5
|
-
|
|
6
|
-
import { HardwareWalletManager } from '../hardware-wallet-manager';
|
|
1
|
+
import { ConnectionStatus, HardwareWalletType } from '../hardware-wallet-manager';
|
|
2
|
+
import type { HardwareWalletManager } from '../hardware-wallet-manager';
|
|
3
|
+
import type { LedgerHost, LedgerUtxoHost } from './host-types';
|
|
4
|
+
import type { IEvmMethods, IUTXOMethods } from './types';
|
|
5
|
+
/** Small authority-side facade. Device SDKs belong exclusively in ledger-host. */
|
|
7
6
|
export declare class LedgerKeyring {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
private
|
|
15
|
-
private
|
|
16
|
-
|
|
17
|
-
* @param sharedHardwareWalletManager Optional shared HardwareWalletManager instance.
|
|
18
|
-
* If provided, this will be used instead of creating
|
|
19
|
-
* a new instance. This allows multiple KeyringManagers
|
|
20
|
-
* to share the same Ledger connection.
|
|
21
|
-
*/
|
|
22
|
-
constructor(sharedHardwareWalletManager?: HardwareWalletManager);
|
|
23
|
-
/**
|
|
24
|
-
* Ensure Ledger is connected with automatic retry
|
|
25
|
-
* Note: This is automatically called by all operations through executeWithRetry
|
|
26
|
-
* External callers don't need to call this directly
|
|
27
|
-
*/
|
|
28
|
-
ensureConnection(): Promise<void>;
|
|
29
|
-
private getUtxoAddress;
|
|
7
|
+
private readonly sharedHardwareWalletManager?;
|
|
8
|
+
private readonly host?;
|
|
9
|
+
readonly evm: IEvmMethods;
|
|
10
|
+
readonly utxo: IUTXOMethods;
|
|
11
|
+
private generation;
|
|
12
|
+
constructor(sharedHardwareWalletManager?: HardwareWalletManager | undefined, host?: LedgerHost | undefined);
|
|
13
|
+
private requireHost;
|
|
14
|
+
private run;
|
|
15
|
+
ensureConnection: () => Promise<void>;
|
|
30
16
|
verifyUtxoAddress: (accountIndex: number, currency: string, slip44: number) => Promise<string>;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
private sanitizeData;
|
|
39
|
-
private transformTypedData;
|
|
40
|
-
private getEvmAddressAndPubKey;
|
|
41
|
-
private signTypedData;
|
|
42
|
-
private getMasterFingerprint;
|
|
43
|
-
private buildWalletCacheKey;
|
|
44
|
-
private getOrRegisterHmac;
|
|
45
|
-
private setHdPath;
|
|
46
|
-
/**
|
|
47
|
-
* Convert PSBT to Ledger format with retry logic
|
|
48
|
-
*/
|
|
49
|
-
convertToLedgerFormat(psbt: Psbt, accountXpub: string, accountId: number, currency: string, slip44: number): Promise<Psbt>;
|
|
50
|
-
/**
|
|
51
|
-
* Execute operation with automatic retry
|
|
52
|
-
*/
|
|
53
|
-
private executeWithRetry;
|
|
54
|
-
/**
|
|
55
|
-
* Get hardware wallet status
|
|
56
|
-
*/
|
|
57
|
-
getStatus(): import("../hardware-wallet-manager").HardwareWalletStatus | undefined;
|
|
58
|
-
/**
|
|
59
|
-
* Clean up resources
|
|
60
|
-
*/
|
|
17
|
+
signUtxoMessage: (request: Parameters<LedgerUtxoHost["signMessage"]>[0]) => Promise<string>;
|
|
18
|
+
signPsbt: (request: Parameters<LedgerUtxoHost["signPsbt"]>[0]) => ReturnType<LedgerUtxoHost["signPsbt"]>;
|
|
19
|
+
getStatus(): {
|
|
20
|
+
type: HardwareWalletType;
|
|
21
|
+
connected: boolean;
|
|
22
|
+
status: ConnectionStatus;
|
|
23
|
+
};
|
|
61
24
|
destroy(): Promise<void>;
|
|
62
25
|
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { Psbt } from 'bitcoinjs-lib';
|
|
2
|
+
/** Enrich public PSBT metadata only. Callers must also enforce account scope. */
|
|
3
|
+
export declare function prepareLedgerPsbt(psbt: Psbt, accountXpub: string, accountId: number, currency: string, slip44: number, fingerprint: string): Psbt;
|
package/types/ledger/types.d.ts
CHANGED
|
@@ -30,6 +30,7 @@ export interface IEvmMethods {
|
|
|
30
30
|
signEVMTransaction: ({ rawTx, accountIndex, }: {
|
|
31
31
|
accountIndex: number;
|
|
32
32
|
rawTx: string;
|
|
33
|
+
expectedAddress: string;
|
|
33
34
|
}) => Promise<{
|
|
34
35
|
r: string;
|
|
35
36
|
s: string;
|
|
@@ -38,10 +39,12 @@ export interface IEvmMethods {
|
|
|
38
39
|
signPersonalMessage: ({ message, accountIndex, }: {
|
|
39
40
|
accountIndex: number;
|
|
40
41
|
message: string;
|
|
42
|
+
expectedAddress: string;
|
|
41
43
|
}) => Promise<string>;
|
|
42
44
|
signTypedData: ({ version, data, accountIndex, }: {
|
|
43
45
|
accountIndex: number;
|
|
44
46
|
data: any;
|
|
47
|
+
expectedAddress: string;
|
|
45
48
|
version: SignTypedDataVersion;
|
|
46
49
|
}) => Promise<string>;
|
|
47
50
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { LedgerHost, LedgerEvmConfig } from './ledger/host-types';
|
|
2
|
+
export interface LedgerDmkHostConfig extends LedgerEvmConfig {
|
|
3
|
+
/** Platform-owned DMK, allowing a future host to register its own transports. */
|
|
4
|
+
dmk?: object;
|
|
5
|
+
}
|
|
6
|
+
export declare function createLedgerDmkHost(config?: LedgerDmkHostConfig): LedgerHost;
|
|
7
|
+
export type { LedgerEvmConfig, LedgerBlindSigningIntent, LedgerHost, LedgerEvmHost, LedgerUtxoHost, LedgerUtxoAccount, LedgerPartialSignature, LedgerTypedData, LedgerOperationOptions, LedgerProgress, } from './ledger/host-types';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { IKeyringAccountState } from './types';
|
|
2
|
+
/** Fixed Ethereum BIP44 address index; not an arbitrary derivation path. */
|
|
3
|
+
export interface EvmHdRuntimeAccountRequest {
|
|
4
|
+
readonly index: number;
|
|
5
|
+
}
|
|
6
|
+
/** Trusted host guard must return undefined synchronously. */
|
|
7
|
+
export interface EvmHdRuntimeAccountOptions {
|
|
8
|
+
assertCurrent: () => void;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Internal runtime record, matching createFirstAccount/addNewAccount. Contains a
|
|
12
|
+
* password-encrypted xprv; never publish it or persist it as a public catalogue.
|
|
13
|
+
* No plaintext private key, mnemonic, or password is returned.
|
|
14
|
+
*/
|
|
15
|
+
export type EncryptedEvmHdRuntimeAccount = IKeyringAccountState;
|
|
16
|
+
export declare function snapshotEvmHdIndex(value: EvmHdRuntimeAccountRequest): number;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/** Software-only entry: explicit host storage, no browser/device initialization. */
|
|
2
|
+
import { KeyringCore } from './keyring-core';
|
|
3
|
+
import type { KeyringStoragePort } from './keyring-core';
|
|
4
|
+
import type { EncryptedEvmHdRuntimeAccount, EvmHdRuntimeAccountOptions, EvmHdRuntimeAccountRequest } from './software-hd-account';
|
|
5
|
+
import type { PreparedEvmSigningOptions, PreparedSoftwareEvmSigningRequest, SignedPreparedEvmTransaction } from './transactions/prepared-evm';
|
|
6
|
+
declare const softwareHostBrand: unique symbol;
|
|
7
|
+
/** Opaque handle minted by createSoftwareKeyringHost; no injectable persistence. */
|
|
8
|
+
export interface SoftwareKeyringHost {
|
|
9
|
+
readonly [softwareHostBrand]: true;
|
|
10
|
+
}
|
|
11
|
+
/** Create once per wallet authority, then share with its per-network keyrings. */
|
|
12
|
+
export declare const createSoftwareKeyringHost: (storage: KeyringStoragePort) => SoftwareKeyringHost;
|
|
13
|
+
export declare class SoftwareKeyring extends KeyringCore<undefined, undefined> {
|
|
14
|
+
constructor(host: SoftwareKeyringHost);
|
|
15
|
+
/**
|
|
16
|
+
* Derive a fixed-path Ethereum HD runtime account without network or storage
|
|
17
|
+
* writes. The returned password-encrypted xprv is internal runtime state,
|
|
18
|
+
* never a public account/catalogue DTO. The host owns index allocation.
|
|
19
|
+
*/
|
|
20
|
+
deriveEvmHdRuntimeAccount(request: EvmHdRuntimeAccountRequest, options: EvmHdRuntimeAccountOptions): Promise<EncryptedEvmHdRuntimeAccount>;
|
|
21
|
+
/**
|
|
22
|
+
* Sign exactly the prepared envelope without RPC, fee/nonce discovery or
|
|
23
|
+
* broadcasting. The host must journal the result before submitting it.
|
|
24
|
+
* A later lock cannot revoke already returned signed bytes.
|
|
25
|
+
*/
|
|
26
|
+
signPreparedEvmTransaction(request: PreparedSoftwareEvmSigningRequest, options: PreparedEvmSigningOptions): SignedPreparedEvmTransaction;
|
|
27
|
+
/** Software authorities cannot rebind their backing store after creation. */
|
|
28
|
+
setStorage: (client: any) => never;
|
|
29
|
+
/** Sessions may move only through the core's same-authority transfer path. */
|
|
30
|
+
receiveSessionOwnership: (...session: Parameters<KeyringCore["receiveSessionOwnership"]>) => never;
|
|
31
|
+
static createInitialized(host: SoftwareKeyringHost, seed: string, password: string, vaultStateGetter: () => any): Promise<SoftwareKeyring>;
|
|
32
|
+
}
|
|
33
|
+
export { KeyringAccountType } from './types';
|
|
34
|
+
export { INetworkType } from '@sidhujag/sysweb3-network';
|
|
35
|
+
export type { INetwork } from '@sidhujag/sysweb3-network';
|
|
36
|
+
export type { KeyringStoragePort } from './keyring-core';
|
|
37
|
+
export type { IKeyringAccountState } from './types';
|
|
38
|
+
export type { PreparedEvmTransaction, PreparedEvmSigningOptions, PreparedSoftwareEvmSigningRequest, SignedPreparedEvmTransaction, } from './transactions/prepared-evm';
|
|
39
|
+
export type { EncryptedEvmHdRuntimeAccount, EvmHdRuntimeAccountOptions, EvmHdRuntimeAccountRequest, } from './software-hd-account';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/** A host-owned namespace containing one wallet authority's logical records. */
|
|
2
|
+
export interface VaultStoragePort {
|
|
3
|
+
get(key: string): Promise<unknown>;
|
|
4
|
+
set(key: string, value: unknown): Promise<void>;
|
|
5
|
+
/** Atomically creates the entire batch only when every key is absent. */
|
|
6
|
+
createManyIfAbsent(items: Record<string, unknown>): Promise<boolean>;
|
|
7
|
+
}
|
|
8
|
+
export interface VaultPersistence {
|
|
9
|
+
setEncryptedVault(decryptedVault: any, pwd: string, freshVaultKeys?: {
|
|
10
|
+
salt: string;
|
|
11
|
+
}): Promise<void>;
|
|
12
|
+
getDecryptedVault(pwd: string, legacyPassword?: string): Promise<any>;
|
|
13
|
+
}
|
|
14
|
+
export declare class VaultAuthenticationError extends Error {
|
|
15
|
+
readonly code = "INVALID_PASSWORD";
|
|
16
|
+
constructor();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Create once per wallet authority and share across its network keyrings.
|
|
20
|
+
* The host owns storage durability and cross-context atomic creation.
|
|
21
|
+
*/
|
|
22
|
+
export declare const createVaultPersistence: (storage: VaultStoragePort) => VaultPersistence;
|
package/types/storage.d.ts
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
export declare class VaultAuthenticationError extends Error {
|
|
2
|
-
readonly code = "INVALID_PASSWORD";
|
|
3
|
-
constructor();
|
|
4
|
-
}
|
|
5
1
|
export declare const setEncryptedVault: (decryptedVault: any, pwd: string, freshVaultKeys?: {
|
|
6
2
|
salt: string;
|
|
7
3
|
}) => Promise<void>;
|
|
8
4
|
export declare const getDecryptedVault: (pwd: string, legacyPassword?: string) => Promise<any>;
|
|
5
|
+
export { VaultAuthenticationError } from './storage-core';
|
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
import { TypedMessage, SignTypedDataVersion, TypedDataV1 } from '@metamask/eth-sig-util';
|
|
2
2
|
import { INetwork } from '@sidhujag/sysweb3-network';
|
|
3
3
|
import { BigNumber, TransactionResponse } from '../ethers-v6';
|
|
4
|
-
import { LedgerKeyring } from '../ledger';
|
|
5
4
|
import { CustomJsonRpcProvider } from '../providers';
|
|
6
|
-
import { TrezorKeyring } from '../trezor';
|
|
7
5
|
import { IResponseFromSendErcSignedTransaction, ISendSignedErcTransactionProps, IEthereumTransactions, IEvmCancellationOptions, IEvmReplacementOptions, IEvmSendOptions, SimpleTransactionRequest, KeyringAccountType, accountType, IGasParams } from '../types';
|
|
8
|
-
|
|
6
|
+
import type { LedgerKeyring } from '../ledger';
|
|
7
|
+
import type { TrezorKeyring } from '../trezor';
|
|
8
|
+
/** Minimal trusted device capabilities used by EVM transaction routing. */
|
|
9
|
+
export interface EthereumLedgerSigner {
|
|
10
|
+
evm: Pick<LedgerKeyring['evm'], 'signTypedData' | 'signPersonalMessage' | 'signEVMTransaction'>;
|
|
11
|
+
verifyUtxoAddress: LedgerKeyring['verifyUtxoAddress'];
|
|
12
|
+
}
|
|
13
|
+
export type EthereumTrezorSigner = Pick<TrezorKeyring, 'signTypedData' | 'signMessage' | 'signEthTransaction' | 'verifyUtxoAddress'>;
|
|
14
|
+
export declare class EthereumTransactions<TLedger extends EthereumLedgerSigner | undefined = LedgerKeyring, TTrezor extends EthereumTrezorSigner | undefined = TrezorKeyring> implements IEthereumTransactions {
|
|
9
15
|
private _web3Provider;
|
|
10
16
|
private _web3ProviderKey?;
|
|
11
|
-
trezorSigner:
|
|
12
|
-
ledgerSigner:
|
|
17
|
+
trezorSigner: TTrezor;
|
|
18
|
+
ledgerSigner: TLedger;
|
|
13
19
|
private getNetwork;
|
|
14
20
|
private captureSigningContext?;
|
|
15
21
|
private abortController;
|
|
@@ -29,12 +35,15 @@ export declare class EthereumTransactions implements IEthereumTransactions {
|
|
|
29
35
|
activeAccountId: number;
|
|
30
36
|
activeAccountType: KeyringAccountType;
|
|
31
37
|
activeNetwork: INetwork;
|
|
32
|
-
}, ledgerSigner:
|
|
38
|
+
}, ledgerSigner: TLedger, trezorSigner: TTrezor, captureSigningContext?: () => () => void);
|
|
39
|
+
private requireLedgerSigner;
|
|
40
|
+
private requireTrezorSigner;
|
|
41
|
+
private assertHardwareSignerAvailable;
|
|
33
42
|
private captureEvmSigningContext;
|
|
34
43
|
get web3Provider(): CustomJsonRpcProvider;
|
|
35
44
|
private ensureProvidersInitialized;
|
|
36
45
|
private isUtxoNetwork;
|
|
37
|
-
signTypedData: (addr: string, typedData: TypedDataV1 | TypedMessage<any>, version: SignTypedDataVersion) => Promise<
|
|
46
|
+
signTypedData: (addr: string, typedData: TypedDataV1 | TypedMessage<any>, version: SignTypedDataVersion) => Promise<string>;
|
|
38
47
|
verifyUtxoAddress: (accountIndex: number, currency: string, slip44: number) => Promise<string | undefined>;
|
|
39
48
|
verifyTypedSignature: (data: TypedDataV1 | TypedMessage<any>, signature: string, version: SignTypedDataVersion) => string;
|
|
40
49
|
ethSign: (params: string[]) => Promise<string>;
|
|
@@ -66,6 +75,7 @@ export declare class EthereumTransactions implements IEthereumTransactions {
|
|
|
66
75
|
cancelSentTransaction: (txHash: string, isLegacy: boolean | undefined, fallbackNonce: number | undefined, options: IEvmCancellationOptions) => Promise<{
|
|
67
76
|
error?: boolean;
|
|
68
77
|
isCanceled: boolean;
|
|
78
|
+
maximumFee?: string;
|
|
69
79
|
transaction?: TransactionResponse;
|
|
70
80
|
}>;
|
|
71
81
|
sendFormattedTransaction: (params: SimpleTransactionRequest, isLegacy?: boolean, options?: IEvmSendOptions) => Promise<any>;
|
|
@@ -20,5 +20,7 @@ export declare const hashPersonalMessage: (message: Uint8Array) => string;
|
|
|
20
20
|
export declare const signPersonalMessage: (message: string | Uint8Array, privateKey: string | Uint8Array) => string;
|
|
21
21
|
export declare const parsePersonalMessage: (hexMessage: string) => string;
|
|
22
22
|
export declare const signTransaction: (transaction: TransactionRequest, privateKey: string | Uint8Array) => string;
|
|
23
|
-
export declare const sendLocalEvmTransaction: (provider: CustomJsonRpcProvider, privateKey: string, transaction: Deferrable<Record<string, any>>, beforeBroadcast?: () => void, beforeSign?: () => void
|
|
23
|
+
export declare const sendLocalEvmTransaction: (provider: CustomJsonRpcProvider, privateKey: string, transaction: Deferrable<Record<string, any>>, beforeBroadcast?: () => void, beforeSign?: () => void,
|
|
24
|
+
/** Synchronous final-envelope check; throw to reject. Promise results are rejected. */
|
|
25
|
+
validateBeforeSign?: (transaction: TransactionRequest) => void) => Promise<any>;
|
|
24
26
|
export declare const sameAddress: (left: string, right: string) => boolean;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type ISyscoinHardwareSigner } from './syscoin-core';
|
|
2
|
+
import type { LedgerKeyring } from '../ledger';
|
|
3
|
+
import type { TrezorKeyring } from '../trezor';
|
|
4
|
+
/** Legacy device adapter. The software transaction engine never imports it. */
|
|
5
|
+
export declare function createLedgerPsbtSigner(ledger: LedgerKeyring): ISyscoinHardwareSigner;
|
|
6
|
+
/** Keep Trezor conversion and signing outside the software-only import graph. */
|
|
7
|
+
export declare function createTrezorPsbtSigner(trezor: TrezorKeyring): ISyscoinHardwareSigner;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fully specified type-0/type-2 transaction. Quantities are canonical decimal
|
|
3
|
+
* integer strings, nonce is at most MAX_SAFE_INTEGER, and gasLimit is uint64.
|
|
4
|
+
* Addresses must be nonzero hex addresses; valid casing is normalized. Data is
|
|
5
|
+
* even-length 0x hex, at most 16 KiB. Contract creation/access lists are omitted.
|
|
6
|
+
*/
|
|
7
|
+
export type PreparedEvmTransaction = Readonly<{
|
|
8
|
+
from: string;
|
|
9
|
+
to: string;
|
|
10
|
+
chainId: string;
|
|
11
|
+
nonce: string;
|
|
12
|
+
value: string;
|
|
13
|
+
gasLimit: string;
|
|
14
|
+
data: string;
|
|
15
|
+
} & ({
|
|
16
|
+
type: 0;
|
|
17
|
+
gasPrice: string;
|
|
18
|
+
} | {
|
|
19
|
+
type: 2;
|
|
20
|
+
maxFeePerGas: string;
|
|
21
|
+
maxPriorityFeePerGas: string;
|
|
22
|
+
})>;
|
|
23
|
+
export type PreparedSoftwareEvmSigningRequest = Readonly<{
|
|
24
|
+
account: Readonly<{
|
|
25
|
+
id: number;
|
|
26
|
+
type: 'HDAccount' | 'Imported';
|
|
27
|
+
expectedAddress: string;
|
|
28
|
+
}>;
|
|
29
|
+
network: Readonly<{
|
|
30
|
+
kind: 'ethereum';
|
|
31
|
+
chainId: string;
|
|
32
|
+
slip44: 60;
|
|
33
|
+
/** Exact configured endpoint binding; signing does not contact or authenticate it. */
|
|
34
|
+
url: string;
|
|
35
|
+
}>;
|
|
36
|
+
transaction: PreparedEvmTransaction;
|
|
37
|
+
}>;
|
|
38
|
+
export type PreparedEvmSigningOptions = Readonly<{
|
|
39
|
+
/** Host-owned consent/session/review expiry check. Must return undefined. */
|
|
40
|
+
assertCurrent(): void;
|
|
41
|
+
}>;
|
|
42
|
+
export type SignedPreparedEvmTransaction = Readonly<{
|
|
43
|
+
rawTransaction: string;
|
|
44
|
+
hash: string;
|
|
45
|
+
unsignedHash: string;
|
|
46
|
+
from: string;
|
|
47
|
+
/** Canonical signed fields, checked against the requested envelope. */
|
|
48
|
+
transaction: PreparedEvmTransaction;
|
|
49
|
+
}>;
|
|
50
|
+
export declare function snapshotPreparedEvmRequest(input: unknown): PreparedSoftwareEvmSigningRequest;
|
|
51
|
+
export declare function preparedEvmGuard(input: unknown): () => void;
|
|
52
|
+
/** Internal, network-free signing. The key never becomes part of the result. */
|
|
53
|
+
export declare function signPreparedEvmEnvelope(transaction: PreparedEvmTransaction, privateKey: string): SignedPreparedEvmTransaction;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { ITxid, txUtils } from '@sidhujag/sysweb3-utils';
|
|
2
|
+
import { Psbt } from 'bitcoinjs-lib';
|
|
3
|
+
import { ISyscoinTransactions, KeyringAccountType, accountType } from '../types';
|
|
4
|
+
import { ExcludedOutpoint } from '../utils/excluded-utxos';
|
|
5
|
+
import { type PsbtAccountScope } from '../utils/psbt-account-scope';
|
|
6
|
+
import type { SyscoinHDSigner } from '../signers';
|
|
7
|
+
import type { INetwork } from '@sidhujag/sysweb3-network';
|
|
8
|
+
/** A hardware operation receives only its selected public account/context. */
|
|
9
|
+
export interface ISyscoinHardwareSigningRequest {
|
|
10
|
+
readonly account: Readonly<{
|
|
11
|
+
id: number;
|
|
12
|
+
xpub: string;
|
|
13
|
+
}>;
|
|
14
|
+
assertCurrent: () => void;
|
|
15
|
+
getRawTransaction?: ReturnType<typeof txUtils>['getRawTransaction'];
|
|
16
|
+
readonly network: Readonly<INetwork>;
|
|
17
|
+
psbt: Psbt;
|
|
18
|
+
scope: PsbtAccountScope;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Trusted wallet-authority adapter, not an untrusted plugin entry point.
|
|
22
|
+
* Implementations must preserve the reviewed unsigned transaction and enforce
|
|
23
|
+
* device signature/account-scope validation before returning the signed PSBT.
|
|
24
|
+
*/
|
|
25
|
+
export type ISyscoinHardwareSigner = (request: ISyscoinHardwareSigningRequest) => Promise<Psbt>;
|
|
26
|
+
export interface ISyscoinHardwareSigners {
|
|
27
|
+
ledger?: ISyscoinHardwareSigner;
|
|
28
|
+
trezor?: ISyscoinHardwareSigner;
|
|
29
|
+
}
|
|
30
|
+
export declare const createHardwareSignerUnavailableError: (hardware: string) => Error & {
|
|
31
|
+
code: string;
|
|
32
|
+
};
|
|
33
|
+
export declare class SyscoinTransactionsCore implements ISyscoinTransactions {
|
|
34
|
+
private getSigner;
|
|
35
|
+
private getReadOnlySigner;
|
|
36
|
+
private hardwareSigners;
|
|
37
|
+
private getState;
|
|
38
|
+
private getAddress;
|
|
39
|
+
private captureSigningContext?;
|
|
40
|
+
constructor(getSyscoinSigner: () => {
|
|
41
|
+
hd: SyscoinHDSigner;
|
|
42
|
+
main: any;
|
|
43
|
+
}, getReadOnlySigner: () => {
|
|
44
|
+
main: any;
|
|
45
|
+
}, getState: () => {
|
|
46
|
+
accounts: {
|
|
47
|
+
HDAccount: accountType;
|
|
48
|
+
Imported: accountType;
|
|
49
|
+
Ledger: accountType;
|
|
50
|
+
Trezor: accountType;
|
|
51
|
+
};
|
|
52
|
+
activeAccountId: number;
|
|
53
|
+
activeAccountType: KeyringAccountType;
|
|
54
|
+
activeNetwork: INetwork;
|
|
55
|
+
}, getAddress: (xpub: string, isChangeAddress: boolean) => Promise<string>, hardwareSigners?: ISyscoinHardwareSigners, captureSigningContext?: () => () => void);
|
|
56
|
+
private getTransactionPSBT;
|
|
57
|
+
decodeRawTransaction: (psbtOrHex: any, isRawHex?: boolean) => any;
|
|
58
|
+
private feeCache;
|
|
59
|
+
getRecommendedFee: (explorerUrl: string) => Promise<number>;
|
|
60
|
+
txUtilsFunctions: () => {
|
|
61
|
+
getRawTransaction: (explorerUrl: string, txid: string) => Promise<any>;
|
|
62
|
+
};
|
|
63
|
+
private signPSBTWithSigner;
|
|
64
|
+
private createNativeSweepPSBT;
|
|
65
|
+
private createUnsignedPSBT;
|
|
66
|
+
private signPSBTWithMethod;
|
|
67
|
+
getEstimateSysTransactionFee: ({ txOptions, isMax, nativeSweep, amount, receivingAddress, feeRate, token, excludedOutpoints, }: {
|
|
68
|
+
amount: number | string;
|
|
69
|
+
feeRate?: number;
|
|
70
|
+
receivingAddress: string;
|
|
71
|
+
token?: {
|
|
72
|
+
guid: string;
|
|
73
|
+
symbol?: string;
|
|
74
|
+
} | null;
|
|
75
|
+
txOptions?: any;
|
|
76
|
+
isMax?: boolean | false;
|
|
77
|
+
nativeSweep?: boolean;
|
|
78
|
+
excludedOutpoints?: readonly ExcludedOutpoint[];
|
|
79
|
+
}) => Promise<{
|
|
80
|
+
grossAmount?: string | undefined;
|
|
81
|
+
recipientAmount?: string | undefined;
|
|
82
|
+
fee: number;
|
|
83
|
+
psbt: any;
|
|
84
|
+
}>;
|
|
85
|
+
private sendSignedTransaction;
|
|
86
|
+
signPSBT: ({ psbt, isTrezor, isLedger, }: {
|
|
87
|
+
psbt: any;
|
|
88
|
+
isTrezor?: boolean;
|
|
89
|
+
isLedger?: boolean;
|
|
90
|
+
}) => Promise<any>;
|
|
91
|
+
sendTransaction: (psbt: any) => Promise<ITxid>;
|
|
92
|
+
}
|
|
@@ -1,68 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
export declare class SyscoinTransactions implements ISyscoinTransactions {
|
|
9
|
-
private getSigner;
|
|
10
|
-
private getReadOnlySigner;
|
|
11
|
-
private trezor;
|
|
12
|
-
private ledger;
|
|
13
|
-
private getState;
|
|
14
|
-
private getAddress;
|
|
15
|
-
private captureSigningContext?;
|
|
16
|
-
constructor(getSyscoinSigner: () => {
|
|
17
|
-
hd: SyscoinHDSigner;
|
|
18
|
-
main: any;
|
|
19
|
-
}, getReadOnlySigner: () => {
|
|
20
|
-
main: any;
|
|
21
|
-
}, getState: () => {
|
|
22
|
-
accounts: {
|
|
23
|
-
HDAccount: accountType;
|
|
24
|
-
Imported: accountType;
|
|
25
|
-
Ledger: accountType;
|
|
26
|
-
Trezor: accountType;
|
|
27
|
-
};
|
|
28
|
-
activeAccountId: number;
|
|
29
|
-
activeAccountType: KeyringAccountType;
|
|
30
|
-
activeNetwork: INetwork;
|
|
31
|
-
}, getAddress: (xpub: string, isChangeAddress: boolean) => Promise<string>, ledgerSigner: LedgerKeyring, trezorSigner: TrezorKeyring, captureSigningContext?: () => () => void);
|
|
32
|
-
private getTransactionPSBT;
|
|
33
|
-
decodeRawTransaction: (psbtOrHex: any, isRawHex?: boolean) => any;
|
|
34
|
-
private feeCache;
|
|
35
|
-
getRecommendedFee: (explorerUrl: string) => Promise<number>;
|
|
36
|
-
txUtilsFunctions: () => {
|
|
37
|
-
getRawTransaction: (explorerUrl: string, txid: string) => Promise<any>;
|
|
38
|
-
};
|
|
39
|
-
private signPSBTWithSigner;
|
|
40
|
-
private createNativeSweepPSBT;
|
|
41
|
-
private createUnsignedPSBT;
|
|
42
|
-
private signPSBTWithMethod;
|
|
43
|
-
getEstimateSysTransactionFee: ({ txOptions, isMax, nativeSweep, amount, receivingAddress, feeRate, token, excludedOutpoints, }: {
|
|
44
|
-
amount: number | string;
|
|
45
|
-
feeRate?: number;
|
|
46
|
-
receivingAddress: string;
|
|
47
|
-
token?: {
|
|
48
|
-
guid: string;
|
|
49
|
-
symbol?: string;
|
|
50
|
-
} | null;
|
|
51
|
-
txOptions?: any;
|
|
52
|
-
isMax?: boolean | false;
|
|
53
|
-
nativeSweep?: boolean;
|
|
54
|
-
excludedOutpoints?: readonly ExcludedOutpoint[];
|
|
55
|
-
}) => Promise<{
|
|
56
|
-
grossAmount?: string | undefined;
|
|
57
|
-
recipientAmount?: string | undefined;
|
|
58
|
-
fee: number;
|
|
59
|
-
psbt: any;
|
|
60
|
-
}>;
|
|
61
|
-
private sendSignedTransaction;
|
|
62
|
-
signPSBT: ({ psbt, isTrezor, isLedger, }: {
|
|
63
|
-
psbt: any;
|
|
64
|
-
isTrezor?: boolean;
|
|
65
|
-
isLedger?: boolean;
|
|
66
|
-
}) => Promise<any>;
|
|
67
|
-
sendTransaction: (psbt: any) => Promise<ITxid>;
|
|
1
|
+
import { SyscoinTransactionsCore } from './syscoin-core';
|
|
2
|
+
import type { LedgerKeyring } from '../ledger';
|
|
3
|
+
import type { TrezorKeyring } from '../trezor';
|
|
4
|
+
type CoreArguments = ConstructorParameters<typeof SyscoinTransactionsCore>;
|
|
5
|
+
/** Legacy constructor: preserve device arguments while composing shared logic. */
|
|
6
|
+
export declare class SyscoinTransactions extends SyscoinTransactionsCore {
|
|
7
|
+
constructor(getSyscoinSigner: CoreArguments[0], getReadOnlySigner: CoreArguments[1], getState: CoreArguments[2], getAddress: CoreArguments[3], ledgerSigner: LedgerKeyring, trezorSigner: TrezorKeyring, captureSigningContext?: CoreArguments[5]);
|
|
68
8
|
}
|
|
9
|
+
export {};
|