@tonconnect/sdk 0.0.21 → 0.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/lib/errors/dapp/dapp-metadata.error.js +6 -14
  2. package/lib/errors/index.js +18 -5
  3. package/lib/errors/protocol/events/connect/user-rejects.error.js +6 -14
  4. package/lib/errors/protocol/events/index.js +15 -2
  5. package/lib/errors/protocol/index.js +16 -3
  6. package/lib/errors/protocol/responses/bad-request.error.js +6 -14
  7. package/lib/errors/protocol/responses/unknown-app.error.js +6 -14
  8. package/lib/errors/storage/localstorage-not-found.error.js +6 -14
  9. package/lib/errors/ton-connect.error.js +5 -13
  10. package/lib/errors/unknown.error.js +6 -14
  11. package/lib/errors/wallet/wallet-already-connected.error.js +6 -14
  12. package/lib/errors/wallet/wallet-not-connected.error.js +6 -14
  13. package/lib/errors/wallet/wallet-not-injected.error.js +6 -14
  14. package/lib/errors/wallets-manager/fetch-wallets.error.js +6 -14
  15. package/lib/index.js +17 -4
  16. package/lib/models/index.js +16 -3
  17. package/lib/models/methods/index.js +16 -3
  18. package/lib/parsers/connect-errors-parser.js +14 -18
  19. package/lib/parsers/rpc-parser.js +4 -7
  20. package/lib/parsers/send-transaction-parser.js +19 -26
  21. package/lib/provider/bridge/bridge-gateway.js +60 -79
  22. package/lib/provider/bridge/bridge-provider.js +118 -138
  23. package/lib/provider/injected/injected-provider.js +93 -89
  24. package/lib/storage/bridge-connection-storage.js +86 -112
  25. package/lib/storage/default-storage.js +24 -21
  26. package/lib/storage/http-bridge-gateway-storage.js +28 -32
  27. package/lib/ton-connect.js +123 -165
  28. package/lib/utils/options.js +5 -5
  29. package/lib/utils/web-api.js +10 -10
  30. package/lib/wallets-list-manager.js +59 -73
  31. package/package.json +2 -2
@@ -1,23 +1,31 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
12
  exports.TonConnect = void 0;
