jcc_wallet 2.0.0 → 3.0.1

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 (43) hide show
  1. package/package.json +29 -25
  2. package/lib/constant/index.d.ts +0 -8
  3. package/lib/constant/index.js +0 -18
  4. package/lib/constant/index.js.map +0 -1
  5. package/lib/eth/index.d.ts +0 -36
  6. package/lib/eth/index.js +0 -98
  7. package/lib/eth/index.js.map +0 -1
  8. package/lib/hd/constant.d.ts +0 -26
  9. package/lib/hd/constant.js +0 -56
  10. package/lib/hd/constant.js.map +0 -1
  11. package/lib/hd/ethereum.plugin.d.ts +0 -4
  12. package/lib/hd/ethereum.plugin.js +0 -101
  13. package/lib/hd/ethereum.plugin.js.map +0 -1
  14. package/lib/hd/index.d.ts +0 -227
  15. package/lib/hd/index.js +0 -394
  16. package/lib/hd/index.js.map +0 -1
  17. package/lib/hd/plugins.d.ts +0 -1
  18. package/lib/hd/plugins.js +0 -33
  19. package/lib/hd/plugins.js.map +0 -1
  20. package/lib/hd/swtc.plugin.d.ts +0 -5
  21. package/lib/hd/swtc.plugin.js +0 -72
  22. package/lib/hd/swtc.plugin.js.map +0 -1
  23. package/lib/hd/tron.plugin.d.ts +0 -4
  24. package/lib/hd/tron.plugin.js +0 -67
  25. package/lib/hd/tron.plugin.js.map +0 -1
  26. package/lib/index.d.ts +0 -26
  27. package/lib/index.js +0 -62
  28. package/lib/index.js.map +0 -1
  29. package/lib/jingchangWallet/index.d.ts +0 -272
  30. package/lib/jingchangWallet/index.js +0 -758
  31. package/lib/jingchangWallet/index.js.map +0 -1
  32. package/lib/moac/index.d.ts +0 -28
  33. package/lib/moac/index.js +0 -58
  34. package/lib/moac/index.js.map +0 -1
  35. package/lib/types/index.d.ts +0 -90
  36. package/lib/types/index.js +0 -1
  37. package/lib/types/index.js.map +0 -1
  38. package/lib/util/index.d.ts +0 -21
  39. package/lib/util/index.js +0 -90
  40. package/lib/util/index.js.map +0 -1
  41. package/lib/x-wallet/index.d.ts +0 -21
  42. package/lib/x-wallet/index.js +0 -84
  43. package/lib/x-wallet/index.js.map +0 -1
