@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.
- package/lib/errors/dapp/dapp-metadata.error.js +6 -14
- package/lib/errors/index.js +18 -5
- package/lib/errors/protocol/events/connect/user-rejects.error.js +6 -14
- package/lib/errors/protocol/events/index.js +15 -2
- package/lib/errors/protocol/index.js +16 -3
- package/lib/errors/protocol/responses/bad-request.error.js +6 -14
- package/lib/errors/protocol/responses/unknown-app.error.js +6 -14
- package/lib/errors/storage/localstorage-not-found.error.js +6 -14
- package/lib/errors/ton-connect.error.js +5 -13
- package/lib/errors/unknown.error.js +6 -14
- package/lib/errors/wallet/wallet-already-connected.error.js +6 -14
- package/lib/errors/wallet/wallet-not-connected.error.js +6 -14
- package/lib/errors/wallet/wallet-not-injected.error.js +6 -14
- package/lib/errors/wallets-manager/fetch-wallets.error.js +6 -14
- package/lib/index.js +17 -4
- package/lib/models/index.js +16 -3
- package/lib/models/methods/index.js +16 -3
- package/lib/parsers/connect-errors-parser.js +14 -18
- package/lib/parsers/rpc-parser.js +4 -7
- package/lib/parsers/send-transaction-parser.js +19 -26
- package/lib/provider/bridge/bridge-gateway.js +60 -79
- package/lib/provider/bridge/bridge-provider.js +118 -138
- package/lib/provider/injected/injected-provider.js +93 -89
- package/lib/storage/bridge-connection-storage.js +86 -112
- package/lib/storage/default-storage.js +24 -21
- package/lib/storage/http-bridge-gateway-storage.js +28 -32
- package/lib/ton-connect.js +123 -165
- package/lib/utils/options.js +5 -5
- package/lib/utils/web-api.js +10 -10
- package/lib/wallets-list-manager.js +59 -73
- package/package.json +2 -2
package/lib/ton-connect.js
CHANGED
|
@@ -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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
90
|
-
|
|
83
|
+
return () => {
|
|
84
|
+
this.statusChangeSubscriptions = this.statusChangeSubscriptions.filter(item => item !== callback);
|
|
91
85
|
if (errorsHandler) {
|
|
92
|
-
|
|
86
|
+
this.statusChangeErrorSubscriptions = this.statusChangeErrorSubscriptions.filter(item => item !== errorsHandler);
|
|
93
87
|
}
|
|
94
88
|
};
|
|
95
|
-
}
|
|
96
|
-
|
|
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
|
-
|
|
109
|
-
return
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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
|
-
|
|
159
|
-
return
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
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
|
-
|
|
180
|
-
return
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
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
|
-
|
|
197
|
-
|
|
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
|
-
|
|
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
|
-
|
|
220
|
-
|
|
221
|
-
|
|
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
|
-
|
|
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
|
-
|
|
241
|
-
|
|
242
|
-
this.statusChangeErrorSubscriptions.forEach(
|
|
243
|
-
}
|
|
244
|
-
|
|
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
|
-
|
|
205
|
+
}
|
|
206
|
+
checkConnection() {
|
|
248
207
|
if (!this.connected) {
|
|
249
208
|
throw new wallet_not_connected_error_1.WalletNotConnectedError();
|
|
250
209
|
}
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
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
|
|
267
|
-
}
|
|
268
|
-
|
|
269
|
-
}());
|
|
225
|
+
return Object.assign(Object.assign({}, metadata), { items });
|
|
226
|
+
}
|
|
227
|
+
}
|
|
270
228
|
exports.TonConnect = TonConnect;
|
package/lib/utils/options.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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;
|
package/lib/utils/web-api.js
CHANGED
|
@@ -10,21 +10,21 @@ function getWebPageMetadata() {
|
|
|
10
10
|
}
|
|
11
11
|
exports.getWebPageMetadata = getWebPageMetadata;
|
|
12
12
|
function getIconUrl() {
|
|
13
|
-
|
|
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
|
-
|
|
18
|
-
|
|
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
|
-
|
|
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
|
-
|
|
27
|
-
|
|
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
|
-
|
|
39
|
-
.map(
|
|
40
|
-
|
|
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(
|
|
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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
14
|
-
return
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
-
|
|
26
|
-
return
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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
|
-
|
|
43
|
-
return
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
-
|
|
70
|
-
return walletConfigDTO.map(
|
|
71
|
-
|
|
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
|
-
|
|
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
|
-
|
|
78
|
+
}
|
|
79
|
+
isCorrectWalletConfigDTO(value) {
|
|
93
80
|
if (!value || !(typeof value === 'object')) {
|
|
94
81
|
return false;
|
|
95
82
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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
|
-
|
|
103
|
-
|
|
104
|
-
|
|
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
|
-
|
|
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.
|
|
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.
|
|
29
|
+
"@tonconnect/protocol": "^0.0.11"
|
|
30
30
|
},
|
|
31
31
|
"files": [
|
|
32
32
|
"lib"
|