4
- var tslib_1 = require("tslib");
5
- var dapp_metadata_error_1 = require("./errors/dapp/dapp-metadata.error");
6
- var ton_connect_error_1 = require("./errors/ton-connect.error");
7
- var wallet_already_connected_error_1 = require("./errors/wallet/wallet-already-connected.error");
8
- var wallet_not_connected_error_1 = require("./errors/wallet/wallet-not-connected.error");
9
- var wallet_connection_source_1 = require("./models/wallet/wallet-connection-source");
10
- var connect_errors_parser_1 = require("./parsers/connect-errors-parser");
11
- var send_transaction_parser_1 = require("./parsers/send-transaction-parser");
12
- var bridge_provider_1 = require("./provider/bridge/bridge-provider");
13
- var injected_provider_1 = require("./provider/injected/injected-provider");
14
- var bridge_connection_storage_1 = require("./storage/bridge-connection-storage");
15
- var default_storage_1 = require("./storage/default-storage");
16
- var options_1 = require("./utils/options");
17
- var web_api_1 = require("./utils/web-api");
18
- var wallets_list_manager_1 = require("./wallets-list-manager");
19
- var TonConnect = /** @class */ (function () {
20
- function TonConnect(options) {
13
+ const dapp_metadata_error_1 = require("./errors/dapp/dapp-metadata.error");
14
+ const ton_connect_error_1 = require("./errors/ton-connect.error");
15
+ const wallet_already_connected_error_1 = require("./errors/wallet/wallet-already-connected.error");
16
+ const wallet_not_connected_error_1 = require("./errors/wallet/wallet-not-connected.error");
17
+ const wallet_connection_source_1 = require("./models/wallet/wallet-connection-source");
18
+ const connect_errors_parser_1 = require("./parsers/connect-errors-parser");
19
+ const send_transaction_parser_1 = require("./parsers/send-transaction-parser");
20
+ const bridge_provider_1 = require("./provider/bridge/bridge-provider");
21
+ const injected_provider_1 = require("./provider/injected/injected-provider");
22
+ const bridge_connection_storage_1 = require("./storage/bridge-connection-storage");
23
+ const default_storage_1 = require("./storage/default-storage");
24
+ const options_1 = require("./utils/options");
25
+ const web_api_1 = require("./utils/web-api");
26
+ const wallets_list_manager_1 = require("./wallets-list-manager");
27
+ class TonConnect {
28
+ constructor(options) {
21
29
  this.walletsList = new wallets_list_manager_1.WalletsListManager();
22
30
  this._wallet = null;
23
31
  this.provider = null;
@@ -32,68 +40,54 @@ var TonConnect = /** @class */ (function () {
32
40
  }
33
41
  this.bridgeConnectionStorage = new bridge_connection_storage_1.BridgeConnectionStorage(this.dappSettings.storage);
34
42
  }
35
- Object.defineProperty(TonConnect.prototype, "connected", {
36
- /**
37
- * Shows if the wallet is connected right now.
38
- */
39
- get: function () {
40
- return this._wallet !== null;
41
- },
42
- enumerable: false,
43
- configurable: true
44
- });
45
- Object.defineProperty(TonConnect.prototype, "account", {
46
- /**
47
- * Current connected account or null if no account is connected.
48
- */
49
- get: function () {
50
- var _a;
51
- return ((_a = this._wallet) === null || _a === void 0 ? void 0 : _a.account) || null;
52
- },
53
- enumerable: false,
54
- configurable: true
55
- });
56
- Object.defineProperty(TonConnect.prototype, "wallet", {
57
- /**
58
- * Current connected wallet or null if no account is connected.
59
- */
60
- get: function () {
61
- return this._wallet;
62
- },
63
- set: function (value) {
64
- var _this = this;
65
- this._wallet = value;
66
- this.statusChangeSubscriptions.forEach(function (callback) { return callback(_this._wallet); });
67
- },
68
- enumerable: false,
69
- configurable: true
70
- });
43
+ /**
44
+ * Shows if the wallet is connected right now.
45
+ */
46
+ get connected() {
47
+ return this._wallet !== null;
48
+ }
49
+ /**
50
+ * Current connected account or null if no account is connected.
51
+ */
52
+ get account() {
53
+ var _a;
54
+ return ((_a = this._wallet) === null || _a === void 0 ? void 0 : _a.account) || null;
55
+ }
56
+ /**
57
+ * Current connected wallet or null if no account is connected.
58
+ */
59
+ get wallet() {
60
+ return this._wallet;
61
+ }
62
+ set wallet(value) {
63
+ this._wallet = value;
64
+ this.statusChangeSubscriptions.forEach(callback => callback(this._wallet));
65
+ }
71
66
  /**
72
67
  * Returns available wallets list.
73
68
  */
74
- TonConnect.prototype.getWallets = function () {
69
+ getWallets() {
75
70
  return this.walletsList.getWallets();
76
- };
71
+ }
77
72
  /**
78
73
  * Allows to subscribe to connection status changes and handle connection errors.
79
74
  * @param callback will be called after connections status changes with actual wallet or null.
80
75
  * @param errorsHandler (optional) will be called with some instance of TonConnectError when connect error is received.
81
76
  * @returns unsubscribe callback.
82
77
  */
83
- TonConnect.prototype.onStatusChange = function (callback, errorsHandler) {
84
- var _this = this;
78
+ onStatusChange(callback, errorsHandler) {
85
79
  this.statusChangeSubscriptions.push(callback);
86
80
  if (errorsHandler) {
87
81
  this.statusChangeErrorSubscriptions.push(errorsHandler);
88
82
  }
89
- return function () {
90
- _this.statusChangeSubscriptions = _this.statusChangeSubscriptions.filter(function (item) { return item !== callback; });
83
+ return () => {
84
+ this.statusChangeSubscriptions = this.statusChangeSubscriptions.filter(item => item !== callback);
91
85
  if (errorsHandler) {
92
- _this.statusChangeErrorSubscriptions = _this.statusChangeErrorSubscriptions.filter(function (item) { return item !== errorsHandler; });
86
+ this.statusChangeErrorSubscriptions = this.statusChangeErrorSubscriptions.filter(item => item !== errorsHandler);
93
87
  }
94
88
  };
95
- };
96
- TonConnect.prototype.connect = function (wallet, request) {
89
+ }
90
+ connect(wallet, request) {
97
91
  var _a;
98
92
  if (this.connected) {
99
93
  throw new wallet_already_connected_error_1.WalletAlreadyConnectedError();
@@ -101,100 +95,65 @@ var TonConnect = /** @class */ (function () {
101
95
  (_a = this.provider) === null || _a === void 0 ? void 0 : _a.closeConnection();
102
96
  this.provider = this.createProvider(wallet);
103
97
  return this.provider.connect(this.createConnectRequest(request));
104
- };
98
+ }
105
99
  /**
106
100
  * Try to restore existing session and reconnect to the corresponding wallet. Call it immediately when your app is loaded.
107
101
  */
108
- TonConnect.prototype.restoreConnection = function () {
109
- return tslib_1.__awaiter(this, void 0, void 0, function () {
110
- var _a, bridgeConnectionType, embeddedWallet, _b, _c, _d, _e;
111
- return tslib_1.__generator(this, function (_f) {
112
- switch (_f.label) {
113
- case 0: return [4 /*yield*/, Promise.all([
114
- this.bridgeConnectionStorage.storedConnectionType(),
115
- this.walletsList.getEmbeddedWallet()
116
- ])];
117
- case 1:
118
- _a = _f.sent(), bridgeConnectionType = _a[0], embeddedWallet = _a[1];
119
- _b = bridgeConnectionType;
120
- switch (_b) {
121
- case 'http': return [3 /*break*/, 2];
122
- case 'injected': return [3 /*break*/, 4];
123
- }
124
- return [3 /*break*/, 6];
125
- case 2:
126
- _c = this;
127
- return [4 /*yield*/, bridge_provider_1.BridgeProvider.fromStorage(this.dappSettings.storage)];
128
- case 3:
129
- _c.provider = _f.sent();
130
- return [3 /*break*/, 9];
131
- case 4:
132
- _d = this;
133
- return [4 /*yield*/, injected_provider_1.InjectedProvider.fromStorage(this.dappSettings.storage)];
134
- case 5:
135
- _d.provider = _f.sent();
136
- return [3 /*break*/, 9];
137
- case 6:
138
- if (!embeddedWallet) return [3 /*break*/, 8];
139
- _e = this;
140
- return [4 /*yield*/, this.createProvider(embeddedWallet)];
141
- case 7:
142
- _e.provider = _f.sent();
143
- return [3 /*break*/, 9];
144
- case 8: return [2 /*return*/];
145
- case 9:
146
- this.provider.listen(this.walletEventsListener.bind(this));
147
- return [2 /*return*/, this.provider.restoreConnection()];
148
- }
149
- });
102
+ restoreConnection() {
103
+ return __awaiter(this, void 0, void 0, function* () {
104
+ const [bridgeConnectionType, embeddedWallet] = yield Promise.all([
105
+ this.bridgeConnectionStorage.storedConnectionType(),
106
+ this.walletsList.getEmbeddedWallet()
107
+ ]);
108
+ switch (bridgeConnectionType) {
109
+ case 'http':
110
+ this.provider = yield bridge_provider_1.BridgeProvider.fromStorage(this.dappSettings.storage);
111
+ break;
112
+ case 'injected':
113
+ this.provider = yield injected_provider_1.InjectedProvider.fromStorage(this.dappSettings.storage);
114
+ break;
115
+ default:
116
+ if (embeddedWallet) {
117
+ this.provider = yield this.createProvider(embeddedWallet);
118
+ }
119
+ else {
120
+ return;
121
+ }
122
+ }
123
+ this.provider.listen(this.walletEventsListener.bind(this));
124
+ return this.provider.restoreConnection();
150
125
  });
151
- };
126
+ }
152
127
  /**
153
128
  * Asks connected wallet to sign and send the transaction.
154
129
  * @param transaction transaction to send.
155
130
  * @returns signed transaction boc that allows you to find the transaction in the blockchain.
156
131
  * If user rejects transaction, method will throw the corresponding error.
157
132
  */
158
- TonConnect.prototype.sendTransaction = function (transaction) {
159
- return tslib_1.__awaiter(this, void 0, void 0, function () {
160
- var response;
161
- return tslib_1.__generator(this, function (_a) {
162
- switch (_a.label) {
163
- case 0:
164
- this.checkConnection();
165
- return [4 /*yield*/, this.provider.sendRequest(send_transaction_parser_1.sendTransactionParser.convertToRpcRequest(transaction))];
166
- case 1:
167
- response = _a.sent();
168
- if (send_transaction_parser_1.sendTransactionParser.isError(response)) {
169
- return [2 /*return*/, send_transaction_parser_1.sendTransactionParser.parseAndThrowError(response)];
170
- }
171
- return [2 /*return*/, send_transaction_parser_1.sendTransactionParser.convertFromRpcResponse(response)];
172
- }
173
- });
133
+ sendTransaction(transaction) {
134
+ return __awaiter(this, void 0, void 0, function* () {
135
+ this.checkConnection();
136
+ const response = yield this.provider.sendRequest(send_transaction_parser_1.sendTransactionParser.convertToRpcRequest(transaction));
137
+ if (send_transaction_parser_1.sendTransactionParser.isError(response)) {
138
+ return send_transaction_parser_1.sendTransactionParser.parseAndThrowError(response);
139
+ }
140
+ return send_transaction_parser_1.sendTransactionParser.convertFromRpcResponse(response);
174
141
  });
175
- };
142
+ }
176
143
  /**
177
144
  * Disconnect form thw connected wallet and drop current session.
178
145
  */
179
- TonConnect.prototype.disconnect = function () {
180
- return tslib_1.__awaiter(this, void 0, void 0, function () {
181
- return tslib_1.__generator(this, function (_a) {
182
- switch (_a.label) {
183
- case 0:
184
- if (!this.connected) {
185
- throw new wallet_not_connected_error_1.WalletNotConnectedError();
186
- }
187
- return [4 /*yield*/, this.provider.disconnect()];
188
- case 1:
189
- _a.sent();
190
- this.onWalletDisconnected();
191
- return [2 /*return*/];
192
- }
193
- });
146
+ disconnect() {
147
+ return __awaiter(this, void 0, void 0, function* () {
148
+ if (!this.connected) {
149
+ throw new wallet_not_connected_error_1.WalletNotConnectedError();
150
+ }
151
+ yield this.provider.disconnect();
152
+ this.onWalletDisconnected();
194
153
  });
195
- };
196
- TonConnect.prototype.createProvider = function (wallet) {
197
- var provider;
154
+ }
155
+ createProvider(wallet) {
156
+ let provider;
198
157
  if ((0, wallet_connection_source_1.isWalletConnectionSourceJS)(wallet)) {
199
158
  provider = new injected_provider_1.InjectedProvider(wallet.jsBridgeKey);
200
159
  }
@@ -203,8 +162,8 @@ var TonConnect = /** @class */ (function () {
203
162
  }
204
163
  provider.listen(this.walletEventsListener.bind(this));
205
164
  return provider;
206
- };
207
- TonConnect.prototype.walletEventsListener = function (e) {
165
+ }
166
+ walletEventsListener(e) {
208
167
  switch (e.event) {
209
168
  case 'connect':
210
169
  this.onWalletConnected(e.payload);
@@ -215,14 +174,14 @@ var TonConnect = /** @class */ (function () {
215
174
  case 'disconnect':
216
175
  this.onWalletDisconnected();
217
176
  }
218
- };
219
- TonConnect.prototype.onWalletConnected = function (connectEvent) {
220
- var tonAccountItem = connectEvent.items.find(function (item) { return item.name === 'ton_addr'; });
221
- var tonProofItem = connectEvent.items.find(function (item) { return item.name === 'ton_proof'; });
177
+ }
178
+ onWalletConnected(connectEvent) {
179
+ const tonAccountItem = connectEvent.items.find(item => item.name === 'ton_addr');
180
+ const tonProofItem = connectEvent.items.find(item => item.name === 'ton_proof');
222
181
  if (!tonAccountItem) {
223
182
  throw new ton_connect_error_1.TonConnectError('ton_addr connection item was not found');
224
183
  }
225
- var wallet = {
184
+ const wallet = {
226
185
  device: connectEvent.device,
227
186
  provider: this.provider.type,
228
187
  account: {
@@ -236,23 +195,23 @@ var TonConnect = /** @class */ (function () {
236
195
  };
237
196
  }
238
197
  this.wallet = wallet;
239
- };
240
- TonConnect.prototype.onWalletConnectError = function (connectEventError) {
241
- var error = connect_errors_parser_1.connectErrorsParser.parseError(connectEventError);
242
- this.statusChangeErrorSubscriptions.forEach(function (errorsHandler) { return errorsHandler(error); });
243
- };
244
- TonConnect.prototype.onWalletDisconnected = function () {
198
+ }
199
+ onWalletConnectError(connectEventError) {
200
+ const error = connect_errors_parser_1.connectErrorsParser.parseError(connectEventError);
201
+ this.statusChangeErrorSubscriptions.forEach(errorsHandler => errorsHandler(error));
202
+ }
203
+ onWalletDisconnected() {
245
204
  this.wallet = null;
246
- };
247
- TonConnect.prototype.checkConnection = function () {
205
+ }
206
+ checkConnection() {
248
207
  if (!this.connected) {
249
208
  throw new wallet_not_connected_error_1.WalletNotConnectedError();
250
209
  }
251
- };
252
- TonConnect.prototype.createConnectRequest = function (request) {
253
- var webPageMetadata = (0, web_api_1.getWebPageMetadata)();
254
- var metadata = (0, options_1.mergeOptions)(this.dappSettings.metadata, webPageMetadata);
255
- var items = [
210
+ }
211
+ createConnectRequest(request) {
212
+ const webPageMetadata = (0, web_api_1.getWebPageMetadata)();
213
+ const metadata = (0, options_1.mergeOptions)(this.dappSettings.metadata, webPageMetadata);
214
+ const items = [
256
215
  {
257
216
  name: 'ton_addr'
258
217
  }
@@ -263,8 +222,7 @@ var TonConnect = /** @class */ (function () {
263
222
  payload: request.tonProof
264
223
  });
265
224
  }
266
- return tslib_1.__assign(tslib_1.__assign({}, metadata), { items: items });
267
- };
268
- return TonConnect;
269
- }());
225
+ return Object.assign(Object.assign({}, metadata), { items });
226
+ }
227
+ }
270
228
  exports.TonConnect = TonConnect;
@@ -1,15 +1,15 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.mergeOptions = void 0;
4
- var tslib_1 = require("tslib");
5
- var deepmerge_1 = tslib_1.__importDefault(require("deepmerge"));
7
+ const deepmerge_1 = __importDefault(require("deepmerge"));
6
8
  function mergeOptions(options, defaultOptions) {
7
9
  if (!options) {
8
10
  return defaultOptions;
9
11
  }
10
- var overwriteMerge = function (_, sourceArray, __) {
11
- return sourceArray;
12
- };
12
+ const overwriteMerge = (_, sourceArray, __) => sourceArray;
13
13
  return (0, deepmerge_1.default)(defaultOptions, options, { arrayMerge: overwriteMerge });
14
14
  }
15
15
  exports.mergeOptions = mergeOptions;
@@ -10,21 +10,21 @@ function getWebPageMetadata() {
10
10
  }
11
11
  exports.getWebPageMetadata = getWebPageMetadata;
12
12
  function getIconUrl() {
13
- var appleTouchIcons = document.querySelectorAll("link[rel='apple-touch-icon']");
13
+ const appleTouchIcons = document.querySelectorAll("link[rel='apple-touch-icon']");
14
14
  if (appleTouchIcons === null || appleTouchIcons === void 0 ? void 0 : appleTouchIcons.length) {
15
15
  return getLargestSizeIconUrl(Array.from(appleTouchIcons));
16
16
  }
17
- var links = Array.from(document.querySelectorAll("link[rel*='icon']"));
18
- var pngLinks = links.filter(function (link) { return link.href.endsWith('.png'); });
17
+ const links = Array.from(document.querySelectorAll("link[rel*='icon']"));
18
+ const pngLinks = links.filter(link => link.href.endsWith('.png'));
19
19
  if (pngLinks.length) {
20
20
  return getLargestSizeIconUrl(pngLinks);
21
21
  }
22
- var icoIcon = links.filter(function (link) { return link.href.endsWith('.ico'); })[0];
22
+ const icoIcon = links.filter(link => link.href.endsWith('.ico'))[0];
23
23
  return (icoIcon === null || icoIcon === void 0 ? void 0 : icoIcon.href) || '';
24
24
  }
25
25
  function getLargestSizeIconUrl(links) {
26
- var parsedLinks = links.map(parseIconLink);
27
- var maxSizeIcon = parsedLinks.sort(function (a, b) { return (b.size > a.size ? 1 : -1); })[0];
26
+ const parsedLinks = links.map(parseIconLink);
27
+ const maxSizeIcon = parsedLinks.sort((a, b) => (b.size > a.size ? 1 : -1))[0];
28
28
  return (maxSizeIcon === null || maxSizeIcon === void 0 ? void 0 : maxSizeIcon.href) || '';
29
29
  }
30
30
  function parseIconLink(link) {
@@ -35,15 +35,15 @@ function parseIconLink(link) {
35
35
  size: 0
36
36
  };
37
37
  }
38
- var sizes = Array.from(link.sizes)
39
- .map(function (size) {
40
- var groups = size.match(/(\d+)x(\d+)/i);
38
+ const sizes = Array.from(link.sizes)
39
+ .map(size => {
40
+ const groups = size.match(/(\d+)x(\d+)/i);
41
41
  if (!groups || !groups[1] || !groups[2]) {
42
42
  return undefined;
43
43
  }
44
44
  return parseInt(groups[1]) * parseInt(groups[2]);
45
45
  })
46
- .filter(function (item) { return !!item; });
46
+ .filter(item => !!item);
47
47
  if (sizes.length === 0) {
48
48
  return {
49
49
  href: link.href,
@@ -1,74 +1,61 @@
1
1
  "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
2
11
  Object.defineProperty(exports, "__esModule", { value: true });
3
12
  exports.WalletsListManager = void 0;
4
- var tslib_1 = require("tslib");
5
- var fetch_wallets_error_1 = require("./errors/wallets-manager/fetch-wallets.error");
6
- var wallet_info_1 = require("./models/wallet/wallet-info");
7
- var injected_provider_1 = require("./provider/injected/injected-provider");
8
- var WalletsListManager = /** @class */ (function () {
9
- function WalletsListManager() {
13
+ const fetch_wallets_error_1 = require("./errors/wallets-manager/fetch-wallets.error");
14
+ const wallet_info_1 = require("./models/wallet/wallet-info");
15
+ const injected_provider_1 = require("./provider/injected/injected-provider");
16
+ class WalletsListManager {
17
+ constructor() {
10
18
  this.walletsListCache = null;
11
19
  this.walletsListSource = 'https://raw.githubusercontent.com/ton-connect/wallets-list/main/wallets.json';
12
20
  }
13
- WalletsListManager.prototype.getWallets = function () {
14
- return tslib_1.__awaiter(this, void 0, void 0, function () {
15
- var _this = this;
16
- return tslib_1.__generator(this, function (_a) {
17
- if (!this.walletsListCache) {
18
- this.walletsListCache = this.fetchWalletsList();
19
- this.walletsListCache.catch(function () { return (_this.walletsListCache = null); });
20
- }
21
- return [2 /*return*/, this.walletsListCache];
22
- });
21
+ getWallets() {
22
+ return __awaiter(this, void 0, void 0, function* () {
23
+ if (!this.walletsListCache) {
24
+ this.walletsListCache = this.fetchWalletsList();
25
+ this.walletsListCache.catch(() => (this.walletsListCache = null));
26
+ }
27
+ return this.walletsListCache;
23
28
  });
24
- };
25
- WalletsListManager.prototype.getEmbeddedWallet = function () {
26
- return tslib_1.__awaiter(this, void 0, void 0, function () {
27
- var walletsList, injectedWallets;
28
- return tslib_1.__generator(this, function (_a) {
29
- switch (_a.label) {
30
- case 0: return [4 /*yield*/, this.getWallets()];
31
- case 1:
32
- walletsList = _a.sent();
33
- injectedWallets = walletsList.filter(wallet_info_1.isWalletInfoInjected);
34
- if (injectedWallets.length !== 1) {
35
- return [2 /*return*/, null];
36
- }
37
- return [2 /*return*/, injectedWallets[0].embedded ? injectedWallets[0] : null];
38
- }
39
- });
29
+ }
30
+ getEmbeddedWallet() {
31
+ return __awaiter(this, void 0, void 0, function* () {
32
+ const walletsList = yield this.getWallets();
33
+ const injectedWallets = walletsList.filter(wallet_info_1.isWalletInfoInjected);
34
+ if (injectedWallets.length !== 1) {
35
+ return null;
36
+ }
37
+ return injectedWallets[0].embedded ? injectedWallets[0] : null;
40
38
  });
41
- };
42
- WalletsListManager.prototype.fetchWalletsList = function () {
43
- return tslib_1.__awaiter(this, void 0, void 0, function () {
44
- var walletsResponse, walletsList, e_1;
45
- var _this = this;
46
- return tslib_1.__generator(this, function (_a) {
47
- switch (_a.label) {
48
- case 0:
49
- _a.trys.push([0, 3, , 4]);
50
- return [4 /*yield*/, fetch(this.walletsListSource)];
51
- case 1:
52
- walletsResponse = _a.sent();
53
- return [4 /*yield*/, walletsResponse.json()];
54
- case 2:
55
- walletsList = _a.sent();
56
- if (!Array.isArray(walletsList) ||
57
- !walletsList.every(function (wallet) { return _this.isCorrectWalletConfigDTO(wallet); })) {
58
- throw new fetch_wallets_error_1.FetchWalletsError('Wrong wallets list format');
59
- }
60
- return [2 /*return*/, this.walletConfigDTOListToWalletConfigList(walletsList)];
61
- case 3:
62
- e_1 = _a.sent();
63
- throw new fetch_wallets_error_1.FetchWalletsError(e_1);
64
- case 4: return [2 /*return*/];
39
+ }
40
+ fetchWalletsList() {
41
+ return __awaiter(this, void 0, void 0, function* () {
42
+ try {
43
+ const walletsResponse = yield fetch(this.walletsListSource);
44
+ const walletsList = yield walletsResponse.json();
45
+ if (!Array.isArray(walletsList) ||
46
+ !walletsList.every(wallet => this.isCorrectWalletConfigDTO(wallet))) {
47
+ throw new fetch_wallets_error_1.FetchWalletsError('Wrong wallets list format');
65
48
  }
66
- });
49
+ return this.walletConfigDTOListToWalletConfigList(walletsList);
50
+ }
51
+ catch (e) {
52
+ throw new fetch_wallets_error_1.FetchWalletsError(e);
53
+ }
67
54
  });
68
- };
69
- WalletsListManager.prototype.walletConfigDTOListToWalletConfigList = function (walletConfigDTO) {
70
- return walletConfigDTO.map(function (walletConfigDTO) {
71
- var walletConfig = {
55
+ }
56
+ walletConfigDTOListToWalletConfigList(walletConfigDTO) {
57
+ return walletConfigDTO.map(walletConfigDTO => {
58
+ const walletConfig = {
72
59
  name: walletConfigDTO.name,
73
60
  imageUrl: walletConfigDTO.image,
74
61
  aboutUrl: walletConfigDTO.about_url,
@@ -79,7 +66,7 @@ var WalletsListManager = /** @class */ (function () {
79
66
  walletConfig.universalLink = walletConfigDTO.universal_url;
80
67
  }
81
68
  if ('js_bridge_key' in walletConfigDTO) {
82
- var jsBridgeKey = walletConfigDTO.js_bridge_key;
69
+ const jsBridgeKey = walletConfigDTO.js_bridge_key;
83
70
  walletConfig.jsBridgeKey = jsBridgeKey;
84
71
  walletConfig.injected =
85
72
  injected_provider_1.InjectedProvider.isWalletInjected(jsBridgeKey);
@@ -88,22 +75,21 @@ var WalletsListManager = /** @class */ (function () {
88
75
  }
89
76
  return walletConfig;
90
77
  });
91
- };
92
- WalletsListManager.prototype.isCorrectWalletConfigDTO = function (value) {
78
+ }
79
+ isCorrectWalletConfigDTO(value) {
93
80
  if (!value || !(typeof value === 'object')) {
94
81
  return false;
95
82
  }
96
- var containsName = 'name' in value;
97
- var containsImage = 'image' in value;
98
- var containsAbout = 'about_url' in value;
83
+ const containsName = 'name' in value;
84
+ const containsImage = 'image' in value;
85
+ const containsAbout = 'about_url' in value;
99
86
  if (!containsName || !containsImage || !containsAbout) {
100
87
  return false;
101
88
  }
102
- var containsUniversalUrl = 'universal_url' in value;
103
- var containsHttpBridge = 'bridge_url' in value;
104
- var containsJsBridge = 'js_bridge_key' in value;
89
+ const containsUniversalUrl = 'universal_url' in value;
90
+ const containsHttpBridge = 'bridge_url' in value;
91
+ const containsJsBridge = 'js_bridge_key' in value;
105
92
  return (containsHttpBridge && containsUniversalUrl) || containsJsBridge;
106
- };
107
- return WalletsListManager;
108
- }());
93
+ }
94
+ }
109
95
  exports.WalletsListManager = WalletsListManager;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tonconnect/sdk",
3
- "version": "0.0.21",
3
+ "version": "0.0.22",
4
4
  "scripts": {
5
5
  "build": "npx rimraf lib && ttsc",
6
6
  "build:production": "npx rimraf lib && ttsc --sourceMap false"
@@ -26,7 +26,7 @@
26
26
  "dependencies": {
27
27
  "deepmerge": "^4.2.2",
28
28
  "tweetnacl": "^1.0.3",
29
- "@tonconnect/protocol": "^0.0.10"
29
+ "@tonconnect/protocol": "^0.0.11"
30
30
  },
31
31
  "files": [
32
32
  "lib"