@tonconnect/sdk 0.0.42 → 0.0.44

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 (187) hide show
  1. package/dist/tonconnect-sdk.min.js +1 -1
  2. package/dist/tonconnect-sdk.min.js.map +1 -1
  3. package/lib/{errors → cjs/errors}/dapp/dapp-metadata.error.js +0 -0
  4. package/lib/{errors → cjs/errors}/index.js +0 -0
  5. package/lib/{errors → cjs/errors}/protocol/events/connect/index.js +0 -0
  6. package/lib/{errors → cjs/errors}/protocol/events/connect/manifest-content-error.error.js +0 -0
  7. package/lib/{errors → cjs/errors}/protocol/events/connect/manifest-not-found.error.js +0 -0
  8. package/lib/{errors → cjs/errors}/protocol/events/connect/user-rejects.error.js +0 -0
  9. package/lib/{errors → cjs/errors}/protocol/events/index.js +0 -0
  10. package/lib/{errors → cjs/errors}/protocol/index.js +0 -0
  11. package/lib/{errors → cjs/errors}/protocol/responses/bad-request.error.js +0 -0
  12. package/lib/{errors → cjs/errors}/protocol/responses/index.js +0 -0
  13. package/lib/{errors → cjs/errors}/protocol/responses/unknown-app.error.js +0 -0
  14. package/lib/{errors → cjs/errors}/storage/index.js +0 -0
  15. package/lib/{errors → cjs/errors}/storage/localstorage-not-found.error.js +0 -0
  16. package/lib/{errors → cjs/errors}/ton-connect.error.js +0 -0
  17. package/lib/{errors → cjs/errors}/unknown.error.js +0 -0
  18. package/lib/{errors → cjs/errors}/wallet/index.js +0 -0
  19. package/lib/{errors → cjs/errors}/wallet/wallet-already-connected.error.js +0 -0
  20. package/lib/{errors → cjs/errors}/wallet/wallet-not-connected.error.js +0 -0
  21. package/lib/{errors → cjs/errors}/wallet/wallet-not-injected.error.js +0 -0
  22. package/lib/{errors → cjs/errors}/wallet/wallet-not-support-feature.error.js +0 -0
  23. package/lib/{errors → cjs/errors}/wallets-manager/fetch-wallets.error.js +0 -0
  24. package/lib/{errors → cjs/errors}/wallets-manager/index.js +0 -0
  25. package/lib/{index.js → cjs/index.js} +0 -0
  26. package/lib/{models → cjs/models}/dapp/dapp-metadata.js +0 -0
  27. package/lib/{models → cjs/models}/index.js +0 -0
  28. package/lib/{models → cjs/models}/methods/connect/connect-additional-request.js +0 -0
  29. package/lib/{models → cjs/models}/methods/connect/index.js +0 -0
  30. package/lib/{models → cjs/models}/methods/index.js +0 -0
  31. package/lib/{models → cjs/models}/methods/send-transaction/index.js +0 -0
  32. package/lib/{models → cjs/models}/methods/send-transaction/send-transaction-request.js +0 -0
  33. package/lib/{models → cjs/models}/methods/send-transaction/send-transaction-response.js +0 -0
  34. package/lib/{models → cjs/models}/ton-connect-options.js +0 -0
  35. package/lib/{models → cjs/models}/wallet/account.js +0 -0
  36. package/lib/{models → cjs/models}/wallet/index.js +0 -0
  37. package/lib/{models → cjs/models}/wallet/wallet-connection-source.js +0 -0
  38. package/lib/{models → cjs/models}/wallet/wallet-info.js +0 -0
  39. package/lib/{models → cjs/models}/wallet/wallet.js +0 -0
  40. package/lib/{parsers → cjs/parsers}/connect-errors-parser.js +0 -0
  41. package/lib/{parsers → cjs/parsers}/rpc-parser.js +0 -0
  42. package/lib/{parsers → cjs/parsers}/send-transaction-parser.js +0 -0
  43. package/lib/{provider → cjs/provider}/bridge/bridge-gateway.js +14 -0
  44. package/lib/{provider → cjs/provider}/bridge/bridge-provider.js +2 -25
  45. package/lib/{provider → cjs/provider}/bridge/models/bridge-connection.js +0 -0
  46. package/lib/{provider → cjs/provider}/bridge/models/bridge-incomming-message.js +0 -0
  47. package/lib/{provider → cjs/provider}/bridge/models/bridge-session-raw.js +0 -0
  48. package/lib/{provider → cjs/provider}/bridge/models/bridge-session.js +0 -0
  49. package/lib/{provider → cjs/provider}/injected/injected-provider.js +2 -25
  50. package/lib/{provider → cjs/provider}/injected/models/injected-wallet-api.js +0 -0
  51. package/lib/{provider → cjs/provider}/provider.js +0 -0
  52. package/lib/cjs/resources/protocol.js +4 -0
  53. package/lib/{storage → cjs/storage}/bridge-connection-storage.js +0 -0
  54. package/lib/{storage → cjs/storage}/default-storage.js +0 -0
  55. package/lib/{storage → cjs/storage}/http-bridge-gateway-storage.js +0 -0
  56. package/lib/{storage → cjs/storage}/models/storage.interface.js +0 -0
  57. package/lib/{ton-connect.interface.js → cjs/ton-connect.interface.js} +0 -0
  58. package/lib/{ton-connect.js → cjs/ton-connect.js} +1 -1
  59. package/lib/{utils → cjs/utils}/options.js +0 -0
  60. package/lib/{utils → cjs/utils}/types.js +0 -0
  61. package/lib/{utils → cjs/utils}/url.js +0 -0
  62. package/lib/{utils → cjs/utils}/web-api.js +0 -0
  63. package/lib/{wallets-list-manager.js → cjs/wallets-list-manager.js} +0 -0
  64. package/lib/esm/errors/dapp/dapp-metadata.error.js +10 -0
  65. package/lib/{errors/index.d.ts → esm/errors/index.js} +0 -0
  66. package/lib/{errors/protocol/events/connect/index.d.ts → esm/errors/protocol/events/connect/index.js} +0 -0
  67. package/lib/esm/errors/protocol/events/connect/manifest-content-error.error.js +11 -0
  68. package/lib/esm/errors/protocol/events/connect/manifest-not-found.error.js +11 -0
  69. package/lib/esm/errors/protocol/events/connect/user-rejects.error.js +10 -0
  70. package/lib/{errors/protocol/events/index.d.ts → esm/errors/protocol/events/index.js} +0 -0
  71. package/lib/{errors/protocol/index.d.ts → esm/errors/protocol/index.js} +0 -0
  72. package/lib/esm/errors/protocol/responses/bad-request.error.js +10 -0
  73. package/lib/{errors/protocol/responses/index.d.ts → esm/errors/protocol/responses/index.js} +0 -0
  74. package/lib/esm/errors/protocol/responses/unknown-app.error.js +10 -0
  75. package/lib/{errors/storage/index.d.ts → esm/errors/storage/index.js} +0 -0
  76. package/lib/esm/errors/storage/localstorage-not-found.error.js +10 -0
  77. package/lib/esm/errors/ton-connect.error.js +13 -0
  78. package/lib/esm/errors/unknown.error.js +10 -0
  79. package/lib/{errors/wallet/index.d.ts → esm/errors/wallet/index.js} +0 -0
  80. package/lib/esm/errors/wallet/wallet-already-connected.error.js +10 -0
  81. package/lib/esm/errors/wallet/wallet-not-connected.error.js +10 -0
  82. package/lib/esm/errors/wallet/wallet-not-injected.error.js +10 -0
  83. package/lib/esm/errors/wallet/wallet-not-support-feature.error.js +10 -0
  84. package/lib/esm/errors/wallets-manager/fetch-wallets.error.js +10 -0
  85. package/lib/{errors/wallets-manager/index.d.ts → esm/errors/wallets-manager/index.js} +0 -0
  86. package/lib/esm/index.js +5 -0
  87. package/lib/esm/models/dapp/dapp-metadata.js +1 -0
  88. package/lib/esm/models/index.js +2 -0
  89. package/lib/esm/models/methods/connect/connect-additional-request.js +1 -0
  90. package/lib/esm/models/methods/connect/index.js +1 -0
  91. package/lib/{models/methods/index.d.ts → esm/models/methods/index.js} +0 -0
  92. package/lib/esm/models/methods/send-transaction/index.js +1 -0
  93. package/lib/esm/models/methods/send-transaction/send-transaction-request.js +1 -0
  94. package/lib/esm/models/methods/send-transaction/send-transaction-response.js +1 -0
  95. package/lib/esm/models/ton-connect-options.js +1 -0
  96. package/lib/esm/models/wallet/account.js +1 -0
  97. package/lib/esm/models/wallet/index.js +1 -0
  98. package/lib/esm/models/wallet/wallet-connection-source.js +3 -0
  99. package/lib/esm/models/wallet/wallet-info.js +3 -0
  100. package/lib/esm/models/wallet/wallet.js +1 -0
  101. package/lib/esm/parsers/connect-errors-parser.js +23 -0
  102. package/lib/esm/parsers/rpc-parser.js +5 -0
  103. package/lib/esm/parsers/send-transaction-parser.js +31 -0
  104. package/lib/esm/provider/bridge/bridge-gateway.js +105 -0
  105. package/lib/esm/provider/bridge/bridge-provider.js +140 -0
  106. package/lib/esm/provider/bridge/models/bridge-connection.js +1 -0
  107. package/lib/esm/provider/bridge/models/bridge-incomming-message.js +1 -0
  108. package/lib/esm/provider/bridge/models/bridge-session-raw.js +1 -0
  109. package/lib/esm/provider/bridge/models/bridge-session.js +1 -0
  110. package/lib/esm/provider/injected/injected-provider.js +121 -0
  111. package/lib/esm/provider/injected/models/injected-wallet-api.js +1 -0
  112. package/lib/esm/provider/provider.js +1 -0
  113. package/lib/esm/resources/protocol.js +1 -0
  114. package/lib/esm/storage/bridge-connection-storage.js +96 -0
  115. package/lib/esm/storage/default-storage.js +35 -0
  116. package/lib/esm/storage/http-bridge-gateway-storage.js +34 -0
  117. package/lib/esm/storage/models/storage.interface.js +1 -0
  118. package/lib/esm/ton-connect.interface.js +1 -0
  119. package/lib/esm/ton-connect.js +252 -0
  120. package/lib/esm/utils/options.js +8 -0
  121. package/lib/esm/utils/types.js +1 -0
  122. package/lib/esm/utils/url.js +9 -0
  123. package/lib/esm/utils/web-api.js +20 -0
  124. package/lib/esm/wallets-list-manager.js +91 -0
  125. package/lib/{errors → types/errors}/dapp/dapp-metadata.error.d.ts +0 -0
  126. package/lib/types/errors/index.d.ts +6 -0
  127. package/lib/types/errors/protocol/events/connect/index.d.ts +1 -0
  128. package/lib/{errors → types/errors}/protocol/events/connect/manifest-content-error.error.d.ts +0 -0
  129. package/lib/{errors → types/errors}/protocol/events/connect/manifest-not-found.error.d.ts +0 -0
  130. package/lib/{errors → types/errors}/protocol/events/connect/user-rejects.error.d.ts +0 -0
  131. package/lib/types/errors/protocol/events/index.d.ts +1 -0
  132. package/lib/types/errors/protocol/index.d.ts +2 -0
  133. package/lib/{errors → types/errors}/protocol/responses/bad-request.error.d.ts +0 -0
  134. package/lib/types/errors/protocol/responses/index.d.ts +2 -0
  135. package/lib/{errors → types/errors}/protocol/responses/unknown-app.error.d.ts +0 -0
  136. package/lib/types/errors/storage/index.d.ts +1 -0
  137. package/lib/{errors → types/errors}/storage/localstorage-not-found.error.d.ts +0 -0
  138. package/lib/{errors → types/errors}/ton-connect.error.d.ts +0 -0
  139. package/lib/{errors → types/errors}/unknown.error.d.ts +0 -0
  140. package/lib/types/errors/wallet/index.d.ts +3 -0
  141. package/lib/{errors → types/errors}/wallet/wallet-already-connected.error.d.ts +0 -0
  142. package/lib/{errors → types/errors}/wallet/wallet-not-connected.error.d.ts +0 -0
  143. package/lib/{errors → types/errors}/wallet/wallet-not-injected.error.d.ts +0 -0
  144. package/lib/{errors → types/errors}/wallet/wallet-not-support-feature.error.d.ts +0 -0
  145. package/lib/{errors → types/errors}/wallets-manager/fetch-wallets.error.d.ts +0 -0
  146. package/lib/types/errors/wallets-manager/index.d.ts +1 -0
  147. package/lib/{index.d.ts → types/index.d.ts} +0 -0
  148. package/lib/{models → types/models}/dapp/dapp-metadata.d.ts +0 -0
  149. package/lib/{models → types/models}/index.d.ts +0 -0
  150. package/lib/{models → types/models}/methods/connect/connect-additional-request.d.ts +1 -1
  151. package/lib/{models → types/models}/methods/connect/index.d.ts +0 -0
  152. package/lib/types/models/methods/index.d.ts +2 -0
  153. package/lib/{models → types/models}/methods/send-transaction/index.d.ts +0 -0
  154. package/lib/{models → types/models}/methods/send-transaction/send-transaction-request.d.ts +0 -0
  155. package/lib/{models → types/models}/methods/send-transaction/send-transaction-response.d.ts +0 -0
  156. package/lib/{models → types/models}/ton-connect-options.d.ts +0 -0
  157. package/lib/{models → types/models}/wallet/account.d.ts +0 -0
  158. package/lib/{models → types/models}/wallet/index.d.ts +0 -0
  159. package/lib/{models → types/models}/wallet/wallet-connection-source.d.ts +0 -0
  160. package/lib/{models → types/models}/wallet/wallet-info.d.ts +0 -0
  161. package/lib/{models → types/models}/wallet/wallet.d.ts +0 -0
  162. package/lib/{parsers → types/parsers}/connect-errors-parser.d.ts +0 -0
  163. package/lib/{parsers → types/parsers}/rpc-parser.d.ts +0 -0
  164. package/lib/{parsers → types/parsers}/send-transaction-parser.d.ts +0 -0
  165. package/lib/{provider → types/provider}/bridge/bridge-gateway.d.ts +1 -0
  166. package/lib/{provider → types/provider}/bridge/bridge-provider.d.ts +0 -0
  167. package/lib/{provider → types/provider}/bridge/models/bridge-connection.d.ts +0 -0
  168. package/lib/{provider → types/provider}/bridge/models/bridge-incomming-message.d.ts +0 -0
  169. package/lib/{provider → types/provider}/bridge/models/bridge-session-raw.d.ts +0 -0
  170. package/lib/{provider → types/provider}/bridge/models/bridge-session.d.ts +0 -0
  171. package/lib/{provider → types/provider}/injected/injected-provider.d.ts +0 -0
  172. package/lib/{provider → types/provider}/injected/models/injected-wallet-api.d.ts +0 -0
  173. package/lib/{provider → types/provider}/provider.d.ts +0 -0
  174. package/lib/types/resources/protocol.d.ts +1 -0
  175. package/lib/{storage → types/storage}/bridge-connection-storage.d.ts +0 -0
  176. package/lib/{storage → types/storage}/default-storage.d.ts +0 -0
  177. package/lib/{storage → types/storage}/http-bridge-gateway-storage.d.ts +0 -0
  178. package/lib/{storage → types/storage}/models/storage.interface.d.ts +0 -0
  179. package/lib/{ton-connect.d.ts → types/ton-connect.d.ts} +0 -0
  180. package/lib/{ton-connect.interface.d.ts → types/ton-connect.interface.d.ts} +0 -0
  181. package/lib/{utils → types/utils}/options.d.ts +0 -0
  182. package/lib/{utils → types/utils}/types.d.ts +0 -0
  183. package/lib/{utils → types/utils}/url.d.ts +0 -0
  184. package/lib/{utils → types/utils}/web-api.d.ts +0 -0
  185. package/lib/{wallets-list-manager.d.ts → types/wallets-list-manager.d.ts} +0 -0
  186. package/package.json +15 -6
  187. package/lib/resources/protocol.json +0 -3
