jcc_wallet 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,390 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.HDWallet = exports.getBIP44Chain = exports.BIP44ChainMap = exports.BIP44Chain = void 0;
26
+ var wallet_1 = require("@swtc/wallet");
27
+ var BIP39 = __importStar(require("bip39"));
28
+ var bip32_1 = __importDefault(require("bip32"));
29
+ var ecc = __importStar(require("tiny-secp256k1"));
30
+ var constant_1 = require("./constant");
31
+ Object.defineProperty(exports, "BIP44Chain", { enumerable: true, get: function () { return constant_1.BIP44Chain; } });
32
+ Object.defineProperty(exports, "BIP44ChainMap", { enumerable: true, get: function () { return constant_1.BIP44ChainMap; } });
33
+ Object.defineProperty(exports, "getBIP44Chain", { enumerable: true, get: function () { return constant_1.getBIP44Chain; } });
34
+ var plugins_1 = require("./plugins");
35
+ var addressCodec = wallet_1.KeyPair.addressCodec;
36
+ var HDWallet = /** @class */ (function () {
37
+ /**
38
+ * generate hd wallet
39
+ *
40
+ * @param {any} opt options of generate, like:
41
+ * {
42
+ * mnemonic: "world list", // optional
43
+ * // see also:bip39 https://github.com/bitcoinjs/bip39/tree/master/ts_src/wordlists
44
+ * // language attribute appears with mnemonic attribute
45
+ * language: english default/chinese_simplified/...
46
+ * secret: "secret string", // optional, default this coding rules of SWTC chain
47
+ * keypair: {privateKey: "xxxx", publicKey: "xxxx"}
48
+ * }
49
+ * way of create hd wallet
50
+ * 1. {mnemonic: "xxx", language:"english"}
51
+ * 2. {secret: "xxxx"}
52
+ * 3. {keypair: {....}, path:{....}}
53
+ * @returns {object} return hd wallet object
54
+ */
55
+ function HDWallet(opt) {
56
+ var _this = this;
57
+ /**
58
+ * hd wallet is root or not
59
+ *
60
+ * @returns {boolean} return hd wallet root or not
61
+ */
62
+ this.isRoot = function () {
63
+ return _this._path.chain + _this._path.account + _this._path.change + _this._path.index === 0;
64
+ };
65
+ /**
66
+ * generate hd wallet by derive path, obey BIP44 protocol
67
+ *
68
+ * @param {any} opt options of derive, like:
69
+ * {
70
+ * chain: BIP44Chain.ETH, //chain code defined in bip44
71
+ * account: 0, // account for what purpose
72
+ * change: 0, // optional attrube,default always 0, for change account after transfer
73
+ * index: 0, // accout index
74
+ * }
75
+ * @returns {object} return hd wallet object
76
+ */
77
+ this.deriveWallet = function (opt) {
78
+ if (isNaN(opt.chain) || isNaN(opt.account) || isNaN(opt.index)) {
79
+ return null;
80
+ }
81
+ var hdKeypair = HDWallet.getHDKeypair(_this._secret, opt.chain, opt.account, opt.index);
82
+ return new HDWallet({
83
+ keypair: hdKeypair,
84
+ path: { chain: opt.chain, account: opt.account, change: 0, index: opt.index }
85
+ });
86
+ };
87
+ /**
88
+ * get wallet secret
89
+ *
90
+ * @returns {string} return wallet secret
91
+ */
92
+ this.secret = function () {
93
+ return _this._secret;
94
+ };
95
+ /**
96
+ * get wallet mnemonic
97
+ *
98
+ * @returns {IMnemonic} return IMnemonic object
99
+ */
100
+ this.mnemonic = function () {
101
+ return _this._mnemonic;
102
+ };
103
+ /**
104
+ * get chain of hd wallet
105
+ *
106
+ * @returns {string} return chain of hd wallet
107
+ */
108
+ this.chain = function () {
109
+ return _this.isRoot() ? constant_1.BIP44ChainMap.get(constant_1.BIP44Chain.SWTC) : constant_1.BIP44ChainMap.get(_this._path.chain);
110
+ };
111
+ /**
112
+ * get address of hd wallet
113
+ *
114
+ * @returns {string} return address of hd wallet
115
+ */
116
+ this.address = function () {
117
+ if (!_this._address) {
118
+ var chain = _this.chain();
119
+ _this._address = plugins_1.getPluginByType(chain).address(_this._secret ? _this._secret : _this._keypair, chain);
120
+ }
121
+ return _this._address;
122
+ };
123
+ /**
124
+ * check address valid or not
125
+ * @param {string} address
126
+ * @returns {boolean} true valid, false invalid
127
+ */
128
+ this.isValidAddress = function (address) {
129
+ return plugins_1.getPluginByType(_this.chain()).isValidAddress(address);
130
+ };
131
+ /**
132
+ * check secret valid or not
133
+ *
134
+ * @param {string} secret
135
+ * @returns {boolean} true valid, false invalid
136
+ */
137
+ this.isValidSecret = function (address) {
138
+ return plugins_1.getPluginByType(_this.chain()).isValidSecret(address);
139
+ };
140
+ /**
141
+ * hash message
142
+ *
143
+ * @param {string} message
144
+ * @returns {string} return hash of message
145
+ */
146
+ this.hash = function (message) {
147
+ return plugins_1.getPluginByType(_this.chain()).hash(message);
148
+ };
149
+ /**
150
+ * sign message
151
+ * @notice how to operate message(raw or hashed) is different in native sdk of different chain
152
+ * to avoid confusion, we assume that native sdk will automatically hashed message
153
+ * if not the case of native sdk, we hash this message in lower level(plugin), for example ethereum sdk
154
+ * @param {string} message
155
+ * @returns {string} return signature string
156
+ */
157
+ this.sign = function (message) {
158
+ return plugins_1.getPluginByType(_this.chain()).sign(message, _this._keypair.privateKey);
159
+ };
160
+ /**
161
+ * verify signature valid or not
162
+ *
163
+ * @param {string} message origin message
164
+ * @param {string} signature signature
165
+ * @param {string} address account which sign
166
+ * @param {IKeyPair} keypair keypair object, usually to provide public key, private key not required
167
+ *
168
+ * @returns {boolean} true valid, false invalid
169
+ */
170
+ this.verify = function (messgae, signature, address, keypair) {
171
+ if (!address) {
172
+ address = _this.address();
173
+ }
174
+ if (!keypair) {
175
+ keypair = _this._keypair;
176
+ }
177
+ return plugins_1.getPluginByType(_this.chain()).verify(messgae, signature, address, keypair);
178
+ };
179
+ /**
180
+ * recover address/account from signature
181
+ *
182
+ * @param {string} message origin message
183
+ * @param {string} signature signature
184
+ *
185
+ * @returns {string} return address
186
+ */
187
+ this.recover = function (messgae, signature) {
188
+ return plugins_1.getPluginByType(_this.chain()).recover(messgae, signature);
189
+ };
190
+ /**
191
+ * get specified chain wallet api
192
+ *
193
+ * @returns {IHDPlugin} return hd plugin object
194
+ */
195
+ this.getWalletApi = function () {
196
+ return plugins_1.getPluginByType(_this.chain());
197
+ };
198
+ /**
199
+ * get keypair of hd wallet
200
+ *
201
+ * @returns {IKeyPair} return keypair of message
202
+ */
203
+ this.keypair = function () {
204
+ return _this._keypair;
205
+ };
206
+ /**
207
+ * get path of hd wallet
208
+ *
209
+ * @returns {IBIP44Path} return path of wallet
210
+ */
211
+ this.path = function () {
212
+ return _this._path;
213
+ };
214
+ /**
215
+ * set keypair
216
+ * @param {IKeyPair} keypair
217
+ */
218
+ this.setKeypair = function (keypair) {
219
+ _this._keypair = keypair;
220
+ };
221
+ if (!opt) {
222
+ throw new Error("undefined parameters: " + opt);
223
+ }
224
+ this._path = {
225
+ chain: 0,
226
+ account: 0,
227
+ change: 0,
228
+ index: 0
229
+ };
230
+ if (opt.mnemonic) {
231
+ this._secret = HDWallet.getSecretFromMnemonic(opt.mnemonic, opt.language);
232
+ this._keypair = HDWallet.getKeypairFromSecret(this._secret);
233
+ this._mnemonic = { mnemonic: opt.mnemonic, language: opt.language };
234
+ return this;
235
+ }
236
+ if (opt.secret) {
237
+ this._secret = opt.secret;
238
+ this._keypair = HDWallet.getKeypairFromSecret(this._secret);
239
+ this._mnemonic = { mnemonic: HDWallet.getMnemonicFromSecret(this._secret, opt.language), language: opt.language };
240
+ return this;
241
+ }
242
+ // wallet create by keypair, which only for sign message and tx
243
+ if (opt.keypair) {
244
+ if (opt.path) {
245
+ this._keypair = opt.keypair;
246
+ this._mnemonic = null;
247
+ this._secret = null;
248
+ this._path = opt.path;
249
+ }
250
+ else {
251
+ this._keypair = opt.keypair;
252
+ this._mnemonic = null;
253
+ this._secret = null;
254
+ }
255
+ return this;
256
+ }
257
+ // parameter error;
258
+ throw new Error("invalid parameters: " + opt);
259
+ }
260
+ /**
261
+ * generate mnemonic
262
+ *
263
+ * @static
264
+ * @param {number} len strength of random bytes, default 128
265
+ * @param {string} language localized word list, default is english. see also https://github.com/bitcoinjs/BIP39
266
+ * @returns {string} return mnemonic string, spilt by blank
267
+ */
268
+ HDWallet.generateMnemonic = function (len, language) {
269
+ if (len === void 0) { len = 128; }
270
+ if (language === void 0) { language = "english"; }
271
+ BIP39.setDefaultWordlist(language);
272
+ return BIP39.generateMnemonic(len);
273
+ };
274
+ /**
275
+ * get secret from mnemonic, obey encode rule base58 for jingtum
276
+ *
277
+ * @static
278
+ * @param {string} mnemonic mnemonic words
279
+ * @param {string} language localized word list, default is english. see also https://github.com/bitcoinjs/BIP39
280
+ * @returns {string} return secret string
281
+ */
282
+ HDWallet.getSecretFromMnemonic = function (mnemonic, language) {
283
+ if (language === void 0) { language = "english"; }
284
+ BIP39.setDefaultWordlist(language);
285
+ var entropy = BIP39.mnemonicToEntropy(mnemonic);
286
+ return addressCodec.encodeSeed(Buffer.from(entropy, "hex"));
287
+ };
288
+ /**
289
+ * get mnemonic from secret, obey encode rule base58 for jingtum
290
+ *
291
+ * @static
292
+ * @param {string} secret secret string
293
+ * @param {string} language localized word list, default is english. see also https://github.com/bitcoinjs/BIP39
294
+ * @returns {string} return mnemonic word list
295
+ */
296
+ HDWallet.getMnemonicFromSecret = function (secret, language) {
297
+ if (language === void 0) { language = "english"; }
298
+ BIP39.setDefaultWordlist(language);
299
+ var entropy = addressCodec.decodeSeed(secret).bytes;
300
+ return BIP39.entropyToMnemonic(entropy);
301
+ };
302
+ /**
303
+ * get keypair from secret
304
+ *
305
+ * @static
306
+ * @param {string} secret secret string
307
+ * @returns {object} return keypair object
308
+ */
309
+ HDWallet.getKeypairFromSecret = function (secret) {
310
+ return wallet_1.KeyPair.deriveKeypair(secret);
311
+ };
312
+ /**
313
+ * get hd wallet key pair
314
+ *
315
+ * @static
316
+ * @param {string} rootSecret root secret
317
+ * @param {number} chain chain index number
318
+ * @param {number} account bip44 account index for purpose
319
+ * @param {number} index bip44 last level index
320
+ * @returns {IKeyPair} return keypair object
321
+ */
322
+ HDWallet.getHDKeypair = function (rootSecret, chain, account, index) {
323
+ if (account === void 0) { account = 0; }
324
+ var bip44Chain = constant_1.getBIP44Chain(chain);
325
+ if (bip44Chain.length === 0) {
326
+ return null;
327
+ }
328
+ /* tslint:disable:no-bitwise */
329
+ var chainIdx = (bip44Chain[0][0] << 1) >> 1;
330
+ var mnemonic = HDWallet.getMnemonicFromSecret(rootSecret);
331
+ var seed = BIP39.mnemonicToSeedSync(mnemonic);
332
+ var bip32 = bip32_1.default(ecc);
333
+ var b32 = bip32.fromSeed(seed);
334
+ var privateKey = b32.derivePath("m/44'/" + chainIdx + "'/" + account + "'/0/" + index).privateKey;
335
+ return wallet_1.KeyPair.deriveKeypair(privateKey.toString("hex"));
336
+ };
337
+ /**
338
+ * generate hd wallet
339
+ *
340
+ * @static
341
+ * @param {any} opt options of generate, like:
342
+ * {
343
+ * len: 128/160/192/224/256, default is 128, determines number of mnemonic word
344
+ * language: english default/chinese_simplified/chinese_traditional/czech/korean/french/japanese/... see also:bip39 https://github.com/bitcoinjs/bip39/tree/master/ts_src/wordlists
345
+ * }
346
+ * @returns {object} return hd wallet object
347
+ */
348
+ HDWallet.generate = function (opt) {
349
+ if (!opt) {
350
+ opt = {};
351
+ }
352
+ var mnemonic = HDWallet.generateMnemonic(opt.len, opt.language);
353
+ return new HDWallet({ mnemonic: mnemonic, language: opt.language });
354
+ };
355
+ /**
356
+ * create hd wallet from secret
357
+ *
358
+ * @static
359
+ * @param {string} secret secret string
360
+ * @returns {object} return hd wallet object
361
+ */
362
+ HDWallet.fromSecret = function (secret) {
363
+ return new HDWallet({ secret: secret });
364
+ };
365
+ /**
366
+ * create hd wallet from mnemonic
367
+ *
368
+ * @static
369
+ * @param {IMnemonic} mnemonic object like
370
+ * {mnemonic: "abc abc ...", language: "english"}
371
+ * @returns {object} return hd wallet object
372
+ */
373
+ HDWallet.fromMnemonic = function (mnemonic) {
374
+ return new HDWallet({ mnemonic: mnemonic.mnemonic, language: mnemonic.language });
375
+ };
376
+ /**
377
+ * create hd wallet from keypair
378
+ *
379
+ * @static
380
+ * @param {IKeyPair} keypair object like
381
+ * {publicKey: "public key...", privateKey: "private key..."}
382
+ * @returns {object} return hd wallet object
383
+ */
384
+ HDWallet.fromKeypair = function (keypair) {
385
+ return new HDWallet({ keypair: keypair });
386
+ };
387
+ return HDWallet;
388
+ }());
389
+ exports.HDWallet = HDWallet;
390
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hd/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function getPluginByType<T extends IHDPlugin>(type: string): T;
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getPluginByType = void 0;
4
+ var ethereum_plugin_1 = require("./ethereum.plugin");
5
+ var ethereum_plugin_2 = require("./ethereum.plugin");
6
+ var ethereum_plugin_3 = require("./ethereum.plugin");
7
+ var ethereum_plugin_4 = require("./ethereum.plugin");
8
+ // import { plugin as swtcPlugin } from "./swtc.plugin";
9
+ // import { plugin as bvcadtPlugin } from "./swtc.plugin";
10
+ // import { plugin as callPlugin } from "./swtc.plugin";
11
+ // import { plugin as ripplePlugin } from "./ripple.plugin";
12
+ // import { plugin as streamPlugin } from "./swtc.plugin";
13
+ // import { plugin as bizainPlugin } from "./swtc.plugin";
14
+ var swtc_plugin_1 = require("./swtc.plugin");
15
+ var pluginMap = {
16
+ ethereum: ethereum_plugin_1.plugin,
17
+ bsc: ethereum_plugin_2.plugin,
18
+ heco: ethereum_plugin_3.plugin,
19
+ polygon: ethereum_plugin_4.plugin,
20
+ bvcadt: swtc_plugin_1.XWallet("bvcadt"),
21
+ call: swtc_plugin_1.XWallet("call"),
22
+ ripple: swtc_plugin_1.XWallet("ripple"),
23
+ stream: swtc_plugin_1.XWallet("stream"),
24
+ bizain: swtc_plugin_1.XWallet("bizain"),
25
+ jingtum: swtc_plugin_1.XWallet("jingtum")
26
+ };
27
+ function getPluginByType(type) {
28
+ return pluginMap[type];
29
+ }
30
+ exports.getPluginByType = getPluginByType;
31
+ //# sourceMappingURL=plugins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/hd/plugins.ts"],"names":[],"mappings":";;;AAAA,qDAA6D;AAC7D,qDAAwD;AACxD,qDAAyD;AACzD,qDAA4D;AAC5D,wDAAwD;AACxD,0DAA0D;AAC1D,wDAAwD;AACxD,4DAA4D;AAC5D,0DAA0D;AAC1D,0DAA0D;AAC1D,6CAAwC;AAMxC,IAAM,SAAS,GAAe;IAC5B,QAAQ,EAAE,wBAAc;IACxB,GAAG,EAAE,wBAAS;IACd,IAAI,EAAE,wBAAU;IAChB,OAAO,EAAE,wBAAa;IACtB,MAAM,EAAE,qBAAO,CAAC,QAAQ,CAAC;IACzB,IAAI,EAAE,qBAAO,CAAC,MAAM,CAAC;IACrB,MAAM,EAAE,qBAAO,CAAC,QAAQ,CAAC;IACzB,MAAM,EAAE,qBAAO,CAAC,QAAQ,CAAC;IACzB,MAAM,EAAE,qBAAO,CAAC,QAAQ,CAAC;IACzB,OAAO,EAAE,qBAAO,CAAC,SAAS,CAAC;CAC5B,CAAC;AAEF,SAAgB,eAAe,CAAsB,IAAY;IAC/D,OAAO,SAAS,CAAC,IAAI,CAAM,CAAC;AAC9B,CAAC;AAFD,0CAEC"}
@@ -0,0 +1,5 @@
1
+ export interface ISwtcPlugin extends IHDPlugin {
2
+ wallet?: any;
3
+ }
4
+ declare const XWallet: (chain: string) => ISwtcPlugin;
5
+ export { XWallet };
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.XWallet = void 0;
4
+ var wallet_1 = require("@swtc/wallet");
5
+ // import { KeyPair } from "@swtc/wallet";
6
+ var common_1 = require("@swtc/common");
7
+ var XWallet = function (chain) {
8
+ return {
9
+ wallet: wallet_1.Factory(chain),
10
+ /**
11
+ * get address of wallet
12
+ *
13
+ * @param {IKeyPair | string} key is a keypair object or secret
14
+ *
15
+ * @returns {string} return address of wallet, return null if failed
16
+ */
17
+ address: function (key) {
18
+ try {
19
+ if (typeof key === "string") {
20
+ var wallet = this.wallet.fromSecret(key);
21
+ return wallet.address;
22
+ }
23
+ var keypair = this.wallet.KeyPair;
24
+ if (key.privateKey) {
25
+ return keypair.deriveAddress(keypair.deriveKeyPair(key.privateKey).publicKey);
26
+ }
27
+ if (key.publicKey) {
28
+ return keypair.deriveAddress(key.publicKey);
29
+ }
30
+ return null;
31
+ }
32
+ catch (error) {
33
+ return null;
34
+ }
35
+ },
36
+ isValidAddress: function (address) {
37
+ return this.wallet.isValidAddress(address);
38
+ },
39
+ isValidSecret: function (secret) {
40
+ return this.wallet.isValidSecret(secret);
41
+ },
42
+ hash: function (message) {
43
+ return common_1.funcBytesToHex(this.wallet.hash(message));
44
+ },
45
+ sign: function (message, privateKey) {
46
+ return this.wallet.KeyPair.sign(message, privateKey);
47
+ },
48
+ verify: function (message, signature, address, keypair) {
49
+ if (address !== this.address(keypair)) {
50
+ return false;
51
+ }
52
+ // check public key
53
+ if (!keypair.publicKey) {
54
+ keypair = this.wallet.KeyPair.deriveKeyPair(keypair.privateKey);
55
+ }
56
+ return this.wallet.KeyPair.verify(message, signature, keypair.publicKey);
57
+ },
58
+ recover: function () {
59
+ return "swtclib does not support.";
60
+ },
61
+ proxy: function (functionName) {
62
+ var _a;
63
+ var args = [];
64
+ for (var _i = 1; _i < arguments.length; _i++) {
65
+ args[_i - 1] = arguments[_i];
66
+ }
67
+ return (_a = this.wallet)[functionName].apply(_a, args);
68
+ }
69
+ };
70
+ };
71
+ exports.XWallet = XWallet;
72
+ //# sourceMappingURL=swtc.plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swtc.plugin.js","sourceRoot":"","sources":["../../src/hd/swtc.plugin.ts"],"names":[],"mappings":";;;AAAA,uCAAwD;AACxD,0CAA0C;AAC1C,uCAA4D;AAM5D,IAAM,OAAO,GAAG,UAAC,KAAa;IAC5B,OAAO;QACL,MAAM,EAAE,gBAAa,CAAC,KAAK,CAAC;QAC5B;;;;;;WAMG;QACH,OAAO,EAAP,UAAQ,GAAsB;YAC5B,IAAI;gBACF,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;oBAC3B,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;oBAC3C,OAAO,MAAM,CAAC,OAAO,CAAC;iBACvB;gBAED,IAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;gBACpC,IAAI,GAAG,CAAC,UAAU,EAAE;oBAClB,OAAO,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC;iBAC/E;gBACD,IAAI,GAAG,CAAC,SAAS,EAAE;oBACjB,OAAO,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;iBAC7C;gBAED,OAAO,IAAI,CAAC;aACb;YAAC,OAAO,KAAK,EAAE;gBACd,OAAO,IAAI,CAAC;aACb;QACH,CAAC;QAED,cAAc,EAAd,UAAe,OAAe;YAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QAC7C,CAAC;QAED,aAAa,EAAb,UAAc,MAAc;YAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,EAAJ,UAAK,OAAe;YAClB,OAAO,uBAAU,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,IAAI,EAAJ,UAAK,OAAe,EAAE,UAAkB;YACtC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;QACvD,CAAC;QAED,MAAM,EAAN,UAAO,OAAe,EAAE,SAAiB,EAAE,OAAe,EAAE,OAAiB;YAC3E,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;gBACrC,OAAO,KAAK,CAAC;aACd;YACD,mBAAmB;YACnB,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE;gBACtB,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;aACjE;YACD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,EAAP;YACE,OAAO,2BAA2B,CAAC;QACrC,CAAC;QACD,KAAK,EAAL,UAAM,YAAY;;YAAE,cAAO;iBAAP,UAAO,EAAP,qBAAO,EAAP,IAAO;gBAAP,6BAAO;;YACzB,OAAO,CAAA,KAAA,IAAI,CAAC,MAAM,CAAA,CAAC,YAAY,CAAC,WAAI,IAAI,EAAE;QAC5C,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEO,0BAAO"}
package/lib/index.d.ts CHANGED
@@ -21,5 +21,6 @@
21
21
  import * as ethWallet from "./eth";
