@tonconnect/sdk 0.0.43 → 0.0.45

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 (209) hide show
  1. package/README.md +7 -6
  2. package/dist/tonconnect-sdk.min.js +1 -1
  3. package/dist/tonconnect-sdk.min.js.map +1 -1
  4. package/lib/cjs/errors/address/index.js +5 -0
  5. package/lib/cjs/errors/address/wrong-address.error.js +11 -0
  6. package/lib/cjs/errors/binary/base64-encode.error.js +11 -0
  7. package/lib/cjs/errors/binary/index.js +7 -0
  8. package/lib/cjs/errors/binary/parse-hex.error.js +11 -0
  9. package/lib/{errors → cjs/errors}/dapp/dapp-metadata.error.js +0 -0
  10. package/lib/{errors → cjs/errors}/index.js +2 -0
  11. package/lib/{errors → cjs/errors}/protocol/events/connect/index.js +0 -0
  12. package/lib/{errors → cjs/errors}/protocol/events/connect/manifest-content-error.error.js +0 -0
  13. package/lib/{errors → cjs/errors}/protocol/events/connect/manifest-not-found.error.js +0 -0
  14. package/lib/{errors → cjs/errors}/protocol/events/connect/user-rejects.error.js +0 -0
  15. package/lib/{errors → cjs/errors}/protocol/events/index.js +0 -0
  16. package/lib/{errors → cjs/errors}/protocol/index.js +0 -0
  17. package/lib/{errors → cjs/errors}/protocol/responses/bad-request.error.js +0 -0
  18. package/lib/{errors → cjs/errors}/protocol/responses/index.js +0 -0
  19. package/lib/{errors → cjs/errors}/protocol/responses/unknown-app.error.js +0 -0
  20. package/lib/{errors → cjs/errors}/storage/index.js +0 -0
  21. package/lib/{errors → cjs/errors}/storage/localstorage-not-found.error.js +0 -0
  22. package/lib/{errors → cjs/errors}/ton-connect.error.js +0 -0
  23. package/lib/{errors → cjs/errors}/unknown.error.js +0 -0
  24. package/lib/{errors → cjs/errors}/wallet/index.js +0 -0
  25. package/lib/{errors → cjs/errors}/wallet/wallet-already-connected.error.js +0 -0
  26. package/lib/{errors → cjs/errors}/wallet/wallet-not-connected.error.js +0 -0
  27. package/lib/{errors → cjs/errors}/wallet/wallet-not-injected.error.js +0 -0
  28. package/lib/{errors → cjs/errors}/wallet/wallet-not-support-feature.error.js +0 -0
  29. package/lib/{errors → cjs/errors}/wallets-manager/fetch-wallets.error.js +0 -0
  30. package/lib/{errors → cjs/errors}/wallets-manager/index.js +0 -0
  31. package/lib/{index.js → cjs/index.js} +3 -1
  32. package/lib/{models → cjs/models}/dapp/dapp-metadata.js +0 -0
  33. package/lib/{models → cjs/models}/index.js +0 -0
  34. package/lib/{models → cjs/models}/methods/connect/connect-additional-request.js +0 -0
  35. package/lib/{models → cjs/models}/methods/connect/index.js +0 -0
  36. package/lib/{models → cjs/models}/methods/index.js +0 -0
  37. package/lib/{models → cjs/models}/methods/send-transaction/index.js +0 -0
  38. package/lib/{models → cjs/models}/methods/send-transaction/send-transaction-request.js +0 -0
  39. package/lib/{models → cjs/models}/methods/send-transaction/send-transaction-response.js +0 -0
  40. package/lib/{models → cjs/models}/ton-connect-options.js +0 -0
  41. package/lib/{models → cjs/models}/wallet/account.js +0 -0
  42. package/lib/{models → cjs/models}/wallet/index.js +0 -0
  43. package/lib/{models → cjs/models}/wallet/wallet-connection-source.js +0 -0
  44. package/lib/{models → cjs/models}/wallet/wallet-info.js +0 -0
  45. package/lib/{models → cjs/models}/wallet/wallet.js +0 -0
  46. package/lib/{parsers → cjs/parsers}/connect-errors-parser.js +0 -0
  47. package/lib/{parsers → cjs/parsers}/rpc-parser.js +0 -0
  48. package/lib/{parsers → cjs/parsers}/send-transaction-parser.js +2 -3
  49. package/lib/{provider → cjs/provider}/bridge/bridge-gateway.js +14 -0
  50. package/lib/{provider → cjs/provider}/bridge/bridge-provider.js +2 -25
  51. package/lib/{provider → cjs/provider}/bridge/models/bridge-connection.js +0 -0
  52. package/lib/{provider → cjs/provider}/bridge/models/bridge-incomming-message.js +0 -0
  53. package/lib/{provider → cjs/provider}/bridge/models/bridge-session-raw.js +0 -0
  54. package/lib/{provider → cjs/provider}/bridge/models/bridge-session.js +0 -0
  55. package/lib/{provider → cjs/provider}/injected/injected-provider.js +2 -25
  56. package/lib/{provider → cjs/provider}/injected/models/injected-wallet-api.js +0 -0
  57. package/lib/{provider → cjs/provider}/provider.js +0 -0
  58. package/lib/cjs/resources/protocol.js +4 -0
  59. package/lib/{storage → cjs/storage}/bridge-connection-storage.js +0 -0
  60. package/lib/{storage → cjs/storage}/default-storage.js +0 -0
  61. package/lib/{storage → cjs/storage}/http-bridge-gateway-storage.js +0 -0
  62. package/lib/{storage → cjs/storage}/models/storage.interface.js +0 -0
  63. package/lib/{ton-connect.interface.js → cjs/ton-connect.interface.js} +0 -0
  64. package/lib/{ton-connect.js → cjs/ton-connect.js} +3 -5
  65. package/lib/cjs/utils/address.js +87 -0
  66. package/lib/{utils → cjs/utils}/options.js +0 -0
  67. package/lib/{utils → cjs/utils}/types.js +0 -0
  68. package/lib/{utils → cjs/utils}/url.js +0 -0
  69. package/lib/{utils → cjs/utils}/web-api.js +0 -0
  70. package/lib/{wallets-list-manager.js → cjs/wallets-list-manager.js} +40 -16
  71. package/lib/esm/errors/address/index.js +1 -0
  72. package/lib/esm/errors/address/wrong-address.error.js +7 -0
  73. package/lib/esm/errors/binary/base64-encode.error.js +7 -0
  74. package/lib/esm/errors/binary/index.js +2 -0
  75. package/lib/esm/errors/binary/parse-hex.error.js +7 -0
  76. package/lib/esm/errors/dapp/dapp-metadata.error.js +10 -0
  77. package/lib/esm/errors/index.js +8 -0
  78. package/lib/{errors/protocol/events/connect/index.d.ts → esm/errors/protocol/events/connect/index.js} +0 -0
  79. package/lib/esm/errors/protocol/events/connect/manifest-content-error.error.js +11 -0
  80. package/lib/esm/errors/protocol/events/connect/manifest-not-found.error.js +11 -0
  81. package/lib/esm/errors/protocol/events/connect/user-rejects.error.js +10 -0
  82. package/lib/{errors/protocol/events/index.d.ts → esm/errors/protocol/events/index.js} +0 -0
  83. package/lib/{errors/protocol/index.d.ts → esm/errors/protocol/index.js} +0 -0
  84. package/lib/esm/errors/protocol/responses/bad-request.error.js +10 -0
  85. package/lib/{errors/protocol/responses/index.d.ts → esm/errors/protocol/responses/index.js} +0 -0
  86. package/lib/esm/errors/protocol/responses/unknown-app.error.js +10 -0
  87. package/lib/{errors/storage/index.d.ts → esm/errors/storage/index.js} +0 -0
  88. package/lib/esm/errors/storage/localstorage-not-found.error.js +10 -0
  89. package/lib/esm/errors/ton-connect.error.js +13 -0
  90. package/lib/esm/errors/unknown.error.js +10 -0
  91. package/lib/{errors/wallet/index.d.ts → esm/errors/wallet/index.js} +0 -0
  92. package/lib/esm/errors/wallet/wallet-already-connected.error.js +10 -0
  93. package/lib/esm/errors/wallet/wallet-not-connected.error.js +10 -0
  94. package/lib/esm/errors/wallet/wallet-not-injected.error.js +10 -0
  95. package/lib/esm/errors/wallet/wallet-not-support-feature.error.js +10 -0
  96. package/lib/esm/errors/wallets-manager/fetch-wallets.error.js +10 -0
  97. package/lib/{errors/wallets-manager/index.d.ts → esm/errors/wallets-manager/index.js} +0 -0
  98. package/lib/esm/index.js +6 -0
  99. package/lib/esm/models/dapp/dapp-metadata.js +1 -0
  100. package/lib/esm/models/index.js +2 -0
  101. package/lib/esm/models/methods/connect/connect-additional-request.js +1 -0
  102. package/lib/esm/models/methods/connect/index.js +1 -0
  103. package/lib/{models/methods/index.d.ts → esm/models/methods/index.js} +0 -0
  104. package/lib/esm/models/methods/send-transaction/index.js +1 -0
  105. package/lib/esm/models/methods/send-transaction/send-transaction-request.js +1 -0
  106. package/lib/esm/models/methods/send-transaction/send-transaction-response.js +1 -0
  107. package/lib/esm/models/ton-connect-options.js +1 -0
  108. package/lib/esm/models/wallet/account.js +1 -0
  109. package/lib/esm/models/wallet/index.js +1 -0
  110. package/lib/esm/models/wallet/wallet-connection-source.js +3 -0
  111. package/lib/esm/models/wallet/wallet-info.js +3 -0
  112. package/lib/esm/models/wallet/wallet.js +1 -0
  113. package/lib/esm/parsers/connect-errors-parser.js +23 -0
  114. package/lib/esm/parsers/rpc-parser.js +5 -0
  115. package/lib/esm/parsers/send-transaction-parser.js +31 -0
  116. package/lib/esm/provider/bridge/bridge-gateway.js +105 -0
  117. package/lib/esm/provider/bridge/bridge-provider.js +140 -0
  118. package/lib/esm/provider/bridge/models/bridge-connection.js +1 -0
  119. package/lib/esm/provider/bridge/models/bridge-incomming-message.js +1 -0
  120. package/lib/esm/provider/bridge/models/bridge-session-raw.js +1 -0
  121. package/lib/esm/provider/bridge/models/bridge-session.js +1 -0
  122. package/lib/esm/provider/injected/injected-provider.js +121 -0
  123. package/lib/esm/provider/injected/models/injected-wallet-api.js +1 -0
  124. package/lib/esm/provider/provider.js +1 -0
  125. package/lib/esm/resources/protocol.js +1 -0
  126. package/lib/esm/storage/bridge-connection-storage.js +96 -0
  127. package/lib/esm/storage/default-storage.js +35 -0
  128. package/lib/esm/storage/http-bridge-gateway-storage.js +34 -0
  129. package/lib/esm/storage/models/storage.interface.js +1 -0
  130. package/lib/esm/ton-connect.interface.js +1 -0
  131. package/lib/esm/ton-connect.js +252 -0
  132. package/lib/esm/utils/address.js +83 -0
  133. package/lib/esm/utils/options.js +8 -0
  134. package/lib/esm/utils/types.js +1 -0
  135. package/lib/esm/utils/url.js +9 -0
  136. package/lib/esm/utils/web-api.js +20 -0
  137. package/lib/esm/wallets-list-manager.js +115 -0
  138. package/lib/types/errors/address/index.d.ts +1 -0
  139. package/lib/types/errors/address/wrong-address.error.d.ts +4 -0
  140. package/lib/types/errors/binary/base64-encode.error.d.ts +4 -0
  141. package/lib/types/errors/binary/index.d.ts +2 -0
  142. package/lib/types/errors/binary/parse-hex.error.d.ts +4 -0
  143. package/lib/{errors → types/errors}/dapp/dapp-metadata.error.d.ts +0 -0
  144. package/lib/{errors → types/errors}/index.d.ts +2 -0
  145. package/lib/types/errors/protocol/events/connect/index.d.ts +1 -0
  146. package/lib/{errors → types/errors}/protocol/events/connect/manifest-content-error.error.d.ts +0 -0
  147. package/lib/{errors → types/errors}/protocol/events/connect/manifest-not-found.error.d.ts +0 -0
  148. package/lib/{errors → types/errors}/protocol/events/connect/user-rejects.error.d.ts +0 -0
  149. package/lib/types/errors/protocol/events/index.d.ts +1 -0
  150. package/lib/types/errors/protocol/index.d.ts +2 -0
  151. package/lib/{errors → types/errors}/protocol/responses/bad-request.error.d.ts +0 -0
  152. package/lib/types/errors/protocol/responses/index.d.ts +2 -0
  153. package/lib/{errors → types/errors}/protocol/responses/unknown-app.error.d.ts +0 -0
  154. package/lib/types/errors/storage/index.d.ts +1 -0
  155. package/lib/{errors → types/errors}/storage/localstorage-not-found.error.d.ts +0 -0
  156. package/lib/{errors → types/errors}/ton-connect.error.d.ts +0 -0
  157. package/lib/{errors → types/errors}/unknown.error.d.ts +0 -0
  158. package/lib/types/errors/wallet/index.d.ts +3 -0
  159. package/lib/{errors → types/errors}/wallet/wallet-already-connected.error.d.ts +0 -0
  160. package/lib/{errors → types/errors}/wallet/wallet-not-connected.error.d.ts +0 -0
  161. package/lib/{errors → types/errors}/wallet/wallet-not-injected.error.d.ts +0 -0
  162. package/lib/{errors → types/errors}/wallet/wallet-not-support-feature.error.d.ts +0 -0
  163. package/lib/{errors → types/errors}/wallets-manager/fetch-wallets.error.d.ts +0 -0
  164. package/lib/types/errors/wallets-manager/index.d.ts +1 -0
  165. package/lib/{index.d.ts → types/index.d.ts} +1 -0
  166. package/lib/{models → types/models}/dapp/dapp-metadata.d.ts +0 -0
  167. package/lib/{models → types/models}/index.d.ts +0 -0
  168. package/lib/types/models/methods/connect/connect-additional-request.d.ts +6 -0
  169. package/lib/{models → types/models}/methods/connect/index.d.ts +0 -0
  170. package/lib/types/models/methods/index.d.ts +2 -0
  171. package/lib/{models → types/models}/methods/send-transaction/index.d.ts +0 -1
  172. package/lib/{models → types/models}/methods/send-transaction/send-transaction-request.d.ts +0 -0
  173. package/lib/{models → types/models}/methods/send-transaction/send-transaction-response.d.ts +0 -0
  174. package/lib/{models → types/models}/ton-connect-options.d.ts +0 -0
  175. package/lib/{models → types/models}/wallet/account.d.ts +0 -0
  176. package/lib/{models → types/models}/wallet/index.d.ts +0 -0
  177. package/lib/{models → types/models}/wallet/wallet-connection-source.d.ts +0 -0
  178. package/lib/{models → types/models}/wallet/wallet-info.d.ts +14 -7
  179. package/lib/{models → types/models}/wallet/wallet.d.ts +0 -0
  180. package/lib/{parsers → types/parsers}/connect-errors-parser.d.ts +0 -0
  181. package/lib/{parsers → types/parsers}/rpc-parser.d.ts +0 -0
  182. package/lib/{parsers → types/parsers}/send-transaction-parser.d.ts +2 -2
  183. package/lib/{provider → types/provider}/bridge/bridge-gateway.d.ts +1 -0
  184. package/lib/{provider → types/provider}/bridge/bridge-provider.d.ts +0 -0
  185. package/lib/{provider → types/provider}/bridge/models/bridge-connection.d.ts +0 -0
  186. package/lib/{provider → types/provider}/bridge/models/bridge-incomming-message.d.ts +0 -0
  187. package/lib/{provider → types/provider}/bridge/models/bridge-session-raw.d.ts +0 -0
  188. package/lib/{provider → types/provider}/bridge/models/bridge-session.d.ts +0 -0
  189. package/lib/{provider → types/provider}/injected/injected-provider.d.ts +0 -0
  190. package/lib/{provider → types/provider}/injected/models/injected-wallet-api.d.ts +0 -0
  191. package/lib/{provider → types/provider}/provider.d.ts +0 -0
  192. package/lib/types/resources/protocol.d.ts +1 -0
  193. package/lib/{storage → types/storage}/bridge-connection-storage.d.ts +0 -0
  194. package/lib/{storage → types/storage}/default-storage.d.ts +0 -0
  195. package/lib/{storage → types/storage}/http-bridge-gateway-storage.d.ts +0 -0
  196. package/lib/{storage → types/storage}/models/storage.interface.d.ts +0 -0
  197. package/lib/{ton-connect.d.ts → types/ton-connect.d.ts} +1 -3
  198. package/lib/{ton-connect.interface.d.ts → types/ton-connect.interface.d.ts} +1 -3
  199. package/lib/types/utils/address.d.ts +1 -0
  200. package/lib/{utils → types/utils}/options.d.ts +0 -0
  201. package/lib/{utils → types/utils}/types.d.ts +0 -0
  202. package/lib/{utils → types/utils}/url.d.ts +0 -0
  203. package/lib/{utils → types/utils}/web-api.d.ts +0 -0
  204. package/lib/{wallets-list-manager.d.ts → types/wallets-list-manager.d.ts} +0 -0
  205. package/package.json +15 -6
  206. package/lib/models/methods/connect/connect-additional-request.d.ts +0 -15
  207. package/lib/models/methods/send-transaction/send-transaction-options.d.ts +0 -11
  208. package/lib/models/methods/send-transaction/send-transaction-options.js +0 -2
  209. package/lib/resources/protocol.json +0 -3