@@ -0,0 +1,252 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ var __rest = (this && this.__rest) || function (s, e) {
11
+ var t = {};
12
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
13
+ t[p] = s[p];
14
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
15
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
16
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
17
+ t[p[i]] = s[p[i]];
18
+ }
19
+ return t;
20
+ };
21
+ import { DappMetadataError } from "./errors/dapp/dapp-metadata.error";
22
+ import { ManifestContentErrorError } from "./errors/protocol/events/connect/manifest-content-error.error";
23
+ import { ManifestNotFoundError } from "./errors/protocol/events/connect/manifest-not-found.error";
24
+ import { TonConnectError } from "./errors/ton-connect.error";
25
+ import { WalletAlreadyConnectedError } from "./errors/wallet/wallet-already-connected.error";
26
+ import { WalletNotConnectedError } from "./errors/wallet/wallet-not-connected.error";
27
+ import { WalletNotSupportFeatureError } from "./errors/wallet/wallet-not-support-feature.error";
28
+ import { isWalletConnectionSourceJS } from "./models/wallet/wallet-connection-source";
29
+ import { connectErrorsParser } from "./parsers/connect-errors-parser";
30
+ import { sendTransactionParser } from "./parsers/send-transaction-parser";
31
+ import { BridgeProvider } from "./provider/bridge/bridge-provider";
32
+ import { InjectedProvider } from "./provider/injected/injected-provider";
33
+ import { BridgeConnectionStorage } from "./storage/bridge-connection-storage";
34
+ import { DefaultStorage } from "./storage/default-storage";
35
+ import { getWebPageManifest } from "./utils/web-api";
36
+ import { WalletsListManager } from "./wallets-list-manager";
37
+ export class TonConnect {
38
+ constructor(options) {
39
+ this.walletsList = new WalletsListManager();
40
+ this._wallet = null;
41
+ this.provider = null;
42
+ this.statusChangeSubscriptions = [];
43
+ this.statusChangeErrorSubscriptions = [];
44
+ this.dappSettings = {
45
+ manifestUrl: (options === null || options === void 0 ? void 0 : options.manifestUrl) || getWebPageManifest(),
46
+ storage: (options === null || options === void 0 ? void 0 : options.storage) || new DefaultStorage()
47
+ };
48
+ if (!this.dappSettings.manifestUrl) {
49
+ throw new DappMetadataError('Dapp tonconnect-manifest.json must be specified if window.location.origin is undefined. See more https://github.com/ton-connect/docs/blob/main/requests-responses.md#app-manifest');
50
+ }
51
+ this.bridgeConnectionStorage = new BridgeConnectionStorage(this.dappSettings.storage);
52
+ }
53
+ /**
54
+ * Shows if the wallet is connected right now.
55
+ */
56
+ get connected() {
57
+ return this._wallet !== null;
58
+ }
59
+ /**
60
+ * Current connected account or null if no account is connected.
61
+ */
62
+ get account() {
63
+ var _a;
64
+ return ((_a = this._wallet) === null || _a === void 0 ? void 0 : _a.account) || null;
65
+ }
66
+ /**
67
+ * Current connected wallet or null if no account is connected.
68
+ */
69
+ get wallet() {
70
+ return this._wallet;
71
+ }
72
+ set wallet(value) {
73
+ this._wallet = value;
74
+ this.statusChangeSubscriptions.forEach(callback => callback(this._wallet));
75
+ }
76
+ /**
77
+ * Returns available wallets list.
78
+ */
79
+ getWallets() {
80
+ return this.walletsList.getWallets();
81
+ }
82
+ /**
83
+ * Allows to subscribe to connection status changes and handle connection errors.
84
+ * @param callback will be called after connections status changes with actual wallet or null.
85
+ * @param errorsHandler (optional) will be called with some instance of TonConnectError when connect error is received.
86
+ * @returns unsubscribe callback.
87
+ */
88
+ onStatusChange(callback, errorsHandler) {
89
+ this.statusChangeSubscriptions.push(callback);
90
+ if (errorsHandler) {
91
+ this.statusChangeErrorSubscriptions.push(errorsHandler);
92
+ }
93
+ return () => {
94
+ this.statusChangeSubscriptions = this.statusChangeSubscriptions.filter(item => item !== callback);
95
+ if (errorsHandler) {
96
+ this.statusChangeErrorSubscriptions = this.statusChangeErrorSubscriptions.filter(item => item !== errorsHandler);
97
+ }
98
+ };
99
+ }
100
+ connect(wallet, request) {
101
+ var _a;
102
+ if (this.connected) {
103
+ throw new WalletAlreadyConnectedError();
104
+ }
105
+ (_a = this.provider) === null || _a === void 0 ? void 0 : _a.closeConnection();
106
+ this.provider = this.createProvider(wallet);
107
+ return this.provider.connect(this.createConnectRequest(request));
108
+ }
109
+ /**
110
+ * Try to restore existing session and reconnect to the corresponding wallet. Call it immediately when your app is loaded.
111
+ */
112
+ restoreConnection() {
113
+ return __awaiter(this, void 0, void 0, function* () {
114
+ const [bridgeConnectionType, embeddedWallet] = yield Promise.all([
115
+ this.bridgeConnectionStorage.storedConnectionType(),
116
+ this.walletsList.getEmbeddedWallet()
117
+ ]);
118
+ switch (bridgeConnectionType) {
119
+ case 'http':
120
+ this.provider = yield BridgeProvider.fromStorage(this.dappSettings.storage);
121
+ break;
122
+ case 'injected':
123
+ this.provider = yield InjectedProvider.fromStorage(this.dappSettings.storage);
124
+ break;
125
+ default:
126
+ if (embeddedWallet) {
127
+ this.provider = yield this.createProvider(embeddedWallet);
128
+ }
129
+ else {
130
+ return;
131
+ }
132
+ }
133
+ this.provider.listen(this.walletEventsListener.bind(this));
134
+ return this.provider.restoreConnection();
135
+ });
136
+ }
137
+ /**
138
+ * Asks connected wallet to sign and send the transaction.
139
+ * @param transaction transaction to send.
140
+ * @returns signed transaction boc that allows you to find the transaction in the blockchain.
141
+ * If user rejects transaction, method will throw the corresponding error.
142
+ */
143
+ sendTransaction(transaction) {
144
+ return __awaiter(this, void 0, void 0, function* () {
145
+ this.checkConnection();
146
+ this.checkFeatureSupport('SendTransaction');
147
+ const { validUntil } = transaction, tx = __rest(transaction, ["validUntil"]);
148
+ const response = yield this.provider.sendRequest(sendTransactionParser.convertToRpcRequest(Object.assign(Object.assign({}, tx), { valid_until: validUntil })));
149
+ if (sendTransactionParser.isError(response)) {
150
+ return sendTransactionParser.parseAndThrowError(response);
151
+ }
152
+ return sendTransactionParser.convertFromRpcResponse(response);
153
+ });
154
+ }
155
+ /**
156
+ * Disconnect form thw connected wallet and drop current session.
157
+ */
158
+ disconnect() {
159
+ return __awaiter(this, void 0, void 0, function* () {
160
+ if (!this.connected) {
161
+ throw new WalletNotConnectedError();
162
+ }
163
+ yield this.provider.disconnect();
164
+ this.onWalletDisconnected();
165
+ });
166
+ }
167
+ createProvider(wallet) {
168
+ let provider;
169
+ if (isWalletConnectionSourceJS(wallet)) {
170
+ provider = new InjectedProvider(wallet.jsBridgeKey);
171
+ }
172
+ else {
173
+ provider = new BridgeProvider(this.dappSettings.storage, wallet);
174
+ }
175
+ provider.listen(this.walletEventsListener.bind(this));
176
+ return provider;
177
+ }
178
+ walletEventsListener(e) {
179
+ switch (e.event) {
180
+ case 'connect':
181
+ this.onWalletConnected(e.payload);
182
+ break;
183
+ case 'connect_error':
184
+ this.onWalletConnectError(e.payload);
185
+ break;
186
+ case 'disconnect':
187
+ this.onWalletDisconnected();
188
+ }
189
+ }
190
+ onWalletConnected(connectEvent) {
191
+ const tonAccountItem = connectEvent.items.find(item => item.name === 'ton_addr');
192
+ const tonProofItem = connectEvent.items.find(item => item.name === 'ton_proof');
193
+ if (!tonAccountItem) {
194
+ throw new TonConnectError('ton_addr connection item was not found');
195
+ }
196
+ const wallet = {
197
+ device: connectEvent.device,
198
+ provider: this.provider.type,
199
+ account: {
200
+ address: tonAccountItem.address,
201
+ chain: tonAccountItem.network,
202
+ walletStateInit: tonAccountItem.walletStateInit
203
+ }
204
+ };
205
+ if (tonProofItem) {
206
+ wallet.connectItems = {
207
+ tonProof: tonProofItem
208
+ };
209
+ }
210
+ this.wallet = wallet;
211
+ }
212
+ onWalletConnectError(connectEventError) {
213
+ const error = connectErrorsParser.parseError(connectEventError);
214
+ this.statusChangeErrorSubscriptions.forEach(errorsHandler => errorsHandler(error));
215
+ console.debug(error);
216
+ if (error instanceof ManifestNotFoundError || error instanceof ManifestContentErrorError) {
217
+ console.error(error);
218
+ throw error;
219
+ }
220
+ }
221
+ onWalletDisconnected() {
222
+ this.wallet = null;
223
+ }
224
+ checkConnection() {
225
+ if (!this.connected) {
226
+ throw new WalletNotConnectedError();
227
+ }
228
+ }
229
+ checkFeatureSupport(feature) {
230
+ var _a;
231
+ if (!((_a = this.wallet) === null || _a === void 0 ? void 0 : _a.device.features.includes(feature))) {
232
+ throw new WalletNotSupportFeatureError();
233
+ }
234
+ }
235
+ createConnectRequest(request) {
236
+ const items = [
237
+ {
238
+ name: 'ton_addr'
239
+ }
240
+ ];
241
+ if (request === null || request === void 0 ? void 0 : request.tonProof) {
242
+ items.push({
243
+ name: 'ton_proof',
244
+ payload: request.tonProof
245
+ });
246
+ }
247
+ return {
248
+ manifestUrl: this.dappSettings.manifestUrl,
249
+ items
250
+ };
251
+ }
252
+ }
@@ -0,0 +1,8 @@
1
+ import deepmerge from 'deepmerge';
2
+ export function mergeOptions(options, defaultOptions) {
3
+ if (!options) {
4
+ return defaultOptions;
5
+ }
6
+ const overwriteMerge = (_, sourceArray, __) => sourceArray;
7
+ return deepmerge(defaultOptions, options, { arrayMerge: overwriteMerge });
8
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,9 @@
1
+ export function removeUrlLastSlash(url) {
2
+ if (url.slice(-1) === '/') {
3
+ return url.slice(0, -1);
4
+ }
5
+ return url;
6
+ }
7
+ export function addPathToUrl(url, path) {
8
+ return removeUrlLastSlash(url) + '/' + path;
9
+ }
@@ -0,0 +1,20 @@
1
+ export function getWindow() {
2
+ if (typeof window === 'undefined') {
3
+ return undefined;
4
+ }
5
+ return window;
6
+ }
7
+ export function getDocument() {
8
+ if (typeof document === 'undefined') {
9
+ return undefined;
10
+ }
11
+ return document;
12
+ }
13
+ export function getWebPageManifest() {
14
+ var _a;
15
+ const origin = (_a = getWindow()) === null || _a === void 0 ? void 0 : _a.location.origin;
16
+ if (origin) {
17
+ return origin + '/tonconnect-manifest.json';
18
+ }
19
+ return '';
20
+ }
@@ -0,0 +1,91 @@
1
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
2
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3
+ return new (P || (P = Promise))(function (resolve, reject) {
4
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
5
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
6
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
7
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
8
+ });
9
+ };
10
+ import { FetchWalletsError } from "./errors/wallets-manager/fetch-wallets.error";
11
+ import { isWalletInfoInjected } from "./models/wallet/wallet-info";
12
+ import { InjectedProvider } from "./provider/injected/injected-provider";
13
+ export class WalletsListManager {
14
+ constructor() {
15
+ this.walletsListCache = null;
16
+ this.walletsListSource = 'https://raw.githubusercontent.com/ton-connect/wallets-list/main/wallets.json';
17
+ }
18
+ getWallets() {
19
+ return __awaiter(this, void 0, void 0, function* () {
20
+ if (!this.walletsListCache) {
21
+ this.walletsListCache = this.fetchWalletsList();
22
+ this.walletsListCache.catch(() => (this.walletsListCache = null));
23
+ }
24
+ return this.walletsListCache;
25
+ });
26
+ }
27
+ getEmbeddedWallet() {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ const walletsList = yield this.getWallets();
30
+ const injectedWallets = walletsList.filter(isWalletInfoInjected);
31
+ if (injectedWallets.length !== 1) {
32
+ return null;
33
+ }
34
+ return injectedWallets[0].embedded ? injectedWallets[0] : null;
35
+ });
36
+ }
37
+ fetchWalletsList() {
38
+ return __awaiter(this, void 0, void 0, function* () {
39
+ try {
40
+ const walletsResponse = yield fetch(this.walletsListSource);
41
+ const walletsList = yield walletsResponse.json();
42
+ if (!Array.isArray(walletsList) ||
43
+ !walletsList.every(wallet => this.isCorrectWalletConfigDTO(wallet))) {
44
+ throw new FetchWalletsError('Wrong wallets list format');
45
+ }
46
+ return this.walletConfigDTOListToWalletConfigList(walletsList);
47
+ }
48
+ catch (e) {
49
+ throw new FetchWalletsError(e);
50
+ }
51
+ });
52
+ }
53
+ walletConfigDTOListToWalletConfigList(walletConfigDTO) {
54
+ return walletConfigDTO.map(walletConfigDTO => {
55
+ const walletConfig = {
56
+ name: walletConfigDTO.name,
57
+ imageUrl: walletConfigDTO.image,
58
+ aboutUrl: walletConfigDTO.about_url,
59
+ tondns: walletConfigDTO.tondns
60
+ };
61
+ if ('bridge_url' in walletConfigDTO) {
62
+ walletConfig.bridgeUrl = walletConfigDTO.bridge_url;
63
+ walletConfig.universalLink = walletConfigDTO.universal_url;
64
+ }
65
+ if ('js_bridge_key' in walletConfigDTO) {
66
+ const jsBridgeKey = walletConfigDTO.js_bridge_key;
67
+ walletConfig.jsBridgeKey = jsBridgeKey;
68
+ walletConfig.injected =
69
+ InjectedProvider.isWalletInjected(jsBridgeKey);
70
+ walletConfig.embedded =
71
+ InjectedProvider.isInsideWalletBrowser(jsBridgeKey);
72
+ }
73
+ return walletConfig;
74
+ });
75
+ }
76
+ isCorrectWalletConfigDTO(value) {
77
+ if (!value || !(typeof value === 'object')) {
78
+ return false;
79
+ }
80
+ const containsName = 'name' in value;
81
+ const containsImage = 'image' in value;
82
+ const containsAbout = 'about_url' in value;
83
+ if (!containsName || !containsImage || !containsAbout) {
84
+ return false;
85
+ }
86
+ const containsUniversalUrl = 'universal_url' in value;
87
+ const containsHttpBridge = 'bridge_url' in value;
88
+ const containsJsBridge = 'js_bridge_key' in value;
89
+ return (containsHttpBridge && containsUniversalUrl) || containsJsBridge;
90
+ }
91
+ }
@@ -0,0 +1,6 @@
1
+ export * from './protocol';
2
+ export * from './wallet';
3
+ export * from './storage';
4
+ export * from './wallets-manager';
5
+ export { TonConnectError } from './ton-connect.error';
6
+ export { UnknownError } from './unknown.error';
@@ -0,0 +1 @@
1
+ export { UserRejectsError } from "./user-rejects.error";
@@ -0,0 +1 @@
1
+ export * from './connect';
@@ -0,0 +1,2 @@
1
+ export * from './events';
2
+ export * from './responses';
@@ -0,0 +1,2 @@
1
+ export { BadRequestError } from './bad-request.error';
2
+ export { UnknownAppError } from './unknown-app.error';
@@ -0,0 +1 @@
1
+ export { LocalstorageNotFoundError } from './localstorage-not-found.error';
File without changes
@@ -0,0 +1,3 @@
1
+ export { WalletAlreadyConnectedError } from './wallet-already-connected.error';
2
+ export { WalletNotConnectedError } from './wallet-not-connected.error';
3
+ export { WalletNotInjectedError } from './wallet-not-injected.error';
@@ -0,0 +1 @@
1
+ export { FetchWalletsError } from './fetch-wallets.error';
File without changes
File without changes
@@ -2,5 +2,5 @@ export interface ConnectAdditionalRequest {
2
2
  /**
3
3
  * Payload for ton_proof
4
4
  */
5
- tonProof: string;
5
+ tonProof?: string;
6
6
  }