22
22
  import JingchangWallet from "./jingchangWallet";
23
23
  import * as moacWallet from "./moac";
24
+ import * as hdWallet from "./hd";
24
25
  export * from "./x-wallet";
25
- export { ethWallet, JingchangWallet, moacWallet };
26
+ export { ethWallet, JingchangWallet, moacWallet, hdWallet };
package/lib/index.js CHANGED
@@ -19,25 +19,40 @@
19
19
  * SOFTWARE.
20
20
  * @author https://github.com/GinMu
21
21
  */
22
- function __export(m) {
23
- for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
24
- }
22
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
25
+ }) : (function(o, m, k, k2) {
26
+ if (k2 === undefined) k2 = k;
27
+ o[k2] = m[k];
28
+ }));
29
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
30
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
31
+ }) : function(o, v) {
32
+ o["default"] = v;
33
+ });
25
34
  var __importStar = (this && this.__importStar) || function (mod) {
26
35
  if (mod && mod.__esModule) return mod;
27
36
  var result = {};
28
- if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
29
- result["default"] = mod;
37
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
38
+ __setModuleDefault(result, mod);
30
39
  return result;
31
40
  };
41
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
42
+ for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
43
+ };
32
44
  var __importDefault = (this && this.__importDefault) || function (mod) {
33
45
  return (mod && mod.__esModule) ? mod : { "default": mod };
34
46
  };
