@guveno/wallet-sdk 1.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/LICENSE +21 -0
- package/README.md +211 -0
- package/dist/api/client.d.ts +48 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +563 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/types.d.ts +237 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +9 -0
- package/dist/api/types.js.map +1 -0
- package/dist/chains.d.ts +25 -0
- package/dist/chains.d.ts.map +1 -0
- package/dist/chains.js +67 -0
- package/dist/chains.js.map +1 -0
- package/dist/constants.d.ts +17 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +19 -0
- package/dist/constants.js.map +1 -0
- package/dist/crypto/sealed-box.d.ts +8 -0
- package/dist/crypto/sealed-box.d.ts.map +1 -0
- package/dist/crypto/sealed-box.js +66 -0
- package/dist/crypto/sealed-box.js.map +1 -0
- package/dist/derivation.d.ts +26 -0
- package/dist/derivation.d.ts.map +1 -0
- package/dist/derivation.js +121 -0
- package/dist/derivation.js.map +1 -0
- package/dist/errors.d.ts +81 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +95 -0
- package/dist/errors.js.map +1 -0
- package/dist/hot-wallet.d.ts +57 -0
- package/dist/hot-wallet.d.ts.map +1 -0
- package/dist/hot-wallet.js +139 -0
- package/dist/hot-wallet.js.map +1 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/keyprovider/file-provider.d.ts +19 -0
- package/dist/keyprovider/file-provider.d.ts.map +1 -0
- package/dist/keyprovider/file-provider.js +48 -0
- package/dist/keyprovider/file-provider.js.map +1 -0
- package/dist/keyprovider/index.d.ts +13 -0
- package/dist/keyprovider/index.d.ts.map +1 -0
- package/dist/keyprovider/index.js +3 -0
- package/dist/keyprovider/index.js.map +1 -0
- package/dist/keyprovider/kms-provider.d.ts +26 -0
- package/dist/keyprovider/kms-provider.d.ts.map +1 -0
- package/dist/keyprovider/kms-provider.js +32 -0
- package/dist/keyprovider/kms-provider.js.map +1 -0
- package/dist/manager.d.ts +28 -0
- package/dist/manager.d.ts.map +1 -0
- package/dist/manager.js +499 -0
- package/dist/manager.js.map +1 -0
- package/dist/mnemonic.d.ts +13 -0
- package/dist/mnemonic.d.ts.map +1 -0
- package/dist/mnemonic.js +44 -0
- package/dist/mnemonic.js.map +1 -0
- package/dist/session/file-store.d.ts +10 -0
- package/dist/session/file-store.d.ts.map +1 -0
- package/dist/session/file-store.js +88 -0
- package/dist/session/file-store.js.map +1 -0
- package/dist/signing/sign-bitcoin.d.ts +14 -0
- package/dist/signing/sign-bitcoin.d.ts.map +1 -0
- package/dist/signing/sign-bitcoin.js +133 -0
- package/dist/signing/sign-bitcoin.js.map +1 -0
- package/dist/signing/sign-ethereum.d.ts +13 -0
- package/dist/signing/sign-ethereum.d.ts.map +1 -0
- package/dist/signing/sign-ethereum.js +49 -0
- package/dist/signing/sign-ethereum.js.map +1 -0
- package/dist/signing/sign-polkadot.d.ts +9 -0
- package/dist/signing/sign-polkadot.d.ts.map +1 -0
- package/dist/signing/sign-polkadot.js +79 -0
- package/dist/signing/sign-polkadot.js.map +1 -0
- package/dist/signing/sign-withdrawal.d.ts +21 -0
- package/dist/signing/sign-withdrawal.d.ts.map +1 -0
- package/dist/signing/sign-withdrawal.js +35 -0
- package/dist/signing/sign-withdrawal.js.map +1 -0
- package/dist/signing/sign-xrp.d.ts +7 -0
- package/dist/signing/sign-xrp.d.ts.map +1 -0
- package/dist/signing/sign-xrp.js +27 -0
- package/dist/signing/sign-xrp.js.map +1 -0
- package/dist/signing/types.d.ts +84 -0
- package/dist/signing/types.d.ts.map +1 -0
- package/dist/signing/types.js +15 -0
- package/dist/signing/types.js.map +1 -0
- package/dist/storage/crypto.d.ts +7 -0
- package/dist/storage/crypto.d.ts.map +1 -0
- package/dist/storage/crypto.js +80 -0
- package/dist/storage/crypto.js.map +1 -0
- package/dist/storage/file-store.d.ts +21 -0
- package/dist/storage/file-store.d.ts.map +1 -0
- package/dist/storage/file-store.js +219 -0
- package/dist/storage/file-store.js.map +1 -0
- package/dist/types.d.ts +187 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/docs/security.md +119 -0
- package/package.json +76 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { SupportedChain, SupportedNetwork } from '../types.js';
|
|
2
|
+
/** Asset details the server includes in the signing payload (base-unit conversion + ERC20 calldata). */
|
|
3
|
+
export interface SigningAsset {
|
|
4
|
+
id: number;
|
|
5
|
+
key: string;
|
|
6
|
+
symbol: string;
|
|
7
|
+
type: 'native' | 'erc20';
|
|
8
|
+
decimals: number;
|
|
9
|
+
contractAddress: string | null;
|
|
10
|
+
}
|
|
11
|
+
export interface EthereumChainState {
|
|
12
|
+
nonce: number;
|
|
13
|
+
chainId: number;
|
|
14
|
+
maxFeePerGas: string;
|
|
15
|
+
maxPriorityFeePerGas: string;
|
|
16
|
+
gasLimit: string;
|
|
17
|
+
}
|
|
18
|
+
export interface BitcoinChainState {
|
|
19
|
+
utxos: Array<{
|
|
20
|
+
txid: string;
|
|
21
|
+
vout: number;
|
|
22
|
+
value: number;
|
|
23
|
+
scriptPubKey?: string;
|
|
24
|
+
}>;
|
|
25
|
+
feeRate: number;
|
|
26
|
+
changeAddress: string;
|
|
27
|
+
}
|
|
28
|
+
export interface XrpChainState {
|
|
29
|
+
sequence: number;
|
|
30
|
+
fee: string;
|
|
31
|
+
lastLedgerSequence: number;
|
|
32
|
+
}
|
|
33
|
+
export interface PolkadotChainState {
|
|
34
|
+
nonce: number;
|
|
35
|
+
genesisHash: string;
|
|
36
|
+
/** Recent block the mortal era is anchored to (with {@link eraPeriod}). */
|
|
37
|
+
blockHash: string;
|
|
38
|
+
blockNumber: number;
|
|
39
|
+
specVersion: number;
|
|
40
|
+
transactionVersion: number;
|
|
41
|
+
/** SCALE-encoded runtime metadata (hex) — used to encode the call fully offline. */
|
|
42
|
+
metadataRpc: string;
|
|
43
|
+
/** Tip in plancks (base units), as a decimal string. Usually "0". */
|
|
44
|
+
tip: string;
|
|
45
|
+
/** Mortal era length in blocks. */
|
|
46
|
+
eraPeriod: number;
|
|
47
|
+
/** Best-effort fee estimate in plancks; informational only. */
|
|
48
|
+
suggestedFee: string;
|
|
49
|
+
}
|
|
50
|
+
export type ChainState = EthereumChainState | BitcoinChainState | XrpChainState | PolkadotChainState;
|
|
51
|
+
export interface BitcoinOutput {
|
|
52
|
+
toAddress: string;
|
|
53
|
+
amount: string;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Returned by `prepareWithdrawal`. Carries intent plus the chain state needed to
|
|
57
|
+
* build a signable raw transaction. `chainState` is undefined for chains whose
|
|
58
|
+
* server-side support isn't wired up yet — `signWithdrawal` rejects those.
|
|
59
|
+
*/
|
|
60
|
+
export interface SigningPayload {
|
|
61
|
+
withdrawalId: number;
|
|
62
|
+
chain: SupportedChain;
|
|
63
|
+
network: SupportedNetwork;
|
|
64
|
+
sourceAddress: string;
|
|
65
|
+
toAddress: string | null;
|
|
66
|
+
assetId: number;
|
|
67
|
+
/** Decimal amount in display units (e.g. "1.5"). Convert with the asset's decimals. */
|
|
68
|
+
amount: string;
|
|
69
|
+
outputs: BitcoinOutput[] | null;
|
|
70
|
+
changeAddress?: string;
|
|
71
|
+
destinationTag: number | null;
|
|
72
|
+
expiresAt: string;
|
|
73
|
+
asset: SigningAsset;
|
|
74
|
+
chainState?: ChainState;
|
|
75
|
+
}
|
|
76
|
+
/** Thrown when a prepared withdrawal's 15-minute signing window has elapsed. */
|
|
77
|
+
export declare class WithdrawalExpiredError extends Error {
|
|
78
|
+
constructor();
|
|
79
|
+
}
|
|
80
|
+
/** Thrown when the chain/asset combination has no signer yet. */
|
|
81
|
+
export declare class UnsupportedSigningError extends Error {
|
|
82
|
+
constructor(chain: string);
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/signing/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpE,wGAAwG;AACxG,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnF,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oFAAoF;IACpF,WAAW,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,GAAG,EAAE,MAAM,CAAC;IACZ,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,UAAU,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,aAAa,GAAG,kBAAkB,CAAC;AAErG,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,cAAc,CAAC;IACtB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,uFAAuF;IACvF,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,YAAY,CAAC;IACpB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,gFAAgF;AAChF,qBAAa,sBAAuB,SAAQ,KAAK;;CAKhD;AAED,iEAAiE;AACjE,qBAAa,uBAAwB,SAAQ,KAAK;gBACpC,KAAK,EAAE,MAAM;CAI1B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Thrown when a prepared withdrawal's 15-minute signing window has elapsed. */
|
|
2
|
+
export class WithdrawalExpiredError extends Error {
|
|
3
|
+
constructor() {
|
|
4
|
+
super('This withdrawal has expired. Start the send again to refresh it.');
|
|
5
|
+
this.name = 'WithdrawalExpiredError';
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
/** Thrown when the chain/asset combination has no signer yet. */
|
|
9
|
+
export class UnsupportedSigningError extends Error {
|
|
10
|
+
constructor(chain) {
|
|
11
|
+
super(`Signing on ${chain} is not available yet.`);
|
|
12
|
+
this.name = 'UnsupportedSigningError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/signing/types.ts"],"names":[],"mappings":"AA+EA,gFAAgF;AAChF,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C;QACE,KAAK,CAAC,kEAAkE,CAAC,CAAC;QAC1E,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,iEAAiE;AACjE,MAAM,OAAO,uBAAwB,SAAQ,KAAK;IAChD,YAAY,KAAa;QACvB,KAAK,CAAC,cAAc,KAAK,wBAAwB,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { EncryptedSecretEnvelope, EncryptedStoredSecretRecord, WalletGroupSecretsJson } from '../types.js';
|
|
2
|
+
export declare function assertEncryptionPassword(password: string | undefined): string;
|
|
3
|
+
export declare function encryptMnemonic(mnemonic: string, password: string): Promise<EncryptedSecretEnvelope>;
|
|
4
|
+
export declare function decryptMnemonic(envelope: EncryptedSecretEnvelope, password: string | undefined): Promise<string>;
|
|
5
|
+
export declare function encryptSecretRecord(keyId: string, mnemonic: string, password: string): Promise<EncryptedStoredSecretRecord>;
|
|
6
|
+
export declare function decryptSecretsJson(secretsJson: WalletGroupSecretsJson, password: string | undefined): Promise<string>;
|
|
7
|
+
//# sourceMappingURL=crypto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.d.ts","sourceRoot":"","sources":["../../src/storage/crypto.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,uBAAuB,EACvB,2BAA2B,EAC3B,sBAAsB,EACvB,MAAM,aAAa,CAAC;AAErB,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAM7E;AAUD,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,CA4B1G;AAED,wBAAsB,eAAe,CACnC,QAAQ,EAAE,uBAAuB,EACjC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAAC,MAAM,CAAC,CAoBjB;AAED,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,2BAA2B,CAAC,CAMtC;AAED,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,sBAAsB,EACnC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,OAAO,CAAC,MAAM,CAAC,CAMjB"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { createCipheriv, createDecipheriv, randomBytes, scryptSync } from 'node:crypto';
|
|
2
|
+
import { ENCRYPTION_ALGORITHM, ENCRYPTION_KDF, SCRYPT_PARAMS } from '../constants.js';
|
|
3
|
+
import { EncryptionRequiredError, ValidationError, WrongPassphraseError } from '../errors.js';
|
|
4
|
+
export function assertEncryptionPassword(password) {
|
|
5
|
+
if (password == null || password.trim().length === 0) {
|
|
6
|
+
throw new EncryptionRequiredError('An encryption password is required for encrypted wallet groups.');
|
|
7
|
+
}
|
|
8
|
+
return password;
|
|
9
|
+
}
|
|
10
|
+
function deriveKey(password, salt) {
|
|
11
|
+
return scryptSync(password, salt, SCRYPT_PARAMS.keyLength, {
|
|
12
|
+
N: SCRYPT_PARAMS.cost,
|
|
13
|
+
r: SCRYPT_PARAMS.blockSize,
|
|
14
|
+
p: SCRYPT_PARAMS.parallelization
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
export async function encryptMnemonic(mnemonic, password) {
|
|
18
|
+
const encryptionPassword = assertEncryptionPassword(password);
|
|
19
|
+
const salt = randomBytes(16);
|
|
20
|
+
const iv = randomBytes(12);
|
|
21
|
+
const key = deriveKey(encryptionPassword, salt);
|
|
22
|
+
try {
|
|
23
|
+
const cipher = createCipheriv(ENCRYPTION_ALGORITHM, key, iv);
|
|
24
|
+
const ciphertext = Buffer.concat([cipher.update(mnemonic, 'utf8'), cipher.final()]);
|
|
25
|
+
const tag = cipher.getAuthTag();
|
|
26
|
+
return {
|
|
27
|
+
algorithm: ENCRYPTION_ALGORITHM,
|
|
28
|
+
kdf: ENCRYPTION_KDF,
|
|
29
|
+
salt: salt.toString('base64'),
|
|
30
|
+
iv: iv.toString('base64'),
|
|
31
|
+
tag: tag.toString('base64'),
|
|
32
|
+
ciphertext: ciphertext.toString('base64'),
|
|
33
|
+
kdfParams: {
|
|
34
|
+
cost: SCRYPT_PARAMS.cost,
|
|
35
|
+
blockSize: SCRYPT_PARAMS.blockSize,
|
|
36
|
+
parallelization: SCRYPT_PARAMS.parallelization,
|
|
37
|
+
keyLength: SCRYPT_PARAMS.keyLength
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
key.fill(0);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export async function decryptMnemonic(envelope, password) {
|
|
46
|
+
const encryptionPassword = assertEncryptionPassword(password);
|
|
47
|
+
const salt = Buffer.from(envelope.salt, 'base64');
|
|
48
|
+
const iv = Buffer.from(envelope.iv, 'base64');
|
|
49
|
+
const tag = Buffer.from(envelope.tag, 'base64');
|
|
50
|
+
const ciphertext = Buffer.from(envelope.ciphertext, 'base64');
|
|
51
|
+
const key = deriveKey(encryptionPassword, salt);
|
|
52
|
+
try {
|
|
53
|
+
const decipher = createDecipheriv(ENCRYPTION_ALGORITHM, key, iv);
|
|
54
|
+
decipher.setAuthTag(tag);
|
|
55
|
+
const plaintext = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
|
|
56
|
+
return plaintext.toString('utf8');
|
|
57
|
+
}
|
|
58
|
+
catch (error) {
|
|
59
|
+
throw new WrongPassphraseError('Unable to decrypt the mnemonic. The encryption password may be incorrect.', {
|
|
60
|
+
cause: error
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
finally {
|
|
64
|
+
key.fill(0);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export async function encryptSecretRecord(keyId, mnemonic, password) {
|
|
68
|
+
return {
|
|
69
|
+
keyId,
|
|
70
|
+
type: 'encrypted',
|
|
71
|
+
envelope: await encryptMnemonic(mnemonic, password)
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
export async function decryptSecretsJson(secretsJson, password) {
|
|
75
|
+
if (secretsJson.secret.type !== 'encrypted') {
|
|
76
|
+
throw new ValidationError('Wallet secrets must be encrypted before they can be decrypted.');
|
|
77
|
+
}
|
|
78
|
+
return decryptMnemonic(secretsJson.secret.envelope, password);
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=crypto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crypto.js","sourceRoot":"","sources":["../../src/storage/crypto.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { StorageState, WalletStore } from '../types.js';
|
|
2
|
+
export declare function resolveStorageDir(storageDir?: string): string;
|
|
3
|
+
export declare class FileSystemWalletStore implements WalletStore {
|
|
4
|
+
readonly rootDir: string;
|
|
5
|
+
private readonly metadataPath;
|
|
6
|
+
private readonly secretsPath;
|
|
7
|
+
private readonly lockPath;
|
|
8
|
+
constructor(storageDir?: string);
|
|
9
|
+
read(): Promise<StorageState>;
|
|
10
|
+
mutate<T>(mutator: (state: StorageState) => Promise<{
|
|
11
|
+
result: T;
|
|
12
|
+
state: StorageState;
|
|
13
|
+
}> | {
|
|
14
|
+
result: T;
|
|
15
|
+
state: StorageState;
|
|
16
|
+
}): Promise<T>;
|
|
17
|
+
private ensureLayout;
|
|
18
|
+
private writeState;
|
|
19
|
+
private withLock;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=file-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-store.d.ts","sourceRoot":"","sources":["../../src/storage/file-store.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EACV,YAAY,EAGZ,WAAW,EACZ,MAAM,aAAa,CAAC;AA0JrB,wBAAgB,iBAAiB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAM7D;AAED,qBAAa,qBAAsB,YAAW,WAAW;IACvD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAEtB,UAAU,CAAC,EAAE,MAAM;IAOzB,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC;IAmB7B,MAAM,CAAC,CAAC,EACZ,OAAO,EAAE,CACP,KAAK,EAAE,YAAY,KAChB,OAAO,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,YAAY,CAAA;KAAE,CAAC,GAAG;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,KAAK,EAAE,YAAY,CAAA;KAAE,GACpF,OAAO,CAAC,CAAC,CAAC;YASC,YAAY;YAIZ,UAAU;YAWV,QAAQ;CAgCvB"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
import { promises as fs } from 'node:fs';
|
|
2
|
+
import { randomUUID } from 'node:crypto';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
import { SUPPORTED_CHAINS, SUPPORTED_NETWORKS } from '../chains.js';
|
|
6
|
+
import { DEFAULT_STORAGE_DIR, DEFAULT_STORAGE_ENV_VAR, ENCRYPTION_ALGORITHM, ENCRYPTION_KDF, STORAGE_LOCK_RETRY_MS, STORAGE_LOCK_TIMEOUT_MS, STORAGE_SCHEMA_VERSION } from '../constants.js';
|
|
7
|
+
import { StorageError } from '../errors.js';
|
|
8
|
+
const chainSchema = z.enum(SUPPORTED_CHAINS);
|
|
9
|
+
const networkSchema = z.enum(SUPPORTED_NETWORKS);
|
|
10
|
+
const encryptionStatusSchema = z.object({
|
|
11
|
+
enabled: z.boolean(),
|
|
12
|
+
algorithm: z.literal(ENCRYPTION_ALGORITHM).nullable(),
|
|
13
|
+
kdf: z.literal(ENCRYPTION_KDF).nullable()
|
|
14
|
+
});
|
|
15
|
+
const storedWalletKeySchema = z.object({
|
|
16
|
+
id: z.uuid(),
|
|
17
|
+
fingerprint: z.string(),
|
|
18
|
+
encryption: encryptionStatusSchema,
|
|
19
|
+
createdAt: z.string(),
|
|
20
|
+
updatedAt: z.string()
|
|
21
|
+
});
|
|
22
|
+
const storedWalletSchema = z.object({
|
|
23
|
+
id: z.uuid(),
|
|
24
|
+
keyId: z.uuid(),
|
|
25
|
+
name: z.string(),
|
|
26
|
+
chain: chainSchema,
|
|
27
|
+
network: networkSchema,
|
|
28
|
+
nextAccountIndex: z.number().int().nonnegative(),
|
|
29
|
+
createdAt: z.string(),
|
|
30
|
+
updatedAt: z.string()
|
|
31
|
+
});
|
|
32
|
+
const storedWalletAddressSchema = z.object({
|
|
33
|
+
id: z.uuid(),
|
|
34
|
+
walletId: z.uuid(),
|
|
35
|
+
chain: chainSchema,
|
|
36
|
+
network: networkSchema,
|
|
37
|
+
address: z.string(),
|
|
38
|
+
derivationPath: z.string(),
|
|
39
|
+
index: z.number().int().nonnegative(),
|
|
40
|
+
label: z.string().nullable(),
|
|
41
|
+
createdAt: z.string(),
|
|
42
|
+
updatedAt: z.string()
|
|
43
|
+
});
|
|
44
|
+
const storedMetadataFileSchema = z.object({
|
|
45
|
+
version: z.literal(STORAGE_SCHEMA_VERSION),
|
|
46
|
+
keys: z.array(storedWalletKeySchema),
|
|
47
|
+
wallets: z.array(storedWalletSchema),
|
|
48
|
+
addresses: z.array(storedWalletAddressSchema)
|
|
49
|
+
});
|
|
50
|
+
const encryptedEnvelopeSchema = z.object({
|
|
51
|
+
algorithm: z.literal(ENCRYPTION_ALGORITHM),
|
|
52
|
+
kdf: z.literal(ENCRYPTION_KDF),
|
|
53
|
+
salt: z.string(),
|
|
54
|
+
iv: z.string(),
|
|
55
|
+
tag: z.string(),
|
|
56
|
+
ciphertext: z.string(),
|
|
57
|
+
kdfParams: z.object({
|
|
58
|
+
cost: z.number().int().positive(),
|
|
59
|
+
blockSize: z.number().int().positive(),
|
|
60
|
+
parallelization: z.number().int().positive(),
|
|
61
|
+
keyLength: z.number().int().positive()
|
|
62
|
+
})
|
|
63
|
+
});
|
|
64
|
+
const storedSecretRecordSchema = z.object({
|
|
65
|
+
keyId: z.uuid(),
|
|
66
|
+
type: z.literal('encrypted'),
|
|
67
|
+
envelope: encryptedEnvelopeSchema
|
|
68
|
+
});
|
|
69
|
+
const storedSecretsFileSchema = z.object({
|
|
70
|
+
version: z.literal(STORAGE_SCHEMA_VERSION),
|
|
71
|
+
keys: z.array(storedSecretRecordSchema)
|
|
72
|
+
});
|
|
73
|
+
function emptyMetadata() {
|
|
74
|
+
return {
|
|
75
|
+
version: STORAGE_SCHEMA_VERSION,
|
|
76
|
+
keys: [],
|
|
77
|
+
wallets: [],
|
|
78
|
+
addresses: []
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
function emptySecrets() {
|
|
82
|
+
return {
|
|
83
|
+
version: STORAGE_SCHEMA_VERSION,
|
|
84
|
+
keys: []
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function delay(ms) {
|
|
88
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
89
|
+
}
|
|
90
|
+
async function readRawJsonFile(filePath) {
|
|
91
|
+
try {
|
|
92
|
+
const raw = await fs.readFile(filePath, 'utf8');
|
|
93
|
+
return JSON.parse(raw);
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
if (error.code === 'ENOENT') {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
throw error;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async function readMetadataFile(filePath) {
|
|
103
|
+
const raw = await readRawJsonFile(filePath);
|
|
104
|
+
if (raw === undefined) {
|
|
105
|
+
return emptyMetadata();
|
|
106
|
+
}
|
|
107
|
+
const parsed = storedMetadataFileSchema.safeParse(raw);
|
|
108
|
+
if (parsed.success) {
|
|
109
|
+
return parsed.data;
|
|
110
|
+
}
|
|
111
|
+
throw new StorageError(`Storage file ${filePath} is malformed.`, {
|
|
112
|
+
cause: parsed.error
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
async function readSecretsFile(filePath) {
|
|
116
|
+
const raw = await readRawJsonFile(filePath);
|
|
117
|
+
if (raw === undefined) {
|
|
118
|
+
return emptySecrets();
|
|
119
|
+
}
|
|
120
|
+
const parsed = storedSecretsFileSchema.safeParse(raw);
|
|
121
|
+
if (parsed.success) {
|
|
122
|
+
return parsed.data;
|
|
123
|
+
}
|
|
124
|
+
throw new StorageError(`Storage file ${filePath} is malformed.`, {
|
|
125
|
+
cause: parsed.error
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
async function writeJsonAtomic(filePath, value) {
|
|
129
|
+
const dir = path.dirname(filePath);
|
|
130
|
+
const tempPath = path.join(dir, `${path.basename(filePath)}.${randomUUID()}.tmp`);
|
|
131
|
+
const payload = `${JSON.stringify(value, null, 2)}\n`;
|
|
132
|
+
await fs.writeFile(tempPath, payload, { encoding: 'utf8', mode: 0o600 });
|
|
133
|
+
await fs.rename(tempPath, filePath);
|
|
134
|
+
}
|
|
135
|
+
export function resolveStorageDir(storageDir) {
|
|
136
|
+
if (storageDir != null) {
|
|
137
|
+
return storageDir;
|
|
138
|
+
}
|
|
139
|
+
return process.env[DEFAULT_STORAGE_ENV_VAR] ?? DEFAULT_STORAGE_DIR;
|
|
140
|
+
}
|
|
141
|
+
export class FileSystemWalletStore {
|
|
142
|
+
rootDir;
|
|
143
|
+
metadataPath;
|
|
144
|
+
secretsPath;
|
|
145
|
+
lockPath;
|
|
146
|
+
constructor(storageDir) {
|
|
147
|
+
this.rootDir = resolveStorageDir(storageDir);
|
|
148
|
+
this.metadataPath = path.join(this.rootDir, 'metadata.json');
|
|
149
|
+
this.secretsPath = path.join(this.rootDir, 'secrets.json');
|
|
150
|
+
this.lockPath = path.join(this.rootDir, '.storage.lock');
|
|
151
|
+
}
|
|
152
|
+
async read() {
|
|
153
|
+
await this.ensureLayout();
|
|
154
|
+
try {
|
|
155
|
+
const [metadata, secrets] = await Promise.all([
|
|
156
|
+
readMetadataFile(this.metadataPath),
|
|
157
|
+
readSecretsFile(this.secretsPath)
|
|
158
|
+
]);
|
|
159
|
+
return { metadata, secrets };
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
if (error instanceof StorageError) {
|
|
163
|
+
throw error;
|
|
164
|
+
}
|
|
165
|
+
throw new StorageError('Failed to read wallet storage.', { cause: error });
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
async mutate(mutator) {
|
|
169
|
+
return this.withLock(async () => {
|
|
170
|
+
const state = await this.read();
|
|
171
|
+
const outcome = await mutator(state);
|
|
172
|
+
await this.writeState(outcome.state);
|
|
173
|
+
return outcome.result;
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
async ensureLayout() {
|
|
177
|
+
await fs.mkdir(this.rootDir, { recursive: true, mode: 0o700 });
|
|
178
|
+
}
|
|
179
|
+
async writeState(state) {
|
|
180
|
+
try {
|
|
181
|
+
await Promise.all([
|
|
182
|
+
writeJsonAtomic(this.metadataPath, state.metadata),
|
|
183
|
+
writeJsonAtomic(this.secretsPath, state.secrets)
|
|
184
|
+
]);
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
throw new StorageError('Failed to persist wallet storage.', { cause: error });
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
async withLock(operation) {
|
|
191
|
+
await this.ensureLayout();
|
|
192
|
+
const deadline = Date.now() + STORAGE_LOCK_TIMEOUT_MS;
|
|
193
|
+
while (true) {
|
|
194
|
+
let handle;
|
|
195
|
+
try {
|
|
196
|
+
handle = await fs.open(this.lockPath, 'wx', 0o600);
|
|
197
|
+
}
|
|
198
|
+
catch (error) {
|
|
199
|
+
const code = error.code;
|
|
200
|
+
if (code !== 'EEXIST') {
|
|
201
|
+
throw new StorageError('Failed to acquire the wallet storage lock.', { cause: error });
|
|
202
|
+
}
|
|
203
|
+
if (Date.now() >= deadline) {
|
|
204
|
+
throw new StorageError('Timed out waiting for the wallet storage lock.');
|
|
205
|
+
}
|
|
206
|
+
await delay(STORAGE_LOCK_RETRY_MS);
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
try {
|
|
210
|
+
return await operation();
|
|
211
|
+
}
|
|
212
|
+
finally {
|
|
213
|
+
await handle.close();
|
|
214
|
+
await fs.unlink(this.lockPath).catch(() => undefined);
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
//# sourceMappingURL=file-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-store.js","sourceRoot":"","sources":["../../src/storage/file-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,oBAAoB,EACpB,cAAc,EACd,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAQ5C,MAAM,WAAW,GAAG,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;AAC7C,MAAM,aAAa,GAAG,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;AAEjD,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpB,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,QAAQ,EAAE;IACrD,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;CAC1C,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;IACZ,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,UAAU,EAAE,sBAAsB;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;IACZ,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE;IACf,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,KAAK,EAAE,WAAW;IAClB,OAAO,EAAE,aAAa;IACtB,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IAChD,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAEH,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE;IACZ,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE;IAClB,KAAK,EAAE,WAAW;IAClB,OAAO,EAAE,aAAa;IACtB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;IACnB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE;IAC1B,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACrC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACtB,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;IACpC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC;CAC9C,CAAC,CAAC;AAEH,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,oBAAoB,CAAC;IAC1C,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;IAC9B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IACd,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE;IACf,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;QAClB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QACjC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QACtC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QAC5C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;KACvC,CAAC;CACH,CAAC,CAAC;AAEH,MAAM,wBAAwB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE;IACf,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;IAC5B,QAAQ,EAAE,uBAAuB;CAClC,CAAC,CAAC;AAEH,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC;CACxC,CAAC,CAAC;AAEH,SAAS,aAAa;IACpB,OAAO;QACL,OAAO,EAAE,sBAAsB;QAC/B,IAAI,EAAE,EAAE;QACR,OAAO,EAAE,EAAE;QACX,SAAS,EAAE,EAAE;KACd,CAAC;AACJ,CAAC;AAED,SAAS,YAAY;IACnB,OAAO;QACL,OAAO,EAAE,sBAAsB;QAC/B,IAAI,EAAE,EAAE;KACT,CAAC;AACJ,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,QAAgB;IAC7C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAY,CAAC;IACpC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,QAAgB;IAC9C,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;IAE5C,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,aAAa,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,MAAM,GAAG,wBAAwB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAEvD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,YAAY,CAAC,gBAAgB,QAAQ,gBAAgB,EAAE;QAC/D,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,QAAgB;IAC7C,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;IAE5C,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,YAAY,EAAE,CAAC;IACxB,CAAC;IAED,MAAM,MAAM,GAAG,uBAAuB,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAEtD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,MAAM,IAAI,YAAY,CAAC,gBAAgB,QAAQ,gBAAgB,EAAE;QAC/D,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,QAAgB,EAAE,KAAc;IAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,UAAU,EAAE,MAAM,CAAC,CAAC;IAClF,MAAM,OAAO,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IAEtD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACzE,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,UAAmB;IACnD,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;QACvB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,OAAO,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,mBAAmB,CAAC;AACrE,CAAC;AAED,MAAM,OAAO,qBAAqB;IACvB,OAAO,CAAS;IACR,YAAY,CAAS;IACrB,WAAW,CAAS;IACpB,QAAQ,CAAS;IAElC,YAAY,UAAmB;QAC7B,IAAI,CAAC,OAAO,GAAG,iBAAiB,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QAC7D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAC3D,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAE1B,IAAI,CAAC;YACH,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAC5C,gBAAgB,CAAC,IAAI,CAAC,YAAY,CAAC;gBACnC,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC;aAClC,CAAC,CAAC;YAEH,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,YAAY,EAAE,CAAC;gBAClC,MAAM,KAAK,CAAC;YACd,CAAC;YAED,MAAM,IAAI,YAAY,CAAC,gCAAgC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAED,KAAK,CAAC,MAAM,CACV,OAEqF;QAErF,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE;YAC9B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;YACrC,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACrC,OAAO,OAAO,CAAC,MAAM,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,YAAY;QACxB,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACjE,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,KAAmB;QAC1C,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChB,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,QAAQ,CAAC;gBAClD,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC;aACjD,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,YAAY,CAAC,mCAAmC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAI,SAA2B;QACnD,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,uBAAuB,CAAC;QAEtD,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,MAAM,CAAC;YAEX,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YACrD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;gBAEnD,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACtB,MAAM,IAAI,YAAY,CAAC,4CAA4C,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;gBACzF,CAAC;gBAED,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,QAAQ,EAAE,CAAC;oBAC3B,MAAM,IAAI,YAAY,CAAC,gDAAgD,CAAC,CAAC;gBAC3E,CAAC;gBAED,MAAM,KAAK,CAAC,qBAAqB,CAAC,CAAC;gBACnC,SAAS;YACX,CAAC;YAED,IAAI,CAAC;gBACH,OAAO,MAAM,SAAS,EAAE,CAAC;YAC3B,CAAC;oBAAS,CAAC;gBACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;gBACrB,MAAM,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
export type MnemonicWordCount = 12 | 24;
|
|
2
|
+
export type SupportedChain = 'ethereum' | 'bitcoin' | 'xrp' | 'polkadot';
|
|
3
|
+
export type SupportedNetwork = 'mainnet' | 'sepolia' | 'testnet' | 'paseo';
|
|
4
|
+
export interface EncryptionStatus {
|
|
5
|
+
enabled: boolean;
|
|
6
|
+
algorithm: 'aes-256-gcm' | null;
|
|
7
|
+
kdf: 'scrypt' | null;
|
|
8
|
+
}
|
|
9
|
+
export interface DerivedAccount {
|
|
10
|
+
chain: SupportedChain;
|
|
11
|
+
network: SupportedNetwork;
|
|
12
|
+
address: string;
|
|
13
|
+
derivationPath: string;
|
|
14
|
+
index: number;
|
|
15
|
+
label: string | null;
|
|
16
|
+
createdAt: string;
|
|
17
|
+
updatedAt: string;
|
|
18
|
+
}
|
|
19
|
+
export interface WalletGroupSummary {
|
|
20
|
+
id: string;
|
|
21
|
+
keyId: string;
|
|
22
|
+
keyFingerprint: string;
|
|
23
|
+
name: string;
|
|
24
|
+
chain: SupportedChain;
|
|
25
|
+
network: SupportedNetwork;
|
|
26
|
+
firstAddress: string;
|
|
27
|
+
addressCount: number;
|
|
28
|
+
createdAt: string;
|
|
29
|
+
updatedAt: string;
|
|
30
|
+
encryption: EncryptionStatus;
|
|
31
|
+
}
|
|
32
|
+
export interface WalletGroup extends WalletGroupSummary {
|
|
33
|
+
accounts: DerivedAccount[];
|
|
34
|
+
}
|
|
35
|
+
export interface WalletKeySummary {
|
|
36
|
+
id: string;
|
|
37
|
+
fingerprint: string;
|
|
38
|
+
walletCount: number;
|
|
39
|
+
createdAt: string;
|
|
40
|
+
updatedAt: string;
|
|
41
|
+
encryption: EncryptionStatus;
|
|
42
|
+
}
|
|
43
|
+
export interface WalletGroupMetadataExport {
|
|
44
|
+
version: number;
|
|
45
|
+
exportedAt: string;
|
|
46
|
+
key: WalletKeySummary;
|
|
47
|
+
wallet: WalletGroupSummary;
|
|
48
|
+
addresses: DerivedAccount[];
|
|
49
|
+
}
|
|
50
|
+
export interface CreateWalletGroupOptions {
|
|
51
|
+
name: string;
|
|
52
|
+
chain?: SupportedChain;
|
|
53
|
+
network?: SupportedNetwork;
|
|
54
|
+
words?: MnemonicWordCount;
|
|
55
|
+
accountLabel?: string | null;
|
|
56
|
+
encryptionPassword?: string;
|
|
57
|
+
}
|
|
58
|
+
export interface CreateWalletGroupResult {
|
|
59
|
+
group: WalletGroup;
|
|
60
|
+
firstAccount: DerivedAccount;
|
|
61
|
+
mnemonic: string;
|
|
62
|
+
}
|
|
63
|
+
export interface ImportWalletGroupOptions {
|
|
64
|
+
name: string;
|
|
65
|
+
chain?: SupportedChain;
|
|
66
|
+
network?: SupportedNetwork;
|
|
67
|
+
mnemonic: string;
|
|
68
|
+
accountLabel?: string | null;
|
|
69
|
+
encryptionPassword?: string;
|
|
70
|
+
}
|
|
71
|
+
export interface ImportWalletGroupResult {
|
|
72
|
+
group: WalletGroup;
|
|
73
|
+
account: DerivedAccount;
|
|
74
|
+
reusedExistingGroup: boolean;
|
|
75
|
+
}
|
|
76
|
+
export interface DeriveAddressOptions {
|
|
77
|
+
group: string;
|
|
78
|
+
label?: string | null;
|
|
79
|
+
encryptionPassword?: string;
|
|
80
|
+
}
|
|
81
|
+
export interface LabelAccountOptions {
|
|
82
|
+
group: string;
|
|
83
|
+
index: number;
|
|
84
|
+
label?: string | null;
|
|
85
|
+
}
|
|
86
|
+
export interface WalletManagerOptions {
|
|
87
|
+
storageDir?: string;
|
|
88
|
+
store?: WalletStore;
|
|
89
|
+
}
|
|
90
|
+
export interface EncryptedSecretEnvelope {
|
|
91
|
+
algorithm: 'aes-256-gcm';
|
|
92
|
+
kdf: 'scrypt';
|
|
93
|
+
salt: string;
|
|
94
|
+
iv: string;
|
|
95
|
+
tag: string;
|
|
96
|
+
ciphertext: string;
|
|
97
|
+
kdfParams: {
|
|
98
|
+
cost: number;
|
|
99
|
+
blockSize: number;
|
|
100
|
+
parallelization: number;
|
|
101
|
+
keyLength: number;
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
export interface EncryptedStoredSecretRecord {
|
|
105
|
+
keyId: string;
|
|
106
|
+
type: 'encrypted';
|
|
107
|
+
envelope: EncryptedSecretEnvelope;
|
|
108
|
+
}
|
|
109
|
+
export type StoredSecretRecord = EncryptedStoredSecretRecord;
|
|
110
|
+
export interface StoredWalletKey {
|
|
111
|
+
id: string;
|
|
112
|
+
fingerprint: string;
|
|
113
|
+
encryption: EncryptionStatus;
|
|
114
|
+
createdAt: string;
|
|
115
|
+
updatedAt: string;
|
|
116
|
+
}
|
|
117
|
+
export interface StoredWallet {
|
|
118
|
+
id: string;
|
|
119
|
+
keyId: string;
|
|
120
|
+
name: string;
|
|
121
|
+
chain: SupportedChain;
|
|
122
|
+
network: SupportedNetwork;
|
|
123
|
+
nextAccountIndex: number;
|
|
124
|
+
createdAt: string;
|
|
125
|
+
updatedAt: string;
|
|
126
|
+
}
|
|
127
|
+
export interface StoredWalletAddress {
|
|
128
|
+
id: string;
|
|
129
|
+
walletId: string;
|
|
130
|
+
chain: SupportedChain;
|
|
131
|
+
network: SupportedNetwork;
|
|
132
|
+
address: string;
|
|
133
|
+
derivationPath: string;
|
|
134
|
+
index: number;
|
|
135
|
+
label: string | null;
|
|
136
|
+
createdAt: string;
|
|
137
|
+
updatedAt: string;
|
|
138
|
+
}
|
|
139
|
+
export interface StoredMetadataFile {
|
|
140
|
+
version: number;
|
|
141
|
+
keys: StoredWalletKey[];
|
|
142
|
+
wallets: StoredWallet[];
|
|
143
|
+
addresses: StoredWalletAddress[];
|
|
144
|
+
}
|
|
145
|
+
export interface StoredSecretsFile {
|
|
146
|
+
version: number;
|
|
147
|
+
keys: StoredSecretRecord[];
|
|
148
|
+
}
|
|
149
|
+
export interface StorageState {
|
|
150
|
+
metadata: StoredMetadataFile;
|
|
151
|
+
secrets: StoredSecretsFile;
|
|
152
|
+
}
|
|
153
|
+
export interface WalletGroupMetadataJson {
|
|
154
|
+
version: number;
|
|
155
|
+
key: StoredWalletKey;
|
|
156
|
+
wallet: StoredWallet;
|
|
157
|
+
addresses: StoredWalletAddress[];
|
|
158
|
+
}
|
|
159
|
+
export interface WalletGroupSecretsJson {
|
|
160
|
+
version: number;
|
|
161
|
+
secret: EncryptedStoredSecretRecord;
|
|
162
|
+
}
|
|
163
|
+
export interface WalletRecordAddressExport {
|
|
164
|
+
address: string;
|
|
165
|
+
derivationPath: string;
|
|
166
|
+
accountIndex: number;
|
|
167
|
+
label: string | null;
|
|
168
|
+
}
|
|
169
|
+
export interface WalletGroupRecordExport {
|
|
170
|
+
groupName: string;
|
|
171
|
+
chain: SupportedChain;
|
|
172
|
+
keyFingerprint: string;
|
|
173
|
+
metadataJson: WalletGroupMetadataJson;
|
|
174
|
+
secretsJson: WalletGroupSecretsJson;
|
|
175
|
+
addresses: WalletRecordAddressExport[];
|
|
176
|
+
}
|
|
177
|
+
export interface WalletStore {
|
|
178
|
+
read(): Promise<StorageState>;
|
|
179
|
+
mutate<T>(mutator: (state: StorageState) => Promise<{
|
|
180
|
+
result: T;
|
|
181
|
+
state: StorageState;
|
|
182
|
+
}> | {
|
|
183
|
+
result: T;
|
|
184
|
+
state: StorageState;
|
|
185
|
+
}): Promise<T>;
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED