@subwallet/extension-base 1.3.51-0 → 1.3.53-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/constants/environment.js +3 -1
- package/cjs/koni/background/handlers/State.js +1 -5
- package/cjs/packageInfo.js +1 -1
- package/cjs/services/balance-service/index.js +3 -4
- package/cjs/services/balance-service/transfer/cardano-transfer.js +43 -11
- package/cjs/services/balance-service/transfer/xcm/acrossBridge/index.js +13 -92
- package/cjs/services/balance-service/transfer/xcm/index.js +12 -4
- package/cjs/services/chain-service/utils/patch.js +3 -2
- package/cjs/services/earning-service/handlers/native-staking/dtao.js +28 -301
- package/cjs/services/earning-service/handlers/native-staking/relay-chain.js +4 -4
- package/cjs/services/earning-service/handlers/native-staking/tao.js +174 -148
- package/cjs/services/earning-service/handlers/nomination-pool/index.js +11 -5
- package/cjs/services/earning-service/service.js +5 -2
- package/cjs/services/fee-service/utils/tokenPayFee.js +17 -13
- package/cjs/services/keyring-service/context/handlers/Json.js +28 -3
- package/cjs/services/price-service/coingecko.js +3 -3
- package/cjs/services/swap-service/handler/hydradx-handler.js +19 -13
- package/cjs/services/swap-service/index.js +8 -5
- package/cjs/services/transaction-service/utils.js +31 -22
- package/cjs/services/wallet-connect-service/constants.js +6 -2
- package/cjs/services/wallet-connect-service/index.js +62 -45
- package/cjs/utils/index.js +12 -0
- package/cjs/utils/setup-api-sdk.js +27 -0
- package/constants/environment.d.ts +1 -0
- package/constants/environment.js +1 -0
- package/koni/background/handlers/State.js +3 -7
- package/package.json +34 -29
- package/packageInfo.js +1 -1
- package/services/balance-service/index.js +3 -4
- package/services/balance-service/transfer/cardano-transfer.js +42 -10
- package/services/balance-service/transfer/xcm/acrossBridge/index.js +14 -93
- package/services/balance-service/transfer/xcm/index.js +12 -4
- package/services/chain-service/utils/patch.d.ts +1 -0
- package/services/chain-service/utils/patch.js +1 -1
- package/services/earning-service/handlers/native-staking/dtao.d.ts +4 -36
- package/services/earning-service/handlers/native-staking/dtao.js +24 -298
- package/services/earning-service/handlers/native-staking/relay-chain.d.ts +1 -2
- package/services/earning-service/handlers/native-staking/relay-chain.js +4 -4
- package/services/earning-service/handlers/native-staking/tao.d.ts +25 -5
- package/services/earning-service/handlers/native-staking/tao.js +169 -149
- package/services/earning-service/handlers/nomination-pool/index.d.ts +1 -2
- package/services/earning-service/handlers/nomination-pool/index.js +11 -5
- package/services/earning-service/service.d.ts +1 -0
- package/services/earning-service/service.js +4 -2
- package/services/fee-service/utils/tokenPayFee.js +17 -13
- package/services/keyring-service/context/handlers/Json.js +28 -3
- package/services/price-service/coingecko.js +2 -3
- package/services/swap-service/handler/hydradx-handler.js +19 -13
- package/services/swap-service/index.js +8 -5
- package/services/transaction-service/utils.d.ts +0 -1
- package/services/transaction-service/utils.js +31 -21
- package/services/wallet-connect-service/constants.d.ts +2 -0
- package/services/wallet-connect-service/constants.js +3 -1
- package/services/wallet-connect-service/index.js +50 -33
- package/types/swap/index.d.ts +1 -1
- package/types/yield/info/chain/info.d.ts +1 -0
- package/utils/index.d.ts +1 -0
- package/utils/index.js +2 -1
- package/utils/setup-api-sdk.d.ts +1 -0
- package/utils/setup-api-sdk.js +20 -0
|
@@ -162,7 +162,17 @@ class AccountJsonHandler extends _Base.AccountBaseHandler {
|
|
|
162
162
|
accountProxies,
|
|
163
163
|
modifyPairs
|
|
164
164
|
} = json;
|
|
165
|
-
const pairs = jsons.
|
|
165
|
+
const pairs = jsons.reduce((rs, pair) => {
|
|
166
|
+
try {
|
|
167
|
+
rs.push(_uiKeyring.keyring.createFromJson(pair));
|
|
168
|
+
} catch (e) {
|
|
169
|
+
console.error(e);
|
|
170
|
+
}
|
|
171
|
+
return rs;
|
|
172
|
+
}, []);
|
|
173
|
+
if (!(pairs !== null && pairs !== void 0 && pairs.length)) {
|
|
174
|
+
throw new Error((0, _i18next.t)('No valid accounts found to import'));
|
|
175
|
+
}
|
|
166
176
|
const accountProxyMap = (0, _utils.combineAccountsWithKeyPair)(pairs, modifyPairs, accountProxies);
|
|
167
177
|
const result = Object.values(accountProxyMap).map(proxy => {
|
|
168
178
|
const rs = {
|
|
@@ -205,9 +215,24 @@ class AccountJsonHandler extends _Base.AccountBaseHandler {
|
|
|
205
215
|
try {
|
|
206
216
|
const {
|
|
207
217
|
accountProxies,
|
|
208
|
-
modifyPairs
|
|
218
|
+
modifyPairs: modifyPairsRestored
|
|
209
219
|
} = file;
|
|
210
|
-
const
|
|
220
|
+
const modifyPairs = {};
|
|
221
|
+
const pairs = jsons.reduce((rs, pairJson) => {
|
|
222
|
+
try {
|
|
223
|
+
const pair = _uiKeyring.keyring.createFromJson(pairJson);
|
|
224
|
+
if (modifyPairsRestored !== null && modifyPairsRestored !== void 0 && modifyPairsRestored[pair.address]) {
|
|
225
|
+
modifyPairs[pair.address] = modifyPairsRestored[pair.address];
|
|
226
|
+
}
|
|
227
|
+
rs.push(pair);
|
|
228
|
+
} catch (e) {
|
|
229
|
+
console.error(e);
|
|
230
|
+
}
|
|
231
|
+
return rs;
|
|
232
|
+
}, []);
|
|
233
|
+
if (!(pairs !== null && pairs !== void 0 && pairs.length)) {
|
|
234
|
+
throw new Error((0, _i18next.t)('No valid accounts found to import'));
|
|
235
|
+
}
|
|
211
236
|
const accountProxyMap = (0, _utils.combineAccountsWithKeyPair)(pairs, modifyPairs, accountProxies);
|
|
212
237
|
const rawProxyIds = _proxyIds && _proxyIds.length ? _proxyIds : Object.keys(accountProxyMap);
|
|
213
238
|
let _exists;
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
3
4
|
Object.defineProperty(exports, "__esModule", {
|
|
4
5
|
value: true
|
|
5
6
|
});
|
|
6
7
|
exports.getPriceMap = exports.getHistoryPrice = exports.getExchangeRateMap = void 0;
|
|
7
8
|
var _constants = require("@subwallet/extension-base/constants");
|
|
8
9
|
var _staticData = require("@subwallet/extension-base/utils/staticData");
|
|
9
|
-
var
|
|
10
|
+
var _subwalletServicesSdk = _interopRequireDefault(require("@subwallet-monorepos/subwallet-services-sdk"));
|
|
10
11
|
var _util = require("@polkadot/util");
|
|
11
12
|
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
12
13
|
// SPDX-License-Identifier: Apache-2.0
|
|
@@ -155,8 +156,7 @@ const getPriceMap = async function (priceIds) {
|
|
|
155
156
|
exports.getPriceMap = getPriceMap;
|
|
156
157
|
const getHistoryPrice = async (priceId, type) => {
|
|
157
158
|
try {
|
|
158
|
-
|
|
159
|
-
const response = await ((_subwalletApiSdk$pric = _subwalletApiSdk.subwalletApiSdk.priceHistoryApi) === null || _subwalletApiSdk$pric === void 0 ? void 0 : _subwalletApiSdk$pric.getPriceHistory(priceId, type));
|
|
159
|
+
const response = await _subwalletServicesSdk.default.priceHistoryApi.getPriceHistory(priceId, type);
|
|
160
160
|
if (response) {
|
|
161
161
|
return response;
|
|
162
162
|
}
|
|
@@ -16,7 +16,7 @@ var _types = require("@subwallet/extension-base/types");
|
|
|
16
16
|
var _serviceBase = require("@subwallet/extension-base/types/service-base");
|
|
17
17
|
var _swap = require("@subwallet/extension-base/types/swap");
|
|
18
18
|
var _utils3 = require("@subwallet/extension-base/utils");
|
|
19
|
-
var
|
|
19
|
+
var _subwalletServicesSdk = _interopRequireDefault(require("@subwallet-monorepos/subwallet-services-sdk"));
|
|
20
20
|
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
21
21
|
var _util = require("@polkadot/util");
|
|
22
22
|
// Copyright 2019-2022 @subwallet/extension-base
|
|
@@ -145,21 +145,27 @@ class HydradxHandler {
|
|
|
145
145
|
let bnSendingValue = (0, _bignumber.default)(fromAmount);
|
|
146
146
|
let bnExpectedReceive = (0, _bignumber.default)(selectedQuote.toAmount);
|
|
147
147
|
if (needModifyData) {
|
|
148
|
-
var
|
|
148
|
+
var _quotes;
|
|
149
149
|
// override info if xcm-swap-xcm
|
|
150
150
|
bnSendingValue = bnSendingValue.multipliedBy(_utils2.DEFAULT_EXCESS_AMOUNT_WEIGHT);
|
|
151
151
|
bnExpectedReceive = bnExpectedReceive.multipliedBy(_utils2.DEFAULT_EXCESS_AMOUNT_WEIGHT);
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
152
|
+
let quotes = []; // todo
|
|
153
|
+
|
|
154
|
+
try {
|
|
155
|
+
quotes = await _subwalletServicesSdk.default.swapApi.fetchSwapQuoteData({
|
|
156
|
+
address: sender,
|
|
157
|
+
pair: {
|
|
158
|
+
from: swapPairInfo.from,
|
|
159
|
+
to: swapPairInfo.to,
|
|
160
|
+
slug: swapPairInfo.slug
|
|
161
|
+
},
|
|
162
|
+
fromAmount: bnSendingValue.toFixed(0, 1),
|
|
163
|
+
slippage: params.request.slippage
|
|
164
|
+
});
|
|
165
|
+
} catch (error) {
|
|
166
|
+
throw new Error(`Failed to fetch swap quote: ${error.message}`);
|
|
167
|
+
}
|
|
168
|
+
const quoteAskResponse = (_quotes = quotes) === null || _quotes === void 0 ? void 0 : _quotes.find(quote => quote.provider === this.providerSlug);
|
|
163
169
|
if (!quoteAskResponse || !quoteAskResponse.quote) {
|
|
164
170
|
return Promise.resolve(undefined);
|
|
165
171
|
}
|
|
@@ -21,7 +21,7 @@ var _types3 = require("@subwallet/extension-base/types");
|
|
|
21
21
|
var _serviceBase = require("@subwallet/extension-base/types/service-base");
|
|
22
22
|
var _swap = require("@subwallet/extension-base/types/swap");
|
|
23
23
|
var _utils3 = require("@subwallet/extension-base/utils");
|
|
24
|
-
var
|
|
24
|
+
var _subwalletServicesSdk = _interopRequireDefault(require("@subwallet-monorepos/subwallet-services-sdk"));
|
|
25
25
|
var _bignumber = _interopRequireDefault(require("bignumber.js"));
|
|
26
26
|
var _i18next = require("i18next");
|
|
27
27
|
var _rxjs = require("rxjs");
|
|
@@ -43,7 +43,6 @@ class SwapService {
|
|
|
43
43
|
this.chainService = state.chainService;
|
|
44
44
|
}
|
|
45
45
|
async askProvidersForQuote(_request) {
|
|
46
|
-
var _subwalletApiSdk$swap;
|
|
47
46
|
const availableQuotes = [];
|
|
48
47
|
|
|
49
48
|
// hotfix // todo: remove later
|
|
@@ -51,7 +50,7 @@ class SwapService {
|
|
|
51
50
|
..._request,
|
|
52
51
|
isSupportKyberVersion: true
|
|
53
52
|
};
|
|
54
|
-
const quotes = await
|
|
53
|
+
const quotes = await _subwalletServicesSdk.default.swapApi.fetchSwapQuoteData(request);
|
|
55
54
|
if (Array.isArray(quotes)) {
|
|
56
55
|
quotes.forEach(quoteData => {
|
|
57
56
|
if (!_swap._SUPPORTED_SWAP_PROVIDERS.includes(quoteData.provider)) {
|
|
@@ -272,8 +271,12 @@ class SwapService {
|
|
|
272
271
|
return [[], undefined];
|
|
273
272
|
}
|
|
274
273
|
async getLatestQuoteFromSwapRequest(request) {
|
|
275
|
-
|
|
276
|
-
|
|
274
|
+
let availablePath;
|
|
275
|
+
try {
|
|
276
|
+
availablePath = await _subwalletServicesSdk.default.swapApi.findAvailablePath(request);
|
|
277
|
+
} catch (e) {
|
|
278
|
+
console.log('Error findAvailablePath', e);
|
|
279
|
+
}
|
|
277
280
|
if (!availablePath) {
|
|
278
281
|
return {
|
|
279
282
|
path: [],
|
|
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.getChainflipExplorerLink = getChainflipExplorerLink;
|
|
7
7
|
exports.getExplorerLink = getExplorerLink;
|
|
8
8
|
exports.getSimpleSwapExplorerLink = getSimpleSwapExplorerLink;
|
|
9
|
-
exports.getTransactionId = getTransactionId;
|
|
10
9
|
exports.parseTransactionData = parseTransactionData;
|
|
11
10
|
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
12
11
|
var _utils2 = require("@subwallet/extension-base/services/swap-service/utils");
|
|
@@ -52,12 +51,18 @@ function getBlockExplorerAccountRoute(explorerLink) {
|
|
|
52
51
|
if (explorerLink.includes('devnet-explorer.mosaicchain.io')) {
|
|
53
52
|
return 'accounts';
|
|
54
53
|
}
|
|
54
|
+
if (explorerLink.includes('pdexmon.com')) {
|
|
55
|
+
return 'holders';
|
|
56
|
+
}
|
|
55
57
|
return 'address';
|
|
56
58
|
}
|
|
57
59
|
function getBlockExplorerTxRoute(chainInfo) {
|
|
58
60
|
if ((0, _utils._isPureEvmChain)(chainInfo) || (0, _utils._isPureBitcoinChain)(chainInfo)) {
|
|
59
61
|
return 'tx';
|
|
60
62
|
}
|
|
63
|
+
if (['moonbeam'].includes(chainInfo.slug)) {
|
|
64
|
+
return 'tx';
|
|
65
|
+
}
|
|
61
66
|
if ((0, _utils._isPureCardanoChain)(chainInfo) || (0, _utils._isPureTonChain)(chainInfo)) {
|
|
62
67
|
return 'transaction';
|
|
63
68
|
}
|
|
@@ -67,33 +72,38 @@ function getBlockExplorerTxRoute(chainInfo) {
|
|
|
67
72
|
if (['gen6_public'].includes(chainInfo.slug)) {
|
|
68
73
|
return '#/extrinsics';
|
|
69
74
|
}
|
|
70
|
-
if (['mosaicTest'].includes(chainInfo.slug)) {
|
|
75
|
+
if (['mosaicTest', 'polkadex'].includes(chainInfo.slug)) {
|
|
71
76
|
return 'transactions';
|
|
72
77
|
}
|
|
78
|
+
if (['autonomys'].includes(chainInfo.slug)) {
|
|
79
|
+
return 'extrinsics';
|
|
80
|
+
}
|
|
73
81
|
const explorerLink = (0, _utils._getBlockExplorerFromChain)(chainInfo);
|
|
74
82
|
if (explorerLink && explorerLink.includes('statescan.io')) {
|
|
75
83
|
return '#/extrinsics';
|
|
76
84
|
}
|
|
77
85
|
return 'extrinsic';
|
|
78
86
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
87
|
+
|
|
88
|
+
// export function getTransactionId (value: string): Promise<string> {
|
|
89
|
+
// const query = `
|
|
90
|
+
// query ExtrinsicQuery {
|
|
91
|
+
// extrinsics(where: {hash_eq: ${value}}, limit: 1) {
|
|
92
|
+
// id
|
|
93
|
+
// }
|
|
94
|
+
// }`;
|
|
95
|
+
//
|
|
96
|
+
// const apiUrl = 'https://archive-explorer.truth-network.io/graphql';
|
|
97
|
+
//
|
|
98
|
+
// return fetch(apiUrl, {
|
|
99
|
+
// method: 'POST',
|
|
100
|
+
// headers: { 'Content-Type': 'application/json' },
|
|
101
|
+
// body: JSON.stringify({ query })
|
|
102
|
+
// })
|
|
103
|
+
// .then((response) => response.json())
|
|
104
|
+
// .then((result: SWApiResponse<ExtrinsicsDataResponse>) => result.data.extrinsics[0].id);
|
|
105
|
+
// }
|
|
106
|
+
|
|
97
107
|
function getExplorerLink(chainInfo, value, type) {
|
|
98
108
|
const explorerLink = (0, _utils._getBlockExplorerFromChain)(chainInfo);
|
|
99
109
|
if (explorerLink && type === 'account') {
|
|
@@ -129,6 +139,5 @@ function getChainflipExplorerLink(data, chainInfo) {
|
|
|
129
139
|
return `${chainflipDomain}/channels/${data.depositChannelId}`;
|
|
130
140
|
}
|
|
131
141
|
function getSimpleSwapExplorerLink(data) {
|
|
132
|
-
|
|
133
|
-
return `${simpleswapDomain}/exchange?id=${data.id}`;
|
|
142
|
+
return `${_utils2.SIMPLE_SWAP_EXPLORER}/exchange?id=${data.id}`;
|
|
134
143
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.WALLET_CONNECT_SUPPORT_NAMESPACES = exports.WALLET_CONNECT_SUPPORTED_METHODS = exports.WALLET_CONNECT_REQUEST_KEY = exports.WALLET_CONNECT_POLKADOT_NAMESPACE = exports.WALLET_CONNECT_EIP155_NAMESPACE = exports.RELAY_URL = exports.PROJECT_ID_MOBILE = exports.PROJECT_ID_EXTENSION = exports.DEFAULT_WALLET_CONNECT_OPTIONS = exports.ALL_WALLET_CONNECT_EVENT = void 0;
|
|
6
|
+
exports.WALLET_CONNECT_SUPPORT_NAMESPACES = exports.WALLET_CONNECT_SUPPORTED_METHODS = exports.WALLET_CONNECT_SESSION_TIMEOUT = exports.WALLET_CONNECT_REQUEST_KEY = exports.WALLET_CONNECT_POLKADOT_NAMESPACE = exports.WALLET_CONNECT_EIP155_NAMESPACE = exports.RELAY_URL = exports.RELAY_FALLBACK_URL = exports.PROJECT_ID_MOBILE = exports.PROJECT_ID_EXTENSION = exports.DEFAULT_WALLET_CONNECT_OPTIONS = exports.ALL_WALLET_CONNECT_EVENT = void 0;
|
|
7
7
|
var _types = require("@subwallet/extension-base/services/wallet-connect-service/types");
|
|
8
8
|
var _utils = require("@subwallet/extension-base/utils");
|
|
9
9
|
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
@@ -15,6 +15,8 @@ const PROJECT_ID_MOBILE = '6da34c0b48164d27681924dd9a46d6be';
|
|
|
15
15
|
exports.PROJECT_ID_MOBILE = PROJECT_ID_MOBILE;
|
|
16
16
|
const RELAY_URL = 'wss://relay.walletconnect.com';
|
|
17
17
|
exports.RELAY_URL = RELAY_URL;
|
|
18
|
+
const RELAY_FALLBACK_URL = 'wss://relay.walletconnect.org';
|
|
19
|
+
exports.RELAY_FALLBACK_URL = RELAY_FALLBACK_URL;
|
|
18
20
|
const DEFAULT_WALLET_CONNECT_OPTIONS = {
|
|
19
21
|
logger: 'error',
|
|
20
22
|
projectId: _utils.targetIsMobile ? PROJECT_ID_MOBILE : PROJECT_ID_EXTENSION,
|
|
@@ -38,4 +40,6 @@ exports.WALLET_CONNECT_EIP155_NAMESPACE = WALLET_CONNECT_EIP155_NAMESPACE;
|
|
|
38
40
|
const WALLET_CONNECT_POLKADOT_NAMESPACE = 'polkadot';
|
|
39
41
|
exports.WALLET_CONNECT_POLKADOT_NAMESPACE = WALLET_CONNECT_POLKADOT_NAMESPACE;
|
|
40
42
|
const WALLET_CONNECT_SUPPORT_NAMESPACES = [WALLET_CONNECT_EIP155_NAMESPACE, WALLET_CONNECT_POLKADOT_NAMESPACE];
|
|
41
|
-
exports.WALLET_CONNECT_SUPPORT_NAMESPACES = WALLET_CONNECT_SUPPORT_NAMESPACES;
|
|
43
|
+
exports.WALLET_CONNECT_SUPPORT_NAMESPACES = WALLET_CONNECT_SUPPORT_NAMESPACES;
|
|
44
|
+
const WALLET_CONNECT_SESSION_TIMEOUT = 20000; // 20 seconds
|
|
45
|
+
exports.WALLET_CONNECT_SESSION_TIMEOUT = WALLET_CONNECT_SESSION_TIMEOUT;
|
|
@@ -10,8 +10,9 @@ var _classPrivateFieldLooseKey2 = _interopRequireDefault(require("@babel/runtime
|
|
|
10
10
|
var _utils = require("@json-rpc-tools/utils");
|
|
11
11
|
var _Eip155RequestHandler = _interopRequireDefault(require("@subwallet/extension-base/services/wallet-connect-service/handler/Eip155RequestHandler"));
|
|
12
12
|
var _storage = require("@subwallet/extension-base/storage");
|
|
13
|
+
var _utils2 = require("@subwallet/extension-base/utils");
|
|
13
14
|
var _signClient = _interopRequireDefault(require("@walletconnect/sign-client"));
|
|
14
|
-
var
|
|
15
|
+
var _utils3 = require("@walletconnect/utils");
|
|
15
16
|
var _rxjs = require("rxjs");
|
|
16
17
|
var _PolkadotRequestHandler = _interopRequireDefault(require("./handler/PolkadotRequestHandler"));
|
|
17
18
|
var _constants = require("./constants");
|
|
@@ -130,7 +131,19 @@ class WalletConnectService {
|
|
|
130
131
|
async initClient(force) {
|
|
131
132
|
(0, _classPrivateFieldLooseBase2.default)(this, _removeListener)[_removeListener]();
|
|
132
133
|
if (force || (await this.haveData())) {
|
|
133
|
-
|
|
134
|
+
try {
|
|
135
|
+
(0, _classPrivateFieldLooseBase2.default)(this, _client)[_client] = await _signClient.default.init((0, _classPrivateFieldLooseBase2.default)(this, _option)[_option]);
|
|
136
|
+
} catch (e) {
|
|
137
|
+
if ((0, _classPrivateFieldLooseBase2.default)(this, _option)[_option].relayUrl === _constants.RELAY_URL) {
|
|
138
|
+
(0, _classPrivateFieldLooseBase2.default)(this, _option)[_option] = {
|
|
139
|
+
...(0, _classPrivateFieldLooseBase2.default)(this, _option)[_option],
|
|
140
|
+
relayUrl: _constants.RELAY_FALLBACK_URL
|
|
141
|
+
};
|
|
142
|
+
(0, _classPrivateFieldLooseBase2.default)(this, _client)[_client] = await _signClient.default.init((0, _classPrivateFieldLooseBase2.default)(this, _option)[_option]);
|
|
143
|
+
} else {
|
|
144
|
+
throw e;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
134
147
|
}
|
|
135
148
|
(0, _classPrivateFieldLooseBase2.default)(this, _updateSessions)[_updateSessions]();
|
|
136
149
|
(0, _classPrivateFieldLooseBase2.default)(this, _createListener)[_createListener]();
|
|
@@ -143,7 +156,7 @@ class WalletConnectService {
|
|
|
143
156
|
var _classPrivateFieldLoo2;
|
|
144
157
|
const session = (_classPrivateFieldLoo2 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo2 === void 0 ? void 0 : _classPrivateFieldLoo2.session.get(topic);
|
|
145
158
|
if (!session) {
|
|
146
|
-
throw new Error((0,
|
|
159
|
+
throw new Error((0, _utils3.getInternalError)('MISMATCHED_TOPIC').message);
|
|
147
160
|
} else {
|
|
148
161
|
return session;
|
|
149
162
|
}
|
|
@@ -153,17 +166,21 @@ class WalletConnectService {
|
|
|
153
166
|
await this.initClient();
|
|
154
167
|
}
|
|
155
168
|
async connect(uri) {
|
|
156
|
-
var _classPrivateFieldLoo3;
|
|
157
|
-
if (!(await this.haveData())) {
|
|
169
|
+
var _classPrivateFieldLoo3, _classPrivateFieldLoo4;
|
|
170
|
+
if (!(await this.haveData()) || !((_classPrivateFieldLoo3 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) !== null && _classPrivateFieldLoo3 !== void 0 && _classPrivateFieldLoo3.core.relayer.connected)) {
|
|
158
171
|
await this.initClient(true);
|
|
159
172
|
}
|
|
160
173
|
(0, _classPrivateFieldLooseBase2.default)(this, _checkClient)[_checkClient]();
|
|
161
|
-
|
|
174
|
+
|
|
175
|
+
// The purpose of designing a timeout for pairing is to prevent the promise from not being resolved if there are issues during the pairing process.
|
|
176
|
+
await Promise.race([(_classPrivateFieldLoo4 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo4 === void 0 ? void 0 : _classPrivateFieldLoo4.pair({
|
|
162
177
|
uri
|
|
163
|
-
}))
|
|
178
|
+
}), (0, _utils2.wait)(_constants.WALLET_CONNECT_SESSION_TIMEOUT).then(() => {
|
|
179
|
+
throw new Error((0, _utils3.getInternalError)('EXPIRED').message);
|
|
180
|
+
})]);
|
|
164
181
|
}
|
|
165
182
|
async approveSession(result) {
|
|
166
|
-
var
|
|
183
|
+
var _classPrivateFieldLoo5;
|
|
167
184
|
(0, _classPrivateFieldLooseBase2.default)(this, _checkClient)[_checkClient]();
|
|
168
185
|
Object.entries(result.namespaces).forEach(_ref3 => {
|
|
169
186
|
let [namespace, {
|
|
@@ -172,34 +189,34 @@ class WalletConnectService {
|
|
|
172
189
|
methods = [...methods, ...this.findMethodsMissing(_constants.WALLET_CONNECT_EIP155_NAMESPACE === namespace ? methodEVMRequire : methodDOTRequire, methods)];
|
|
173
190
|
result.namespaces[namespace].methods = methods;
|
|
174
191
|
});
|
|
175
|
-
await ((
|
|
192
|
+
await ((_classPrivateFieldLoo5 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo5 === void 0 ? void 0 : _classPrivateFieldLoo5.approve(result));
|
|
176
193
|
(0, _classPrivateFieldLooseBase2.default)(this, _updateSessions)[_updateSessions]();
|
|
177
194
|
}
|
|
178
195
|
async rejectSession(id) {
|
|
179
|
-
var
|
|
196
|
+
var _classPrivateFieldLoo6;
|
|
180
197
|
(0, _classPrivateFieldLooseBase2.default)(this, _checkClient)[_checkClient]();
|
|
181
|
-
await ((
|
|
198
|
+
await ((_classPrivateFieldLoo6 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo6 === void 0 ? void 0 : _classPrivateFieldLoo6.reject({
|
|
182
199
|
id: id,
|
|
183
|
-
reason: (0,
|
|
200
|
+
reason: (0, _utils3.getSdkError)('USER_REJECTED')
|
|
184
201
|
}));
|
|
185
202
|
}
|
|
186
203
|
async responseRequest(response) {
|
|
187
|
-
var
|
|
204
|
+
var _classPrivateFieldLoo7;
|
|
188
205
|
(0, _classPrivateFieldLooseBase2.default)(this, _checkClient)[_checkClient]();
|
|
189
|
-
await ((
|
|
206
|
+
await ((_classPrivateFieldLoo7 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo7 === void 0 ? void 0 : _classPrivateFieldLoo7.respond(response));
|
|
190
207
|
}
|
|
191
208
|
async resetWallet(resetAll) {
|
|
192
|
-
var
|
|
209
|
+
var _classPrivateFieldLoo8, _classPrivateFieldLoo10, _classPrivateFieldLoo12;
|
|
193
210
|
(0, _classPrivateFieldLooseBase2.default)(this, _removeListener)[_removeListener]();
|
|
194
211
|
|
|
195
212
|
// Disconnect session
|
|
196
|
-
const sessions = ((
|
|
213
|
+
const sessions = ((_classPrivateFieldLoo8 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo8 === void 0 ? void 0 : _classPrivateFieldLoo8.session.values) || [];
|
|
197
214
|
for (const session of sessions) {
|
|
198
215
|
try {
|
|
199
|
-
var
|
|
200
|
-
await ((
|
|
216
|
+
var _classPrivateFieldLoo9;
|
|
217
|
+
await ((_classPrivateFieldLoo9 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo9 === void 0 ? void 0 : _classPrivateFieldLoo9.disconnect({
|
|
201
218
|
topic: session.topic,
|
|
202
|
-
reason: (0,
|
|
219
|
+
reason: (0, _utils3.getSdkError)('USER_DISCONNECTED')
|
|
203
220
|
}));
|
|
204
221
|
} catch (e) {
|
|
205
222
|
console.error(e);
|
|
@@ -207,24 +224,24 @@ class WalletConnectService {
|
|
|
207
224
|
}
|
|
208
225
|
|
|
209
226
|
// Disconnect pair
|
|
210
|
-
const pairs = ((
|
|
227
|
+
const pairs = ((_classPrivateFieldLoo10 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo10 === void 0 ? void 0 : _classPrivateFieldLoo10.pairing.values) || [];
|
|
211
228
|
for (const pair of pairs) {
|
|
212
229
|
try {
|
|
213
|
-
var
|
|
214
|
-
await ((
|
|
230
|
+
var _classPrivateFieldLoo11;
|
|
231
|
+
await ((_classPrivateFieldLoo11 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo11 === void 0 ? void 0 : _classPrivateFieldLoo11.disconnect({
|
|
215
232
|
topic: pair.topic,
|
|
216
|
-
reason: (0,
|
|
233
|
+
reason: (0, _utils3.getSdkError)('USER_DISCONNECTED')
|
|
217
234
|
}));
|
|
218
235
|
} catch (e) {
|
|
219
236
|
console.error(e);
|
|
220
237
|
}
|
|
221
238
|
}
|
|
222
|
-
const keys = (await ((
|
|
239
|
+
const keys = (await ((_classPrivateFieldLoo12 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo12 === void 0 ? void 0 : _classPrivateFieldLoo12.core.storage.getKeys())) || [];
|
|
223
240
|
const deleteKeys = resetAll ? keys : keys.filter(key => key.startsWith('wc@'));
|
|
224
241
|
for (const key of deleteKeys) {
|
|
225
242
|
try {
|
|
226
|
-
var
|
|
227
|
-
await ((
|
|
243
|
+
var _classPrivateFieldLoo13;
|
|
244
|
+
await ((_classPrivateFieldLoo13 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo13 === void 0 ? void 0 : _classPrivateFieldLoo13.core.storage.removeItem(key));
|
|
228
245
|
} catch (e) {
|
|
229
246
|
console.error(e);
|
|
230
247
|
}
|
|
@@ -233,10 +250,10 @@ class WalletConnectService {
|
|
|
233
250
|
(0, _classPrivateFieldLooseBase2.default)(this, _updateSessions)[_updateSessions]();
|
|
234
251
|
}
|
|
235
252
|
async disconnect(topic) {
|
|
236
|
-
var
|
|
237
|
-
await ((
|
|
253
|
+
var _classPrivateFieldLoo14;
|
|
254
|
+
await ((_classPrivateFieldLoo14 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo14 === void 0 ? void 0 : _classPrivateFieldLoo14.disconnect({
|
|
238
255
|
topic: topic,
|
|
239
|
-
reason: (0,
|
|
256
|
+
reason: (0, _utils3.getSdkError)('USER_DISCONNECTED')
|
|
240
257
|
}));
|
|
241
258
|
(0, _classPrivateFieldLooseBase2.default)(this, _updateSessions)[_updateSessions]();
|
|
242
259
|
}
|
|
@@ -279,19 +296,19 @@ function _onSessionRequest2(requestEvent) {
|
|
|
279
296
|
const chainInfoMap = (0, _classPrivateFieldLooseBase2.default)(this, _koniState)[_koniState].getChainInfoMap();
|
|
280
297
|
const [requestNamespace] = chainId.split(':');
|
|
281
298
|
if (!namespaces.includes(requestNamespace)) {
|
|
282
|
-
throw Error((0,
|
|
299
|
+
throw Error((0, _utils3.getSdkError)('UNSUPPORTED_NAMESPACE_KEY').message);
|
|
283
300
|
}
|
|
284
301
|
if (!chains.includes(chainId)) {
|
|
285
|
-
throw Error((0,
|
|
302
|
+
throw Error((0, _utils3.getSdkError)('UNSUPPORTED_CHAINS').message + ' ' + chainId);
|
|
286
303
|
}
|
|
287
304
|
if (!(0, _helpers.isSupportWalletConnectChain)(chainId, chainInfoMap)) {
|
|
288
|
-
throw Error((0,
|
|
305
|
+
throw Error((0, _utils3.getSdkError)('UNSUPPORTED_CHAINS').message + ' ' + chainId);
|
|
289
306
|
}
|
|
290
307
|
if (!methods.includes(method)) {
|
|
291
|
-
throw Error((0,
|
|
308
|
+
throw Error((0, _utils3.getSdkError)('UNAUTHORIZED_METHOD').message + ' ' + method);
|
|
292
309
|
}
|
|
293
310
|
if (!_constants.WALLET_CONNECT_SUPPORTED_METHODS.includes(method)) {
|
|
294
|
-
throw Error((0,
|
|
311
|
+
throw Error((0, _utils3.getSdkError)('UNSUPPORTED_METHODS').message + ' ' + method);
|
|
295
312
|
}
|
|
296
313
|
switch (method) {
|
|
297
314
|
case _types.POLKADOT_SIGNING_METHODS.POLKADOT_SIGN_MESSAGE:
|
|
@@ -307,7 +324,7 @@ function _onSessionRequest2(requestEvent) {
|
|
|
307
324
|
(0, _classPrivateFieldLooseBase2.default)(this, _eip155RequestHandler)[_eip155RequestHandler].handleRequest(requestEvent);
|
|
308
325
|
break;
|
|
309
326
|
default:
|
|
310
|
-
throw Error((0,
|
|
327
|
+
throw Error((0, _utils3.getSdkError)('INVALID_METHOD').message + ' ' + method);
|
|
311
328
|
}
|
|
312
329
|
} catch (e) {
|
|
313
330
|
console.log(e);
|
|
@@ -343,22 +360,22 @@ async function _onPingReply2(_ref4) {
|
|
|
343
360
|
}
|
|
344
361
|
}
|
|
345
362
|
function _createListener2() {
|
|
346
|
-
var
|
|
347
|
-
(
|
|
348
|
-
(
|
|
349
|
-
(
|
|
350
|
-
(
|
|
351
|
-
(
|
|
352
|
-
(
|
|
363
|
+
var _classPrivateFieldLoo15, _classPrivateFieldLoo16, _classPrivateFieldLoo17, _classPrivateFieldLoo18, _classPrivateFieldLoo19, _classPrivateFieldLoo20;
|
|
364
|
+
(_classPrivateFieldLoo15 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo15 === void 0 ? void 0 : _classPrivateFieldLoo15.on('session_proposal', (0, _classPrivateFieldLooseBase2.default)(this, _onSessionProposal)[_onSessionProposal].bind(this));
|
|
365
|
+
(_classPrivateFieldLoo16 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo16 === void 0 ? void 0 : _classPrivateFieldLoo16.on('session_request', (0, _classPrivateFieldLooseBase2.default)(this, _onSessionRequest)[_onSessionRequest].bind(this));
|
|
366
|
+
(_classPrivateFieldLoo17 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo17 === void 0 ? void 0 : _classPrivateFieldLoo17.on('session_ping', (0, _classPrivateFieldLooseBase2.default)(this, _onPingReply)[_onPingReply].bind(this));
|
|
367
|
+
(_classPrivateFieldLoo18 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo18 === void 0 ? void 0 : _classPrivateFieldLoo18.on('session_event', data => console.log('event', data));
|
|
368
|
+
(_classPrivateFieldLoo19 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo19 === void 0 ? void 0 : _classPrivateFieldLoo19.on('session_update', data => console.log('update', data));
|
|
369
|
+
(_classPrivateFieldLoo20 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo20 === void 0 ? void 0 : _classPrivateFieldLoo20.on('session_delete', (0, _classPrivateFieldLooseBase2.default)(this, _updateSessions)[_updateSessions].bind(this));
|
|
353
370
|
}
|
|
354
371
|
function _removeListener2() {
|
|
355
372
|
_constants.ALL_WALLET_CONNECT_EVENT.forEach(event => {
|
|
356
|
-
var
|
|
357
|
-
(
|
|
373
|
+
var _classPrivateFieldLoo21;
|
|
374
|
+
(_classPrivateFieldLoo21 = (0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) === null || _classPrivateFieldLoo21 === void 0 ? void 0 : _classPrivateFieldLoo21.removeAllListeners(event);
|
|
358
375
|
});
|
|
359
376
|
}
|
|
360
377
|
function _checkClient2() {
|
|
361
378
|
if (!(0, _classPrivateFieldLooseBase2.default)(this, _client)[_client]) {
|
|
362
|
-
throw new Error((0,
|
|
379
|
+
throw new Error((0, _utils3.getInternalError)('NOT_INITIALIZED').message);
|
|
363
380
|
}
|
|
364
381
|
}
|
package/cjs/utils/index.js
CHANGED
|
@@ -343,6 +343,18 @@ Object.keys(_bitcoin).forEach(function (key) {
|
|
|
343
343
|
}
|
|
344
344
|
});
|
|
345
345
|
});
|
|
346
|
+
var _setupApiSdk = require("./setup-api-sdk");
|
|
347
|
+
Object.keys(_setupApiSdk).forEach(function (key) {
|
|
348
|
+
if (key === "default" || key === "__esModule") return;
|
|
349
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
350
|
+
if (key in exports && exports[key] === _setupApiSdk[key]) return;
|
|
351
|
+
Object.defineProperty(exports, key, {
|
|
352
|
+
enumerable: true,
|
|
353
|
+
get: function () {
|
|
354
|
+
return _setupApiSdk[key];
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
});
|
|
346
358
|
// Copyright 2019-2022 @subwallet/extension-base authors & contributors
|
|
347
359
|
// SPDX-License-Identifier: Apache-2.0
|
|
348
360
|
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.setupApiSDK = setupApiSDK;
|
|
8
|
+
var _constants = require("@subwallet/extension-base/constants");
|
|
9
|
+
var _utils = require("@subwallet/extension-base/services/chain-service/utils");
|
|
10
|
+
var _subwalletServicesSdk = _interopRequireDefault(require("@subwallet-monorepos/subwallet-services-sdk"));
|
|
11
|
+
var _environment = require("./environment");
|
|
12
|
+
// Copyright 2019-2022 @subwallet/extension-koni authors & contributors
|
|
13
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
14
|
+
|
|
15
|
+
function setupApiSDK() {
|
|
16
|
+
_subwalletServicesSdk.default.updateConfig({
|
|
17
|
+
appVersion: _constants.APP_VERSION,
|
|
18
|
+
baseUrl: _constants.BACKEND_API_URL,
|
|
19
|
+
platform: _environment.TARGET_ENV,
|
|
20
|
+
chainListVersion: _utils.ChainListVersion
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
// Custom the price history API with other different base URL
|
|
24
|
+
_subwalletServicesSdk.default.priceHistoryApi.updateConfig({
|
|
25
|
+
baseUrl: _constants.BACKEND_PRICE_HISTORY_URL
|
|
26
|
+
});
|
|
27
|
+
}
|
package/constants/environment.js
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
const PRODUCTION_BRANCHES = ['master', 'webapp', 'webapp-dev'];
|
|
5
5
|
const branchName = process.env.BRANCH_NAME || 'subwallet-dev';
|
|
6
|
+
export const APP_VERSION = process.env.PKG_VERSION || '';
|
|
6
7
|
export const isProductionMode = PRODUCTION_BRANCHES.indexOf(branchName) > -1;
|
|
7
8
|
export const BACKEND_API_URL = process.env.SUBWALLET_API || (isProductionMode ? 'https://sw-services.subwallet.app/api' : 'https://be-dev.subwallet.app/api');
|
|
8
9
|
export const BACKEND_PRICE_HISTORY_URL = process.env.SUBWALLET_PRICE_HISTORY_API || (isProductionMode ? 'https://price-history.subwallet.app/api' : 'https://price-history-dev.subwallet.app/api');
|
|
@@ -8,7 +8,7 @@ import { EvmProviderError } from '@subwallet/extension-base/background/errors/Ev
|
|
|
8
8
|
import { withErrorLog } from '@subwallet/extension-base/background/handlers/helpers';
|
|
9
9
|
import { isSubscriptionRunning, unsubscribe } from '@subwallet/extension-base/background/handlers/subscriptions';
|
|
10
10
|
import { APIItemState, BitcoinProviderErrorType, CardanoProviderErrorType, ChainType, EvmProviderErrorType, ExternalRequestPromiseStatus, ExtrinsicType } from '@subwallet/extension-base/background/KoniTypes';
|
|
11
|
-
import {
|
|
11
|
+
import { MANTA_PAY_BALANCE_INTERVAL, REMIND_EXPORT_ACCOUNT } from '@subwallet/extension-base/constants';
|
|
12
12
|
import { convertErrorFormat, generateValidationProcess, validationAuthCardanoMiddleware, validationAuthMiddleware, validationAuthWCMiddleware, validationBitcoinConnectMiddleware, validationBitcoinSendTransactionMiddleware, validationBitcoinSignMessageMiddleware, validationBitcoinSignPsbtMiddleware, validationCardanoSignDataMiddleware, validationConnectMiddleware, validationEvmDataTransactionMiddleware, validationEvmSignMessageMiddleware } from '@subwallet/extension-base/core/logic-validation';
|
|
13
13
|
import { BalanceService } from '@subwallet/extension-base/services/balance-service';
|
|
14
14
|
import { ServiceStatus } from '@subwallet/extension-base/services/base/types';
|
|
@@ -41,10 +41,9 @@ import TransactionService from '@subwallet/extension-base/services/transaction-s
|
|
|
41
41
|
import WalletConnectService from '@subwallet/extension-base/services/wallet-connect-service';
|
|
42
42
|
import { SWStorage } from '@subwallet/extension-base/storage';
|
|
43
43
|
import { BasicTxErrorType } from '@subwallet/extension-base/types';
|
|
44
|
-
import { addLazy, isManifestV3, isSameAddress, reformatAddress, sailsCache, stripUrl, targetIsWeb } from '@subwallet/extension-base/utils';
|
|
44
|
+
import { addLazy, isManifestV3, isSameAddress, reformatAddress, sailsCache, setupApiSDK, stripUrl, targetIsWeb } from '@subwallet/extension-base/utils';
|
|
45
45
|
import { convertCardanoHexToBech32, validateAddressNetwork } from '@subwallet/extension-base/utils/cardano';
|
|
46
46
|
import { createPromiseHandler } from '@subwallet/extension-base/utils/promise';
|
|
47
|
-
import subwalletApiSdk from '@subwallet/subwallet-api-sdk';
|
|
48
47
|
import { keyring } from '@subwallet/ui-keyring';
|
|
49
48
|
import BigN from 'bignumber.js';
|
|
50
49
|
import * as bitcoin from 'bitcoinjs-lib';
|
|
@@ -93,10 +92,7 @@ export default class KoniState {
|
|
|
93
92
|
waitStartingFull = null;
|
|
94
93
|
constructor(providers = {}) {
|
|
95
94
|
// Init subwallet api sdk
|
|
96
|
-
|
|
97
|
-
url: BACKEND_API_URL,
|
|
98
|
-
priceHistoryUrl: BACKEND_PRICE_HISTORY_URL
|
|
99
|
-
});
|
|
95
|
+
setupApiSDK();
|
|
100
96
|
this.providers = providers;
|
|
101
97
|
this.eventService = new EventService();
|
|
102
98
|
this.dbService = new DatabaseService(this.eventService);
|