35
47
  Object.defineProperty(exports, "__esModule", { value: true });
48
+ exports.hdWallet = exports.moacWallet = exports.JingchangWallet = exports.ethWallet = void 0;
36
49
  var ethWallet = __importStar(require("./eth"));
37
50
  exports.ethWallet = ethWallet;
38
51
  var jingchangWallet_1 = __importDefault(require("./jingchangWallet"));
39
52
  exports.JingchangWallet = jingchangWallet_1.default;
40
53
  var moacWallet = __importStar(require("./moac"));
41
54
  exports.moacWallet = moacWallet;
42
- __export(require("./x-wallet"));
55
+ var hdWallet = __importStar(require("./hd"));
56
+ exports.hdWallet = hdWallet;
57
+ __exportStar(require("./x-wallet"), exports);
43
58
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;;;;;;;;;;;;;AAEH,+CAAmC;AAK1B,8BAAS;AAJlB,sEAAgD;AAI5B,0BAJb,yBAAe,CAIa;AAHnC,iDAAqC;AAGA,gCAAU;AAF/C,gCAA2B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,+CAAmC;AAO1B,8BAAS;AANlB,sEAAgD;AAM5B,0BANb,yBAAe,CAMa;AALnC,iDAAqC;AAKA,gCAAU;AAJ/C,6CAAiC;AAIgB,4BAAQ;AAFzD,6CAA2B"}
@@ -193,6 +193,16 @@ export default class JingchangWallet {
193
193
  * @memberof JingchangWallet
194
194
  */
195
195
  changePasswordWithAddress(address: string, oldPassword: string, newPassword: string): Promise<IJingchangWalletModel>;
196
+ /**
197
+ * replace keystore, if forget password
198
+ *
199
+ * @param {string} secret
200
+ * @param {string} password
201
+ * @param {(secret: string) => string} retriveSecret
202
+ * @returns {Promise<IJingchangWalletModel>}
203
+ * @memberof JingchangWallet
204
+ */
205
+ replaceKeystore(secret: string, password: string, retriveSecret: (secret: string) => string): Promise<IJingchangWalletModel>;
196
206
  /**
197
207
  * remove default wallet keystore of the given type
198
208
  *
@@ -498,6 +498,37 @@ var JingchangWallet = /** @class */ (function () {
498
498
  });
499
499
  }); });
