@xyo-network/wallet 2.62.2 → 3.14.8

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.
Files changed (92) hide show
  1. package/README.md +1 -1
  2. package/dist/browser/index.mjs +153 -0
  3. package/dist/browser/index.mjs.map +1 -0
  4. package/dist/neutral/index.mjs +153 -0
  5. package/dist/neutral/index.mjs.map +1 -0
  6. package/dist/node/index.mjs +153 -0
  7. package/dist/node/index.mjs.map +1 -0
  8. package/dist/types/HDWallet.d.ts +37 -0
  9. package/dist/types/HDWallet.d.ts.map +1 -0
  10. package/dist/types/index.d.ts +1 -2
  11. package/dist/types/index.d.ts.map +1 -1
  12. package/knip.config.ts +16 -0
  13. package/package.json +36 -45
  14. package/src/HDWallet.ts +165 -0
  15. package/src/index.ts +1 -2
  16. package/xy.config.ts +9 -0
  17. package/dist/cjs/Wallet/Base/Base.js +0 -35
  18. package/dist/cjs/Wallet/Base/Base.js.map +0 -1
  19. package/dist/cjs/Wallet/Base/index.js +0 -5
  20. package/dist/cjs/Wallet/Base/index.js.map +0 -1
  21. package/dist/cjs/Wallet/index.js +0 -5
  22. package/dist/cjs/Wallet/index.js.map +0 -1
  23. package/dist/cjs/Words/Words.js +0 -2060
  24. package/dist/cjs/Words/Words.js.map +0 -1
  25. package/dist/cjs/Words/WordsPayload.js +0 -5
  26. package/dist/cjs/Words/WordsPayload.js.map +0 -1
  27. package/dist/cjs/Words/index.js +0 -6
  28. package/dist/cjs/Words/index.js.map +0 -1
  29. package/dist/cjs/browser/WebWallet/Web.js +0 -15
  30. package/dist/cjs/browser/WebWallet/Web.js.map +0 -1
  31. package/dist/cjs/browser/WebWallet/index.js +0 -5
  32. package/dist/cjs/browser/WebWallet/index.js.map +0 -1
  33. package/dist/cjs/browser/index.js +0 -5
  34. package/dist/cjs/browser/index.js.map +0 -1
  35. package/dist/cjs/browserIndex.js +0 -7
  36. package/dist/cjs/browserIndex.js.map +0 -1
  37. package/dist/cjs/index.js +0 -6
  38. package/dist/cjs/index.js.map +0 -1
  39. package/dist/docs.json +0 -558
  40. package/dist/esm/Wallet/Base/Base.js +0 -30
  41. package/dist/esm/Wallet/Base/Base.js.map +0 -1
  42. package/dist/esm/Wallet/Base/index.js +0 -2
  43. package/dist/esm/Wallet/Base/index.js.map +0 -1
  44. package/dist/esm/Wallet/index.js +0 -2
  45. package/dist/esm/Wallet/index.js.map +0 -1
  46. package/dist/esm/Words/Words.js +0 -2057
  47. package/dist/esm/Words/Words.js.map +0 -1
  48. package/dist/esm/Words/WordsPayload.js +0 -2
  49. package/dist/esm/Words/WordsPayload.js.map +0 -1
  50. package/dist/esm/Words/index.js +0 -3
  51. package/dist/esm/Words/index.js.map +0 -1
  52. package/dist/esm/browser/WebWallet/Web.js +0 -11
  53. package/dist/esm/browser/WebWallet/Web.js.map +0 -1
  54. package/dist/esm/browser/WebWallet/index.js +0 -2
  55. package/dist/esm/browser/WebWallet/index.js.map +0 -1
  56. package/dist/esm/browser/index.js +0 -2
  57. package/dist/esm/browser/index.js.map +0 -1
  58. package/dist/esm/browserIndex.js +0 -4
  59. package/dist/esm/browserIndex.js.map +0 -1
  60. package/dist/esm/index.js +0 -3
  61. package/dist/esm/index.js.map +0 -1
  62. package/dist/types/Wallet/Base/Base.d.ts +0 -9
  63. package/dist/types/Wallet/Base/Base.d.ts.map +0 -1
  64. package/dist/types/Wallet/Base/index.d.ts +0 -2
  65. package/dist/types/Wallet/Base/index.d.ts.map +0 -1
  66. package/dist/types/Wallet/index.d.ts +0 -2
  67. package/dist/types/Wallet/index.d.ts.map +0 -1
  68. package/dist/types/Words/Words.d.ts +0 -3
  69. package/dist/types/Words/Words.d.ts.map +0 -1
  70. package/dist/types/Words/WordsPayload.d.ts +0 -8
  71. package/dist/types/Words/WordsPayload.d.ts.map +0 -1
  72. package/dist/types/Words/index.d.ts +0 -3
  73. package/dist/types/Words/index.d.ts.map +0 -1
  74. package/dist/types/browser/WebWallet/Web.d.ts +0 -6
  75. package/dist/types/browser/WebWallet/Web.d.ts.map +0 -1
  76. package/dist/types/browser/WebWallet/index.d.ts +0 -2
  77. package/dist/types/browser/WebWallet/index.d.ts.map +0 -1
  78. package/dist/types/browser/index.d.ts +0 -2
  79. package/dist/types/browser/index.d.ts.map +0 -1
  80. package/dist/types/browserIndex.d.ts +0 -4
  81. package/dist/types/browserIndex.d.ts.map +0 -1
  82. package/src/Wallet/Base/Base.ts +0 -34
  83. package/src/Wallet/Base/index.ts +0 -1
  84. package/src/Wallet/index.ts +0 -1
  85. package/src/Words/Words.ts +0 -2057
  86. package/src/Words/WordsPayload.ts +0 -9
  87. package/src/Words/index.ts +0 -2
  88. package/src/browser/WebWallet/Web.ts +0 -13
  89. package/src/browser/WebWallet/index.ts +0 -1
  90. package/src/browser/index.ts +0 -1
  91. package/src/browserIndex.ts +0 -3
  92. package/typedoc.json +0 -5
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  [![logo][]](https://xyo.network)
2
2
 
3
- Part of [sdk-xyo-clint-js](https://www.npmjs.com/package/@xyo-network/sdk-xyo-client-js)
3
+ Part of [sdk-xyo-client-js](https://www.npmjs.com/package/@xyo-network/sdk-xyo-client-js)
4
4
 
5
5
  ## License
6
6
 
@@ -0,0 +1,153 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
+ var __decorateClass = (decorators, target, key, kind) => {
5
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
6
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
7
+ if (decorator = decorators[i])
8
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
9
+ if (kind && result) __defProp(target, key, result);
10
+ return result;
11
+ };
12
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
13
+
14
+ // src/HDWallet.ts
15
+ import { generateMnemonic } from "@scure/bip39";
16
+ import { wordlist as englishWordlist } from "@scure/bip39/wordlists/english";
17
+ import { toUint8Array } from "@xylabs/arraybuffer";
18
+ import { assertEx } from "@xylabs/assert";
19
+ import { globallyUnique } from "@xylabs/base";
20
+ import {
21
+ hexFromHexString
22
+ } from "@xylabs/hex";
23
+ import { staticImplements } from "@xylabs/static-implements";
24
+ import { Account, PrivateKey } from "@xyo-network/account";
25
+ import {
26
+ isMnemonicInitializationConfig,
27
+ isPhraseInitializationConfig,
28
+ isPrivateKeyInitializationConfig
29
+ } from "@xyo-network/account-model";
30
+ import {
31
+ defaultPath,
32
+ HDNodeWallet,
33
+ Mnemonic
34
+ } from "ethers";
35
+ var HDWallet = class extends Account {
36
+ constructor(key, node, privateKey) {
37
+ super(Account._protectedConstructorKey, privateKey);
38
+ this.node = node;
39
+ }
40
+ get address() {
41
+ return hexFromHexString(this.node.address, { prefix: false });
42
+ }
43
+ get addressBytes() {
44
+ return toUint8Array(this.address, void 0, 16).buffer;
45
+ }
46
+ get chainCode() {
47
+ return this.node.chainCode;
48
+ }
49
+ get depth() {
50
+ return this.node.depth;
51
+ }
52
+ get extendedKey() {
53
+ return this.node.extendedKey;
54
+ }
55
+ get fingerprint() {
56
+ return this.node.fingerprint;
57
+ }
58
+ get index() {
59
+ return this.node.index;
60
+ }
61
+ get mnemonic() {
62
+ return this.node.mnemonic;
63
+ }
64
+ get parentFingerprint() {
65
+ return this.node.parentFingerprint;
66
+ }
67
+ get path() {
68
+ return this.node.path;
69
+ }
70
+ get privateKey() {
71
+ return this.node.privateKey.toLowerCase();
72
+ }
73
+ get publicKey() {
74
+ return this.node.publicKey.toLowerCase();
75
+ }
76
+ static async create(opts) {
77
+ if (isPhraseInitializationConfig(opts)) {
78
+ return await this.fromPhrase(opts.phrase);
79
+ }
80
+ if (isMnemonicInitializationConfig(opts)) {
81
+ return await this.fromPhrase(opts.mnemonic, opts.path);
82
+ }
83
+ if (isPrivateKeyInitializationConfig(opts)) {
84
+ throw new Error("Invalid initialization config. from privateKey not supported. Use Account.fromPrivateKey instead.");
85
+ }
86
+ throw new Error("Invalid initialization config");
87
+ }
88
+ static async createFromNode(node, previousHash) {
89
+ return await this.createFromNodeInternal(node, previousHash);
90
+ }
91
+ static async fromExtendedKey(key) {
92
+ const node = HDNodeWallet.fromExtendedKey(key);
93
+ return await HDWallet.createFromNode(node);
94
+ }
95
+ static async fromMnemonic(mnemonic, path = defaultPath) {
96
+ const node = HDNodeWallet.fromMnemonic(mnemonic, path);
97
+ const createdWallet = await this.createFromNodeInternal(node);
98
+ return this.getCachedWalletOrCacheNewWallet(createdWallet);
99
+ }
100
+ static async fromPhrase(phrase, path = defaultPath) {
101
+ return await this.fromMnemonic(Mnemonic.fromPhrase(phrase), path);
102
+ }
103
+ static async fromSeed(seed) {
104
+ const node = HDNodeWallet.fromSeed(toUint8Array(seed));
105
+ const createdWallet = await this.createFromNodeInternal(node);
106
+ return this.getCachedWalletOrCacheNewWallet(createdWallet);
107
+ }
108
+ static generateMnemonic(wordlist = englishWordlist, strength = 256) {
109
+ return generateMnemonic(wordlist, strength);
110
+ }
111
+ static async random() {
112
+ return await this.fromMnemonic(Mnemonic.fromPhrase(HDWallet.generateMnemonic()));
113
+ }
114
+ static async createFromNodeInternal(node, previousHash) {
115
+ const privateKey = toUint8Array(node.privateKey.replace("0x", ""));
116
+ assertEx(!privateKey || privateKey?.length === 32, () => `Private key must be 32 bytes [${privateKey?.length}]`);
117
+ const newWallet = await new HDWallet(Account._protectedConstructorKey, node, await PrivateKey.create(privateKey.buffer)).loadPreviousHash(previousHash);
118
+ return HDWallet._addressMap[newWallet.address]?.deref() ?? newWallet;
119
+ }
120
+ static getCachedWalletOrCacheNewWallet(createdWallet) {
121
+ const existingWallet = this._addressMap[createdWallet.address]?.deref();
122
+ if (existingWallet) {
123
+ return existingWallet;
124
+ }
125
+ const ref = new WeakRef(createdWallet);
126
+ this._addressMap[createdWallet.address] = ref;
127
+ return createdWallet;
128
+ }
129
+ async derivePath(path) {
130
+ if (path.startsWith("m/")) {
131
+ const parentPath = this.path;
132
+ if (parentPath !== null && path.startsWith(parentPath)) {
133
+ const childPath = path.slice(parentPath.length + 1);
134
+ return await HDWallet.createFromNode(this.node.derivePath(childPath));
135
+ }
136
+ throw new Error(`Invalid absolute path ${path} for wallet with path ${parentPath}`);
137
+ }
138
+ return await HDWallet.createFromNode(this.node.derivePath(path));
139
+ }
140
+ neuter = () => {
141
+ this.node.neuter();
142
+ return this;
143
+ };
144
+ };
145
+ __publicField(HDWallet, "uniqueName", globallyUnique("HDWallet", HDWallet, "xyo"));
146
+ __publicField(HDWallet, "_addressMap", {});
147
+ HDWallet = __decorateClass([
148
+ staticImplements()
149
+ ], HDWallet);
150
+ export {
151
+ HDWallet
152
+ };
153
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/HDWallet.ts"],"sourcesContent":["import { generateMnemonic } from '@scure/bip39'\nimport { wordlist as englishWordlist } from '@scure/bip39/wordlists/english'\nimport { toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { globallyUnique } from '@xylabs/base'\nimport {\n Address, Hex, hexFromHexString,\n} from '@xylabs/hex'\nimport { staticImplements } from '@xylabs/static-implements'\nimport { Account, PrivateKey } from '@xyo-network/account'\nimport {\n AccountConfig,\n isMnemonicInitializationConfig,\n isPhraseInitializationConfig,\n isPrivateKeyInitializationConfig,\n} from '@xyo-network/account-model'\nimport type { PrivateKeyInstance } from '@xyo-network/key-model'\nimport { WalletInstance, WalletStatic } from '@xyo-network/wallet-model'\nimport {\n defaultPath, HDNodeWallet, Mnemonic,\n} from 'ethers'\n\n@staticImplements<WalletStatic>()\nexport class HDWallet extends Account implements WalletInstance {\n static override readonly uniqueName = globallyUnique('HDWallet', HDWallet, 'xyo')\n protected static override _addressMap: Record<Address, WeakRef<WalletInstance>> = {}\n\n constructor(\n key: unknown,\n protected readonly node: HDNodeWallet,\n privateKey: PrivateKeyInstance,\n ) {\n super(Account._protectedConstructorKey, privateKey)\n }\n\n override get address(): Address {\n return hexFromHexString(this.node.address, { prefix: false })\n }\n\n override get addressBytes(): ArrayBufferLike {\n return toUint8Array(this.address, undefined, 16).buffer\n }\n\n get chainCode(): string {\n return this.node.chainCode\n }\n\n get depth(): number {\n return this.node.depth\n }\n\n get extendedKey(): string {\n return this.node.extendedKey\n }\n\n get fingerprint(): string {\n return this.node.fingerprint\n }\n\n get index(): number {\n return this.node.index\n }\n\n get mnemonic(): Mnemonic | null {\n return this.node.mnemonic\n }\n\n get parentFingerprint(): string {\n return this.node.parentFingerprint\n }\n\n get path(): string | null {\n return this.node.path\n }\n\n get privateKey(): Hex {\n return this.node.privateKey.toLowerCase() as Hex\n }\n\n get publicKey(): Hex {\n return this.node.publicKey.toLowerCase() as Hex\n }\n\n static override async create(opts?: AccountConfig): Promise<WalletInstance> {\n if (isPhraseInitializationConfig(opts)) {\n return await this.fromPhrase(opts.phrase)\n }\n if (isMnemonicInitializationConfig(opts)) {\n return await this.fromPhrase(opts.mnemonic, opts.path)\n }\n if (isPrivateKeyInitializationConfig(opts)) {\n throw new Error('Invalid initialization config. from privateKey not supported. Use Account.fromPrivateKey instead.')\n }\n throw new Error('Invalid initialization config')\n }\n\n static async createFromNode(node: HDNodeWallet, previousHash?: string): Promise<WalletInstance> {\n return await this.createFromNodeInternal(node, previousHash)\n }\n\n static async fromExtendedKey(key: string): Promise<WalletInstance> {\n const node = HDNodeWallet.fromExtendedKey(key)\n /* TODO: Handle HDNodeVoidWallet */\n return await HDWallet.createFromNode(node as HDNodeWallet)\n }\n\n static async fromMnemonic(mnemonic: Mnemonic, path: string = defaultPath): Promise<WalletInstance> {\n const node = HDNodeWallet.fromMnemonic(mnemonic, path)\n const createdWallet = await this.createFromNodeInternal(node)\n return this.getCachedWalletOrCacheNewWallet(createdWallet)\n }\n\n static async fromPhrase(phrase: string, path: string = defaultPath): Promise<WalletInstance> {\n return await this.fromMnemonic(Mnemonic.fromPhrase(phrase), path)\n }\n\n static async fromSeed(seed: string | ArrayBufferLike): Promise<WalletInstance> {\n const node = HDNodeWallet.fromSeed(toUint8Array(seed))\n const createdWallet = await this.createFromNodeInternal(node)\n return this.getCachedWalletOrCacheNewWallet(createdWallet)\n }\n\n static generateMnemonic(wordlist: string[] = englishWordlist, strength: number = 256): string {\n return generateMnemonic(wordlist, strength)\n }\n\n static override async random(): Promise<WalletInstance> {\n return await this.fromMnemonic(Mnemonic.fromPhrase(HDWallet.generateMnemonic()))\n }\n\n protected static async createFromNodeInternal(node: HDNodeWallet, previousHash?: string): Promise<WalletInstance> {\n const privateKey = toUint8Array(node.privateKey.replace('0x', ''))\n assertEx(!privateKey || privateKey?.length === 32, () => `Private key must be 32 bytes [${privateKey?.length}]`)\n const newWallet = await new HDWallet(Account._protectedConstructorKey, node, await PrivateKey.create(privateKey.buffer)).loadPreviousHash(previousHash)\n return HDWallet._addressMap[newWallet.address]?.deref() ?? newWallet\n }\n\n protected static getCachedWalletOrCacheNewWallet(createdWallet: WalletInstance): WalletInstance {\n const existingWallet = this._addressMap[createdWallet.address]?.deref()\n if (existingWallet) {\n return existingWallet\n }\n const ref = new WeakRef(createdWallet)\n this._addressMap[createdWallet.address] = ref\n return createdWallet\n }\n\n async derivePath(path: string): Promise<WalletInstance> {\n // if an absolute path, check if it matches the parent root and work with it\n if (path.startsWith('m/')) {\n const parentPath = this.path\n if (parentPath !== null && path.startsWith(parentPath)) {\n const childPath = path.slice(parentPath.length + 1)\n return await HDWallet.createFromNode(this.node.derivePath(childPath))\n }\n throw new Error(`Invalid absolute path ${path} for wallet with path ${parentPath}`)\n }\n return await HDWallet.createFromNode(this.node.derivePath(path))\n }\n\n neuter: () => HDWallet = () => {\n this.node.neuter()\n return this\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,153 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
+ var __decorateClass = (decorators, target, key, kind) => {
5
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
6
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
7
+ if (decorator = decorators[i])
8
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
9
+ if (kind && result) __defProp(target, key, result);
10
+ return result;
11
+ };
12
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
13
+
14
+ // src/HDWallet.ts
15
+ import { generateMnemonic } from "@scure/bip39";
16
+ import { wordlist as englishWordlist } from "@scure/bip39/wordlists/english";
17
+ import { toUint8Array } from "@xylabs/arraybuffer";
18
+ import { assertEx } from "@xylabs/assert";
19
+ import { globallyUnique } from "@xylabs/base";
20
+ import {
21
+ hexFromHexString
22
+ } from "@xylabs/hex";
23
+ import { staticImplements } from "@xylabs/static-implements";
24
+ import { Account, PrivateKey } from "@xyo-network/account";
25
+ import {
26
+ isMnemonicInitializationConfig,
27
+ isPhraseInitializationConfig,
28
+ isPrivateKeyInitializationConfig
29
+ } from "@xyo-network/account-model";
30
+ import {
31
+ defaultPath,
32
+ HDNodeWallet,
33
+ Mnemonic
34
+ } from "ethers";
35
+ var HDWallet = class extends Account {
36
+ constructor(key, node, privateKey) {
37
+ super(Account._protectedConstructorKey, privateKey);
38
+ this.node = node;
39
+ }
40
+ get address() {
41
+ return hexFromHexString(this.node.address, { prefix: false });
42
+ }
43
+ get addressBytes() {
44
+ return toUint8Array(this.address, void 0, 16).buffer;
45
+ }
46
+ get chainCode() {
47
+ return this.node.chainCode;
48
+ }
49
+ get depth() {
50
+ return this.node.depth;
51
+ }
52
+ get extendedKey() {
53
+ return this.node.extendedKey;
54
+ }
55
+ get fingerprint() {
56
+ return this.node.fingerprint;
57
+ }
58
+ get index() {
59
+ return this.node.index;
60
+ }
61
+ get mnemonic() {
62
+ return this.node.mnemonic;
63
+ }
64
+ get parentFingerprint() {
65
+ return this.node.parentFingerprint;
66
+ }
67
+ get path() {
68
+ return this.node.path;
69
+ }
70
+ get privateKey() {
71
+ return this.node.privateKey.toLowerCase();
72
+ }
73
+ get publicKey() {
74
+ return this.node.publicKey.toLowerCase();
75
+ }
76
+ static async create(opts) {
77
+ if (isPhraseInitializationConfig(opts)) {
78
+ return await this.fromPhrase(opts.phrase);
79
+ }
80
+ if (isMnemonicInitializationConfig(opts)) {
81
+ return await this.fromPhrase(opts.mnemonic, opts.path);
82
+ }
83
+ if (isPrivateKeyInitializationConfig(opts)) {
84
+ throw new Error("Invalid initialization config. from privateKey not supported. Use Account.fromPrivateKey instead.");
85
+ }
86
+ throw new Error("Invalid initialization config");
87
+ }
88
+ static async createFromNode(node, previousHash) {
89
+ return await this.createFromNodeInternal(node, previousHash);
90
+ }
91
+ static async fromExtendedKey(key) {
92
+ const node = HDNodeWallet.fromExtendedKey(key);
93
+ return await HDWallet.createFromNode(node);
94
+ }
95
+ static async fromMnemonic(mnemonic, path = defaultPath) {
96
+ const node = HDNodeWallet.fromMnemonic(mnemonic, path);
97
+ const createdWallet = await this.createFromNodeInternal(node);
98
+ return this.getCachedWalletOrCacheNewWallet(createdWallet);
99
+ }
100
+ static async fromPhrase(phrase, path = defaultPath) {
101
+ return await this.fromMnemonic(Mnemonic.fromPhrase(phrase), path);
102
+ }
103
+ static async fromSeed(seed) {
104
+ const node = HDNodeWallet.fromSeed(toUint8Array(seed));
105
+ const createdWallet = await this.createFromNodeInternal(node);
106
+ return this.getCachedWalletOrCacheNewWallet(createdWallet);
107
+ }
108
+ static generateMnemonic(wordlist = englishWordlist, strength = 256) {
109
+ return generateMnemonic(wordlist, strength);
110
+ }
111
+ static async random() {
112
+ return await this.fromMnemonic(Mnemonic.fromPhrase(HDWallet.generateMnemonic()));
113
+ }
114
+ static async createFromNodeInternal(node, previousHash) {
115
+ const privateKey = toUint8Array(node.privateKey.replace("0x", ""));
116
+ assertEx(!privateKey || privateKey?.length === 32, () => `Private key must be 32 bytes [${privateKey?.length}]`);
117
+ const newWallet = await new HDWallet(Account._protectedConstructorKey, node, await PrivateKey.create(privateKey.buffer)).loadPreviousHash(previousHash);
118
+ return HDWallet._addressMap[newWallet.address]?.deref() ?? newWallet;
119
+ }
120
+ static getCachedWalletOrCacheNewWallet(createdWallet) {
121
+ const existingWallet = this._addressMap[createdWallet.address]?.deref();
122
+ if (existingWallet) {
123
+ return existingWallet;
124
+ }
125
+ const ref = new WeakRef(createdWallet);
126
+ this._addressMap[createdWallet.address] = ref;
127
+ return createdWallet;
128
+ }
129
+ async derivePath(path) {
130
+ if (path.startsWith("m/")) {
131
+ const parentPath = this.path;
132
+ if (parentPath !== null && path.startsWith(parentPath)) {
133
+ const childPath = path.slice(parentPath.length + 1);
134
+ return await HDWallet.createFromNode(this.node.derivePath(childPath));
135
+ }
136
+ throw new Error(`Invalid absolute path ${path} for wallet with path ${parentPath}`);
137
+ }
138
+ return await HDWallet.createFromNode(this.node.derivePath(path));
139
+ }
140
+ neuter = () => {
141
+ this.node.neuter();
142
+ return this;
143
+ };
144
+ };
145
+ __publicField(HDWallet, "uniqueName", globallyUnique("HDWallet", HDWallet, "xyo"));
146
+ __publicField(HDWallet, "_addressMap", {});
147
+ HDWallet = __decorateClass([
148
+ staticImplements()
149
+ ], HDWallet);
150
+ export {
151
+ HDWallet
152
+ };
153
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/HDWallet.ts"],"sourcesContent":["import { generateMnemonic } from '@scure/bip39'\nimport { wordlist as englishWordlist } from '@scure/bip39/wordlists/english'\nimport { toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { globallyUnique } from '@xylabs/base'\nimport {\n Address, Hex, hexFromHexString,\n} from '@xylabs/hex'\nimport { staticImplements } from '@xylabs/static-implements'\nimport { Account, PrivateKey } from '@xyo-network/account'\nimport {\n AccountConfig,\n isMnemonicInitializationConfig,\n isPhraseInitializationConfig,\n isPrivateKeyInitializationConfig,\n} from '@xyo-network/account-model'\nimport type { PrivateKeyInstance } from '@xyo-network/key-model'\nimport { WalletInstance, WalletStatic } from '@xyo-network/wallet-model'\nimport {\n defaultPath, HDNodeWallet, Mnemonic,\n} from 'ethers'\n\n@staticImplements<WalletStatic>()\nexport class HDWallet extends Account implements WalletInstance {\n static override readonly uniqueName = globallyUnique('HDWallet', HDWallet, 'xyo')\n protected static override _addressMap: Record<Address, WeakRef<WalletInstance>> = {}\n\n constructor(\n key: unknown,\n protected readonly node: HDNodeWallet,\n privateKey: PrivateKeyInstance,\n ) {\n super(Account._protectedConstructorKey, privateKey)\n }\n\n override get address(): Address {\n return hexFromHexString(this.node.address, { prefix: false })\n }\n\n override get addressBytes(): ArrayBufferLike {\n return toUint8Array(this.address, undefined, 16).buffer\n }\n\n get chainCode(): string {\n return this.node.chainCode\n }\n\n get depth(): number {\n return this.node.depth\n }\n\n get extendedKey(): string {\n return this.node.extendedKey\n }\n\n get fingerprint(): string {\n return this.node.fingerprint\n }\n\n get index(): number {\n return this.node.index\n }\n\n get mnemonic(): Mnemonic | null {\n return this.node.mnemonic\n }\n\n get parentFingerprint(): string {\n return this.node.parentFingerprint\n }\n\n get path(): string | null {\n return this.node.path\n }\n\n get privateKey(): Hex {\n return this.node.privateKey.toLowerCase() as Hex\n }\n\n get publicKey(): Hex {\n return this.node.publicKey.toLowerCase() as Hex\n }\n\n static override async create(opts?: AccountConfig): Promise<WalletInstance> {\n if (isPhraseInitializationConfig(opts)) {\n return await this.fromPhrase(opts.phrase)\n }\n if (isMnemonicInitializationConfig(opts)) {\n return await this.fromPhrase(opts.mnemonic, opts.path)\n }\n if (isPrivateKeyInitializationConfig(opts)) {\n throw new Error('Invalid initialization config. from privateKey not supported. Use Account.fromPrivateKey instead.')\n }\n throw new Error('Invalid initialization config')\n }\n\n static async createFromNode(node: HDNodeWallet, previousHash?: string): Promise<WalletInstance> {\n return await this.createFromNodeInternal(node, previousHash)\n }\n\n static async fromExtendedKey(key: string): Promise<WalletInstance> {\n const node = HDNodeWallet.fromExtendedKey(key)\n /* TODO: Handle HDNodeVoidWallet */\n return await HDWallet.createFromNode(node as HDNodeWallet)\n }\n\n static async fromMnemonic(mnemonic: Mnemonic, path: string = defaultPath): Promise<WalletInstance> {\n const node = HDNodeWallet.fromMnemonic(mnemonic, path)\n const createdWallet = await this.createFromNodeInternal(node)\n return this.getCachedWalletOrCacheNewWallet(createdWallet)\n }\n\n static async fromPhrase(phrase: string, path: string = defaultPath): Promise<WalletInstance> {\n return await this.fromMnemonic(Mnemonic.fromPhrase(phrase), path)\n }\n\n static async fromSeed(seed: string | ArrayBufferLike): Promise<WalletInstance> {\n const node = HDNodeWallet.fromSeed(toUint8Array(seed))\n const createdWallet = await this.createFromNodeInternal(node)\n return this.getCachedWalletOrCacheNewWallet(createdWallet)\n }\n\n static generateMnemonic(wordlist: string[] = englishWordlist, strength: number = 256): string {\n return generateMnemonic(wordlist, strength)\n }\n\n static override async random(): Promise<WalletInstance> {\n return await this.fromMnemonic(Mnemonic.fromPhrase(HDWallet.generateMnemonic()))\n }\n\n protected static async createFromNodeInternal(node: HDNodeWallet, previousHash?: string): Promise<WalletInstance> {\n const privateKey = toUint8Array(node.privateKey.replace('0x', ''))\n assertEx(!privateKey || privateKey?.length === 32, () => `Private key must be 32 bytes [${privateKey?.length}]`)\n const newWallet = await new HDWallet(Account._protectedConstructorKey, node, await PrivateKey.create(privateKey.buffer)).loadPreviousHash(previousHash)\n return HDWallet._addressMap[newWallet.address]?.deref() ?? newWallet\n }\n\n protected static getCachedWalletOrCacheNewWallet(createdWallet: WalletInstance): WalletInstance {\n const existingWallet = this._addressMap[createdWallet.address]?.deref()\n if (existingWallet) {\n return existingWallet\n }\n const ref = new WeakRef(createdWallet)\n this._addressMap[createdWallet.address] = ref\n return createdWallet\n }\n\n async derivePath(path: string): Promise<WalletInstance> {\n // if an absolute path, check if it matches the parent root and work with it\n if (path.startsWith('m/')) {\n const parentPath = this.path\n if (parentPath !== null && path.startsWith(parentPath)) {\n const childPath = path.slice(parentPath.length + 1)\n return await HDWallet.createFromNode(this.node.derivePath(childPath))\n }\n throw new Error(`Invalid absolute path ${path} for wallet with path ${parentPath}`)\n }\n return await HDWallet.createFromNode(this.node.derivePath(path))\n }\n\n neuter: () => HDWallet = () => {\n this.node.neuter()\n return this\n }\n}\n"],"mappings":";;;;;;;;;;;;;;AAAA,SAAS,wBAAwB;AACjC,SAAS,YAAY,uBAAuB;AAC5C,SAAS,oBAAoB;AAC7B,SAAS,gBAAgB;AACzB,SAAS,sBAAsB;AAC/B;AAAA,EACgB;AAAA,OACT;AACP,SAAS,wBAAwB;AACjC,SAAS,SAAS,kBAAkB;AACpC;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP;AAAA,EACE;AAAA,EAAa;AAAA,EAAc;AAAA,OACtB;AAGA,IAAM,WAAN,cAAuB,QAAkC;AAAA,EAI9D,YACE,KACmB,MACnB,YACA;AACA,UAAM,QAAQ,0BAA0B,UAAU;AAH/B;AAAA,EAIrB;AAAA,EAEA,IAAa,UAAmB;AAC9B,WAAO,iBAAiB,KAAK,KAAK,SAAS,EAAE,QAAQ,MAAM,CAAC;AAAA,EAC9D;AAAA,EAEA,IAAa,eAAgC;AAC3C,WAAO,aAAa,KAAK,SAAS,QAAW,EAAE,EAAE;AAAA,EACnD;AAAA,EAEA,IAAI,YAAoB;AACtB,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEA,IAAI,QAAgB;AAClB,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEA,IAAI,cAAsB;AACxB,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEA,IAAI,cAAsB;AACxB,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEA,IAAI,QAAgB;AAClB,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEA,IAAI,WAA4B;AAC9B,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEA,IAAI,oBAA4B;AAC9B,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEA,IAAI,OAAsB;AACxB,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA,EAEA,IAAI,aAAkB;AACpB,WAAO,KAAK,KAAK,WAAW,YAAY;AAAA,EAC1C;AAAA,EAEA,IAAI,YAAiB;AACnB,WAAO,KAAK,KAAK,UAAU,YAAY;AAAA,EACzC;AAAA,EAEA,aAAsB,OAAO,MAA+C;AAC1E,QAAI,6BAA6B,IAAI,GAAG;AACtC,aAAO,MAAM,KAAK,WAAW,KAAK,MAAM;AAAA,IAC1C;AACA,QAAI,+BAA+B,IAAI,GAAG;AACxC,aAAO,MAAM,KAAK,WAAW,KAAK,UAAU,KAAK,IAAI;AAAA,IACvD;AACA,QAAI,iCAAiC,IAAI,GAAG;AAC1C,YAAM,IAAI,MAAM,oGAAoG;AAAA,IACtH;AACA,UAAM,IAAI,MAAM,+BAA+B;AAAA,EACjD;AAAA,EAEA,aAAa,eAAe,MAAoB,cAAgD;AAC9F,WAAO,MAAM,KAAK,uBAAuB,MAAM,YAAY;AAAA,EAC7D;AAAA,EAEA,aAAa,gBAAgB,KAAsC;AACjE,UAAM,OAAO,aAAa,gBAAgB,GAAG;AAE7C,WAAO,MAAM,SAAS,eAAe,IAAoB;AAAA,EAC3D;AAAA,EAEA,aAAa,aAAa,UAAoB,OAAe,aAAsC;AACjG,UAAM,OAAO,aAAa,aAAa,UAAU,IAAI;AACrD,UAAM,gBAAgB,MAAM,KAAK,uBAAuB,IAAI;AAC5D,WAAO,KAAK,gCAAgC,aAAa;AAAA,EAC3D;AAAA,EAEA,aAAa,WAAW,QAAgB,OAAe,aAAsC;AAC3F,WAAO,MAAM,KAAK,aAAa,SAAS,WAAW,MAAM,GAAG,IAAI;AAAA,EAClE;AAAA,EAEA,aAAa,SAAS,MAAyD;AAC7E,UAAM,OAAO,aAAa,SAAS,aAAa,IAAI,CAAC;AACrD,UAAM,gBAAgB,MAAM,KAAK,uBAAuB,IAAI;AAC5D,WAAO,KAAK,gCAAgC,aAAa;AAAA,EAC3D;AAAA,EAEA,OAAO,iBAAiB,WAAqB,iBAAiB,WAAmB,KAAa;AAC5F,WAAO,iBAAiB,UAAU,QAAQ;AAAA,EAC5C;AAAA,EAEA,aAAsB,SAAkC;AACtD,WAAO,MAAM,KAAK,aAAa,SAAS,WAAW,SAAS,iBAAiB,CAAC,CAAC;AAAA,EACjF;AAAA,EAEA,aAAuB,uBAAuB,MAAoB,cAAgD;AAChH,UAAM,aAAa,aAAa,KAAK,WAAW,QAAQ,MAAM,EAAE,CAAC;AACjE,aAAS,CAAC,cAAc,YAAY,WAAW,IAAI,MAAM,iCAAiC,YAAY,MAAM,GAAG;AAC/G,UAAM,YAAY,MAAM,IAAI,SAAS,QAAQ,0BAA0B,MAAM,MAAM,WAAW,OAAO,WAAW,MAAM,CAAC,EAAE,iBAAiB,YAAY;AACtJ,WAAO,SAAS,YAAY,UAAU,OAAO,GAAG,MAAM,KAAK;AAAA,EAC7D;AAAA,EAEA,OAAiB,gCAAgC,eAA+C;AAC9F,UAAM,iBAAiB,KAAK,YAAY,cAAc,OAAO,GAAG,MAAM;AACtE,QAAI,gBAAgB;AAClB,aAAO;AAAA,IACT;AACA,UAAM,MAAM,IAAI,QAAQ,aAAa;AACrC,SAAK,YAAY,cAAc,OAAO,IAAI;AAC1C,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,WAAW,MAAuC;AAEtD,QAAI,KAAK,WAAW,IAAI,GAAG;AACzB,YAAM,aAAa,KAAK;AACxB,UAAI,eAAe,QAAQ,KAAK,WAAW,UAAU,GAAG;AACtD,cAAM,YAAY,KAAK,MAAM,WAAW,SAAS,CAAC;AAClD,eAAO,MAAM,SAAS,eAAe,KAAK,KAAK,WAAW,SAAS,CAAC;AAAA,MACtE;AACA,YAAM,IAAI,MAAM,yBAAyB,IAAI,yBAAyB,UAAU,EAAE;AAAA,IACpF;AACA,WAAO,MAAM,SAAS,eAAe,KAAK,KAAK,WAAW,IAAI,CAAC;AAAA,EACjE;AAAA,EAEA,SAAyB,MAAM;AAC7B,SAAK,KAAK,OAAO;AACjB,WAAO;AAAA,EACT;AACF;AA5IE,cADW,UACc,cAAa,eAAe,YAAY,UAAU,KAAK;AAChF,cAFW,UAEe,eAAwD,CAAC;AAFxE,WAAN;AAAA,EADN,iBAA+B;AAAA,GACnB;","names":[]}
@@ -0,0 +1,153 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
+ var __decorateClass = (decorators, target, key, kind) => {
5
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
6
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
7
+ if (decorator = decorators[i])
8
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
9
+ if (kind && result) __defProp(target, key, result);
10
+ return result;
11
+ };
12
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
13
+
14
+ // src/HDWallet.ts
15
+ import { generateMnemonic } from "@scure/bip39";
16
+ import { wordlist as englishWordlist } from "@scure/bip39/wordlists/english";
17
+ import { toUint8Array } from "@xylabs/arraybuffer";
18
+ import { assertEx } from "@xylabs/assert";
19
+ import { globallyUnique } from "@xylabs/base";
20
+ import {
21
+ hexFromHexString
22
+ } from "@xylabs/hex";
23
+ import { staticImplements } from "@xylabs/static-implements";
24
+ import { Account, PrivateKey } from "@xyo-network/account";
25
+ import {
26
+ isMnemonicInitializationConfig,
27
+ isPhraseInitializationConfig,
28
+ isPrivateKeyInitializationConfig
29
+ } from "@xyo-network/account-model";
30
+ import {
31
+ defaultPath,
32
+ HDNodeWallet,
33
+ Mnemonic
34
+ } from "ethers";
35
+ var HDWallet = class extends Account {
36
+ constructor(key, node, privateKey) {
37
+ super(Account._protectedConstructorKey, privateKey);
38
+ this.node = node;
39
+ }
40
+ get address() {
41
+ return hexFromHexString(this.node.address, { prefix: false });
42
+ }
43
+ get addressBytes() {
44
+ return toUint8Array(this.address, void 0, 16).buffer;
45
+ }
46
+ get chainCode() {
47
+ return this.node.chainCode;
48
+ }
49
+ get depth() {
50
+ return this.node.depth;
51
+ }
52
+ get extendedKey() {
53
+ return this.node.extendedKey;
54
+ }
55
+ get fingerprint() {
56
+ return this.node.fingerprint;
57
+ }
58
+ get index() {
59
+ return this.node.index;
60
+ }
61
+ get mnemonic() {
62
+ return this.node.mnemonic;
63
+ }
64
+ get parentFingerprint() {
65
+ return this.node.parentFingerprint;
66
+ }
67
+ get path() {
68
+ return this.node.path;
69
+ }
70
+ get privateKey() {
71
+ return this.node.privateKey.toLowerCase();
72
+ }
73
+ get publicKey() {
74
+ return this.node.publicKey.toLowerCase();
75
+ }
76
+ static async create(opts) {
77
+ if (isPhraseInitializationConfig(opts)) {
78
+ return await this.fromPhrase(opts.phrase);
79
+ }
80
+ if (isMnemonicInitializationConfig(opts)) {
81
+ return await this.fromPhrase(opts.mnemonic, opts.path);
82
+ }
83
+ if (isPrivateKeyInitializationConfig(opts)) {
84
+ throw new Error("Invalid initialization config. from privateKey not supported. Use Account.fromPrivateKey instead.");
85
+ }
86
+ throw new Error("Invalid initialization config");
87
+ }
88
+ static async createFromNode(node, previousHash) {
89
+ return await this.createFromNodeInternal(node, previousHash);
90
+ }
91
+ static async fromExtendedKey(key) {
92
+ const node = HDNodeWallet.fromExtendedKey(key);
93
+ return await HDWallet.createFromNode(node);
94
+ }
95
+ static async fromMnemonic(mnemonic, path = defaultPath) {
96
+ const node = HDNodeWallet.fromMnemonic(mnemonic, path);
97
+ const createdWallet = await this.createFromNodeInternal(node);
98
+ return this.getCachedWalletOrCacheNewWallet(createdWallet);
99
+ }
100
+ static async fromPhrase(phrase, path = defaultPath) {
101
+ return await this.fromMnemonic(Mnemonic.fromPhrase(phrase), path);
102
+ }
103
+ static async fromSeed(seed) {
104
+ const node = HDNodeWallet.fromSeed(toUint8Array(seed));
105
+ const createdWallet = await this.createFromNodeInternal(node);
106
+ return this.getCachedWalletOrCacheNewWallet(createdWallet);
107
+ }
108
+ static generateMnemonic(wordlist = englishWordlist, strength = 256) {
109
+ return generateMnemonic(wordlist, strength);
110
+ }
111
+ static async random() {
112
+ return await this.fromMnemonic(Mnemonic.fromPhrase(HDWallet.generateMnemonic()));
113
+ }
114
+ static async createFromNodeInternal(node, previousHash) {
115
+ const privateKey = toUint8Array(node.privateKey.replace("0x", ""));
116
+ assertEx(!privateKey || privateKey?.length === 32, () => `Private key must be 32 bytes [${privateKey?.length}]`);
117
+ const newWallet = await new HDWallet(Account._protectedConstructorKey, node, await PrivateKey.create(privateKey.buffer)).loadPreviousHash(previousHash);
118
+ return HDWallet._addressMap[newWallet.address]?.deref() ?? newWallet;
119
+ }
120
+ static getCachedWalletOrCacheNewWallet(createdWallet) {
121
+ const existingWallet = this._addressMap[createdWallet.address]?.deref();
122
+ if (existingWallet) {
123
+ return existingWallet;
124
+ }
125
+ const ref = new WeakRef(createdWallet);
126
+ this._addressMap[createdWallet.address] = ref;
127
+ return createdWallet;
128
+ }
129
+ async derivePath(path) {
130
+ if (path.startsWith("m/")) {
131
+ const parentPath = this.path;
132
+ if (parentPath !== null && path.startsWith(parentPath)) {
133
+ const childPath = path.slice(parentPath.length + 1);
134
+ return await HDWallet.createFromNode(this.node.derivePath(childPath));
135
+ }
136
+ throw new Error(`Invalid absolute path ${path} for wallet with path ${parentPath}`);
137
+ }
138
+ return await HDWallet.createFromNode(this.node.derivePath(path));
139
+ }
140
+ neuter = () => {
141
+ this.node.neuter();
142
+ return this;
143
+ };
144
+ };
145
+ __publicField(HDWallet, "uniqueName", globallyUnique("HDWallet", HDWallet, "xyo"));
146
+ __publicField(HDWallet, "_addressMap", {});
147
+ HDWallet = __decorateClass([
148
+ staticImplements()
149
+ ], HDWallet);
150
+ export {
151
+ HDWallet
152
+ };
153
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/HDWallet.ts"],"sourcesContent":["import { generateMnemonic } from '@scure/bip39'\nimport { wordlist as englishWordlist } from '@scure/bip39/wordlists/english'\nimport { toUint8Array } from '@xylabs/arraybuffer'\nimport { assertEx } from '@xylabs/assert'\nimport { globallyUnique } from '@xylabs/base'\nimport {\n Address, Hex, hexFromHexString,\n} from '@xylabs/hex'\nimport { staticImplements } from '@xylabs/static-implements'\nimport { Account, PrivateKey } from '@xyo-network/account'\nimport {\n AccountConfig,\n isMnemonicInitializationConfig,\n isPhraseInitializationConfig,\n isPrivateKeyInitializationConfig,\n} from '@xyo-network/account-model'\nimport type { PrivateKeyInstance } from '@xyo-network/key-model'\nimport { WalletInstance, WalletStatic } from '@xyo-network/wallet-model'\nimport {\n defaultPath, HDNodeWallet, Mnemonic,\n} from 'ethers'\n\n@staticImplements<WalletStatic>()\nexport class HDWallet extends Account implements WalletInstance {\n static override readonly uniqueName = globallyUnique('HDWallet', HDWallet, 'xyo')\n protected static override _addressMap: Record<Address, WeakRef<WalletInstance>> = {}\n\n constructor(\n key: unknown,\n protected readonly node: HDNodeWallet,\n privateKey: PrivateKeyInstance,\n ) {\n super(Account._protectedConstructorKey, privateKey)\n }\n\n override get address(): Address {\n return hexFromHexString(this.node.address, { prefix: false })\n }\n\n override get addressBytes(): ArrayBufferLike {\n return toUint8Array(this.address, undefined, 16).buffer\n }\n\n get chainCode(): string {\n return this.node.chainCode\n }\n\n get depth(): number {\n return this.node.depth\n }\n\n get extendedKey(): string {\n return this.node.extendedKey\n }\n\n get fingerprint(): string {\n return this.node.fingerprint\n }\n\n get index(): number {\n return this.node.index\n }\n\n get mnemonic(): Mnemonic | null {\n return this.node.mnemonic\n }\n\n get parentFingerprint(): string {\n return this.node.parentFingerprint\n }\n\n get path(): string | null {\n return this.node.path\n }\n\n get privateKey(): Hex {\n return this.node.privateKey.toLowerCase() as Hex\n }\n\n get publicKey(): Hex {\n return this.node.publicKey.toLowerCase() as Hex\n }\n\n static override async create(opts?: AccountConfig): Promise<WalletInstance> {\n if (isPhraseInitializationConfig(opts)) {\n return await this.fromPhrase(opts.phrase)\n }\n if (isMnemonicInitializationConfig(opts)) {\n return await this.fromPhrase(opts.mnemonic, opts.path)\n }\n if (isPrivateKeyInitializationConfig(opts)) {\n throw new Error('Invalid initialization config. from privateKey not supported. Use Account.fromPrivateKey instead.')\n }\n throw new Error('Invalid initialization config')\n }\n\n static async createFromNode(node: HDNodeWallet, previousHash?: string): Promise<WalletInstance> {\n return await this.createFromNodeInternal(node, previousHash)\n }\n\n static async fromExtendedKey(key: string): Promise<WalletInstance> {\n const node = HDNodeWallet.fromExtendedKey(key)\n /* TODO: Handle HDNodeVoidWallet */\n return await HDWallet.createFromNode(node as HDNodeWallet)\n }\n\n static async fromMnemonic(mnemonic: Mnemonic, path: string = defaultPath): Promise<WalletInstance> {\n const node = HDNodeWallet.fromMnemonic(mnemonic, path)\n const createdWallet = await this.createFromNodeInternal(node)\n return this.getCachedWalletOrCacheNewWallet(createdWallet)\n }\n\n static async fromPhrase(phrase: string, path: string = defaultPath): Promise<WalletInstance> {\n return await this.fromMnemonic(Mnemonic.fromPhrase(phrase), path)\n }\n\n static async fromSeed(seed: string | ArrayBufferLike): Promise<WalletInstance> {\n const node = HDNodeWallet.fromSeed(toUint8Array(seed))\n const createdWallet = await this.createFromNodeInternal(node)\n return this.getCachedWalletOrCacheNewWallet(createdWallet)\n }\n\n static generateMnemonic(wordlist: string[] = englishWordlist, strength: number = 256): string {\n return generateMnemonic(wordlist, strength)\n }\n\n static override async random(): Promise<WalletInstance> {\n return await this.fromMnemonic(Mnemonic.fromPhrase(HDWallet.generateMnemonic()))\n }\n\n protected static async createFromNodeInternal(node: HDNodeWallet, previousHash?: string): Promise<WalletInstance> {\n const privateKey = toUint8Array(node.privateKey.replace('0x', ''))\n assertEx(!privateKey || privateKey?.length === 32, () => `Private key must be 32 bytes [${privateKey?.length}]`)\n const newWallet = await new HDWallet(Account._protectedConstructorKey, node, await PrivateKey.create(privateKey.buffer)).loadPreviousHash(previousHash)\n return HDWallet._addressMap[newWallet.address]?.deref() ?? newWallet\n }\n\n protected static getCachedWalletOrCacheNewWallet(createdWallet: WalletInstance): WalletInstance {\n const existingWallet = this._addressMap[createdWallet.address]?.deref()\n if (existingWallet) {\n return existingWallet\n }\n const ref = new WeakRef(createdWallet)\n this._addressMap[createdWallet.address] = ref\n return createdWallet\n }\n\n async derivePath(path: string): Promise<WalletInstance> {\n // if an absolute path, check if it matches the parent root and work with it\n if (path.startsWith('m/')) {\n const parentPath = this.path\n if (parentPath !== null && path.startsWith(parentPath)) {\n const childPath = path.slice(parentPath.length + 1)\n return await HDWallet.createFromNode(this.node.derivePath(childPath))\n }\n throw new Error(`Invalid absolute path ${path} for wallet with path ${parentPath}`)\n }\n return await HDWallet.createFromNode(this.node.derivePath(path))\n }\n\n neuter: () => HDWallet = () => {\n this.node.neuter()\n return this\n }\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,37 @@
1
+ import { Address, Hex } from '@xylabs/hex';
2
+ import { Account } from '@xyo-network/account';
3
+ import { AccountConfig } from '@xyo-network/account-model';
4
+ import type { PrivateKeyInstance } from '@xyo-network/key-model';
5
+ import { WalletInstance } from '@xyo-network/wallet-model';
6
+ import { HDNodeWallet, Mnemonic } from 'ethers';
7
+ export declare class HDWallet extends Account implements WalletInstance {
8
+ protected readonly node: HDNodeWallet;
9
+ static readonly uniqueName: string;
10
+ protected static _addressMap: Record<Address, WeakRef<WalletInstance>>;
11
+ constructor(key: unknown, node: HDNodeWallet, privateKey: PrivateKeyInstance);
12
+ get address(): Address;
13
+ get addressBytes(): ArrayBufferLike;
14
+ get chainCode(): string;
15
+ get depth(): number;
16
+ get extendedKey(): string;
17
+ get fingerprint(): string;
18
+ get index(): number;
19
+ get mnemonic(): Mnemonic | null;
20
+ get parentFingerprint(): string;
21
+ get path(): string | null;
22
+ get privateKey(): Hex;
23
+ get publicKey(): Hex;
24
+ static create(opts?: AccountConfig): Promise<WalletInstance>;
25
+ static createFromNode(node: HDNodeWallet, previousHash?: string): Promise<WalletInstance>;
26
+ static fromExtendedKey(key: string): Promise<WalletInstance>;
27
+ static fromMnemonic(mnemonic: Mnemonic, path?: string): Promise<WalletInstance>;
28
+ static fromPhrase(phrase: string, path?: string): Promise<WalletInstance>;
29
+ static fromSeed(seed: string | ArrayBufferLike): Promise<WalletInstance>;
30
+ static generateMnemonic(wordlist?: string[], strength?: number): string;
31
+ static random(): Promise<WalletInstance>;
32
+ protected static createFromNodeInternal(node: HDNodeWallet, previousHash?: string): Promise<WalletInstance>;
33
+ protected static getCachedWalletOrCacheNewWallet(createdWallet: WalletInstance): WalletInstance;
34
+ derivePath(path: string): Promise<WalletInstance>;
35
+ neuter: () => HDWallet;
36
+ }
37
+ //# sourceMappingURL=HDWallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HDWallet.d.ts","sourceRoot":"","sources":["../../src/HDWallet.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,OAAO,EAAE,GAAG,EACb,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,OAAO,EAAc,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EACL,aAAa,EAId,MAAM,4BAA4B,CAAA;AACnC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,cAAc,EAAgB,MAAM,2BAA2B,CAAA;AACxE,OAAO,EACQ,YAAY,EAAE,QAAQ,EACpC,MAAM,QAAQ,CAAA;AAEf,qBACa,QAAS,SAAQ,OAAQ,YAAW,cAAc;IAM3D,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY;IALvC,gBAAyB,UAAU,SAA8C;IACjF,iBAA0B,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAAK;gBAGlF,GAAG,EAAE,OAAO,EACO,IAAI,EAAE,YAAY,EACrC,UAAU,EAAE,kBAAkB;IAKhC,IAAa,OAAO,IAAI,OAAO,CAE9B;IAED,IAAa,YAAY,IAAI,eAAe,CAE3C;IAED,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,WAAW,IAAI,MAAM,CAExB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,QAAQ,IAAI,QAAQ,GAAG,IAAI,CAE9B;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IAED,IAAI,IAAI,IAAI,MAAM,GAAG,IAAI,CAExB;IAED,IAAI,UAAU,IAAI,GAAG,CAEpB;IAED,IAAI,SAAS,IAAI,GAAG,CAEnB;WAEqB,MAAM,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;WAa9D,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;WAIlF,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;WAMrD,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,GAAE,MAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;WAMrF,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,MAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;WAI/E,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC;IAM9E,MAAM,CAAC,gBAAgB,CAAC,QAAQ,GAAE,MAAM,EAAoB,EAAE,QAAQ,GAAE,MAAY,GAAG,MAAM;WAIvE,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC;qBAIhC,sBAAsB,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAOjH,SAAS,CAAC,MAAM,CAAC,+BAA+B,CAAC,aAAa,EAAE,cAAc,GAAG,cAAc;IAUzF,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAavD,MAAM,EAAE,MAAM,QAAQ,CAGrB;CACF"}
@@ -1,3 +1,2 @@
1
- export * from './Wallet';
2
- export * from './Words';
1
+ export * from './HDWallet.ts';
3
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA"}
package/knip.config.ts ADDED
@@ -0,0 +1,16 @@
1
+ import type { KnipConfig } from 'knip'
2
+
3
+ const config: KnipConfig = {
4
+ entry: [
5
+ 'src/index.ts',
6
+ ],
7
+ ignore: ['packages/**'],
8
+ project: ['src/**/*.ts*'],
9
+ typescript: {
10
+ config: [
11
+ 'tsconfig.json',
12
+ ],
13
+ },
14
+ }
15
+
16
+ export default config