@@ -0,0 +1,11 @@
1
+ import { TonConnectError } from "../../../ton-connect.error";
2
+ /**
3
+ * Thrown when wallet can't get manifest by passed manifestUrl.
4
+ */
5
+ export class ManifestNotFoundError extends TonConnectError {
6
+ constructor(message) {
7
+ super(message || '' + ManifestNotFoundError.additionalMessage);
8
+ Object.setPrototypeOf(this, ManifestNotFoundError.prototype);
9
+ }
10
+ }
11
+ ManifestNotFoundError.additionalMessage = '\nManifest not found. Make sure you added `tonconnect-manifest.json` to the root of your app or passed correct manifestUrl. See more https://github.com/ton-connect/docs/blob/main/requests-responses.md#app-manifest';
@@ -0,0 +1,10 @@
1
+ import { TonConnectError } from "../../../ton-connect.error";
2
+ /**
3
+ * Thrown when user rejects the action in the wallet.
4
+ */
5
+ export class UserRejectsError extends TonConnectError {
6
+ constructor(...args) {
7
+ super(...args);
8
+ Object.setPrototypeOf(this, UserRejectsError.prototype);
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ import { TonConnectError } from "../../ton-connect.error";
2
+ /**
3
+ * Thrown when request to the wallet contains errors.
4
+ */
5
+ export class BadRequestError extends TonConnectError {
6
+ constructor(...args) {
7
+ super(...args);
8
+ Object.setPrototypeOf(this, BadRequestError.prototype);
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ import { TonConnectError } from "../../ton-connect.error";
2
+ /**
3
+ * Thrown when app tries to send rpc request to the injected wallet while not connected.
4
+ */
5
+ export class UnknownAppError extends TonConnectError {
6
+ constructor(...args) {
7
+ super(...args);
8
+ Object.setPrototypeOf(this, UnknownAppError.prototype);
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ import { TonConnectError } from "../ton-connect.error";
2
+ /**
3
+ * Thrown when `Storage` was not specified in the `DappMetadata` and default `localStorage` was not detected in the environment.
4
+ */
5
+ export class LocalstorageNotFoundError extends TonConnectError {
6
+ constructor(...args) {
7
+ super(...args);
8
+ Object.setPrototypeOf(this, LocalstorageNotFoundError.prototype);
9
+ }
10
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Base class for TonConnect errors. You can check if the error was triggered by the @tonconnect/sdk using `err instanceof TonConnectError`.
3
+ */
4
+ export class TonConnectError extends Error {
5
+ constructor(message, options) {
6
+ if (message) {
7
+ message = TonConnectError.prefix + ' ' + message;
8
+ }
9
+ super(message, options);
10
+ Object.setPrototypeOf(this, TonConnectError.prototype);
11
+ }
12
+ }
13
+ TonConnectError.prefix = '[TON_CONNECT_SDK_ERROR]';
@@ -0,0 +1,10 @@
1
+ import { TonConnectError } from "./ton-connect.error";
2
+ /**
3
+ * Unhanded unknown error.
4
+ */
5
+ export class UnknownError extends TonConnectError {
6
+ constructor(...args) {
7
+ super(...args);
8
+ Object.setPrototypeOf(this, UnknownError.prototype);
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ import { TonConnectError } from "../ton-connect.error";
2
+ /**
3
+ * Thrown when wallet connection called but wallet already connected. To avoid the error, disconnect the wallet before doing a new connection.
4
+ */
5
+ export class WalletAlreadyConnectedError extends TonConnectError {
6
+ constructor(...args) {
7
+ super(...args);
8
+ Object.setPrototypeOf(this, WalletAlreadyConnectedError.prototype);
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ import { TonConnectError } from "../ton-connect.error";
2
+ /**
3
+ * Thrown when send transaction or other protocol methods called while wallet is not connected.
4
+ */
5
+ export class WalletNotConnectedError extends TonConnectError {
6
+ constructor(...args) {
7
+ super(...args);
8
+ Object.setPrototypeOf(this, WalletNotConnectedError.prototype);
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ import { TonConnectError } from "../ton-connect.error";
2
+ /**
3
+ * Thrown when there is an attempt to connect to the injected wallet while it is not exists in the webpage.
4
+ */
5
+ export class WalletNotInjectedError extends TonConnectError {
6
+ constructor(...args) {
7
+ super(...args);
8
+ Object.setPrototypeOf(this, WalletNotInjectedError.prototype);
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ import { TonConnectError } from "../ton-connect.error";
2
+ /**
3
+ * Thrown when wallet doesn't support requested feature method.
4
+ */
5
+ export class WalletNotSupportFeatureError extends TonConnectError {
6
+ constructor(...args) {
7
+ super(...args);
8
+ Object.setPrototypeOf(this, WalletNotSupportFeatureError.prototype);
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ import { TonConnectError } from "../ton-connect.error";
2
+ /**
3
+ * Thrown when an error occurred while fetching the wallets list.
4
+ */
5
+ export class FetchWalletsError extends TonConnectError {
6
+ constructor(...args) {
7
+ super(...args);
8
+ Object.setPrototypeOf(this, FetchWalletsError.prototype);
9
+ }
10
+ }
@@ -0,0 +1,6 @@
1
+ export * from './ton-connect';
2
+ export * from './models';
3
+ export * from './errors';
4
+ export { TonConnect as default } from './ton-connect';
5
+ export { CHAIN } from '@tonconnect/protocol';
6
+ export { toUserFriendlyAddress } from './utils/address';
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export * from './wallet';
2
+ export * from './methods';
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export { isWalletInfoInjected } from './wallet-info';
@@ -0,0 +1,3 @@
1
+ export function isWalletConnectionSourceJS(value) {
2
+ return 'jsBridgeKey' in value;
3
+ }
@@ -0,0 +1,3 @@
1
+ export function isWalletInfoInjected(value) {
2
+ return 'jsBridgeKey' in value;
3
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ import { BadRequestError, UnknownAppError, UserRejectsError } from "../errors";
2
+ import { ManifestContentErrorError } from "../errors/protocol/events/connect/manifest-content-error.error";
3
+ import { ManifestNotFoundError } from "../errors/protocol/events/connect/manifest-not-found.error";
4
+ import { UnknownError } from "../errors/unknown.error";
5
+ import { CONNECT_EVENT_ERROR_CODES } from '@tonconnect/protocol';
6
+ const connectEventErrorsCodes = {
7
+ [CONNECT_EVENT_ERROR_CODES.UNKNOWN_ERROR]: UnknownError,
8
+ [CONNECT_EVENT_ERROR_CODES.USER_REJECTS_ERROR]: UserRejectsError,
9
+ [CONNECT_EVENT_ERROR_CODES.BAD_REQUEST_ERROR]: BadRequestError,
10
+ [CONNECT_EVENT_ERROR_CODES.UNKNOWN_APP_ERROR]: UnknownAppError,
11
+ [CONNECT_EVENT_ERROR_CODES.MANIFEST_NOT_FOUND_ERROR]: ManifestNotFoundError,
12
+ [CONNECT_EVENT_ERROR_CODES.MANIFEST_CONTENT_ERROR]: ManifestContentErrorError
13
+ };
14
+ class ConnectErrorsParser {
15
+ parseError(error) {
16
+ let ErrorConstructor = UnknownError;
17
+ if (error.code in connectEventErrorsCodes) {
18
+ ErrorConstructor = connectEventErrorsCodes[error.code] || UnknownError;
19
+ }
20
+ return new ErrorConstructor(error.message);
21
+ }
22
+ }
23
+ export const connectErrorsParser = new ConnectErrorsParser();
@@ -0,0 +1,5 @@
1
+ export class RpcParser {
2
+ isError(response) {
3
+ return 'error' in response;
4
+ }
5
+ }
@@ -0,0 +1,31 @@
1
+ import { SEND_TRANSACTION_ERROR_CODES } from '@tonconnect/protocol';
2
+ import { BadRequestError, UnknownAppError, UserRejectsError } from "../errors";
3
+ import { UnknownError } from "../errors/unknown.error";
4
+ import { RpcParser } from "./rpc-parser";
5
+ const sendTransactionErrors = {
6
+ [SEND_TRANSACTION_ERROR_CODES.UNKNOWN_ERROR]: UnknownError,
7
+ [SEND_TRANSACTION_ERROR_CODES.USER_REJECTS_ERROR]: UserRejectsError,
8
+ [SEND_TRANSACTION_ERROR_CODES.BAD_REQUEST_ERROR]: BadRequestError,
9
+ [SEND_TRANSACTION_ERROR_CODES.UNKNOWN_APP_ERROR]: UnknownAppError
10
+ };
11
+ class SendTransactionParser extends RpcParser {
12
+ convertToRpcRequest(request) {
13
+ return {
14
+ method: 'sendTransaction',
15
+ params: [JSON.stringify(request)]
16
+ };
17
+ }
18
+ parseAndThrowError(response) {
19
+ let ErrorConstructor = UnknownError;
20
+ if (response.error.code in sendTransactionErrors) {
21
+ ErrorConstructor = sendTransactionErrors[response.error.code] || UnknownError;
22
+ }
23
+ throw new ErrorConstructor(response.error.message);
24
+ }
25
+ convertFromRpcResponse(rpcResponse) {
26
+ return {
27
+ boc: rpcResponse.result
28
+ };
29
+ }
30
+ }
31
+ export const sendTransactionParser = new SendTransactionParser();
@@ -0,0 +1,105 @@
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 { Base64, isNode } from '@tonconnect/protocol';
11
+ import { TonConnectError } from "../../errors";
12
+ import { HttpBridgeGatewayStorage } from "../../storage/http-bridge-gateway-storage";
13
+ import { addPathToUrl } from "../../utils/url";
14
+ if (isNode()) {
15
+ try {
16
+ eval("global.EventSource = require('eventsource')");
17
+ eval("global.fetch = require('node-fetch')");
18
+ }
19
+ catch (err) {
20
+ console.error(err);
21
+ }
22
+ }
23
+ export class BridgeGateway {
24
+ constructor(storage, bridgeUrl, sessionId, listener, errorsListener) {
25
+ this.bridgeUrl = bridgeUrl;
26
+ this.sessionId = sessionId;
27
+ this.listener = listener;
28
+ this.errorsListener = errorsListener;
29
+ this.ssePath = 'events';
30
+ this.postPath = 'message';
31
+ this.heartbeatMessage = 'heartbeat';
32
+ this.defaultTtl = 300;
33
+ this.isClosed = false;
34
+ this.bridgeGatewayStorage = new HttpBridgeGatewayStorage(storage);
35
+ }
36
+ registerSession() {
37
+ return __awaiter(this, void 0, void 0, function* () {
38
+ const url = new URL(addPathToUrl(this.bridgeUrl, this.ssePath));
39
+ url.searchParams.append('client_id', this.sessionId);
40
+ const lastEventId = yield this.bridgeGatewayStorage.getLastEventId();
41
+ if (lastEventId) {
42
+ url.searchParams.append('last_event_id', lastEventId);
43
+ }
44
+ this.eventSource = new EventSource(url.toString());
45
+ return new Promise((resolve, reject) => {
46
+ this.eventSource.onerror = reject;
47
+ this.eventSource.onopen = () => {
48
+ this.eventSource.onerror = this.errorsHandler.bind(this);
49
+ this.eventSource.onmessage = this.messagesHandler.bind(this);
50
+ resolve();
51
+ };
52
+ });
53
+ });
54
+ }
55
+ send(message, receiver, ttl) {
56
+ return __awaiter(this, void 0, void 0, function* () {
57
+ const url = new URL(addPathToUrl(this.bridgeUrl, this.postPath));
58
+ url.searchParams.append('client_id', this.sessionId);
59
+ url.searchParams.append('to', receiver);
60
+ url.searchParams.append('ttl', (ttl || this.defaultTtl).toString());
61
+ yield fetch(url, {
62
+ method: 'post',
63
+ body: Base64.encode(message)
64
+ });
65
+ });
66
+ }
67
+ close() {
68
+ var _a;
69
+ this.isClosed = true;
70
+ (_a = this.eventSource) === null || _a === void 0 ? void 0 : _a.close();
71
+ }
72
+ errorsHandler(e) {
73
+ var _a, _b;
74
+ if (!this.isClosed) {
75
+ if (((_a = this.eventSource) === null || _a === void 0 ? void 0 : _a.readyState) === EventSource.CLOSED) {
76
+ this.eventSource.close();
77
+ this.registerSession();
78
+ return;
79
+ }
80
+ if (((_b = this.eventSource) === null || _b === void 0 ? void 0 : _b.readyState) === EventSource.CONNECTING) {
81
+ console.debug('[TON_CONNET_SDK_ERROR]: Bridge error', JSON.stringify(e));
82
+ return;
83
+ }
84
+ this.errorsListener(e);
85
+ }
86
+ }
87
+ messagesHandler(e) {
88
+ return __awaiter(this, void 0, void 0, function* () {
89
+ if (e.data === this.heartbeatMessage) {
90
+ return;
91
+ }
92
+ yield this.bridgeGatewayStorage.storeLastEventId(e.lastEventId);
93
+ if (!this.isClosed) {
94
+ let bridgeIncomingMessage;
95
+ try {
96
+ bridgeIncomingMessage = JSON.parse(e.data);
97
+ }
98
+ catch (e) {
99
+ throw new TonConnectError(`Bridge message parse failed, message ${e.data}`);
100
+ }
101
+ this.listener(bridgeIncomingMessage);
102
+ }
103
+ });
104
+ }
105
+ }
@@ -0,0 +1,140 @@
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 { Base64, SessionCrypto, hexToByteArray } from '@tonconnect/protocol';
11
+ import { TonConnectError } from "../../errors/ton-connect.error";
12
+ import { BridgeGateway } from "./bridge-gateway";
13
+ import { BridgeConnectionStorage } from "../../storage/bridge-connection-storage";
14
+ import { PROTOCOL_VERSION } from "../../resources/protocol";
15
+ export class BridgeProvider {
16
+ constructor(storage, walletConnectionSource) {
17
+ this.storage = storage;
18
+ this.walletConnectionSource = walletConnectionSource;
19
+ this.type = 'http';
20
+ this.pendingRequests = new Map();
21
+ this.nextRequestId = 0;
22
+ this.session = null;
23
+ this.bridge = null;
24
+ this.listeners = [];
25
+ this.connectionStorage = new BridgeConnectionStorage(storage);
26
+ }
27
+ static fromStorage(storage) {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ const bridgeConnectionStorage = new BridgeConnectionStorage(storage);
30
+ const connection = yield bridgeConnectionStorage.getHttpConnection();
31
+ return new BridgeProvider(storage, connection.session.walletConnectionSource);
32
+ });
33
+ }
34
+ connect(message) {
35
+ var _a;
36
+ (_a = this.bridge) === null || _a === void 0 ? void 0 : _a.close();
37
+ const sessionCrypto = new SessionCrypto();
38
+ this.session = {
39
+ sessionCrypto,
40
+ walletConnectionSource: this.walletConnectionSource
41
+ };
42
+ this.bridge = new BridgeGateway(this.storage, this.walletConnectionSource.bridgeUrl, sessionCrypto.sessionId, this.gatewayListener.bind(this), this.gatewayErrorsListener.bind(this));
43
+ this.bridge.registerSession();
44
+ return this.generateUniversalLink(message);
45
+ }
46
+ restoreConnection() {
47
+ var _a;
48
+ return __awaiter(this, void 0, void 0, function* () {
49
+ (_a = this.bridge) === null || _a === void 0 ? void 0 : _a.close();
50
+ const storedConnection = yield this.connectionStorage.getHttpConnection();
51
+ if (!storedConnection) {
52
+ return;
53
+ }
54
+ this.session = storedConnection.session;
55
+ this.bridge = new BridgeGateway(this.storage, this.walletConnectionSource.bridgeUrl, storedConnection.session.sessionCrypto.sessionId, this.gatewayListener.bind(this), this.gatewayErrorsListener.bind(this));
56
+ yield this.bridge.registerSession();
57
+ this.listeners.forEach(listener => listener(storedConnection.connectEvent));
58
+ });
59
+ }
60
+ sendRequest(request) {
61
+ return new Promise((resolve, reject) => {
62
+ const id = this.nextRequestId;
63
+ this.nextRequestId++;
64
+ if (!this.bridge || !this.session || !('walletPublicKey' in this.session)) {
65
+ throw new TonConnectError('Trying to send bridge request without session');
66
+ }
67
+ const encodedRequest = this.session.sessionCrypto.encrypt(JSON.stringify(Object.assign(Object.assign({}, request), { id })), hexToByteArray(this.session.walletPublicKey));
68
+ this.bridge.send(encodedRequest, this.session.walletPublicKey).catch(reject);
69
+ this.pendingRequests.set(id.toString(), resolve);
70
+ });
71
+ }
72
+ closeConnection() {
73
+ var _a;
74
+ (_a = this.bridge) === null || _a === void 0 ? void 0 : _a.close();
75
+ this.listeners = [];
76
+ }
77
+ disconnect() {
78
+ var _a;
79
+ (_a = this.bridge) === null || _a === void 0 ? void 0 : _a.close();
80
+ this.listeners = [];
81
+ return this.removeBridgeAndSession();
82
+ }
83
+ listen(callback) {
84
+ this.listeners.push(callback);
85
+ return () => (this.listeners = this.listeners.filter(listener => listener !== callback));
86
+ }
87
+ gatewayListener(bridgeIncomingMessage) {
88
+ return __awaiter(this, void 0, void 0, function* () {
89
+ const walletMessage = JSON.parse(this.session.sessionCrypto.decrypt(Base64.decode(bridgeIncomingMessage.message).toUint8Array(), hexToByteArray(bridgeIncomingMessage.from)));
90
+ if (!('event' in walletMessage)) {
91
+ const id = walletMessage.id.toString();
92
+ const resolve = this.pendingRequests.get(id);
93
+ if (!resolve) {
94
+ throw new TonConnectError(`Response id ${id} doesn't match any request's id`);
95
+ }
96
+ resolve(walletMessage);
97
+ this.pendingRequests.delete(id);
98
+ return;
99
+ }
100
+ if (walletMessage.event === 'connect') {
101
+ yield this.updateSession(walletMessage, bridgeIncomingMessage.from);
102
+ }
103
+ if (walletMessage.event === 'disconnect') {
104
+ yield this.removeBridgeAndSession();
105
+ }
106
+ this.listeners.forEach(listener => listener(walletMessage));
107
+ });
108
+ }
109
+ gatewayErrorsListener(e) {
110
+ return __awaiter(this, void 0, void 0, function* () {
111
+ throw new TonConnectError(`Bridge error ${JSON.stringify(e)}`);
112
+ });
113
+ }
114
+ updateSession(connectEvent, walletPublicKey) {
115
+ return __awaiter(this, void 0, void 0, function* () {
116
+ this.session = Object.assign(Object.assign({}, this.session), { walletPublicKey });
117
+ const tonAddrItem = connectEvent.payload.items.find(item => item.name === 'ton_addr');
118
+ const connectEventToSave = Object.assign(Object.assign({}, connectEvent), { payload: Object.assign(Object.assign({}, connectEvent.payload), { items: [tonAddrItem] }) });
119
+ yield this.connectionStorage.storeConnection({
120
+ type: 'http',
121
+ session: this.session,
122
+ connectEvent: connectEventToSave
123
+ });
124
+ });
125
+ }
126
+ removeBridgeAndSession() {
127
+ return __awaiter(this, void 0, void 0, function* () {
128
+ this.session = null;
129
+ this.bridge = null;
130
+ yield this.connectionStorage.removeConnection();
131
+ });
132
+ }
133
+ generateUniversalLink(message) {
134
+ const url = new URL(this.walletConnectionSource.universalLink);
135
+ url.searchParams.append('v', PROTOCOL_VERSION.toString());
136
+ url.searchParams.append('id', this.session.sessionCrypto.sessionId);
137
+ url.searchParams.append('r', JSON.stringify(message));
138
+ return url.toString();
139
+ }
140
+ }
@@ -0,0 +1 @@
1
+ export {};