500
500
  };
501
+ /**
502
+ * replace keystore, if forget password
503
+ *
504
+ * @param {string} secret
505
+ * @param {string} password
506
+ * @param {(secret: string) => string} retriveSecret
507
+ * @returns {Promise<IJingchangWalletModel>}
508
+ * @memberof JingchangWallet
509
+ */
510
+ JingchangWallet.prototype.replaceKeystore = function (secret, password, retriveSecret) {
511
+ return __awaiter(this, void 0, void 0, function () {
512
+ var address, wallet, keypairs, newWallet;
513
+ return __generator(this, function (_a) {
514
+ address = retriveSecret(secret);
515
+ wallet = this.findWallet(function (w) { return w.address === address; });
516
+ keypairs = {
517
+ address: wallet.address,
518
+ alias: wallet.alias,
519
+ default: wallet.default,
520
+ secret: secret,
521
+ type: wallet.type
522
+ };
523
+ newWallet = this.getEncryptData(password, keypairs);
524
+ // shadow copy
525
+ wallet.ciphertext = newWallet.ciphertext;
526
+ wallet.crypto = newWallet.crypto;
527
+ wallet.mac = newWallet.mac;
528
+ return [2 /*return*/, this._jingchangWallet];
529
+ });
530
+ });
531
+ };
501
532
  /**
502
533
  * remove default wallet keystore of the given type
503
534
  *