@@ -0,0 +1,2 @@
1
+ export * from './connect';
2
+ export * from './send-transaction';
File without changes
File without changes
File without changes
File without changes
@@ -7,6 +7,7 @@ export declare class BridgeGateway {
7
7
  private readonly errorsListener;
8
8
  private readonly ssePath;
9
9
  private readonly postPath;
10
+ private readonly heartbeatMessage;
10
11
  private readonly defaultTtl;
11
12
  private eventSource;
12
13
  private isClosed;
File without changes
@@ -0,0 +1 @@
1
+ export declare const PROTOCOL_VERSION = 2;
File without changes
File without changes
File without changes
File without changes
File without changes
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@tonconnect/sdk",
3
- "version": "0.0.42",
3
+ "version": "0.0.44",
4
4
  "scripts": {
5
- "build": "npx rimraf lib && ttsc && npx rimraf dist && webpack --mode development",
6
- "build:production": "npx rimraf lib && ttsc --sourceMap false && npx rimraf dist && webpack --mode production"
5
+ "build": "npx rimraf lib && ttsc --outDir ./lib/cjs && ttsc --module esnext --outDir ./lib/esm && npx rimraf dist && webpack --mode development",
6
+ "build:production": "npx rimraf lib && ttsc --project tsconfig.cjs.json --sourceMap false && ttsc --project tsconfig.esm.json --sourceMap false && npx rimraf dist && webpack --mode production"
7
7
  },
8
8
  "repository": {
9
9
  "type": "git",
@@ -28,14 +28,23 @@
28
28
  "tweetnacl": "^1.0.3",
29
29
  "eventsource": "^2.0.2",
30
30
  "node-fetch": "^2.6.7",
31
- "@tonconnect/protocol": "^0.0.22"
31
+ "@tonconnect/protocol": "^0.0.25"
32
32
  },
33
33
  "files": [
34
34
  "lib",
35
35
  "dist"
36
36
  ],
37
- "main": "./lib/index.js",
38
- "types": "./lib/index.d.ts",
37
+ "main": "./lib/cjs/index.js",
38
+ "module": "./lib/esm/index.js",
39
+ "types": "./lib/types/index.d.ts",
40
+ "exports": {
41
+ ".": {
42
+ "types": "./lib/types/index.d.ts",
43
+ "require": "./lib/cjs/index.js",
44
+ "import": "./lib/esm/index.js",
45
+ "default": "./lib/cjs/index.js"
46
+ }
47
+ },
39
48
  "nx": {
40
49
  "tags": ["scope:sdk"]
41
50
  },
@@ -1,3 +0,0 @@
1
- {
2
- "version": 2
3
- }