@@ -1,758 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- var __importDefault = (this && this.__importDefault) || function (mod) {
39
- return (mod && mod.__esModule) ? mod : { "default": mod };
40
- };
41
- Object.defineProperty(exports, "__esModule", { value: true });
42
- var assert_1 = __importDefault(require("assert"));
43
- var clone_deep_1 = __importDefault(require("clone-deep"));
44
- var crypto_1 = __importDefault(require("crypto"));
45
- var eccrypto_1 = __importDefault(require("eccrypto"));
46
- var jcc_common_1 = require("jcc_common");
47
- var lockr_1 = __importDefault(require("lockr"));
48
- var keypairs_1 = require("@swtc/keypairs");
49
- var constant_1 = require("../constant");
50
- var x_wallet_1 = require("../x-wallet");
51
- var util_1 = require("../util");
52
- lockr_1.default.prefix = "jingchang_";
53
- /**
54
- * api of jingchang wallet
55
- *
56
- * @export
57
- * @class JingchangWallet
58
- */
59
- var JingchangWallet = /** @class */ (function () {
60
- /**
61
- * Creates an instance of JingchangWallet.
62
- * @param {IJingchangWalletModel} wallet
63
- * @param {boolean} [multiple=false] if the value is true, support save multiple wallet keystore for each type, otherwise only support one.
64
- * @param {boolean} [samePassword=true] if the value is true, use the default swt keystore's password which be generated
65
- * in the beginning as password for other type.
66
- * @memberof JingchangWallet
67
- */
68
- function JingchangWallet(wallet, multiple, samePassword) {
69
- if (multiple === void 0) { multiple = false; }
70
- if (samePassword === void 0) { samePassword = true; }
71
- this._multiple = multiple;
72
- this._jingchangWallet = wallet;
73
- this._samePassword = samePassword;
74
- }
75
- /**
76
- * check jingchang wallet is valid or not
77
- *
78
- * @static
79
- * @param {*} wallet
80
- * @returns {boolean} return true if valid.
81
- * @memberof JingchangWallet
82
- */
83
- JingchangWallet.isValid = function (wallet) {
84
- try {
85
- if (typeof wallet === "string") {
86
- wallet = JSON.parse(wallet);
87
- }
88
- var walletsNotEmpty = !(0, jcc_common_1.isEmptyObject)(wallet) && Array.isArray(wallet.wallets) && wallet.wallets.length > 0;
89
- return Boolean(walletsNotEmpty && wallet.contact && wallet.id && wallet.version);
90
- }
91
- catch (error) {
92
- return false;
93
- }
94
- };
95
- /**
96
- * create a jingchang wallet
97
- *
98
- * @static
99
- * @param {string} password password for keystore
100
- * @param {string} [secret] swtc chain's secret
101
- * @param {string} [alias] wallet name
102
- * @returns {Promise<IJingchangWalletModel>} resolve jingchang wallet if success.
103
- * @memberof JingchangWallet
104
- */
105
- JingchangWallet.generate = function (password, secret, alias) {
106
- return new Promise(function (resolve, reject) {
107
- var keypairs = {};
108
- if (secret === undefined) {
109
- var wallet = x_wallet_1.jtWallet.createWallet();
110
- secret = wallet.secret;
111
- keypairs.address = wallet.address;
112
- }
113
- else {
114
- if (!x_wallet_1.jtWallet.isValidSecret(secret)) {
115
- return reject(new Error(constant_1.SECRET_IS_INVALID));
116
- }
117
- keypairs.address = x_wallet_1.jtWallet.getAddress(secret);
118
- }
119
- keypairs.secret = secret;
120
- keypairs.type = "swt";
121
- keypairs.default = true;
122
- keypairs.alias = alias || "swt wallet";
123
- var jcWallet = {};
124
- var walletObj = (0, util_1.encryptWallet)(password, keypairs);
125
- jcWallet.version = JingchangWallet.version;
126
- jcWallet.id = JingchangWallet._walletID;
127
- jcWallet.contact = {};
128
- jcWallet.wallets = [];
129
- jcWallet.wallets.push(walletObj);
130
- return resolve(jcWallet);
131
- });
132
- };
133
- /**
134
- * get jingchang wallet from local storage
135
- *
136
- * @static
137
- * @returns {(IJingchangWalletModel | null)} return jingchang wallet or null
138
- * @memberof JingchangWallet
139
- */
140
- JingchangWallet.get = function () {
141
- var jcWallet = lockr_1.default.get(JingchangWallet._walletID);
142
- if (!JingchangWallet.isValid(jcWallet)) {
143
- return null;
144
- }
145
- return jcWallet;
146
- };
147
- /**
148
- * clear jingchang wallet from local storage
149
- *
150
- * @static
151
- * @memberof JingchangWallet
152
- */
153
- JingchangWallet.clear = function () {
154
- lockr_1.default.set(JingchangWallet._walletID, {});
155
- };
156
- /**
157
- * save jingchang wallet to local storage.
158
- *
159
- * @static
160
- * @param {IJingchangWalletModel} wallet
161
- * @memberof JingchangWallet
162
- */
163
- JingchangWallet.save = function (wallet) {
164
- lockr_1.default.set(JingchangWallet._walletID, wallet);
165
- };
166
- /**
167
- * derive key pair with secret
168
- *
169
- * @static
170
- * @param {string} secret
171
- * @param {string} [chain="swt"]
172
- * @returns {IKeyPair} for privateKey, it's length should be 64 when call `decryptWithPrivateKey`, but the origin derived
173
- * privateKey's length is 66 that contains prefix `00` for `secp256k1` or `ED` for `ed25519`, so removed it.
174
- * @memberof JingchangWallet
175
- */
176
- JingchangWallet.deriveKeyPair = function (secret, chain) {
177
- if (chain === void 0) { chain = "swt"; }
178
- var keyPair = (0, keypairs_1.Factory)(chain);
179
- var pair = keyPair.deriveKeyPair(secret);
180
- return {
181
- privateKey: pair.privateKey.substring(2),
182
- publicKey: pair.publicKey
183
- };
184
- };
185
- /**
186
- * encrypt data with public key
187
- *
188
- * @static
189
- * @param {string} message
190
- * @param {string} publicKey
191
- * @returns {Promise<IEncrypt>}
192
- * @memberof JingchangWallet
193
- */
194
- JingchangWallet.encryptWithPublicKey = function (message, publicKey) {
195
- return __awaiter(this, void 0, void 0, function () {
196
- var encode;
197
- return __generator(this, function (_a) {
198
- switch (_a.label) {
199
- case 0: return [4 /*yield*/, eccrypto_1.default.encrypt(Buffer.from(publicKey, "hex"), Buffer.from(message))];
200
- case 1:
201
- encode = _a.sent();
202
- return [2 /*return*/, {
203
- ciphertext: encode.ciphertext.toString("hex"),
204
- ephemPublicKey: encode.ephemPublicKey.toString("hex"),
205
- iv: encode.iv.toString("hex"),
206
- mac: encode.mac.toString("hex")
207
- }];
208
- }
209
- });
210
- });
211
- };
212
- /**
213
- * decrypt data with private key
214
- *
215
- * @static
216
- * @param {IEncrypt} message
217
- * @param {string} privateKey the privateKey's length should be 64
218
- * @returns {Promise<string>}
219
- * @memberof JingchangWallet
220
- */
221
- JingchangWallet.decryptWithPrivateKey = function (message, privateKey) {
222
- return __awaiter(this, void 0, void 0, function () {
223
- var encode, decode;
224
- return __generator(this, function (_a) {
225
- switch (_a.label) {
226
- case 0:
227
- encode = {
228
- ciphertext: Buffer.from(message.ciphertext, "hex"),
229
- ephemPublicKey: Buffer.from(message.ephemPublicKey, "hex"),
230
- iv: Buffer.from(message.iv, "hex"),
231
- mac: Buffer.from(message.mac, "hex")
232
- };
233
- return [4 /*yield*/, eccrypto_1.default.decrypt(Buffer.from(privateKey, "hex"), encode)];
234
- case 1:
235
- decode = _a.sent();
236
- return [2 /*return*/, decode.toString()];
237
- }
238
- });
239
- });
240
- };
241
- /**
242
- * get wallets from jingchang wallet
243
- *
244
- * @static
245
- * @param {IJingchangWalletModel} jcWallet
246
- * @returns {Array<IKeystoreModel>} return wallets if valid, otherwise return empty array.
247
- * @memberof JingchangWallet
248
- */
249
- JingchangWallet.getWallets = function (keystore) {
250
- var wallets;
251
- if (JingchangWallet.isValid(keystore)) {
252
- wallets = keystore.wallets;
253
- }
254
- else {
255
- wallets = [];
256
- }
257
- return wallets;
258
- };
259
- /**
260
- * set property of _jingchangWallet
261
- *
262
- * @param {IJingchangWalletModel} wallet
263
- * @memberof JingchangWallet
264
- */
265
- JingchangWallet.prototype.setJingchangWallet = function (wallet) {
266
- this._jingchangWallet = wallet;
267
- };
268
- /**
269
- * get default wallet's keystore address for each type
270
- *
271
- * @param {string} [type="swt"]
272
- * @returns {Promise<string>} resolve address if success
273
- * @memberof JingchangWallet
274
- */
275
- JingchangWallet.prototype.getAddress = function (type) {
276
- var _this = this;
277
- if (type === void 0) { type = "swt"; }
278
- return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
279
- var wallet, error_1;
280
- return __generator(this, function (_a) {
281
- switch (_a.label) {
282
- case 0:
283
- _a.trys.push([0, 2, , 3]);
284
- return [4 /*yield*/, this.getWalletWithType(type)];
285
- case 1:
286
- wallet = _a.sent();
287
- return [2 /*return*/, resolve(wallet.address)];
288
- case 2:
289
- error_1 = _a.sent();
290
- return [2 /*return*/, reject(error_1)];
291
- case 3: return [2 /*return*/];
292
- }
293
- });
294
- }); });
295
- };
296
- /**
297
- * get default wallet keystore with type
298
- *
299
- * @param {string} [type="swt"]
300
- * @returns {Promise<IKeystoreModel>} resolve default wallet keystore if success.
301
- * @memberof JingchangWallet
302
- */
303
- JingchangWallet.prototype.getWalletWithType = function (type) {
304
- var _this = this;
305
- if (type === void 0) { type = "swt"; }
306
- return new Promise(function (resolve, reject) {
307
- try {
308
- var wallet = _this.findWallet(function (w) { return w.type.toLowerCase() === type.toLowerCase() && w.default; });
309
- return resolve(wallet);
310
- }
311
- catch (error) {
312
- return reject(error);
313
- }
314
- });
315
- };
316
- /**
317
- * get wallet keystore with address
318
- *
319
- * @param {string} address
320
- * @returns {Promise<IKeystoreModel>} resolve wallet keystore if success.
321
- * @memberof JingchangWallet
322
- */
323
- JingchangWallet.prototype.getWalletWithAddress = function (address) {
324
- var _this = this;
325
- return new Promise(function (resolve, reject) {
326
- try {
327
- var wallet = _this.findWallet(function (w) { return w.address === address; });
328
- return resolve(wallet);
329
- }
330
- catch (error) {
331
- return reject(error);
332
- }
333
- });
334
- };
335
- /**
336
- * check if has default wallet for each type
337
- *
338
- * @param {string} [type="swt"]
339
- * @returns {boolean} return true if has default
340
- * @memberof JingchangWallet
341
- */
342
- JingchangWallet.prototype.hasDefault = function (type) {
343
- if (type === void 0) { type = "swt"; }
344
- try {
345
- var wallet = this.findWallet(function (w) { return w.type === type && w.default; });
346
- return !(0, jcc_common_1.isEmptyObject)(wallet);
347
- }
348
- catch (error) {
349
- return false;
350
- }
351
- };
352
- /**
353
- * get the default wallet keystore's secret with type.
354
- *
355
- * @param {string} password
356
- * @param {string} [type="swt"]
357
- * @returns {Promise<string>}
358
- * @memberof JingchangWallet
359
- */
360
- JingchangWallet.prototype.getSecretWithType = function (password, type) {
361
- var _this = this;
362
- if (type === void 0) { type = "swt"; }
363
- return new Promise(function (resolve, reject) {
364
- try {
365
- var wallet = _this.findWallet(function (w) { return w.type === type && w.default; });
366
- var secret = (0, util_1.decrypt)(password, wallet);
367
- return resolve(secret);
368
- }
369
- catch (error) {
370
- return reject(error);
371
- }
372
- });
373
- };
374
- /**
375
- * get the wallet keystore's secret with address.
376
- *
377
- * @param {string} password
378
- * @param {string} address
379
- * @returns {Promise<string>}
380
- * @memberof JingchangWallet resolve secret if success.
381
- */
382
- JingchangWallet.prototype.getSecretWithAddress = function (password, address) {
383
- var _this = this;
384
- return new Promise(function (resolve, reject) {
385
- try {
386
- var wallet = _this.findWallet(function (w) { return w.address === address; });
387
- var secret = (0, util_1.decrypt)(password, wallet);
388
- return resolve(secret);
389
- }
390
- catch (error) {
391
- return reject(error);
392
- }
393
- });
394
- };
395
- /**
396
- * change the whole jingchang wallet password, if you set property of _samePassword is false, will throw an error
397
- *
398
- * @param {string} oldPassword
399
- * @param {string} newPassword
400
- * @returns {Promise<IJingchangWalletModel>} resolve new jingchang wallet if success
401
- * @memberof JingchangWallet
402
- */
403
- JingchangWallet.prototype.changeWholePassword = function (oldPassword, newPassword) {
404
- var _this = this;
405
- return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
406
- var jcWallet, wallets, arr, _i, wallets_1, wallet, address, secret, keypairs, newWallet, error_2;
407
- return __generator(this, function (_a) {
408
- switch (_a.label) {
409
- case 0:
410
- if (!this._samePassword) {
411
- return [2 /*return*/, reject(new Error("the property of _samePassword is false, so please don't call this function!"))];
412
- }
413
- jcWallet = (0, clone_deep_1.default)(this._jingchangWallet);
414
- assert_1.default.notEqual(jcWallet, this._jingchangWallet);
415
- wallets = JingchangWallet.getWallets(jcWallet);
416
- _a.label = 1;
417
- case 1:
418
- _a.trys.push([1, 6, , 7]);
419
- arr = [];
420
- _i = 0, wallets_1 = wallets;
421
- _a.label = 2;
422
- case 2:
423
- if (!(_i < wallets_1.length)) return [3 /*break*/, 5];
424
- wallet = wallets_1[_i];
425
- address = wallet.address;
426
- return [4 /*yield*/, this.getSecretWithAddress(oldPassword, address)];
427
- case 3:
428
- secret = _a.sent();
429
- keypairs = {
430
- address: wallet.address,
431
- alias: wallet.alias,
432
- default: wallet.default,
433
- secret: secret,
434
- type: wallet.type
435
- };
436
- newWallet = this.getEncryptData(newPassword, keypairs);
437
- arr.push(newWallet);
438
- _a.label = 4;
439
- case 4:
440
- _i++;
441
- return [3 /*break*/, 2];
442
- case 5:
443
- jcWallet.wallets = arr;
444
- this.setJingchangWallet(jcWallet);
445
- return [2 /*return*/, resolve(jcWallet)];
446
- case 6:
447
- error_2 = _a.sent();
448
- return [2 /*return*/, reject(error_2)];
449
- case 7: return [2 /*return*/];
450
- }
451
- });
452
- }); });
453
- };
454
- /**
455
- * change the keystore password with address, if you set the property of _samePassword is true, will throw an error
456
- *
457
- * @param {string} address
458
- * @param {string} oldPassword
459
- * @param {string} newPassword
460
- * @returns {Promise<IJingchangWalletModel>} resolve new jingchang wallet if success
461
- * @memberof JingchangWallet
462
- */
463
- JingchangWallet.prototype.changePasswordWithAddress = function (address, oldPassword, newPassword) {
464
- var _this = this;
465
- return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
466
- var wallet, secret, keypairs, newWallet, error_3;
467
- return __generator(this, function (_a) {
468
- switch (_a.label) {
469
- case 0:
470
- if (this._samePassword) {
471
- return [2 /*return*/, reject(new Error("the property of _samePassword is true, so please don't call this function!"))];
472
- }
473
- _a.label = 1;
474
- case 1:
475
- _a.trys.push([1, 3, , 4]);
476
- wallet = this.findWallet(function (w) { return w.address === address; });
477
- return [4 /*yield*/, this.getSecretWithAddress(oldPassword, address)];
478
- case 2:
479
- secret = _a.sent();
480
- keypairs = {
481
- address: wallet.address,
482
- alias: wallet.alias,
483
- default: wallet.default,
484
- secret: secret,
485
- type: wallet.type
486
- };
487
- newWallet = this.getEncryptData(newPassword, keypairs);
488
- // shadow copy
489
- wallet.ciphertext = newWallet.ciphertext;
490
- wallet.crypto = newWallet.crypto;
491
- wallet.mac = newWallet.mac;
492
- return [2 /*return*/, resolve(this._jingchangWallet)];
493
- case 3:
494
- error_3 = _a.sent();
495
- return [2 /*return*/, reject(error_3)];
496
- case 4: return [2 /*return*/];
497
- }
498
- });
499
- }); });
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
- };
532
- /**
533
- * remove default wallet keystore of the given type
534
- *
535
- * @param {string} [type="swt"]
536
- * @returns {Promise<IJingchangWalletModel>} resolve new jingchang wallet if success
537
- * @memberof JingchangWallet
538
- */
539
- JingchangWallet.prototype.removeWalletWithType = function (type) {
540
- var _this = this;
541
- if (type === void 0) { type = "swt"; }
542
- return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
543
- var address, wallet, error_4;
544
- return __generator(this, function (_a) {
545
- switch (_a.label) {
546
- case 0:
547
- _a.trys.push([0, 3, , 4]);
548
- return [4 /*yield*/, this.getAddress(type)];
549
- case 1:
550
- address = _a.sent();
551
- return [4 /*yield*/, this.removeWalletWithAddress(address)];
552
- case 2:
553
- wallet = _a.sent();
554
- resolve(wallet);
555
- return [3 /*break*/, 4];
556
- case 3:
557
- error_4 = _a.sent();
558
- return [2 /*return*/, reject(error_4)];
559
- case 4: return [2 /*return*/];
560
- }
561
- });
562
- }); });
563
- };
564
- /**
565
- * remove wallet keystore of the given address
566
- *
567
- * @param {string} address
568
- * @returns {Promise<IJingchangWalletModel>} resolve new jingchang wallet if success
569
- * @memberof JingchangWallet
570
- */
571
- JingchangWallet.prototype.removeWalletWithAddress = function (address) {
572
- var _this = this;
573
- return new Promise(function (resolve, reject) {
574
- var jcWallet = (0, clone_deep_1.default)(_this._jingchangWallet);
575
- assert_1.default.notEqual(_this._jingchangWallet, jcWallet);
576
- var wallets = JingchangWallet.getWallets(jcWallet);
577
- try {
578
- var wallet_1 = _this.findWallet(function (w) { return w.address === address; });
579
- var index = wallets.findIndex(function (w) { return w.address === wallet_1.address; });
580
- wallets.splice(index, 1);
581
- var next = wallets.find(function (w) { return w.type === wallet_1.type; });
582
- if (next) {
583
- next.default = true;
584
- }
585
- _this.setJingchangWallet(jcWallet);
586
- return resolve(jcWallet);
587
- }
588
- catch (error) {
589
- return reject(error);
590
- }
591
- });
592
- };
593
- /**
594
- * set defalut wallet keystore for each type
595
- *
596
- * @param {string} address
597
- * @returns {Promise<IJingchangWalletModel>} resolve new jingchang wallet if success
598
- * @memberof JingchangWallet
599
- */
600
- JingchangWallet.prototype.setDefaultWallet = function (address) {
601
- var _this = this;
602
- return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
603
- var wallet, defaultWallet, error_5;
604
- return __generator(this, function (_a) {
605
- switch (_a.label) {
606
- case 0:
607
- _a.trys.push([0, 3, , 4]);
608
- return [4 /*yield*/, this.getWalletWithAddress(address)];
609
- case 1:
610
- wallet = _a.sent();
611
- if (wallet.default) {
612
- return [2 /*return*/, resolve(this._jingchangWallet)];
613
- }
614
- return [4 /*yield*/, this.getWalletWithType(wallet.type)];
615
- case 2:
616
- defaultWallet = _a.sent();
617
- defaultWallet.default = false;
618
- wallet.default = true;
619
- return [2 /*return*/, resolve(this._jingchangWallet)];
620
- case 3:
621
- error_5 = _a.sent();
622
- return [2 /*return*/, reject(error_5)];
623
- case 4: return [2 /*return*/];
624
- }
625
- });
626
- }); });
627
- };
628
- /**
629
- * import secret
630
- *
631
- * @param {string} secret
632
- * @param {string} password
633
- * @param {string} type
634
- * @param {(secret: string) => string} retriveSecret
635
- * @param {string} [alias] wallet name
636
- * @returns {Promise<IJingchangWalletModel>} resolve new jingchang wallet if success
637
- * @memberof JingchangWallet
638
- */
639
- JingchangWallet.prototype.importSecret = function (secret, password, type, retriveSecret, alias) {
640
- var _this = this;
641
- return new Promise(function (resolve, reject) { return __awaiter(_this, void 0, void 0, function () {
642
- var address_1, wallets, wallet, keypairs, error_6;
643
- return __generator(this, function (_a) {
644
- switch (_a.label) {
645
- case 0:
646
- _a.trys.push([0, 3, , 4]);
647
- if (!this._samePassword) return [3 /*break*/, 2];
648
- // validate default password of swt keystore is right or not
649
- return [4 /*yield*/, this.getSecretWithType(password)];
650
- case 1:
651
- // validate default password of swt keystore is right or not
652
- _a.sent();
653
- _a.label = 2;
654
- case 2:
655
- address_1 = retriveSecret(secret);
656
- if (!address_1) {
657
- return [2 /*return*/, reject(new Error(constant_1.SECRET_IS_INVALID))];
658
- }
659
- wallets = JingchangWallet.getWallets(this._jingchangWallet);
660
- wallet = wallets.find(function (w) { return w.address === address_1 && w.type === type; });
661
- if (wallet) {
662
- return [2 /*return*/, reject(new Error(constant_1.ADDRESS_IS_EXISTENT))];
663
- }
664
- keypairs = {
665
- address: address_1,
666
- alias: alias || "".concat(type, " wallet"),
667
- secret: secret,
668
- type: type
669
- };
670
- this.saveWallet(password, keypairs).then(function (w) {
671
- return resolve(w);
672
- });
673
- return [3 /*break*/, 4];
674
- case 3:
675
- error_6 = _a.sent();
676
- return [2 /*return*/, reject(error_6)];
677
- case 4: return [2 /*return*/];
678
- }
679
- });
680
- }); });
681
- };
682
- /**
683
- * find wallet keystore according to filter function
684
- *
685
- * @protected
686
- * @param {(wallet: IKeystoreModel) => boolean} filter
687
- * @returns {IKeystoreModel} return wallet keystore if existent, otherwise throw `keystore is invalid` if the jingchang wallet is invalid
688
- * or throw `wallet is empty` if the wallet isn't existent
689
- * @memberof JingchangWallet
690
- */
691
- JingchangWallet.prototype.findWallet = function (filter) {
692
- var jingchangWallet = this._jingchangWallet;
693
- if (!JingchangWallet.isValid(jingchangWallet)) {
694
- throw new Error(constant_1.KEYSTORE_IS_INVALID);
695
- }
696
- var wallets = jingchangWallet.wallets;
697
- var wallet = wallets.find(filter);
698
- if ((0, jcc_common_1.isEmptyObject)(wallet)) {
699
- throw new Error(constant_1.WALLET_IS_EMPTY);
700
- }
701
- return wallet;
702
- };
703
- /**
704
- * encrypt data
705
- *
706
- * @protected
707
- * @param {string} password
708
- * @param {IKeypairsModel} keypairs
709
- * @returns {IKeystoreModel}
710
- * @memberof JingchangWallet
711
- */
712
- JingchangWallet.prototype.getEncryptData = function (password, keypairs) {
713
- var encryptData = (0, util_1.encryptWallet)(password, keypairs, {});
714
- return encryptData;
715
- };
716
- /**
717
- * save wallet keystore to jingchang wallet
718
- *
719
- * @private
720
- * @param {string} password
721
- * @param {IKeypairsModel} keypairs
722
- * @returns {Promise<IJingchangWalletModel>} resolve new jingchang wallet if success
723
- * @memberof JingchangWallet
724
- */
725
- JingchangWallet.prototype.saveWallet = function (password, keypairs) {
726
- var _this = this;
727
- return new Promise(function (resolve) {
728
- // support type: ethereum, stream, jingtum, call and moac
729
- keypairs.default = _this._multiple ? !_this.hasDefault(keypairs.type) : true;
730
- var encryptData = _this.getEncryptData(password, keypairs);
731
- var jcWallet = (0, clone_deep_1.default)(_this._jingchangWallet);
732
- assert_1.default.notEqual(_this._jingchangWallet, jcWallet);
733
- var wallets = jcWallet.wallets;
734
- var pre = wallets.findIndex(function (w) { return w.type.toLowerCase() === keypairs.type.toLowerCase(); });
735
- if (_this._multiple) {
736
- wallets.push(encryptData);
737
- }
738
- else {
739
- /* istanbul ignore else */
740
- if (pre >= 0) {
741
- wallets.splice(pre, 1);
742
- }
743
- wallets.push(encryptData);
744
- }
745
- _this.setJingchangWallet(jcWallet);
746
- return resolve(jcWallet);
747
- });
748
- };
749
- JingchangWallet.version = "1.0";
750
- JingchangWallet._name = "wallets";
751
- JingchangWallet._walletID = crypto_1.default
752
- .createHash("sha256")
753
- .update(JingchangWallet._name.toLowerCase())
754
- .digest("hex");
755
- return JingchangWallet;
756
- }());
757
- exports.default = JingchangWallet;
758
- //# sourceMappingURL=index.js.map