@subwallet/extension-base 1.0.12-0 → 1.0.13-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.
- package/background/KoniTypes.d.ts +89 -0
- package/background/KoniTypes.js +18 -19
- package/background/handlers/Extension.js +17 -2
- package/background/handlers/State.d.ts +0 -1
- package/background/handlers/State.js +4 -8
- package/background/types.d.ts +6 -1
- package/cjs/background/KoniTypes.js +21 -11
- package/cjs/background/handlers/Extension.js +22 -6
- package/cjs/background/handlers/State.js +4 -8
- package/cjs/constants/index.js +7 -1
- package/cjs/defaults.js +1 -1
- package/cjs/koni/api/dotsama/balance.js +5 -0
- package/cjs/koni/api/dotsama/transfer.js +6 -0
- package/cjs/koni/api/nft/config.js +11 -6
- package/cjs/koni/api/xcm/polkadotXcm.js +1 -1
- package/cjs/koni/api/xcm/xTokens.js +2 -2
- package/cjs/koni/background/cron.js +12 -1
- package/cjs/koni/background/handlers/Extension.js +457 -131
- package/cjs/koni/background/handlers/State.js +236 -53
- package/cjs/koni/background/handlers/Tabs.js +61 -9
- package/cjs/koni/background/subscription.js +3 -0
- package/cjs/packageInfo.js +1 -1
- package/cjs/page/Metadata.js +3 -0
- package/cjs/services/chain-service/constants.js +10 -4
- package/cjs/services/chain-service/handler/SubstrateApi.js +2 -1
- package/cjs/services/chain-service/handler/SubstrateChainHandler.js +3 -1
- package/cjs/services/chain-service/handler/manta/MantaPrivateHandler.js +147 -0
- package/cjs/services/chain-service/index.js +54 -5
- package/cjs/services/chain-service/utils.js +32 -0
- package/cjs/services/event-service/types.js +3 -1
- package/cjs/services/request-service/handler/AuthRequestHandler.js +4 -9
- package/cjs/services/request-service/handler/SubstrateRequestHandler.js +2 -2
- package/cjs/services/request-service/handler/WalletConnectRequestHandler.js +71 -0
- package/cjs/services/request-service/index.js +24 -6
- package/cjs/services/storage-service/DatabaseService.js +31 -1
- package/cjs/services/storage-service/databases/index.js +3 -0
- package/cjs/services/storage-service/db-stores/MantaPay.js +40 -0
- package/cjs/services/transaction-service/helpers/index.js +3 -2
- package/cjs/services/transaction-service/index.js +2 -1
- package/cjs/services/wallet-connect-service/constants.js +38 -0
- package/cjs/services/wallet-connect-service/handler/Eip155RequestHandler.js +113 -0
- package/cjs/services/wallet-connect-service/handler/PolkadotRequestHandler.js +123 -0
- package/cjs/services/wallet-connect-service/helpers.js +81 -0
- package/cjs/services/wallet-connect-service/index.js +273 -0
- package/cjs/services/wallet-connect-service/types.js +27 -0
- package/cjs/utils/array.js +17 -0
- package/cjs/utils/environment.js +66 -0
- package/cjs/utils/index.js +78 -1
- package/cjs/utils/lazy.js +52 -0
- package/constants/index.d.ts +2 -0
- package/constants/index.js +2 -0
- package/defaults.d.ts +1 -1
- package/defaults.js +1 -1
- package/koni/api/dotsama/balance.js +6 -1
- package/koni/api/dotsama/transfer.js +7 -1
- package/koni/api/nft/config.js +11 -6
- package/koni/api/xcm/polkadotXcm.js +1 -1
- package/koni/api/xcm/xTokens.js +2 -2
- package/koni/background/cron.d.ts +1 -0
- package/koni/background/cron.js +13 -2
- package/koni/background/handlers/Extension.d.ts +11 -0
- package/koni/background/handlers/Extension.js +329 -12
- package/koni/background/handlers/State.d.ts +17 -3
- package/koni/background/handlers/State.js +238 -52
- package/koni/background/handlers/Tabs.d.ts +2 -0
- package/koni/background/handlers/Tabs.js +58 -7
- package/koni/background/subscription.js +3 -0
- package/package.json +72 -6
- package/packageInfo.js +1 -1
- package/page/Metadata.d.ts +2 -0
- package/page/Metadata.js +3 -0
- package/services/chain-service/constants.d.ts +3 -0
- package/services/chain-service/constants.js +5 -2
- package/services/chain-service/handler/SubstrateApi.d.ts +1 -1
- package/services/chain-service/handler/SubstrateApi.js +2 -1
- package/services/chain-service/handler/SubstrateChainHandler.d.ts +1 -1
- package/services/chain-service/handler/SubstrateChainHandler.js +3 -1
- package/services/chain-service/handler/manta/MantaPrivateHandler.d.ts +30 -0
- package/services/chain-service/handler/manta/MantaPrivateHandler.js +140 -0
- package/services/chain-service/handler/types.d.ts +2 -0
- package/services/chain-service/index.d.ts +7 -3
- package/services/chain-service/index.js +56 -7
- package/services/chain-service/utils.d.ts +3 -0
- package/services/chain-service/utils.js +28 -0
- package/services/event-service/types.d.ts +3 -0
- package/services/event-service/types.js +3 -1
- package/services/request-service/handler/AuthRequestHandler.d.ts +0 -1
- package/services/request-service/handler/AuthRequestHandler.js +5 -10
- package/services/request-service/handler/SubstrateRequestHandler.d.ts +1 -1
- package/services/request-service/handler/SubstrateRequestHandler.js +2 -2
- package/services/request-service/handler/WalletConnectRequestHandler.d.ts +15 -0
- package/services/request-service/handler/WalletConnectRequestHandler.js +62 -0
- package/services/request-service/index.d.ts +7 -2
- package/services/request-service/index.js +24 -6
- package/services/storage-service/DatabaseService.d.ts +10 -1
- package/services/storage-service/DatabaseService.js +31 -1
- package/services/storage-service/databases/index.d.ts +2 -0
- package/services/storage-service/databases/index.js +3 -0
- package/services/storage-service/db-stores/MantaPay.d.ts +9 -0
- package/services/storage-service/db-stores/MantaPay.js +32 -0
- package/services/transaction-service/helpers/index.d.ts +1 -1
- package/services/transaction-service/helpers/index.js +2 -2
- package/services/transaction-service/index.js +2 -1
- package/services/transaction-service/types.d.ts +2 -1
- package/services/wallet-connect-service/constants.d.ts +11 -0
- package/services/wallet-connect-service/constants.js +23 -0
- package/services/wallet-connect-service/handler/Eip155RequestHandler.d.ts +8 -0
- package/services/wallet-connect-service/handler/Eip155RequestHandler.js +106 -0
- package/services/wallet-connect-service/handler/PolkadotRequestHandler.d.ts +8 -0
- package/services/wallet-connect-service/handler/PolkadotRequestHandler.js +114 -0
- package/services/wallet-connect-service/helpers.d.ts +12 -0
- package/services/wallet-connect-service/helpers.js +67 -0
- package/services/wallet-connect-service/index.d.ts +20 -0
- package/services/wallet-connect-service/index.js +265 -0
- package/services/wallet-connect-service/types.d.ts +46 -0
- package/services/wallet-connect-service/types.js +20 -0
- package/utils/array.d.ts +1 -0
- package/utils/array.js +10 -0
- package/utils/environment.d.ts +2 -0
- package/utils/environment.js +59 -0
- package/utils/index.d.ts +4 -0
- package/utils/index.js +10 -2
- package/utils/lazy.d.ts +2 -0
- package/utils/lazy.js +43 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.MantaPrivateHandler = void 0;
|
|
7
|
+
var _mantaExtensionSdk = require("manta-extension-sdk");
|
|
8
|
+
var _rxjs = require("rxjs");
|
|
9
|
+
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
10
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
11
|
+
|
|
12
|
+
class MantaPrivateHandler {
|
|
13
|
+
_privateWallet = undefined;
|
|
14
|
+
syncStateSubject = new _rxjs.Subject();
|
|
15
|
+
constructor(dbService) {
|
|
16
|
+
this.dbService = dbService;
|
|
17
|
+
this.syncState = {
|
|
18
|
+
isSyncing: false,
|
|
19
|
+
progress: 0
|
|
20
|
+
};
|
|
21
|
+
this.syncStateSubject.next(this.syncState);
|
|
22
|
+
}
|
|
23
|
+
setCurrentAddress(address) {
|
|
24
|
+
this.currentAddress = address;
|
|
25
|
+
}
|
|
26
|
+
getSyncState() {
|
|
27
|
+
return this.syncState;
|
|
28
|
+
}
|
|
29
|
+
get privateWallet() {
|
|
30
|
+
return this._privateWallet;
|
|
31
|
+
}
|
|
32
|
+
subscribeSyncState() {
|
|
33
|
+
return this.syncStateSubject;
|
|
34
|
+
}
|
|
35
|
+
async updateMantaPayConfig(address, chain, changes) {
|
|
36
|
+
await this.dbService.updateMantaPayData(`config_${chain}_${address}`, changes);
|
|
37
|
+
}
|
|
38
|
+
async saveMantaPayConfig(config) {
|
|
39
|
+
await this.dbService.setMantaPayData({
|
|
40
|
+
key: `config_${config.chain}_${config.address}`,
|
|
41
|
+
...config
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
async getMantaPayConfig(address, chain) {
|
|
45
|
+
return this.dbService.getMantaPayData(`config_${chain}_${address}`);
|
|
46
|
+
}
|
|
47
|
+
async getMantaPayFirstConfig(chain) {
|
|
48
|
+
return this.dbService.getMantaPayFirstConfig(chain);
|
|
49
|
+
}
|
|
50
|
+
async deleteMantaPayConfig(address, chain) {
|
|
51
|
+
return this.dbService.deleteMantaPayConfig(`config_${chain}_${address}`);
|
|
52
|
+
}
|
|
53
|
+
async saveMantaAuthContext(context) {
|
|
54
|
+
await this.dbService.setMantaPayData({
|
|
55
|
+
key: `authContext_${context.chain}_${context.address}`,
|
|
56
|
+
...context
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
async getMantaAuthContext(address, chain) {
|
|
60
|
+
return this.dbService.getMantaPayData(`authContext_${chain}_${address}`);
|
|
61
|
+
}
|
|
62
|
+
async deleteMantaAuthContext(address, chain) {
|
|
63
|
+
return this.dbService.deleteMantaPayConfig(`authContext_${chain}_${address}`);
|
|
64
|
+
}
|
|
65
|
+
async saveLedgerState(palletName, network, data) {
|
|
66
|
+
try {
|
|
67
|
+
const suffix = this.currentAddress ? `_${this.currentAddress}` : '';
|
|
68
|
+
await this.dbService.setMantaPayData({
|
|
69
|
+
key: `storage_state_${palletName}_${network}${suffix}`,
|
|
70
|
+
...data
|
|
71
|
+
});
|
|
72
|
+
} catch (e) {
|
|
73
|
+
console.error('manta-pay', e);
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
async getLedgerState(palletName, network) {
|
|
79
|
+
let result;
|
|
80
|
+
try {
|
|
81
|
+
const suffix = this.currentAddress ? `_${this.currentAddress}` : '';
|
|
82
|
+
|
|
83
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
84
|
+
result = await this.dbService.getMantaPayData(`storage_state_${palletName}_${network}${suffix}`);
|
|
85
|
+
} catch (e) {
|
|
86
|
+
console.error(e);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
90
|
+
return result || null;
|
|
91
|
+
}
|
|
92
|
+
async initMantaPay(providerUrl, network) {
|
|
93
|
+
const networkParam = network.charAt(0).toUpperCase() + network.slice(1); // Manta || Calamari || Dolphin
|
|
94
|
+
|
|
95
|
+
const baseWallet = await _mantaExtensionSdk.BaseWallet.init({
|
|
96
|
+
apiEndpoint: providerUrl,
|
|
97
|
+
loggingEnabled: false,
|
|
98
|
+
provingFilePath: './manta-pay/proving',
|
|
99
|
+
parametersFilePath: './manta-pay/parameters',
|
|
100
|
+
saveStorageStateToLocal: this.saveLedgerState.bind(this),
|
|
101
|
+
getStorageStateFromLocal: this.getLedgerState.bind(this)
|
|
102
|
+
});
|
|
103
|
+
this._privateWallet = _mantaExtensionSdk.MantaPayWallet.init(networkParam, baseWallet);
|
|
104
|
+
return this._privateWallet.api;
|
|
105
|
+
}
|
|
106
|
+
async getCurrentLedgerState() {
|
|
107
|
+
var _this$_privateWallet;
|
|
108
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
109
|
+
const ledgerState = await this.getLedgerState('mantaPay', 'Calamari');
|
|
110
|
+
if (!ledgerState) {
|
|
111
|
+
return 0;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment
|
|
115
|
+
return await ((_this$_privateWallet = this._privateWallet) === null || _this$_privateWallet === void 0 ? void 0 : _this$_privateWallet.getLedgerCurrentCount(ledgerState.checkpoint));
|
|
116
|
+
}
|
|
117
|
+
setSyncState(data) {
|
|
118
|
+
this.syncState = data;
|
|
119
|
+
this.syncStateSubject.next(this.syncState);
|
|
120
|
+
}
|
|
121
|
+
async subscribeSyncProgress() {
|
|
122
|
+
var _this$_privateWallet2;
|
|
123
|
+
const ledgerTotalCount = await ((_this$_privateWallet2 = this._privateWallet) === null || _this$_privateWallet2 === void 0 ? void 0 : _this$_privateWallet2.getLedgerTotalCount());
|
|
124
|
+
const interval = setInterval(() => {
|
|
125
|
+
this.getCurrentLedgerState().then(currentCount => {
|
|
126
|
+
const progress = Math.floor(currentCount / ledgerTotalCount * 100);
|
|
127
|
+
if (progress === 100) {
|
|
128
|
+
this.syncState = {
|
|
129
|
+
isSyncing: false,
|
|
130
|
+
progress
|
|
131
|
+
};
|
|
132
|
+
clearInterval(interval);
|
|
133
|
+
} else {
|
|
134
|
+
this.syncState = {
|
|
135
|
+
isSyncing: true,
|
|
136
|
+
progress
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
this.syncStateSubject.next(this.syncState);
|
|
140
|
+
}).catch(console.error);
|
|
141
|
+
}, 1000);
|
|
142
|
+
return () => {
|
|
143
|
+
interval && clearInterval(interval);
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
exports.MantaPrivateHandler = MantaPrivateHandler;
|
|
@@ -9,6 +9,7 @@ var _chainList = require("@subwallet/chain-list");
|
|
|
9
9
|
var _types = require("@subwallet/chain-list/types");
|
|
10
10
|
var _constants = require("@subwallet/extension-base/services/chain-service/constants");
|
|
11
11
|
var _EvmChainHandler = require("@subwallet/extension-base/services/chain-service/handler/EvmChainHandler");
|
|
12
|
+
var _MantaPrivateHandler = require("@subwallet/extension-base/services/chain-service/handler/manta/MantaPrivateHandler");
|
|
12
13
|
var _SubstrateChainHandler = require("@subwallet/extension-base/services/chain-service/handler/SubstrateChainHandler");
|
|
13
14
|
var _types2 = require("@subwallet/extension-base/services/chain-service/handler/types");
|
|
14
15
|
var _types3 = require("@subwallet/extension-base/services/chain-service/types");
|
|
@@ -29,6 +30,10 @@ class ChainService {
|
|
|
29
30
|
};
|
|
30
31
|
lockChainInfoMap = false; // prevent unwanted changes (edit, enable, disable) to chainInfoMap
|
|
31
32
|
|
|
33
|
+
get mantaPay() {
|
|
34
|
+
return this.mantaChainHandler;
|
|
35
|
+
}
|
|
36
|
+
|
|
32
37
|
// TODO: consider BehaviorSubject
|
|
33
38
|
chainInfoMapSubject = new _rxjs.Subject();
|
|
34
39
|
chainStateMapSubject = new _rxjs.Subject();
|
|
@@ -42,6 +47,10 @@ class ChainService {
|
|
|
42
47
|
constructor(dbService, eventService) {
|
|
43
48
|
this.dbService = dbService;
|
|
44
49
|
this.eventService = eventService;
|
|
50
|
+
this.substrateChainHandler = new _SubstrateChainHandler.SubstrateChainHandler();
|
|
51
|
+
this.evmChainHandler = new _EvmChainHandler.EvmChainHandler();
|
|
52
|
+
this.mantaChainHandler = new _MantaPrivateHandler.MantaPrivateHandler(dbService);
|
|
53
|
+
this.chainInfoMapSubject.next(this.dataMap.chainInfoMap);
|
|
45
54
|
this.chainStateMapSubject.next(this.dataMap.chainStateMap);
|
|
46
55
|
this.chainInfoMapSubject.next(this.dataMap.chainInfoMap);
|
|
47
56
|
this.assetRegistrySubject.next(this.dataMap.assetRegistry);
|
|
@@ -225,6 +234,15 @@ class ChainService {
|
|
|
225
234
|
getAssetBySlug(slug) {
|
|
226
235
|
return this.getAssetRegistry()[slug];
|
|
227
236
|
}
|
|
237
|
+
getMantaZkAssets(chain) {
|
|
238
|
+
const result = {};
|
|
239
|
+
Object.values(this.getAssetRegistry()).forEach(chainAsset => {
|
|
240
|
+
if (chainAsset.originChain === chain && (0, _utils._isAssetFungibleToken)(chainAsset) && chainAsset.symbol.startsWith(_constants._ZK_ASSET_PREFIX)) {
|
|
241
|
+
result[chainAsset.slug] = chainAsset;
|
|
242
|
+
}
|
|
243
|
+
});
|
|
244
|
+
return result;
|
|
245
|
+
}
|
|
228
246
|
getFungibleTokensByChain(chainSlug) {
|
|
229
247
|
let checkActive = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
230
248
|
const result = {};
|
|
@@ -415,11 +433,21 @@ class ChainService {
|
|
|
415
433
|
}
|
|
416
434
|
};
|
|
417
435
|
if (chainInfo.substrateInfo !== null && chainInfo.substrateInfo !== undefined) {
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
436
|
+
if (_constants._MANTA_ZK_CHAIN_GROUP.includes(chainInfo.slug)) {
|
|
437
|
+
const apiPromise = await this.mantaChainHandler.initMantaPay(endpoint, chainInfo.slug);
|
|
438
|
+
const chainApi = await this.substrateChainHandler.initApi(chainInfo.slug, endpoint, {
|
|
439
|
+
providerName,
|
|
440
|
+
externalApiPromise: apiPromise,
|
|
441
|
+
onUpdateStatus
|
|
442
|
+
});
|
|
443
|
+
this.substrateChainHandler.setSubstrateApi(chainInfo.slug, chainApi);
|
|
444
|
+
} else {
|
|
445
|
+
const chainApi = await this.substrateChainHandler.initApi(chainInfo.slug, endpoint, {
|
|
446
|
+
providerName,
|
|
447
|
+
onUpdateStatus
|
|
448
|
+
});
|
|
449
|
+
this.substrateChainHandler.setSubstrateApi(chainInfo.slug, chainApi);
|
|
450
|
+
}
|
|
423
451
|
}
|
|
424
452
|
if (chainInfo.evmInfo !== null && chainInfo.evmInfo !== undefined) {
|
|
425
453
|
const chainApi = await this.evmChainHandler.initApi(chainInfo.slug, endpoint, {
|
|
@@ -1179,6 +1207,27 @@ class ChainService {
|
|
|
1179
1207
|
});
|
|
1180
1208
|
this.store.set('AssetSetting', assetSettings);
|
|
1181
1209
|
}
|
|
1210
|
+
setMantaZkAssetSettings(visible) {
|
|
1211
|
+
const zkAssetSettings = {};
|
|
1212
|
+
Object.values(this.dataMap.assetRegistry).forEach(asset => {
|
|
1213
|
+
if ((0, _utils._isMantaZkAsset)(asset)) {
|
|
1214
|
+
zkAssetSettings[asset.slug] = {
|
|
1215
|
+
visible
|
|
1216
|
+
};
|
|
1217
|
+
}
|
|
1218
|
+
});
|
|
1219
|
+
this.store.get('AssetSetting', storedAssetSettings => {
|
|
1220
|
+
const newAssetSettings = {
|
|
1221
|
+
...storedAssetSettings,
|
|
1222
|
+
...zkAssetSettings
|
|
1223
|
+
};
|
|
1224
|
+
this.store.set('AssetSetting', newAssetSettings);
|
|
1225
|
+
this.assetSettingSubject.next(newAssetSettings);
|
|
1226
|
+
Object.keys(zkAssetSettings).forEach(slug => {
|
|
1227
|
+
this.eventService.emit('asset.updateState', slug);
|
|
1228
|
+
});
|
|
1229
|
+
});
|
|
1230
|
+
}
|
|
1182
1231
|
async getStoreAssetSettings() {
|
|
1183
1232
|
return new Promise(resolve => {
|
|
1184
1233
|
this.store.get('AssetSetting', resolve);
|
|
@@ -51,6 +51,7 @@ exports._isCustomProvider = _isCustomProvider;
|
|
|
51
51
|
exports._isEqualContractAddress = _isEqualContractAddress;
|
|
52
52
|
exports._isEqualSmartContractAsset = _isEqualSmartContractAsset;
|
|
53
53
|
exports._isLocalToken = _isLocalToken;
|
|
54
|
+
exports._isMantaZkAsset = _isMantaZkAsset;
|
|
54
55
|
exports._isNativeToken = _isNativeToken;
|
|
55
56
|
exports._isNativeTokenBySlug = _isNativeTokenBySlug;
|
|
56
57
|
exports._isPureEvmChain = _isPureEvmChain;
|
|
@@ -65,7 +66,9 @@ exports._isTokenWasmSmartContract = _isTokenWasmSmartContract;
|
|
|
65
66
|
exports._isXcmPathSupported = _isXcmPathSupported;
|
|
66
67
|
exports._parseAssetRefKey = _parseAssetRefKey;
|
|
67
68
|
exports._parseMetadataForSmartContractAsset = _parseMetadataForSmartContractAsset;
|
|
69
|
+
exports.findChainInfoByHalfGenesisHash = exports.findChainInfoByChainId = void 0;
|
|
68
70
|
var _types = require("@subwallet/chain-list/types");
|
|
71
|
+
var _constants = require("@subwallet/extension-base/services/chain-service/constants");
|
|
69
72
|
var _types2 = require("@subwallet/extension-base/services/chain-service/types");
|
|
70
73
|
var _utilCrypto = require("@polkadot/util-crypto");
|
|
71
74
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
@@ -397,4 +400,33 @@ function _isCustomProvider(providerKey) {
|
|
|
397
400
|
}
|
|
398
401
|
function _generateCustomProviderKey(index) {
|
|
399
402
|
return `${_types2._CUSTOM_PREFIX}provider-${index}`;
|
|
403
|
+
}
|
|
404
|
+
const findChainInfoByHalfGenesisHash = (chainMap, halfGenesisHash) => {
|
|
405
|
+
if (!halfGenesisHash) {
|
|
406
|
+
return null;
|
|
407
|
+
}
|
|
408
|
+
for (const chainInfo of Object.values(chainMap)) {
|
|
409
|
+
var _getSubstrateGenesisH;
|
|
410
|
+
if (((_getSubstrateGenesisH = _getSubstrateGenesisHash(chainInfo)) === null || _getSubstrateGenesisH === void 0 ? void 0 : _getSubstrateGenesisH.toLowerCase().substring(2, 2 + 32)) === halfGenesisHash.toLowerCase()) {
|
|
411
|
+
return chainInfo;
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
return null;
|
|
415
|
+
};
|
|
416
|
+
exports.findChainInfoByHalfGenesisHash = findChainInfoByHalfGenesisHash;
|
|
417
|
+
const findChainInfoByChainId = (chainMap, chainId) => {
|
|
418
|
+
if (!chainId) {
|
|
419
|
+
return null;
|
|
420
|
+
}
|
|
421
|
+
for (const chainInfo of Object.values(chainMap)) {
|
|
422
|
+
var _chainInfo$evmInfo5;
|
|
423
|
+
if (((_chainInfo$evmInfo5 = chainInfo.evmInfo) === null || _chainInfo$evmInfo5 === void 0 ? void 0 : _chainInfo$evmInfo5.evmChainId) === chainId) {
|
|
424
|
+
return chainInfo;
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
return null;
|
|
428
|
+
};
|
|
429
|
+
exports.findChainInfoByChainId = findChainInfoByChainId;
|
|
430
|
+
function _isMantaZkAsset(chainAsset) {
|
|
431
|
+
return _constants._MANTA_ZK_CHAIN_GROUP.includes(chainAsset.originChain) && chainAsset.symbol.startsWith(_constants._ZK_ASSET_PREFIX);
|
|
400
432
|
}
|
|
@@ -7,5 +7,7 @@ exports.COMMON_RELOAD_EVENTS = void 0;
|
|
|
7
7
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
8
8
|
// SPDX-License-Identifier: Apache-2.0
|
|
9
9
|
|
|
10
|
-
const COMMON_RELOAD_EVENTS = ['account.updateCurrent', 'asset.updateState', 'account.add', 'chain.updateState', 'account.remove', 'chain.add'
|
|
10
|
+
const COMMON_RELOAD_EVENTS = ['account.updateCurrent', 'asset.updateState', 'account.add', 'chain.updateState', 'account.remove', 'chain.add', 'mantaPay.initSync',
|
|
11
|
+
// TODO: re-check this
|
|
12
|
+
'mantaPay.enable'];
|
|
11
13
|
exports.COMMON_RELOAD_EVENTS = COMMON_RELOAD_EVENTS;
|
|
@@ -31,11 +31,6 @@ class AuthRequestHandler {
|
|
|
31
31
|
this.#requestService = requestService;
|
|
32
32
|
this.#chainService = chainService;
|
|
33
33
|
}
|
|
34
|
-
stripUrl(url) {
|
|
35
|
-
(0, _util.assert)(url && (url.startsWith('http:') || url.startsWith('https:') || url.startsWith('ipfs:') || url.startsWith('ipns:')), `Invalid url ${url}, expected to start with http: or https: or ipfs: or ipns:`);
|
|
36
|
-
const parts = url.split('/');
|
|
37
|
-
return parts[2];
|
|
38
|
-
}
|
|
39
34
|
getAddressList() {
|
|
40
35
|
let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
41
36
|
const addressList = Object.keys(this.keyringService.accounts);
|
|
@@ -172,7 +167,7 @@ class AuthRequestHandler {
|
|
|
172
167
|
if (value) {
|
|
173
168
|
authorizeList = value;
|
|
174
169
|
}
|
|
175
|
-
const existed = authorizeList[
|
|
170
|
+
const existed = authorizeList[(0, _utils2.stripUrl)(url)];
|
|
176
171
|
|
|
177
172
|
// On cancel don't save anything
|
|
178
173
|
if (isCancelled) {
|
|
@@ -181,7 +176,7 @@ class AuthRequestHandler {
|
|
|
181
176
|
cb();
|
|
182
177
|
return;
|
|
183
178
|
}
|
|
184
|
-
authorizeList[
|
|
179
|
+
authorizeList[(0, _utils2.stripUrl)(url)] = {
|
|
185
180
|
count: 0,
|
|
186
181
|
id: idStr,
|
|
187
182
|
isAllowed,
|
|
@@ -222,7 +217,7 @@ class AuthRequestHandler {
|
|
|
222
217
|
if (!authList) {
|
|
223
218
|
authList = {};
|
|
224
219
|
}
|
|
225
|
-
const idStr =
|
|
220
|
+
const idStr = (0, _utils2.stripUrl)(url);
|
|
226
221
|
// Do not enqueue duplicate authorization requests.
|
|
227
222
|
const isDuplicate = Object.values(this.#authRequestsV2).some(request => request.idStr === idStr);
|
|
228
223
|
(0, _util.assert)(!isDuplicate, `The source ${url} has a pending authorization request`);
|
|
@@ -280,7 +275,7 @@ class AuthRequestHandler {
|
|
|
280
275
|
return this.authorizeUrlSubject;
|
|
281
276
|
}
|
|
282
277
|
ensureUrlAuthorizedV2(url) {
|
|
283
|
-
const idStr =
|
|
278
|
+
const idStr = (0, _utils2.stripUrl)(url);
|
|
284
279
|
return new Promise((resolve, reject) => {
|
|
285
280
|
this.getAuthorize(value => {
|
|
286
281
|
if (!value) {
|
|
@@ -67,8 +67,8 @@ class SubstrateRequestHandler {
|
|
|
67
67
|
get numSubstrateRequests() {
|
|
68
68
|
return Object.keys(this.#substrateRequests).length;
|
|
69
69
|
}
|
|
70
|
-
sign(url, request, account) {
|
|
71
|
-
const id = (0, _getId.getId)();
|
|
70
|
+
sign(url, request, account, _id) {
|
|
71
|
+
const id = _id || (0, _getId.getId)();
|
|
72
72
|
return new Promise((resolve, reject) => {
|
|
73
73
|
this.#substrateRequests[id] = {
|
|
74
74
|
...this.signComplete(id, resolve, reject),
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _rxjs = require("rxjs");
|
|
8
|
+
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
9
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
10
|
+
|
|
11
|
+
// WC = WalletConnect
|
|
12
|
+
class WalletConnectRequestHandler {
|
|
13
|
+
#requestService;
|
|
14
|
+
#walletConnectSessionRequests = {};
|
|
15
|
+
connectWCSubject = new _rxjs.BehaviorSubject([]);
|
|
16
|
+
constructor(requestService) {
|
|
17
|
+
this.#requestService = requestService;
|
|
18
|
+
}
|
|
19
|
+
get allConnectWCRequests() {
|
|
20
|
+
return Object.values(this.#walletConnectSessionRequests)
|
|
21
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
22
|
+
.map(_ref => {
|
|
23
|
+
let {
|
|
24
|
+
reject,
|
|
25
|
+
resolve,
|
|
26
|
+
...data
|
|
27
|
+
} = _ref;
|
|
28
|
+
return data;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
get numConnectWCRequests() {
|
|
32
|
+
return Object.keys(this.#walletConnectSessionRequests).length;
|
|
33
|
+
}
|
|
34
|
+
getConnectWCRequest(id) {
|
|
35
|
+
return this.#walletConnectSessionRequests[id];
|
|
36
|
+
}
|
|
37
|
+
updateIconConnectWC(shouldClose) {
|
|
38
|
+
this.connectWCSubject.next(this.allConnectWCRequests);
|
|
39
|
+
this.#requestService.updateIconV2(shouldClose);
|
|
40
|
+
}
|
|
41
|
+
connectWCComplete = id => {
|
|
42
|
+
const complete = shouldClose => {
|
|
43
|
+
delete this.#walletConnectSessionRequests[id];
|
|
44
|
+
this.updateIconConnectWC(shouldClose);
|
|
45
|
+
};
|
|
46
|
+
return {
|
|
47
|
+
reject: () => {
|
|
48
|
+
complete(true);
|
|
49
|
+
},
|
|
50
|
+
resolve: () => {
|
|
51
|
+
complete(true);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
addConnectWCRequest(request) {
|
|
56
|
+
const id = request.id;
|
|
57
|
+
this.#walletConnectSessionRequests[id] = {
|
|
58
|
+
...this.connectWCComplete(id),
|
|
59
|
+
...request
|
|
60
|
+
};
|
|
61
|
+
this.updateIconConnectWC();
|
|
62
|
+
this.#requestService.popupOpen();
|
|
63
|
+
}
|
|
64
|
+
resetWallet() {
|
|
65
|
+
for (const request of Object.values(this.#walletConnectSessionRequests)) {
|
|
66
|
+
request.reject(new Error('Reset wallet'));
|
|
67
|
+
}
|
|
68
|
+
this.connectWCSubject.next([]);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.default = WalletConnectRequestHandler;
|
|
@@ -10,6 +10,7 @@ var _EvmRequestHandler = _interopRequireDefault(require("@subwallet/extension-ba
|
|
|
10
10
|
var _MetadataRequestHandler = _interopRequireDefault(require("@subwallet/extension-base/services/request-service/handler/MetadataRequestHandler"));
|
|
11
11
|
var _PopupHandler = _interopRequireDefault(require("@subwallet/extension-base/services/request-service/handler/PopupHandler"));
|
|
12
12
|
var _SubstrateRequestHandler = _interopRequireDefault(require("@subwallet/extension-base/services/request-service/handler/SubstrateRequestHandler"));
|
|
13
|
+
var _WalletConnectRequestHandler = _interopRequireDefault(require("@subwallet/extension-base/services/request-service/handler/WalletConnectRequestHandler"));
|
|
13
14
|
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
14
15
|
// SPDX-License-Identifier: Apache-2.0
|
|
15
16
|
|
|
@@ -21,6 +22,7 @@ class RequestService {
|
|
|
21
22
|
#authRequestHandler;
|
|
22
23
|
#substrateRequestHandler;
|
|
23
24
|
#evmRequestHandler;
|
|
25
|
+
#walletConnectRequestHandler;
|
|
24
26
|
|
|
25
27
|
// Common
|
|
26
28
|
constructor(chainService, settingService, keyringService) {
|
|
@@ -32,6 +34,7 @@ class RequestService {
|
|
|
32
34
|
this.#authRequestHandler = new _AuthRequestHandler.default(this, this.#chainService, this.keyringService);
|
|
33
35
|
this.#substrateRequestHandler = new _SubstrateRequestHandler.default(this);
|
|
34
36
|
this.#evmRequestHandler = new _EvmRequestHandler.default(this);
|
|
37
|
+
this.#walletConnectRequestHandler = new _WalletConnectRequestHandler.default(this);
|
|
35
38
|
|
|
36
39
|
// Reset icon on start service
|
|
37
40
|
this.updateIconV2();
|
|
@@ -42,9 +45,6 @@ class RequestService {
|
|
|
42
45
|
updateIconV2(shouldClose) {
|
|
43
46
|
this.#popupHandler.updateIconV2(shouldClose);
|
|
44
47
|
}
|
|
45
|
-
stripUrl(url) {
|
|
46
|
-
return this.#authRequestHandler.stripUrl(url);
|
|
47
|
-
}
|
|
48
48
|
getAddressList() {
|
|
49
49
|
let value = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
|
|
50
50
|
const addressList = Object.keys(this.keyringService.accounts);
|
|
@@ -136,8 +136,8 @@ class RequestService {
|
|
|
136
136
|
get allSubstrateRequests() {
|
|
137
137
|
return this.#substrateRequestHandler.allSubstrateRequests;
|
|
138
138
|
}
|
|
139
|
-
sign(url, request, account) {
|
|
140
|
-
return this.#substrateRequestHandler.sign(url, request, account);
|
|
139
|
+
sign(url, request, account, id) {
|
|
140
|
+
return this.#substrateRequestHandler.sign(url, request, account, id);
|
|
141
141
|
}
|
|
142
142
|
get numSubstrateRequests() {
|
|
143
143
|
return this.#substrateRequestHandler.numSubstrateRequests;
|
|
@@ -170,15 +170,33 @@ class RequestService {
|
|
|
170
170
|
return this.#evmRequestHandler.updateConfirmation(id, type, payload, options, validator);
|
|
171
171
|
}
|
|
172
172
|
|
|
173
|
+
// Wallet Connect requests
|
|
174
|
+
getConnectWCRequest(id) {
|
|
175
|
+
return this.#walletConnectRequestHandler.getConnectWCRequest(id);
|
|
176
|
+
}
|
|
177
|
+
get connectWCSubject() {
|
|
178
|
+
return this.#walletConnectRequestHandler.connectWCSubject;
|
|
179
|
+
}
|
|
180
|
+
get allConnectWCRequests() {
|
|
181
|
+
return this.#walletConnectRequestHandler.allConnectWCRequests;
|
|
182
|
+
}
|
|
183
|
+
get numConnectWCRequests() {
|
|
184
|
+
return this.#walletConnectRequestHandler.numConnectWCRequests;
|
|
185
|
+
}
|
|
186
|
+
addConnectWCRequest(request) {
|
|
187
|
+
return this.#walletConnectRequestHandler.addConnectWCRequest(request);
|
|
188
|
+
}
|
|
189
|
+
|
|
173
190
|
// General methods
|
|
174
191
|
get numRequests() {
|
|
175
|
-
return this.numMetaRequests + this.numAuthRequests + this.numSubstrateRequests + this.numEvmRequests;
|
|
192
|
+
return this.numMetaRequests + this.numAuthRequests + this.numSubstrateRequests + this.numEvmRequests + this.numConnectWCRequests;
|
|
176
193
|
}
|
|
177
194
|
resetWallet() {
|
|
178
195
|
this.#authRequestHandler.resetWallet();
|
|
179
196
|
this.#substrateRequestHandler.resetWallet();
|
|
180
197
|
this.#evmRequestHandler.resetWallet();
|
|
181
198
|
this.#metadataRequestHandler.resetWallet();
|
|
199
|
+
this.#walletConnectRequestHandler.resetWallet();
|
|
182
200
|
}
|
|
183
201
|
}
|
|
184
202
|
exports.default = RequestService;
|
|
@@ -9,6 +9,7 @@ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
|
9
9
|
var _databases = _interopRequireDefault(require("@subwallet/extension-base/services/storage-service/databases"));
|
|
10
10
|
var _dbStores = require("@subwallet/extension-base/services/storage-service/db-stores");
|
|
11
11
|
var _ChainStakingMetadata = _interopRequireDefault(require("@subwallet/extension-base/services/storage-service/db-stores/ChainStakingMetadata"));
|
|
12
|
+
var _MantaPay = _interopRequireDefault(require("@subwallet/extension-base/services/storage-service/db-stores/MantaPay"));
|
|
12
13
|
var _NominatorMetadata = _interopRequireDefault(require("@subwallet/extension-base/services/storage-service/db-stores/NominatorMetadata"));
|
|
13
14
|
var _utils = require("@subwallet/extension-base/utils");
|
|
14
15
|
var _util = require("@polkadot/util");
|
|
@@ -39,7 +40,8 @@ class DatabaseService {
|
|
|
39
40
|
asset: new _dbStores.AssetStore(this._db.asset),
|
|
40
41
|
// staking
|
|
41
42
|
chainStakingMetadata: new _ChainStakingMetadata.default(this._db.chainStakingMetadata),
|
|
42
|
-
nominatorMetadata: new _NominatorMetadata.default(this._db.nominatorMetadata)
|
|
43
|
+
nominatorMetadata: new _NominatorMetadata.default(this._db.nominatorMetadata),
|
|
44
|
+
mantaPay: new _MantaPay.default(this._db.mantaPay)
|
|
43
45
|
};
|
|
44
46
|
}
|
|
45
47
|
async updatePriceStore(priceData) {
|
|
@@ -237,5 +239,33 @@ class DatabaseService {
|
|
|
237
239
|
});
|
|
238
240
|
});
|
|
239
241
|
}
|
|
242
|
+
async setMantaPayData(data) {
|
|
243
|
+
await this._db.mantaPay.put(data); // just override if exist
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
async updateMantaPayData(key, data) {
|
|
247
|
+
await this._db.mantaPay.update(key, data); // just override if exist
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
async getMantaPayData(key) {
|
|
251
|
+
return this._db.mantaPay.get({
|
|
252
|
+
key
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
async deleteMantaPayConfig(key) {
|
|
256
|
+
return this.stores.mantaPay.deleteRecord(key);
|
|
257
|
+
}
|
|
258
|
+
subscribeMantaPayConfig(chain, callback) {
|
|
259
|
+
this.stores.mantaPay.subscribeMantaPayConfig(chain).subscribe({
|
|
260
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-argument
|
|
261
|
+
next: data => callback && callback(data)
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
async getMantaPayConfig(chain) {
|
|
265
|
+
return this.stores.mantaPay.getConfig(chain);
|
|
266
|
+
}
|
|
267
|
+
async getMantaPayFirstConfig(chain) {
|
|
268
|
+
return this.stores.mantaPay.getFirstConfig(chain);
|
|
269
|
+
}
|
|
240
270
|
}
|
|
241
271
|
exports.default = DatabaseService;
|
|
@@ -36,6 +36,9 @@ class KoniDatabase extends _dexie.default {
|
|
|
36
36
|
this.conditionalVersion(2, {
|
|
37
37
|
metadata: 'genesisHash, chain'
|
|
38
38
|
});
|
|
39
|
+
this.conditionalVersion(3, {
|
|
40
|
+
mantaPay: 'key, chain'
|
|
41
|
+
});
|
|
39
42
|
}
|
|
40
43
|
conditionalVersion(version, schema, upgrade) {
|
|
41
44
|
if (this.schemaVersion != null && this.schemaVersion < version) {
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.default = void 0;
|
|
8
|
+
var _BaseStore = _interopRequireDefault(require("@subwallet/extension-base/services/storage-service/db-stores/BaseStore"));
|
|
9
|
+
var _dexie = require("dexie");
|
|
10
|
+
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
11
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
12
|
+
|
|
13
|
+
class MantaPayStore extends _BaseStore.default {
|
|
14
|
+
async getAll() {
|
|
15
|
+
return this.table.toArray();
|
|
16
|
+
}
|
|
17
|
+
subscribeMantaPayConfig(chain) {
|
|
18
|
+
return (0, _dexie.liveQuery)(
|
|
19
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-return
|
|
20
|
+
() => this.table.where({
|
|
21
|
+
chain
|
|
22
|
+
}).filter(data => (data === null || data === void 0 ? void 0 : data.key) && (data === null || data === void 0 ? void 0 : data.key.startsWith('config'))).toArray());
|
|
23
|
+
}
|
|
24
|
+
getConfig(chain) {
|
|
25
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-return
|
|
26
|
+
return this.table.where({
|
|
27
|
+
chain
|
|
28
|
+
}).filter(data => (data === null || data === void 0 ? void 0 : data.key) && (data === null || data === void 0 ? void 0 : data.key.startsWith('config'))).toArray();
|
|
29
|
+
}
|
|
30
|
+
getFirstConfig(chain) {
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-return
|
|
32
|
+
return this.table.where({
|
|
33
|
+
chain
|
|
34
|
+
}).filter(data => (data === null || data === void 0 ? void 0 : data.key) && (data === null || data === void 0 ? void 0 : data.key.startsWith('config'))).first();
|
|
35
|
+
}
|
|
36
|
+
deleteRecord(key) {
|
|
37
|
+
return this.table.where('key').equals(key).delete();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
exports.default = MantaPayStore;
|
|
@@ -10,8 +10,9 @@ var _KoniTypes = require("@subwallet/extension-base/background/KoniTypes");
|
|
|
10
10
|
|
|
11
11
|
let transactionCount = 0;
|
|
12
12
|
let validationCount = 0;
|
|
13
|
-
const getTransactionId = (chainType, chain, isInternal)
|
|
14
|
-
|
|
13
|
+
const getTransactionId = function (chainType, chain, isInternal) {
|
|
14
|
+
let isWalletConnect = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
15
|
+
return `${isInternal ? 'internal' : !isWalletConnect ? 'external' : 'wallet-connect'}.${chainType}.${chain}.${Date.now()}.${++transactionCount}`;
|
|
15
16
|
};
|
|
16
17
|
exports.getTransactionId = getTransactionId;
|
|
17
18
|
const getValidationId = (chainType, chain) => {
|
|
@@ -17,6 +17,7 @@ var _constants4 = require("@subwallet/extension-base/services/transaction-servic
|
|
|
17
17
|
var _eventParser = require("@subwallet/extension-base/services/transaction-service/event-parser");
|
|
18
18
|
var _helpers = require("@subwallet/extension-base/services/transaction-service/helpers");
|
|
19
19
|
var _utils2 = require("@subwallet/extension-base/services/transaction-service/utils");
|
|
20
|
+
var _helpers2 = require("@subwallet/extension-base/services/wallet-connect-service/helpers");
|
|
20
21
|
var _eth = require("@subwallet/extension-base/utils/eth");
|
|
21
22
|
var _mergeTransactionAndSignature = require("@subwallet/extension-base/utils/eth/mergeTransactionAndSignature");
|
|
22
23
|
var _parseTransaction = require("@subwallet/extension-base/utils/eth/parseTransaction");
|
|
@@ -177,7 +178,7 @@ class TransactionService {
|
|
|
177
178
|
}
|
|
178
179
|
fillTransactionDefaultInfo(transaction) {
|
|
179
180
|
const isInternal = !transaction.url;
|
|
180
|
-
const transactionId = (0, _helpers.getTransactionId)(transaction.chainType, transaction.chain, isInternal);
|
|
181
|
+
const transactionId = (0, _helpers.getTransactionId)(transaction.chainType, transaction.chain, isInternal, (0, _helpers2.isWalletConnectRequest)(transaction.id));
|
|
181
182
|
return {
|
|
182
183
|
...transaction,
|
|
183
184
|
createdAt: new Date().getTime(),
|