@pezkuwi/ui-keyring 3.16.7 → 3.16.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.
- package/package.json +321 -7
- package/build/Base.js +0 -109
- package/build/Keyring.js +0 -304
- package/build/README.md +0 -136
- package/build/bundle.js +0 -4
- package/build/cjs/Base.d.ts +0 -30
- package/build/cjs/Base.js +0 -113
- package/build/cjs/Keyring.d.ts +0 -49
- package/build/cjs/Keyring.js +0 -308
- package/build/cjs/bundle.d.ts +0 -4
- package/build/cjs/bundle.js +0 -8
- package/build/cjs/defaults.js +0 -28
- package/build/cjs/index.js +0 -7
- package/build/cjs/observable/accounts.js +0 -6
- package/build/cjs/observable/addresses.js +0 -6
- package/build/cjs/observable/contracts.js +0 -6
- package/build/cjs/observable/env.js +0 -12
- package/build/cjs/observable/genericSubject.js +0 -47
- package/build/cjs/observable/index.js +0 -16
- package/build/cjs/observable/types.js +0 -2
- package/build/cjs/options/index.js +0 -116
- package/build/cjs/options/item.js +0 -16
- package/build/cjs/options/types.js +0 -2
- package/build/cjs/packageInfo.js +0 -4
- package/build/cjs/stores/Browser.js +0 -24
- package/build/cjs/stores/File.js +0 -72
- package/build/cjs/stores/index.js +0 -7
- package/build/cjs/types.js +0 -2
- package/build/defaults.d.ts +0 -6
- package/build/defaults.js +0 -22
- package/build/index.d.ts +0 -4
- package/build/index.js +0 -4
- package/build/observable/accounts.d.ts +0 -1
- package/build/observable/accounts.js +0 -3
- package/build/observable/addresses.d.ts +0 -1
- package/build/observable/addresses.js +0 -3
- package/build/observable/contracts.d.ts +0 -1
- package/build/observable/contracts.js +0 -3
- package/build/observable/env.d.ts +0 -6
- package/build/observable/env.js +0 -9
- package/build/observable/genericSubject.d.ts +0 -2
- package/build/observable/genericSubject.js +0 -44
- package/build/observable/index.d.ts +0 -8
- package/build/observable/index.js +0 -13
- package/build/observable/types.d.ts +0 -15
- package/build/observable/types.js +0 -1
- package/build/options/index.d.ts +0 -15
- package/build/options/index.js +0 -112
- package/build/options/item.d.ts +0 -2
- package/build/options/item.js +0 -13
- package/build/options/types.d.ts +0 -15
- package/build/options/types.js +0 -1
- package/build/package.json +0 -355
- package/build/packageDetect.d.ts +0 -1
- package/build/packageDetect.js +0 -4
- package/build/packageInfo.d.ts +0 -6
- package/build/packageInfo.js +0 -1
- package/build/stores/Browser.d.ts +0 -7
- package/build/stores/Browser.js +0 -19
- package/build/stores/File.d.ts +0 -12
- package/build/stores/File.js +0 -67
- package/build/stores/index.d.ts +0 -2
- package/build/stores/index.js +0 -2
- package/build/types.d.ts +0 -78
- package/build/types.js +0 -1
- package/build-tsc-cjs/packageDetect.js +0 -6
- package/src/Base.ts +0 -156
- package/src/Keyring.ts +0 -420
- package/src/bundle.ts +0 -10
- package/src/defaults.ts +0 -34
- package/src/index.ts +0 -10
- package/src/json.d.ts +0 -11
- package/src/observable/accounts.ts +0 -7
- package/src/observable/addresses.ts +0 -7
- package/src/observable/contracts.ts +0 -7
- package/src/observable/env.ts +0 -15
- package/src/observable/genericSubject.ts +0 -66
- package/src/observable/index.ts +0 -28
- package/src/observable/types.ts +0 -21
- package/src/options/index.ts +0 -150
- package/src/options/item.ts +0 -22
- package/src/options/types.ts +0 -23
- package/src/packageDetect.ts +0 -12
- package/src/packageInfo.ts +0 -6
- package/src/stores/Browser.ts +0 -28
- package/src/stores/File.ts +0 -94
- package/src/stores/index.ts +0 -5
- package/src/types.ts +0 -91
- package/tsconfig.build.json +0 -14
- package/tsconfig.build.tsbuildinfo +0 -1
- package/tsconfig.spec.json +0 -16
- /package/{build-tsc/Base.d.ts → Base.d.ts} +0 -0
- /package/{build-tsc-esm/Base.js → Base.js} +0 -0
- /package/{build-tsc/Keyring.d.ts → Keyring.d.ts} +0 -0
- /package/{build-tsc-esm/Keyring.js → Keyring.js} +0 -0
- /package/{build/LICENSE → LICENSE} +0 -0
- /package/{build/bundle-pezkuwi-ui-keyring.js → bundle-pezkuwi-ui-keyring.js} +0 -0
- /package/{build-tsc/bundle.d.ts → bundle.d.ts} +0 -0
- /package/{build-tsc-esm/bundle.js → bundle.js} +0 -0
- /package/{build → cjs}/Base.d.ts +0 -0
- /package/{build-tsc-cjs → cjs}/Base.js +0 -0
- /package/{build → cjs}/Keyring.d.ts +0 -0
- /package/{build-tsc-cjs → cjs}/Keyring.js +0 -0
- /package/{build → cjs}/bundle.d.ts +0 -0
- /package/{build-tsc-cjs → cjs}/bundle.js +0 -0
- /package/{build-tsc → cjs}/defaults.d.ts +0 -0
- /package/{build-tsc-cjs → cjs}/defaults.js +0 -0
- /package/{build-tsc → cjs}/index.d.ts +0 -0
- /package/{build-tsc-cjs → cjs}/index.js +0 -0
- /package/{build-tsc → cjs}/observable/accounts.d.ts +0 -0
- /package/{build-tsc-cjs → cjs}/observable/accounts.js +0 -0
- /package/{build-tsc → cjs}/observable/addresses.d.ts +0 -0
- /package/{build-tsc-cjs → cjs}/observable/addresses.js +0 -0
- /package/{build-tsc → cjs}/observable/contracts.d.ts +0 -0
- /package/{build-tsc-cjs → cjs}/observable/contracts.js +0 -0
- /package/{build-tsc → cjs}/observable/env.d.ts +0 -0
- /package/{build-tsc-cjs → cjs}/observable/env.js +0 -0
- /package/{build-tsc → cjs}/observable/genericSubject.d.ts +0 -0
- /package/{build-tsc-cjs → cjs}/observable/genericSubject.js +0 -0
- /package/{build-tsc → cjs}/observable/index.d.ts +0 -0
- /package/{build-tsc-cjs → cjs}/observable/index.js +0 -0
- /package/{build-tsc → cjs}/observable/types.d.ts +0 -0
- /package/{build-tsc-cjs → cjs}/observable/types.js +0 -0
- /package/{build-tsc → cjs}/options/index.d.ts +0 -0
- /package/{build-tsc-cjs → cjs}/options/index.js +0 -0
- /package/{build-tsc → cjs}/options/item.d.ts +0 -0
- /package/{build-tsc-cjs → cjs}/options/item.js +0 -0
- /package/{build-tsc → cjs}/options/types.d.ts +0 -0
- /package/{build-tsc-cjs → cjs}/options/types.js +0 -0
- /package/{build/cjs → cjs}/package.json +0 -0
- /package/{build-tsc → cjs}/packageDetect.d.ts +0 -0
- /package/{build/cjs → cjs}/packageDetect.js +0 -0
- /package/{build-tsc → cjs}/packageInfo.d.ts +0 -0
- /package/{build-tsc-cjs → cjs}/packageInfo.js +0 -0
- /package/{build-tsc → cjs}/stores/Browser.d.ts +0 -0
- /package/{build-tsc-cjs → cjs}/stores/Browser.js +0 -0
- /package/{build-tsc → cjs}/stores/File.d.ts +0 -0
- /package/{build-tsc-cjs → cjs}/stores/File.js +0 -0
- /package/{build-tsc → cjs}/stores/index.d.ts +0 -0
- /package/{build-tsc-cjs → cjs}/stores/index.js +0 -0
- /package/{build-tsc → cjs}/types.d.ts +0 -0
- /package/{build-tsc-cjs → cjs}/types.js +0 -0
- /package/{build/cjs/defaults.d.ts → defaults.d.ts} +0 -0
- /package/{build-tsc-esm/defaults.js → defaults.js} +0 -0
- /package/{build/cjs/index.d.ts → index.d.ts} +0 -0
- /package/{build-tsc-esm/index.js → index.js} +0 -0
- /package/{build/cjs/observable → observable}/accounts.d.ts +0 -0
- /package/{build-tsc-esm/observable → observable}/accounts.js +0 -0
- /package/{build/cjs/observable → observable}/addresses.d.ts +0 -0
- /package/{build-tsc-esm/observable → observable}/addresses.js +0 -0
- /package/{build/cjs/observable → observable}/contracts.d.ts +0 -0
- /package/{build-tsc-esm/observable → observable}/contracts.js +0 -0
- /package/{build/cjs/observable → observable}/env.d.ts +0 -0
- /package/{build-tsc-esm/observable → observable}/env.js +0 -0
- /package/{build/cjs/observable → observable}/genericSubject.d.ts +0 -0
- /package/{build-tsc-esm/observable → observable}/genericSubject.js +0 -0
- /package/{build/cjs/observable → observable}/index.d.ts +0 -0
- /package/{build-tsc-esm/observable → observable}/index.js +0 -0
- /package/{build/cjs/observable → observable}/types.d.ts +0 -0
- /package/{build-tsc-esm/observable → observable}/types.js +0 -0
- /package/{build/cjs/options → options}/index.d.ts +0 -0
- /package/{build-tsc-esm/options → options}/index.js +0 -0
- /package/{build/cjs/options → options}/item.d.ts +0 -0
- /package/{build-tsc-esm/options → options}/item.js +0 -0
- /package/{build/cjs/options → options}/types.d.ts +0 -0
- /package/{build-tsc-esm/options → options}/types.js +0 -0
- /package/{build/cjs/packageDetect.d.ts → packageDetect.d.ts} +0 -0
- /package/{build-tsc-esm/packageDetect.js → packageDetect.js} +0 -0
- /package/{build/cjs/packageInfo.d.ts → packageInfo.d.ts} +0 -0
- /package/{build-tsc-esm/packageInfo.js → packageInfo.js} +0 -0
- /package/{build/cjs/stores → stores}/Browser.d.ts +0 -0
- /package/{build-tsc-esm/stores → stores}/Browser.js +0 -0
- /package/{build/cjs/stores → stores}/File.d.ts +0 -0
- /package/{build-tsc-esm/stores → stores}/File.js +0 -0
- /package/{build/cjs/stores → stores}/index.d.ts +0 -0
- /package/{build-tsc-esm/stores → stores}/index.js +0 -0
- /package/{build/cjs/types.d.ts → types.d.ts} +0 -0
- /package/{build-tsc-esm/types.js → types.js} +0 -0
package/build/cjs/Keyring.js
DELETED
|
@@ -1,308 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Keyring = void 0;
|
|
4
|
-
const keyring_1 = require("@pezkuwi/keyring");
|
|
5
|
-
const ui_settings_1 = require("@pezkuwi/ui-settings");
|
|
6
|
-
const util_1 = require("@pezkuwi/util");
|
|
7
|
-
const util_crypto_1 = require("@pezkuwi/util-crypto");
|
|
8
|
-
const env_js_1 = require("./observable/env.js");
|
|
9
|
-
const index_js_1 = require("./options/index.js");
|
|
10
|
-
const Base_js_1 = require("./Base.js");
|
|
11
|
-
const defaults_js_1 = require("./defaults.js");
|
|
12
|
-
const RECENT_EXPIRY = 24 * 60 * 60;
|
|
13
|
-
class Keyring extends Base_js_1.Base {
|
|
14
|
-
keyringOption = new index_js_1.KeyringOption();
|
|
15
|
-
#stores = {
|
|
16
|
-
account: () => this.accounts,
|
|
17
|
-
address: () => this.addresses,
|
|
18
|
-
contract: () => this.contracts
|
|
19
|
-
};
|
|
20
|
-
addExternal(address, meta = {}) {
|
|
21
|
-
const pair = this.keyring.addFromAddress(address, (0, util_1.objectSpread)({}, meta, { isExternal: true }), null, meta?.type);
|
|
22
|
-
return {
|
|
23
|
-
json: this.saveAccount(pair),
|
|
24
|
-
pair
|
|
25
|
-
};
|
|
26
|
-
}
|
|
27
|
-
addHardware(address, hardwareType, meta = {}) {
|
|
28
|
-
return this.addExternal(address, (0, util_1.objectSpread)({}, meta, { hardwareType, isHardware: true }));
|
|
29
|
-
}
|
|
30
|
-
addMultisig(addresses, threshold, meta = {}) {
|
|
31
|
-
let address = (0, util_crypto_1.createKeyMulti)(addresses, threshold);
|
|
32
|
-
// For Ethereum chains, the first 20 bytes of the hash indicates the actual address
|
|
33
|
-
// Testcases via creation and on-chain events:
|
|
34
|
-
// - input: 0x7a1671a0224c8927b08f978027d586ab6868de0d31bb5bc956b625ced2ab18c4
|
|
35
|
-
// - output: 0x7a1671a0224c8927b08f978027d586ab6868de0d
|
|
36
|
-
if (this.isEthereum) {
|
|
37
|
-
address = address.slice(0, 20);
|
|
38
|
-
}
|
|
39
|
-
// we could use `sortAddresses`, but rather use internal encode/decode so we are 100%
|
|
40
|
-
const who = (0, util_1.u8aSorted)(addresses.map((who) => this.decodeAddress(who))).map((who) => this.encodeAddress(who));
|
|
41
|
-
return this.addExternal(address, (0, util_1.objectSpread)({}, meta, { isMultisig: true, threshold: (0, util_1.bnToBn)(threshold).toNumber(), who }));
|
|
42
|
-
}
|
|
43
|
-
addPair(pair, password) {
|
|
44
|
-
this.keyring.addPair(pair);
|
|
45
|
-
return {
|
|
46
|
-
json: this.saveAccount(pair, password),
|
|
47
|
-
pair
|
|
48
|
-
};
|
|
49
|
-
}
|
|
50
|
-
addUri(suri, password, meta = {}, type) {
|
|
51
|
-
const pair = this.keyring.addFromUri(suri, meta, type);
|
|
52
|
-
return {
|
|
53
|
-
json: this.saveAccount(pair, password),
|
|
54
|
-
pair
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
backupAccount(pair, password) {
|
|
58
|
-
if (!pair.isLocked) {
|
|
59
|
-
pair.lock();
|
|
60
|
-
}
|
|
61
|
-
pair.decodePkcs8(password);
|
|
62
|
-
return pair.toJson(password);
|
|
63
|
-
}
|
|
64
|
-
async backupAccounts(addresses, password) {
|
|
65
|
-
const accountPromises = addresses.map((address) => {
|
|
66
|
-
return new Promise((resolve) => {
|
|
67
|
-
this._store.get((0, defaults_js_1.accountKey)(address), resolve);
|
|
68
|
-
});
|
|
69
|
-
});
|
|
70
|
-
const accounts = await Promise.all(accountPromises);
|
|
71
|
-
return (0, util_1.objectSpread)({}, (0, util_crypto_1.jsonEncrypt)((0, util_1.stringToU8a)(JSON.stringify(accounts)), ['batch-pkcs8'], password), {
|
|
72
|
-
accounts: accounts.map((account) => ({
|
|
73
|
-
address: account.address,
|
|
74
|
-
meta: account.meta
|
|
75
|
-
}))
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
createFromJson(json, meta = {}) {
|
|
79
|
-
return this.keyring.createFromJson((0, util_1.objectSpread)({}, json, {
|
|
80
|
-
meta: (0, util_1.objectSpread)({}, json.meta, meta)
|
|
81
|
-
}));
|
|
82
|
-
}
|
|
83
|
-
createFromUri(suri, meta = {}, type) {
|
|
84
|
-
return this.keyring.createFromUri(suri, meta, type);
|
|
85
|
-
}
|
|
86
|
-
encryptAccount(pair, password) {
|
|
87
|
-
const json = pair.toJson(password);
|
|
88
|
-
json.meta.whenEdited = Date.now();
|
|
89
|
-
this.keyring.addFromJson(json);
|
|
90
|
-
this.accounts.add(this._store, pair.address, json, pair.type);
|
|
91
|
-
}
|
|
92
|
-
forgetAccount(address) {
|
|
93
|
-
this.keyring.removePair(address);
|
|
94
|
-
this.accounts.remove(this._store, address);
|
|
95
|
-
}
|
|
96
|
-
forgetAddress(address) {
|
|
97
|
-
this.addresses.remove(this._store, address);
|
|
98
|
-
}
|
|
99
|
-
forgetContract(address) {
|
|
100
|
-
this.contracts.remove(this._store, address);
|
|
101
|
-
}
|
|
102
|
-
getAccount(address) {
|
|
103
|
-
return this.getAddress(address, 'account');
|
|
104
|
-
}
|
|
105
|
-
getAccounts() {
|
|
106
|
-
const available = this.accounts.subject.getValue();
|
|
107
|
-
return Object
|
|
108
|
-
.keys(available)
|
|
109
|
-
.map((address) => this.getAddress(address, 'account'))
|
|
110
|
-
.filter((account) => !!account &&
|
|
111
|
-
(env_js_1.env.isDevelopment() ||
|
|
112
|
-
account.meta.isTesting !== true));
|
|
113
|
-
}
|
|
114
|
-
getAddress(_address, type = null) {
|
|
115
|
-
const address = (0, util_1.isString)(_address)
|
|
116
|
-
? _address
|
|
117
|
-
: this.encodeAddress(_address);
|
|
118
|
-
const publicKey = this.decodeAddress(address);
|
|
119
|
-
const stores = type
|
|
120
|
-
? [this.#stores[type]]
|
|
121
|
-
: Object.values(this.#stores);
|
|
122
|
-
const info = stores.reduce((lastInfo, store) => (store().subject.getValue()[address] || lastInfo), undefined);
|
|
123
|
-
return info && {
|
|
124
|
-
address,
|
|
125
|
-
meta: info.json.meta,
|
|
126
|
-
publicKey
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
getAddresses() {
|
|
130
|
-
const available = this.addresses.subject.getValue();
|
|
131
|
-
return Object
|
|
132
|
-
.keys(available)
|
|
133
|
-
.map((address) => this.getAddress(address))
|
|
134
|
-
.filter((account) => !!account);
|
|
135
|
-
}
|
|
136
|
-
getContract(address) {
|
|
137
|
-
return this.getAddress(address, 'contract');
|
|
138
|
-
}
|
|
139
|
-
getContracts() {
|
|
140
|
-
const available = this.contracts.subject.getValue();
|
|
141
|
-
return Object
|
|
142
|
-
.entries(available)
|
|
143
|
-
.filter(([, { json: { meta: { contract } } }]) => !!contract && contract.genesisHash === this.genesisHash)
|
|
144
|
-
.map(([address]) => this.getContract(address))
|
|
145
|
-
.filter((account) => !!account);
|
|
146
|
-
}
|
|
147
|
-
rewriteKey(json, key, hexAddr, creator) {
|
|
148
|
-
if (hexAddr.startsWith('0x')) {
|
|
149
|
-
return;
|
|
150
|
-
}
|
|
151
|
-
this._store.remove(key);
|
|
152
|
-
this._store.set(creator(hexAddr), json);
|
|
153
|
-
}
|
|
154
|
-
loadAccount(json, key) {
|
|
155
|
-
if (!json.meta.isTesting && json.encoded) {
|
|
156
|
-
const pair = this.keyring.addFromJson(json, true);
|
|
157
|
-
this.accounts.add(this._store, pair.address, json, pair.type);
|
|
158
|
-
}
|
|
159
|
-
const [, hexAddr] = key.split(':');
|
|
160
|
-
this.rewriteKey(json, key, hexAddr.trim(), defaults_js_1.accountKey);
|
|
161
|
-
}
|
|
162
|
-
loadAddress(json, key) {
|
|
163
|
-
const { isRecent, whenCreated = 0 } = json.meta;
|
|
164
|
-
if (isRecent && (Date.now() - whenCreated) > RECENT_EXPIRY) {
|
|
165
|
-
this._store.remove(key);
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
// We assume anything hex that is not 32bytes (64 + 2 bytes hex) is an Ethereum-like address
|
|
169
|
-
// (this caters for both H160 addresses as well as full or compressed publicKeys) - in the case
|
|
170
|
-
// of both ecdsa and ethereum, we keep it as-is
|
|
171
|
-
const address = (0, util_1.isHex)(json.address) && json.address.length !== 66
|
|
172
|
-
? json.address
|
|
173
|
-
: this.encodeAddress((0, util_1.isHex)(json.address)
|
|
174
|
-
? (0, util_1.hexToU8a)(json.address)
|
|
175
|
-
// FIXME Just for the transition period (ignoreChecksum)
|
|
176
|
-
: this.decodeAddress(json.address, true));
|
|
177
|
-
const [, hexAddr] = key.split(':');
|
|
178
|
-
this.addresses.add(this._store, address, json);
|
|
179
|
-
this.rewriteKey(json, key, hexAddr, defaults_js_1.addressKey);
|
|
180
|
-
}
|
|
181
|
-
loadContract(json, key) {
|
|
182
|
-
const address = this.encodeAddress(this.decodeAddress(json.address));
|
|
183
|
-
const [, hexAddr] = key.split(':');
|
|
184
|
-
// move genesisHash to top-level (TODO Remove from contracts section?)
|
|
185
|
-
json.meta.genesisHash = json.meta.genesisHash || (json.meta.contract?.genesisHash);
|
|
186
|
-
this.contracts.add(this._store, address, json);
|
|
187
|
-
this.rewriteKey(json, key, hexAddr, defaults_js_1.contractKey);
|
|
188
|
-
}
|
|
189
|
-
loadInjected(address, meta, type) {
|
|
190
|
-
const json = {
|
|
191
|
-
address,
|
|
192
|
-
meta: (0, util_1.objectSpread)({}, meta, { isInjected: true })
|
|
193
|
-
};
|
|
194
|
-
const pair = this.keyring.addFromAddress(address, json.meta, null, type);
|
|
195
|
-
this.accounts.add(this._store, pair.address, json, pair.type);
|
|
196
|
-
}
|
|
197
|
-
allowGenesis(json) {
|
|
198
|
-
if (json?.meta && this.genesisHash) {
|
|
199
|
-
const hashes = Object.values(ui_settings_1.chains).find((hashes) => hashes.includes(this.genesisHash || '')) || [this.genesisHash];
|
|
200
|
-
if (json.meta.genesisHash) {
|
|
201
|
-
return hashes.includes(json.meta.genesisHash) || this.genesisHashes.includes(json.meta.genesisHash);
|
|
202
|
-
}
|
|
203
|
-
else if (json.meta.contract) {
|
|
204
|
-
return hashes.includes(json.meta.contract.genesisHash);
|
|
205
|
-
}
|
|
206
|
-
}
|
|
207
|
-
return true;
|
|
208
|
-
}
|
|
209
|
-
loadAll(options, injected = []) {
|
|
210
|
-
super.initKeyring(options);
|
|
211
|
-
this._store.all((key, json) => {
|
|
212
|
-
if (!(0, util_1.isFunction)(options.filter) || options.filter(json)) {
|
|
213
|
-
try {
|
|
214
|
-
if (this.allowGenesis(json)) {
|
|
215
|
-
if (defaults_js_1.accountRegex.test(key)) {
|
|
216
|
-
this.loadAccount(json, key);
|
|
217
|
-
}
|
|
218
|
-
else if (defaults_js_1.addressRegex.test(key)) {
|
|
219
|
-
this.loadAddress(json, key);
|
|
220
|
-
}
|
|
221
|
-
else if (defaults_js_1.contractRegex.test(key)) {
|
|
222
|
-
this.loadContract(json, key);
|
|
223
|
-
}
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
catch {
|
|
227
|
-
console.warn(`Keyring: Unable to load ${key}:${(0, util_1.stringify)(json)}`);
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
});
|
|
231
|
-
injected.forEach((account) => {
|
|
232
|
-
if (this.allowGenesis(account)) {
|
|
233
|
-
try {
|
|
234
|
-
this.loadInjected(account.address, account.meta, account.type);
|
|
235
|
-
}
|
|
236
|
-
catch {
|
|
237
|
-
console.warn(`Keyring: Unable to inject ${(0, util_1.stringify)(account)}`);
|
|
238
|
-
}
|
|
239
|
-
}
|
|
240
|
-
});
|
|
241
|
-
this.keyringOption.init(this);
|
|
242
|
-
}
|
|
243
|
-
restoreAccount(json, password) {
|
|
244
|
-
const cryptoType = Array.isArray(json.encoding.content) ? json.encoding.content[1] : 'ed25519';
|
|
245
|
-
const encType = Array.isArray(json.encoding.type) ? json.encoding.type : [json.encoding.type];
|
|
246
|
-
const pair = (0, keyring_1.createPair)({ toSS58: this.encodeAddress, type: cryptoType }, { publicKey: this.decodeAddress(json.address, true) }, json.meta, (0, util_1.isHex)(json.encoded) ? (0, util_1.hexToU8a)(json.encoded) : (0, util_crypto_1.base64Decode)(json.encoded), encType);
|
|
247
|
-
// unlock, save account and then lock (locking cleans secretKey, so needs to be last)
|
|
248
|
-
pair.decodePkcs8(password);
|
|
249
|
-
this.addPair(pair, password);
|
|
250
|
-
pair.lock();
|
|
251
|
-
return pair;
|
|
252
|
-
}
|
|
253
|
-
restoreAccounts(json, password) {
|
|
254
|
-
const accounts = JSON.parse((0, util_1.u8aToString)((0, util_crypto_1.jsonDecrypt)(json, password)));
|
|
255
|
-
accounts.forEach((account) => {
|
|
256
|
-
this.loadAccount(account, (0, defaults_js_1.accountKey)(account.address));
|
|
257
|
-
});
|
|
258
|
-
}
|
|
259
|
-
saveAccount(pair, password) {
|
|
260
|
-
this.addTimestamp(pair);
|
|
261
|
-
const json = pair.toJson(password);
|
|
262
|
-
this.keyring.addFromJson(json);
|
|
263
|
-
this.accounts.add(this._store, pair.address, json, pair.type);
|
|
264
|
-
return json;
|
|
265
|
-
}
|
|
266
|
-
saveAccountMeta(pair, meta) {
|
|
267
|
-
const address = pair.address;
|
|
268
|
-
this._store.get((0, defaults_js_1.accountKey)(address), (json) => {
|
|
269
|
-
pair.setMeta(meta);
|
|
270
|
-
json.meta = pair.meta;
|
|
271
|
-
this.accounts.add(this._store, address, json, pair.type);
|
|
272
|
-
});
|
|
273
|
-
}
|
|
274
|
-
saveAddress(address, meta, type = 'address') {
|
|
275
|
-
const available = this.addresses.subject.getValue();
|
|
276
|
-
const json = available[address]?.json || {
|
|
277
|
-
address,
|
|
278
|
-
meta: {
|
|
279
|
-
isRecent: undefined,
|
|
280
|
-
whenCreated: Date.now()
|
|
281
|
-
}
|
|
282
|
-
};
|
|
283
|
-
Object.keys(meta).forEach((key) => {
|
|
284
|
-
json.meta[key] = meta[key];
|
|
285
|
-
});
|
|
286
|
-
delete json.meta.isRecent;
|
|
287
|
-
this.#stores[type]().add(this._store, address, json);
|
|
288
|
-
return json;
|
|
289
|
-
}
|
|
290
|
-
saveContract(address, meta) {
|
|
291
|
-
return this.saveAddress(address, meta, 'contract');
|
|
292
|
-
}
|
|
293
|
-
saveRecent(address) {
|
|
294
|
-
const available = this.addresses.subject.getValue();
|
|
295
|
-
if (!available[address]) {
|
|
296
|
-
this.addresses.add(this._store, address, {
|
|
297
|
-
address,
|
|
298
|
-
meta: {
|
|
299
|
-
genesisHash: this.genesisHash,
|
|
300
|
-
isRecent: true,
|
|
301
|
-
whenCreated: Date.now()
|
|
302
|
-
}
|
|
303
|
-
});
|
|
304
|
-
}
|
|
305
|
-
return this.addresses.subject.getValue()[address];
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
exports.Keyring = Keyring;
|
package/build/cjs/bundle.d.ts
DELETED
package/build/cjs/bundle.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Keyring = exports.keyring = exports.packageInfo = void 0;
|
|
4
|
-
const Keyring_js_1 = require("./Keyring.js");
|
|
5
|
-
Object.defineProperty(exports, "Keyring", { enumerable: true, get: function () { return Keyring_js_1.Keyring; } });
|
|
6
|
-
var packageInfo_js_1 = require("./packageInfo.js");
|
|
7
|
-
Object.defineProperty(exports, "packageInfo", { enumerable: true, get: function () { return packageInfo_js_1.packageInfo; } });
|
|
8
|
-
exports.keyring = new Keyring_js_1.Keyring();
|
package/build/cjs/defaults.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.contractRegex = exports.addressRegex = exports.accountRegex = void 0;
|
|
4
|
-
exports.accountKey = accountKey;
|
|
5
|
-
exports.addressKey = addressKey;
|
|
6
|
-
exports.contractKey = contractKey;
|
|
7
|
-
const keyring_1 = require("@pezkuwi/keyring");
|
|
8
|
-
const util_1 = require("@pezkuwi/util");
|
|
9
|
-
const ACCOUNT_PREFIX = 'account:';
|
|
10
|
-
const ADDRESS_PREFIX = 'address:';
|
|
11
|
-
const CONTRACT_PREFIX = 'contract:';
|
|
12
|
-
function toHex(address) {
|
|
13
|
-
return (0, util_1.u8aToHex)(
|
|
14
|
-
// When saving pre-checksum changes, ensure that we can decode
|
|
15
|
-
(0, keyring_1.decodeAddress)(address, true));
|
|
16
|
-
}
|
|
17
|
-
function accountKey(address) {
|
|
18
|
-
return `${ACCOUNT_PREFIX}${toHex(address)}`;
|
|
19
|
-
}
|
|
20
|
-
function addressKey(address) {
|
|
21
|
-
return `${ADDRESS_PREFIX}${toHex(address)}`;
|
|
22
|
-
}
|
|
23
|
-
function contractKey(address) {
|
|
24
|
-
return `${CONTRACT_PREFIX}${toHex(address)}`;
|
|
25
|
-
}
|
|
26
|
-
exports.accountRegex = new RegExp(`^${ACCOUNT_PREFIX}0x[0-9a-f]*`, '');
|
|
27
|
-
exports.addressRegex = new RegExp(`^${ADDRESS_PREFIX}0x[0-9a-f]*`, '');
|
|
28
|
-
exports.contractRegex = new RegExp(`^${CONTRACT_PREFIX}0x[0-9a-f]*`, '');
|
package/build/cjs/index.js
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const tslib_1 = require("tslib");
|
|
4
|
-
require("./packageDetect.js");
|
|
5
|
-
const bundle_js_1 = require("./bundle.js");
|
|
6
|
-
tslib_1.__exportStar(require("./bundle.js"), exports);
|
|
7
|
-
exports.default = bundle_js_1.keyring;
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.accounts = void 0;
|
|
4
|
-
const defaults_js_1 = require("../defaults.js");
|
|
5
|
-
const genericSubject_js_1 = require("./genericSubject.js");
|
|
6
|
-
exports.accounts = (0, genericSubject_js_1.genericSubject)(defaults_js_1.accountKey, true);
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.addresses = void 0;
|
|
4
|
-
const defaults_js_1 = require("../defaults.js");
|
|
5
|
-
const genericSubject_js_1 = require("./genericSubject.js");
|
|
6
|
-
exports.addresses = (0, genericSubject_js_1.genericSubject)(defaults_js_1.addressKey);
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.contracts = void 0;
|
|
4
|
-
const defaults_js_1 = require("../defaults.js");
|
|
5
|
-
const genericSubject_js_1 = require("./genericSubject.js");
|
|
6
|
-
exports.contracts = (0, genericSubject_js_1.genericSubject)(defaults_js_1.contractKey);
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.env = void 0;
|
|
4
|
-
const rxjs_1 = require("rxjs");
|
|
5
|
-
const subject = new rxjs_1.BehaviorSubject(false);
|
|
6
|
-
exports.env = {
|
|
7
|
-
isDevelopment: () => subject.getValue(),
|
|
8
|
-
set: (isDevelopment) => {
|
|
9
|
-
subject.next(isDevelopment);
|
|
10
|
-
},
|
|
11
|
-
subject
|
|
12
|
-
};
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.genericSubject = genericSubject;
|
|
4
|
-
const rxjs_1 = require("rxjs");
|
|
5
|
-
const util_1 = require("@pezkuwi/util");
|
|
6
|
-
const item_js_1 = require("../options/item.js");
|
|
7
|
-
const env_js_1 = require("./env.js");
|
|
8
|
-
function callNext(current, subject, withTest) {
|
|
9
|
-
const isDevMode = env_js_1.env.isDevelopment();
|
|
10
|
-
const filtered = {};
|
|
11
|
-
Object.keys(current).forEach((key) => {
|
|
12
|
-
const { json: { meta: { isTesting = false } = {} } = {} } = current[key];
|
|
13
|
-
if (!withTest || isDevMode || isTesting !== true) {
|
|
14
|
-
filtered[key] = current[key];
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
subject.next(filtered);
|
|
18
|
-
}
|
|
19
|
-
function genericSubject(keyCreator, withTest = false) {
|
|
20
|
-
let current = {};
|
|
21
|
-
const subject = new rxjs_1.BehaviorSubject({});
|
|
22
|
-
const next = () => callNext(current, subject, withTest);
|
|
23
|
-
env_js_1.env.subject.subscribe(next);
|
|
24
|
-
return {
|
|
25
|
-
add: (store, address, json, type) => {
|
|
26
|
-
current = (0, util_1.objectCopy)(current);
|
|
27
|
-
current[address] = {
|
|
28
|
-
json: (0, util_1.objectSpread)({}, json, { address }),
|
|
29
|
-
option: (0, item_js_1.createOptionItem)(address, json.meta.name),
|
|
30
|
-
type
|
|
31
|
-
};
|
|
32
|
-
// we do not store dev or injected accounts (external/transient)
|
|
33
|
-
if (!json.meta.isInjected && (!json.meta.isTesting || env_js_1.env.isDevelopment())) {
|
|
34
|
-
store.set(keyCreator(address), json);
|
|
35
|
-
}
|
|
36
|
-
next();
|
|
37
|
-
return current[address];
|
|
38
|
-
},
|
|
39
|
-
remove: (store, address) => {
|
|
40
|
-
current = (0, util_1.objectCopy)(current);
|
|
41
|
-
delete current[address];
|
|
42
|
-
store.remove(keyCreator(address));
|
|
43
|
-
next();
|
|
44
|
-
},
|
|
45
|
-
subject
|
|
46
|
-
};
|
|
47
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.obervableAll = void 0;
|
|
4
|
-
const rxjs_1 = require("rxjs");
|
|
5
|
-
const accounts_js_1 = require("./accounts.js");
|
|
6
|
-
const addresses_js_1 = require("./addresses.js");
|
|
7
|
-
const contracts_js_1 = require("./contracts.js");
|
|
8
|
-
exports.obervableAll = (0, rxjs_1.combineLatest)([
|
|
9
|
-
accounts_js_1.accounts.subject,
|
|
10
|
-
addresses_js_1.addresses.subject,
|
|
11
|
-
contracts_js_1.contracts.subject
|
|
12
|
-
]).pipe((0, rxjs_1.map)(([accounts, addresses, contracts]) => ({
|
|
13
|
-
accounts,
|
|
14
|
-
addresses,
|
|
15
|
-
contracts
|
|
16
|
-
})));
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.KeyringOption = void 0;
|
|
4
|
-
const rxjs_1 = require("rxjs");
|
|
5
|
-
const index_js_1 = require("../observable/index.js");
|
|
6
|
-
let hasCalledInitOptions = false;
|
|
7
|
-
const sortByName = (a, b) => {
|
|
8
|
-
const valueA = a.option.name;
|
|
9
|
-
const valueB = b.option.name;
|
|
10
|
-
return valueA.localeCompare(valueB);
|
|
11
|
-
};
|
|
12
|
-
const sortByCreated = (a, b) => {
|
|
13
|
-
const valueA = a.json.meta.whenCreated || 0;
|
|
14
|
-
const valueB = b.json.meta.whenCreated || 0;
|
|
15
|
-
if (valueA < valueB) {
|
|
16
|
-
return 1;
|
|
17
|
-
}
|
|
18
|
-
if (valueA > valueB) {
|
|
19
|
-
return -1;
|
|
20
|
-
}
|
|
21
|
-
return 0;
|
|
22
|
-
};
|
|
23
|
-
class KeyringOption {
|
|
24
|
-
#allSub = null;
|
|
25
|
-
optionsSubject = new rxjs_1.BehaviorSubject(this.emptyOptions());
|
|
26
|
-
createOptionHeader(name) {
|
|
27
|
-
return {
|
|
28
|
-
key: `header-${name.toLowerCase()}`,
|
|
29
|
-
name,
|
|
30
|
-
value: null
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
init(keyring) {
|
|
34
|
-
if (hasCalledInitOptions) {
|
|
35
|
-
throw new Error('Unable to initialise options more than once');
|
|
36
|
-
}
|
|
37
|
-
this.#allSub = index_js_1.obervableAll.subscribe(() => {
|
|
38
|
-
const opts = this.emptyOptions();
|
|
39
|
-
this.addAccounts(keyring, opts);
|
|
40
|
-
this.addAddresses(keyring, opts);
|
|
41
|
-
this.addContracts(keyring, opts);
|
|
42
|
-
opts.address = this.linkItems({ Addresses: opts.address, Recent: opts.recent });
|
|
43
|
-
opts.account = this.linkItems({ Accounts: opts.account, Development: opts.testing });
|
|
44
|
-
opts.contract = this.linkItems({ Contracts: opts.contract });
|
|
45
|
-
opts.all = [].concat(opts.account, opts.address);
|
|
46
|
-
opts.allPlus = [].concat(opts.account, opts.address, opts.contract);
|
|
47
|
-
this.optionsSubject.next(opts);
|
|
48
|
-
});
|
|
49
|
-
hasCalledInitOptions = true;
|
|
50
|
-
}
|
|
51
|
-
clear() {
|
|
52
|
-
if (this.#allSub) {
|
|
53
|
-
this.#allSub.unsubscribe();
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
linkItems(items) {
|
|
57
|
-
return Object.keys(items).reduce((result, header) => {
|
|
58
|
-
const options = items[header];
|
|
59
|
-
return result.concat(options.length
|
|
60
|
-
? [this.createOptionHeader(header)]
|
|
61
|
-
: [], options);
|
|
62
|
-
}, []);
|
|
63
|
-
}
|
|
64
|
-
addAccounts(keyring, options) {
|
|
65
|
-
const available = keyring.accounts.subject.getValue();
|
|
66
|
-
Object
|
|
67
|
-
.values(available)
|
|
68
|
-
.sort(sortByName)
|
|
69
|
-
.forEach(({ json: { meta: { isTesting = false } }, option }) => {
|
|
70
|
-
if (!isTesting) {
|
|
71
|
-
options.account.push(option);
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
options.testing.push(option);
|
|
75
|
-
}
|
|
76
|
-
});
|
|
77
|
-
}
|
|
78
|
-
addAddresses(keyring, options) {
|
|
79
|
-
const available = keyring.addresses.subject.getValue();
|
|
80
|
-
Object
|
|
81
|
-
.values(available)
|
|
82
|
-
.filter(({ json }) => !!json.meta.isRecent)
|
|
83
|
-
.sort(sortByCreated)
|
|
84
|
-
.forEach(({ option }) => {
|
|
85
|
-
options.recent.push(option);
|
|
86
|
-
});
|
|
87
|
-
Object
|
|
88
|
-
.values(available)
|
|
89
|
-
.filter(({ json }) => !json.meta.isRecent)
|
|
90
|
-
.sort(sortByName)
|
|
91
|
-
.forEach(({ option }) => {
|
|
92
|
-
options.address.push(option);
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
addContracts(keyring, options) {
|
|
96
|
-
const available = keyring.contracts.subject.getValue();
|
|
97
|
-
Object
|
|
98
|
-
.values(available)
|
|
99
|
-
.sort(sortByName)
|
|
100
|
-
.forEach(({ option }) => {
|
|
101
|
-
options.contract.push(option);
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
emptyOptions() {
|
|
105
|
-
return {
|
|
106
|
-
account: [],
|
|
107
|
-
address: [],
|
|
108
|
-
all: [],
|
|
109
|
-
allPlus: [],
|
|
110
|
-
contract: [],
|
|
111
|
-
recent: [],
|
|
112
|
-
testing: []
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
exports.KeyringOption = KeyringOption;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createOptionItem = createOptionItem;
|
|
4
|
-
const util_1 = require("@pezkuwi/util");
|
|
5
|
-
function createOptionItem(address, _name) {
|
|
6
|
-
const name = (0, util_1.isUndefined)(_name)
|
|
7
|
-
? ((address.length > 15)
|
|
8
|
-
? `${address.slice(0, 6)}…${address.slice(-6)}`
|
|
9
|
-
: address)
|
|
10
|
-
: _name;
|
|
11
|
-
return {
|
|
12
|
-
key: address,
|
|
13
|
-
name,
|
|
14
|
-
value: address
|
|
15
|
-
};
|
|
16
|
-
}
|
package/build/cjs/packageInfo.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BrowserStore = void 0;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
|
-
const store_1 = tslib_1.__importDefault(require("store"));
|
|
6
|
-
class BrowserStore {
|
|
7
|
-
all(fn) {
|
|
8
|
-
store_1.default.each((value, key) => {
|
|
9
|
-
fn(key, value);
|
|
10
|
-
});
|
|
11
|
-
}
|
|
12
|
-
get(key, fn) {
|
|
13
|
-
fn(store_1.default.get(key));
|
|
14
|
-
}
|
|
15
|
-
remove(key, fn) {
|
|
16
|
-
store_1.default.remove(key);
|
|
17
|
-
fn && fn();
|
|
18
|
-
}
|
|
19
|
-
set(key, value, fn) {
|
|
20
|
-
store_1.default.set(key, value);
|
|
21
|
-
fn && fn();
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
exports.BrowserStore = BrowserStore;
|