@tonconnect/sdk 3.4.0-beta.7 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tonconnect-sdk.min.js","mappings":"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","sources":["webpack://TonConnectSDK/./src/errors/address/wrong-address.error.ts","webpack://TonConnectSDK/./src/utils/uuid/regex.ts","webpack://TonConnectSDK/./src/errors/protocol/events/connect/manifest-content-error.error.ts","webpack://TonConnectSDK/./src/index.ts","webpack://TonConnectSDK/./src/parsers/sign-data-parser.ts","webpack://TonConnectSDK/./src/environment/default-environment.ts","webpack://TonConnectSDK/./src/errors/storage/localstorage-not-found.error.ts","webpack://TonConnectSDK/./src/errors/wallet/wallet-already-connected.error.ts","webpack://TonConnectSDK/./src/utils/create-abort-controller.ts","webpack://TonConnectSDK/./src/tracker/types.ts","webpack://TonConnectSDK/./src/errors/wallet/wallet-missing-required-features.error.ts","webpack://TonConnectSDK/./src/errors/wallet/wallet-wrong-network.error.ts","webpack://TonConnectSDK/./src/analytics/analytics-manager.ts","webpack://TonConnectSDK/./src/utils/log.ts","webpack://TonConnectSDK/./src/errors/ton-connect.error.ts","webpack://TonConnectSDK/./src/errors/protocol/responses/unknown-app.error.ts","webpack://TonConnectSDK/./src/utils/uuid/v7.ts","webpack://TonConnectSDK/./src/utils/base64.ts","webpack://TonConnectSDK/./src/errors/dapp/dapp-metadata.error.ts","webpack://TonConnectSDK/./src/utils/url.ts","webpack://TonConnectSDK/./src/resources/protocol.ts","webpack://TonConnectSDK/./src/errors/protocol/events/connect/manifest-not-found.error.ts","webpack://TonConnectSDK/./src/ton-connect.ts","webpack://TonConnectSDK/./src/provider/injected/injected-provider.ts","webpack://TonConnectSDK/./src/errors/index.ts","webpack://TonConnectSDK/./src/models/index.ts","webpack://TonConnectSDK/./src/utils/types.ts","webpack://TonConnectSDK/./src/utils/feature-support.ts","webpack://TonConnectSDK/./src/errors/protocol/responses/index.ts","webpack://TonConnectSDK/./src/errors/binary/parse-hex.error.ts","webpack://TonConnectSDK/./src/provider/injected/models/injected-wallet-api.ts","webpack://TonConnectSDK/./src/constants/version.ts","webpack://TonConnectSDK/./src/utils/timeout.ts","webpack://TonConnectSDK/./src/errors/wallet/wallet-not-injected.error.ts","webpack://TonConnectSDK/./src/storage/bridge-connection-storage.ts","webpack://TonConnectSDK/./src/provider/wallet-connect/wallet-connect-provider.ts","webpack://TonConnectSDK/./src/utils/call-for-success.ts","webpack://TonConnectSDK/./src/errors/protocol/events/connect/user-rejects.error.ts","webpack://TonConnectSDK/./src/errors/binary/index.ts","webpack://TonConnectSDK/./src/errors/address/index.ts","webpack://TonConnectSDK/./src/parsers/rpc-parser.ts","webpack://TonConnectSDK/./src/provider/wallet-connect/initialize.ts","webpack://TonConnectSDK/./src/utils/uuid/validate.ts","webpack://TonConnectSDK/./src/models/wallet/wallet-connection-source.ts","webpack://TonConnectSDK/./src/tracker/ton-connect-tracker.ts","webpack://TonConnectSDK/./src/errors/unknown.error.ts","webpack://TonConnectSDK/./src/analytics/sdk-actions-adapter.ts","webpack://TonConnectSDK/./src/utils/web-api.ts","webpack://TonConnectSDK/./src/errors/wallet/wallet-not-support-feature.error.ts","webpack://TonConnectSDK/./src/errors/protocol/events/index.ts","webpack://TonConnectSDK/./src/storage/models/in-memory-storage.ts","webpack://TonConnectSDK/../../node_modules/.pnpm/tweetnacl-util@0.15.1/node_modules/tweetnacl-util/nacl-util.js","webpack://TonConnectSDK/./src/errors/wallet/index.ts","webpack://TonConnectSDK/./src/storage/http-bridge-gateway-storage.ts","webpack://TonConnectSDK/./src/storage/default-storage.ts","webpack://TonConnectSDK/./src/utils/qa-mode.ts","webpack://TonConnectSDK/./src/models/methods/index.ts","webpack://TonConnectSDK/./src/utils/uuid/rng-browser.ts","webpack://TonConnectSDK/./src/utils/uuid/index.ts","webpack://TonConnectSDK/./src/provider/bridge/bridge-provider.ts","webpack://TonConnectSDK/./src/utils/delay.ts","webpack://TonConnectSDK/./src/tracker/browser-event-dispatcher.ts","webpack://TonConnectSDK/./src/errors/protocol/events/connect/index.ts","webpack://TonConnectSDK/./src/parsers/connect-errors-parser.ts","webpack://TonConnectSDK/./src/analytics/utils.ts","webpack://TonConnectSDK/../protocol/lib/cjs/index.cjs","webpack://TonConnectSDK/./src/resources/fallback-wallets-list.ts","webpack://TonConnectSDK/./src/errors/protocol/responses/bad-request.error.ts","webpack://TonConnectSDK/./src/models/wallet/wallet-info.ts","webpack://TonConnectSDK/./src/errors/protocol/index.ts","webpack://TonConnectSDK/./src/errors/wallets-manager/index.ts","webpack://TonConnectSDK/./src/provider/bridge/bridge-gateway.ts","webpack://TonConnectSDK/./src/utils/address.ts","webpack://TonConnectSDK/./src/errors/wallet/wallet-not-connected.error.ts","webpack://TonConnectSDK/./src/errors/wallets-manager/fetch-wallets.error.ts","webpack://TonConnectSDK/./src/utils/promise.ts","webpack://TonConnectSDK/./src/errors/storage/index.ts","webpack://TonConnectSDK/../../node_modules/.pnpm/tweetnacl@1.0.3/node_modules/tweetnacl/nacl-fast.js","webpack://TonConnectSDK/./src/provider/bridge/models/bridge-connection.ts","webpack://TonConnectSDK/./src/utils/uuid/stringify.ts","webpack://TonConnectSDK/./src/utils/resource.ts","webpack://TonConnectSDK/./src/parsers/send-transaction-parser.ts","webpack://TonConnectSDK/./src/validation/schemas.ts","webpack://TonConnectSDK/./src/wallets-list-manager.ts","webpack://TonConnectSDK/./src/models/wallet/index.ts","webpack://TonConnectSDK/webpack/bootstrap","webpack://TonConnectSDK/webpack/startup"],"sourcesContent":["import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when passed address is in incorrect format.\n */\nexport class WrongAddressError extends TonConnectError {\n protected get info(): string {\n return 'Passed address is in incorrect format.';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, WrongAddressError.prototype);\n }\n}\n","/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2010-2020 Robert Kieffer and other contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nexport const regex =\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when passed manifest contains errors.\n */\nexport class ManifestContentErrorError extends TonConnectError {\n protected get info(): string {\n return 'Passed `tonconnect-manifest.json` contains errors. Check format of your manifest. See more https://github.com/ton-connect/docs/blob/main/requests-responses.md#app-manifest';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, ManifestContentErrorError.prototype);\n }\n}\n","export * from './ton-connect';\nexport * from './models';\nexport * from './errors';\nexport { IStorage } from './storage/models/storage.interface';\nexport { TonConnect as default } from './ton-connect';\nexport { WalletsListManager } from './wallets-list-manager';\nexport { ITonConnect } from './ton-connect.interface';\nexport type { AnalyticsSettings } from './models/ton-connect-options';\nexport type {\n EventDispatcher,\n RemoveTonConnectPrefix,\n AddTonConnectPrefix\n} from './tracker/event-dispatcher';\nexport {\n createConnectionStartedEvent,\n createConnectionErrorEvent,\n createConnectionCompletedEvent,\n createConnectionRestoringStartedEvent,\n createConnectionRestoringErrorEvent,\n createConnectionRestoringCompletedEvent,\n createDisconnectionEvent,\n createTransactionSentForSignatureEvent,\n createTransactionSigningFailedEvent,\n createTransactionSignedEvent,\n createDataSentForSignatureEvent,\n createDataSigningFailedEvent,\n createDataSignedEvent,\n createRequestVersionEvent,\n createResponseVersionEvent,\n createVersionInfo,\n createWalletModalOpenedEvent,\n createSelectedWalletEvent\n} from './tracker/types';\nexport type {\n AuthType,\n ConnectionInfo,\n ConnectionEvent,\n ConnectionStartedEvent,\n ConnectionCompletedEvent,\n ConnectionErrorEvent,\n ConnectionRestoringEvent,\n ConnectionRestoringErrorEvent,\n ConnectionRestoringStartedEvent,\n ConnectionRestoringCompletedEvent,\n DisconnectionEvent,\n TransactionInfo,\n TransactionFullInfo,\n TransactionMessage,\n TransactionFullMessage,\n TransactionSigningEvent,\n TransactionSignedEvent,\n TransactionSentForSignatureEvent,\n TransactionSigningFailedEvent,\n DataSigningEvent,\n DataSignedEvent,\n DataSentForSignatureEvent,\n DataSigningFailedEvent,\n SdkActionEvent,\n RequestVersionEvent,\n ResponseVersionEvent,\n WalletModalOpenedEvent,\n SelectedWalletEvent,\n VersionEvent,\n Version,\n WithoutVersion,\n SessionInfo\n} from './tracker/types';\nexport { BrowserEventDispatcher } from './tracker/browser-event-dispatcher';\nexport type { TonAddressItem, TonProofItem, ConnectItem } from '@tonconnect/protocol';\nexport {\n CHAIN,\n ConnectEventSuccess,\n ConnectItemReply,\n TonAddressItemReply,\n DeviceInfo,\n Feature,\n FeatureName,\n SendTransactionFeature,\n SendTransactionFeatureDeprecated,\n SignDataFeature,\n SignDataType,\n SignDataPayload,\n SignDataPayloadText,\n SignDataPayloadBinary,\n SignDataPayloadCell,\n TonProofItemReply,\n TonProofItemReplySuccess,\n TonProofItemReplyError,\n ConnectItemReplyError,\n SessionCrypto,\n KeyPair,\n CONNECT_ITEM_ERROR_CODES,\n CONNECT_EVENT_ERROR_CODES,\n SEND_TRANSACTION_ERROR_CODES,\n SIGN_DATA_ERROR_CODES\n} from '@tonconnect/protocol';\n\nexport { IEnvironment } from './environment/models/environment.interface';\nexport { TelegramUser } from './environment/models/telegram-user';\n\nexport { toUserFriendlyAddress } from './utils/address';\nexport { checkRequiredWalletFeatures } from './utils/feature-support';\nexport {\n isTelegramUrl,\n encodeTelegramUrlParameters,\n decodeTelegramUrlParameters,\n isConnectUrl\n} from './utils/url';\nexport { enableQaMode, isQaModeEnabled } from './utils/qa-mode';\nexport type { AnalyticsMode } from './analytics/analytics-manager';\n\nexport {\n initializeWalletConnect,\n isWalletConnectInitialized\n} from './provider/wallet-connect/initialize';\nexport {\n WalletConnectMetadata,\n WalletConnectOptions\n} from './provider/wallet-connect/models/wallet-connect-options';\n\nexport { Traceable, OptionalTraceable } from './utils/types';\n\nexport { UUIDv7 } from './utils/uuid';\nexport { Version7Options, UUIDTypes } from './utils/uuid/types';\nexport type { ChainId } from '@tonconnect/protocol';\n","import {\n CONNECT_EVENT_ERROR_CODES,\n SIGN_DATA_ERROR_CODES,\n SignDataPayload,\n SignDataRpcRequest,\n SignDataRpcResponseError,\n SignDataRpcResponseSuccess\n} from '@tonconnect/protocol';\nimport { BadRequestError, TonConnectError, UnknownAppError, UserRejectsError } from 'src/errors';\nimport { UnknownError } from 'src/errors/unknown.error';\nimport { SignDataResponse } from 'src/models/methods';\nimport { RpcParser } from 'src/parsers/rpc-parser';\nimport { WithoutId } from 'src/utils/types';\n\nconst signDataErrors: Partial<Record<CONNECT_EVENT_ERROR_CODES, typeof TonConnectError>> = {\n [SIGN_DATA_ERROR_CODES.UNKNOWN_ERROR]: UnknownError,\n [SIGN_DATA_ERROR_CODES.USER_REJECTS_ERROR]: UserRejectsError,\n [SIGN_DATA_ERROR_CODES.BAD_REQUEST_ERROR]: BadRequestError,\n [SIGN_DATA_ERROR_CODES.UNKNOWN_APP_ERROR]: UnknownAppError\n};\n\nclass SignDataParser extends RpcParser<'signData'> {\n convertToRpcRequest(payload: SignDataPayload): WithoutId<SignDataRpcRequest> {\n return {\n method: 'signData',\n params: [JSON.stringify(payload)]\n };\n }\n\n parseAndThrowError(response: WithoutId<SignDataRpcResponseError>): never {\n let ErrorConstructor: typeof TonConnectError = UnknownError;\n\n if (response.error.code in signDataErrors) {\n ErrorConstructor = signDataErrors[response.error.code] || UnknownError;\n }\n\n throw new ErrorConstructor(response.error.message);\n }\n\n convertFromRpcResponse(rpcResponse: WithoutId<SignDataRpcResponseSuccess>): SignDataResponse {\n return rpcResponse.result;\n }\n}\n\nexport const signDataParser = new SignDataParser();\n","import { IEnvironment } from 'src/environment/models/environment.interface';\n\nexport class DefaultEnvironment implements IEnvironment {\n getClientEnvironment() {\n return '';\n }\n\n getBrowser() {\n return '';\n }\n\n getLocale() {\n return '';\n }\n\n getPlatform() {\n return '';\n }\n\n getTelegramUser() {\n return undefined;\n }\n}\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when `Storage` was not specified in the `DappMetadata` and default `localStorage` was not detected in the Node.js environment.\n */\nexport class LocalstorageNotFoundError extends TonConnectError {\n protected get info(): string {\n return 'Storage was not specified in the `DappMetadata` and default `localStorage` was not detected in the environment.';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, LocalstorageNotFoundError.prototype);\n }\n}\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when wallet connection called but wallet already connected. To avoid the error, disconnect the wallet before doing a new connection.\n */\nexport class WalletAlreadyConnectedError extends TonConnectError {\n protected get info(): string {\n return 'Wallet connection called but wallet already connected. To avoid the error, disconnect the wallet before doing a new connection.';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, WalletAlreadyConnectedError.prototype);\n }\n}\n","/**\n * Creates an AbortController instance with an optional AbortSignal.\n *\n * @param {AbortSignal} [signal] - An optional AbortSignal to use for aborting the controller.\n * @returns {AbortController} - An instance of AbortController.\n */\nexport function createAbortController(signal?: AbortSignal): AbortController {\n const abortController = new AbortController();\n if (signal?.aborted) {\n abortController.abort();\n } else {\n signal?.addEventListener('abort', () => abortController.abort(), { once: true });\n }\n return abortController;\n}\n","import {\n CONNECT_EVENT_ERROR_CODES,\n ConnectItem,\n SEND_TRANSACTION_ERROR_CODES,\n SIGN_DATA_ERROR_CODES,\n SignDataPayload\n} from '@tonconnect/protocol';\nimport {\n SendTransactionRequest,\n SendTransactionResponse,\n SignDataResponse,\n Wallet\n} from 'src/models';\nimport { isTelegramUrl } from 'src/utils/url';\n\n/**\n * Request TON Connect UI version.\n */\nexport type RequestVersionEvent = {\n /**\n * Event type.\n */\n type: 'request-version';\n};\n\n/**\n * Create a request version event.\n */\nexport function createRequestVersionEvent(): RequestVersionEvent {\n return {\n type: 'request-version'\n };\n}\n\n/**\n * Response TON Connect UI version.\n */\nexport type ResponseVersionEvent = {\n /**\n * Event type.\n */\n type: 'response-version';\n /**\n * TON Connect UI version.\n */\n version: string;\n};\n\n/**\n * Create a response version event.\n * @param version\n */\nexport function createResponseVersionEvent(version: string): ResponseVersionEvent {\n return {\n type: 'response-version',\n version: version\n };\n}\n\n/**\n * Version events.\n */\nexport type VersionEvent = RequestVersionEvent | ResponseVersionEvent;\n\n/**\n * Version of the TON Connect SDK and TON Connect UI.\n */\nexport type Version = {\n /**\n * TON Connect SDK version.\n */\n ton_connect_sdk_lib: string | null;\n /**\n * TON Connect UI version.\n */\n ton_connect_ui_lib: string | null;\n};\n\nexport type SessionInfo = {\n clientId: string | null;\n walletId: string | null;\n};\n\n/**\n * Create a version info.\n * @param version\n */\nexport function createVersionInfo(version: Version): Version {\n return {\n ton_connect_sdk_lib: version.ton_connect_sdk_lib,\n ton_connect_ui_lib: version.ton_connect_ui_lib\n };\n}\n\n/**\n * Requested authentication type: 'ton_addr' or 'ton_proof'.\n */\nexport type AuthType = ConnectItem['name'];\n\n/**\n * Information about a connected wallet.\n */\nexport type ConnectionInfo = {\n /**\n * Connected wallet address.\n */\n wallet_address: string | null;\n /**\n * Connected wallet state init.\n */\n wallet_state_init: string | null;\n /**\n * Wallet type: 'tonkeeper', 'tonhub', etc.\n */\n wallet_type: string | null;\n /**\n * Wallet version.\n */\n wallet_version: string | null;\n /**\n * Requested authentication types.\n */\n auth_type: AuthType;\n /**\n * Custom data for the connection.\n */\n custom_data: {\n /**\n * Connected chain ID.\n */\n chain_id: string | null;\n /**\n * Wallet provider.\n */\n provider: 'http' | 'injected' | null;\n\n client_id: string | null;\n wallet_id: string | null;\n } & Version;\n};\n\n// eslint-disable-next-line complexity\nfunction createConnectionInfo(\n version: Version,\n wallet: Wallet | null,\n sessionInfo?: SessionInfo | null\n): ConnectionInfo {\n const isTonProof = wallet?.connectItems?.tonProof && 'proof' in wallet.connectItems.tonProof;\n const authType: AuthType = isTonProof ? 'ton_proof' : 'ton_addr';\n\n return {\n wallet_address: wallet?.account?.address ?? null,\n wallet_state_init: wallet?.account.walletStateInit ?? null,\n wallet_type: wallet?.device.appName ?? null,\n wallet_version: wallet?.device.appVersion ?? null,\n auth_type: authType,\n custom_data: {\n client_id: sessionInfo?.clientId ?? null,\n wallet_id: sessionInfo?.walletId ?? null,\n chain_id: wallet?.account?.chain ?? null,\n provider: wallet?.provider ?? null,\n ...createVersionInfo(version)\n }\n };\n}\n\n/**\n * Initial connection event when a user initiates a connection.\n */\nexport type ConnectionStartedEvent = {\n /**\n * Event type.\n */\n type: 'connection-started';\n /**\n * Custom data for the connection.\n */\n custom_data: Version;\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n};\n\n/**\n * Create a connection init event.\n */\nexport function createConnectionStartedEvent(\n version: Version,\n traceId?: string | null\n): ConnectionStartedEvent {\n return {\n type: 'connection-started',\n custom_data: createVersionInfo(version),\n trace_id: traceId ?? null\n };\n}\n\n/**\n * Successful connection event when a user successfully connected a wallet.\n */\nexport type ConnectionCompletedEvent = {\n /**\n * Event type.\n */\n type: 'connection-completed';\n /**\n * Connection success flag.\n */\n is_success: true;\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n} & ConnectionInfo;\n\n/**\n * Create a connection completed event.\n * @param version\n * @param wallet\n * @param sessionInfo\n * @param traceId\n */\nexport function createConnectionCompletedEvent(\n version: Version,\n wallet: Wallet | null,\n sessionInfo?: SessionInfo | null,\n traceId?: string | null\n): ConnectionCompletedEvent {\n return {\n type: 'connection-completed',\n is_success: true,\n trace_id: traceId ?? null,\n ...createConnectionInfo(version, wallet, sessionInfo)\n };\n}\n\n/**\n * Connection error event when a user cancels a connection or there is an error during the connection process.\n */\nexport type ConnectionErrorEvent = {\n /**\n * Event type.\n */\n type: 'connection-error';\n /**\n * Connection success flag.\n */\n is_success: false;\n /**\n * Reason for the error.\n */\n error_message: string;\n /**\n * Error code.\n */\n error_code: CONNECT_EVENT_ERROR_CODES | null;\n /**\n * Custom data for the connection.\n */\n custom_data: {\n client_id: string | null;\n wallet_id: string | null;\n } & Version;\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n};\n\n/**\n * Create a connection error event.\n * @param version\n * @param error_message\n * @param errorCode\n * @param sessionInfo\n * @param traceId\n */\nexport function createConnectionErrorEvent(\n version: Version,\n error_message: string,\n errorCode: CONNECT_EVENT_ERROR_CODES | void,\n sessionInfo?: SessionInfo | null,\n traceId?: string | null\n): ConnectionErrorEvent {\n return {\n type: 'connection-error',\n is_success: false,\n error_message: error_message,\n error_code: errorCode ?? null,\n trace_id: traceId ?? null,\n custom_data: {\n client_id: sessionInfo?.clientId ?? null,\n wallet_id: sessionInfo?.walletId ?? null,\n ...createVersionInfo(version)\n }\n };\n}\n\n/**\n * Connection events.\n */\nexport type ConnectionEvent =\n | ConnectionStartedEvent\n | ConnectionCompletedEvent\n | ConnectionErrorEvent;\n\n/**\n * Connection restoring started event when initiates a connection restoring process.\n */\nexport type ConnectionRestoringStartedEvent = {\n /**\n * Event type.\n */\n type: 'connection-restoring-started';\n /**\n * Custom data for the connection.\n */\n custom_data: Version;\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n};\n\n/**\n * Create a connection restoring started event.\n */\nexport function createConnectionRestoringStartedEvent(\n version: Version,\n traceId?: string | null\n): ConnectionRestoringStartedEvent {\n return {\n type: 'connection-restoring-started',\n custom_data: createVersionInfo(version),\n trace_id: traceId ?? null\n };\n}\n\n/**\n * Connection restoring completed event when successfully restored a connection.\n */\nexport type ConnectionRestoringCompletedEvent = {\n /**\n * Event type.\n */\n type: 'connection-restoring-completed';\n /**\n * Connection success flag.\n */\n is_success: true;\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n} & ConnectionInfo;\n\n/**\n * Create a connection restoring completed event.\n * @param version\n * @param wallet\n * @param sessionInfo\n * @param traceId\n */\nexport function createConnectionRestoringCompletedEvent(\n version: Version,\n wallet: Wallet | null,\n sessionInfo?: SessionInfo | null,\n traceId?: string | null\n): ConnectionRestoringCompletedEvent {\n return {\n type: 'connection-restoring-completed',\n is_success: true,\n trace_id: traceId ?? null,\n ...createConnectionInfo(version, wallet, sessionInfo)\n };\n}\n\n/**\n * Connection restoring error event when there is an error during the connection restoring process.\n */\nexport type ConnectionRestoringErrorEvent = {\n /**\n * Event type.\n */\n type: 'connection-restoring-error';\n /**\n * Connection success flag.\n */\n is_success: false;\n /**\n * Reason for the error.\n */\n error_message: string;\n /**\n * Custom data for the connection.\n */\n custom_data: Version;\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n};\n\n/**\n * Create a connection restoring error event.\n * @param version\n * @param errorMessage\n * @param traceId\n */\nexport function createConnectionRestoringErrorEvent(\n version: Version,\n errorMessage: string,\n traceId?: string | null\n): ConnectionRestoringErrorEvent {\n return {\n type: 'connection-restoring-error',\n is_success: false,\n error_message: errorMessage,\n trace_id: traceId ?? null,\n custom_data: createVersionInfo(version)\n };\n}\n\n/**\n * Connection restoring events.\n */\nexport type ConnectionRestoringEvent =\n | ConnectionRestoringStartedEvent\n | ConnectionRestoringCompletedEvent\n | ConnectionRestoringErrorEvent;\n\n/**\n * Transaction message.\n */\nexport type TransactionMessage = {\n /**\n * Recipient address.\n */\n address: string | null;\n /**\n * Transfer amount.\n */\n amount: string | null;\n};\n\n/**\n * Transaction message.\n */\nexport type TransactionFullMessage = {\n /**\n * Recipient address.\n */\n address: string | null;\n /**\n * Transfer amount.\n */\n amount: string | null;\n\n /**\n * Message payload\n */\n payload: string | null;\n\n /**\n * Message state init\n */\n state_init: string | null;\n};\n\n/**\n * Transaction information.\n */\nexport type TransactionInfo = {\n /**\n * Transaction validity time in unix timestamp.\n */\n valid_until: string | null;\n /**\n * Sender address.\n */\n from: string | null;\n /**\n * Transaction messages.\n */\n messages: TransactionMessage[];\n};\n\n/**\n * Transaction information.\n */\nexport type TransactionFullInfo = Omit<TransactionInfo, 'messages'> & {\n messages: TransactionFullMessage[];\n};\n\nfunction createTransactionInfo(\n wallet: Wallet | null,\n transaction: SendTransactionRequest\n): TransactionInfo {\n return {\n valid_until: String(transaction.validUntil) ?? null,\n from: transaction.from ?? wallet?.account?.address ?? null,\n messages: transaction.messages.map(message => ({\n address: message.address ?? null,\n amount: message.amount ?? null\n }))\n };\n}\n\nfunction createTransactionFullInfo(\n wallet: Wallet | null,\n transaction: SendTransactionRequest\n): TransactionFullInfo {\n return {\n valid_until: String(transaction.validUntil) ?? null,\n from: transaction.from ?? wallet?.account?.address ?? null,\n messages: transaction.messages.map(message => ({\n address: message.address ?? null,\n amount: message.amount ?? null,\n payload: message.payload ?? null,\n state_init: message.stateInit ?? null\n }))\n };\n}\n\n/**\n * Initial transaction event when a user initiates a transaction.\n */\nexport type TransactionSentForSignatureEvent = {\n /**\n * Event type.\n */\n type: 'transaction-sent-for-signature';\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n} & ConnectionInfo &\n TransactionInfo;\n\n/**\n * Create a transaction init event.\n * @param version\n * @param wallet\n * @param transaction\n * @param sessionInfo\n * @param traceId\n */\nexport function createTransactionSentForSignatureEvent(\n version: Version,\n wallet: Wallet | null,\n transaction: SendTransactionRequest,\n sessionInfo?: SessionInfo | null,\n traceId?: string | null\n): TransactionSentForSignatureEvent {\n return {\n type: 'transaction-sent-for-signature',\n trace_id: traceId ?? null,\n ...createConnectionInfo(version, wallet, sessionInfo),\n ...createTransactionInfo(wallet, transaction)\n };\n}\n\n/**\n * Transaction signed event when a user successfully signed a transaction.\n */\nexport type TransactionSignedEvent = {\n /**\n * Event type.\n */\n type: 'transaction-signed';\n /**\n * Connection success flag.\n */\n is_success: true;\n /**\n * Signed transaction.\n */\n signed_transaction: string;\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n} & ConnectionInfo &\n TransactionInfo;\n\n/**\n * Create a transaction signed event.\n * @param version\n * @param wallet\n * @param transaction\n * @param signedTransaction\n * @param sessionInfo\n * @param traceId\n */\nexport function createTransactionSignedEvent(\n version: Version,\n wallet: Wallet | null,\n transaction: SendTransactionRequest,\n signedTransaction: SendTransactionResponse,\n sessionInfo?: SessionInfo | null,\n traceId?: string | null\n): TransactionSignedEvent {\n return {\n type: 'transaction-signed',\n is_success: true,\n signed_transaction: signedTransaction.boc,\n trace_id: traceId ?? null,\n ...createConnectionInfo(version, wallet, sessionInfo),\n ...createTransactionInfo(wallet, transaction)\n };\n}\n\n/**\n * Transaction error event when a user cancels a transaction or there is an error during the transaction process.\n */\nexport type TransactionSigningFailedEvent = {\n /**\n * Event type.\n */\n type: 'transaction-signing-failed';\n /**\n * Connection success flag.\n */\n is_success: false;\n /**\n * Reason for the error.\n */\n error_message: string;\n /**\n * Error code.\n */\n error_code: SEND_TRANSACTION_ERROR_CODES | null;\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n} & ConnectionInfo &\n TransactionFullInfo;\n\n/**\n * Create a transaction error event.\n * @param version\n * @param wallet\n * @param transaction\n * @param errorMessage\n * @param errorCode\n * @param sessionInfo\n * @param traceId\n */\nexport function createTransactionSigningFailedEvent(\n version: Version,\n wallet: Wallet | null,\n transaction: SendTransactionRequest,\n errorMessage: string,\n errorCode: SEND_TRANSACTION_ERROR_CODES | void,\n sessionInfo?: SessionInfo | null,\n traceId?: string | null\n): TransactionSigningFailedEvent {\n return {\n type: 'transaction-signing-failed',\n is_success: false,\n error_message: errorMessage,\n error_code: errorCode ?? null,\n trace_id: traceId ?? null,\n ...createConnectionInfo(version, wallet, sessionInfo),\n ...createTransactionFullInfo(wallet, transaction)\n };\n}\n\n/**\n * Transaction events.\n */\nexport type TransactionSigningEvent =\n | TransactionSentForSignatureEvent\n | TransactionSignedEvent\n | TransactionSigningFailedEvent;\n\nexport type DataSentForSignatureEvent = {\n type: 'sign-data-request-initiated';\n data: SignDataPayload;\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n} & ConnectionInfo;\n\nexport function createDataSentForSignatureEvent(\n version: Version,\n wallet: Wallet | null,\n data: SignDataPayload,\n sessionInfo?: SessionInfo | null,\n traceId?: string | null\n): DataSentForSignatureEvent {\n return {\n type: 'sign-data-request-initiated',\n data,\n trace_id: traceId ?? null,\n ...createConnectionInfo(version, wallet, sessionInfo)\n };\n}\n\nexport type DataSignedEvent = {\n type: 'sign-data-request-completed';\n is_success: true;\n data: SignDataPayload;\n signed_data: SignDataResponse;\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n} & ConnectionInfo;\n\nexport function createDataSignedEvent(\n version: Version,\n wallet: Wallet | null,\n data: SignDataPayload,\n signedData: SignDataResponse,\n sessionInfo?: SessionInfo | null,\n traceId?: string | null\n): DataSignedEvent {\n return {\n type: 'sign-data-request-completed',\n is_success: true,\n data,\n signed_data: signedData,\n trace_id: traceId ?? null,\n ...createConnectionInfo(version, wallet, sessionInfo)\n };\n}\n\nexport type DataSigningFailedEvent = {\n type: 'sign-data-request-failed';\n is_success: false;\n error_message: string;\n error_code: SIGN_DATA_ERROR_CODES | null;\n data: SignDataPayload;\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n} & ConnectionInfo;\n\nexport function createDataSigningFailedEvent(\n version: Version,\n wallet: Wallet | null,\n data: SignDataPayload,\n errorMessage: string,\n errorCode: SIGN_DATA_ERROR_CODES | void,\n sessionInfo?: SessionInfo | null,\n traceId?: string | null\n): DataSigningFailedEvent {\n return {\n type: 'sign-data-request-failed',\n is_success: false,\n data,\n error_message: errorMessage,\n error_code: errorCode ?? null,\n trace_id: traceId ?? null,\n ...createConnectionInfo(version, wallet, sessionInfo)\n };\n}\n\nexport type DataSigningEvent = DataSentForSignatureEvent | DataSignedEvent | DataSigningFailedEvent;\n\n/**\n * Disconnect event when a user initiates a disconnection.\n */\nexport type DisconnectionEvent = {\n /**\n * Event type.\n */\n type: 'disconnection';\n /**\n * Disconnect scope: 'dapp' or 'wallet'.\n */\n scope: 'dapp' | 'wallet';\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n} & ConnectionInfo;\n\nexport function createDisconnectionEvent(\n version: Version,\n wallet: Wallet | null,\n scope: 'dapp' | 'wallet',\n sessionInfo?: SessionInfo | null,\n traceId?: string | null\n): DisconnectionEvent {\n return {\n type: 'disconnection',\n scope: scope,\n trace_id: traceId ?? null,\n ...createConnectionInfo(version, wallet, sessionInfo)\n };\n}\n\n/**\n * Represents the event triggered when the wallet modal is opened.\n */\nexport type WalletModalOpenedEvent = {\n /**\n * Event type.\n */\n type: 'wallet-modal-opened';\n\n /**\n * The unique client identifier associated with the session or user.\n */\n client_id: string | null;\n\n /**\n * A list of wallet identifiers that are currently visible in the modal.\n */\n visible_wallets: string[];\n\n /**\n * Custom metadata containing versioning or contextual data for the modal.\n */\n custom_data: Version;\n\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id: string | null;\n};\n\nexport function createWalletModalOpenedEvent(\n version: Version,\n visibleWallets: string[],\n clientId?: string | null,\n traceId?: string | null\n): WalletModalOpenedEvent {\n return {\n type: 'wallet-modal-opened',\n visible_wallets: visibleWallets,\n client_id: clientId ?? null,\n custom_data: version,\n trace_id: traceId ?? null\n };\n}\n\n/**\n * Represents the event triggered when the wallet is selected.\n */\nexport type SelectedWalletEvent = {\n /**\n * Event type.\n */\n type: 'selected-wallet';\n\n /**\n * The unique client identifier associated with the session or user.\n */\n client_id: string | null;\n\n /**\n * A list of wallet identifiers that are currently visible in the modal.\n */\n visible_wallets: string[];\n wallets_menu: 'explicit_wallet' | 'main_screen' | 'other_wallets';\n\n /**\n * Redirect method: tg_link, external_link\n */\n wallet_redirect_method?: 'tg_link' | 'external_link';\n\n /**\n * URL used to open the wallet\n */\n wallet_redirect_link?: string;\n\n /**\n * Wallet type: 'tonkeeper', 'tonhub', etc.\n */\n wallet_type: string | null;\n\n /**\n * Custom metadata containing versioning or contextual data for the modal.\n */\n custom_data: Version;\n\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id: string | null;\n};\n\nexport function createSelectedWalletEvent(\n version: Version,\n visibleWallets: string[],\n lastSelectedWallet: { appName?: string } | null,\n walletsMenu: 'explicit_wallet' | 'main_screen' | 'other_wallets',\n redirectLink: string,\n redirectLinkType?: 'tg_link' | 'external_link',\n clientId?: string | null,\n traceId?: string | null\n): SelectedWalletEvent {\n let walletRedirectMethod = redirectLinkType;\n if (!walletRedirectMethod && redirectLink) {\n walletRedirectMethod = isTelegramUrl(redirectLink) ? 'tg_link' : 'external_link';\n }\n return {\n type: 'selected-wallet',\n wallets_menu: walletsMenu,\n visible_wallets: visibleWallets,\n client_id: clientId ?? null,\n custom_data: version,\n trace_id: traceId ?? null,\n wallet_redirect_method: walletRedirectMethod,\n wallet_redirect_link: redirectLink || undefined,\n wallet_type: lastSelectedWallet?.appName ?? null\n };\n}\n\n/**\n * User action events.\n */\nexport type SdkActionEvent =\n | VersionEvent\n | ConnectionEvent\n | ConnectionRestoringEvent\n | DisconnectionEvent\n | TransactionSigningEvent\n | DataSigningEvent\n | WalletModalOpenedEvent\n | SelectedWalletEvent;\n\n/**\n * Parameters without version field.\n */\nexport type WithoutVersion<T> = T extends [Version, ...infer Rest] ? [...Rest] : never;\n","import { ConnectEventSuccess } from '@tonconnect/protocol';\nimport { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when wallet can't get manifest by passed manifestUrl.\n */\nexport class WalletMissingRequiredFeaturesError extends TonConnectError<{\n connectEvent: ConnectEventSuccess['payload'];\n}> {\n declare cause: {\n connectEvent: ConnectEventSuccess['payload'];\n };\n\n protected get info(): string {\n return 'Missing required features. You need to update your wallet.';\n }\n\n constructor(\n message: string,\n options: {\n cause: {\n connectEvent: ConnectEventSuccess['payload'];\n };\n }\n ) {\n super(message, options);\n\n Object.setPrototypeOf(this, WalletMissingRequiredFeaturesError.prototype);\n }\n}\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\nexport class WalletWrongNetworkError extends TonConnectError<{\n expectedChainId: string;\n actualChainId: string;\n}> {\n constructor(\n message: string,\n options: {\n cause: { expectedChainId: string; actualChainId: string };\n }\n ) {\n super(message, options);\n this.name = 'WalletWrongNetworkError';\n Object.setPrototypeOf(this, WalletWrongNetworkError.prototype);\n }\n}\n","import { logDebug, logError } from '../utils/log';\nimport { AnalyticsEvent } from './types';\nimport { tonConnectSdkVersion } from 'src/constants/version';\nimport { UUIDv7 } from 'src/utils/uuid';\nimport { Analytics } from 'src/analytics/analytics';\nimport {\n pascalToKebab,\n getStaticConnectionMetrics,\n getDynamicConnectionMetrics\n} from 'src/analytics/utils';\nimport { IEnvironment } from 'src/environment/models/environment.interface';\nimport { isQaModeEnabled } from 'src/utils/qa-mode';\nimport { Dynamic } from 'src/utils/types';\nimport { getDocument } from 'src/utils/web-api';\nimport { TonConnectError } from 'src/errors';\n\nexport type AnalyticsMode = 'off' | 'telemetry' | 'full';\n\nexport type EventsCollectorOptions = {\n batchTimeoutMs?: number;\n maxBatchSize?: number;\n analyticsUrl?: string;\n environment?: IEnvironment;\n mode?: AnalyticsMode;\n};\n\nexport class AnalyticsManager {\n private events: AnalyticsEvent[] = [];\n private timeoutId: ReturnType<typeof setTimeout> | null = null;\n private isProcessing = false;\n\n private backoff = 1;\n private currentBatchTimeoutMs: number;\n\n private readonly batchTimeoutMs: number;\n private readonly maxBatchSize: number;\n private readonly analyticsUrl: string;\n\n private shouldSend: boolean = true;\n\n private baseEvent: Partial<AnalyticsEvent>;\n\n public readonly mode: AnalyticsMode;\n\n private static readonly HTTP_STATUS = {\n TOO_MANY_REQUESTS: 429,\n CLIENT_ERROR_START: 400,\n SERVER_ERROR_START: 500\n } as const;\n\n private static readonly MAX_BACKOFF_ATTEMPTS = 5;\n private static readonly BACKOFF_MULTIPLIER = 2;\n\n private static readonly FULL_MODE_FIELDS = [\n 'user_id',\n 'tg_id',\n 'locale',\n 'tma_is_premium'\n ] as const;\n\n constructor(options: EventsCollectorOptions = {}) {\n this.batchTimeoutMs = options.batchTimeoutMs ?? 2000;\n this.currentBatchTimeoutMs = this.batchTimeoutMs;\n this.maxBatchSize = options.maxBatchSize ?? 100;\n this.analyticsUrl = options.analyticsUrl ?? 'https://analytics.ton.org/events';\n\n this.mode = options.mode ?? 'telemetry';\n\n this.baseEvent = {\n subsystem: 'dapp-sdk',\n version: tonConnectSdkVersion,\n client_environment: options.environment?.getClientEnvironment?.(),\n ...getStaticConnectionMetrics()\n };\n\n this.addWindowFocusAndBlurSubscriptions();\n }\n\n scoped<\n TEvent extends AnalyticsEvent = AnalyticsEvent,\n TOptional extends keyof TEvent = 'event_name'\n >(sharedData?: Partial<Dynamic<AnalyticsEvent>>): Analytics<TEvent, TOptional> {\n return new Proxy(this, {\n get(target, prop) {\n const propName = prop.toString();\n if (propName.startsWith('emit')) {\n const eventNamePascal = propName.replace('emit', '');\n const eventNameKebab = pascalToKebab(eventNamePascal);\n return function (event: Omit<AnalyticsEvent, 'event_name'>) {\n const executedData = Object.fromEntries(\n Object.entries(sharedData ?? {}).map(([key, value]) => [\n key,\n typeof value === 'function' ? value() : value\n ])\n );\n\n return target.emit({\n event_name: eventNameKebab,\n ...executedData,\n ...event\n } as AnalyticsEvent);\n };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (target as any)[prop];\n }\n }) as unknown as Analytics<TEvent, TOptional>;\n }\n\n private emit(event: AnalyticsEvent): void {\n if (this.mode === 'off') {\n return;\n }\n\n const traceId = event.trace_id ?? UUIDv7();\n\n const dynamicMetrics = getDynamicConnectionMetrics();\n\n const enhancedEvent = {\n ...this.baseEvent,\n ...dynamicMetrics,\n ...event,\n event_id: UUIDv7(),\n client_timestamp: Math.floor(Date.now() / 1000),\n trace_id: traceId\n } as const;\n\n const filteredEvent =\n this.mode === 'telemetry' ? this.filterFullModeFields(enhancedEvent) : enhancedEvent;\n\n if (isQaModeEnabled()) {\n logDebug(filteredEvent);\n }\n this.events.push(filteredEvent);\n\n if (this.events.length >= this.maxBatchSize) {\n void this.flush();\n return;\n }\n\n this.startTimeout();\n }\n\n private startTimeout(): void {\n if (this.timeoutId || this.isProcessing) {\n return;\n }\n\n this.timeoutId = setTimeout(() => {\n void this.flush();\n }, this.currentBatchTimeoutMs);\n }\n\n async flush(): Promise<void> {\n if (this.isProcessing || this.events.length === 0 || !this.shouldSend) {\n return;\n }\n\n this.clearTimeout();\n this.isProcessing = true;\n\n const eventsToSend = this.extractEventsToSend();\n\n try {\n await this.processEventsBatch(eventsToSend);\n logDebug('Analytics events sent successfully');\n } catch (error) {\n this.restoreEvents(eventsToSend);\n logError('Failed to send analytics events:', error);\n } finally {\n this.isProcessing = false;\n this.scheduleNextFlushIfNeeded();\n }\n }\n\n private clearTimeout(): void {\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n }\n\n private extractEventsToSend(): AnalyticsEvent[] {\n const eventsToSend = this.events.slice(0, this.maxBatchSize);\n this.events = this.events.slice(this.maxBatchSize);\n return eventsToSend;\n }\n\n private async processEventsBatch(eventsToSend: AnalyticsEvent[]): Promise<void> {\n logDebug('Sending analytics events...', eventsToSend.length);\n try {\n const response = await this.sendEvents(eventsToSend);\n this.handleResponse(response);\n } catch (err) {\n this.handleUnknownError(err);\n }\n }\n\n private handleResponse(response: Response): void {\n const { status, statusText } = response;\n\n if (this.isTooManyRequests(status)) {\n this.handleTooManyRequests(status, statusText);\n } else if (this.isClientError(status)) {\n this.handleClientError(status, statusText);\n } else if (this.isServerError(status)) {\n this.handleUnknownError({ status, statusText });\n }\n }\n\n private restoreEvents(eventsToSend: AnalyticsEvent[]): void {\n this.events.unshift(...eventsToSend);\n }\n\n private scheduleNextFlushIfNeeded(): void {\n if (this.events.length > 0) {\n this.startTimeout();\n }\n }\n\n private async sendEvents(events: AnalyticsEvent[]): Promise<Response> {\n return await fetch(this.analyticsUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-Client-Timestamp': Math.floor(Date.now() / 1000).toString()\n },\n body: JSON.stringify(events)\n });\n }\n\n private isClientError(status: number): boolean {\n return (\n status >= AnalyticsManager.HTTP_STATUS.CLIENT_ERROR_START &&\n status < AnalyticsManager.HTTP_STATUS.SERVER_ERROR_START\n );\n }\n\n private isServerError(status: number): boolean {\n return status >= AnalyticsManager.HTTP_STATUS.SERVER_ERROR_START;\n }\n\n private isTooManyRequests(status: number): boolean {\n return status === AnalyticsManager.HTTP_STATUS.TOO_MANY_REQUESTS;\n }\n\n private handleClientError(status: number, statusText: string): void {\n // Don't retry\n logError(\n 'Failed to send analytics events:',\n new TonConnectError(`Analytics API error: ${status} ${statusText}`)\n );\n }\n\n private handleUnknownError(error: unknown): void {\n if (this.backoff < AnalyticsManager.MAX_BACKOFF_ATTEMPTS) {\n this.backoff++;\n this.currentBatchTimeoutMs *= AnalyticsManager.BACKOFF_MULTIPLIER;\n throw new TonConnectError(`Unknown analytics API error: ${error}`);\n } else {\n this.currentBatchTimeoutMs = this.batchTimeoutMs;\n this.backoff = 1;\n return; // Don't retry\n }\n }\n\n private handleTooManyRequests(status: number, statusText: string): void {\n throw new TonConnectError(`Analytics API error: ${status} ${statusText}`);\n }\n\n private addWindowFocusAndBlurSubscriptions(): void {\n const document = getDocument();\n if (!document) {\n return;\n }\n\n try {\n document.addEventListener('visibilitychange', () => {\n if (document.hidden) {\n this.clearTimeout();\n this.shouldSend = false;\n } else {\n this.shouldSend = true;\n this.scheduleNextFlushIfNeeded();\n }\n });\n } catch (e) {\n logError('Cannot subscribe to the document.visibilitychange: ', e);\n }\n }\n\n getMode(): AnalyticsMode {\n return this.mode;\n }\n\n getPendingEventsCount(): number {\n return this.events.length;\n }\n\n private filterFullModeFields(event: AnalyticsEvent): AnalyticsEvent {\n const filtered = { ...event } as Partial<AnalyticsEvent> & Record<string, unknown>;\n\n for (const field of AnalyticsManager.FULL_MODE_FIELDS) {\n delete filtered[field];\n }\n\n // wallet_address is kept for error events, removed for non-error events\n const eventName = 'event_name' in event ? String(event.event_name) : '';\n const isErrorEvent =\n 'error_code' in event ||\n 'error_message' in event ||\n eventName.includes('error') ||\n eventName === 'connection-error' ||\n eventName === 'transaction-signing-failed' ||\n eventName === 'sign-data-request-failed';\n\n if (!isErrorEvent && 'wallet_address' in filtered) {\n delete filtered.wallet_address;\n }\n\n return filtered as AnalyticsEvent;\n }\n\n setWalletListDownloadDuration(duration: number | undefined): void {\n this.baseEvent = {\n ...this.baseEvent,\n wallet_list_download_duration: duration\n };\n }\n}\n","export function logDebug(...args: Parameters<Console['debug']>): void {\n if (typeof 'console' !== undefined) {\n try {\n console.debug('[TON_CONNECT_SDK]', ...args);\n } catch {}\n }\n}\n\nexport function logError(...args: Parameters<Console['error']>): void {\n if (typeof 'console' !== undefined) {\n try {\n console.error('[TON_CONNECT_SDK]', ...args);\n } catch {}\n }\n}\n\nexport function logWarning(...args: Parameters<Console['warn']>): void {\n if (typeof 'console' !== undefined) {\n try {\n console.warn('[TON_CONNECT_SDK]', ...args);\n } catch {}\n }\n}\n","/**\n * Base class for TonConnect errors. You can check if the error was triggered by the @tonconnect/sdk using `err instanceof TonConnectError`.\n */\nexport class TonConnectError<T = unknown> extends Error {\n private static prefix = '[TON_CONNECT_SDK_ERROR]';\n\n protected get info(): string {\n return '';\n }\n\n constructor(\n message?: string,\n options?: {\n cause?: T;\n }\n ) {\n super(message, options);\n\n this.message = `${TonConnectError.prefix} ${this.constructor.name}${\n this.info ? ': ' + this.info : ''\n }${message ? '\\n' + message : ''}`;\n\n Object.setPrototypeOf(this, TonConnectError.prototype);\n }\n}\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when app tries to send rpc request to the injected wallet while not connected.\n */\nexport class UnknownAppError extends TonConnectError {\n protected get info(): string {\n return 'App tries to send rpc request to the injected wallet while not connected.';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, UnknownAppError.prototype);\n }\n}\n","/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2010-2020 Robert Kieffer and other contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport { rng } from './rng-browser';\nimport { unsafeStringify } from './stringify';\nimport { UUIDTypes, Version7Options } from './types';\n\ntype V7State = {\n msecs?: number; // time, milliseconds\n seq?: number; // sequence number (32-bits)\n};\n\nconst _state: V7State = {};\n\nexport function UUIDv7(options?: Version7Options, buf?: undefined, offset?: number): string;\nexport function UUIDv7<TBuf extends Uint8Array = Uint8Array>(\n options: Version7Options | undefined,\n buf: TBuf,\n offset?: number\n): TBuf;\nexport function UUIDv7<TBuf extends Uint8Array = Uint8Array>(\n options?: Version7Options,\n buf?: TBuf,\n offset?: number\n): UUIDTypes<TBuf> {\n let bytes: Uint8Array;\n\n if (options) {\n // With options: Make UUID independent of internal state\n bytes = v7Bytes(\n options.random ?? options.rng?.() ?? rng(),\n options.msecs,\n options.seq,\n buf,\n offset\n );\n } else {\n // No options: Use internal state\n const now = Date.now();\n const rnds = rng();\n\n updateV7State(_state, now, rnds);\n\n bytes = v7Bytes(rnds, _state.msecs, _state.seq, buf, offset);\n }\n\n return buf ?? unsafeStringify(bytes);\n}\n\n// (Private!) Do not use. This method is only exported for testing purposes\n// and may change without notice.\nexport function updateV7State(state: V7State, now: number, rnds: Uint8Array) {\n state.msecs ??= -Infinity;\n state.seq ??= 0;\n\n if (now > state.msecs) {\n // Time has moved on! Pick a new random sequence number\n state.seq = (rnds[6]! << 23) | (rnds[7]! << 16) | (rnds[8]! << 8) | rnds[9]!;\n state.msecs = now;\n } else {\n // Bump sequence counter w/ 32-bit rollover\n state.seq = (state.seq + 1) | 0;\n\n // In case of rollover, bump timestamp to preserve monotonicity. This is\n // allowed by the RFC and should self-correct as the system clock catches\n // up. See https://www.rfc-editor.org/rfc/rfc9562.html#section-6.2-9.4\n if (state.seq === 0) {\n state.msecs++;\n }\n }\n\n return state;\n}\n\nfunction v7Bytes(rnds: Uint8Array, msecs?: number, seq?: number, buf?: Uint8Array, offset = 0) {\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n\n if (!buf) {\n buf = new Uint8Array(16);\n offset = 0;\n } else {\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(\n `UUID byte range ${offset}:${offset + 15} is out of buffer bounds`\n );\n }\n }\n\n // Defaults\n msecs ??= Date.now();\n seq ??= ((rnds[6]! * 0x7f) << 24) | (rnds[7]! << 16) | (rnds[8]! << 8) | rnds[9]!;\n\n // byte 0-5: timestamp (48 bits)\n buf[offset++] = (msecs / 0x10000000000) & 0xff;\n buf[offset++] = (msecs / 0x100000000) & 0xff;\n buf[offset++] = (msecs / 0x1000000) & 0xff;\n buf[offset++] = (msecs / 0x10000) & 0xff;\n buf[offset++] = (msecs / 0x100) & 0xff;\n buf[offset++] = msecs & 0xff;\n\n // byte 6: `version` (4 bits) | sequence bits 28-31 (4 bits)\n buf[offset++] = 0x70 | ((seq >>> 28) & 0x0f);\n\n // byte 7: sequence bits 20-27 (8 bits)\n buf[offset++] = (seq >>> 20) & 0xff;\n\n // byte 8: `variant` (2 bits) | sequence bits 14-19 (6 bits)\n buf[offset++] = 0x80 | ((seq >>> 14) & 0x3f);\n\n // byte 9: sequence bits 6-13 (8 bits)\n buf[offset++] = (seq >>> 6) & 0xff;\n\n // byte 10: sequence bits 0-5 (6 bits) | random (2 bits)\n buf[offset++] = ((seq << 2) & 0xff) | (rnds[10]! & 0x03);\n\n // bytes 11-15: random (40 bits)\n buf[offset++] = rnds[11]!;\n buf[offset++] = rnds[12]!;\n buf[offset++] = rnds[13]!;\n buf[offset++] = rnds[14]!;\n buf[offset++] = rnds[15]!;\n\n return buf;\n}\n","export function normalizeBase64(data: string | undefined): string | undefined {\n if (typeof data !== 'string') return undefined;\n\n const paddedLength = data.length + ((4 - (data.length % 4)) % 4);\n return data.replace(/-/g, '+').replace(/_/g, '/').padEnd(paddedLength, '=');\n}\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when passed DappMetadata is in incorrect format.\n */\nexport class DappMetadataError extends TonConnectError {\n protected get info(): string {\n return 'Passed DappMetadata is in incorrect format.';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, DappMetadataError.prototype);\n }\n}\n","export function removeUrlLastSlash(url: string): string {\n if (url.slice(-1) === '/') {\n return url.slice(0, -1);\n }\n\n return url;\n}\n\nexport function addPathToUrl(url: string, path: string): string {\n return removeUrlLastSlash(url) + '/' + path;\n}\n\nexport function isTelegramUrl(link: string | undefined): link is string {\n if (!link) {\n return false;\n }\n\n const url = new URL(link);\n return url.protocol === 'tg:' || url.hostname === 't.me';\n}\n\nexport function isConnectUrl(link: string | undefined): link is string {\n if (!link) {\n return false;\n }\n\n return link.includes('ton_addr') || link.includes('ton--5Faddr');\n}\n\nexport function encodeTelegramUrlParameters(parameters: string): string {\n return parameters\n .replaceAll('.', '%2E')\n .replaceAll('-', '%2D')\n .replaceAll('_', '%5F')\n .replaceAll('&', '-')\n .replaceAll('=', '__')\n .replaceAll('%', '--');\n}\n\nexport function decodeTelegramUrlParameters(parameters: string): string {\n return parameters\n .replaceAll('--', '%')\n .replaceAll('__', '=')\n .replaceAll('-', '&')\n .replaceAll('%5F', '_')\n .replaceAll('%2D', '-')\n .replaceAll('%2E', '.');\n}\n","export const PROTOCOL_VERSION = 2;\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when wallet can't get manifest by passed manifestUrl.\n */\nexport class ManifestNotFoundError extends TonConnectError {\n protected get info(): string {\n return 'Manifest 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';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, ManifestNotFoundError.prototype);\n }\n}\n","import {\n ChainId,\n CONNECT_ITEM_ERROR_CODES,\n ConnectEventSuccess,\n ConnectItem,\n ConnectRequest,\n SendTransactionRpcResponseSuccess,\n SignDataPayload,\n SignDataRpcResponseSuccess,\n TonAddressItemReply,\n TonProofItemReply\n} from '@tonconnect/protocol';\nimport { DappMetadataError } from 'src/errors/dapp/dapp-metadata.error';\nimport { ManifestContentErrorError } from 'src/errors/protocol/events/connect/manifest-content-error.error';\nimport { ManifestNotFoundError } from 'src/errors/protocol/events/connect/manifest-not-found.error';\nimport { TonConnectError } from 'src/errors/ton-connect.error';\nimport {\n WalletAlreadyConnectedError,\n WalletNotConnectedError,\n WalletMissingRequiredFeaturesError\n} from 'src/errors/wallet';\nimport {\n Account,\n RequiredFeatures,\n Wallet,\n WalletConnectionSource,\n WalletConnectionSourceHTTP,\n WalletConnectionSourceJS,\n WalletConnectionSourceWalletConnect,\n WalletInfo\n} from 'src/models';\nimport {\n SendTransactionRequest,\n SendTransactionResponse,\n SignDataResponse\n} from 'src/models/methods';\nimport { ConnectAdditionalRequest } from 'src/models/methods/connect/connect-additional-request';\nimport { AnalyticsSettings, TonConnectOptions } from 'src/models/ton-connect-options';\nimport {\n isWalletConnectionSourceJS,\n isWalletConnectionSourceWalletConnect\n} from 'src/models/wallet/wallet-connection-source';\nimport { connectErrorsParser } from 'src/parsers/connect-errors-parser';\nimport { sendTransactionParser } from 'src/parsers/send-transaction-parser';\nimport { signDataParser } from 'src/parsers/sign-data-parser';\nimport { BridgeProvider } from 'src/provider/bridge/bridge-provider';\nimport { InjectedProvider } from 'src/provider/injected/injected-provider';\nimport { Provider } from 'src/provider/provider';\nimport { BridgeConnectionStorage } from 'src/storage/bridge-connection-storage';\nimport { DefaultStorage } from 'src/storage/default-storage';\nimport { ITonConnect } from 'src/ton-connect.interface';\nimport { WalletWrongNetworkError } from 'src/errors/wallet/wallet-wrong-network.error';\nimport { getDocument, getOriginWithPath, getWebPageManifest } from 'src/utils/web-api';\nimport { WalletsListManager } from 'src/wallets-list-manager';\nimport { OptionalTraceable, Traceable } from 'src/utils/types';\nimport {\n checkSendTransactionSupport,\n checkRequiredWalletFeatures,\n checkSignDataSupport\n} from 'src/utils/feature-support';\nimport { callForSuccess } from 'src/utils/call-for-success';\nimport { logDebug, logError } from 'src/utils/log';\nimport { createAbortController } from 'src/utils/create-abort-controller';\nimport { TonConnectTracker } from 'src/tracker/ton-connect-tracker';\nimport { tonConnectSdkVersion } from 'src/constants/version';\nimport {\n validateSendTransactionRequest,\n validateSignDataPayload,\n validateConnectAdditionalRequest,\n validateTonProofItemReply\n} from './validation/schemas';\nimport { isQaModeEnabled } from './utils/qa-mode';\nimport { normalizeBase64 } from './utils/base64';\nimport { AnalyticsManager } from 'src/analytics/analytics-manager';\nimport { BrowserEventDispatcher } from 'src/tracker/browser-event-dispatcher';\nimport { EventDispatcher } from 'src/tracker/event-dispatcher';\nimport { SdkActionEvent } from 'src/tracker/types';\nimport { bindEventsTo } from 'src/analytics/sdk-actions-adapter';\nimport { BridgePartialSession, BridgeSession } from 'src/provider/bridge/models/bridge-session';\nimport { IEnvironment } from 'src/environment/models/environment.interface';\nimport { DefaultEnvironment } from 'src/environment/default-environment';\nimport { UUIDv7 } from 'src/utils/uuid';\nimport { TraceableWalletEvent } from 'src/models/wallet/traceable-events';\nimport { WalletConnectProvider } from 'src/provider/wallet-connect/wallet-connect-provider';\n\nexport class TonConnect implements ITonConnect {\n private desiredChainId: string | undefined;\n private static readonly walletsList = new WalletsListManager();\n\n /**\n * Check if specified wallet is injected and available to use with the app.\n * @param walletJSKey target wallet's js bridge key.\n */\n public static isWalletInjected = (walletJSKey: string): boolean =>\n InjectedProvider.isWalletInjected(walletJSKey);\n\n /**\n * Check if the app is opened inside specified wallet's browser.\n * @param walletJSKey target wallet's js bridge key.\n */\n public static isInsideWalletBrowser = (walletJSKey: string): boolean =>\n InjectedProvider.isInsideWalletBrowser(walletJSKey);\n\n /**\n * Returns available wallets list.\n */\n public static getWallets(): Promise<WalletInfo[]> {\n return this.walletsList.getWallets();\n }\n\n /**\n * Emits user action event to the EventDispatcher. By default, it uses `window.dispatchEvent` for browser environment.\n * @private\n */\n private readonly tracker: TonConnectTracker;\n\n private readonly walletsList: WalletsListManager;\n\n private analytics?: AnalyticsManager;\n\n private readonly environment: IEnvironment;\n\n private readonly dappSettings: Pick<Required<TonConnectOptions>, 'manifestUrl' | 'storage'>;\n\n private readonly bridgeConnectionStorage: BridgeConnectionStorage;\n\n private _wallet: Wallet | null = null;\n\n private provider: Provider | null = null;\n\n private statusChangeSubscriptions: ((walletInfo: Wallet | null) => void)[] = [];\n\n private statusChangeErrorSubscriptions: ((err: TonConnectError) => void)[] = [];\n\n private readonly walletsRequiredFeatures: RequiredFeatures | undefined;\n\n private abortController?: AbortController;\n\n /**\n * Shows if the wallet is connected right now.\n */\n public get connected(): boolean {\n return this._wallet !== null;\n }\n\n /**\n * Current connected account or null if no account is connected.\n */\n public get account(): Account | null {\n return this._wallet?.account || null;\n }\n\n /**\n * Current connected wallet or null if no account is connected.\n */\n public get wallet(): Wallet | null {\n return this._wallet;\n }\n\n private set wallet(value: Wallet | null) {\n this._wallet = value;\n this.statusChangeSubscriptions.forEach(callback => callback(this._wallet));\n }\n\n constructor(options?: TonConnectOptions) {\n const manifestUrl = options?.manifestUrl || getWebPageManifest();\n this.dappSettings = {\n manifestUrl,\n storage: options?.storage || new DefaultStorage()\n };\n\n this.walletsRequiredFeatures = options?.walletsRequiredFeatures;\n\n this.environment = options?.environment ?? new DefaultEnvironment();\n\n this.walletsList = new WalletsListManager({\n walletsListSource: options?.walletsListSource,\n cacheTTLMs: options?.walletsListCacheTTLMs,\n onDownloadDurationMeasured: (duration: number | undefined) => {\n this.analytics?.setWalletListDownloadDuration(duration);\n }\n });\n\n const eventDispatcher = options?.eventDispatcher ?? new BrowserEventDispatcher();\n this.tracker = new TonConnectTracker({\n eventDispatcher,\n tonConnectSdkVersion: tonConnectSdkVersion\n });\n\n this.environment = options?.environment ?? new DefaultEnvironment();\n\n this.initAnalytics(manifestUrl, eventDispatcher, options);\n\n if (!this.dappSettings.manifestUrl) {\n throw new DappMetadataError(\n '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'\n );\n }\n\n this.bridgeConnectionStorage = new BridgeConnectionStorage(\n this.dappSettings.storage,\n this.walletsList\n );\n\n if (!options?.disableAutoPauseConnection) {\n this.addWindowFocusAndBlurSubscriptions();\n }\n }\n\n /**\n * Returns available wallets list.\n */\n public getWallets(): Promise<WalletInfo[]> {\n return this.walletsList.getWallets();\n }\n\n /**\n * Allows to subscribe to connection status changes and handle connection errors.\n * @param callback will be called after connections status changes with actual wallet or null.\n * @param errorsHandler (optional) will be called with some instance of TonConnectError when connect error is received.\n * @returns unsubscribe callback.\n */\n public onStatusChange(\n callback: (wallet: Wallet | null) => void,\n errorsHandler?: (err: TonConnectError) => void\n ): () => void {\n this.statusChangeSubscriptions.push(callback);\n if (errorsHandler) {\n this.statusChangeErrorSubscriptions.push(errorsHandler);\n }\n\n return () => {\n this.statusChangeSubscriptions = this.statusChangeSubscriptions.filter(\n item => item !== callback\n );\n if (errorsHandler) {\n this.statusChangeErrorSubscriptions = this.statusChangeErrorSubscriptions.filter(\n item => item !== errorsHandler\n );\n }\n };\n }\n\n /**\n * Generates universal link for an external wallet and subscribes to the wallet's bridge, or sends connect request to the injected wallet.\n * @param wallet wallet's bridge url and universal link for an external wallet or jsBridge key for the injected wallet.\n * @param request (optional) additional request to pass to the wallet while connect (currently only ton_proof is available).\n * @param options (optional) openingDeadlineMS for the connection opening deadline and signal for the connection abort.\n * @returns universal link if external wallet was passed or void for the injected wallet.\n */\n\n public connect<\n T extends WalletConnectionSource | Pick<WalletConnectionSourceHTTP, 'bridgeUrl'>[]\n >(\n wallet: T,\n options?: OptionalTraceable<{\n request?: ConnectAdditionalRequest;\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }>\n ): T extends WalletConnectionSourceJS\n ? void\n : T extends WalletConnectionSourceWalletConnect\n ? void\n : string;\n /** @deprecated use connect(wallet, options) instead */\n public connect<\n T extends WalletConnectionSource | Pick<WalletConnectionSourceHTTP, 'bridgeUrl'>[]\n >(\n wallet: T,\n request?: ConnectAdditionalRequest,\n options?: OptionalTraceable<{\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }>\n ): T extends WalletConnectionSourceJS\n ? void\n : T extends WalletConnectionSourceWalletConnect\n ? void\n : string;\n // eslint-disable-next-line complexity\n public connect(\n wallet: WalletConnectionSource | Pick<WalletConnectionSourceHTTP, 'bridgeUrl'>[],\n requestOrOptions?:\n | ConnectAdditionalRequest\n | OptionalTraceable<{\n request?: ConnectAdditionalRequest;\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }>,\n additionalOptions?: OptionalTraceable<{\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }>\n ): void | string {\n // TODO: remove deprecated method\n const options: OptionalTraceable<{\n request?: ConnectAdditionalRequest;\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }> = {\n ...additionalOptions\n };\n\n if (\n typeof requestOrOptions === 'object' &&\n requestOrOptions !== null &&\n 'tonProof' in requestOrOptions\n ) {\n options.request = requestOrOptions;\n }\n\n if (\n typeof requestOrOptions === 'object' &&\n requestOrOptions !== null &&\n ('openingDeadlineMS' in requestOrOptions ||\n 'signal' in requestOrOptions ||\n 'request' in requestOrOptions ||\n 'traceId' in requestOrOptions)\n ) {\n options.request = requestOrOptions?.request;\n options.openingDeadlineMS = requestOrOptions?.openingDeadlineMS;\n options.signal = requestOrOptions?.signal;\n }\n\n if (options.request) {\n const validationError = validateConnectAdditionalRequest(options.request);\n if (validationError) {\n if (isQaModeEnabled()) {\n console.error('ConnectAdditionalRequest validation failed: ' + validationError);\n } else {\n throw new TonConnectError(\n 'ConnectAdditionalRequest validation failed: ' + validationError\n );\n }\n }\n }\n\n if (this.connected) {\n throw new WalletAlreadyConnectedError();\n }\n\n const abortController = createAbortController(options?.signal);\n this.abortController?.abort();\n this.abortController = abortController;\n\n if (abortController.signal.aborted) {\n throw new TonConnectError('Connection was aborted');\n }\n\n this.provider?.closeConnection();\n this.provider = this.createProvider(wallet);\n\n abortController.signal.addEventListener('abort', () => {\n this.provider?.closeConnection();\n this.provider = null;\n });\n\n const traceId = options?.traceId ?? UUIDv7();\n this.tracker.trackConnectionStarted(traceId);\n\n return this.provider.connect(this.createConnectRequest(options?.request), {\n openingDeadlineMS: options?.openingDeadlineMS,\n signal: abortController.signal,\n traceId\n });\n }\n\n /**\n * Try to restore existing session and reconnect to the corresponding wallet. Call it immediately when your app is loaded.\n */\n public async restoreConnection(\n options?: OptionalTraceable<{\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }>\n ): Promise<void> {\n const traceId = options?.traceId ?? UUIDv7();\n this.tracker.trackConnectionRestoringStarted(traceId);\n\n const abortController = createAbortController(options?.signal);\n this.abortController?.abort();\n this.abortController = abortController;\n\n if (abortController.signal.aborted) {\n this.tracker.trackConnectionRestoringError('Connection restoring was aborted', traceId);\n return;\n }\n\n // TODO: potentially race condition here\n const [bridgeConnectionType, embeddedWallet] = await Promise.all([\n this.bridgeConnectionStorage.storedConnectionType(),\n this.walletsList.getEmbeddedWallet()\n ]);\n\n if (abortController.signal.aborted) {\n this.tracker.trackConnectionRestoringError('Connection restoring was aborted', traceId);\n return;\n }\n\n let provider: Provider | null = null;\n try {\n switch (bridgeConnectionType) {\n case 'http':\n provider = await BridgeProvider.fromStorage(\n this.bridgeConnectionStorage,\n this.analytics\n );\n break;\n case 'injected':\n provider = await InjectedProvider.fromStorage(\n this.bridgeConnectionStorage,\n this.analytics\n );\n break;\n case 'wallet-connect':\n provider = await WalletConnectProvider.fromStorage(\n this.bridgeConnectionStorage\n );\n break;\n default:\n if (embeddedWallet) {\n provider = this.createProvider(embeddedWallet);\n } else {\n return;\n }\n }\n } catch (err) {\n logDebug('Provider is not restored', err);\n this.tracker.trackConnectionRestoringError('Provider is not restored', traceId);\n await this.bridgeConnectionStorage.removeConnection();\n provider?.closeConnection();\n provider = null;\n return;\n }\n\n if (abortController.signal.aborted) {\n provider?.closeConnection();\n this.tracker.trackConnectionRestoringError('Connection restoring was aborted', traceId);\n return;\n }\n\n if (!provider) {\n logError('Provider is not restored');\n this.tracker.trackConnectionRestoringError('Provider is not restored', traceId);\n return;\n }\n\n this.provider?.closeConnection();\n this.provider = provider;\n provider.listen(this.walletEventsListener.bind(this));\n\n const onAbortRestore = (): void => {\n this.tracker.trackConnectionRestoringError('Connection restoring was aborted', traceId);\n provider?.closeConnection();\n provider = null;\n };\n abortController.signal.addEventListener('abort', onAbortRestore);\n\n const restoreConnectionTask = callForSuccess(\n async _options => {\n await provider?.restoreConnection({\n openingDeadlineMS: options?.openingDeadlineMS,\n signal: _options.signal,\n traceId\n });\n\n abortController.signal.removeEventListener('abort', onAbortRestore);\n if (this.connected) {\n const sessionInfo = this.getSessionInfo();\n this.tracker.trackConnectionRestoringCompleted(\n this.wallet,\n sessionInfo,\n traceId\n );\n } else {\n this.tracker.trackConnectionRestoringError(\n 'Connection restoring failed',\n traceId\n );\n }\n },\n {\n attempts: Number.MAX_SAFE_INTEGER,\n delayMs: 2_000,\n signal: options?.signal\n }\n );\n const restoreConnectionTimeout = new Promise<void>(\n resolve => setTimeout(() => resolve(), 12_000) // connection deadline\n );\n return Promise.race([restoreConnectionTask, restoreConnectionTimeout]);\n }\n\n /**\n * Asks connected wallet to sign and send the transaction.\n * @param transaction transaction to send.\n * @param options (optional) onRequestSent will be called after the request was sent to the wallet and signal for the transaction abort.\n * @returns signed transaction boc that allows you to find the transaction in the blockchain.\n * If user rejects transaction, method will throw the corresponding error.\n */\n public sendTransaction(\n transaction: SendTransactionRequest,\n options?: OptionalTraceable<{\n onRequestSent?: () => void;\n signal?: AbortSignal;\n }>\n ): Promise<Traceable<SendTransactionResponse>>;\n /** @deprecated use sendTransaction(transaction, options) instead */\n public sendTransaction(\n transaction: SendTransactionRequest,\n onRequestSent?: () => void\n ): Promise<Traceable<SendTransactionResponse>>;\n public async sendTransaction(\n transaction: SendTransactionRequest,\n optionsOrOnRequestSent?:\n | OptionalTraceable<{\n onRequestSent?: () => void;\n signal?: AbortSignal;\n }>\n | (() => void)\n ): Promise<Traceable<SendTransactionResponse>> {\n // TODO: remove deprecated method\n const options: OptionalTraceable<{\n onRequestSent?: () => void;\n signal?: AbortSignal;\n }> = {};\n if (typeof optionsOrOnRequestSent === 'function') {\n options.onRequestSent = optionsOrOnRequestSent;\n } else {\n options.onRequestSent = optionsOrOnRequestSent?.onRequestSent;\n options.signal = optionsOrOnRequestSent?.signal;\n options.traceId = optionsOrOnRequestSent?.traceId;\n }\n\n // Validate transaction\n const validationError = validateSendTransactionRequest(transaction);\n if (validationError) {\n if (isQaModeEnabled()) {\n console.error('SendTransactionRequest validation failed: ' + validationError);\n } else {\n throw new TonConnectError(\n 'SendTransactionRequest validation failed: ' + validationError\n );\n }\n }\n\n const abortController = createAbortController(options?.signal);\n if (abortController.signal.aborted) {\n throw new TonConnectError('Transaction sending was aborted');\n }\n\n this.checkConnection();\n\n const requiredMessagesNumber = transaction.messages.length;\n const requireExtraCurrencies = transaction.messages.some(\n m => m.extraCurrency && Object.keys(m.extraCurrency).length > 0\n );\n checkSendTransactionSupport(this.wallet!.device.features, {\n requiredMessagesNumber,\n requireExtraCurrencies\n });\n\n const sessionInfo = this.getSessionInfo();\n const traceId = options?.traceId ?? UUIDv7();\n this.tracker.trackTransactionSentForSignature(\n this.wallet,\n transaction,\n sessionInfo,\n traceId\n );\n\n const { validUntil, messages, ...tx } = transaction;\n const from = transaction.from || this.account!.address;\n const network = transaction.network || this.account!.chain;\n\n if (this.wallet?.account.chain && network !== this.wallet.account.chain) {\n if (!isQaModeEnabled()) {\n throw new WalletWrongNetworkError('Wallet connected to a wrong network', {\n cause: {\n expectedChainId: this.wallet?.account.chain,\n actualChainId: network\n }\n });\n }\n console.error('Wallet connected to a wrong network', {\n expectedChainId: this.wallet?.account.chain,\n actualChainId: network\n });\n }\n\n const response = await this.provider!.sendRequest(\n sendTransactionParser.convertToRpcRequest({\n ...tx,\n from,\n network,\n valid_until: validUntil,\n messages: messages.map(({ extraCurrency, payload, stateInit, ...msg }) => ({\n ...msg,\n payload: normalizeBase64(payload),\n stateInit: normalizeBase64(stateInit),\n extra_currency: extraCurrency\n }))\n }),\n {\n onRequestSent: options.onRequestSent,\n signal: abortController.signal,\n traceId\n }\n );\n\n if (sendTransactionParser.isError(response)) {\n this.tracker.trackTransactionSigningFailed(\n this.wallet,\n transaction,\n response.error.message,\n response.error.code,\n sessionInfo,\n traceId\n );\n return sendTransactionParser.parseAndThrowError(response);\n }\n\n const result = sendTransactionParser.convertFromRpcResponse(\n response as SendTransactionRpcResponseSuccess\n );\n this.tracker.trackTransactionSigned(this.wallet, transaction, result, sessionInfo, traceId);\n return { ...result, traceId: response.traceId };\n }\n\n public async signData(\n data: SignDataPayload,\n options?: OptionalTraceable<{\n onRequestSent?: () => void;\n signal?: AbortSignal;\n }>\n ): Promise<Traceable<SignDataResponse>> {\n const abortController = createAbortController(options?.signal);\n if (abortController.signal.aborted) {\n throw new TonConnectError('data sending was aborted');\n }\n\n // Validate sign data\n const validationError = validateSignDataPayload(data);\n if (validationError) {\n if (isQaModeEnabled()) {\n console.error('SignDataPayload validation failed: ' + validationError);\n } else {\n throw new TonConnectError('SignDataPayload validation failed: ' + validationError);\n }\n }\n\n this.checkConnection();\n checkSignDataSupport(this.wallet!.device.features, { requiredTypes: [data.type] });\n\n const sessionInfo = this.getSessionInfo();\n const traceId = options?.traceId ?? UUIDv7();\n this.tracker.trackDataSentForSignature(this.wallet, data, sessionInfo, traceId);\n\n const from = data.from || this.account!.address;\n const network = data.network || this.account!.chain;\n\n if (this.wallet?.account.chain && network !== this.wallet.account.chain) {\n if (!isQaModeEnabled()) {\n throw new WalletWrongNetworkError('Wallet connected to a wrong network', {\n cause: {\n expectedChainId: this.wallet?.account.chain,\n actualChainId: network\n }\n });\n }\n console.error('Wallet connected to a wrong network', {\n expectedChainId: this.wallet?.account.chain,\n actualChainId: network\n });\n }\n\n const response = await this.provider!.sendRequest(\n signDataParser.convertToRpcRequest({\n ...data,\n ...(data.type === 'cell' ? { cell: normalizeBase64(data.cell) } : {}),\n from,\n network\n }),\n { onRequestSent: options?.onRequestSent, signal: abortController.signal, traceId }\n );\n\n if (signDataParser.isError(response)) {\n this.tracker.trackDataSigningFailed(\n this.wallet,\n data,\n response.error.message,\n response.error.code,\n sessionInfo,\n traceId\n );\n return signDataParser.parseAndThrowError(response);\n }\n\n const result = signDataParser.convertFromRpcResponse(\n response as SignDataRpcResponseSuccess\n );\n\n this.tracker.trackDataSigned(this.wallet, data, result, sessionInfo, traceId);\n\n return { ...result, traceId };\n }\n\n /**\n * Set desired network for the connection. Can only be set before connecting.\n * If wallet connects with a different chain, the SDK will throw an error and abort connection.\n * @param network desired network id (e.g., '-239', '-3', or custom). Pass undefined to allow any network.\n */\n public setConnectionNetwork(network?: ChainId): void {\n if (this.connected) {\n throw new TonConnectError('Cannot change network while wallet is connected');\n }\n this.desiredChainId = network;\n }\n\n /**\n * Disconnect form thw connected wallet and drop current session.\n */\n public async disconnect(options?: OptionalTraceable<{ signal?: AbortSignal }>): Promise<void> {\n if (!this.connected) {\n throw new WalletNotConnectedError();\n }\n\n const abortController = createAbortController(options?.signal);\n const prevAbortController = this.abortController;\n this.abortController = abortController;\n\n if (abortController.signal.aborted) {\n throw new TonConnectError('Disconnect was aborted');\n }\n\n const traceId = options?.traceId ?? UUIDv7();\n\n this.onWalletDisconnected('dapp', { traceId });\n await this.provider?.disconnect({\n signal: abortController.signal,\n traceId\n });\n prevAbortController?.abort();\n }\n\n /**\n * Gets the current session ID if available.\n * @returns session ID string or null if not available.\n */\n public async getSessionId(): Promise<string | null> {\n if (!this.provider) {\n return null;\n }\n\n try {\n const connection = await this.bridgeConnectionStorage.getConnection();\n if (!connection || connection.type !== 'http') {\n return null;\n }\n\n if ('sessionCrypto' in connection) {\n // Pending connection\n return connection.sessionCrypto.sessionId;\n } else {\n // Established connection\n return connection.session.sessionCrypto.sessionId;\n }\n } catch {\n return null;\n }\n }\n\n private getSessionInfo(): { clientId: string | null; walletId: string | null } | null {\n if (this.provider?.type !== 'http') {\n return null;\n }\n\n if (!('session' in this.provider)) {\n return null;\n }\n\n try {\n const session = this.provider.session as BridgeSession | BridgePartialSession | null;\n if (!session) {\n return null;\n }\n const clientId = session.sessionCrypto.sessionId;\n let walletId = null;\n if ('walletPublicKey' in session) {\n walletId = session.walletPublicKey;\n }\n return { clientId, walletId };\n } catch {\n return null;\n }\n }\n\n /**\n * Pause bridge HTTP connection. Might be helpful, if you want to pause connections while browser tab is unfocused,\n * or if you use SDK with NodeJS and want to save server resources.\n */\n public pauseConnection(): void {\n if (this.provider?.type !== 'http') {\n return;\n }\n\n this.provider.pause();\n }\n\n /**\n * Unpause bridge HTTP connection if it is paused.\n */\n public unPauseConnection(): Promise<void> {\n if (this.provider?.type !== 'http') {\n return Promise.resolve();\n }\n\n return this.provider.unPause();\n }\n\n private addWindowFocusAndBlurSubscriptions(): void {\n const document = getDocument();\n if (!document) {\n return;\n }\n\n try {\n document.addEventListener('visibilitychange', () => {\n if (document.hidden) {\n this.pauseConnection();\n } else {\n this.unPauseConnection().catch(() => {});\n }\n });\n } catch (e) {\n logError('Cannot subscribe to the document.visibilitychange: ', e);\n }\n }\n\n private initAnalytics(\n manifestUrl: string,\n eventDispatcher: EventDispatcher<SdkActionEvent>,\n options?: TonConnectOptions\n ): void {\n const analyticsSettings: AnalyticsSettings | undefined = options?.analytics;\n const mode = analyticsSettings?.mode ?? 'telemetry';\n\n if (mode === 'off') {\n return;\n }\n\n const analytics = new AnalyticsManager({\n environment: this.environment,\n mode\n });\n this.analytics = analytics;\n\n const telegramUser = this.environment.getTelegramUser();\n\n const sharedAnalyticsData: Parameters<typeof analytics.scoped>[0] = {\n browser: this.environment.getBrowser(),\n platform: this.environment.getPlatform(),\n manifest_json_url: manifestUrl,\n origin_url: getOriginWithPath,\n locale: this.environment.getLocale()\n };\n\n if (telegramUser) {\n sharedAnalyticsData.tg_id = telegramUser.id;\n sharedAnalyticsData.tma_is_premium = telegramUser.isPremium;\n }\n\n bindEventsTo(eventDispatcher, analytics.scoped(sharedAnalyticsData));\n }\n\n private createProvider(\n wallet: WalletConnectionSource | Pick<WalletConnectionSourceHTTP, 'bridgeUrl'>[]\n ): Provider {\n let provider: Provider;\n\n if (!Array.isArray(wallet) && isWalletConnectionSourceJS(wallet)) {\n provider = new InjectedProvider(\n this.bridgeConnectionStorage,\n wallet.jsBridgeKey,\n this.analytics\n );\n } else if (!Array.isArray(wallet) && isWalletConnectionSourceWalletConnect(wallet)) {\n provider = new WalletConnectProvider(this.bridgeConnectionStorage);\n } else {\n provider = new BridgeProvider(this.bridgeConnectionStorage, wallet, this.analytics);\n }\n\n provider.listen(this.walletEventsListener.bind(this));\n return provider;\n }\n\n private walletEventsListener(e: TraceableWalletEvent): void {\n switch (e.event) {\n case 'connect':\n this.onWalletConnected(e.payload, { traceId: e.traceId });\n break;\n case 'connect_error':\n this.tracker.trackConnectionError(\n e.payload.message,\n e.payload.code,\n this.getSessionInfo(),\n e.traceId\n );\n const walletError = connectErrorsParser.parseError(e.payload);\n this.onWalletConnectError(walletError);\n break;\n case 'disconnect':\n this.onWalletDisconnected('wallet', { traceId: e.traceId });\n }\n }\n\n private onWalletConnected(\n connectEvent: ConnectEventSuccess['payload'],\n options: Traceable\n ): void {\n const tonAccountItem: TonAddressItemReply | undefined = connectEvent.items.find(\n item => item.name === 'ton_addr'\n ) as TonAddressItemReply | undefined;\n\n const tonProofItem: TonProofItemReply | undefined = connectEvent.items.find(\n item => item.name === 'ton_proof'\n ) as TonProofItemReply | undefined;\n\n if (!tonAccountItem) {\n throw new TonConnectError('ton_addr connection item was not found');\n }\n\n const hasRequiredFeatures = checkRequiredWalletFeatures(\n connectEvent.device.features,\n this.walletsRequiredFeatures\n );\n\n if (!hasRequiredFeatures) {\n this.provider?.disconnect();\n this.onWalletConnectError(\n new WalletMissingRequiredFeaturesError(\n 'Wallet does not support required features',\n { cause: { connectEvent } }\n )\n );\n return;\n }\n\n const wallet: Wallet = {\n device: connectEvent.device,\n provider: this.provider!.type,\n account: {\n address: tonAccountItem.address,\n chain: tonAccountItem.network,\n walletStateInit: tonAccountItem.walletStateInit,\n publicKey: tonAccountItem.publicKey\n }\n };\n\n if (this.desiredChainId && wallet.account.chain !== this.desiredChainId) {\n const expectedChainId = this.desiredChainId;\n const actualChainId = wallet.account.chain;\n this.provider?.disconnect();\n this.onWalletConnectError(\n new WalletWrongNetworkError('Wallet connected to a wrong network', {\n cause: { expectedChainId, actualChainId }\n })\n );\n return;\n }\n\n if (tonProofItem) {\n const validationError = validateTonProofItemReply(tonProofItem as unknown);\n let tonProof: TonProofItemReply | undefined = undefined;\n if (validationError) {\n if (isQaModeEnabled()) {\n console.error('TonProofItem validation failed: ' + validationError);\n }\n tonProof = {\n name: 'ton_proof',\n error: {\n code: CONNECT_ITEM_ERROR_CODES.UNKNOWN_ERROR,\n message: validationError\n }\n };\n } else {\n try {\n if ('proof' in tonProofItem) {\n tonProof = {\n name: 'ton_proof',\n proof: {\n timestamp: tonProofItem.proof.timestamp,\n domain: {\n lengthBytes: tonProofItem.proof.domain.lengthBytes,\n value: tonProofItem.proof.domain.value\n },\n payload: tonProofItem.proof.payload,\n signature: tonProofItem.proof.signature\n }\n };\n } else if ('error' in tonProofItem) {\n tonProof = {\n name: 'ton_proof',\n error: {\n code: tonProofItem.error.code,\n message: tonProofItem.error.message\n }\n };\n } else {\n throw new TonConnectError('Invalid data format');\n }\n } catch (e) {\n tonProof = {\n name: 'ton_proof',\n error: {\n code: CONNECT_ITEM_ERROR_CODES.UNKNOWN_ERROR,\n message: 'Invalid data format'\n }\n };\n }\n }\n\n wallet.connectItems = { tonProof };\n }\n\n this.wallet = wallet;\n\n const sessionInfo = this.getSessionInfo();\n this.tracker.trackConnectionCompleted(wallet, sessionInfo, options?.traceId);\n }\n\n private onWalletConnectError(error: TonConnectError): void {\n this.statusChangeErrorSubscriptions.forEach(errorsHandler => errorsHandler(error));\n logDebug(error);\n\n if (error instanceof ManifestNotFoundError || error instanceof ManifestContentErrorError) {\n logError(error);\n throw error;\n }\n }\n\n private onWalletDisconnected(scope: 'wallet' | 'dapp', options: Traceable): void {\n const sessionInfo = this.getSessionInfo();\n this.tracker.trackDisconnection(this.wallet, scope, sessionInfo, options?.traceId);\n this.wallet = null;\n }\n\n private checkConnection(): void | never {\n if (!this.connected) {\n throw new WalletNotConnectedError();\n }\n }\n\n private createConnectRequest(request?: ConnectAdditionalRequest): ConnectRequest {\n const items: ConnectItem[] = [\n {\n name: 'ton_addr',\n ...(this.desiredChainId ? { network: this.desiredChainId } : {})\n }\n ];\n\n if (request?.tonProof) {\n items.push({\n name: 'ton_proof',\n payload: request.tonProof\n });\n }\n\n return {\n manifestUrl: this.dappSettings.manifestUrl,\n items\n };\n }\n}\n","import { WalletNotInjectedError } from 'src/errors/wallet/wallet-not-injected.error';\nimport {\n AppRequest,\n ConnectEventError,\n ConnectRequest,\n RpcMethod,\n WalletResponse\n} from '@tonconnect/protocol';\nimport {\n InjectedWalletApi,\n isJSBridgeWithMetadata\n} from 'src/provider/injected/models/injected-wallet-api';\nimport { InternalProvider } from 'src/provider/provider';\nimport { BridgeConnectionStorage } from 'src/storage/bridge-connection-storage';\nimport { OptionalTraceable, Traceable, WithoutId } from 'src/utils/types';\nimport { getWindow, getWindowEntries } from 'src/utils/web-api';\nimport { PROTOCOL_VERSION } from 'src/resources/protocol';\nimport { WalletInfoCurrentlyInjected } from 'src/models';\nimport { logDebug } from 'src/utils/log';\nimport { Analytics } from 'src/analytics/analytics';\nimport { AnalyticsManager } from 'src/analytics/analytics-manager';\nimport { JsBridgeEvent } from 'src/analytics/types';\nimport { UUIDv7 } from 'src/utils/uuid';\nimport { TraceableWalletEvent } from 'src/models/wallet/traceable-events';\n\ntype WindowWithTon<T extends string> = {\n [key in T]: {\n tonconnect: InjectedWalletApi;\n };\n} & Window;\n\nexport class InjectedProvider<T extends string = string> implements InternalProvider {\n private static window = getWindow();\n\n public static async fromStorage(\n storage: BridgeConnectionStorage,\n analyticsManager?: AnalyticsManager\n ): Promise<InjectedProvider> {\n const connection = await storage.getInjectedConnection();\n return new InjectedProvider(storage, connection.jsBridgeKey, analyticsManager);\n }\n\n public static isWalletInjected(injectedWalletKey: string): boolean {\n return InjectedProvider.isWindowContainsWallet(this.window, injectedWalletKey);\n }\n\n public static isInsideWalletBrowser(injectedWalletKey: string): boolean {\n if (InjectedProvider.isWindowContainsWallet(this.window, injectedWalletKey)) {\n return this.window[injectedWalletKey]!.tonconnect.isWalletBrowser;\n }\n\n return false;\n }\n\n public static getCurrentlyInjectedWallets(): WalletInfoCurrentlyInjected[] {\n if (!this.window) {\n return [];\n }\n\n const windowEntries = getWindowEntries();\n const wallets = windowEntries.filter(([_key, value]) => isJSBridgeWithMetadata(value)) as [\n string,\n { tonconnect: InjectedWalletApi }\n ][];\n\n return wallets.map(([jsBridgeKey, wallet]) => ({\n name: wallet.tonconnect.walletInfo.name,\n appName: wallet.tonconnect.walletInfo.app_name,\n aboutUrl: wallet.tonconnect.walletInfo.about_url,\n imageUrl: wallet.tonconnect.walletInfo.image,\n tondns: wallet.tonconnect.walletInfo.tondns,\n jsBridgeKey,\n injected: true,\n embedded: wallet.tonconnect.isWalletBrowser,\n platforms: wallet.tonconnect.walletInfo.platforms,\n features: wallet.tonconnect.walletInfo.features\n }));\n }\n\n private static isWindowContainsWallet<T extends string>(\n window: Window | undefined,\n injectedWalletKey: string\n ): window is WindowWithTon<T> {\n return (\n !!window &&\n injectedWalletKey in window &&\n typeof window[injectedWalletKey as keyof Window] === 'object' &&\n 'tonconnect' in window[injectedWalletKey as keyof Window]\n );\n }\n\n public readonly type = 'injected';\n\n private unsubscribeCallback: (() => void) | null = null;\n\n private injectedWallet: InjectedWalletApi;\n\n private listenSubscriptions = false;\n\n private listeners: Array<(e: TraceableWalletEvent) => void> = [];\n private readonly analytics?: Analytics<\n JsBridgeEvent,\n 'bridge_key' | 'wallet_app_name' | 'wallet_app_version'\n >;\n\n constructor(\n private readonly connectionStorage: BridgeConnectionStorage,\n private readonly injectedWalletKey: T,\n analyticsManager?: AnalyticsManager\n ) {\n const window: Window | undefined | WindowWithTon<T> = InjectedProvider.window;\n if (!InjectedProvider.isWindowContainsWallet(window, injectedWalletKey)) {\n throw new WalletNotInjectedError();\n }\n\n this.injectedWallet = window[injectedWalletKey]!.tonconnect!;\n\n if (analyticsManager) {\n this.analytics = analyticsManager.scoped({\n bridge_key: injectedWalletKey,\n wallet_app_name: this.injectedWallet.deviceInfo.appName,\n wallet_app_version: this.injectedWallet.deviceInfo.appVersion\n });\n }\n }\n\n public connect(message: ConnectRequest, options?: OptionalTraceable): void {\n this._connect(PROTOCOL_VERSION, message, options);\n }\n\n public async restoreConnection(options?: OptionalTraceable): Promise<void> {\n const traceId = options?.traceId ?? UUIDv7();\n try {\n logDebug(`Injected Provider restoring connection...`);\n this.analytics?.emitJsBridgeCall({\n js_bridge_method: 'restoreConnection',\n trace_id: traceId\n });\n const connectEvent = await this.injectedWallet.restoreConnection({\n traceId\n });\n this.analytics?.emitJsBridgeResponse({\n js_bridge_method: 'restoreConnection',\n trace_id: traceId\n });\n logDebug('Injected Provider restoring connection response', connectEvent);\n\n if (connectEvent.event === 'connect') {\n this.makeSubscriptions({ traceId });\n this.listeners.forEach(listener => listener({ ...connectEvent, traceId }));\n } else {\n await this.connectionStorage.removeConnection();\n }\n } catch (e) {\n this.analytics?.emitJsBridgeError({\n js_bridge_method: 'restoreConnection',\n error_message: String(e),\n trace_id: traceId\n });\n await this.connectionStorage.removeConnection();\n console.error(e);\n }\n }\n\n public closeConnection(): void {\n if (this.listenSubscriptions) {\n this.injectedWallet.disconnect();\n }\n this.closeAllListeners();\n }\n\n public async disconnect(options?: OptionalTraceable): Promise<void> {\n const traceId = options?.traceId ?? UUIDv7();\n return new Promise(resolve => {\n const onRequestSent = (): void => {\n this.closeAllListeners();\n this.connectionStorage.removeConnection().then(resolve);\n };\n\n try {\n this.injectedWallet.disconnect();\n onRequestSent();\n } catch (e) {\n logDebug(e);\n\n this.sendRequest(\n {\n method: 'disconnect',\n params: []\n },\n { onRequestSent, traceId }\n );\n }\n });\n }\n\n private closeAllListeners(): void {\n this.listenSubscriptions = false;\n this.listeners = [];\n this.unsubscribeCallback?.();\n }\n\n public listen(eventsCallback: (e: TraceableWalletEvent) => void): () => void {\n this.listeners.push(eventsCallback);\n return () =>\n (this.listeners = this.listeners.filter(listener => listener !== eventsCallback));\n }\n\n public sendRequest<T extends RpcMethod>(\n request: WithoutId<AppRequest<T>>,\n options?: OptionalTraceable<{\n onRequestSent?: () => void;\n signal?: AbortSignal;\n attempts?: number;\n }>\n ): Promise<WithoutId<WalletResponse<T>>>;\n /** @deprecated use sendRequest(transaction, options) instead */\n public sendRequest<T extends RpcMethod>(\n request: WithoutId<AppRequest<T>>,\n onRequestSent?: () => void\n ): Promise<WithoutId<WalletResponse<T>>>;\n public async sendRequest<T extends RpcMethod>(\n request: WithoutId<AppRequest<T>>,\n optionsOrOnRequestSent?:\n | (() => void)\n | OptionalTraceable<{\n onRequestSent?: () => void;\n signal?: AbortSignal;\n attempts?: number;\n }>\n ): Promise<WithoutId<WalletResponse<T>>> {\n // TODO: remove deprecated method\n const options: OptionalTraceable<{\n onRequestSent?: () => void;\n signal?: AbortSignal;\n attempts?: number;\n }> = {};\n if (typeof optionsOrOnRequestSent === 'function') {\n options.onRequestSent = optionsOrOnRequestSent;\n options.traceId = UUIDv7();\n } else {\n options.onRequestSent = optionsOrOnRequestSent?.onRequestSent;\n options.signal = optionsOrOnRequestSent?.signal;\n options.attempts = optionsOrOnRequestSent?.attempts;\n options.traceId = optionsOrOnRequestSent?.traceId ?? UUIDv7();\n }\n\n const id = (await this.connectionStorage.getNextRpcRequestId()).toString();\n await this.connectionStorage.increaseNextRpcRequestId();\n\n logDebug('Send injected-bridge request:', { ...request, id });\n this.analytics?.emitJsBridgeCall({\n js_bridge_method: 'send'\n });\n const result = this.injectedWallet.send<T>({ ...request, id } as AppRequest<T>, {\n traceId: options.traceId\n });\n result\n .then(response => {\n this.analytics?.emitJsBridgeResponse({\n js_bridge_method: 'send'\n });\n logDebug('Wallet message received:', response);\n })\n .catch(error => {\n this.analytics?.emitJsBridgeError({\n js_bridge_method: 'send',\n error_message: String(error)\n });\n });\n options?.onRequestSent?.();\n\n return result;\n }\n\n private async _connect(\n protocolVersion: number,\n message: ConnectRequest,\n options?: OptionalTraceable\n ): Promise<void> {\n const traceId = options?.traceId ?? UUIDv7();\n try {\n logDebug(\n `Injected Provider connect request: protocolVersion: ${protocolVersion}, message:`,\n message\n );\n this.analytics?.emitJsBridgeCall({\n js_bridge_method: 'connect',\n trace_id: traceId\n });\n const connectEvent = await this.injectedWallet.connect(protocolVersion, message, {\n traceId\n });\n this.analytics?.emitJsBridgeResponse({\n js_bridge_method: 'connect'\n });\n logDebug('Injected Provider connect response:', connectEvent);\n\n if (connectEvent.event === 'connect') {\n await this.updateSession();\n this.makeSubscriptions({ traceId });\n }\n this.listeners.forEach(listener => listener({ ...connectEvent, traceId }));\n } catch (e) {\n this.analytics?.emitJsBridgeError({\n js_bridge_method: 'connect',\n error_message: String(e),\n trace_id: traceId\n });\n logDebug('Injected Provider connect error:', e);\n const connectEventError: WithoutId<ConnectEventError> = {\n event: 'connect_error',\n payload: {\n code: 0,\n message: e?.toString()\n }\n };\n\n this.listeners.forEach(listener => listener({ ...connectEventError, traceId }));\n }\n }\n\n private makeSubscriptions(options: Traceable): void {\n this.listenSubscriptions = true;\n this.analytics?.emitJsBridgeCall({\n js_bridge_method: 'listen',\n trace_id: options.traceId\n });\n try {\n this.unsubscribeCallback = this.injectedWallet.listen(e => {\n const traceId = e.traceId ?? UUIDv7();\n logDebug('Wallet message received:', e);\n\n if (this.listenSubscriptions) {\n this.listeners.forEach(listener => listener({ ...e, traceId }));\n }\n\n if (e.event === 'disconnect') {\n this.disconnect({ traceId });\n }\n });\n this.analytics?.emitJsBridgeResponse({\n js_bridge_method: 'listen',\n trace_id: options.traceId\n });\n } catch (err) {\n this.analytics?.emitJsBridgeError({\n js_bridge_method: 'listen',\n error_message: String(err),\n trace_id: options.traceId\n });\n throw err;\n }\n }\n\n private updateSession(): Promise<void> {\n return this.connectionStorage.storeConnection({\n type: 'injected',\n jsBridgeKey: this.injectedWalletKey,\n nextRpcRequestId: 0\n });\n }\n}\n","export * from './protocol';\nexport * from './wallet';\nexport * from './storage';\nexport * from './wallets-manager';\nexport * from './address';\nexport * from './binary';\nexport { TonConnectError } from './ton-connect.error';\nexport { UnknownError } from './unknown.error';\n","export * from './wallet';\nexport * from './methods';\nexport { DappMetadata } from './dapp/dapp-metadata';\nexport { TonConnectOptions } from './ton-connect-options';\n","export type AsStruct<T> = { [P in keyof T as T[P] extends Function ? never : P]: T[P] };\n\nexport type WithoutId<T extends { id: unknown }> = Omit<T, 'id'>;\nexport type WithoutIdDistributive<T extends { id: unknown }> = DistributiveOmit<T, 'id'>;\n\nexport type DistributiveOmit<T, K extends keyof T> = T extends unknown ? Omit<T, K> : never;\n\nexport type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;\n\nexport function hasProperty<T extends string>(\n value: unknown,\n propertyKey: T\n): value is Record<T, unknown> {\n return hasProperties(value, [propertyKey]);\n}\n\nexport function hasProperties<T extends string>(\n value: unknown,\n propertyKeys: T[]\n): value is Record<T, unknown> {\n if (!value || typeof value !== 'object') {\n return false;\n }\n\n return propertyKeys.every(propertyKey => propertyKey in value);\n}\n\nexport type Dynamic<TObject extends Record<string, unknown>> = {\n [Key in keyof TObject]: TObject[Key] | (() => TObject[Key]);\n};\n\nexport type Traceable<T extends {} = {}> = { traceId: string } & T;\nexport type OptionalTraceable<T extends {} = {}> = { traceId?: string } & T;\n","import { Feature, SendTransactionFeature, SignDataFeature } from '@tonconnect/protocol';\nimport { logWarning } from 'src/utils/log';\nimport { WalletNotSupportFeatureError } from 'src/errors/wallet';\nimport {\n RequiredFeatures,\n RequiredSendTransactionFeature,\n RequiredSignDataFeature\n} from 'src/models';\n\nexport function checkSendTransactionSupport(\n features: Feature[],\n options: { requiredMessagesNumber: number; requireExtraCurrencies: boolean }\n): never | void {\n const supportsDeprecatedSendTransactionFeature = features.includes('SendTransaction');\n const sendTransactionFeature = findFeature(features, 'SendTransaction');\n\n const requiredFeature: RequiredSendTransactionFeature = {\n minMessages: options.requiredMessagesNumber,\n extraCurrencyRequired: options.requireExtraCurrencies\n };\n\n if (!supportsDeprecatedSendTransactionFeature && !sendTransactionFeature) {\n throw new WalletNotSupportFeatureError(\"Wallet doesn't support SendTransaction feature.\", {\n cause: { requiredFeature: { featureName: 'SendTransaction', value: requiredFeature } }\n });\n }\n\n if (options.requireExtraCurrencies) {\n if (!sendTransactionFeature || !sendTransactionFeature.extraCurrencySupported) {\n throw new WalletNotSupportFeatureError(\n `Wallet is not able to handle such SendTransaction request. Extra currencies support is required.`,\n {\n cause: {\n requiredFeature: { featureName: 'SendTransaction', value: requiredFeature }\n }\n }\n );\n }\n }\n\n if (sendTransactionFeature && sendTransactionFeature.maxMessages !== undefined) {\n if (sendTransactionFeature.maxMessages < options.requiredMessagesNumber) {\n throw new WalletNotSupportFeatureError(\n `Wallet is not able to handle such SendTransaction request. Max support messages number is ${sendTransactionFeature.maxMessages}, but ${options.requiredMessagesNumber} is required.`,\n {\n cause: {\n requiredFeature: { featureName: 'SendTransaction', value: requiredFeature }\n }\n }\n );\n }\n return;\n }\n\n logWarning(\n \"Connected wallet didn't provide information about max allowed messages in the SendTransaction request. Request may be rejected by the wallet.\"\n );\n}\n\nexport function checkSignDataSupport(\n features: Feature[],\n options: { requiredTypes: SignDataFeature['types'] }\n): never | void {\n const signDataFeature = features.find(\n feature => feature && typeof feature === 'object' && feature.name === 'SignData'\n ) as SignDataFeature;\n\n if (!signDataFeature) {\n throw new WalletNotSupportFeatureError(\"Wallet doesn't support SignData feature.\", {\n cause: {\n requiredFeature: {\n featureName: 'SignData',\n value: { types: options.requiredTypes }\n }\n }\n });\n }\n\n const unsupportedTypes = options.requiredTypes.filter(\n requiredType => !signDataFeature.types.includes(requiredType)\n );\n\n if (unsupportedTypes.length) {\n throw new WalletNotSupportFeatureError(\n `Wallet doesn't support required SignData types: ${unsupportedTypes.join(', ')}.`,\n {\n cause: {\n requiredFeature: { featureName: 'SignData', value: { types: unsupportedTypes } }\n }\n }\n );\n }\n}\n\nexport function checkRequiredWalletFeatures(\n features: Feature[],\n walletsRequiredFeatures?: RequiredFeatures\n): boolean {\n if (typeof walletsRequiredFeatures !== 'object') {\n return true;\n }\n\n const { sendTransaction, signData } = walletsRequiredFeatures;\n\n if (sendTransaction) {\n const feature = findFeature(features, 'SendTransaction');\n if (!feature) {\n return false;\n }\n\n if (!checkSendTransaction(feature, sendTransaction)) {\n return false;\n }\n }\n\n if (signData) {\n const feature = findFeature(features, 'SignData');\n if (!feature) {\n return false;\n }\n\n if (!checkSignData(feature, signData)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction findFeature<T extends Exclude<Feature, 'SendTransaction'>, P extends T['name']>(\n features: Feature[],\n requiredFeatureName: P\n): (T & { name: P }) | undefined {\n return features.find(f => f && typeof f === 'object' && f.name === requiredFeatureName) as\n | (T & {\n name: P;\n })\n | undefined;\n}\n\nfunction checkSendTransaction(\n feature: SendTransactionFeature,\n requiredFeature: RequiredSendTransactionFeature\n): boolean {\n const correctMessagesNumber =\n requiredFeature.minMessages === undefined ||\n requiredFeature.minMessages <= feature.maxMessages;\n\n const correctExtraCurrency =\n !requiredFeature.extraCurrencyRequired || feature.extraCurrencySupported;\n\n return !!(correctMessagesNumber && correctExtraCurrency);\n}\n\nfunction checkSignData(\n feature: SignDataFeature,\n requiredFeature: RequiredSignDataFeature\n): boolean {\n return requiredFeature.types.every(requiredType => feature.types.includes(requiredType));\n}\n","export { BadRequestError } from './bad-request.error';\nexport { UnknownAppError } from './unknown-app.error';\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when passed hex is in incorrect format.\n */\nexport class ParseHexError extends TonConnectError {\n protected get info(): string {\n return 'Passed hex is in incorrect format.';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, ParseHexError.prototype);\n }\n}\n","import {\n AppRequest,\n ConnectEvent,\n ConnectRequest,\n DeviceInfo,\n RpcMethod,\n WalletEvent,\n WalletResponse\n} from '@tonconnect/protocol';\nimport { WalletInfoDTO } from 'src/models/wallet/wallet-info';\nimport { hasProperties, hasProperty, OptionalTraceable } from 'src/utils/types';\n\nexport interface InjectedWalletApi {\n deviceInfo: DeviceInfo;\n walletInfo: Pick<\n WalletInfoDTO,\n 'name' | 'app_name' | 'tondns' | 'image' | 'about_url' | 'platforms' | 'features'\n >;\n protocolVersion: number;\n isWalletBrowser: boolean;\n connect(\n protocolVersion: number,\n message: ConnectRequest,\n options?: OptionalTraceable\n ): Promise<OptionalTraceable<ConnectEvent>>;\n restoreConnection(options?: OptionalTraceable): Promise<OptionalTraceable<ConnectEvent>>;\n send<T extends RpcMethod>(\n message: AppRequest<T>,\n options?: OptionalTraceable\n ): Promise<WalletResponse<T>>;\n listen(callback: (event: OptionalTraceable<WalletEvent>) => void): () => void;\n\n /**\n * @deprecated\n */\n disconnect(): void;\n}\n\nexport function isJSBridgeWithMetadata(value: unknown): value is { tonconnect: InjectedWalletApi } {\n try {\n if (!hasProperty(value, 'tonconnect') || !hasProperty(value.tonconnect, 'walletInfo')) {\n return false;\n }\n\n return hasProperties(value.tonconnect.walletInfo, [\n 'name',\n 'app_name',\n 'image',\n 'about_url',\n 'platforms'\n ]);\n } catch {\n return false;\n }\n}\n","declare const TON_CONNECT_SDK_VERSION: string;\n\nexport const tonConnectSdkVersion = TON_CONNECT_SDK_VERSION;\n","import { TonConnectError } from 'src/errors';\nimport { createAbortController } from 'src/utils/create-abort-controller';\n\n/**\n * Represents the options for deferring a task.\n */\nexport type DeferOptions = {\n /**\n * The timeout in milliseconds after which the task should be aborted.\n */\n timeout?: number;\n\n /**\n * An optional AbortSignal to use for aborting the task.\n */\n signal?: AbortSignal;\n};\n\n/**\n * Represents a deferrable action that can be executed asynchronously.\n *\n * @template T The type of the value returned by the deferrable action.\n * @param {DeferOptions} [options] The options to configure the deferrable action.\n * @returns {Promise<T>} A promise that resolves with the result of the deferrable action.\n */\nexport type Deferrable<T> = (\n resolve: (value: T) => void,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n reject: (reason?: any) => void,\n options: DeferOptions\n) => Promise<void>;\n\n/**\n * Executes a function and provides deferred behavior, allowing for a timeout and abort functionality.\n *\n * @param {Deferrable<T>} fn - The function to execute. It should return a promise that resolves with the desired result.\n * @param {DeferOptions} options - Optional configuration options for the defer behavior.\n * @returns {Promise<T>} - A promise that resolves with the result of the executed function, or rejects with an error if it times out or is aborted.\n */\nexport function timeout<T>(fn: Deferrable<T>, options?: DeferOptions): Promise<T> {\n const timeout = options?.timeout;\n const signal = options?.signal;\n\n const abortController = createAbortController(signal);\n\n return new Promise(async (resolve, reject) => {\n if (abortController.signal.aborted) {\n reject(new TonConnectError('Operation aborted'));\n return;\n }\n\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n if (typeof timeout !== 'undefined') {\n timeoutId = setTimeout(() => {\n abortController.abort();\n reject(new TonConnectError(`Timeout after ${timeout}ms`));\n }, timeout);\n }\n\n abortController.signal.addEventListener(\n 'abort',\n () => {\n clearTimeout(timeoutId);\n reject(new TonConnectError('Operation aborted'));\n },\n { once: true }\n );\n\n const deferOptions = { timeout, abort: abortController.signal };\n await fn(\n (...args) => {\n clearTimeout(timeoutId);\n resolve(...args);\n },\n () => {\n clearTimeout(timeoutId);\n reject();\n },\n deferOptions\n );\n });\n}\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when there is an attempt to connect to the injected wallet while it is not exists in the webpage.\n */\nexport class WalletNotInjectedError extends TonConnectError {\n protected get info(): string {\n return 'There is an attempt to connect to the injected wallet while it is not exists in the webpage.';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, WalletNotInjectedError.prototype);\n }\n}\n","import { SessionCrypto } from '@tonconnect/protocol';\nimport { TonConnectError } from 'src/errors';\nimport { BridgeSessionRaw } from 'src/provider/bridge/models/bridge-session-raw';\nimport {\n BridgeConnection,\n BridgeConnectionHttp,\n BridgeConnectionHttpRaw,\n BridgeConnectionInjected,\n BridgeConnectionRaw,\n BridgeConnectionWalletConnect,\n BridgePendingConnectionHttp,\n BridgePendingConnectionHttpRaw,\n isExpiredPendingConnectionHttpRaw,\n isPendingConnectionHttp,\n isPendingConnectionHttpRaw\n} from 'src/provider/bridge/models/bridge-connection';\nimport { IStorage } from 'src/storage/models/storage.interface';\nimport { logDebug } from 'src/utils/log';\nimport { WalletsListManager } from 'src/wallets-list-manager';\n\nexport class BridgeConnectionStorage {\n private readonly storeKey = 'ton-connect-storage_bridge-connection';\n\n constructor(\n public readonly storage: IStorage,\n private readonly walletsListManager: WalletsListManager\n ) {}\n\n public async storeConnection(connection: BridgeConnection): Promise<void> {\n if (connection.type === 'injected' || connection.type === 'wallet-connect') {\n return this.storage.setItem(this.storeKey, JSON.stringify(connection));\n }\n\n if (!isPendingConnectionHttp(connection)) {\n const rawSession: BridgeSessionRaw = {\n sessionKeyPair: connection.session.sessionCrypto.stringifyKeypair(),\n walletPublicKey: connection.session.walletPublicKey,\n bridgeUrl: connection.session.bridgeUrl\n };\n\n const rawConnection: BridgeConnectionHttpRaw = {\n type: 'http',\n connectEvent: connection.connectEvent,\n session: rawSession,\n lastWalletEventId: connection.lastWalletEventId,\n nextRpcRequestId: connection.nextRpcRequestId\n };\n return this.storage.setItem(this.storeKey, JSON.stringify(rawConnection));\n }\n\n const rawConnection: BridgePendingConnectionHttpRaw = {\n type: 'http',\n connectionSource: connection.connectionSource,\n sessionCrypto: connection.sessionCrypto.stringifyKeypair(),\n createdAt: Date.now()\n };\n\n return this.storage.setItem(this.storeKey, JSON.stringify(rawConnection));\n }\n\n public async removeConnection(): Promise<void> {\n return this.storage.removeItem(this.storeKey);\n }\n\n public async getConnection(): Promise<BridgeConnection | null> {\n try {\n const stored = await this.storage.getItem(this.storeKey);\n if (!stored) {\n return null;\n }\n\n const connection: BridgeConnectionRaw = JSON.parse(stored);\n\n if (connection.type === 'injected' || connection.type === 'wallet-connect') {\n return connection;\n }\n\n if (!isPendingConnectionHttpRaw(connection)) {\n const sessionCrypto = new SessionCrypto(connection.session.sessionKeyPair);\n return await this.actualizeBridgeConnection({\n type: 'http',\n connectEvent: connection.connectEvent,\n lastWalletEventId: connection.lastWalletEventId,\n nextRpcRequestId: connection.nextRpcRequestId,\n session: {\n sessionCrypto,\n bridgeUrl: connection.session.bridgeUrl,\n walletPublicKey: connection.session.walletPublicKey\n }\n });\n }\n\n if (isExpiredPendingConnectionHttpRaw(connection)) {\n await this.removeConnection();\n return null;\n }\n\n return {\n type: 'http',\n sessionCrypto: new SessionCrypto(connection.sessionCrypto),\n connectionSource: connection.connectionSource\n };\n } catch (err) {\n logDebug('Error retrieving connection', err);\n return null;\n }\n }\n\n public async getHttpConnection(): Promise<BridgeConnectionHttp | BridgePendingConnectionHttp> {\n const connection = await this.getConnection();\n if (!connection) {\n throw new TonConnectError(\n 'Trying to read HTTP connection source while nothing is stored'\n );\n }\n\n if (connection.type !== 'http') {\n throw new TonConnectError(\n `Trying to read HTTP connection source while ${connection.type} connection is stored`\n );\n }\n\n return connection;\n }\n\n public async getHttpPendingConnection(): Promise<BridgePendingConnectionHttp> {\n const connection = await this.getConnection();\n if (!connection) {\n throw new TonConnectError(\n 'Trying to read HTTP connection source while nothing is stored'\n );\n }\n\n if (connection.type !== 'http') {\n throw new TonConnectError(\n `Trying to read HTTP connection source while ${connection.type} connection is stored`\n );\n }\n\n if (!isPendingConnectionHttp(connection)) {\n throw new TonConnectError(\n 'Trying to read HTTP-pending connection while http connection is stored'\n );\n }\n\n return connection;\n }\n\n public async getInjectedConnection(): Promise<BridgeConnectionInjected> {\n const connection = await this.getConnection();\n\n if (!connection) {\n throw new TonConnectError(\n 'Trying to read Injected bridge connection source while nothing is stored'\n );\n }\n\n if (connection?.type !== 'injected') {\n throw new TonConnectError(\n `Trying to read Injected bridge connection source while ${connection.type} connection is stored`\n );\n }\n\n return connection;\n }\n\n public async getWalletConnectConnection(): Promise<BridgeConnectionWalletConnect> {\n const connection = await this.getConnection();\n if (!connection) {\n throw new TonConnectError(\n 'Trying to read wallet connect bridge connection source while nothing is stored'\n );\n }\n\n if (connection?.type !== 'wallet-connect') {\n throw new TonConnectError(\n `Trying to read wallet connect bridge connection source while ${connection.type} connection is stored`\n );\n }\n\n return connection;\n }\n\n public async storedConnectionType(): Promise<BridgeConnection['type'] | null> {\n const stored = await this.storage.getItem(this.storeKey);\n if (!stored) {\n return null;\n }\n const connection: BridgeConnection = JSON.parse(stored);\n return connection.type;\n }\n\n public async storeLastWalletEventId(id: number): Promise<void> {\n const connection = await this.getConnection();\n if (connection && connection.type === 'http' && !isPendingConnectionHttp(connection)) {\n connection.lastWalletEventId = id;\n return this.storeConnection(connection);\n }\n }\n\n public async getLastWalletEventId(): Promise<number | undefined> {\n const connection = await this.getConnection();\n if (connection && 'lastWalletEventId' in connection) {\n return connection.lastWalletEventId;\n }\n\n return undefined;\n }\n\n public async increaseNextRpcRequestId(): Promise<void> {\n const connection = await this.getConnection();\n if (connection && 'nextRpcRequestId' in connection) {\n const lastId = connection.nextRpcRequestId || 0;\n connection.nextRpcRequestId = lastId + 1;\n return this.storeConnection(connection);\n }\n }\n\n public async getNextRpcRequestId(): Promise<number> {\n const connection = await this.getConnection();\n if (connection && 'nextRpcRequestId' in connection) {\n return connection.nextRpcRequestId || 0;\n }\n\n return 0;\n }\n\n private async actualizeBridgeConnection(\n connection: BridgeConnectionHttp\n ): Promise<BridgeConnectionHttp> {\n try {\n const appName = connection.connectEvent.payload.device.appName;\n const wallet = await this.walletsListManager.getRemoteWallet(appName);\n\n if (wallet.bridgeUrl === connection.session.bridgeUrl) {\n return connection;\n }\n\n const actualizedConnection = {\n ...connection,\n session: {\n ...connection.session,\n bridgeUrl: wallet.bridgeUrl\n }\n } satisfies BridgeConnectionHttp;\n\n await this.storeConnection(actualizedConnection);\n\n return actualizedConnection;\n } catch (error) {\n logDebug('Failed to actualize bridge connection', error);\n return connection;\n }\n }\n}\n","import {\n AppRequest,\n CHAIN,\n CONNECT_EVENT_ERROR_CODES,\n ConnectItemReply,\n ConnectRequest,\n DeviceInfo,\n DISCONNECT_ERROR_CODES,\n DisconnectRpcResponseSuccess,\n Feature,\n RpcMethod,\n SEND_TRANSACTION_ERROR_CODES,\n SendTransactionRpcResponseSuccess,\n SignDataRpcResponseSuccess,\n TonProofItemReplySuccess,\n WalletResponseTemplateError\n} from '@tonconnect/protocol';\nimport { TraceableWalletEvent, TraceableWalletResponse } from 'src/models/wallet/traceable-events';\nimport { OptionalTraceable, Traceable, WithoutId } from 'src/utils/types';\nimport { UUIDv7 } from 'src/utils/uuid';\nimport { InternalProvider } from 'src/provider/provider';\nimport { BridgeConnectionStorage } from 'src/storage/bridge-connection-storage';\nimport { TonConnectError } from 'src/errors';\nimport {\n isValidUserFriendlyAddress,\n parseUserFriendlyAddress,\n toRawAddress\n} from 'src/utils/address';\nimport {\n getUniversalConnector,\n getWalletConnectOptions\n} from 'src/provider/wallet-connect/initialize';\nimport { logDebug } from 'src/utils/log';\nimport { createAbortController } from 'src/utils/create-abort-controller';\nimport { WalletConnectMetadata } from 'src/provider/wallet-connect/models/wallet-connect-options';\n\nconst DEFAULT_REQUEST_ID = '0';\nconst DEFAULT_EVENT_ID = 0;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype UniversalConnector = any;\n\nexport class WalletConnectProvider implements InternalProvider {\n public readonly type = 'injected';\n\n private listeners: Array<(e: TraceableWalletEvent) => void> = [];\n\n private connector: UniversalConnector | undefined = undefined;\n\n private abortController?: AbortController;\n\n private readonly config: {\n projectId: string;\n metadata: WalletConnectMetadata;\n networks: {\n namespace: 'ton';\n methods: string[];\n events: [];\n chains: {\n id: string | number;\n chainNamespace: 'ton';\n caipNetworkId: `ton:${number}`;\n name: 'TON';\n nativeCurrency: { name: 'TON'; symbol: 'TON'; decimals: 9 };\n rpcUrls: { default: { http: [] } };\n }[];\n }[];\n };\n\n constructor(private readonly connectionStorage: BridgeConnectionStorage) {\n const { projectId, metadata } = getWalletConnectOptions();\n\n this.config = {\n networks: [\n {\n namespace: 'ton',\n chains: [\n {\n id: -239,\n chainNamespace: 'ton',\n caipNetworkId: 'ton:-239',\n name: 'TON',\n nativeCurrency: { name: 'TON', symbol: 'TON', decimals: 9 },\n rpcUrls: { default: { http: [] } }\n },\n {\n id: -3,\n chainNamespace: 'ton',\n caipNetworkId: 'ton:-3',\n name: 'TON',\n nativeCurrency: { name: 'TON', symbol: 'TON', decimals: 9 },\n rpcUrls: { default: { http: [] } }\n }\n ],\n methods: ['ton_sendMessage', 'ton_signData'],\n events: []\n }\n ],\n projectId,\n metadata\n };\n }\n\n public static async fromStorage(\n storage: BridgeConnectionStorage\n ): Promise<WalletConnectProvider> {\n return new WalletConnectProvider(storage);\n }\n\n private async initialize(): Promise<UniversalConnector> {\n if (!this.connector) {\n this.connector = await getUniversalConnector().init(this.config);\n }\n\n return this.connector;\n }\n\n connect(message: ConnectRequest, options?: OptionalTraceable<{ signal?: AbortSignal }>): void {\n const traceId = options?.traceId ?? UUIDv7();\n const abortController = createAbortController(options?.signal);\n this.abortController?.abort();\n this.abortController = abortController;\n\n void this._connect(message, {\n traceId,\n signal: abortController.signal,\n abortController\n }).catch(error => logDebug('WalletConnect connect unexpected error', error));\n }\n\n async _connect(\n message: ConnectRequest,\n options: Traceable<{ signal?: AbortSignal; abortController: AbortController }>\n ) {\n const connector = await this.initialize();\n\n if (options.signal?.aborted) {\n logDebug('WalletConnect connect aborted before start');\n this.clearAbortController(options.abortController);\n return;\n }\n\n const tonProof = message.items.find(item => item.name === 'ton_proof');\n\n const authentication = tonProof\n ? [\n {\n domain: new URL(this.config.metadata.url).hostname,\n chains: ['ton:-239'],\n nonce: '',\n uri: 'ton_proof',\n ttl: 0,\n statement: tonProof.payload\n }\n ]\n : undefined;\n logDebug('Connecting through this.connector.connect');\n\n try {\n await connector.connect({ authentication });\n } catch (error) {\n if (options.signal?.aborted) {\n logDebug('WalletConnect connect aborted via signal');\n this.clearAbortController(options.abortController);\n return;\n }\n\n logDebug('WalletConnect connect error', error);\n const event = {\n id: DEFAULT_EVENT_ID,\n event: 'connect_error',\n traceId: options.traceId,\n payload: {\n code: CONNECT_EVENT_ERROR_CODES.USER_REJECTS_ERROR,\n message: 'User declined the connection'\n }\n } as const;\n\n logDebug('WalletConnect connect response:', event);\n this.emit(event);\n this.clearAbortController(options.abortController);\n return;\n }\n\n logDebug('Connected through this.connector.connect');\n\n try {\n await this.onConnect(connector, { ...options, includeTonProof: true });\n } catch (error) {\n logDebug('WalletConnect onConnect error', error);\n await this.disconnect({ traceId: options.traceId, signal: options.signal });\n } finally {\n this.clearAbortController(options.abortController);\n }\n }\n\n async restoreConnection(\n options?: OptionalTraceable<{ openingDeadlineMS?: number; signal?: AbortSignal }>\n ): Promise<void> {\n const traceId = options?.traceId ?? UUIDv7();\n const abortController = createAbortController(options?.signal);\n this.abortController?.abort();\n this.abortController = abortController;\n\n if (abortController.signal.aborted) {\n return;\n }\n\n try {\n logDebug('Restoring WalletConnect connection...');\n const storedConnection = await this.connectionStorage.getWalletConnectConnection();\n if (!storedConnection || abortController.signal.aborted) {\n return;\n }\n\n const connector = await this.initialize();\n if (abortController.signal.aborted) {\n return;\n }\n\n await this.onConnect(connector, {\n includeTonProof: false,\n traceId,\n signal: abortController.signal\n });\n logDebug('WalletConnect successfully restored.');\n } catch (error) {\n logDebug('WalletConnect restore error', error);\n await this.disconnect({ traceId, signal: abortController.signal });\n } finally {\n this.clearAbortController(abortController);\n }\n }\n\n closeConnection(): void {\n this.abortController?.abort();\n this.abortController = undefined;\n void this.disconnect();\n }\n\n async disconnect(options?: OptionalTraceable<{ signal?: AbortSignal }>): Promise<void> {\n const abortController = createAbortController(options?.signal);\n this.abortController?.abort();\n this.abortController = abortController;\n\n if (abortController.signal.aborted) {\n return;\n }\n\n try {\n await this.connectionStorage.removeConnection();\n if (abortController.signal.aborted) {\n return;\n }\n await this.connector?.disconnect();\n } catch (error) {\n logDebug('WalletConnect disconnect error', error);\n } finally {\n this.clearAbortController(abortController);\n }\n }\n\n sendRequest<T extends RpcMethod>(\n request: WithoutId<AppRequest<T>>,\n options?: OptionalTraceable<{\n onRequestSent?: () => void;\n signal?: AbortSignal;\n attempts?: number;\n }>\n ): Promise<TraceableWalletResponse<T>>;\n sendRequest<T extends RpcMethod>(\n request: WithoutId<AppRequest<T>>,\n onRequestSent?: () => void\n ): Promise<TraceableWalletResponse<T>>;\n async sendRequest<T extends RpcMethod>(\n request: WithoutId<AppRequest<T>>,\n optionsOrOnRequestSent?:\n | (() => void)\n | OptionalTraceable<{\n attempts?: number;\n onRequestSent?: () => void;\n signal?: AbortSignal;\n }>\n ): Promise<TraceableWalletResponse<T>> {\n if (!this.connector) {\n throw new TonConnectError('Wallet Connect not initialized');\n }\n\n const options: OptionalTraceable<{\n onRequestSent?: () => void;\n signal?: AbortSignal;\n attempts?: number;\n }> = {};\n if (typeof optionsOrOnRequestSent === 'function') {\n options.onRequestSent = optionsOrOnRequestSent;\n } else {\n options.onRequestSent = optionsOrOnRequestSent?.onRequestSent;\n options.signal = optionsOrOnRequestSent?.signal;\n options.attempts = optionsOrOnRequestSent?.attempts;\n options.traceId = optionsOrOnRequestSent?.traceId;\n }\n options.traceId ??= UUIDv7();\n\n try {\n if (options.signal?.aborted) {\n throw new TonConnectError('WalletConnect request aborted');\n }\n\n logDebug('Send wallet-connect request:', { ...request, id: DEFAULT_REQUEST_ID });\n\n if (request.method === 'sendTransaction') {\n const { network, ...sendTransactionPayload } = JSON.parse(request.params[0]!);\n\n const promise = this.connector!.request(\n {\n method: 'ton_sendMessage',\n params: sendTransactionPayload\n },\n `ton:${network}`\n );\n\n options?.onRequestSent?.();\n\n const result = (await promise) as WithoutId<SendTransactionRpcResponseSuccess>;\n logDebug('Wallet message received:', { result, id: DEFAULT_REQUEST_ID });\n\n return {\n result,\n id: DEFAULT_REQUEST_ID,\n traceId: options.traceId\n };\n } else if (request.method === 'signData') {\n const { network, ...signDataPayload } = JSON.parse(request.params[0]!);\n\n const promise = this.connector!.request(\n {\n method: 'ton_signData',\n params: signDataPayload\n },\n `ton:${network}`\n );\n\n options?.onRequestSent?.();\n\n const result = (await promise) as WithoutId<SignDataRpcResponseSuccess>;\n\n logDebug('Wallet message received:', { result, id: DEFAULT_REQUEST_ID });\n\n return { result, traceId: options.traceId, id: DEFAULT_REQUEST_ID };\n } else if (request.method === 'disconnect') {\n return {\n id: DEFAULT_REQUEST_ID,\n traceId: options.traceId\n } as Traceable<DisconnectRpcResponseSuccess>;\n }\n } catch (error) {\n logDebug('WalletConnect request error', error, error.stack);\n const result = (await this.handleWalletConnectError(error, {\n traceId: options.traceId\n })) as TraceableWalletResponse<T>;\n\n logDebug('Wallet message received:', result);\n\n return result;\n }\n\n return {\n id: DEFAULT_REQUEST_ID,\n error: { code: DISCONNECT_ERROR_CODES.UNKNOWN_ERROR, message: 'Not implemented.' },\n traceId: options.traceId\n };\n }\n\n private async handleWalletConnectError(\n error: unknown,\n options: Traceable\n ): Promise<Traceable<WalletResponseTemplateError>> {\n if (typeof error === 'object' && error !== null) {\n const message = String(\n 'message' in error ? error.message : 'msg' in error ? error.msg : error\n );\n\n if (message.toLowerCase().includes('reject')) {\n return {\n id: DEFAULT_REQUEST_ID,\n traceId: options.traceId,\n error: {\n code: SEND_TRANSACTION_ERROR_CODES.USER_REJECTS_ERROR,\n message\n }\n };\n }\n if (message.toLowerCase().includes('tonvalidationerror')) {\n return {\n id: DEFAULT_REQUEST_ID,\n traceId: options.traceId,\n error: {\n code: SEND_TRANSACTION_ERROR_CODES.BAD_REQUEST_ERROR,\n message\n }\n };\n }\n\n return {\n id: DEFAULT_REQUEST_ID,\n traceId: options.traceId,\n error: {\n code: SEND_TRANSACTION_ERROR_CODES.UNKNOWN_ERROR,\n message\n }\n };\n }\n\n return {\n id: DEFAULT_REQUEST_ID,\n traceId: options.traceId,\n error: {\n code: SEND_TRANSACTION_ERROR_CODES.UNKNOWN_ERROR,\n message: String(error)\n }\n };\n }\n\n public listen(callback: (e: TraceableWalletEvent) => void): () => void {\n this.listeners.push(callback);\n return () => (this.listeners = this.listeners.filter(listener => listener !== callback));\n }\n\n private buildTonProof(connector: UniversalConnector): TonProofItemReplySuccess | undefined {\n const auth = connector.provider.session!.authentication?.[0];\n const iat = auth?.p?.iat;\n const statement = auth?.p?.statement;\n\n if (!iat || !statement) {\n return;\n }\n\n const domain = auth.p.domain;\n return {\n name: 'ton_proof',\n proof: {\n timestamp: Math.floor(new Date(iat).getTime() / 1000),\n domain: {\n lengthBytes: domain.length,\n value: domain\n },\n payload: statement,\n signature: auth.s.s\n }\n } as const;\n }\n\n private async onConnect(\n connector: UniversalConnector,\n options: Traceable<{ includeTonProof?: boolean; signal?: AbortSignal }>\n ) {\n if (options.signal?.aborted) {\n logDebug('WalletConnect onConnect aborted');\n return;\n }\n\n const session = connector.provider.session!;\n\n const tonNamespace = session.namespaces['ton'];\n if (!tonNamespace?.accounts?.[0]) {\n await this.disconnectWithError({\n traceId: options.traceId,\n code: CONNECT_EVENT_ERROR_CODES.BAD_REQUEST_ERROR,\n message: 'Connection error. No TON accounts connected.'\n });\n return;\n }\n\n const account = tonNamespace.accounts[0];\n const [, network, address] = account.split(':', 3);\n\n const publicKey = session.sessionProperties?.ton_getPublicKey;\n\n if (!publicKey) {\n await this.disconnectWithError({\n traceId: options.traceId,\n code: CONNECT_EVENT_ERROR_CODES.BAD_REQUEST_ERROR,\n message: 'Connection error. No sessionProperties.ton_getPublicKey provided.'\n });\n return;\n }\n\n const stateInit = session.sessionProperties?.ton_getStateInit;\n if (!stateInit) {\n await this.disconnectWithError({\n traceId: options.traceId,\n code: CONNECT_EVENT_ERROR_CODES.BAD_REQUEST_ERROR,\n message: 'Connection error. No sessionProperties.ton_getStateInit provided.'\n });\n\n return;\n }\n\n connector.provider.once('session_delete', async () => {\n try {\n await this.connectionStorage.removeConnection();\n const event = {\n event: 'disconnect',\n traceId: UUIDv7(),\n payload: {}\n } as const;\n logDebug('Wallet message received:', event);\n this.emit(event);\n } catch (err) {\n logDebug('Error while deleting session', err);\n }\n });\n\n const tonProof = options?.includeTonProof ? this.buildTonProof(connector) : undefined;\n\n const parsedAddress = isValidUserFriendlyAddress(address!)\n ? toRawAddress(parseUserFriendlyAddress(address!))\n : address!;\n\n const features = this.buildFeatureList(tonNamespace.methods);\n\n const payload: {\n items: ConnectItemReply[];\n device: DeviceInfo;\n } = {\n items: [\n {\n name: 'ton_addr',\n address: parsedAddress,\n network: network as CHAIN,\n publicKey,\n walletStateInit: stateInit\n },\n ...(tonProof ? [tonProof] : [])\n ],\n device: {\n appName: 'wallet_connect',\n appVersion: '',\n maxProtocolVersion: 2,\n features,\n platform: 'browser'\n }\n };\n\n logDebug('WalletConnect connect response:', {\n event: 'connect',\n payload,\n id: DEFAULT_EVENT_ID\n });\n\n this.emit({ event: 'connect', payload, traceId: options.traceId });\n\n await this.storeConnection();\n }\n\n private buildFeatureList(methods: string[]) {\n const features: Feature[] = [];\n if (methods.includes('ton_sendMessage')) {\n features.push('SendTransaction', {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n });\n }\n if (methods.includes('ton_signData')) {\n features.push({ name: 'SignData', types: ['text', 'binary', 'cell'] });\n }\n return features;\n }\n\n private async disconnectWithError(\n options: Traceable<{ code: CONNECT_EVENT_ERROR_CODES; message: string }>\n ): Promise<void> {\n await this.disconnect();\n\n const payload = {\n code: options.code,\n message: options.message\n };\n\n logDebug('WalletConnect connect response:', {\n event: 'connect_error',\n id: DEFAULT_EVENT_ID,\n payload\n });\n\n this.emit({\n event: 'connect_error',\n traceId: options.traceId,\n payload\n });\n }\n\n private clearAbortController(abortController: AbortController): void {\n if (this.abortController === abortController) {\n this.abortController = undefined;\n }\n }\n\n private emit(event: TraceableWalletEvent, listeners?: typeof this.listeners) {\n (listeners ?? this.listeners).forEach(listener => listener(event));\n }\n\n private storeConnection(): Promise<void> {\n return this.connectionStorage.storeConnection({\n type: 'wallet-connect'\n });\n }\n}\n","import { delay } from 'src/utils/delay';\nimport { TonConnectError } from 'src/errors';\nimport { createAbortController } from 'src/utils/create-abort-controller';\n\n/**\n * Configuration options for the callForSuccess function.\n */\nexport type CallForSuccessOptions = {\n /**\n * An 'AbortSignal' object that can be used to abort the function.\n */\n signal?: AbortSignal;\n\n /**\n * The number of attempts to make before giving up. Default is 20.\n */\n attempts?: number;\n\n /**\n * The delay in milliseconds between each attempt. Default is 200ms.\n */\n delayMs?: number;\n};\n\n/**\n * Function to call ton api until we get response.\n * Because ton network is pretty unstable we need to make sure response is final.\n * @param {T} fn - function to call\n * @param {CallForSuccessOptions} [options] - optional configuration options\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function callForSuccess<T extends (options: { signal?: AbortSignal }) => Promise<any>>(\n fn: T,\n options?: CallForSuccessOptions\n): Promise<Awaited<ReturnType<T>>> {\n const attempts = options?.attempts ?? 10;\n const delayMs = options?.delayMs ?? 200;\n const abortController = createAbortController(options?.signal);\n\n if (typeof fn !== 'function') {\n throw new TonConnectError(`Expected a function, got ${typeof fn}`);\n }\n\n let i = 0;\n let lastError: unknown;\n\n while (i < attempts) {\n if (abortController.signal.aborted) {\n throw new TonConnectError(`Aborted after attempts ${i}`);\n }\n\n try {\n return await fn({ signal: abortController.signal });\n } catch (err) {\n lastError = err;\n i++;\n\n if (i < attempts) {\n await delay(delayMs);\n }\n }\n }\n\n throw lastError;\n}\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when user rejects the action in the wallet.\n */\nexport class UserRejectsError extends TonConnectError {\n protected get info(): string {\n return 'User rejects the action in the wallet.';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, UserRejectsError.prototype);\n }\n}\n","export { ParseHexError } from './parse-hex.error';\n","export { WrongAddressError } from './wrong-address.error';\n","import {\n AppRequest,\n RpcMethod,\n WalletResponse,\n WalletResponseError,\n WalletResponseSuccess\n} from '@tonconnect/protocol';\nimport { WithoutId } from 'src/utils/types';\n\nexport abstract class RpcParser<T extends RpcMethod> {\n abstract convertToRpcRequest(...args: unknown[]): WithoutId<AppRequest<T>>;\n\n abstract convertFromRpcResponse(rpcResponse: WithoutId<WalletResponseSuccess<T>>): unknown;\n\n abstract parseAndThrowError(response: WithoutId<WalletResponseError<T>>): never;\n\n public isError(\n response: WithoutId<WalletResponse<T>>\n ): response is WithoutId<WalletResponseError<T>> {\n return 'error' in response;\n }\n}\n","import { WalletConnectOptions } from 'src/provider/wallet-connect/models/wallet-connect-options';\nimport { TonConnectError } from 'src/errors';\n\nconst state: {\n UniversalConnectorCls?: unknown;\n walletConnectOptions?: WalletConnectOptions;\n} = {};\n\n/**\n * Initializes the WalletConnect integration.\n *\n * This function must be called once before using WalletConnect features.\n * A second call will throw an error to prevent accidental re-initialization.\n *\n * @param UniversalConnectorCls - A UniversalConnector class imported from '@reown/appkit-universal-connector'\n * @param {WalletConnectOptions} walletConnectOptions - Configuration options used for initializing WalletConnect.\n * @example\n * import { UniversalConnector } from '@reown/appkit-universal-connector';\n *\n * initializeWalletConnect(UniversalConnector, {\n * projectId: 'abcd1234abcd1234abcd1234abcd1234',\n * metadata: {\n * name: 'Demo DApp',\n * icons: [\n * 'https://example.com/my-icon.png'\n * ],\n * url: window.location.origin,\n * description: 'Demo DApp'\n * }\n * });\n */\nexport function initializeWalletConnect(\n UniversalConnectorCls: Function,\n walletConnectOptions: WalletConnectOptions\n) {\n if (state?.walletConnectOptions !== undefined || state?.UniversalConnectorCls !== undefined) {\n throw new TonConnectError('Wallet Connect already initialized.');\n }\n\n if (typeof UniversalConnectorCls !== 'function' || !('init' in UniversalConnectorCls)) {\n throw new TonConnectError('Initialize UniversalConnectorCls must be set');\n }\n\n state.UniversalConnectorCls = UniversalConnectorCls;\n state.walletConnectOptions = walletConnectOptions;\n}\n\nexport function isWalletConnectInitialized() {\n return state.UniversalConnectorCls !== undefined && state.walletConnectOptions !== undefined;\n}\n\nexport function getUniversalConnector(): { init: Function } {\n if (state.UniversalConnectorCls === undefined) {\n throw new TonConnectError('Wallet Connect is not initialized.');\n }\n return state.UniversalConnectorCls as { init: Function };\n}\n\nexport function getWalletConnectOptions(): WalletConnectOptions {\n if (state.walletConnectOptions === undefined) {\n throw new TonConnectError('Wallet Connect is not initialized.');\n }\n return state.walletConnectOptions;\n}\n","/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2010-2020 Robert Kieffer and other contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport { regex } from './regex';\n\nexport function validate(uuid: unknown) {\n return typeof uuid === 'string' && regex.test(uuid);\n}\n","export type WalletConnectionSource =\n | WalletConnectionSourceHTTP\n | WalletConnectionSourceJS\n | WalletConnectionSourceWalletConnect;\n\nexport interface WalletConnectionSourceHTTP {\n /**\n * Base part of the wallet universal url. The link should support [Ton Connect parameters]{@link https://github.com/ton-connect/docs/blob/main/bridge.md#universal-link}.\n */\n universalLink: string;\n\n /**\n * Url of the wallet's implementation of the [HTTP bridge]{@link https://github.com/ton-connect/docs/blob/main/bridge.md#http-bridge}.\n */\n bridgeUrl: string;\n}\n\nexport interface WalletConnectionSourceJS {\n /**\n * If the wallet handles JS Bridge connection, specifies the binding for the bridge object accessible through window. Example: the key \"tonkeeper\" means the bridge can be accessed as window.tonkeeper.\n */\n jsBridgeKey: string;\n}\n\nexport function isWalletConnectionSourceJS(\n value: WalletConnectionSource\n): value is WalletConnectionSourceJS {\n return 'jsBridgeKey' in value;\n}\n\nexport interface WalletConnectionSourceWalletConnect {\n type: 'wallet-connect';\n}\n\nexport function isWalletConnectionSourceWalletConnect(\n value: WalletConnectionSource\n): value is WalletConnectionSourceWalletConnect {\n return 'type' in value && value.type === 'wallet-connect';\n}\n","import {\n createConnectionCompletedEvent,\n createConnectionErrorEvent,\n createConnectionRestoringCompletedEvent,\n createConnectionRestoringErrorEvent,\n createConnectionRestoringStartedEvent,\n createConnectionStartedEvent,\n createDisconnectionEvent,\n createRequestVersionEvent,\n createResponseVersionEvent,\n createDataSentForSignatureEvent,\n createDataSignedEvent,\n createDataSigningFailedEvent,\n createTransactionSentForSignatureEvent,\n createTransactionSignedEvent,\n createTransactionSigningFailedEvent,\n createVersionInfo,\n ResponseVersionEvent,\n SdkActionEvent,\n Version,\n WithoutVersion\n} from './types';\nimport { EventDispatcher } from 'src/tracker/event-dispatcher';\n\n/**\n * Options for the TonConnect tracker.\n */\nexport type TonConnectTrackerOptions = {\n /**\n * Event dispatcher to track user actions.\n */\n eventDispatcher: EventDispatcher<SdkActionEvent>;\n /**\n * TonConnect SDK version.\n */\n tonConnectSdkVersion: string;\n};\n\n/**\n * Tracker for TonConnect user actions, such as transaction signing, connection, etc.\n *\n * List of events:\n * * `connection-started`: when a user starts connecting a wallet.\n * * `connection-completed`: when a user successfully connected a wallet.\n * * `connection-error`: when a user cancels a connection or there is an error during the connection process.\n * * `connection-restoring-started`: when the dApp starts restoring a connection.\n * * `connection-restoring-completed`: when the dApp successfully restores a connection.\n * * `connection-restoring-error`: when the dApp fails to restore a connection.\n * * `disconnection`: when a user starts disconnecting a wallet.\n * * `transaction-sent-for-signature`: when a user sends a transaction for signature.\n * * `transaction-signed`: when a user successfully signs a transaction.\n * * `transaction-signing-failed`: when a user cancels transaction signing or there is an error during the signing process.\n * * `sign-data-request-initiated`: when a user sends data for signature.\n * * `sign-data-request-completed`: when a user successfully signs data.\n * * `sign-data-request-failed`: when a user cancels data signing or there is an error during the signing process.\n *\n * If you want to track user actions, you can subscribe to the window events with prefix `ton-connect-`:\n *\n * @example\n * window.addEventListener('ton-connect-transaction-sent-for-signature', (event) => {\n * console.log('Transaction init', event.detail);\n * });\n *\n * @internal\n */\nexport class TonConnectTracker {\n /**\n * Event prefix for user actions.\n * @private\n */\n private readonly eventPrefix = 'ton-connect-';\n\n /**\n * TonConnect SDK version.\n */\n private readonly tonConnectSdkVersion: string;\n\n /**\n * TonConnect UI version.\n */\n private tonConnectUiVersion: string | null = null;\n\n /**\n * Version of the library.\n */\n get version(): Version {\n return createVersionInfo({\n ton_connect_sdk_lib: this.tonConnectSdkVersion,\n ton_connect_ui_lib: this.tonConnectUiVersion\n });\n }\n\n /**\n * Event dispatcher to track user actions. By default, it uses `window.dispatchEvent` for browser environment.\n * @private\n */\n private readonly eventDispatcher: EventDispatcher<SdkActionEvent>;\n\n constructor(options: TonConnectTrackerOptions) {\n this.eventDispatcher = options?.eventDispatcher;\n this.tonConnectSdkVersion = options.tonConnectSdkVersion;\n\n this.init().catch();\n }\n\n /**\n * Called once when the tracker is created and request version other libraries.\n */\n private async init(): Promise<void> {\n try {\n await this.setRequestVersionHandler();\n this.tonConnectUiVersion = await this.requestTonConnectUiVersion();\n } catch (e) {}\n }\n\n /**\n * Set request version handler.\n * @private\n */\n private async setRequestVersionHandler(): Promise<void> {\n await this.eventDispatcher.addEventListener('ton-connect-request-version', async () => {\n await this.eventDispatcher.dispatchEvent(\n 'ton-connect-response-version',\n createResponseVersionEvent(this.tonConnectSdkVersion)\n );\n });\n }\n\n /**\n * Request TonConnect UI version.\n * @private\n */\n private async requestTonConnectUiVersion(): Promise<string> {\n return new Promise(async (resolve, reject) => {\n try {\n await this.eventDispatcher.addEventListener(\n 'ton-connect-ui-response-version',\n (event: CustomEvent<ResponseVersionEvent>) => {\n resolve(event.detail.version);\n },\n { once: true }\n );\n\n await this.eventDispatcher.dispatchEvent(\n 'ton-connect-ui-request-version',\n createRequestVersionEvent()\n );\n } catch (e) {\n reject(e);\n }\n });\n }\n\n /**\n * Emit user action event to the window.\n * @param eventDetails\n * @private\n */\n private dispatchUserActionEvent(eventDetails: SdkActionEvent): void {\n try {\n this.eventDispatcher\n .dispatchEvent(`${this.eventPrefix}${eventDetails.type}`, eventDetails)\n .catch();\n } catch (e) {}\n }\n\n /**\n * Track connection init event.\n * @param args\n */\n public trackConnectionStarted(\n ...args: WithoutVersion<Parameters<typeof createConnectionStartedEvent>>\n ): void {\n try {\n const event = createConnectionStartedEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n\n /**\n * Track connection success event.\n * @param args\n */\n public trackConnectionCompleted(\n ...args: WithoutVersion<Parameters<typeof createConnectionCompletedEvent>>\n ): void {\n try {\n const event = createConnectionCompletedEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n\n /**\n * Track connection error event.\n * @param args\n */\n public trackConnectionError(\n ...args: WithoutVersion<Parameters<typeof createConnectionErrorEvent>>\n ): void {\n try {\n const event = createConnectionErrorEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n\n /**\n * Track connection restoring init event.\n * @param args\n */\n public trackConnectionRestoringStarted(\n ...args: WithoutVersion<Parameters<typeof createConnectionRestoringStartedEvent>>\n ): void {\n try {\n const event = createConnectionRestoringStartedEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n\n /**\n * Track connection restoring success event.\n * @param args\n */\n public trackConnectionRestoringCompleted(\n ...args: WithoutVersion<Parameters<typeof createConnectionRestoringCompletedEvent>>\n ): void {\n try {\n const event = createConnectionRestoringCompletedEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n\n /**\n * Track connection restoring error event.\n * @param args\n */\n public trackConnectionRestoringError(\n ...args: WithoutVersion<Parameters<typeof createConnectionRestoringErrorEvent>>\n ): void {\n try {\n const event = createConnectionRestoringErrorEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n\n /**\n * Track disconnect event.\n * @param args\n */\n public trackDisconnection(\n ...args: WithoutVersion<Parameters<typeof createDisconnectionEvent>>\n ): void {\n try {\n const event = createDisconnectionEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n\n /**\n * Track transaction init event.\n * @param args\n */\n public trackTransactionSentForSignature(\n ...args: WithoutVersion<Parameters<typeof createTransactionSentForSignatureEvent>>\n ): void {\n try {\n const event = createTransactionSentForSignatureEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n\n /**\n * Track transaction signed event.\n * @param args\n */\n public trackTransactionSigned(\n ...args: WithoutVersion<Parameters<typeof createTransactionSignedEvent>>\n ): void {\n try {\n const event = createTransactionSignedEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n\n /**\n * Track transaction error event.\n * @param args\n */\n public trackTransactionSigningFailed(\n ...args: WithoutVersion<Parameters<typeof createTransactionSigningFailedEvent>>\n ): void {\n try {\n const event = createTransactionSigningFailedEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n\n /**\n * Track sign data init event.\n * @param args\n */\n public trackDataSentForSignature(\n ...args: WithoutVersion<Parameters<typeof createDataSentForSignatureEvent>>\n ): void {\n try {\n const event = createDataSentForSignatureEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n\n /**\n * Track sign data success event.\n * @param args\n */\n public trackDataSigned(\n ...args: WithoutVersion<Parameters<typeof createDataSignedEvent>>\n ): void {\n try {\n const event = createDataSignedEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n\n /**\n * Track sign data error event.\n * @param args\n */\n public trackDataSigningFailed(\n ...args: WithoutVersion<Parameters<typeof createDataSigningFailedEvent>>\n ): void {\n try {\n const event = createDataSigningFailedEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n}\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Unhanded unknown error.\n */\nexport class UnknownError extends TonConnectError {\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, UnknownError.prototype);\n }\n}\n","import { EventDispatcher } from 'src/tracker/event-dispatcher';\nimport { ConnectionInfo, SdkActionEvent, Version } from 'src/tracker/types';\nimport { Analytics } from 'src/analytics/analytics';\nimport { TonConnectEvent } from 'src/analytics/types';\n\nfunction buildVersionInfo(version: Version): Record<string, string> {\n return {\n '@tonconnect/sdk': version.ton_connect_sdk_lib || '',\n '@tonconnect/ui': version.ton_connect_ui_lib || ''\n };\n}\n\nfunction buildTonConnectEvent(detail: ConnectionInfo & { trace_id?: string | null }) {\n return {\n versions: buildVersionInfo(detail.custom_data),\n network_id: detail.custom_data.chain_id ?? '',\n client_id: detail.custom_data.client_id ?? '',\n wallet_id: detail.custom_data.wallet_id ?? '',\n wallet_address: detail.wallet_address ?? '',\n wallet_app_name: detail.wallet_type ?? '',\n wallet_app_version: detail.wallet_version ?? '',\n wallet_state_init: detail.wallet_state_init ?? '',\n trace_id: detail.trace_id ?? undefined\n };\n}\n\nexport function bindEventsTo(\n eventDispatcher: EventDispatcher<SdkActionEvent>,\n analytics: Analytics<TonConnectEvent>\n) {\n eventDispatcher.addEventListener('ton-connect-ui-wallet-modal-opened', event => {\n const { detail } = event;\n analytics.emitConnectionStarted({\n client_id: detail.client_id || '',\n versions: buildVersionInfo(detail.custom_data),\n main_screen: detail.visible_wallets,\n trace_id: detail.trace_id ?? undefined\n });\n });\n eventDispatcher.addEventListener('ton-connect-ui-selected-wallet', event => {\n const { detail } = event;\n analytics.emitConnectionSelectedWallet({\n client_id: detail.client_id || '',\n versions: buildVersionInfo(detail.custom_data),\n main_screen: detail.visible_wallets,\n wallets_menu: detail.wallets_menu,\n trace_id: detail.trace_id ?? undefined,\n wallet_app_name: detail.wallet_type ?? '',\n wallet_redirect_method: detail.wallet_redirect_method,\n wallet_redirect_link: detail.wallet_redirect_link\n });\n });\n\n eventDispatcher.addEventListener('ton-connect-connection-completed', event => {\n const { detail } = event;\n analytics.emitConnectionCompleted(buildTonConnectEvent(detail));\n });\n eventDispatcher.addEventListener('ton-connect-connection-error', event => {\n const { detail } = event;\n analytics.emitConnectionError({\n client_id: detail.custom_data.client_id || '',\n wallet_id: detail.custom_data.wallet_id || '',\n error_code: detail.error_code ?? 0,\n error_message: detail.error_message,\n trace_id: detail.trace_id ?? undefined\n });\n });\n eventDispatcher.addEventListener('ton-connect-disconnection', event => {\n const { detail } = event;\n analytics.emitDisconnection(buildTonConnectEvent(detail));\n });\n eventDispatcher.addEventListener('ton-connect-transaction-sent-for-signature', event => {\n const { detail } = event;\n analytics.emitTransactionSent(buildTonConnectEvent(detail));\n });\n eventDispatcher.addEventListener('ton-connect-transaction-signed', event => {\n const { detail } = event;\n analytics.emitTransactionSigned({\n ...buildTonConnectEvent(detail),\n signed_boc: event.detail.signed_transaction\n });\n });\n eventDispatcher.addEventListener('ton-connect-transaction-signing-failed', event => {\n const { detail } = event;\n analytics.emitTransactionSigningFailed({\n ...buildTonConnectEvent(detail),\n valid_until: Number(detail.valid_until),\n messages: detail.messages.map(message => ({\n address: message.address ?? '',\n amount: message.amount ?? '',\n payload: message.payload ?? '',\n state_init: message.state_init ?? ''\n })),\n error_message: detail.error_message,\n error_code: detail.error_code ?? 0\n });\n });\n eventDispatcher.addEventListener('ton-connect-sign-data-request-initiated', event => {\n const { detail } = event;\n analytics?.emitSignDataRequestInitiated(buildTonConnectEvent(detail));\n });\n eventDispatcher.addEventListener('ton-connect-sign-data-request-completed', event => {\n const { detail } = event;\n analytics?.emitSignDataRequestCompleted(buildTonConnectEvent(detail));\n });\n eventDispatcher.addEventListener('ton-connect-sign-data-request-failed', event => {\n const { detail } = event;\n let signDataValue = '';\n let signDataSchema: string | undefined = undefined;\n if (detail.data.type === 'text') {\n signDataValue = detail.data.text;\n }\n if (detail.data.type === 'cell') {\n signDataValue = detail.data.cell;\n signDataSchema = detail.data.schema;\n }\n if (detail.data.type === 'binary') {\n signDataValue = detail.data.bytes;\n }\n analytics?.emitSignDataRequestFailed({\n ...buildTonConnectEvent(detail),\n sign_data_type: detail.data.type,\n sign_data_value: signDataValue,\n sign_data_schema: signDataSchema,\n error_code: detail.error_code ?? 0,\n error_message: detail.error_message\n });\n });\n}\n","import { InMemoryStorage } from 'src/storage/models/in-memory-storage';\nimport { TonConnectError } from 'src/errors';\n\nexport function getWindow(): Window | undefined {\n if (typeof window === 'undefined') {\n return undefined;\n }\n\n return window;\n}\n\n/**\n * The function try to get window keys, if it is not available it returns empty array.\n * As an example, for Safari's private mode it returns empty array, because the browser does not allow to get window keys.\n */\nexport function tryGetWindowKeys(): string[] {\n const window = getWindow();\n if (!window) {\n return [];\n }\n\n try {\n return Object.keys(window);\n } catch {\n return [];\n }\n}\n\nexport function getDocument(): Document | undefined {\n if (typeof document === 'undefined') {\n return undefined;\n }\n\n return document;\n}\n\nexport function getWebPageManifest(): string {\n const origin = getWindow()?.location.origin;\n if (origin) {\n return origin + '/tonconnect-manifest.json';\n }\n\n return '';\n}\n\nexport function getOriginWithPath() {\n const origin = getWindow()?.location?.origin;\n const path = getWindow()?.location?.pathname;\n\n if (origin && path) {\n return origin + path;\n }\n\n return '';\n}\n\n/**\n * Returns `localStorage` if it is available. In Safari's private mode, it returns `InMemoryStorage`. In Node.js, it throws an error.\n */\nexport function tryGetLocalStorage(): Storage {\n if (isLocalStorageAvailable()) {\n return localStorage;\n }\n\n if (isNodeJs()) {\n throw new TonConnectError(\n '`localStorage` is unavailable, but it is required for TonConnect. For more details, see https://github.com/ton-connect/sdk/tree/main/packages/sdk#init-connector'\n );\n }\n\n return InMemoryStorage.getInstance();\n}\n\n/**\n * Checks if `localStorage` is available.\n */\nfunction isLocalStorageAvailable(): boolean {\n // We use a try/catch block because Safari's private mode throws an error when attempting to access localStorage.\n try {\n return typeof localStorage !== 'undefined';\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if the environment is Node.js.\n */\nfunction isNodeJs(): boolean {\n return (\n typeof process !== 'undefined' && process.versions != null && process.versions.node != null\n );\n}\n\n/**\n * Returns the current domain (hostname) if available.\n * In browser environment, returns window.location.hostname.\n * In Node.js environment or when window is not available, returns null.\n */\nexport function getDomain(): string | null {\n try {\n // In browser environment\n if (typeof window !== 'undefined' && window.location) {\n return window.location.hostname;\n } else {\n // In Node.js environment, skip domain validation\n return null;\n }\n } catch {\n return null;\n }\n}\n\n/**\n * Returns an array of [key, value] pairs from window object if available.\n * In browser environment, returns Object.entries(window).\n * In Node.js environment or when window is not available, returns empty array.\n */\nexport function getWindowEntries(): [string, unknown][] {\n const window = getWindow();\n if (!window) {\n return [];\n }\n\n try {\n return Object.entries(window);\n } catch {\n return [];\n }\n}\n","import { FeatureName } from '@tonconnect/protocol';\nimport { TonConnectError } from 'src/errors/ton-connect.error';\nimport { RequiredFeatures } from 'src/models';\n/**\n * Thrown when wallet doesn't support requested feature method.\n */\nexport class WalletNotSupportFeatureError extends TonConnectError {\n declare cause: {\n requiredFeature: {\n featureName: FeatureName;\n value?: RequiredFeatures['sendTransaction'] | RequiredFeatures['signData'];\n };\n };\n\n protected get info(): string {\n return \"Wallet doesn't support requested feature method.\";\n }\n\n constructor(\n message: string,\n options: {\n cause: {\n requiredFeature: {\n featureName: FeatureName;\n value?: RequiredFeatures['sendTransaction'] | RequiredFeatures['signData'];\n };\n };\n }\n ) {\n super(message, options);\n\n Object.setPrototypeOf(this, WalletNotSupportFeatureError.prototype);\n }\n}\n","export * from './connect';\n","/**\n * In memory storage like localStorage, but without persistence.\n * Uses as a fallback for localStorage in Safari's private mode.\n */\nexport class InMemoryStorage implements Storage {\n private static instance: InMemoryStorage;\n\n private storage: Record<string, string> = {};\n\n public static getInstance(): InMemoryStorage {\n if (!InMemoryStorage.instance) {\n InMemoryStorage.instance = new InMemoryStorage();\n }\n\n return InMemoryStorage.instance;\n }\n\n private constructor() {}\n\n public get length(): number {\n return Object.keys(this.storage).length;\n }\n\n public clear(): void {\n this.storage = {};\n }\n\n public getItem(key: string): string | null {\n return this.storage[key] ?? null;\n }\n\n public key(index: number): string | null {\n const keys = Object.keys(this.storage);\n if (index < 0 || index >= keys.length) {\n return null;\n }\n\n return keys[index] ?? null;\n }\n\n public removeItem(key: string): void {\n delete this.storage[key];\n }\n\n public setItem(key: string, value: string): void {\n this.storage[key] = value;\n }\n}\n","// Written in 2014-2016 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n(function(root, f) {\n 'use strict';\n if (typeof module !== 'undefined' && module.exports) module.exports = f();\n else if (root.nacl) root.nacl.util = f();\n else {\n root.nacl = {};\n root.nacl.util = f();\n }\n}(this, function() {\n 'use strict';\n\n var util = {};\n\n function validateBase64(s) {\n if (!(/^(?:[A-Za-z0-9+\\/]{2}[A-Za-z0-9+\\/]{2})*(?:[A-Za-z0-9+\\/]{2}==|[A-Za-z0-9+\\/]{3}=)?$/.test(s))) {\n throw new TypeError('invalid encoding');\n }\n }\n\n util.decodeUTF8 = function(s) {\n if (typeof s !== 'string') throw new TypeError('expected string');\n var i, d = unescape(encodeURIComponent(s)), b = new Uint8Array(d.length);\n for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i);\n return b;\n };\n\n util.encodeUTF8 = function(arr) {\n var i, s = [];\n for (i = 0; i < arr.length; i++) s.push(String.fromCharCode(arr[i]));\n return decodeURIComponent(escape(s.join('')));\n };\n\n if (typeof atob === 'undefined') {\n // Node.js\n\n if (typeof Buffer.from !== 'undefined') {\n // Node v6 and later\n util.encodeBase64 = function (arr) { // v6 and later\n return Buffer.from(arr).toString('base64');\n };\n\n util.decodeBase64 = function (s) {\n validateBase64(s);\n return new Uint8Array(Array.prototype.slice.call(Buffer.from(s, 'base64'), 0));\n };\n\n } else {\n // Node earlier than v6\n util.encodeBase64 = function (arr) { // v6 and later\n return (new Buffer(arr)).toString('base64');\n };\n\n util.decodeBase64 = function(s) {\n validateBase64(s);\n return new Uint8Array(Array.prototype.slice.call(new Buffer(s, 'base64'), 0));\n };\n }\n\n } else {\n // Browsers\n\n util.encodeBase64 = function(arr) {\n var i, s = [], len = arr.length;\n for (i = 0; i < len; i++) s.push(String.fromCharCode(arr[i]));\n return btoa(s.join(''));\n };\n\n util.decodeBase64 = function(s) {\n validateBase64(s);\n var i, d = atob(s), b = new Uint8Array(d.length);\n for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i);\n return b;\n };\n\n }\n\n return util;\n\n}));\n","export { WalletAlreadyConnectedError } from './wallet-already-connected.error';\nexport { WalletNotConnectedError } from './wallet-not-connected.error';\nexport { WalletNotInjectedError } from './wallet-not-injected.error';\nexport { WalletNotSupportFeatureError } from './wallet-not-support-feature.error';\nexport { WalletMissingRequiredFeaturesError } from './wallet-missing-required-features.error';\nexport { WalletWrongNetworkError } from './wallet-wrong-network.error';\n","import { IStorage } from 'src/storage/models/storage.interface';\n\nexport class HttpBridgeGatewayStorage {\n private readonly storeKey: string;\n\n constructor(\n private readonly storage: IStorage,\n bridgeUrl: string\n ) {\n this.storeKey = 'ton-connect-storage_http-bridge-gateway::' + bridgeUrl;\n }\n\n public async storeLastEventId(lastEventId: string): Promise<void> {\n return this.storage.setItem(this.storeKey, lastEventId);\n }\n\n public async removeLastEventId(): Promise<void> {\n return this.storage.removeItem(this.storeKey);\n }\n\n public async getLastEventId(): Promise<string | null> {\n const stored = await this.storage.getItem(this.storeKey);\n if (!stored) {\n return null;\n }\n\n return stored;\n }\n}\n","import { IStorage } from 'src/storage/models/storage.interface';\nimport { tryGetLocalStorage } from 'src/utils/web-api';\n\n/**\n * Default storage to save protocol data, uses `localStorage` if it is available. In Safari's private mode, it uses `InMemoryStorage`. In Node.js, it throws an error.\n */\nexport class DefaultStorage implements IStorage {\n private readonly localStorage: Storage;\n\n constructor() {\n this.localStorage = tryGetLocalStorage();\n }\n\n public async getItem(key: string): Promise<string | null> {\n return this.localStorage.getItem(key);\n }\n\n public async removeItem(key: string): Promise<void> {\n this.localStorage.removeItem(key);\n }\n\n public async setItem(key: string, value: string): Promise<void> {\n this.localStorage.setItem(key, value);\n }\n}\n","let qaModeEnabled = false;\nlet bannerObserver: MutationObserver | null = null;\n\nexport function enableQaMode(): void {\n qaModeEnabled = true;\n console.warn('🚨 QA Mode enabled - validation is disabled. This is unsafe for production!');\n showQaModeBanner();\n startBannerObserver();\n addQaModeStyles();\n}\n\nexport function isQaModeEnabled(): boolean {\n return qaModeEnabled;\n}\n\nexport function logValidationError(message: string): void {\n if (isQaModeEnabled()) {\n console.error(`[QA Mode] Validation failed: ${message}`);\n }\n}\n\nfunction showQaModeBanner(): void {\n if (typeof window === 'undefined') return;\n\n const existingBanner = document.getElementById('ton-connect-qa-banner');\n if (existingBanner) return;\n\n const banner = document.createElement('div');\n banner.id = 'ton-connect-qa-banner';\n banner.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n background: linear-gradient(90deg, #ff6b6b, #ff8e8e);\n color: white;\n padding: 12px 20px;\n text-align: center;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n font-weight: 600;\n font-size: 14px;\n z-index: 999999;\n box-shadow: 0 2px 8px rgba(0,0,0,0.2);\n animation: slideDown 0.3s ease-out;\n user-select: none;\n pointer-events: none;\n `;\n\n banner.innerHTML = `\n 🚨 QA Mode Active - Validation Disabled (Unsafe for Production)\n `;\n\n // Add CSS animation\n const style = document.createElement('style');\n style.textContent = `\n @keyframes slideDown {\n from { transform: translateY(-100%); }\n to { transform: translateY(0); }\n }\n `;\n document.head.appendChild(style);\n\n document.body.appendChild(banner);\n addQaModeStyles();\n}\n\nfunction addQaModeStyles(): void {\n if (typeof window === 'undefined') return;\n\n const existingStyle = document.getElementById('ton-connect-qa-mode-styles');\n if (existingStyle) return;\n\n const style = document.createElement('style');\n style.id = 'ton-connect-qa-mode-styles';\n style.textContent = `\n body.qa-mode-active {\n padding-top: 48px !important;\n }\n \n body.qa-mode-active header {\n margin-top: 48px !important;\n }\n \n body.qa-mode-active .qa-mode-control {\n top: 128px !important;\n }\n `;\n\n document.head.appendChild(style);\n document.body.classList.add('qa-mode-active');\n}\n\nfunction startBannerObserver(): void {\n if (typeof window === 'undefined' || bannerObserver) return;\n\n bannerObserver = new MutationObserver(mutations => {\n mutations.forEach(mutation => {\n if (mutation.type === 'childList') {\n mutation.removedNodes.forEach(node => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n if (element.id === 'ton-connect-qa-banner' && qaModeEnabled) {\n console.warn('QA Mode banner was removed, restoring...');\n setTimeout(() => showQaModeBanner(), 100);\n } else if (element.id === 'ton-connect-qa-mode-styles' && qaModeEnabled) {\n console.warn('QA Mode styles were removed, restoring...');\n setTimeout(() => addQaModeStyles(), 100);\n }\n }\n });\n }\n });\n });\n\n bannerObserver.observe(document.body, {\n childList: true,\n subtree: false\n });\n\n bannerObserver.observe(document.head, {\n childList: true,\n subtree: false\n });\n}\n","export * from './connect';\nexport * from './send-transaction';\nexport * from './sign-data';\n","/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2010-2020 Robert Kieffer and other contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\n\nlet getRandomValues: typeof crypto.getRandomValues | undefined;\n\nconst rnds8 = new Uint8Array(16);\n\nexport function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error(\n 'crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'\n );\n }\n\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n\n return getRandomValues(rnds8);\n}\n","export { UUIDv7 } from './v7';\n","import {\n AppRequest,\n Base64,\n ConnectEventSuccess,\n ConnectRequest,\n hexToByteArray,\n RpcMethod,\n SessionCrypto,\n TonAddressItemReply,\n WalletMessage,\n WalletResponse\n} from '@tonconnect/protocol';\nimport { TonConnectError } from 'src/errors/ton-connect.error';\nimport { WalletConnectionSourceHTTP } from 'src/models/wallet/wallet-connection-source';\nimport { BridgeGateway } from 'src/provider/bridge/bridge-gateway';\nimport {\n BridgeConnectionHttp,\n isPendingConnectionHttp\n} from 'src/provider/bridge/models/bridge-connection';\nimport { BridgeIncomingMessage } from 'src/provider/bridge/models/bridge-incomming-message';\nimport { BridgePartialSession, BridgeSession } from 'src/provider/bridge/models/bridge-session';\nimport { HTTPProvider } from 'src/provider/provider';\nimport { BridgeConnectionStorage } from 'src/storage/bridge-connection-storage';\nimport { Optional, OptionalTraceable, Traceable, WithoutId } from 'src/utils/types';\nimport { PROTOCOL_VERSION } from 'src/resources/protocol';\nimport { logDebug, logError } from 'src/utils/log';\nimport { encodeTelegramUrlParameters, isTelegramUrl } from 'src/utils/url';\nimport { callForSuccess } from 'src/utils/call-for-success';\nimport { createAbortController } from 'src/utils/create-abort-controller';\nimport { AnalyticsManager } from 'src/analytics/analytics-manager';\nimport { Analytics } from 'src/analytics/analytics';\nimport { BridgeClientEvent } from 'src/analytics/types';\nimport { TraceableWalletEvent, TraceableWalletResponse } from 'src/models/wallet/traceable-events';\nimport { UUIDv7 } from 'src/utils/uuid';\nimport { waitForSome } from 'src/utils/promise';\n\nexport class BridgeProvider implements HTTPProvider {\n public static async fromStorage(\n storage: BridgeConnectionStorage,\n analyticsManager?: AnalyticsManager\n ): Promise<BridgeProvider> {\n const connection = await storage.getHttpConnection();\n\n if (isPendingConnectionHttp(connection)) {\n return new BridgeProvider(storage, connection.connectionSource, analyticsManager);\n }\n return new BridgeProvider(\n storage,\n { bridgeUrl: connection.session.bridgeUrl },\n analyticsManager\n );\n }\n\n public readonly type = 'http';\n\n private readonly standardUniversalLink = 'tc://';\n\n private readonly pendingRequests = new Map<\n string,\n (response: TraceableWalletResponse<RpcMethod>) => void\n >();\n\n private session: BridgeSession | BridgePartialSession | null = null;\n\n private gateway: BridgeGateway | null = null;\n\n private pendingGateways: BridgeGateway[] = [];\n\n private listeners: Array<(e: TraceableWalletEvent) => void> = [];\n\n private readonly defaultOpeningDeadlineMS = 12000;\n\n private readonly defaultRetryTimeoutMS = 2000;\n\n private readonly optionalOpenGateways = 3;\n\n private abortController?: AbortController;\n\n private readonly analytics?: Analytics<BridgeClientEvent>;\n\n constructor(\n private readonly connectionStorage: BridgeConnectionStorage,\n private readonly walletConnectionSource:\n | Optional<WalletConnectionSourceHTTP, 'universalLink'>\n | Pick<WalletConnectionSourceHTTP, 'bridgeUrl'>[],\n private readonly analyticsManager?: AnalyticsManager\n ) {\n this.analytics = this.analyticsManager?.scoped();\n }\n\n public connect(\n message: ConnectRequest,\n options?: OptionalTraceable<{\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }>\n ): string {\n const traceId = options?.traceId ?? UUIDv7();\n const abortController = createAbortController(options?.signal);\n this.abortController?.abort();\n this.abortController = abortController;\n\n this.closeGateways();\n\n const sessionCrypto = new SessionCrypto();\n\n this.session = {\n sessionCrypto,\n bridgeUrl:\n 'bridgeUrl' in this.walletConnectionSource\n ? this.walletConnectionSource.bridgeUrl\n : ''\n };\n\n this.connectionStorage\n .storeConnection({\n type: 'http',\n connectionSource: this.walletConnectionSource,\n sessionCrypto\n })\n .then(async () => {\n if (abortController.signal.aborted) {\n return;\n }\n\n await callForSuccess(\n _options =>\n this.openGateways(sessionCrypto, {\n openingDeadlineMS:\n options?.openingDeadlineMS ?? this.defaultOpeningDeadlineMS,\n signal: _options?.signal,\n traceId\n }),\n {\n attempts: Number.MAX_SAFE_INTEGER,\n delayMs: this.defaultRetryTimeoutMS,\n signal: abortController.signal\n }\n );\n });\n\n const universalLink =\n 'universalLink' in this.walletConnectionSource &&\n this.walletConnectionSource.universalLink\n ? this.walletConnectionSource.universalLink\n : this.standardUniversalLink;\n\n return this.generateUniversalLink(universalLink, message, { traceId });\n }\n\n public async restoreConnection(\n options?: OptionalTraceable<{\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }>\n ): Promise<void> {\n const traceId = options?.traceId ?? UUIDv7();\n\n const abortController = createAbortController(options?.signal);\n this.abortController?.abort();\n this.abortController = abortController;\n\n if (abortController.signal.aborted) {\n return;\n }\n\n this.closeGateways();\n const storedConnection = await this.connectionStorage.getHttpConnection();\n if (!storedConnection) {\n return;\n }\n\n if (abortController.signal.aborted) {\n return;\n }\n\n const openingDeadlineMS = options?.openingDeadlineMS ?? this.defaultOpeningDeadlineMS;\n\n if (isPendingConnectionHttp(storedConnection)) {\n this.session = {\n sessionCrypto: storedConnection.sessionCrypto,\n bridgeUrl:\n 'bridgeUrl' in this.walletConnectionSource\n ? this.walletConnectionSource.bridgeUrl\n : ''\n };\n\n return await this.openGateways(storedConnection.sessionCrypto, {\n openingDeadlineMS: openingDeadlineMS,\n signal: abortController?.signal,\n traceId: options?.traceId\n });\n }\n\n if (Array.isArray(this.walletConnectionSource)) {\n throw new TonConnectError(\n 'Internal error. Connection source is array while WalletConnectionSourceHTTP was expected.'\n );\n }\n\n this.session = storedConnection.session;\n\n if (this.gateway) {\n logDebug('Gateway is already opened, closing previous gateway');\n await this.gateway.close();\n }\n\n this.gateway = new BridgeGateway(\n this.connectionStorage.storage,\n this.walletConnectionSource.bridgeUrl,\n storedConnection.session.sessionCrypto.sessionId,\n this.gatewayListener.bind(this),\n this.gatewayErrorsListener.bind(this),\n this.analyticsManager\n );\n\n if (abortController.signal.aborted) {\n return;\n }\n\n // notify listeners about stored connection\n this.listeners.forEach(listener => listener({ ...storedConnection.connectEvent, traceId }));\n\n // wait for the connection to be opened\n try {\n await callForSuccess(\n options =>\n this.gateway!.registerSession({\n openingDeadlineMS: openingDeadlineMS,\n signal: options.signal,\n traceId\n }),\n {\n attempts: Number.MAX_SAFE_INTEGER,\n delayMs: this.defaultRetryTimeoutMS,\n signal: abortController.signal\n }\n );\n } catch (e) {\n await this.disconnect({ signal: abortController.signal, traceId });\n return;\n }\n }\n\n public sendRequest<T extends RpcMethod>(\n request: WithoutId<AppRequest<T>>,\n options?: OptionalTraceable<{\n attempts?: number;\n onRequestSent?: () => void;\n signal?: AbortSignal;\n }>\n ): Promise<WithoutId<WalletResponse<T>>>;\n /** @deprecated use sendRequest(transaction, options) instead */\n public sendRequest<T extends RpcMethod>(\n request: WithoutId<AppRequest<T>>,\n onRequestSent?: () => void\n ): Promise<WithoutId<WalletResponse<T>>>;\n public sendRequest<T extends RpcMethod>(\n request: WithoutId<AppRequest<T>>,\n optionsOrOnRequestSent?:\n | (() => void)\n | OptionalTraceable<{\n attempts?: number;\n onRequestSent?: () => void;\n signal?: AbortSignal;\n }>\n ): Promise<TraceableWalletResponse<T>> {\n // TODO: remove deprecated method\n const options: OptionalTraceable<{\n onRequestSent?: () => void;\n signal?: AbortSignal;\n attempts?: number;\n }> = {};\n if (typeof optionsOrOnRequestSent === 'function') {\n options.onRequestSent = optionsOrOnRequestSent;\n } else {\n options.onRequestSent = optionsOrOnRequestSent?.onRequestSent;\n options.signal = optionsOrOnRequestSent?.signal;\n options.attempts = optionsOrOnRequestSent?.attempts;\n options.traceId = optionsOrOnRequestSent?.traceId;\n }\n options.traceId ??= UUIDv7();\n\n return new Promise(async (resolve, reject) => {\n if (!this.gateway || !this.session || !('walletPublicKey' in this.session)) {\n throw new TonConnectError('Trying to send bridge request without session');\n }\n\n const id = (await this.connectionStorage.getNextRpcRequestId()).toString();\n await this.connectionStorage.increaseNextRpcRequestId();\n\n logDebug('Send http-bridge request:', { ...request, id });\n\n const encodedRequest = this.session!.sessionCrypto.encrypt(\n JSON.stringify({ ...request, id }),\n hexToByteArray(this.session.walletPublicKey)\n );\n\n try {\n this.analytics?.emitBridgeClientMessageSent({\n bridge_url: this.gateway.bridgeUrl,\n client_id: this.session.sessionCrypto.sessionId,\n wallet_id: this.session.walletPublicKey,\n message_id: id,\n request_type: request.method,\n trace_id: options.traceId\n });\n await this.gateway.send(\n encodedRequest,\n this.session.walletPublicKey,\n request.method,\n {\n attempts: options?.attempts,\n signal: options?.signal,\n traceId: options.traceId\n }\n );\n options?.onRequestSent?.();\n this.pendingRequests.set(id.toString(), resolve);\n } catch (e) {\n reject(e);\n }\n });\n }\n\n public closeConnection(): void {\n this.closeGateways();\n this.listeners = [];\n this.session = null;\n this.gateway = null;\n }\n\n public async disconnect(options?: OptionalTraceable<{ signal?: AbortSignal }>): Promise<void> {\n const traceId = options?.traceId ?? UUIDv7();\n return new Promise(async resolve => {\n let called = false;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n const onRequestSent = (): void => {\n if (!called) {\n called = true;\n this.removeBridgeAndSession().then(resolve);\n }\n };\n\n try {\n this.closeGateways();\n\n const abortController = createAbortController(options?.signal);\n timeoutId = setTimeout(() => {\n abortController.abort();\n }, this.defaultOpeningDeadlineMS);\n\n await this.sendRequest(\n { method: 'disconnect', params: [] },\n {\n onRequestSent: onRequestSent,\n signal: abortController.signal,\n attempts: 1,\n traceId\n }\n );\n } catch (e) {\n logDebug('Disconnect error:', e);\n\n if (!called) {\n this.removeBridgeAndSession().then(resolve);\n }\n } finally {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n onRequestSent();\n }\n });\n }\n\n public listen(callback: (e: TraceableWalletEvent) => void): () => void {\n this.listeners.push(callback);\n return () => (this.listeners = this.listeners.filter(listener => listener !== callback));\n }\n\n public pause(): void {\n this.gateway?.pause();\n this.pendingGateways.forEach(bridge => bridge.pause());\n }\n\n public async unPause(): Promise<void> {\n const promises = this.pendingGateways.map(bridge => bridge.unPause());\n if (this.gateway) {\n promises.push(this.gateway.unPause());\n }\n await Promise.all(promises);\n }\n\n private async pendingGatewaysListener(\n gateway: BridgeGateway,\n bridgeUrl: string,\n bridgeIncomingMessage: BridgeIncomingMessage\n ): Promise<void> {\n if (!this.pendingGateways.includes(gateway)) {\n await gateway.close();\n return;\n }\n\n this.closeGateways({ except: gateway });\n\n if (this.gateway) {\n logDebug('Gateway is already opened, closing previous gateway');\n await this.gateway.close();\n }\n\n this.session!.bridgeUrl = bridgeUrl;\n this.gateway = gateway;\n this.gateway.setErrorsListener(this.gatewayErrorsListener.bind(this));\n this.gateway.setListener(this.gatewayListener.bind(this));\n return this.gatewayListener(bridgeIncomingMessage);\n }\n\n private async gatewayListener(bridgeIncomingMessage: BridgeIncomingMessage): Promise<void> {\n const traceId = bridgeIncomingMessage.traceId ?? UUIDv7();\n let walletMessage: WalletMessage;\n try {\n walletMessage = JSON.parse(\n this.session!.sessionCrypto.decrypt(\n Base64.decode(bridgeIncomingMessage.message).toUint8Array(),\n hexToByteArray(bridgeIncomingMessage.from)\n )\n );\n } catch (err) {\n this.analytics?.emitBridgeClientMessageDecodeError({\n bridge_url: this.session!.bridgeUrl,\n client_id: this.session!.sessionCrypto.sessionId,\n wallet_id: bridgeIncomingMessage.from,\n error_message: String(err),\n trace_id: bridgeIncomingMessage?.traceId\n });\n throw err;\n }\n\n logDebug('Wallet message received:', walletMessage);\n const requestType = 'event' in walletMessage ? walletMessage.event : '';\n this.analytics?.emitBridgeClientMessageReceived({\n bridge_url: this.session!.bridgeUrl,\n client_id: this.session!.sessionCrypto.sessionId,\n wallet_id: bridgeIncomingMessage.from,\n message_id: String(walletMessage.id),\n request_type: requestType,\n trace_id: bridgeIncomingMessage?.traceId\n });\n\n if (!('event' in walletMessage)) {\n const id = walletMessage.id.toString();\n const resolve = this.pendingRequests.get(id);\n if (!resolve) {\n logDebug(`Response id ${id} doesn't match any request's id`);\n return;\n }\n\n resolve({ ...walletMessage, traceId });\n this.pendingRequests.delete(id);\n return;\n }\n\n if (walletMessage.id !== undefined) {\n const lastId = await this.connectionStorage.getLastWalletEventId();\n\n if (lastId !== undefined && walletMessage.id <= lastId) {\n logError(\n `Received event id (=${walletMessage.id}) must be greater than stored last wallet event id (=${lastId}) `\n );\n return;\n }\n\n if (walletMessage.event !== 'connect') {\n await this.connectionStorage.storeLastWalletEventId(walletMessage.id);\n }\n }\n\n // `this.listeners` might be modified in the event handler\n const listeners = this.listeners;\n\n if (walletMessage.event === 'connect') {\n await this.updateSession(walletMessage, bridgeIncomingMessage.from);\n }\n\n if (walletMessage.event === 'disconnect') {\n logDebug(`Removing bridge and session: received disconnect event`);\n await this.removeBridgeAndSession();\n }\n\n listeners.forEach(listener => listener({ ...walletMessage, traceId }));\n }\n\n private async gatewayErrorsListener(e: Event): Promise<void> {\n throw new TonConnectError(`Bridge error ${JSON.stringify(e)}`);\n }\n\n private async updateSession(\n connectEvent: ConnectEventSuccess,\n walletPublicKey: string\n ): Promise<void> {\n this.session = {\n ...this.session!,\n walletPublicKey\n };\n\n const tonAddrItem: TonAddressItemReply = connectEvent.payload.items.find(\n item => item.name === 'ton_addr'\n ) as TonAddressItemReply;\n\n const connectEventToSave: BridgeConnectionHttp['connectEvent'] = {\n ...connectEvent,\n payload: {\n ...connectEvent.payload,\n items: [tonAddrItem]\n }\n };\n\n await this.connectionStorage.storeConnection({\n type: 'http',\n session: this.session,\n lastWalletEventId: connectEvent.id,\n connectEvent: connectEventToSave,\n nextRpcRequestId: 0\n });\n }\n\n private async removeBridgeAndSession(): Promise<void> {\n this.closeConnection();\n await this.connectionStorage.removeConnection();\n }\n\n private generateUniversalLink(\n universalLink: string,\n message: ConnectRequest,\n options: Traceable\n ): string {\n if (isTelegramUrl(universalLink)) {\n return this.generateTGUniversalLink(universalLink, message, options);\n }\n\n return this.generateRegularUniversalLink(universalLink, message, options);\n }\n\n private generateRegularUniversalLink(\n universalLink: string,\n message: ConnectRequest,\n options: Traceable\n ): string {\n const url = new URL(universalLink);\n url.searchParams.append('v', PROTOCOL_VERSION.toString());\n url.searchParams.append('id', this.session!.sessionCrypto.sessionId);\n url.searchParams.append('trace_id', options.traceId);\n url.searchParams.append('r', JSON.stringify(message));\n return url.toString();\n }\n\n private generateTGUniversalLink(\n universalLink: string,\n message: ConnectRequest,\n options: Traceable\n ): string {\n const urlToWrap = this.generateRegularUniversalLink('about:blank', message, options);\n const linkParams = urlToWrap.split('?')[1]!;\n\n const startapp = 'tonconnect-' + encodeTelegramUrlParameters(linkParams);\n\n // TODO: Remove this line after all dApps and the wallets-list.json have been updated\n const updatedUniversalLink = this.convertToDirectLink(universalLink);\n\n const url = new URL(updatedUniversalLink);\n url.searchParams.append('startapp', startapp);\n return url.toString();\n }\n\n // TODO: Remove this method after all dApps and the wallets-list.json have been updated\n private convertToDirectLink(universalLink: string): string {\n const url = new URL(universalLink);\n\n if (url.searchParams.has('attach')) {\n url.searchParams.delete('attach');\n url.pathname += '/start';\n }\n\n return url.toString();\n }\n\n private async openGateways(\n sessionCrypto: SessionCrypto,\n options?: OptionalTraceable<{\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }>\n ): Promise<void> {\n const traceId = options?.traceId ?? UUIDv7();\n if (Array.isArray(this.walletConnectionSource)) {\n // close all gateways before opening new ones\n this.pendingGateways.map(bridge => bridge.close().catch());\n\n // open new gateways\n this.pendingGateways = this.walletConnectionSource.map(source => {\n const gateway = new BridgeGateway(\n this.connectionStorage.storage,\n source.bridgeUrl,\n sessionCrypto.sessionId,\n () => {},\n () => {},\n this.analyticsManager\n );\n\n gateway.setListener(message =>\n this.pendingGatewaysListener(gateway, source.bridgeUrl, message)\n );\n\n return gateway;\n });\n\n // Wait until the specified optional gateways are opened, not necessarily all gateways\n const gatewaysToWaitFor = Math.max(\n this.pendingGateways.length - this.optionalOpenGateways,\n 1\n );\n\n await waitForSome(\n this.pendingGateways.map(bridge =>\n callForSuccess(\n (_options): Promise<void> => {\n if (!this.pendingGateways.some(item => item === bridge)) {\n return bridge.close();\n }\n\n return bridge.registerSession({\n openingDeadlineMS:\n options?.openingDeadlineMS ?? this.defaultOpeningDeadlineMS,\n signal: _options.signal,\n traceId\n });\n },\n {\n attempts: Number.MAX_SAFE_INTEGER,\n delayMs: this.defaultRetryTimeoutMS,\n signal: options?.signal\n }\n )\n ),\n gatewaysToWaitFor\n );\n\n return;\n } else {\n if (this.gateway) {\n logDebug(`Gateway is already opened, closing previous gateway`);\n await this.gateway.close();\n }\n\n this.gateway = new BridgeGateway(\n this.connectionStorage.storage,\n this.walletConnectionSource.bridgeUrl,\n sessionCrypto.sessionId,\n this.gatewayListener.bind(this),\n this.gatewayErrorsListener.bind(this),\n this.analyticsManager\n );\n return await this.gateway.registerSession({\n openingDeadlineMS: options?.openingDeadlineMS,\n signal: options?.signal,\n traceId\n });\n }\n }\n\n private closeGateways(options?: { except: BridgeGateway }): void {\n this.gateway?.close();\n this.pendingGateways\n .filter(item => item !== options?.except)\n .forEach(bridge => bridge.close());\n this.pendingGateways = [];\n }\n}\n","import { TonConnectError } from 'src/errors';\n\n/**\n * Configuration options for the delay function.\n */\nexport type DelayFnOptions = {\n /**\n * An 'AbortSignal' object that can be used to abort the delay.\n */\n signal?: AbortSignal;\n};\n\n/**\n * Delays the execution of code for a specified number of milliseconds.\n * @param {number} timeout - The number of milliseconds to delay the execution.\n * @param {DelayOptions} [options] - Optional configuration options for the delay.\n * @return {Promise<void>} - A promise that resolves after the specified delay, or rejects if the delay is aborted.\n */\nexport async function delay(timeout: number, options?: DelayFnOptions): Promise<void> {\n return new Promise((resolve, reject) => {\n if (options?.signal?.aborted) {\n reject(new TonConnectError('Delay aborted'));\n return;\n }\n\n const timeoutId = setTimeout(() => resolve(), timeout);\n options?.signal?.addEventListener('abort', () => {\n clearTimeout(timeoutId);\n reject(new TonConnectError('Delay aborted'));\n });\n });\n}\n","import { getWindow } from 'src/utils/web-api';\nimport { AddTonConnectPrefix, EventDispatcher, RemoveTonConnectPrefix } from './event-dispatcher';\n\n/**\n * A concrete implementation of EventDispatcher that dispatches events to the browser window.\n */\nexport class BrowserEventDispatcher<T extends { type: string }> implements EventDispatcher<T> {\n /**\n * The window object, possibly undefined in a server environment.\n * @private\n */\n private readonly window: Window | undefined = getWindow();\n\n /**\n * Dispatches an event with the given name and details to the browser window.\n * @param eventName - The name of the event to dispatch.\n * @param eventDetails - The details of the event to dispatch.\n * @returns A promise that resolves when the event has been dispatched.\n */\n public async dispatchEvent<P extends AddTonConnectPrefix<T['type']>>(\n eventName: P,\n eventDetails: T & { type: RemoveTonConnectPrefix<P> }\n ): Promise<void> {\n const event = new CustomEvent<T>(eventName, { detail: eventDetails });\n this.window?.dispatchEvent(event);\n }\n\n /**\n * Adds an event listener to the browser window.\n * @param eventName - The name of the event to listen for.\n * @param listener - The listener to add.\n * @param options - The options for the listener.\n * @returns A function that removes the listener.\n */\n public async addEventListener<P extends AddTonConnectPrefix<T['type']>>(\n eventName: P,\n listener: (event: CustomEvent<T & { type: RemoveTonConnectPrefix<P> }>) => void,\n options?: AddEventListenerOptions\n ): Promise<() => void> {\n this.window?.addEventListener(\n eventName,\n listener as EventListener | EventListenerObject,\n options\n );\n return () =>\n this.window?.removeEventListener(\n eventName,\n listener as EventListener | EventListenerObject\n );\n }\n}\n","export { UserRejectsError } from 'src/errors/protocol/events/connect/user-rejects.error';\n","import { BadRequestError, UnknownAppError, UserRejectsError } from 'src/errors';\nimport { ManifestContentErrorError } from 'src/errors/protocol/events/connect/manifest-content-error.error';\nimport { ManifestNotFoundError } from 'src/errors/protocol/events/connect/manifest-not-found.error';\nimport { TonConnectError } from 'src/errors/ton-connect.error';\nimport { UnknownError } from 'src/errors/unknown.error';\nimport { CONNECT_EVENT_ERROR_CODES, ConnectEventError } from '@tonconnect/protocol';\n\nconst connectEventErrorsCodes: Partial<Record<CONNECT_EVENT_ERROR_CODES, typeof TonConnectError>> =\n {\n [CONNECT_EVENT_ERROR_CODES.UNKNOWN_ERROR]: UnknownError,\n [CONNECT_EVENT_ERROR_CODES.USER_REJECTS_ERROR]: UserRejectsError,\n [CONNECT_EVENT_ERROR_CODES.BAD_REQUEST_ERROR]: BadRequestError,\n [CONNECT_EVENT_ERROR_CODES.UNKNOWN_APP_ERROR]: UnknownAppError,\n [CONNECT_EVENT_ERROR_CODES.MANIFEST_NOT_FOUND_ERROR]: ManifestNotFoundError,\n [CONNECT_EVENT_ERROR_CODES.MANIFEST_CONTENT_ERROR]: ManifestContentErrorError\n };\n\nclass ConnectErrorsParser {\n parseError(error: ConnectEventError['payload']): TonConnectError {\n let ErrorConstructor: typeof TonConnectError = UnknownError;\n\n if (error.code in connectEventErrorsCodes) {\n ErrorConstructor = connectEventErrorsCodes[error.code] || UnknownError;\n }\n\n return new ErrorConstructor(error.message);\n }\n}\n\nexport const connectErrorsParser = new ConnectErrorsParser();\n","/**\n * Converts a PascalCase (or camelCase) string to kebab-case.\n *\n * For example:\n * - \"PascalCase\" → \"pascal-case\"\n * - \"camelCaseExample\" → \"camel-case-example\"\n *\n * @param value - The input string in PascalCase or camelCase format.\n * @returns The converted kebab-case string.\n */\nexport function pascalToKebab(value: string): string {\n return value.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\n/**\n * Network Information API interface (not available in all browsers)\n */\ninterface NetworkInformation {\n rtt?: number;\n effectiveType?: string;\n type?: string;\n}\n\n/**\n * Extended Navigator interface with Network Information API\n */\ninterface NavigatorWithConnection extends Navigator {\n connection?: NetworkInformation;\n mozConnection?: NetworkInformation;\n webkitConnection?: NetworkInformation;\n}\n\n/**\n * Collects static connection metrics from the browser's Performance API.\n * TTFB is measured once at page load and doesn't change.\n * @returns An object containing static connection metrics (TTFB) or empty object if not available.\n */\nexport function getStaticConnectionMetrics(): {\n conn_ttfb?: number;\n} {\n const metrics: {\n conn_ttfb?: number;\n } = {};\n\n // Get TTFB from Navigation Timing API (static, measured once at page load)\n try {\n const navEntries = performance.getEntriesByType('navigation');\n if (navEntries.length > 0) {\n const nav = navEntries[0] as PerformanceNavigationTiming;\n if (nav.responseStart && nav.requestStart) {\n metrics.conn_ttfb = Math.round(nav.responseStart - nav.requestStart);\n }\n }\n } catch (e) {\n // Performance API not available or error occurred\n }\n\n return metrics;\n}\n\n/**\n * Collects dynamic connection metrics from the browser's Network Information API.\n * @returns An object containing dynamic connection metrics (RTT, network type) or empty object if not available.\n */\nexport function getDynamicConnectionMetrics(): {\n conn_rtt?: number;\n conn_network_type?: string;\n} {\n const metrics: {\n conn_rtt?: number;\n conn_network_type?: string;\n } = {};\n\n // Get RTT and network type from Network Information API (dynamic, can change)\n try {\n const navigatorWithConnection = navigator as NavigatorWithConnection;\n const connection =\n navigatorWithConnection.connection ||\n navigatorWithConnection.mozConnection ||\n navigatorWithConnection.webkitConnection;\n if (connection) {\n if (connection.rtt !== undefined) {\n metrics.conn_rtt = connection.rtt;\n }\n if (connection.effectiveType) {\n metrics.conn_network_type = connection.effectiveType;\n } else if (connection.type) {\n metrics.conn_network_type = connection.type;\n }\n }\n } catch (e) {\n // Network Information API not available or error occurred\n }\n\n return metrics;\n}\n","'use strict';\n\nvar nacl = require('tweetnacl-util');\nvar nacl$1 = require('tweetnacl');\n\nexports.CONNECT_EVENT_ERROR_CODES = void 0;\n(function (CONNECT_EVENT_ERROR_CODES) {\n CONNECT_EVENT_ERROR_CODES[CONNECT_EVENT_ERROR_CODES[\"UNKNOWN_ERROR\"] = 0] = \"UNKNOWN_ERROR\";\n CONNECT_EVENT_ERROR_CODES[CONNECT_EVENT_ERROR_CODES[\"BAD_REQUEST_ERROR\"] = 1] = \"BAD_REQUEST_ERROR\";\n CONNECT_EVENT_ERROR_CODES[CONNECT_EVENT_ERROR_CODES[\"MANIFEST_NOT_FOUND_ERROR\"] = 2] = \"MANIFEST_NOT_FOUND_ERROR\";\n CONNECT_EVENT_ERROR_CODES[CONNECT_EVENT_ERROR_CODES[\"MANIFEST_CONTENT_ERROR\"] = 3] = \"MANIFEST_CONTENT_ERROR\";\n CONNECT_EVENT_ERROR_CODES[CONNECT_EVENT_ERROR_CODES[\"UNKNOWN_APP_ERROR\"] = 100] = \"UNKNOWN_APP_ERROR\";\n CONNECT_EVENT_ERROR_CODES[CONNECT_EVENT_ERROR_CODES[\"USER_REJECTS_ERROR\"] = 300] = \"USER_REJECTS_ERROR\";\n CONNECT_EVENT_ERROR_CODES[CONNECT_EVENT_ERROR_CODES[\"METHOD_NOT_SUPPORTED\"] = 400] = \"METHOD_NOT_SUPPORTED\";\n})(exports.CONNECT_EVENT_ERROR_CODES || (exports.CONNECT_EVENT_ERROR_CODES = {}));\nexports.CONNECT_ITEM_ERROR_CODES = void 0;\n(function (CONNECT_ITEM_ERROR_CODES) {\n CONNECT_ITEM_ERROR_CODES[CONNECT_ITEM_ERROR_CODES[\"UNKNOWN_ERROR\"] = 0] = \"UNKNOWN_ERROR\";\n CONNECT_ITEM_ERROR_CODES[CONNECT_ITEM_ERROR_CODES[\"METHOD_NOT_SUPPORTED\"] = 400] = \"METHOD_NOT_SUPPORTED\";\n})(exports.CONNECT_ITEM_ERROR_CODES || (exports.CONNECT_ITEM_ERROR_CODES = {}));\n\nexports.SEND_TRANSACTION_ERROR_CODES = void 0;\n(function (SEND_TRANSACTION_ERROR_CODES) {\n SEND_TRANSACTION_ERROR_CODES[SEND_TRANSACTION_ERROR_CODES[\"UNKNOWN_ERROR\"] = 0] = \"UNKNOWN_ERROR\";\n SEND_TRANSACTION_ERROR_CODES[SEND_TRANSACTION_ERROR_CODES[\"BAD_REQUEST_ERROR\"] = 1] = \"BAD_REQUEST_ERROR\";\n SEND_TRANSACTION_ERROR_CODES[SEND_TRANSACTION_ERROR_CODES[\"UNKNOWN_APP_ERROR\"] = 100] = \"UNKNOWN_APP_ERROR\";\n SEND_TRANSACTION_ERROR_CODES[SEND_TRANSACTION_ERROR_CODES[\"USER_REJECTS_ERROR\"] = 300] = \"USER_REJECTS_ERROR\";\n SEND_TRANSACTION_ERROR_CODES[SEND_TRANSACTION_ERROR_CODES[\"METHOD_NOT_SUPPORTED\"] = 400] = \"METHOD_NOT_SUPPORTED\";\n})(exports.SEND_TRANSACTION_ERROR_CODES || (exports.SEND_TRANSACTION_ERROR_CODES = {}));\n\nexports.SIGN_DATA_ERROR_CODES = void 0;\n(function (SIGN_DATA_ERROR_CODES) {\n SIGN_DATA_ERROR_CODES[SIGN_DATA_ERROR_CODES[\"UNKNOWN_ERROR\"] = 0] = \"UNKNOWN_ERROR\";\n SIGN_DATA_ERROR_CODES[SIGN_DATA_ERROR_CODES[\"BAD_REQUEST_ERROR\"] = 1] = \"BAD_REQUEST_ERROR\";\n SIGN_DATA_ERROR_CODES[SIGN_DATA_ERROR_CODES[\"UNKNOWN_APP_ERROR\"] = 100] = \"UNKNOWN_APP_ERROR\";\n SIGN_DATA_ERROR_CODES[SIGN_DATA_ERROR_CODES[\"USER_REJECTS_ERROR\"] = 300] = \"USER_REJECTS_ERROR\";\n SIGN_DATA_ERROR_CODES[SIGN_DATA_ERROR_CODES[\"METHOD_NOT_SUPPORTED\"] = 400] = \"METHOD_NOT_SUPPORTED\";\n})(exports.SIGN_DATA_ERROR_CODES || (exports.SIGN_DATA_ERROR_CODES = {}));\n\nexports.DISCONNECT_ERROR_CODES = void 0;\n(function (DISCONNECT_ERROR_CODES) {\n DISCONNECT_ERROR_CODES[DISCONNECT_ERROR_CODES[\"UNKNOWN_ERROR\"] = 0] = \"UNKNOWN_ERROR\";\n DISCONNECT_ERROR_CODES[DISCONNECT_ERROR_CODES[\"BAD_REQUEST_ERROR\"] = 1] = \"BAD_REQUEST_ERROR\";\n DISCONNECT_ERROR_CODES[DISCONNECT_ERROR_CODES[\"UNKNOWN_APP_ERROR\"] = 100] = \"UNKNOWN_APP_ERROR\";\n DISCONNECT_ERROR_CODES[DISCONNECT_ERROR_CODES[\"METHOD_NOT_SUPPORTED\"] = 400] = \"METHOD_NOT_SUPPORTED\";\n})(exports.DISCONNECT_ERROR_CODES || (exports.DISCONNECT_ERROR_CODES = {}));\n\nexports.CHAIN = void 0;\n(function (CHAIN) {\n CHAIN[\"MAINNET\"] = \"-239\";\n CHAIN[\"TESTNET\"] = \"-3\";\n})(exports.CHAIN || (exports.CHAIN = {}));\n\nfunction encodeUint8Array(value, urlSafe) {\n const encoded = nacl.encodeBase64(value);\n if (!urlSafe) {\n return encoded;\n }\n return encodeURIComponent(encoded);\n}\nfunction decodeToUint8Array(value, urlSafe) {\n if (urlSafe) {\n value = decodeURIComponent(value);\n }\n return nacl.decodeBase64(value);\n}\nfunction encode(value, urlSafe = false) {\n let uint8Array;\n if (value instanceof Uint8Array) {\n uint8Array = value;\n }\n else {\n if (typeof value !== 'string') {\n value = JSON.stringify(value);\n }\n uint8Array = nacl.decodeUTF8(value);\n }\n return encodeUint8Array(uint8Array, urlSafe);\n}\nfunction decode(value, urlSafe = false) {\n const decodedUint8Array = decodeToUint8Array(value, urlSafe);\n return {\n toString() {\n return nacl.encodeUTF8(decodedUint8Array);\n },\n toObject() {\n try {\n return JSON.parse(nacl.encodeUTF8(decodedUint8Array));\n }\n catch (e) {\n return null;\n }\n },\n toUint8Array() {\n return decodedUint8Array;\n }\n };\n}\nconst Base64 = {\n encode,\n decode\n};\n\nfunction concatUint8Arrays(buffer1, buffer2) {\n const mergedArray = new Uint8Array(buffer1.length + buffer2.length);\n mergedArray.set(buffer1);\n mergedArray.set(buffer2, buffer1.length);\n return mergedArray;\n}\nfunction splitToUint8Arrays(array, index) {\n if (index >= array.length) {\n throw new Error('Index is out of buffer');\n }\n const subArray1 = array.slice(0, index);\n const subArray2 = array.slice(index);\n return [subArray1, subArray2];\n}\nfunction toHexString(byteArray) {\n let hexString = '';\n byteArray.forEach(byte => {\n hexString += ('0' + (byte & 0xff).toString(16)).slice(-2);\n });\n return hexString;\n}\nfunction hexToByteArray(hexString) {\n if (hexString.length % 2 !== 0) {\n throw new Error(`Cannot convert ${hexString} to bytesArray`);\n }\n const result = new Uint8Array(hexString.length / 2);\n for (let i = 0; i < hexString.length; i += 2) {\n result[i / 2] = parseInt(hexString.slice(i, i + 2), 16);\n }\n return result;\n}\n\nfunction isNode() {\n return (typeof process !== 'undefined' && process.versions != null && process.versions.node != null);\n}\n\nclass SessionCrypto {\n constructor(keyPair) {\n this.nonceLength = 24;\n this.keyPair = keyPair ? this.createKeypairFromString(keyPair) : this.createKeypair();\n this.sessionId = toHexString(this.keyPair.publicKey);\n }\n createKeypair() {\n return nacl$1.box.keyPair();\n }\n createKeypairFromString(keyPair) {\n return {\n publicKey: hexToByteArray(keyPair.publicKey),\n secretKey: hexToByteArray(keyPair.secretKey)\n };\n }\n createNonce() {\n return nacl$1.randomBytes(this.nonceLength);\n }\n encrypt(message, receiverPublicKey) {\n const encodedMessage = new TextEncoder().encode(message);\n const nonce = this.createNonce();\n const encrypted = nacl$1.box(encodedMessage, nonce, receiverPublicKey, this.keyPair.secretKey);\n return concatUint8Arrays(nonce, encrypted);\n }\n decrypt(message, senderPublicKey) {\n const [nonce, internalMessage] = splitToUint8Arrays(message, this.nonceLength);\n const decrypted = nacl$1.box.open(internalMessage, nonce, senderPublicKey, this.keyPair.secretKey);\n if (!decrypted) {\n throw new Error(`Decryption error: \\n message: ${message.toString()} \\n sender pubkey: ${senderPublicKey.toString()} \\n keypair pubkey: ${this.keyPair.publicKey.toString()} \\n keypair secretkey: ${this.keyPair.secretKey.toString()}`);\n }\n return new TextDecoder().decode(decrypted);\n }\n stringifyKeypair() {\n return {\n publicKey: toHexString(this.keyPair.publicKey),\n secretKey: toHexString(this.keyPair.secretKey)\n };\n }\n}\n\nexports.Base64 = Base64;\nexports.SessionCrypto = SessionCrypto;\nexports.concatUint8Arrays = concatUint8Arrays;\nexports.hexToByteArray = hexToByteArray;\nexports.isNode = isNode;\nexports.splitToUint8Arrays = splitToUint8Arrays;\nexports.toHexString = toHexString;\n//# sourceMappingURL=index.cjs.map\n","import { WalletInfoDTO } from 'src/models/wallet/wallet-info';\n\nexport const FALLBACK_WALLETS_LIST: WalletInfoDTO[] = [\n {\n app_name: 'telegram-wallet',\n name: 'Wallet',\n image: 'https://wallet.tg/images/logo-288.png',\n about_url: 'https://wallet.tg/',\n universal_url: 'https://t.me/wallet?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://walletbot.me/tonconnect-bridge/bridge'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 255,\n extraCurrencySupported: true\n },\n {\n name: 'SignData',\n types: ['text', 'binary', 'cell']\n }\n ]\n },\n {\n app_name: 'tonkeeper',\n name: 'Tonkeeper',\n image: 'https://tonkeeper.com/assets/tonconnect-icon.png',\n tondns: 'tonkeeper.ton',\n about_url: 'https://tonkeeper.com',\n universal_url: 'https://app.tonkeeper.com/ton-connect',\n deepLink: 'tonkeeper-tc://',\n bridge: [\n {\n type: 'sse',\n url: 'https://bridge.tonapi.io/bridge'\n },\n {\n type: 'js',\n key: 'tonkeeper'\n }\n ],\n platforms: ['ios', 'android', 'chrome', 'firefox', 'macos'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 255,\n extraCurrencySupported: true\n },\n {\n name: 'SignData',\n types: ['text', 'binary', 'cell']\n }\n ]\n },\n {\n app_name: 'mytonwallet',\n name: 'MyTonWallet',\n image: 'https://static.mytonwallet.io/icon-256.png',\n about_url: 'https://mytonwallet.io',\n universal_url: 'https://connect.mytonwallet.org',\n deepLink: 'mytonwallet-tc://',\n bridge: [\n {\n type: 'js',\n key: 'mytonwallet'\n },\n {\n type: 'sse',\n url: 'https://tonconnectbridge.mytonwallet.org/bridge/'\n }\n ],\n platforms: ['chrome', 'windows', 'macos', 'linux', 'ios', 'android', 'firefox'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 255,\n extraCurrencySupported: false\n },\n {\n name: 'SignData',\n types: ['text', 'binary', 'cell']\n }\n ]\n },\n {\n app_name: 'tonhub',\n name: 'Tonhub',\n image: 'https://tonhub.com/tonconnect_logo.png',\n about_url: 'https://tonhub.com',\n universal_url: 'https://tonhub.com/ton-connect',\n bridge: [\n {\n type: 'js',\n key: 'tonhub'\n },\n {\n type: 'sse',\n url: 'https://connect.tonhubapi.com/tonconnect'\n }\n ],\n platforms: ['ios', 'android'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 255,\n extraCurrencySupported: true\n },\n {\n name: 'SignData',\n types: ['text', 'binary', 'cell']\n }\n ]\n },\n {\n app_name: 'bitgetTonWallet',\n name: 'Bitget Wallet',\n image: 'https://raw.githubusercontent.com/bitgetwallet/download/refs/heads/main/logo/png/bitget_wallet_logo_288_mini.png',\n about_url: 'https://web3.bitget.com',\n deepLink: 'bitkeep://',\n bridge: [\n {\n type: 'js',\n key: 'bitgetTonWallet'\n },\n {\n type: 'sse',\n url: 'https://ton-connect-bridge.bgwapi.io/bridge'\n }\n ],\n platforms: ['ios', 'android', 'chrome'],\n universal_url: 'https://bkcode.vip/ton-connect',\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'okxMiniWallet',\n name: 'OKX Mini Wallet',\n image: 'https://static.okx.com/cdn/assets/imgs/2411/8BE1A4A434D8F58A.png',\n about_url: 'https://www.okx.com/web3',\n universal_url: 'https://t.me/OKX_WALLET_BOT?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://www.okx.com/tonbridge/discover/rpc/bridge'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'binanceWeb3TonWallet',\n name: 'Binance Wallet',\n image: 'https://public.bnbstatic.com/static/binance-w3w/ton-provider/binancew3w.png',\n about_url: 'https://www.binance.com/en/web3wallet',\n deepLink: 'bnc://app.binance.com/cedefi/ton-connect',\n bridge: [\n {\n type: 'js',\n key: 'binancew3w'\n },\n {\n type: 'sse',\n url: 'https://wallet.binance.com/tonbridge/bridge'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n universal_url: 'https://app.binance.com/cedefi/ton-connect',\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'fintopio-tg',\n name: 'Fintopio',\n image: 'https://raw.githubusercontent.com/fintopio/ton-pub/refs/heads/main/logos/tonconnect-icon.png',\n about_url: 'https://fintopio.com',\n universal_url: 'https://t.me/fintopio?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://wallet-bridge.fintopio.com/bridge'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'okxTonWallet',\n name: 'OKX Wallet',\n image: 'https://static.okx.com/cdn/assets/imgs/247/58E63FEA47A2B7D7.png',\n about_url: 'https://www.okx.com/web3',\n universal_url:\n 'https://www.okx.com/download?appendQuery=true&deeplink=okx://web3/wallet/tonconnect',\n bridge: [\n {\n type: 'js',\n key: 'okxTonWallet'\n },\n {\n type: 'sse',\n url: 'https://www.okx.com/tonbridge/discover/rpc/bridge'\n }\n ],\n platforms: ['chrome', 'safari', 'firefox', 'ios', 'android'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'hot',\n name: 'HOT',\n image: 'https://raw.githubusercontent.com/hot-dao/media/main/logo.png',\n about_url: 'https://hot-labs.org/',\n universal_url: 'https://t.me/herewalletbot?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://sse-bridge.hot-labs.org'\n },\n {\n type: 'js',\n key: 'hotWallet'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'bybitTonWallet',\n name: 'Bybit Wallet',\n image: 'https://raw.githubusercontent.com/bybit-web3/bybit-web3.github.io/main/docs/images/bybit-logo.png',\n about_url: 'https://www.bybit.com/web3',\n universal_url: 'https://app.bybit.com/ton-connect',\n deepLink: 'bybitapp://',\n bridge: [\n {\n type: 'js',\n key: 'bybitTonWallet'\n },\n {\n type: 'sse',\n url: 'https://api-node.bybit.com/spot/api/web3/bridge/ton/bridge'\n }\n ],\n platforms: ['ios', 'android', 'chrome'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'dewallet',\n name: 'DeWallet',\n image: 'https://raw.githubusercontent.com/delab-team/manifests-images/main/WalletAvatar.png',\n about_url: 'https://delabwallet.com',\n universal_url: 'https://t.me/dewallet?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://bridge.dewallet.pro/bridge'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'safepalwallet',\n name: 'SafePal',\n image: 'https://s.pvcliping.com/web/public_image/SafePal_x288.png',\n tondns: '',\n about_url: 'https://www.safepal.com',\n universal_url: 'https://link.safepal.io/ton-connect',\n deepLink: 'safepal-tc://',\n bridge: [\n {\n type: 'sse',\n url: 'https://ton-bridge.safepal.com/tonbridge/v1/bridge'\n },\n {\n type: 'js',\n key: 'safepalwallet'\n }\n ],\n platforms: ['ios', 'android', 'chrome', 'firefox'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 1,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'GateWallet',\n name: 'GateWallet',\n image: 'https://img.gatedataimg.com/prd-ordinal-imgs/036f07bb8730716e/gateio-0925.png',\n about_url: 'https://www.gate.io/',\n bridge: [\n {\n type: 'js',\n key: 'gatetonwallet'\n },\n {\n type: 'sse',\n url: 'https://dapp.gateio.services/tonbridge_api/bridge/v1'\n }\n ],\n platforms: ['ios', 'android'],\n universal_url:\n 'https://gate.onelink.me/Hls0/web3?gate_web3_wallet_universal_type=ton_connect',\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'openmask',\n name: 'OpenMask',\n image: 'https://raw.githubusercontent.com/OpenProduct/openmask-extension/main/public/openmask-logo-288.png',\n about_url: 'https://www.openmask.app/',\n bridge: [\n {\n type: 'js',\n key: 'openmask'\n }\n ],\n platforms: ['chrome'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'BitgetWeb3',\n name: 'BitgetWeb3',\n image: 'https://img.bitgetimg.com/image/third/1731638059795.png',\n about_url: 'https://www.bitget.com',\n universal_url: 'https://t.me/BitgetOfficialBot?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://ton-connect-bridge.bgwapi.io/bridge'\n }\n ],\n platforms: ['ios', 'android', 'windows', 'macos', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'xtonwallet',\n name: 'XTONWallet',\n image: 'https://xtonwallet.com/assets/img/icon-256-back.png',\n about_url: 'https://xtonwallet.com',\n bridge: [\n {\n type: 'js',\n key: 'xtonwallet'\n }\n ],\n platforms: ['chrome', 'firefox'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 1,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'tonwallet',\n name: 'TON Wallet',\n image: 'https://wallet.ton.org/assets/ui/qr-logo.png',\n about_url:\n 'https://chrome.google.com/webstore/detail/ton-wallet/nphplpgoakhhjchkkhmiggakijnkhfnd',\n bridge: [\n {\n type: 'js',\n key: 'tonwallet'\n }\n ],\n platforms: ['chrome'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'bitgetWalletLite',\n name: 'Bitget Wallet Lite',\n image: 'https://raw.githubusercontent.com/bitgetwallet/download/refs/heads/main/logo/png/bitget_wallet_lite_logo_288.png',\n about_url: 'https://web3.bitget.com',\n universal_url: 'https://t.me/BitgetWallet_TGBot?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://ton-connect-bridge.bgwapi.io/bridge'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 255,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'tomoWallet',\n name: 'Tomo Wallet',\n image: 'https://pub.tomo.inc/logo.png',\n about_url: 'https://www.tomo.inc/',\n universal_url: 'https://t.me/tomowalletbot?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://go-bridge.tomo.inc/bridge'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'miraiapp-tg',\n name: 'Mirai Mini App',\n image: 'https://cdn.mirailabs.co/miraihub/miraiapp-tg-icon-288.png',\n about_url: 'https://mirai.app',\n universal_url: 'https://t.me/MiraiAppBot?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://bridge.mirai.app'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 255,\n extraCurrencySupported: false\n },\n {\n name: 'SignData',\n types: ['text', 'binary', 'cell']\n }\n ]\n },\n {\n app_name: 'Architec.ton',\n name: 'Architec.ton',\n image: 'https://raw.githubusercontent.com/Architec-Ton/wallet-tma/refs/heads/dev/public/images/arcwallet_logo.png',\n about_url: 'https://architecton.tech',\n universal_url: 'https://t.me/architec_ton_bot?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://tc.architecton.su/bridge'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 255,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'tokenpocket',\n name: 'TokenPocket',\n image: 'https://hk.tpstatic.net/logo/tokenpocket.png',\n about_url: 'https://www.tokenpocket.pro',\n universal_url: 'https://tp-lab.tptool.pro/ton-connect/',\n bridge: [\n {\n type: 'js',\n key: 'tokenpocket'\n },\n {\n type: 'sse',\n url: 'https://ton-connect.mytokenpocket.vip/bridge'\n }\n ],\n platforms: ['ios', 'android'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'uxuyWallet',\n name: 'UXUY Wallet',\n image: 'https://chain-cdn.uxuy.com/logo/square_288.png',\n about_url: 'https://docs.uxuy.com',\n universal_url: 'https://t.me/UXUYbot?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://bridge.uxuy.me/bridge'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'tonkeeper-pro',\n name: 'Tonkeeper Pro',\n image: 'https://tonkeeper.com/assets/tonconnect-icon-pro.png',\n tondns: 'tonkeeper.ton',\n about_url: 'https://tonkeeper.com/pro',\n universal_url: 'https://app.tonkeeper.com/pro/ton-connect',\n deepLink: 'tonkeeper-pro-tc://',\n bridge: [\n {\n type: 'sse',\n url: 'https://bridge.tonapi.io/bridge'\n }\n ],\n platforms: ['ios', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 255,\n extraCurrencySupported: true\n },\n {\n name: 'SignData',\n types: ['text', 'binary', 'cell']\n }\n ]\n },\n {\n app_name: 'nicegramWallet',\n name: 'Nicegram Wallet',\n image: 'https://static.nicegram.app/icon.png',\n about_url: 'https://nicegram.app',\n universal_url: 'https://nicegram.app/tc',\n deepLink: 'nicegram-tc://',\n bridge: [\n {\n type: 'sse',\n url: 'https://tc.nicegram.app/bridge'\n },\n {\n type: 'js',\n key: 'nicegramWallet'\n }\n ],\n platforms: ['ios', 'android'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 255,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'echoooTonWallet',\n name: 'EchoooWallet',\n image: 'https://cdn.echooo.xyz/front-end/source/images/logo/echooo-ton.png',\n about_url: 'https://www.echooo.xyz',\n universal_url: 'https://www.echooo.xyz/ton-connect',\n deepLink: 'echooo://',\n bridge: [\n {\n type: 'js',\n key: 'echoooTonWallet'\n },\n {\n type: 'sse',\n url: 'https://ton-connect-bridge.echooo.link/bridge'\n }\n ],\n platforms: ['ios', 'android'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 255,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'blitzwallet',\n name: 'BLITZ wallet',\n image: 'https://blitzwallet.cfd/wallet/public/logo.png',\n about_url: 'https://blitzwallet.cfd',\n universal_url: 'https://t.me/blitz_wallet_bot?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://blitzwallet.cfd/bridge/'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'koloWeb3Wallet',\n name: 'Kolo',\n image: 'https://raw.githubusercontent.com/onidev1/tc-assets/refs/heads/main/kolo_logo_288.png',\n about_url: 'https://kolo.xyz',\n universal_url: 'https://t.me/kolo?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://web3-bridge.kolo.in/bridge'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 255,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'imToken',\n name: 'imToken',\n image: 'https://aws-v2-cdn.token.im/orbit/token-v2/icons/logo-ton-connect.png',\n about_url: 'https://token.im',\n universal_url: 'https://connect.token.im/link/ton-connect',\n deepLink: 'imtokenv2://link/ton-connect',\n bridge: [\n {\n type: 'sse',\n url: 'https://connect.token.im/tonbridge'\n },\n {\n type: 'js',\n key: 'imToken'\n }\n ],\n platforms: ['ios', 'android'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 255,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'cactuslink',\n name: 'Cactus Link',\n image: 'https://downloads.mycactus.com/288_cactus_link.png',\n about_url: 'https://www.mycactus.com/defi-connector',\n bridge: [\n {\n type: 'js',\n key: 'cactuslink_ton'\n }\n ],\n platforms: ['chrome'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n },\n {\n name: 'SignData',\n types: ['text', 'binary']\n }\n ]\n },\n {\n app_name: 'onekey',\n name: 'OneKey',\n image: 'https://uni.onekey-asset.com/static/logo/onekey-x288.png',\n about_url: 'https://onekey.so',\n bridge: [\n {\n type: 'js',\n key: 'onekeyTonWallet'\n }\n ],\n platforms: ['chrome'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n }\n];\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when request to the wallet contains errors.\n */\nexport class BadRequestError extends TonConnectError {\n protected get info(): string {\n return 'Request to the wallet contains errors.';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, BadRequestError.prototype);\n }\n}\n","import { Feature } from '@tonconnect/protocol';\n\n/**\n * Common information for injectable and http-compatible wallets.\n */\nexport interface WalletInfoBase {\n /**\n * Human-readable name of the wallet.\n */\n name: string;\n\n /**\n * ID of the wallet, equals to the `appName` property into {@link Wallet.device}.\n */\n appName: string;\n\n /**\n * Url to the icon of the wallet. Resolution 288×288px. On non-transparent background, without rounded corners. PNG format.\n */\n imageUrl: string;\n\n /**\n * Will be used in the protocol later.\n */\n tondns?: string;\n\n /**\n * Info or landing page of your wallet. May be useful for TON newcomers.\n */\n aboutUrl: string;\n\n /**\n * List of features supported by the wallet.\n */\n features?: Feature[];\n\n /**\n * OS and browsers where the wallet could be installed\n */\n platforms: (\n | 'ios'\n | 'android'\n | 'macos'\n | 'windows'\n | 'linux'\n | 'chrome'\n | 'firefox'\n | 'safari'\n )[];\n}\n\n/**\n * Http-compatible wallet information.\n */\nexport interface WalletInfoRemote extends WalletInfoBase {\n /**\n * Base part of the wallet universal url. The link should support [Ton Connect parameters]{@link https://github.com/ton-connect/docs/blob/main/bridge.md#universal-link}.\n */\n universalLink: string;\n\n /**\n * Native wallet app deepLink. The link should support [Ton Connect parameters]{@link https://github.com/ton-connect/docs/blob/main/bridge.md#universal-link}.\n */\n deepLink?: string;\n\n /**\n * Url of the wallet's implementation of the [HTTP bridge]{@link https://github.com/ton-connect/docs/blob/main/bridge.md#http-bridge}.\n */\n bridgeUrl: string;\n}\n\n/**\n * JS-injectable wallet information.\n */\nexport interface WalletInfoInjectable extends WalletInfoBase {\n /**\n * If the wallet handles JS Bridge connection, specifies the binding for the bridge object accessible through window. Example: the key \"tonkeeper\" means the bridge can be accessed as window.tonkeeper.\n */\n jsBridgeKey: string;\n\n /**\n * Indicates if the wallet currently is injected to the webpage.\n */\n injected: boolean;\n\n /**\n * Indicates if the dapp is opened inside this wallet's browser.\n */\n embedded: boolean;\n}\n\n/**\n * Information about the JS-injectable wallet that is injected to the current webpage.\n */\nexport interface WalletInfoCurrentlyInjected extends WalletInfoInjectable {\n injected: true;\n}\n\n/**\n * Information about the JS-injectable wallet in the browser of which the dApp is opened.\n */\nexport interface WalletInfoCurrentlyEmbedded extends WalletInfoCurrentlyInjected {\n injected: true;\n\n embedded: true;\n}\n\n/**\n * @deprecated Use `WalletInfoInjectable` or `WalletInfoCurrentlyInjected` instead.\n */\nexport interface WalletInfoInjected extends WalletInfoBase {\n jsBridgeKey: string;\n injected: boolean;\n embedded: boolean;\n}\n\nexport type WalletInfo =\n | WalletInfoRemote\n | WalletInfoInjectable\n | (WalletInfoRemote & WalletInfoInjectable);\n\nexport interface WalletInfoDTO {\n name: string;\n app_name: string;\n image: string;\n tondns?: string;\n about_url: string;\n universal_url?: string;\n features?: Feature[];\n platforms: (\n | 'ios'\n | 'android'\n | 'macos'\n | 'windows'\n | 'linux'\n | 'chrome'\n | 'firefox'\n | 'safari'\n )[];\n\n deepLink?: string;\n bridge: (WalletInfoBridgeRemoteDTO | WalletInfoBridgeInjectedDTO)[];\n}\n\nexport interface WalletInfoBridgeRemoteDTO {\n type: 'sse';\n url: string;\n}\n\nexport interface WalletInfoBridgeInjectedDTO {\n type: 'js';\n key: string;\n}\n\n/**\n * Checks if `WalletInfo` is `WalletInfoInjectable` and `WalletInfo` is injected to the current webpage (`walletInfo.injected === true`).\n * @param value WalletInfo to check.\n */\nexport function isWalletInfoCurrentlyInjected(\n value: WalletInfo\n): value is WalletInfoCurrentlyInjected {\n return isWalletInfoInjectable(value) && value.injected;\n}\n\n/**\n * Checks if `WalletInfo` is `WalletInfoInjectable` and dApp is opened inside this wallet's browser.\n * @param value WalletInfo to check.\n */\nexport function isWalletInfoCurrentlyEmbedded(\n value: WalletInfo\n): value is WalletInfoCurrentlyEmbedded {\n return isWalletInfoCurrentlyInjected(value) && value.embedded;\n}\n\n/**\n * Checks if `WalletInfo` is `WalletInfoInjected`, but doesn't check if it is injected to the page or not.\n * @param value WalletInfo to check.\n */\nexport function isWalletInfoInjectable(value: WalletInfo): value is WalletInfoInjectable {\n return 'jsBridgeKey' in value;\n}\n\n/**\n * Checks if `WalletInfo` is `WalletInfoRemote`.\n * @param value WalletInfo to check.\n */\nexport function isWalletInfoRemote(value: WalletInfo): value is WalletInfoRemote {\n return 'bridgeUrl' in value;\n}\n\n/**\n * @deprecated use `isWalletInfoInjectable` or `isWalletInfoCurrentlyInjected` instead.\n * @param value WalletInfo to check.\n */\nexport function isWalletInfoInjected(value: WalletInfo): value is WalletInfoInjected {\n return 'jsBridgeKey' in value;\n}\n","export * from './events';\nexport * from './responses';\n","export { FetchWalletsError } from './fetch-wallets.error';\n","import { Base64, RpcMethod } from '@tonconnect/protocol';\nimport { TonConnectError } from 'src/errors/ton-connect.error';\nimport { BridgeIncomingMessage } from 'src/provider/bridge/models/bridge-incomming-message';\nimport { HttpBridgeGatewayStorage } from 'src/storage/http-bridge-gateway-storage';\nimport { IStorage } from 'src/storage/models/storage.interface';\nimport { addPathToUrl } from 'src/utils/url';\nimport '@tonconnect/isomorphic-eventsource';\nimport '@tonconnect/isomorphic-fetch';\nimport { callForSuccess } from 'src/utils/call-for-success';\nimport { logDebug, logError } from 'src/utils/log';\nimport { createResource } from 'src/utils/resource';\nimport { timeout } from 'src/utils/timeout';\nimport { createAbortController } from 'src/utils/create-abort-controller';\nimport { AnalyticsManager } from 'src/analytics/analytics-manager';\nimport { Analytics } from 'src/analytics/analytics';\nimport { BridgeClientEvent } from 'src/analytics/types';\nimport { OptionalTraceable } from 'src/utils/types';\n\nexport class BridgeGateway {\n private readonly ssePath = 'events';\n\n private readonly postPath = 'message';\n\n private readonly heartbeatMessage = 'heartbeat';\n\n private readonly defaultTtl = 300;\n\n private readonly defaultReconnectDelay = 2000;\n\n private readonly defaultResendDelay = 5000;\n\n private eventSource = createResource(\n async (\n signal?: AbortSignal,\n openingDeadlineMS?: number,\n traceId?: string\n ): Promise<EventSource> => {\n const eventSourceConfig = {\n bridgeUrl: this.bridgeUrl,\n ssePath: this.ssePath,\n sessionId: this.sessionId,\n bridgeGatewayStorage: this.bridgeGatewayStorage,\n errorHandler: this.errorsHandler.bind(this),\n messageHandler: this.messagesHandler.bind(this),\n signal: signal,\n openingDeadlineMS: openingDeadlineMS,\n traceId\n };\n return await createEventSource(eventSourceConfig);\n },\n async (resource: EventSource) => {\n resource.close();\n }\n );\n\n private get isReady(): boolean {\n const eventSource = this.eventSource.current();\n return eventSource?.readyState === EventSource.OPEN;\n }\n\n private get isClosed(): boolean {\n const eventSource = this.eventSource.current();\n return eventSource?.readyState !== EventSource.OPEN;\n }\n\n private get isConnecting(): boolean {\n const eventSource = this.eventSource.current();\n return eventSource?.readyState === EventSource.CONNECTING;\n }\n\n private readonly bridgeGatewayStorage: HttpBridgeGatewayStorage;\n private readonly analytics?: Analytics<BridgeClientEvent, 'bridge_url' | 'client_id'>;\n\n constructor(\n storage: IStorage,\n public readonly bridgeUrl: string,\n public readonly sessionId: string,\n private listener: (msg: BridgeIncomingMessage) => void,\n private errorsListener: (err: Event) => void,\n analyticsManager?: AnalyticsManager\n ) {\n this.bridgeGatewayStorage = new HttpBridgeGatewayStorage(storage, bridgeUrl);\n this.analytics = analyticsManager?.scoped({\n bridge_url: bridgeUrl,\n client_id: sessionId\n });\n }\n\n public async registerSession(options?: RegisterSessionOptions): Promise<void> {\n try {\n this.analytics?.emitBridgeClientConnectStarted({\n trace_id: options?.traceId\n });\n const connectionStarted = Date.now();\n await this.eventSource.create(\n options?.signal,\n options?.openingDeadlineMS,\n options?.traceId\n );\n\n const bridgeConnectDuration = Date.now() - connectionStarted;\n this.analytics?.emitBridgeClientConnectEstablished({\n bridge_connect_duration: bridgeConnectDuration,\n trace_id: options?.traceId\n });\n } catch (error) {\n this.analytics?.emitBridgeClientConnectError({\n trace_id: options?.traceId,\n error_message: String(error)\n });\n throw error;\n }\n }\n\n public async send(\n message: Uint8Array,\n receiver: string,\n topic: RpcMethod,\n options?: OptionalTraceable<{\n ttl?: number;\n signal?: AbortSignal;\n attempts?: number;\n }>\n ): Promise<void>;\n /** @deprecated use send(message, receiver, topic, options) instead */\n public async send(\n message: Uint8Array,\n receiver: string,\n topic: RpcMethod,\n ttl?: number\n ): Promise<void>;\n public async send(\n message: Uint8Array,\n receiver: string,\n topic: RpcMethod,\n ttlOrOptions?:\n | number\n | OptionalTraceable<{ ttl?: number; signal?: AbortSignal; attempts?: number }>\n ): Promise<void> {\n // TODO: remove deprecated method\n const options: OptionalTraceable<{\n ttl?: number;\n signal?: AbortSignal;\n attempts?: number;\n }> = {};\n if (typeof ttlOrOptions === 'number') {\n options.ttl = ttlOrOptions;\n } else {\n options.ttl = ttlOrOptions?.ttl;\n options.signal = ttlOrOptions?.signal;\n options.attempts = ttlOrOptions?.attempts;\n options.traceId = ttlOrOptions?.traceId;\n }\n\n const url = new URL(addPathToUrl(this.bridgeUrl, this.postPath));\n url.searchParams.append('client_id', this.sessionId);\n url.searchParams.append('to', receiver);\n url.searchParams.append('ttl', (options?.ttl || this.defaultTtl).toString());\n url.searchParams.append('topic', topic);\n if (options?.traceId) {\n url.searchParams.append('trace_id', options.traceId);\n }\n\n const body = Base64.encode(message);\n\n await callForSuccess(\n async options => {\n const response = await this.post(url, body, options.signal);\n\n if (!response.ok) {\n throw new TonConnectError(`Bridge send failed, status ${response.status}`);\n }\n },\n {\n attempts: options?.attempts ?? Number.MAX_SAFE_INTEGER,\n delayMs: this.defaultResendDelay,\n signal: options?.signal\n }\n );\n }\n\n public pause(): void {\n this.eventSource.dispose().catch(e => logError(`Bridge pause failed, ${e}`));\n }\n\n public async unPause(): Promise<void> {\n const RECREATE_WITHOUT_DELAY = 0;\n await this.eventSource.recreate(RECREATE_WITHOUT_DELAY);\n }\n\n public async close(): Promise<void> {\n await this.eventSource.dispose().catch(e => logError(`Bridge close failed, ${e}`));\n }\n\n public setListener(listener: (msg: BridgeIncomingMessage) => void): void {\n this.listener = listener;\n }\n\n public setErrorsListener(errorsListener: (err: Event) => void): void {\n this.errorsListener = errorsListener;\n }\n\n private async post(url: URL, body: string, signal?: AbortSignal): Promise<Response> {\n const response = await fetch(url, {\n method: 'post',\n body: body,\n signal: signal\n });\n\n if (!response.ok) {\n throw new TonConnectError(`Bridge send failed, status ${response.status}`);\n }\n\n return response;\n }\n\n private async errorsHandler(eventSource: EventSource, e: Event): Promise<EventSource | void> {\n if (this.isConnecting) {\n eventSource.close();\n throw new TonConnectError('Bridge error, failed to connect');\n }\n\n if (this.isReady) {\n try {\n this.errorsListener(e);\n } catch (e) {}\n return;\n }\n\n if (this.isClosed) {\n eventSource.close();\n logDebug(`Bridge reconnecting, ${this.defaultReconnectDelay}ms delay`);\n return await this.eventSource.recreate(this.defaultReconnectDelay);\n }\n\n throw new TonConnectError('Bridge error, unknown state');\n }\n\n private async messagesHandler(e: MessageEvent<string>): Promise<void> {\n if (e.data === this.heartbeatMessage) {\n return;\n }\n\n await this.bridgeGatewayStorage.storeLastEventId(e.lastEventId);\n\n if (this.isClosed) {\n return;\n }\n\n let bridgeIncomingMessage: BridgeIncomingMessage;\n try {\n const bridgeIncomingMessageRaw = JSON.parse(e.data);\n bridgeIncomingMessage = {\n message: bridgeIncomingMessageRaw.message,\n from: bridgeIncomingMessageRaw.from,\n traceId: bridgeIncomingMessageRaw.trace_id\n };\n } catch (_) {\n throw new TonConnectError(`Bridge message parse failed, message ${e.data}`);\n }\n this.listener(bridgeIncomingMessage);\n }\n}\n\n/**\n * Represents options for creating an event source.\n */\nexport type RegisterSessionOptions = OptionalTraceable<{\n /**\n * Deadline for opening the event source.\n */\n openingDeadlineMS?: number;\n\n /**\n * Signal to abort the operation.\n */\n signal?: AbortSignal;\n}>;\n\n/**\n * Configuration for creating an event source.\n */\nexport type CreateEventSourceConfig = OptionalTraceable<{\n /**\n * URL of the bridge.\n */\n bridgeUrl: string;\n /**\n * Path to the SSE endpoint.\n */\n ssePath: string;\n /**\n * Session ID of the client.\n */\n sessionId: string;\n /**\n * Storage for the last event ID.\n */\n bridgeGatewayStorage: HttpBridgeGatewayStorage;\n /**\n * Error handler for the event source.\n */\n errorHandler: (eventSource: EventSource, e: Event) => Promise<EventSource | void>;\n /**\n * Message handler for the event source.\n */\n messageHandler: (e: MessageEvent<string>) => void;\n /**\n * Signal to abort opening the event source and destroy it.\n */\n signal?: AbortSignal;\n /**\n * Deadline for opening the event source.\n */\n openingDeadlineMS?: number;\n}>;\n\n/**\n * Creates an event source.\n * @param {CreateEventSourceConfig} config - Configuration for creating an event source.\n */\nasync function createEventSource(config: CreateEventSourceConfig): Promise<EventSource> {\n return await timeout(\n async (resolve, reject, deferOptions) => {\n const abortController = createAbortController(deferOptions.signal);\n const signal = abortController.signal;\n\n if (signal.aborted) {\n reject(new TonConnectError('Bridge connection aborted'));\n return;\n }\n\n const url = new URL(addPathToUrl(config.bridgeUrl, config.ssePath));\n url.searchParams.append('client_id', config.sessionId);\n\n const lastEventId = await config.bridgeGatewayStorage.getLastEventId();\n if (lastEventId) {\n url.searchParams.append('last_event_id', lastEventId);\n }\n if (config.traceId) {\n url.searchParams.append('trace_id', config.traceId);\n }\n\n if (signal.aborted) {\n reject(new TonConnectError('Bridge connection aborted'));\n return;\n }\n\n const eventSource = new EventSource(url.toString());\n\n eventSource.onerror = async (reason: Event): Promise<void> => {\n if (signal.aborted) {\n eventSource.close();\n reject(new TonConnectError('Bridge connection aborted'));\n return;\n }\n\n try {\n const newInstance = await config.errorHandler(eventSource, reason);\n if (newInstance !== eventSource) {\n eventSource.close();\n }\n\n if (newInstance && newInstance !== eventSource) {\n resolve(newInstance);\n }\n } catch (e) {\n eventSource.close();\n reject(e);\n }\n };\n eventSource.onopen = (): void => {\n if (signal.aborted) {\n eventSource.close();\n reject(new TonConnectError('Bridge connection aborted'));\n return;\n }\n resolve(eventSource);\n };\n eventSource.onmessage = (event: MessageEvent<string>): void => {\n if (signal.aborted) {\n eventSource.close();\n reject(new TonConnectError('Bridge connection aborted'));\n return;\n }\n config.messageHandler(event);\n };\n\n config.signal?.addEventListener('abort', () => {\n eventSource.close();\n reject(new TonConnectError('Bridge connection aborted'));\n });\n },\n { timeout: config.openingDeadlineMS, signal: config.signal }\n );\n}\n","import { WrongAddressError, ParseHexError } from 'src/errors';\nimport { Base64 } from '@tonconnect/protocol';\n\nconst bounceableTag = 0x11;\nconst noBounceableTag = 0x51;\nconst testOnlyTag = 0x80;\n\n/**\n * Converts raw TON address to no-bounceable user-friendly format. [See details]{@link https://ton.org/docs/learn/overviews/addresses#user-friendly-address}\n * @param hexAddress raw TON address formatted as \"0:<hex string without 0x>\".\n * @param [testOnly=false] convert address to test-only form. [See details]{@link https://ton.org/docs/learn/overviews/addresses#user-friendly-address}\n */\nexport function toUserFriendlyAddress(hexAddress: string, testOnly = false): string {\n const { wc, hex } = parseHexAddress(hexAddress);\n\n let tag = noBounceableTag;\n if (testOnly) {\n tag |= testOnlyTag;\n }\n\n const addr = new Int8Array(34);\n addr[0] = tag;\n addr[1] = wc;\n addr.set(hex, 2);\n\n const addressWithChecksum = new Uint8Array(36);\n addressWithChecksum.set(addr);\n addressWithChecksum.set(crc16(addr), 34);\n\n let addressBase64 = Base64.encode(addressWithChecksum);\n\n return addressBase64.replace(/\\+/g, '-').replace(/\\//g, '_');\n}\n\n/**\n * Validates if the address is in user-friendly format by attempting to parse it.\n * @param address address to validate\n * @returns true if the address is valid user-friendly format, false otherwise\n */\nexport function isValidUserFriendlyAddress(address: string): boolean {\n try {\n parseUserFriendlyAddress(address);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Validates if the address is in raw hex format (e.g., \"0:1234...\" or \"-1:1234...\").\n * @param address address to validate\n * @returns true if the address is valid raw format, false otherwise\n */\nexport function isValidRawAddress(address: string): boolean {\n try {\n parseHexAddress(address);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function toRawAddress({ wc, hex }: { wc: number; hex: string }): string {\n return `${wc}:${hex}`;\n}\n\n/**\n * Parses user-friendly address and returns its components.\n * @param address user-friendly address\n * @returns parsed address components\n */\nexport function parseUserFriendlyAddress(address: string): {\n wc: 0 | -1;\n hex: string;\n testOnly: boolean;\n isBounceable: boolean;\n} {\n const base64 = address.replace(/-/g, '+').replace(/_/g, '/');\n\n let decoded: Uint8Array;\n try {\n decoded = Base64.decode(base64).toUint8Array();\n } catch {\n throw new WrongAddressError(`Invalid base64 encoding in address: ${address}`);\n }\n\n if (decoded.length !== 36) {\n throw new WrongAddressError(`Invalid address length: ${address}`);\n }\n\n const addr = decoded.slice(0, 34);\n const checksum = decoded.slice(34, 36);\n\n const calculatedChecksum = crc16(addr);\n if (!checksum.every((byte, i) => byte === calculatedChecksum[i])) {\n throw new WrongAddressError(`Invalid checksum in address: ${address}`);\n }\n\n let tag = addr[0]!;\n let isTestOnly = false;\n let isBounceable = false;\n if (tag & testOnlyTag) {\n isTestOnly = true;\n tag = tag ^ testOnlyTag;\n }\n if (tag !== bounceableTag && tag !== noBounceableTag) {\n throw new WrongAddressError(`Unknown address tag: ${tag}`);\n }\n\n isBounceable = tag === bounceableTag;\n let wc = null;\n if (addr[1] === 0xff) {\n // TODO we should read signed integer here\n wc = -1;\n } else {\n wc = addr[1] as 0 | -1;\n }\n const hex = addr.slice(2);\n\n if (wc !== 0 && wc !== -1) {\n throw new WrongAddressError(`Invalid workchain: ${wc}`);\n }\n\n return {\n wc,\n hex: Array.from(hex)\n .map(b => b.toString(16).padStart(2, '0'))\n .join(''),\n testOnly: isTestOnly,\n isBounceable\n };\n}\n\nfunction parseHexAddress(hexAddress: string): { wc: 0 | -1; hex: Uint8Array } {\n if (!hexAddress.includes(':')) {\n throw new WrongAddressError(`Wrong address ${hexAddress}. Address must include \":\".`);\n }\n\n const parts = hexAddress.split(':');\n if (parts.length !== 2) {\n throw new WrongAddressError(\n `Wrong address ${hexAddress}. Address must include \":\" only once.`\n );\n }\n\n const wc = parseInt(parts[0]!);\n if (wc !== 0 && wc !== -1) {\n throw new WrongAddressError(\n `Wrong address ${hexAddress}. WC must be eq 0 or -1, but ${wc} received.`\n );\n }\n\n const hex = parts[1];\n if (hex?.length !== 64) {\n throw new WrongAddressError(\n `Wrong address ${hexAddress}. Hex part must be 64bytes length, but ${hex?.length} received.`\n );\n }\n\n return {\n wc,\n hex: hexToBytes(hex)\n };\n}\n\nfunction crc16(data: ArrayLike<number>): Uint8Array {\n const poly = 0x1021;\n let reg = 0;\n const message = new Uint8Array(data.length + 2);\n message.set(data);\n for (let byte of message) {\n let mask = 0x80;\n while (mask > 0) {\n reg <<= 1;\n if (byte & mask) {\n reg += 1;\n }\n mask >>= 1;\n if (reg > 0xffff) {\n reg &= 0xffff;\n reg ^= poly;\n }\n }\n }\n return new Uint8Array([Math.floor(reg / 256), reg % 256]);\n}\n\nconst toByteMap: Record<string, number> = {};\nfor (let ord = 0; ord <= 0xff; ord++) {\n let s = ord.toString(16);\n if (s.length < 2) {\n s = '0' + s;\n }\n toByteMap[s] = ord;\n}\n\nexport function hexToBytes(hex: string): Uint8Array {\n hex = hex.toLowerCase();\n const length2 = hex.length;\n if (length2 % 2 !== 0) {\n throw new ParseHexError('Hex string must have length a multiple of 2: ' + hex);\n }\n const length = length2 / 2;\n const result = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n const doubled = i * 2;\n const hexSubstring = hex.substring(doubled, doubled + 2);\n if (!toByteMap.hasOwnProperty(hexSubstring)) {\n throw new ParseHexError('Invalid hex character: ' + hexSubstring);\n }\n result[i] = toByteMap[hexSubstring]!;\n }\n return result;\n}\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when send transaction or other protocol methods called while wallet is not connected.\n */\nexport class WalletNotConnectedError extends TonConnectError {\n protected get info(): string {\n return 'Send transaction or other protocol methods called while wallet is not connected.';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, WalletNotConnectedError.prototype);\n }\n}\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when an error occurred while fetching the wallets list.\n */\nexport class FetchWalletsError extends TonConnectError {\n protected get info(): string {\n return 'An error occurred while fetching the wallets list.';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, FetchWalletsError.prototype);\n }\n}\n","export async function waitForSome<T>(\n promises: Promise<T>[],\n count: number\n): Promise<PromiseSettledResult<T>[]> {\n if (count <= 0) return [];\n if (count > promises.length) {\n throw new RangeError('count cannot be greater than the number of promises');\n }\n\n const results: PromiseSettledResult<T>[] = new Array(promises.length);\n let settledCount = 0;\n\n return new Promise(resolve => {\n promises.forEach((p, index) => {\n Promise.resolve(p)\n .then(value => ({ status: 'fulfilled' as const, value }))\n .catch(reason => ({ status: 'rejected' as const, reason }))\n .then(result => {\n results[index] = result;\n settledCount++;\n if (settledCount === count) {\n resolve(results);\n }\n });\n });\n });\n}\n","export { LocalstorageNotFoundError } from './localstorage-not-found.error';\n","(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES,\n\n gf: gf,\n D: D,\n L: L,\n pack25519: pack25519,\n unpack25519: unpack25519,\n M: M,\n A: A,\n S: S,\n Z: Z,\n pow2523: pow2523,\n add: add,\n set25519: set25519,\n modL: modL,\n scalarmult: scalarmult,\n scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return null;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","import { DeviceInfo, KeyPair, SessionCrypto, TonAddressItemReply } from '@tonconnect/protocol';\nimport { BridgeSessionRaw } from 'src/provider/bridge/models/bridge-session-raw';\nimport { BridgeSession } from './bridge-session';\nimport { WalletConnectionSourceHTTP } from 'src/models';\nimport { Optional } from 'src/utils/types';\n\nexport const CONNECTION_HTTP_EXPIRATION_TIME = 5 * 60 * 1000;\n\nexport type BridgeConnection =\n | BridgeConnectionHttp\n | BridgePendingConnectionHttp\n | BridgeConnectionInjected\n | BridgeConnectionWalletConnect;\n\nexport interface BridgeConnectionWalletConnect {\n type: 'wallet-connect';\n}\n\nexport interface BridgeConnectionInjected {\n type: 'injected';\n jsBridgeKey: string;\n nextRpcRequestId: number;\n}\n\nexport interface BridgeConnectionHttp {\n type: 'http';\n lastWalletEventId?: number;\n nextRpcRequestId: number;\n connectEvent: {\n event: 'connect';\n payload: {\n items: [TonAddressItemReply];\n device: DeviceInfo;\n };\n };\n session: BridgeSession;\n}\n\nexport interface BridgePendingConnectionHttp {\n type: 'http';\n sessionCrypto: SessionCrypto;\n connectionSource:\n | Optional<WalletConnectionSourceHTTP, 'universalLink'>\n | Pick<WalletConnectionSourceHTTP, 'bridgeUrl'>[];\n}\n\nexport function isPendingConnectionHttp(\n connection: BridgePendingConnectionHttp | BridgeConnectionHttp\n): connection is BridgePendingConnectionHttp {\n return !('connectEvent' in connection);\n}\n\nexport function isPendingConnectionHttpRaw(\n connection: BridgePendingConnectionHttpRaw | BridgeConnectionHttpRaw\n): connection is BridgePendingConnectionHttpRaw {\n return !('connectEvent' in connection);\n}\n\nexport function isExpiredPendingConnectionHttpRaw(\n connection: BridgePendingConnectionHttpRaw\n): boolean {\n return Date.now() - (connection.createdAt ?? 0) > CONNECTION_HTTP_EXPIRATION_TIME;\n}\n\nexport type BridgeConnectionHttpRaw = Omit<BridgeConnectionHttp, 'session'> & {\n session: BridgeSessionRaw;\n};\n\nexport type BridgePendingConnectionHttpRaw = Omit<BridgePendingConnectionHttp, 'sessionCrypto'> & {\n sessionCrypto: KeyPair;\n createdAt?: number;\n};\n\nexport type BridgeConnectionRaw =\n | BridgeConnectionHttpRaw\n | BridgePendingConnectionHttpRaw\n | BridgeConnectionInjected\n | BridgeConnectionWalletConnect;\n","/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2010-2020 Robert Kieffer and other contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport { validate } from './validate';\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nconst byteToHex: string[] = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr: Uint8Array, offset = 0): string {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n //\n // Note to future-self: No, you can't remove the `toLowerCase()` call.\n // REF: https://github.com/uuidjs/uuid/pull/677#issuecomment-1757351351\n return (\n byteToHex[arr[offset + 0]!]! +\n byteToHex[arr[offset + 1]!] +\n byteToHex[arr[offset + 2]!] +\n byteToHex[arr[offset + 3]!] +\n '-' +\n byteToHex[arr[offset + 4]!] +\n byteToHex[arr[offset + 5]!] +\n '-' +\n byteToHex[arr[offset + 6]!] +\n byteToHex[arr[offset + 7]!] +\n '-' +\n byteToHex[arr[offset + 8]!] +\n byteToHex[arr[offset + 9]!] +\n '-' +\n byteToHex[arr[offset + 10]!] +\n byteToHex[arr[offset + 11]!] +\n byteToHex[arr[offset + 12]!] +\n byteToHex[arr[offset + 13]!] +\n byteToHex[arr[offset + 14]!] +\n byteToHex[arr[offset + 15]!]\n ).toLowerCase();\n}\n\nexport function stringify(arr: Uint8Array, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n\n // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n","import { TonConnectError } from 'src/errors';\nimport { delay } from 'src/utils/delay';\nimport { createAbortController } from 'src/utils/create-abort-controller';\n\n/**\n * The resource interface.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type Resource<T, Args extends any[]> = {\n /**\n * Create a new resource.\n */\n create: (abortSignal?: AbortSignal, ...args: Args) => Promise<T>;\n\n /**\n * Get the current resource.\n */\n current: () => T | null;\n\n /**\n * Dispose the current resource.\n */\n dispose: () => Promise<void>;\n\n /**\n * Recreate the current resource.\n */\n recreate: (delayMs: number) => Promise<T>;\n};\n\n/**\n * Create a resource.\n *\n * @template T - The type of the resource.\n * @template Args - The type of the arguments for creating the resource.\n *\n * @param {(...args: Args) => Promise<T>} createFn - A function that creates the resource.\n * @param {(resource: T) => Promise<void>} [disposeFn] - An optional function that disposes the resource.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function createResource<T extends EventSource, Args extends any[]>(\n createFn: (signal?: AbortSignal, ...args: Args) => Promise<T>,\n disposeFn: (resource: T) => Promise<void>\n): Resource<T, Args> {\n let currentResource: T | null = null;\n let currentArgs: Args | null = null;\n let currentPromise: Promise<T> | null = null;\n let currentSignal: AbortSignal | null = null;\n let abortController: AbortController | null = null;\n\n // create a new resource\n const create = async (signal?: AbortSignal, ...args: Args): Promise<T> => {\n currentSignal = signal ?? null;\n\n abortController?.abort();\n abortController = createAbortController(signal);\n\n if (abortController.signal.aborted) {\n throw new TonConnectError('Resource creation was aborted');\n }\n\n currentArgs = args ?? null;\n\n const promise = createFn(abortController.signal, ...args);\n currentPromise = promise;\n const resource = await promise;\n\n if (currentPromise !== promise && resource !== currentResource) {\n await disposeFn(resource);\n throw new TonConnectError('Resource creation was aborted by a new resource creation');\n }\n\n currentResource = resource;\n return currentResource;\n };\n\n // get the current resource\n const current = (): T | null => {\n return currentResource ?? null;\n };\n\n // dispose the current resource\n const dispose = async (): Promise<void> => {\n try {\n const resource = currentResource;\n currentResource = null;\n\n const promise = currentPromise;\n currentPromise = null;\n\n try {\n abortController?.abort();\n } catch (e) {}\n\n await Promise.allSettled([\n resource ? disposeFn(resource) : Promise.resolve(),\n promise ? disposeFn(await promise) : Promise.resolve()\n ]);\n } catch (e) {}\n };\n\n // recreate the current resource\n const recreate = async (delayMs: number): Promise<T> => {\n const resource = currentResource;\n const promise = currentPromise;\n const args = currentArgs;\n const signal = currentSignal;\n\n await delay(delayMs);\n\n if (\n resource === currentResource &&\n promise === currentPromise &&\n args === currentArgs &&\n signal === currentSignal\n ) {\n return await create(currentSignal!, ...((args ?? []) as Args));\n }\n\n throw new TonConnectError('Resource recreation was aborted by a new resource creation');\n };\n\n return {\n create,\n current,\n dispose,\n recreate\n };\n}\n","import {\n CONNECT_EVENT_ERROR_CODES,\n SEND_TRANSACTION_ERROR_CODES,\n SendTransactionRpcRequest,\n SendTransactionRpcResponseError,\n SendTransactionRpcResponseSuccess\n} from '@tonconnect/protocol';\nimport { BadRequestError, TonConnectError, UnknownAppError, UserRejectsError } from 'src/errors';\nimport { UnknownError } from 'src/errors/unknown.error';\nimport { SendTransactionRequest, SendTransactionResponse } from 'src/models/methods';\nimport { RpcParser } from 'src/parsers/rpc-parser';\nimport { WithoutId } from 'src/utils/types';\n\ntype ArrayElement<T> = T extends Array<infer U> ? U : never;\ntype Message = ArrayElement<SendTransactionRequest['messages']>;\n\nconst sendTransactionErrors: Partial<Record<CONNECT_EVENT_ERROR_CODES, typeof TonConnectError>> = {\n [SEND_TRANSACTION_ERROR_CODES.UNKNOWN_ERROR]: UnknownError,\n [SEND_TRANSACTION_ERROR_CODES.USER_REJECTS_ERROR]: UserRejectsError,\n [SEND_TRANSACTION_ERROR_CODES.BAD_REQUEST_ERROR]: BadRequestError,\n [SEND_TRANSACTION_ERROR_CODES.UNKNOWN_APP_ERROR]: UnknownAppError\n};\n\nclass SendTransactionParser extends RpcParser<'sendTransaction'> {\n convertToRpcRequest(\n request: Omit<SendTransactionRequest, 'validUntil' | 'messages'> & {\n valid_until: number;\n messages: Array<\n Omit<Message, 'extraCurrency'> & { extra_currency?: Message['extraCurrency'] }\n >;\n }\n ): WithoutId<SendTransactionRpcRequest> {\n return {\n method: 'sendTransaction',\n params: [JSON.stringify(request)]\n };\n }\n\n parseAndThrowError(response: WithoutId<SendTransactionRpcResponseError>): never {\n let ErrorConstructor: typeof TonConnectError = UnknownError;\n\n if (response.error.code in sendTransactionErrors) {\n ErrorConstructor = sendTransactionErrors[response.error.code] || UnknownError;\n }\n\n throw new ErrorConstructor(response.error.message);\n }\n\n convertFromRpcResponse(\n rpcResponse: WithoutId<SendTransactionRpcResponseSuccess>\n ): SendTransactionResponse {\n return {\n boc: rpcResponse.result\n };\n }\n}\n\nexport const sendTransactionParser = new SendTransactionParser();\n","import { isValidUserFriendlyAddress, isValidRawAddress } from 'src/utils/address';\nimport { getDomain } from 'src/utils/web-api';\n\nconst BASE64_REGEX = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;\nconst BASE64URL_REGEX = /^[A-Za-z0-9\\-_]+$/;\n\nconst BOC_PREFIX = 'te6cc';\nconst INTEGER_REGEX = /^-?\\d+$/;\nconst POSITIVE_INTEGER_REGEX = /^\\d+$/;\n\nconst MAX_DOMAIN_BYTES = 128;\nconst MAX_PAYLOAD_BYTES = 128;\nconst MAX_TOTAL_BYTES = 222;\n\ntype ValidationResult = string | null;\n\nfunction isValidNumber(value: unknown): value is number {\n return typeof value === 'number' && !isNaN(value);\n}\n\nfunction isValidString(value: unknown): value is string {\n return typeof value === 'string' && value.length > 0;\n}\n\nfunction isValidAddress(value: unknown): boolean {\n return isValidString(value) && (isValidRawAddress(value) || isValidUserFriendlyAddress(value));\n}\n\nfunction isValidNetwork(value: unknown): boolean {\n return isValidString(value) && /^-?\\d+$/.test(value);\n}\n\nfunction isValidBoc(value: unknown): value is string {\n return (\n typeof value === 'string' &&\n (BASE64_REGEX.test(value) || BASE64URL_REGEX.test(value)) &&\n value.startsWith(BOC_PREFIX)\n );\n}\n\nfunction isValidObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isValidArray(value: unknown): value is unknown[] {\n return Array.isArray(value);\n}\n\nfunction hasExtraProperties(obj: Record<string, unknown>, allowedKeys: string[]): boolean {\n return Object.keys(obj).some(key => !allowedKeys.includes(key));\n}\n\nexport function validateSendTransactionRequest(data: unknown): ValidationResult {\n if (!isValidObject(data)) {\n return 'Request must be an object';\n }\n\n const allowedKeys = ['validUntil', 'network', 'from', 'messages'];\n if (hasExtraProperties(data, allowedKeys)) {\n return 'Request contains extra properties';\n }\n\n if (data.validUntil) {\n if (!isValidNumber(data.validUntil)) {\n return \"Incorrect 'validUntil'\";\n }\n\n const now = Math.floor(Date.now() / 1000);\n const fiveMinutesFromNow = now + 300;\n if (data.validUntil > fiveMinutesFromNow) {\n console.warn(\n `validUntil (${data.validUntil}) is more than 5 minutes from now (${now})`\n );\n }\n }\n\n if (data.network !== undefined) {\n if (!isValidNetwork(data.network)) {\n return \"Invalid 'network' format\";\n }\n }\n\n if (data.from !== undefined && !isValidAddress(data.from)) {\n return \"Invalid 'from' address format\";\n }\n\n if (!isValidArray(data.messages) || data.messages.length === 0) {\n return \"'messages' is required\";\n }\n\n for (let i = 0; i < data.messages.length; i++) {\n const message = data.messages[i];\n const messageError = validateTransactionMessage(message, i);\n if (messageError) {\n return messageError;\n }\n }\n\n return null;\n}\n\nfunction validateTransactionMessage(message: unknown, index: number): ValidationResult {\n if (!isValidObject(message)) {\n return `Message at index ${index} must be an object`;\n }\n\n const allowedKeys = ['address', 'amount', 'stateInit', 'payload', 'extraCurrency'];\n if (hasExtraProperties(message, allowedKeys)) {\n return `Message at index ${index} contains extra properties`;\n }\n\n if (!isValidString(message.address)) {\n return `'address' is required in message at index ${index}`;\n }\n if (!isValidUserFriendlyAddress(message.address)) {\n return `Wrong 'address' format in message at index ${index}`;\n }\n\n if (!isValidString(message.amount)) {\n return `'amount' is required in message at index ${index}`;\n }\n if (!/^[0-9]+$/.test(message.amount)) {\n return `Incorrect 'amount' in message at index ${index}`;\n }\n\n if (message.stateInit !== undefined) {\n if (!isValidString(message.stateInit) || !isValidBoc(message.stateInit)) {\n return `Invalid 'stateInit' in message at index ${index}`;\n }\n }\n\n if (message.payload !== undefined) {\n if (!isValidString(message.payload) || !isValidBoc(message.payload)) {\n return `Invalid 'payload' in message at index ${index}`;\n }\n }\n\n if (message.extraCurrency !== undefined) {\n if (!isValidObject(message.extraCurrency)) {\n return `Invalid 'extraCurrency' in message at index ${index}`;\n }\n for (const [key, value] of Object.entries(message.extraCurrency)) {\n if (\n !INTEGER_REGEX.test(key) ||\n typeof value !== 'string' ||\n !POSITIVE_INTEGER_REGEX.test(value)\n ) {\n return `Invalid 'extraCurrency' format in message at index ${index}`;\n }\n }\n }\n\n return null;\n}\n\nexport function validateConnectAdditionalRequest(data: unknown): ValidationResult {\n if (!isValidObject(data)) {\n return 'Request must be an object';\n }\n\n const allowedKeys = ['tonProof'];\n if (hasExtraProperties(data, allowedKeys)) {\n return 'Request contains extra properties';\n }\n\n if (data.tonProof !== undefined) {\n if (typeof data.tonProof !== 'string') {\n return \"Invalid 'tonProof'\";\n }\n\n const payload = data.tonProof;\n if (payload.length === 0) {\n return \"Empty 'tonProof' payload\";\n }\n\n // Get current domain for validation first\n const domain = getDomain();\n if (!domain) {\n // In Node.js environment, skip domain validation\n return null;\n }\n\n // Validate domain size (max 128 bytes)\n const domainBytes = new TextEncoder().encode(domain).length;\n if (domainBytes > MAX_DOMAIN_BYTES) {\n return 'Current domain exceeds 128 bytes limit';\n }\n\n // Validate payload size (max 128 bytes)\n const payloadBytes = new TextEncoder().encode(payload).length;\n if (payloadBytes > MAX_PAYLOAD_BYTES) {\n return \"'tonProof' payload exceeds 128 bytes limit\";\n }\n\n // Validate total size (domain + payload <= 222 bytes)\n if (domainBytes + payloadBytes > MAX_TOTAL_BYTES) {\n return \"'tonProof' domain + payload exceeds 222 bytes limit\";\n }\n }\n\n return null;\n}\n\nexport function validateSignDataPayload(data: unknown): ValidationResult {\n if (!isValidObject(data)) {\n return 'Payload must be an object';\n }\n\n if (!isValidString(data.type)) {\n return \"'type' is required\";\n }\n\n switch (data.type) {\n case 'text':\n return validateSignDataPayloadText(data);\n case 'binary':\n return validateSignDataPayloadBinary(data);\n case 'cell':\n return validateSignDataPayloadCell(data);\n default:\n return \"Invalid 'type' value\";\n }\n}\n\nfunction validateSignDataPayloadText(data: Record<string, unknown>): ValidationResult {\n const allowedKeys = ['type', 'text', 'network', 'from'];\n if (hasExtraProperties(data, allowedKeys)) {\n return 'Text payload contains extra properties';\n }\n\n if (!isValidString(data.text)) {\n return \"'text' is required\";\n }\n\n if (data.network !== undefined) {\n if (!isValidNetwork(data.network)) {\n return \"Invalid 'network' format\";\n }\n }\n\n if (data.from !== undefined && !isValidAddress(data.from)) {\n return \"Invalid 'from'\";\n }\n\n return null;\n}\n\nfunction validateSignDataPayloadBinary(data: Record<string, unknown>): ValidationResult {\n const allowedKeys = ['type', 'bytes', 'network', 'from'];\n if (hasExtraProperties(data, allowedKeys)) {\n return 'Binary payload contains extra properties';\n }\n\n if (!isValidString(data.bytes)) {\n return \"'bytes' is required\";\n }\n\n if (data.network !== undefined) {\n if (!isValidNetwork(data.network)) {\n return \"Invalid 'network' format\";\n }\n }\n\n if (data.from !== undefined && !isValidAddress(data.from)) {\n return \"Invalid 'from'\";\n }\n\n return null;\n}\n\nfunction validateSignDataPayloadCell(data: Record<string, unknown>): ValidationResult {\n const allowedKeys = ['type', 'schema', 'cell', 'network', 'from'];\n if (hasExtraProperties(data, allowedKeys)) {\n return 'Cell payload contains extra properties';\n }\n\n if (!isValidString(data.schema)) {\n return \"'schema' is required\";\n }\n\n if (!isValidString(data.cell)) {\n return \"'cell' is required\";\n }\n\n if (!isValidBoc(data.cell)) {\n return \"Invalid 'cell' format (must be valid base64)\";\n }\n\n if (data.network !== undefined) {\n if (!isValidNetwork(data.network)) {\n return \"Invalid 'network' format\";\n }\n }\n\n if (data.from !== undefined && !isValidAddress(data.from)) {\n return \"Invalid 'from'\";\n }\n\n return null;\n}\n\n/**\n * Validates ton_proof item received from wallet in connect event.\n */\n// eslint-disable-next-line complexity\nexport function validateTonProofItemReply(data: unknown): ValidationResult {\n if (!isValidObject(data)) {\n return 'ton_proof item must be an object';\n }\n\n const allowedKeys = ['error', 'proof', 'name'];\n if (hasExtraProperties(data, allowedKeys)) {\n return 'ton_proof item contains extra properties';\n }\n\n const hasProof = Object.prototype.hasOwnProperty.call(data, 'proof');\n const hasError = Object.prototype.hasOwnProperty.call(data, 'error');\n\n if (!hasProof && !hasError) {\n return \"'ton_proof' item must contain either 'proof' or 'error'\";\n }\n\n if (hasProof && hasError) {\n return \"'ton_proof' item must contain either 'proof' or 'error', not both\";\n }\n\n if (hasProof) {\n const proof = (data as Record<string, unknown>).proof as\n | Record<string, unknown>\n | undefined;\n if (!isValidObject(proof)) {\n return \"Invalid 'proof' object\";\n }\n\n if (!isValidNumber(proof.timestamp)) {\n return \"Invalid 'proof.timestamp'\";\n }\n\n const domain = proof.domain as Record<string, unknown> | undefined;\n if (!isValidObject(domain)) {\n return \"Invalid 'proof.domain'\";\n }\n if (!isValidNumber(domain.lengthBytes)) {\n return \"Invalid 'proof.domain.lengthBytes'\";\n }\n if (!isValidString(domain.value)) {\n return \"Invalid 'proof.domain.value'\";\n }\n // Try to verify that provided byte length matches actual byte length of value\n try {\n const encoderAvailable = typeof TextEncoder !== 'undefined';\n const actualLength = encoderAvailable\n ? new TextEncoder().encode(domain.value).length\n : (domain.value as string).length;\n if (actualLength !== (domain.lengthBytes as number)) {\n return \"'proof.domain.lengthBytes' does not match 'proof.domain.value'\";\n }\n } catch {\n // Ignore environment issues; best-effort validation\n }\n\n if (!isValidString(proof.payload)) {\n return \"Invalid 'proof.payload'\";\n }\n\n if (!isValidString(proof.signature) || !BASE64_REGEX.test(proof.signature)) {\n return \"Invalid 'proof.signature' format\";\n }\n }\n\n if (hasError) {\n const error = (data as Record<string, unknown>).error as\n | Record<string, unknown>\n | undefined;\n if (!isValidObject(error)) {\n return \"Invalid 'error' object\";\n }\n\n const allowedErrorKeys = ['code', 'message'];\n if (hasExtraProperties(error, allowedErrorKeys)) {\n return 'ton_proof error contains extra properties';\n }\n\n if (!isValidNumber(error.code)) {\n return \"Invalid 'error.code'\";\n }\n if (!isValidString(error.message)) {\n return \"Invalid 'error.message'\";\n }\n }\n\n return null;\n}\n","import { FetchWalletsError } from 'src/errors/wallets-manager/fetch-wallets.error';\nimport {\n WalletInfoRemote,\n WalletInfoInjectable,\n WalletInfo,\n WalletInfoDTO,\n isWalletInfoCurrentlyEmbedded,\n WalletInfoCurrentlyEmbedded,\n WalletInfoCurrentlyInjected,\n isWalletInfoRemote,\n WalletInfoBase\n} from 'src/models/wallet/wallet-info';\nimport { InjectedProvider } from 'src/provider/injected/injected-provider';\nimport { logError } from 'src/utils/log';\nimport { FALLBACK_WALLETS_LIST } from 'src/resources/fallback-wallets-list';\nimport { isQaModeEnabled } from './utils/qa-mode';\nimport { TonConnectError } from 'src/errors';\n\nexport class WalletsListManager {\n private walletsListDTOCache: Promise<WalletInfoDTO[]> | null = null;\n\n private walletsListDTOCacheCreationTimestamp: number | null = null;\n\n private readonly cacheTTLMs: number | undefined;\n\n private readonly walletsListSource: string;\n\n private readonly onDownloadDurationMeasured?: (duration: number | undefined) => void;\n\n constructor(options?: {\n walletsListSource?: string;\n cacheTTLMs?: number;\n onDownloadDurationMeasured?: (duration: number | undefined) => void;\n }) {\n if (isQaModeEnabled()) {\n this.walletsListSource =\n 'https://raw.githubusercontent.com/ton-connect/wallets-list-staging/refs/heads/main/wallets-v2.json';\n } else {\n this.walletsListSource =\n options?.walletsListSource ?? 'https://config.ton.org/wallets-v2.json';\n }\n\n this.cacheTTLMs = options?.cacheTTLMs;\n this.onDownloadDurationMeasured = options?.onDownloadDurationMeasured;\n }\n\n public async getWallets(): Promise<WalletInfo[]> {\n const [walletsListDTO, currentlyInjectedWallets] = await Promise.all([\n this.fetchWalletsListDTO(),\n this.getCurrentlyInjectedWallets()\n ]);\n\n return this.mergeWalletsLists(\n this.walletConfigDTOListToWalletConfigList(walletsListDTO),\n currentlyInjectedWallets\n );\n }\n\n public async getEmbeddedWallet(): Promise<WalletInfoCurrentlyEmbedded | null> {\n const walletsList = await this.getWallets();\n const embeddedWallets = walletsList.filter(isWalletInfoCurrentlyEmbedded);\n return embeddedWallets.length === 1 ? embeddedWallets[0]! : null;\n }\n\n private async fetchWalletsListDTO(): Promise<WalletInfoDTO[]> {\n if (\n this.cacheTTLMs &&\n this.walletsListDTOCacheCreationTimestamp &&\n Date.now() > this.walletsListDTOCacheCreationTimestamp + this.cacheTTLMs\n ) {\n this.walletsListDTOCache = null;\n }\n\n if (!this.walletsListDTOCache) {\n this.walletsListDTOCache = this.fetchWalletsListFromSource();\n this.walletsListDTOCache\n .then(() => {\n this.walletsListDTOCacheCreationTimestamp = Date.now();\n })\n .catch(() => {\n this.walletsListDTOCache = null;\n this.walletsListDTOCacheCreationTimestamp = null;\n });\n }\n\n return this.walletsListDTOCache;\n }\n\n public async getRemoteWallet(appName: string): Promise<WalletInfoRemote> {\n const walletsList = await this.getWallets();\n\n const wallet = walletsList.find(wallet => wallet.appName === appName);\n\n if (!wallet) {\n throw new TonConnectError(`Wallet info not found for appName: \"${appName}\"`);\n }\n\n if (!isWalletInfoRemote(wallet)) {\n throw new TonConnectError(`Wallet \"${appName}\" is not remote`);\n }\n\n return wallet;\n }\n\n private async fetchWalletsListFromSource(): Promise<WalletInfoDTO[]> {\n let walletsList: WalletInfoDTO[] = [];\n const startTime = performance.now();\n\n try {\n const walletsResponse = await fetch(this.walletsListSource);\n walletsList = await walletsResponse.json();\n\n if (!Array.isArray(walletsList)) {\n throw new FetchWalletsError(\n 'Wrong wallets list format, wallets list must be an array.'\n );\n }\n\n const wrongFormatWallets = walletsList.filter(\n wallet => !this.isCorrectWalletConfigDTO(wallet)\n );\n if (wrongFormatWallets.length) {\n logError(\n `Wallet(s) ${wrongFormatWallets\n .map(wallet => (wallet as WalletInfoDTO)?.name || 'unknown')\n .join(\n ', '\n )} config format is wrong. They were removed from the wallets list.`\n );\n\n walletsList = walletsList.filter(wallet => this.isCorrectWalletConfigDTO(wallet));\n }\n\n const endTime = performance.now();\n const duration = Math.round(endTime - startTime);\n this.onDownloadDurationMeasured?.(duration);\n } catch (e) {\n logError(e);\n walletsList = FALLBACK_WALLETS_LIST;\n\n this.onDownloadDurationMeasured?.(undefined);\n }\n\n return walletsList;\n }\n\n private getCurrentlyInjectedWallets(): WalletInfoCurrentlyInjected[] {\n if (!isQaModeEnabled()) {\n return [];\n }\n\n try {\n return InjectedProvider.getCurrentlyInjectedWallets();\n } catch (e) {\n logError(e);\n return [];\n }\n }\n\n private walletConfigDTOListToWalletConfigList(walletConfigDTO: WalletInfoDTO[]): WalletInfo[] {\n return walletConfigDTO.map(walletConfigDTO => {\n const walletConfig: WalletInfoBase = {\n name: walletConfigDTO.name,\n appName: walletConfigDTO.app_name,\n imageUrl: walletConfigDTO.image,\n aboutUrl: walletConfigDTO.about_url,\n tondns: walletConfigDTO.tondns,\n platforms: walletConfigDTO.platforms,\n features: walletConfigDTO.features\n };\n\n walletConfigDTO.bridge.forEach(bridge => {\n if (bridge.type === 'sse') {\n (walletConfig as WalletInfoRemote).bridgeUrl = bridge.url;\n (walletConfig as WalletInfoRemote).universalLink =\n walletConfigDTO.universal_url!;\n (walletConfig as WalletInfoRemote).deepLink = walletConfigDTO.deepLink;\n }\n if (bridge.type === 'js') {\n const jsBridgeKey = bridge.key;\n (walletConfig as WalletInfoInjectable).jsBridgeKey = jsBridgeKey;\n (walletConfig as WalletInfoInjectable).injected =\n InjectedProvider.isWalletInjected(jsBridgeKey);\n (walletConfig as WalletInfoInjectable).embedded =\n InjectedProvider.isInsideWalletBrowser(jsBridgeKey);\n }\n });\n\n return walletConfig as WalletInfo;\n });\n }\n\n private mergeWalletsLists(list1: WalletInfo[], list2: WalletInfo[]): WalletInfo[] {\n const names = new Set(list1.concat(list2).map(item => item.name));\n\n return [...names.values()].map(name => {\n const list1Item = list1.find(item => item.name === name);\n const list2Item = list2.find(item => item.name === name);\n\n return {\n ...(list1Item && { ...list1Item }),\n ...(list2Item && { ...list2Item })\n } as WalletInfo;\n });\n }\n\n // eslint-disable-next-line complexity\n private isCorrectWalletConfigDTO(value: unknown): value is WalletInfoDTO {\n if (!value || !(typeof value === 'object')) {\n return false;\n }\n\n const containsName = 'name' in value;\n const containsAppName = 'app_name' in value;\n const containsImage = 'image' in value;\n const containsAbout = 'about_url' in value;\n const containsPlatforms = 'platforms' in value;\n\n if (\n !containsName ||\n !containsImage ||\n !containsAbout ||\n !containsPlatforms ||\n !containsAppName\n ) {\n return false;\n }\n\n if (\n !(value as { platforms: unknown }).platforms ||\n !Array.isArray((value as { platforms: unknown }).platforms) ||\n !(value as { platforms: string[] }).platforms.length\n ) {\n return false;\n }\n if (\n !('bridge' in value) ||\n !Array.isArray((value as { bridge: unknown }).bridge) ||\n !(value as { bridge: unknown[] }).bridge.length\n ) {\n return false;\n }\n\n const bridge = (value as { bridge: unknown[] }).bridge;\n\n if (bridge.some(item => !item || typeof item !== 'object' || !('type' in item))) {\n return false;\n }\n\n const sseBridge = bridge.find(item => (item as { type: string }).type === 'sse');\n\n if (sseBridge) {\n if (\n !(typeof sseBridge === 'object' && 'url' in sseBridge) ||\n !(sseBridge as { url: string }).url ||\n !(value as unknown as { universal_url: string }).universal_url\n ) {\n return false;\n }\n }\n\n const jsBridge = bridge.find(item => (item as { type: string }).type === 'js');\n\n if (jsBridge) {\n if (\n typeof jsBridge !== 'object' ||\n !('key' in jsBridge) ||\n !(jsBridge as { key: string }).key\n ) {\n return false;\n }\n }\n\n return true;\n }\n}\n","export type { Account } from './account';\nexport type { Wallet } from './wallet';\nexport type {\n WalletConnectionSource,\n WalletConnectionSourceHTTP,\n WalletConnectionSourceJS,\n WalletConnectionSourceWalletConnect\n} from './wallet-connection-source';\nexport {\n WalletInfo,\n WalletInfoBase,\n WalletInfoInjectable,\n WalletInfoCurrentlyInjected,\n WalletInfoCurrentlyEmbedded,\n WalletInfoRemote,\n WalletInfoInjected,\n isWalletInfoCurrentlyInjected,\n isWalletInfoCurrentlyEmbedded,\n isWalletInfoInjectable,\n isWalletInfoRemote,\n isWalletInfoInjected\n} from './wallet-info';\nexport {\n RequiredFeatures,\n RequiredSendTransactionFeature,\n RequiredSignDataFeature\n} from './require-feature';\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(151);\n"],"names":["WrongAddressError","TonConnectError","info","constructor","args","super","Object","setPrototypeOf","this","prototype","regex","ManifestContentErrorError","TonConnect","WalletsListManager","createConnectionStartedEvent","createConnectionErrorEvent","createConnectionCompletedEvent","createConnectionRestoringStartedEvent","createConnectionRestoringErrorEvent","createConnectionRestoringCompletedEvent","createDisconnectionEvent","createTransactionSentForSignatureEvent","createTransactionSigningFailedEvent","createTransactionSignedEvent","createDataSentForSignatureEvent","createDataSigningFailedEvent","createDataSignedEvent","createRequestVersionEvent","createResponseVersionEvent","createVersionInfo","createWalletModalOpenedEvent","createSelectedWalletEvent","BrowserEventDispatcher","CHAIN","SessionCrypto","CONNECT_ITEM_ERROR_CODES","CONNECT_EVENT_ERROR_CODES","SEND_TRANSACTION_ERROR_CODES","SIGN_DATA_ERROR_CODES","toUserFriendlyAddress","checkRequiredWalletFeatures","isTelegramUrl","encodeTelegramUrlParameters","decodeTelegramUrlParameters","isConnectUrl","enableQaMode","isQaModeEnabled","initializeWalletConnect","isWalletConnectInitialized","UUIDv7","signDataErrors","UNKNOWN_ERROR","UnknownError","USER_REJECTS_ERROR","UserRejectsError","BAD_REQUEST_ERROR","BadRequestError","UNKNOWN_APP_ERROR","UnknownAppError","SignDataParser","RpcParser","convertToRpcRequest","payload","method","params","JSON","stringify","parseAndThrowError","response","ErrorConstructor","error","code","message","convertFromRpcResponse","rpcResponse","result","signDataParser","getClientEnvironment","getBrowser","getLocale","getPlatform","getTelegramUser","LocalstorageNotFoundError","WalletAlreadyConnectedError","signal","abortController","AbortController","aborted","abort","addEventListener","once","type","version","traceId","custom_data","trace_id","wallet","sessionInfo","is_success","createConnectionInfo","error_message","errorCode","error_code","client_id","clientId","wallet_id","walletId","errorMessage","transaction","createTransactionInfo","signedTransaction","signed_transaction","boc","valid_until","String","validUntil","from","account","address","messages","map","amount","state_init","stateInit","createTransactionFullInfo","data","signedData","signed_data","scope","visibleWallets","visible_wallets","lastSelectedWallet","walletsMenu","redirectLink","redirectLinkType","walletRedirectMethod","wallets_menu","wallet_redirect_method","wallet_redirect_link","undefined","wallet_type","appName","ton_connect_sdk_lib","ton_connect_ui_lib","authType","connectItems","tonProof","wallet_address","wallet_state_init","walletStateInit","device","wallet_version","appVersion","auth_type","chain_id","chain","provider","WalletMissingRequiredFeaturesError","options","WalletWrongNetworkError","name","AnalyticsManager","events","timeoutId","isProcessing","backoff","shouldSend","batchTimeoutMs","currentBatchTimeoutMs","maxBatchSize","analyticsUrl","mode","baseEvent","subsystem","tonConnectSdkVersion","client_environment","environment","getStaticConnectionMetrics","addWindowFocusAndBlurSubscriptions","scoped","sharedData","Proxy","get","target","prop","propName","toString","startsWith","eventNamePascal","replace","eventNameKebab","pascalToKebab","event","executedData","fromEntries","entries","key","value","emit","event_name","dynamicMetrics","getDynamicConnectionMetrics","enhancedEvent","event_id","client_timestamp","Math","floor","Date","now","filteredEvent","filterFullModeFields","logDebug","push","length","flush","startTimeout","setTimeout","clearTimeout","eventsToSend","extractEventsToSend","processEventsBatch","restoreEvents","logError","scheduleNextFlushIfNeeded","slice","sendEvents","handleResponse","err","handleUnknownError","status","statusText","isTooManyRequests","handleTooManyRequests","isClientError","handleClientError","isServerError","unshift","fetch","headers","body","HTTP_STATUS","CLIENT_ERROR_START","SERVER_ERROR_START","TOO_MANY_REQUESTS","MAX_BACKOFF_ATTEMPTS","BACKOFF_MULTIPLIER","document","getDocument","hidden","e","getMode","getPendingEventsCount","filtered","field","FULL_MODE_FIELDS","eventName","includes","setWalletListDownloadDuration","duration","wallet_list_download_duration","console","debug","warn","Error","prefix","buf","offset","bytes","v7Bytes","random","rng","msecs","seq","rnds","updateV7State","_state","unsafeStringify","state","RangeError","Uint8Array","paddedLength","padEnd","DappMetadataError","removeUrlLastSlash","url","path","link","URL","protocol","hostname","parameters","replaceAll","PROTOCOL_VERSION","ManifestNotFoundError","getWallets","walletsList","connected","_wallet","statusChangeSubscriptions","forEach","callback","statusChangeErrorSubscriptions","manifestUrl","getWebPageManifest","dappSettings","storage","DefaultStorage","walletsRequiredFeatures","DefaultEnvironment","walletsListSource","cacheTTLMs","walletsListCacheTTLMs","onDownloadDurationMeasured","analytics","eventDispatcher","tracker","TonConnectTracker","initAnalytics","bridgeConnectionStorage","BridgeConnectionStorage","disableAutoPauseConnection","onStatusChange","errorsHandler","filter","item","connect","requestOrOptions","additionalOptions","request","openingDeadlineMS","validationError","validateConnectAdditionalRequest","createAbortController","closeConnection","createProvider","trackConnectionStarted","createConnectRequest","restoreConnection","trackConnectionRestoringStarted","trackConnectionRestoringError","bridgeConnectionType","embeddedWallet","Promise","all","storedConnectionType","getEmbeddedWallet","BridgeProvider","fromStorage","InjectedProvider","WalletConnectProvider","removeConnection","listen","walletEventsListener","bind","onAbortRestore","restoreConnectionTask","callForSuccess","_options","removeEventListener","getSessionInfo","trackConnectionRestoringCompleted","attempts","Number","MAX_SAFE_INTEGER","delayMs","restoreConnectionTimeout","resolve","race","sendTransaction","optionsOrOnRequestSent","onRequestSent","validateSendTransactionRequest","checkConnection","requiredMessagesNumber","requireExtraCurrencies","some","m","extraCurrency","keys","checkSendTransactionSupport","features","trackTransactionSentForSignature","tx","network","cause","expectedChainId","actualChainId","sendRequest","sendTransactionParser","msg","normalizeBase64","extra_currency","isError","trackTransactionSigningFailed","trackTransactionSigned","signData","validateSignDataPayload","checkSignDataSupport","requiredTypes","trackDataSentForSignature","cell","trackDataSigningFailed","trackDataSigned","setConnectionNetwork","desiredChainId","disconnect","WalletNotConnectedError","prevAbortController","onWalletDisconnected","getSessionId","connection","getConnection","sessionCrypto","sessionId","session","walletPublicKey","pauseConnection","pause","unPauseConnection","unPause","catch","analyticsSettings","telegramUser","sharedAnalyticsData","browser","platform","manifest_json_url","origin_url","getOriginWithPath","locale","tg_id","id","tma_is_premium","isPremium","bindEventsTo","Array","isArray","isWalletConnectionSourceJS","jsBridgeKey","isWalletConnectionSourceWalletConnect","onWalletConnected","trackConnectionError","walletError","connectErrorsParser","parseError","onWalletConnectError","connectEvent","tonAccountItem","items","find","tonProofItem","publicKey","validateTonProofItemReply","proof","timestamp","domain","lengthBytes","signature","trackConnectionCompleted","trackDisconnection","isWalletInjected","walletJSKey","isInsideWalletBrowser","analyticsManager","getInjectedConnection","injectedWalletKey","isWindowContainsWallet","window","tonconnect","isWalletBrowser","getCurrentlyInjectedWallets","getWindowEntries","_key","isJSBridgeWithMetadata","walletInfo","app_name","aboutUrl","about_url","imageUrl","image","tondns","injected","embedded","platforms","connectionStorage","unsubscribeCallback","listenSubscriptions","listeners","WalletNotInjectedError","injectedWallet","bridge_key","wallet_app_name","deviceInfo","wallet_app_version","_connect","emitJsBridgeCall","js_bridge_method","emitJsBridgeResponse","makeSubscriptions","listener","emitJsBridgeError","closeAllListeners","then","eventsCallback","getNextRpcRequestId","increaseNextRpcRequestId","send","protocolVersion","updateSession","connectEventError","storeConnection","nextRpcRequestId","getWindow","hasProperties","propertyKeys","every","propertyKey","supportsDeprecatedSendTransactionFeature","sendTransactionFeature","findFeature","requiredFeature","minMessages","extraCurrencyRequired","WalletNotSupportFeatureError","featureName","extraCurrencySupported","maxMessages","logWarning","signDataFeature","feature","types","unsupportedTypes","requiredType","join","correctMessagesNumber","correctExtraCurrency","checkSendTransaction","checkSignData","requiredFeatureName","f","ParseHexError","hasProperty","fn","timeout","reject","deferOptions","walletsListManager","storeKey","setItem","isPendingConnectionHttp","rawSession","sessionKeyPair","stringifyKeypair","bridgeUrl","rawConnection","lastWalletEventId","connectionSource","createdAt","removeItem","stored","getItem","parse","isPendingConnectionHttpRaw","actualizeBridgeConnection","isExpiredPendingConnectionHttpRaw","getHttpConnection","getHttpPendingConnection","getWalletConnectConnection","storeLastWalletEventId","getLastWalletEventId","lastId","getRemoteWallet","actualizedConnection","DEFAULT_REQUEST_ID","connector","projectId","metadata","getWalletConnectOptions","config","networks","namespace","chains","chainNamespace","caipNetworkId","nativeCurrency","symbol","decimals","rpcUrls","default","http","methods","initialize","getUniversalConnector","init","clearAbortController","authentication","nonce","uri","ttl","statement","onConnect","includeTonProof","sendTransactionPayload","promise","signDataPayload","stack","handleWalletConnectError","DISCONNECT_ERROR_CODES","toLowerCase","buildTonProof","auth","iat","p","getTime","s","tonNamespace","namespaces","accounts","disconnectWithError","split","sessionProperties","ton_getPublicKey","ton_getStateInit","isValidUserFriendlyAddress","toRawAddress","parseUserFriendlyAddress","maxProtocolVersion","buildFeatureList","lastError","i","delay","UniversalConnectorCls","walletConnectOptions","uuid","test","tonConnectUiVersion","eventPrefix","setRequestVersionHandler","requestTonConnectUiVersion","dispatchEvent","detail","dispatchUserActionEvent","eventDetails","buildVersionInfo","buildTonConnectEvent","versions","network_id","emitConnectionStarted","main_screen","emitConnectionSelectedWallet","emitConnectionCompleted","emitConnectionError","emitDisconnection","emitTransactionSent","emitTransactionSigned","signed_boc","emitTransactionSigningFailed","emitSignDataRequestInitiated","emitSignDataRequestCompleted","signDataSchema","signDataValue","text","schema","emitSignDataRequestFailed","sign_data_type","sign_data_value","sign_data_schema","origin","location","pathname","localStorage","isLocalStorageAvailable","process","node","InMemoryStorage","getInstance","instance","clear","index","root","module","exports","nacl","util","validateBase64","TypeError","decodeUTF8","d","unescape","encodeURIComponent","b","charCodeAt","encodeUTF8","arr","fromCharCode","decodeURIComponent","escape","atob","Buffer","encodeBase64","decodeBase64","call","len","btoa","storeLastEventId","lastEventId","removeLastEventId","getLastEventId","tryGetLocalStorage","qaModeEnabled","showQaModeBanner","bannerObserver","MutationObserver","mutations","mutation","removedNodes","nodeType","Node","ELEMENT_NODE","element","addQaModeStyles","observe","childList","subtree","head","getElementById","banner","createElement","style","cssText","innerHTML","textContent","appendChild","classList","add","getRandomValues","crypto","rnds8","walletConnectionSource","standardUniversalLink","pendingRequests","Map","gateway","pendingGateways","defaultOpeningDeadlineMS","defaultRetryTimeoutMS","optionalOpenGateways","closeGateways","openGateways","universalLink","generateUniversalLink","storedConnection","close","BridgeGateway","gatewayListener","gatewayErrorsListener","registerSession","encodedRequest","encrypt","hexToByteArray","emitBridgeClientMessageSent","bridge_url","message_id","request_type","set","called","removeBridgeAndSession","bridge","promises","pendingGatewaysListener","bridgeIncomingMessage","except","setErrorsListener","setListener","walletMessage","decrypt","Base64","decode","toUint8Array","emitBridgeClientMessageDecodeError","requestType","emitBridgeClientMessageReceived","delete","tonAddrItem","connectEventToSave","generateTGUniversalLink","generateRegularUniversalLink","searchParams","append","linkParams","startapp","updatedUniversalLink","convertToDirectLink","has","source","gatewaysToWaitFor","max","waitForSome","CustomEvent","connectEventErrorsCodes","MANIFEST_NOT_FOUND_ERROR","MANIFEST_CONTENT_ERROR","metrics","navEntries","performance","getEntriesByType","nav","responseStart","requestStart","conn_ttfb","round","navigatorWithConnection","navigator","mozConnection","webkitConnection","rtt","conn_rtt","effectiveType","conn_network_type","nacl$1","encode","urlSafe","uint8Array","encoded","encodeUint8Array","decodedUint8Array","decodeToUint8Array","toObject","concatUint8Arrays","buffer1","buffer2","mergedArray","splitToUint8Arrays","array","toHexString","byteArray","hexString","byte","parseInt","keyPair","nonceLength","createKeypairFromString","createKeypair","box","secretKey","createNonce","randomBytes","receiverPublicKey","encodedMessage","TextEncoder","senderPublicKey","internalMessage","decrypted","open","TextDecoder","isNode","FALLBACK_WALLETS_LIST","universal_url","deepLink","isWalletInfoCurrentlyInjected","isWalletInfoInjectable","FetchWalletsError","isReady","eventSource","current","readyState","EventSource","OPEN","isClosed","isConnecting","CONNECTING","errorsListener","ssePath","postPath","heartbeatMessage","defaultTtl","defaultReconnectDelay","defaultResendDelay","createResource","eventSourceConfig","bridgeGatewayStorage","errorHandler","messageHandler","messagesHandler","addPathToUrl","onerror","reason","newInstance","onopen","onmessage","createEventSource","resource","HttpBridgeGatewayStorage","emitBridgeClientConnectStarted","connectionStarted","create","bridgeConnectDuration","emitBridgeClientConnectEstablished","bridge_connect_duration","emitBridgeClientConnectError","receiver","topic","ttlOrOptions","post","ok","dispose","recreate","bridgeIncomingMessageRaw","_","hexAddress","testOnly","wc","hex","parseHexAddress","tag","noBounceableTag","testOnlyTag","addr","Int8Array","addressWithChecksum","crc16","bounceableTag","base64","decoded","checksum","calculatedChecksum","isTestOnly","isBounceable","padStart","parts","hexToBytes","reg","mask","toByteMap","ord","length2","doubled","hexSubstring","substring","hasOwnProperty","count","results","settledCount","gf","r","Float64Array","randombytes","_0","_9","gf0","gf1","_121665","D","D2","X","Y","I","ts64","x","h","l","vn","xi","y","yi","n","crypto_verify_16","crypto_verify_32","crypto_core_salsa20","out","inp","k","c","o","u","j0","j1","j2","j3","j4","j5","j6","j7","j8","j9","j10","j11","j12","j13","j14","j15","x0","x1","x2","x3","x4","x5","x6","x7","x8","x9","x10","x11","x12","x13","x14","x15","core_salsa20","crypto_core_hsalsa20","core_hsalsa20","sigma","crypto_stream_salsa20_xor","cpos","mpos","z","crypto_stream_salsa20","crypto_stream","sn","crypto_stream_xor","poly1305","t0","t1","t2","t3","t4","t5","t6","t7","buffer","Uint16Array","pad","leftover","fin","crypto_onetimeauth","outpos","update","finish","crypto_onetimeauth_verify","hpos","crypto_secretbox","crypto_secretbox_open","set25519","a","car25519","v","sel25519","q","t","pack25519","j","neq25519","par25519","unpack25519","A","Z","M","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","b11","b12","b13","b14","b15","S","inv25519","pow2523","crypto_scalarmult","x32","subarray","x16","crypto_scalarmult_base","crypto_box_keypair","crypto_box_beforenm","blocks","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","hibit","h0","h1","h2","h3","h4","h5","h6","h7","h8","h9","r0","r1","r2","r3","r4","r5","r6","r7","r8","r9","mac","macpos","g","want","crypto_box_afternm","crypto_box_open_afternm","K","crypto_hashblocks_hl","hh","hl","bh0","bh1","bh2","bh3","bh4","bh5","bh6","bh7","bl0","bl1","bl2","bl3","bl4","bl5","bl6","bl7","th","tl","wh","Int32Array","wl","ah0","ah1","ah2","ah3","ah4","ah5","ah6","ah7","al0","al1","al2","al3","al4","al5","al6","al7","pos","crypto_hash","cswap","pack","ty","zi","scalarmult","scalarbase","crypto_sign_keypair","pk","sk","seeded","L","modL","carry","reduce","crypto_sign","sm","smlen","crypto_sign_open","chk","num","den","den2","den4","den6","unpackneg","crypto_sign_BYTES","crypto_sign_PUBLICKEYBYTES","crypto_sign_SECRETKEYBYTES","checkLengths","checkArrayTypes","arguments","cleanup","lowlevel","crypto_box","crypto_box_open","crypto_secretbox_KEYBYTES","crypto_secretbox_NONCEBYTES","crypto_secretbox_ZEROBYTES","crypto_secretbox_BOXZEROBYTES","crypto_scalarmult_BYTES","crypto_scalarmult_SCALARBYTES","crypto_box_PUBLICKEYBYTES","crypto_box_SECRETKEYBYTES","crypto_box_BEFORENMBYTES","crypto_box_NONCEBYTES","crypto_box_ZEROBYTES","crypto_box_BOXZEROBYTES","crypto_sign_SEEDBYTES","crypto_hash_BYTES","secretbox","keyLength","overheadLength","scalarMult","base","scalarLength","groupElementLength","before","checkBoxLengths","after","fromSecretKey","publicKeyLength","secretKeyLength","sharedKeyLength","sign","signedMsg","tmp","mlen","detached","sig","verify","fromSeed","seed","seedLength","signatureLength","hash","hashLength","setPRNG","self","msCrypto","min","CONNECTION_HTTP_EXPIRATION_TIME","validate","byteToHex","createFn","disposeFn","currentResource","currentArgs","currentPromise","currentSignal","allSettled","sendTransactionErrors","SendTransactionParser","isValidObject","hasExtraProperties","isValidNumber","fiveMinutesFromNow","isValidNetwork","isValidAddress","messageError","validateTransactionMessage","getDomain","domainBytes","MAX_DOMAIN_BYTES","payloadBytes","MAX_PAYLOAD_BYTES","MAX_TOTAL_BYTES","isValidString","validateSignDataPayloadText","validateSignDataPayloadBinary","isValidBoc","validateSignDataPayloadCell","hasProof","hasError","BASE64_REGEX","BASE64URL_REGEX","BOC_PREFIX","INTEGER_REGEX","POSITIVE_INTEGER_REGEX","isNaN","isValidRawAddress","obj","allowedKeys","walletsListDTOCache","walletsListDTOCacheCreationTimestamp","walletsListDTO","currentlyInjectedWallets","fetchWalletsListDTO","mergeWalletsLists","walletConfigDTOListToWalletConfigList","embeddedWallets","isWalletInfoCurrentlyEmbedded","fetchWalletsListFromSource","isWalletInfoRemote","startTime","walletsResponse","json","wrongFormatWallets","isCorrectWalletConfigDTO","endTime","walletConfigDTO","walletConfig","list1","list2","Set","concat","values","list1Item","list2Item","sseBridge","jsBridge","isWalletInfoInjected","__webpack_module_cache__","__webpack_exports__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"tonconnect-sdk.min.js","mappings":"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","sources":["webpack://TonConnectSDK/./src/errors/address/wrong-address.error.ts","webpack://TonConnectSDK/./src/utils/uuid/regex.ts","webpack://TonConnectSDK/./src/errors/protocol/events/connect/manifest-content-error.error.ts","webpack://TonConnectSDK/./src/index.ts","webpack://TonConnectSDK/./src/parsers/sign-data-parser.ts","webpack://TonConnectSDK/./src/environment/default-environment.ts","webpack://TonConnectSDK/./src/errors/storage/localstorage-not-found.error.ts","webpack://TonConnectSDK/./src/errors/wallet/wallet-already-connected.error.ts","webpack://TonConnectSDK/./src/utils/create-abort-controller.ts","webpack://TonConnectSDK/./src/tracker/types.ts","webpack://TonConnectSDK/./src/errors/wallet/wallet-missing-required-features.error.ts","webpack://TonConnectSDK/./src/errors/wallet/wallet-wrong-network.error.ts","webpack://TonConnectSDK/./src/analytics/analytics-manager.ts","webpack://TonConnectSDK/./src/utils/log.ts","webpack://TonConnectSDK/./src/errors/ton-connect.error.ts","webpack://TonConnectSDK/./src/errors/protocol/responses/unknown-app.error.ts","webpack://TonConnectSDK/./src/utils/uuid/v7.ts","webpack://TonConnectSDK/./src/utils/base64.ts","webpack://TonConnectSDK/./src/errors/dapp/dapp-metadata.error.ts","webpack://TonConnectSDK/./src/utils/url.ts","webpack://TonConnectSDK/./src/resources/protocol.ts","webpack://TonConnectSDK/./src/errors/protocol/events/connect/manifest-not-found.error.ts","webpack://TonConnectSDK/./src/ton-connect.ts","webpack://TonConnectSDK/./src/provider/injected/injected-provider.ts","webpack://TonConnectSDK/./src/errors/index.ts","webpack://TonConnectSDK/./src/models/index.ts","webpack://TonConnectSDK/./src/utils/types.ts","webpack://TonConnectSDK/./src/utils/feature-support.ts","webpack://TonConnectSDK/./src/errors/protocol/responses/index.ts","webpack://TonConnectSDK/./src/errors/binary/parse-hex.error.ts","webpack://TonConnectSDK/./src/provider/injected/models/injected-wallet-api.ts","webpack://TonConnectSDK/./src/constants/version.ts","webpack://TonConnectSDK/./src/utils/timeout.ts","webpack://TonConnectSDK/./src/errors/wallet/wallet-not-injected.error.ts","webpack://TonConnectSDK/./src/storage/bridge-connection-storage.ts","webpack://TonConnectSDK/./src/provider/wallet-connect/wallet-connect-provider.ts","webpack://TonConnectSDK/./src/utils/call-for-success.ts","webpack://TonConnectSDK/./src/errors/protocol/events/connect/user-rejects.error.ts","webpack://TonConnectSDK/./src/errors/binary/index.ts","webpack://TonConnectSDK/./src/errors/address/index.ts","webpack://TonConnectSDK/./src/parsers/rpc-parser.ts","webpack://TonConnectSDK/./src/provider/wallet-connect/initialize.ts","webpack://TonConnectSDK/./src/utils/uuid/validate.ts","webpack://TonConnectSDK/./src/models/wallet/wallet-connection-source.ts","webpack://TonConnectSDK/./src/tracker/ton-connect-tracker.ts","webpack://TonConnectSDK/./src/errors/unknown.error.ts","webpack://TonConnectSDK/./src/analytics/sdk-actions-adapter.ts","webpack://TonConnectSDK/./src/utils/web-api.ts","webpack://TonConnectSDK/./src/errors/wallet/wallet-not-support-feature.error.ts","webpack://TonConnectSDK/./src/errors/protocol/events/index.ts","webpack://TonConnectSDK/./src/storage/models/in-memory-storage.ts","webpack://TonConnectSDK/../../node_modules/.pnpm/tweetnacl-util@0.15.1/node_modules/tweetnacl-util/nacl-util.js","webpack://TonConnectSDK/./src/errors/wallet/index.ts","webpack://TonConnectSDK/./src/storage/http-bridge-gateway-storage.ts","webpack://TonConnectSDK/./src/storage/default-storage.ts","webpack://TonConnectSDK/./src/utils/qa-mode.ts","webpack://TonConnectSDK/./src/models/methods/index.ts","webpack://TonConnectSDK/./src/utils/uuid/rng-browser.ts","webpack://TonConnectSDK/./src/utils/uuid/index.ts","webpack://TonConnectSDK/./src/provider/bridge/bridge-provider.ts","webpack://TonConnectSDK/./src/utils/delay.ts","webpack://TonConnectSDK/./src/tracker/browser-event-dispatcher.ts","webpack://TonConnectSDK/./src/errors/protocol/events/connect/index.ts","webpack://TonConnectSDK/./src/parsers/connect-errors-parser.ts","webpack://TonConnectSDK/./src/analytics/utils.ts","webpack://TonConnectSDK/../protocol/lib/cjs/index.cjs","webpack://TonConnectSDK/./src/resources/fallback-wallets-list.ts","webpack://TonConnectSDK/./src/errors/protocol/responses/bad-request.error.ts","webpack://TonConnectSDK/./src/models/wallet/wallet-info.ts","webpack://TonConnectSDK/./src/errors/protocol/index.ts","webpack://TonConnectSDK/./src/errors/wallets-manager/index.ts","webpack://TonConnectSDK/./src/provider/bridge/bridge-gateway.ts","webpack://TonConnectSDK/./src/utils/address.ts","webpack://TonConnectSDK/./src/errors/wallet/wallet-not-connected.error.ts","webpack://TonConnectSDK/./src/errors/wallets-manager/fetch-wallets.error.ts","webpack://TonConnectSDK/./src/utils/promise.ts","webpack://TonConnectSDK/./src/errors/storage/index.ts","webpack://TonConnectSDK/../../node_modules/.pnpm/tweetnacl@1.0.3/node_modules/tweetnacl/nacl-fast.js","webpack://TonConnectSDK/./src/provider/bridge/models/bridge-connection.ts","webpack://TonConnectSDK/./src/utils/uuid/stringify.ts","webpack://TonConnectSDK/./src/utils/resource.ts","webpack://TonConnectSDK/./src/parsers/send-transaction-parser.ts","webpack://TonConnectSDK/./src/validation/schemas.ts","webpack://TonConnectSDK/./src/wallets-list-manager.ts","webpack://TonConnectSDK/./src/models/wallet/index.ts","webpack://TonConnectSDK/webpack/bootstrap","webpack://TonConnectSDK/webpack/startup"],"sourcesContent":["import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when passed address is in incorrect format.\n */\nexport class WrongAddressError extends TonConnectError {\n protected get info(): string {\n return 'Passed address is in incorrect format.';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, WrongAddressError.prototype);\n }\n}\n","/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2010-2020 Robert Kieffer and other contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nexport const regex =\n /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when passed manifest contains errors.\n */\nexport class ManifestContentErrorError extends TonConnectError {\n protected get info(): string {\n return 'Passed `tonconnect-manifest.json` contains errors. Check format of your manifest. See more https://github.com/ton-connect/docs/blob/main/requests-responses.md#app-manifest';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, ManifestContentErrorError.prototype);\n }\n}\n","export * from './ton-connect';\nexport * from './models';\nexport * from './errors';\nexport { IStorage } from './storage/models/storage.interface';\nexport { TonConnect as default } from './ton-connect';\nexport { WalletsListManager } from './wallets-list-manager';\nexport { ITonConnect } from './ton-connect.interface';\nexport type { AnalyticsSettings } from './models/ton-connect-options';\nexport type {\n EventDispatcher,\n RemoveTonConnectPrefix,\n AddTonConnectPrefix\n} from './tracker/event-dispatcher';\nexport {\n createConnectionStartedEvent,\n createConnectionErrorEvent,\n createConnectionCompletedEvent,\n createConnectionRestoringStartedEvent,\n createConnectionRestoringErrorEvent,\n createConnectionRestoringCompletedEvent,\n createDisconnectionEvent,\n createTransactionSentForSignatureEvent,\n createTransactionSigningFailedEvent,\n createTransactionSignedEvent,\n createDataSentForSignatureEvent,\n createDataSigningFailedEvent,\n createDataSignedEvent,\n createRequestVersionEvent,\n createResponseVersionEvent,\n createVersionInfo,\n createWalletModalOpenedEvent,\n createSelectedWalletEvent\n} from './tracker/types';\nexport type {\n AuthType,\n ConnectionInfo,\n ConnectionEvent,\n ConnectionStartedEvent,\n ConnectionCompletedEvent,\n ConnectionErrorEvent,\n ConnectionRestoringEvent,\n ConnectionRestoringErrorEvent,\n ConnectionRestoringStartedEvent,\n ConnectionRestoringCompletedEvent,\n DisconnectionEvent,\n TransactionInfo,\n TransactionFullInfo,\n TransactionMessage,\n TransactionFullMessage,\n TransactionSigningEvent,\n TransactionSignedEvent,\n TransactionSentForSignatureEvent,\n TransactionSigningFailedEvent,\n DataSigningEvent,\n DataSignedEvent,\n DataSentForSignatureEvent,\n DataSigningFailedEvent,\n SdkActionEvent,\n RequestVersionEvent,\n ResponseVersionEvent,\n WalletModalOpenedEvent,\n SelectedWalletEvent,\n VersionEvent,\n Version,\n WithoutVersion,\n SessionInfo\n} from './tracker/types';\nexport { BrowserEventDispatcher } from './tracker/browser-event-dispatcher';\nexport type { TonAddressItem, TonProofItem, ConnectItem } from '@tonconnect/protocol';\nexport {\n CHAIN,\n ConnectEventSuccess,\n ConnectItemReply,\n TonAddressItemReply,\n DeviceInfo,\n Feature,\n FeatureName,\n SendTransactionFeature,\n SendTransactionFeatureDeprecated,\n SignDataFeature,\n SignDataType,\n SignDataPayload,\n SignDataPayloadText,\n SignDataPayloadBinary,\n SignDataPayloadCell,\n TonProofItemReply,\n TonProofItemReplySuccess,\n TonProofItemReplyError,\n ConnectItemReplyError,\n SessionCrypto,\n KeyPair,\n CONNECT_ITEM_ERROR_CODES,\n CONNECT_EVENT_ERROR_CODES,\n SEND_TRANSACTION_ERROR_CODES,\n SIGN_DATA_ERROR_CODES\n} from '@tonconnect/protocol';\n\nexport { IEnvironment } from './environment/models/environment.interface';\nexport { TelegramUser } from './environment/models/telegram-user';\n\nexport { toUserFriendlyAddress } from './utils/address';\nexport { checkRequiredWalletFeatures } from './utils/feature-support';\nexport {\n isTelegramUrl,\n encodeTelegramUrlParameters,\n decodeTelegramUrlParameters,\n isConnectUrl\n} from './utils/url';\nexport { enableQaMode, isQaModeEnabled } from './utils/qa-mode';\nexport type { AnalyticsMode } from './analytics/analytics-manager';\n\nexport {\n initializeWalletConnect,\n isWalletConnectInitialized\n} from './provider/wallet-connect/initialize';\nexport {\n WalletConnectMetadata,\n WalletConnectOptions\n} from './provider/wallet-connect/models/wallet-connect-options';\n\nexport { Traceable, OptionalTraceable } from './utils/types';\n\nexport { UUIDv7 } from './utils/uuid';\nexport { Version7Options, UUIDTypes } from './utils/uuid/types';\nexport type { ChainId } from '@tonconnect/protocol';\n","import {\n CONNECT_EVENT_ERROR_CODES,\n SIGN_DATA_ERROR_CODES,\n SignDataPayload,\n SignDataRpcRequest,\n SignDataRpcResponseError,\n SignDataRpcResponseSuccess\n} from '@tonconnect/protocol';\nimport { BadRequestError, TonConnectError, UnknownAppError, UserRejectsError } from 'src/errors';\nimport { UnknownError } from 'src/errors/unknown.error';\nimport { SignDataResponse } from 'src/models/methods';\nimport { RpcParser } from 'src/parsers/rpc-parser';\nimport { WithoutId } from 'src/utils/types';\n\nconst signDataErrors: Partial<Record<CONNECT_EVENT_ERROR_CODES, typeof TonConnectError>> = {\n [SIGN_DATA_ERROR_CODES.UNKNOWN_ERROR]: UnknownError,\n [SIGN_DATA_ERROR_CODES.USER_REJECTS_ERROR]: UserRejectsError,\n [SIGN_DATA_ERROR_CODES.BAD_REQUEST_ERROR]: BadRequestError,\n [SIGN_DATA_ERROR_CODES.UNKNOWN_APP_ERROR]: UnknownAppError\n};\n\nclass SignDataParser extends RpcParser<'signData'> {\n convertToRpcRequest(payload: SignDataPayload): WithoutId<SignDataRpcRequest> {\n return {\n method: 'signData',\n params: [JSON.stringify(payload)]\n };\n }\n\n parseAndThrowError(response: WithoutId<SignDataRpcResponseError>): never {\n let ErrorConstructor: typeof TonConnectError = UnknownError;\n\n if (response.error.code in signDataErrors) {\n ErrorConstructor = signDataErrors[response.error.code] || UnknownError;\n }\n\n throw new ErrorConstructor(response.error.message);\n }\n\n convertFromRpcResponse(rpcResponse: WithoutId<SignDataRpcResponseSuccess>): SignDataResponse {\n return rpcResponse.result;\n }\n}\n\nexport const signDataParser = new SignDataParser();\n","import { IEnvironment } from 'src/environment/models/environment.interface';\n\nexport class DefaultEnvironment implements IEnvironment {\n getClientEnvironment() {\n return '';\n }\n\n getBrowser() {\n return '';\n }\n\n getLocale() {\n return '';\n }\n\n getPlatform() {\n return '';\n }\n\n getTelegramUser() {\n return undefined;\n }\n}\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when `Storage` was not specified in the `DappMetadata` and default `localStorage` was not detected in the Node.js environment.\n */\nexport class LocalstorageNotFoundError extends TonConnectError {\n protected get info(): string {\n return 'Storage was not specified in the `DappMetadata` and default `localStorage` was not detected in the environment.';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, LocalstorageNotFoundError.prototype);\n }\n}\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when wallet connection called but wallet already connected. To avoid the error, disconnect the wallet before doing a new connection.\n */\nexport class WalletAlreadyConnectedError extends TonConnectError {\n protected get info(): string {\n return 'Wallet connection called but wallet already connected. To avoid the error, disconnect the wallet before doing a new connection.';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, WalletAlreadyConnectedError.prototype);\n }\n}\n","/**\n * Creates an AbortController instance with an optional AbortSignal.\n *\n * @param {AbortSignal} [signal] - An optional AbortSignal to use for aborting the controller.\n * @returns {AbortController} - An instance of AbortController.\n */\nexport function createAbortController(signal?: AbortSignal): AbortController {\n const abortController = new AbortController();\n if (signal?.aborted) {\n abortController.abort();\n } else {\n signal?.addEventListener('abort', () => abortController.abort(), { once: true });\n }\n return abortController;\n}\n","import {\n CONNECT_EVENT_ERROR_CODES,\n ConnectItem,\n SEND_TRANSACTION_ERROR_CODES,\n SIGN_DATA_ERROR_CODES,\n SignDataPayload\n} from '@tonconnect/protocol';\nimport {\n SendTransactionRequest,\n SendTransactionResponse,\n SignDataResponse,\n Wallet\n} from 'src/models';\nimport { isTelegramUrl } from 'src/utils/url';\n\n/**\n * Request TON Connect UI version.\n */\nexport type RequestVersionEvent = {\n /**\n * Event type.\n */\n type: 'request-version';\n};\n\n/**\n * Create a request version event.\n */\nexport function createRequestVersionEvent(): RequestVersionEvent {\n return {\n type: 'request-version'\n };\n}\n\n/**\n * Response TON Connect UI version.\n */\nexport type ResponseVersionEvent = {\n /**\n * Event type.\n */\n type: 'response-version';\n /**\n * TON Connect UI version.\n */\n version: string;\n};\n\n/**\n * Create a response version event.\n * @param version\n */\nexport function createResponseVersionEvent(version: string): ResponseVersionEvent {\n return {\n type: 'response-version',\n version: version\n };\n}\n\n/**\n * Version events.\n */\nexport type VersionEvent = RequestVersionEvent | ResponseVersionEvent;\n\n/**\n * Version of the TON Connect SDK and TON Connect UI.\n */\nexport type Version = {\n /**\n * TON Connect SDK version.\n */\n ton_connect_sdk_lib: string | null;\n /**\n * TON Connect UI version.\n */\n ton_connect_ui_lib: string | null;\n};\n\nexport type SessionInfo = {\n clientId: string | null;\n walletId: string | null;\n};\n\n/**\n * Create a version info.\n * @param version\n */\nexport function createVersionInfo(version: Version): Version {\n return {\n ton_connect_sdk_lib: version.ton_connect_sdk_lib,\n ton_connect_ui_lib: version.ton_connect_ui_lib\n };\n}\n\n/**\n * Requested authentication type: 'ton_addr' or 'ton_proof'.\n */\nexport type AuthType = ConnectItem['name'];\n\n/**\n * Information about a connected wallet.\n */\nexport type ConnectionInfo = {\n /**\n * Connected wallet address.\n */\n wallet_address: string | null;\n /**\n * Connected wallet state init.\n */\n wallet_state_init: string | null;\n /**\n * Wallet type: 'tonkeeper', 'tonhub', etc.\n */\n wallet_type: string | null;\n /**\n * Wallet version.\n */\n wallet_version: string | null;\n /**\n * Requested authentication types.\n */\n auth_type: AuthType;\n /**\n * Custom data for the connection.\n */\n custom_data: {\n /**\n * Connected chain ID.\n */\n chain_id: string | null;\n /**\n * Wallet provider.\n */\n provider: 'http' | 'injected' | null;\n\n client_id: string | null;\n wallet_id: string | null;\n } & Version;\n};\n\n// eslint-disable-next-line complexity\nfunction createConnectionInfo(\n version: Version,\n wallet: Wallet | null,\n sessionInfo?: SessionInfo | null\n): ConnectionInfo {\n const isTonProof = wallet?.connectItems?.tonProof && 'proof' in wallet.connectItems.tonProof;\n const authType: AuthType = isTonProof ? 'ton_proof' : 'ton_addr';\n\n return {\n wallet_address: wallet?.account?.address ?? null,\n wallet_state_init: wallet?.account.walletStateInit ?? null,\n wallet_type: wallet?.device.appName ?? null,\n wallet_version: wallet?.device.appVersion ?? null,\n auth_type: authType,\n custom_data: {\n client_id: sessionInfo?.clientId ?? null,\n wallet_id: sessionInfo?.walletId ?? null,\n chain_id: wallet?.account?.chain ?? null,\n provider: wallet?.provider ?? null,\n ...createVersionInfo(version)\n }\n };\n}\n\n/**\n * Initial connection event when a user initiates a connection.\n */\nexport type ConnectionStartedEvent = {\n /**\n * Event type.\n */\n type: 'connection-started';\n /**\n * Custom data for the connection.\n */\n custom_data: Version;\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n};\n\n/**\n * Create a connection init event.\n */\nexport function createConnectionStartedEvent(\n version: Version,\n traceId?: string | null\n): ConnectionStartedEvent {\n return {\n type: 'connection-started',\n custom_data: createVersionInfo(version),\n trace_id: traceId ?? null\n };\n}\n\n/**\n * Successful connection event when a user successfully connected a wallet.\n */\nexport type ConnectionCompletedEvent = {\n /**\n * Event type.\n */\n type: 'connection-completed';\n /**\n * Connection success flag.\n */\n is_success: true;\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n} & ConnectionInfo;\n\n/**\n * Create a connection completed event.\n * @param version\n * @param wallet\n * @param sessionInfo\n * @param traceId\n */\nexport function createConnectionCompletedEvent(\n version: Version,\n wallet: Wallet | null,\n sessionInfo?: SessionInfo | null,\n traceId?: string | null\n): ConnectionCompletedEvent {\n return {\n type: 'connection-completed',\n is_success: true,\n trace_id: traceId ?? null,\n ...createConnectionInfo(version, wallet, sessionInfo)\n };\n}\n\n/**\n * Connection error event when a user cancels a connection or there is an error during the connection process.\n */\nexport type ConnectionErrorEvent = {\n /**\n * Event type.\n */\n type: 'connection-error';\n /**\n * Connection success flag.\n */\n is_success: false;\n /**\n * Reason for the error.\n */\n error_message: string;\n /**\n * Error code.\n */\n error_code: CONNECT_EVENT_ERROR_CODES | null;\n /**\n * Custom data for the connection.\n */\n custom_data: {\n client_id: string | null;\n wallet_id: string | null;\n } & Version;\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n};\n\n/**\n * Create a connection error event.\n * @param version\n * @param error_message\n * @param errorCode\n * @param sessionInfo\n * @param traceId\n */\nexport function createConnectionErrorEvent(\n version: Version,\n error_message: string,\n errorCode: CONNECT_EVENT_ERROR_CODES | void,\n sessionInfo?: SessionInfo | null,\n traceId?: string | null\n): ConnectionErrorEvent {\n return {\n type: 'connection-error',\n is_success: false,\n error_message: error_message,\n error_code: errorCode ?? null,\n trace_id: traceId ?? null,\n custom_data: {\n client_id: sessionInfo?.clientId ?? null,\n wallet_id: sessionInfo?.walletId ?? null,\n ...createVersionInfo(version)\n }\n };\n}\n\n/**\n * Connection events.\n */\nexport type ConnectionEvent =\n | ConnectionStartedEvent\n | ConnectionCompletedEvent\n | ConnectionErrorEvent;\n\n/**\n * Connection restoring started event when initiates a connection restoring process.\n */\nexport type ConnectionRestoringStartedEvent = {\n /**\n * Event type.\n */\n type: 'connection-restoring-started';\n /**\n * Custom data for the connection.\n */\n custom_data: Version;\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n};\n\n/**\n * Create a connection restoring started event.\n */\nexport function createConnectionRestoringStartedEvent(\n version: Version,\n traceId?: string | null\n): ConnectionRestoringStartedEvent {\n return {\n type: 'connection-restoring-started',\n custom_data: createVersionInfo(version),\n trace_id: traceId ?? null\n };\n}\n\n/**\n * Connection restoring completed event when successfully restored a connection.\n */\nexport type ConnectionRestoringCompletedEvent = {\n /**\n * Event type.\n */\n type: 'connection-restoring-completed';\n /**\n * Connection success flag.\n */\n is_success: true;\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n} & ConnectionInfo;\n\n/**\n * Create a connection restoring completed event.\n * @param version\n * @param wallet\n * @param sessionInfo\n * @param traceId\n */\nexport function createConnectionRestoringCompletedEvent(\n version: Version,\n wallet: Wallet | null,\n sessionInfo?: SessionInfo | null,\n traceId?: string | null\n): ConnectionRestoringCompletedEvent {\n return {\n type: 'connection-restoring-completed',\n is_success: true,\n trace_id: traceId ?? null,\n ...createConnectionInfo(version, wallet, sessionInfo)\n };\n}\n\n/**\n * Connection restoring error event when there is an error during the connection restoring process.\n */\nexport type ConnectionRestoringErrorEvent = {\n /**\n * Event type.\n */\n type: 'connection-restoring-error';\n /**\n * Connection success flag.\n */\n is_success: false;\n /**\n * Reason for the error.\n */\n error_message: string;\n /**\n * Custom data for the connection.\n */\n custom_data: Version;\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n};\n\n/**\n * Create a connection restoring error event.\n * @param version\n * @param errorMessage\n * @param traceId\n */\nexport function createConnectionRestoringErrorEvent(\n version: Version,\n errorMessage: string,\n traceId?: string | null\n): ConnectionRestoringErrorEvent {\n return {\n type: 'connection-restoring-error',\n is_success: false,\n error_message: errorMessage,\n trace_id: traceId ?? null,\n custom_data: createVersionInfo(version)\n };\n}\n\n/**\n * Connection restoring events.\n */\nexport type ConnectionRestoringEvent =\n | ConnectionRestoringStartedEvent\n | ConnectionRestoringCompletedEvent\n | ConnectionRestoringErrorEvent;\n\n/**\n * Transaction message.\n */\nexport type TransactionMessage = {\n /**\n * Recipient address.\n */\n address: string | null;\n /**\n * Transfer amount.\n */\n amount: string | null;\n};\n\n/**\n * Transaction message.\n */\nexport type TransactionFullMessage = {\n /**\n * Recipient address.\n */\n address: string | null;\n /**\n * Transfer amount.\n */\n amount: string | null;\n\n /**\n * Message payload\n */\n payload: string | null;\n\n /**\n * Message state init\n */\n state_init: string | null;\n};\n\n/**\n * Transaction information.\n */\nexport type TransactionInfo = {\n /**\n * Transaction validity time in unix timestamp.\n */\n valid_until: string | null;\n /**\n * Sender address.\n */\n from: string | null;\n /**\n * Transaction messages.\n */\n messages: TransactionMessage[];\n};\n\n/**\n * Transaction information.\n */\nexport type TransactionFullInfo = Omit<TransactionInfo, 'messages'> & {\n messages: TransactionFullMessage[];\n};\n\nfunction createTransactionInfo(\n wallet: Wallet | null,\n transaction: SendTransactionRequest\n): TransactionInfo {\n return {\n valid_until: String(transaction.validUntil) ?? null,\n from: transaction.from ?? wallet?.account?.address ?? null,\n messages: transaction.messages.map(message => ({\n address: message.address ?? null,\n amount: message.amount ?? null\n }))\n };\n}\n\nfunction createTransactionFullInfo(\n wallet: Wallet | null,\n transaction: SendTransactionRequest\n): TransactionFullInfo {\n return {\n valid_until: String(transaction.validUntil) ?? null,\n from: transaction.from ?? wallet?.account?.address ?? null,\n messages: transaction.messages.map(message => ({\n address: message.address ?? null,\n amount: message.amount ?? null,\n payload: message.payload ?? null,\n state_init: message.stateInit ?? null\n }))\n };\n}\n\n/**\n * Initial transaction event when a user initiates a transaction.\n */\nexport type TransactionSentForSignatureEvent = {\n /**\n * Event type.\n */\n type: 'transaction-sent-for-signature';\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n} & ConnectionInfo &\n TransactionInfo;\n\n/**\n * Create a transaction init event.\n * @param version\n * @param wallet\n * @param transaction\n * @param sessionInfo\n * @param traceId\n */\nexport function createTransactionSentForSignatureEvent(\n version: Version,\n wallet: Wallet | null,\n transaction: SendTransactionRequest,\n sessionInfo?: SessionInfo | null,\n traceId?: string | null\n): TransactionSentForSignatureEvent {\n return {\n type: 'transaction-sent-for-signature',\n trace_id: traceId ?? null,\n ...createConnectionInfo(version, wallet, sessionInfo),\n ...createTransactionInfo(wallet, transaction)\n };\n}\n\n/**\n * Transaction signed event when a user successfully signed a transaction.\n */\nexport type TransactionSignedEvent = {\n /**\n * Event type.\n */\n type: 'transaction-signed';\n /**\n * Connection success flag.\n */\n is_success: true;\n /**\n * Signed transaction.\n */\n signed_transaction: string;\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n} & ConnectionInfo &\n TransactionInfo;\n\n/**\n * Create a transaction signed event.\n * @param version\n * @param wallet\n * @param transaction\n * @param signedTransaction\n * @param sessionInfo\n * @param traceId\n */\nexport function createTransactionSignedEvent(\n version: Version,\n wallet: Wallet | null,\n transaction: SendTransactionRequest,\n signedTransaction: SendTransactionResponse,\n sessionInfo?: SessionInfo | null,\n traceId?: string | null\n): TransactionSignedEvent {\n return {\n type: 'transaction-signed',\n is_success: true,\n signed_transaction: signedTransaction.boc,\n trace_id: traceId ?? null,\n ...createConnectionInfo(version, wallet, sessionInfo),\n ...createTransactionInfo(wallet, transaction)\n };\n}\n\n/**\n * Transaction error event when a user cancels a transaction or there is an error during the transaction process.\n */\nexport type TransactionSigningFailedEvent = {\n /**\n * Event type.\n */\n type: 'transaction-signing-failed';\n /**\n * Connection success flag.\n */\n is_success: false;\n /**\n * Reason for the error.\n */\n error_message: string;\n /**\n * Error code.\n */\n error_code: SEND_TRANSACTION_ERROR_CODES | null;\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n} & ConnectionInfo &\n TransactionFullInfo;\n\n/**\n * Create a transaction error event.\n * @param version\n * @param wallet\n * @param transaction\n * @param errorMessage\n * @param errorCode\n * @param sessionInfo\n * @param traceId\n */\nexport function createTransactionSigningFailedEvent(\n version: Version,\n wallet: Wallet | null,\n transaction: SendTransactionRequest,\n errorMessage: string,\n errorCode: SEND_TRANSACTION_ERROR_CODES | void,\n sessionInfo?: SessionInfo | null,\n traceId?: string | null\n): TransactionSigningFailedEvent {\n return {\n type: 'transaction-signing-failed',\n is_success: false,\n error_message: errorMessage,\n error_code: errorCode ?? null,\n trace_id: traceId ?? null,\n ...createConnectionInfo(version, wallet, sessionInfo),\n ...createTransactionFullInfo(wallet, transaction)\n };\n}\n\n/**\n * Transaction events.\n */\nexport type TransactionSigningEvent =\n | TransactionSentForSignatureEvent\n | TransactionSignedEvent\n | TransactionSigningFailedEvent;\n\nexport type DataSentForSignatureEvent = {\n type: 'sign-data-request-initiated';\n data: SignDataPayload;\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n} & ConnectionInfo;\n\nexport function createDataSentForSignatureEvent(\n version: Version,\n wallet: Wallet | null,\n data: SignDataPayload,\n sessionInfo?: SessionInfo | null,\n traceId?: string | null\n): DataSentForSignatureEvent {\n return {\n type: 'sign-data-request-initiated',\n data,\n trace_id: traceId ?? null,\n ...createConnectionInfo(version, wallet, sessionInfo)\n };\n}\n\nexport type DataSignedEvent = {\n type: 'sign-data-request-completed';\n is_success: true;\n data: SignDataPayload;\n signed_data: SignDataResponse;\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n} & ConnectionInfo;\n\nexport function createDataSignedEvent(\n version: Version,\n wallet: Wallet | null,\n data: SignDataPayload,\n signedData: SignDataResponse,\n sessionInfo?: SessionInfo | null,\n traceId?: string | null\n): DataSignedEvent {\n return {\n type: 'sign-data-request-completed',\n is_success: true,\n data,\n signed_data: signedData,\n trace_id: traceId ?? null,\n ...createConnectionInfo(version, wallet, sessionInfo)\n };\n}\n\nexport type DataSigningFailedEvent = {\n type: 'sign-data-request-failed';\n is_success: false;\n error_message: string;\n error_code: SIGN_DATA_ERROR_CODES | null;\n data: SignDataPayload;\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n} & ConnectionInfo;\n\nexport function createDataSigningFailedEvent(\n version: Version,\n wallet: Wallet | null,\n data: SignDataPayload,\n errorMessage: string,\n errorCode: SIGN_DATA_ERROR_CODES | void,\n sessionInfo?: SessionInfo | null,\n traceId?: string | null\n): DataSigningFailedEvent {\n return {\n type: 'sign-data-request-failed',\n is_success: false,\n data,\n error_message: errorMessage,\n error_code: errorCode ?? null,\n trace_id: traceId ?? null,\n ...createConnectionInfo(version, wallet, sessionInfo)\n };\n}\n\nexport type DataSigningEvent = DataSentForSignatureEvent | DataSignedEvent | DataSigningFailedEvent;\n\n/**\n * Disconnect event when a user initiates a disconnection.\n */\nexport type DisconnectionEvent = {\n /**\n * Event type.\n */\n type: 'disconnection';\n /**\n * Disconnect scope: 'dapp' or 'wallet'.\n */\n scope: 'dapp' | 'wallet';\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id?: string | null;\n} & ConnectionInfo;\n\nexport function createDisconnectionEvent(\n version: Version,\n wallet: Wallet | null,\n scope: 'dapp' | 'wallet',\n sessionInfo?: SessionInfo | null,\n traceId?: string | null\n): DisconnectionEvent {\n return {\n type: 'disconnection',\n scope: scope,\n trace_id: traceId ?? null,\n ...createConnectionInfo(version, wallet, sessionInfo)\n };\n}\n\n/**\n * Represents the event triggered when the wallet modal is opened.\n */\nexport type WalletModalOpenedEvent = {\n /**\n * Event type.\n */\n type: 'wallet-modal-opened';\n\n /**\n * The unique client identifier associated with the session or user.\n */\n client_id: string | null;\n\n /**\n * A list of wallet identifiers that are currently visible in the modal.\n */\n visible_wallets: string[];\n\n /**\n * Custom metadata containing versioning or contextual data for the modal.\n */\n custom_data: Version;\n\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id: string | null;\n};\n\nexport function createWalletModalOpenedEvent(\n version: Version,\n visibleWallets: string[],\n clientId?: string | null,\n traceId?: string | null\n): WalletModalOpenedEvent {\n return {\n type: 'wallet-modal-opened',\n visible_wallets: visibleWallets,\n client_id: clientId ?? null,\n custom_data: version,\n trace_id: traceId ?? null\n };\n}\n\n/**\n * Represents the event triggered when the wallet is selected.\n */\nexport type SelectedWalletEvent = {\n /**\n * Event type.\n */\n type: 'selected-wallet';\n\n /**\n * The unique client identifier associated with the session or user.\n */\n client_id: string | null;\n\n /**\n * A list of wallet identifiers that are currently visible in the modal.\n */\n visible_wallets: string[];\n wallets_menu: 'explicit_wallet' | 'main_screen' | 'other_wallets';\n\n /**\n * Redirect method: tg_link, external_link\n */\n wallet_redirect_method?: 'tg_link' | 'external_link';\n\n /**\n * URL used to open the wallet\n */\n wallet_redirect_link?: string;\n\n /**\n * Wallet type: 'tonkeeper', 'tonhub', etc.\n */\n wallet_type: string | null;\n\n /**\n * Custom metadata containing versioning or contextual data for the modal.\n */\n custom_data: Version;\n\n /**\n * Unique identifier used for tracking a specific user flow.\n */\n trace_id: string | null;\n};\n\nexport function createSelectedWalletEvent(\n version: Version,\n visibleWallets: string[],\n lastSelectedWallet: { appName?: string } | null,\n walletsMenu: 'explicit_wallet' | 'main_screen' | 'other_wallets',\n redirectLink: string,\n redirectLinkType?: 'tg_link' | 'external_link',\n clientId?: string | null,\n traceId?: string | null\n): SelectedWalletEvent {\n let walletRedirectMethod = redirectLinkType;\n if (!walletRedirectMethod && redirectLink) {\n walletRedirectMethod = isTelegramUrl(redirectLink) ? 'tg_link' : 'external_link';\n }\n return {\n type: 'selected-wallet',\n wallets_menu: walletsMenu,\n visible_wallets: visibleWallets,\n client_id: clientId ?? null,\n custom_data: version,\n trace_id: traceId ?? null,\n wallet_redirect_method: walletRedirectMethod,\n wallet_redirect_link: redirectLink || undefined,\n wallet_type: lastSelectedWallet?.appName ?? null\n };\n}\n\n/**\n * User action events.\n */\nexport type SdkActionEvent =\n | VersionEvent\n | ConnectionEvent\n | ConnectionRestoringEvent\n | DisconnectionEvent\n | TransactionSigningEvent\n | DataSigningEvent\n | WalletModalOpenedEvent\n | SelectedWalletEvent;\n\n/**\n * Parameters without version field.\n */\nexport type WithoutVersion<T> = T extends [Version, ...infer Rest] ? [...Rest] : never;\n","import { ConnectEventSuccess } from '@tonconnect/protocol';\nimport { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when wallet can't get manifest by passed manifestUrl.\n */\nexport class WalletMissingRequiredFeaturesError extends TonConnectError<{\n connectEvent: ConnectEventSuccess['payload'];\n}> {\n declare cause: {\n connectEvent: ConnectEventSuccess['payload'];\n };\n\n protected get info(): string {\n return 'Missing required features. You need to update your wallet.';\n }\n\n constructor(\n message: string,\n options: {\n cause: {\n connectEvent: ConnectEventSuccess['payload'];\n };\n }\n ) {\n super(message, options);\n\n Object.setPrototypeOf(this, WalletMissingRequiredFeaturesError.prototype);\n }\n}\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\nexport class WalletWrongNetworkError extends TonConnectError<{\n expectedChainId: string;\n actualChainId: string;\n}> {\n constructor(\n message: string,\n options: {\n cause: { expectedChainId: string; actualChainId: string };\n }\n ) {\n super(message, options);\n this.name = 'WalletWrongNetworkError';\n Object.setPrototypeOf(this, WalletWrongNetworkError.prototype);\n }\n}\n","import { logDebug, logError } from '../utils/log';\nimport { AnalyticsEvent } from './types';\nimport { tonConnectSdkVersion } from 'src/constants/version';\nimport { UUIDv7 } from 'src/utils/uuid';\nimport { Analytics } from 'src/analytics/analytics';\nimport {\n pascalToKebab,\n getStaticConnectionMetrics,\n getDynamicConnectionMetrics\n} from 'src/analytics/utils';\nimport { IEnvironment } from 'src/environment/models/environment.interface';\nimport { isQaModeEnabled } from 'src/utils/qa-mode';\nimport { Dynamic } from 'src/utils/types';\nimport { getDocument } from 'src/utils/web-api';\nimport { TonConnectError } from 'src/errors';\n\nexport type AnalyticsMode = 'off' | 'telemetry' | 'full';\n\nexport type EventsCollectorOptions = {\n batchTimeoutMs?: number;\n maxBatchSize?: number;\n analyticsUrl?: string;\n environment?: IEnvironment;\n mode?: AnalyticsMode;\n};\n\nexport class AnalyticsManager {\n private events: AnalyticsEvent[] = [];\n private timeoutId: ReturnType<typeof setTimeout> | null = null;\n private isProcessing = false;\n\n private backoff = 1;\n private currentBatchTimeoutMs: number;\n\n private readonly batchTimeoutMs: number;\n private readonly maxBatchSize: number;\n private readonly analyticsUrl: string;\n\n private shouldSend: boolean = true;\n\n private baseEvent: Partial<AnalyticsEvent>;\n\n public readonly mode: AnalyticsMode;\n\n private static readonly HTTP_STATUS = {\n TOO_MANY_REQUESTS: 429,\n CLIENT_ERROR_START: 400,\n SERVER_ERROR_START: 500\n } as const;\n\n private static readonly MAX_BACKOFF_ATTEMPTS = 5;\n private static readonly BACKOFF_MULTIPLIER = 2;\n\n private static readonly FULL_MODE_FIELDS = [\n 'user_id',\n 'tg_id',\n 'locale',\n 'tma_is_premium'\n ] as const;\n\n constructor(options: EventsCollectorOptions = {}) {\n this.batchTimeoutMs = options.batchTimeoutMs ?? 2000;\n this.currentBatchTimeoutMs = this.batchTimeoutMs;\n this.maxBatchSize = options.maxBatchSize ?? 100;\n this.analyticsUrl = options.analyticsUrl ?? 'https://analytics.ton.org/events';\n\n this.mode = options.mode ?? 'telemetry';\n\n this.baseEvent = {\n subsystem: 'dapp-sdk',\n version: tonConnectSdkVersion,\n client_environment: options.environment?.getClientEnvironment?.(),\n ...getStaticConnectionMetrics()\n };\n\n this.addWindowFocusAndBlurSubscriptions();\n }\n\n scoped<\n TEvent extends AnalyticsEvent = AnalyticsEvent,\n TOptional extends keyof TEvent = 'event_name'\n >(sharedData?: Partial<Dynamic<AnalyticsEvent>>): Analytics<TEvent, TOptional> {\n return new Proxy(this, {\n get(target, prop) {\n const propName = prop.toString();\n if (propName.startsWith('emit')) {\n const eventNamePascal = propName.replace('emit', '');\n const eventNameKebab = pascalToKebab(eventNamePascal);\n return function (event: Omit<AnalyticsEvent, 'event_name'>) {\n const executedData = Object.fromEntries(\n Object.entries(sharedData ?? {}).map(([key, value]) => [\n key,\n typeof value === 'function' ? value() : value\n ])\n );\n\n return target.emit({\n event_name: eventNameKebab,\n ...executedData,\n ...event\n } as AnalyticsEvent);\n };\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (target as any)[prop];\n }\n }) as unknown as Analytics<TEvent, TOptional>;\n }\n\n private emit(event: AnalyticsEvent): void {\n if (this.mode === 'off') {\n return;\n }\n\n const traceId = event.trace_id ?? UUIDv7();\n\n const dynamicMetrics = getDynamicConnectionMetrics();\n\n const enhancedEvent = {\n ...this.baseEvent,\n ...dynamicMetrics,\n ...event,\n event_id: UUIDv7(),\n client_timestamp: Math.floor(Date.now() / 1000),\n trace_id: traceId\n } as const;\n\n const filteredEvent =\n this.mode === 'telemetry' ? this.filterFullModeFields(enhancedEvent) : enhancedEvent;\n\n if (isQaModeEnabled()) {\n logDebug(filteredEvent);\n }\n this.events.push(filteredEvent);\n\n if (this.events.length >= this.maxBatchSize) {\n void this.flush();\n return;\n }\n\n this.startTimeout();\n }\n\n private startTimeout(): void {\n if (this.timeoutId || this.isProcessing) {\n return;\n }\n\n this.timeoutId = setTimeout(() => {\n void this.flush();\n }, this.currentBatchTimeoutMs);\n }\n\n async flush(): Promise<void> {\n if (this.isProcessing || this.events.length === 0 || !this.shouldSend) {\n return;\n }\n\n this.clearTimeout();\n this.isProcessing = true;\n\n const eventsToSend = this.extractEventsToSend();\n\n try {\n await this.processEventsBatch(eventsToSend);\n logDebug('Analytics events sent successfully');\n } catch (error) {\n this.restoreEvents(eventsToSend);\n logError('Failed to send analytics events:', error);\n } finally {\n this.isProcessing = false;\n this.scheduleNextFlushIfNeeded();\n }\n }\n\n private clearTimeout(): void {\n if (this.timeoutId) {\n clearTimeout(this.timeoutId);\n this.timeoutId = null;\n }\n }\n\n private extractEventsToSend(): AnalyticsEvent[] {\n const eventsToSend = this.events.slice(0, this.maxBatchSize);\n this.events = this.events.slice(this.maxBatchSize);\n return eventsToSend;\n }\n\n private async processEventsBatch(eventsToSend: AnalyticsEvent[]): Promise<void> {\n logDebug('Sending analytics events...', eventsToSend.length);\n try {\n const response = await this.sendEvents(eventsToSend);\n this.handleResponse(response);\n } catch (err) {\n this.handleUnknownError(err);\n }\n }\n\n private handleResponse(response: Response): void {\n const { status, statusText } = response;\n\n if (this.isTooManyRequests(status)) {\n this.handleTooManyRequests(status, statusText);\n } else if (this.isClientError(status)) {\n this.handleClientError(status, statusText);\n } else if (this.isServerError(status)) {\n this.handleUnknownError({ status, statusText });\n }\n }\n\n private restoreEvents(eventsToSend: AnalyticsEvent[]): void {\n this.events.unshift(...eventsToSend);\n }\n\n private scheduleNextFlushIfNeeded(): void {\n if (this.events.length > 0) {\n this.startTimeout();\n }\n }\n\n private async sendEvents(events: AnalyticsEvent[]): Promise<Response> {\n return await fetch(this.analyticsUrl, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-Client-Timestamp': Math.floor(Date.now() / 1000).toString()\n },\n body: JSON.stringify(events)\n });\n }\n\n private isClientError(status: number): boolean {\n return (\n status >= AnalyticsManager.HTTP_STATUS.CLIENT_ERROR_START &&\n status < AnalyticsManager.HTTP_STATUS.SERVER_ERROR_START\n );\n }\n\n private isServerError(status: number): boolean {\n return status >= AnalyticsManager.HTTP_STATUS.SERVER_ERROR_START;\n }\n\n private isTooManyRequests(status: number): boolean {\n return status === AnalyticsManager.HTTP_STATUS.TOO_MANY_REQUESTS;\n }\n\n private handleClientError(status: number, statusText: string): void {\n // Don't retry\n logError(\n 'Failed to send analytics events:',\n new TonConnectError(`Analytics API error: ${status} ${statusText}`)\n );\n }\n\n private handleUnknownError(error: unknown): void {\n if (this.backoff < AnalyticsManager.MAX_BACKOFF_ATTEMPTS) {\n this.backoff++;\n this.currentBatchTimeoutMs *= AnalyticsManager.BACKOFF_MULTIPLIER;\n throw new TonConnectError(`Unknown analytics API error: ${error}`);\n } else {\n this.currentBatchTimeoutMs = this.batchTimeoutMs;\n this.backoff = 1;\n return; // Don't retry\n }\n }\n\n private handleTooManyRequests(status: number, statusText: string): void {\n throw new TonConnectError(`Analytics API error: ${status} ${statusText}`);\n }\n\n private addWindowFocusAndBlurSubscriptions(): void {\n const document = getDocument();\n if (!document) {\n return;\n }\n\n try {\n document.addEventListener('visibilitychange', () => {\n if (document.hidden) {\n this.clearTimeout();\n this.shouldSend = false;\n } else {\n this.shouldSend = true;\n this.scheduleNextFlushIfNeeded();\n }\n });\n } catch (e) {\n logError('Cannot subscribe to the document.visibilitychange: ', e);\n }\n }\n\n getMode(): AnalyticsMode {\n return this.mode;\n }\n\n getPendingEventsCount(): number {\n return this.events.length;\n }\n\n private filterFullModeFields(event: AnalyticsEvent): AnalyticsEvent {\n const filtered = { ...event } as Partial<AnalyticsEvent> & Record<string, unknown>;\n\n for (const field of AnalyticsManager.FULL_MODE_FIELDS) {\n delete filtered[field];\n }\n\n // wallet_address is kept for error events, removed for non-error events\n const eventName = 'event_name' in event ? String(event.event_name) : '';\n const isErrorEvent =\n 'error_code' in event ||\n 'error_message' in event ||\n eventName.includes('error') ||\n eventName === 'connection-error' ||\n eventName === 'transaction-signing-failed' ||\n eventName === 'sign-data-request-failed';\n\n if (!isErrorEvent && 'wallet_address' in filtered) {\n delete filtered.wallet_address;\n }\n\n return filtered as AnalyticsEvent;\n }\n\n setWalletListDownloadDuration(duration: number | undefined): void {\n this.baseEvent = {\n ...this.baseEvent,\n wallet_list_download_duration: duration\n };\n }\n}\n","export function logDebug(...args: Parameters<Console['debug']>): void {\n if (typeof 'console' !== undefined) {\n try {\n console.debug('[TON_CONNECT_SDK]', ...args);\n } catch {}\n }\n}\n\nexport function logError(...args: Parameters<Console['error']>): void {\n if (typeof 'console' !== undefined) {\n try {\n console.error('[TON_CONNECT_SDK]', ...args);\n } catch {}\n }\n}\n\nexport function logWarning(...args: Parameters<Console['warn']>): void {\n if (typeof 'console' !== undefined) {\n try {\n console.warn('[TON_CONNECT_SDK]', ...args);\n } catch {}\n }\n}\n","/**\n * Base class for TonConnect errors. You can check if the error was triggered by the @tonconnect/sdk using `err instanceof TonConnectError`.\n */\nexport class TonConnectError<T = unknown> extends Error {\n private static prefix = '[TON_CONNECT_SDK_ERROR]';\n\n protected get info(): string {\n return '';\n }\n\n constructor(\n message?: string,\n options?: {\n cause?: T;\n }\n ) {\n super(message, options);\n\n this.message = `${TonConnectError.prefix} ${this.constructor.name}${\n this.info ? ': ' + this.info : ''\n }${message ? '\\n' + message : ''}`;\n\n Object.setPrototypeOf(this, TonConnectError.prototype);\n }\n}\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when app tries to send rpc request to the injected wallet while not connected.\n */\nexport class UnknownAppError extends TonConnectError {\n protected get info(): string {\n return 'App tries to send rpc request to the injected wallet while not connected.';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, UnknownAppError.prototype);\n }\n}\n","/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2010-2020 Robert Kieffer and other contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport { rng } from './rng-browser';\nimport { unsafeStringify } from './stringify';\nimport { UUIDTypes, Version7Options } from './types';\n\ntype V7State = {\n msecs?: number; // time, milliseconds\n seq?: number; // sequence number (32-bits)\n};\n\nconst _state: V7State = {};\n\nexport function UUIDv7(options?: Version7Options, buf?: undefined, offset?: number): string;\nexport function UUIDv7<TBuf extends Uint8Array = Uint8Array>(\n options: Version7Options | undefined,\n buf: TBuf,\n offset?: number\n): TBuf;\nexport function UUIDv7<TBuf extends Uint8Array = Uint8Array>(\n options?: Version7Options,\n buf?: TBuf,\n offset?: number\n): UUIDTypes<TBuf> {\n let bytes: Uint8Array;\n\n if (options) {\n // With options: Make UUID independent of internal state\n bytes = v7Bytes(\n options.random ?? options.rng?.() ?? rng(),\n options.msecs,\n options.seq,\n buf,\n offset\n );\n } else {\n // No options: Use internal state\n const now = Date.now();\n const rnds = rng();\n\n updateV7State(_state, now, rnds);\n\n bytes = v7Bytes(rnds, _state.msecs, _state.seq, buf, offset);\n }\n\n return buf ?? unsafeStringify(bytes);\n}\n\n// (Private!) Do not use. This method is only exported for testing purposes\n// and may change without notice.\nexport function updateV7State(state: V7State, now: number, rnds: Uint8Array) {\n state.msecs ??= -Infinity;\n state.seq ??= 0;\n\n if (now > state.msecs) {\n // Time has moved on! Pick a new random sequence number\n state.seq = (rnds[6]! << 23) | (rnds[7]! << 16) | (rnds[8]! << 8) | rnds[9]!;\n state.msecs = now;\n } else {\n // Bump sequence counter w/ 32-bit rollover\n state.seq = (state.seq + 1) | 0;\n\n // In case of rollover, bump timestamp to preserve monotonicity. This is\n // allowed by the RFC and should self-correct as the system clock catches\n // up. See https://www.rfc-editor.org/rfc/rfc9562.html#section-6.2-9.4\n if (state.seq === 0) {\n state.msecs++;\n }\n }\n\n return state;\n}\n\nfunction v7Bytes(rnds: Uint8Array, msecs?: number, seq?: number, buf?: Uint8Array, offset = 0) {\n if (rnds.length < 16) {\n throw new Error('Random bytes length must be >= 16');\n }\n\n if (!buf) {\n buf = new Uint8Array(16);\n offset = 0;\n } else {\n if (offset < 0 || offset + 16 > buf.length) {\n throw new RangeError(\n `UUID byte range ${offset}:${offset + 15} is out of buffer bounds`\n );\n }\n }\n\n // Defaults\n msecs ??= Date.now();\n seq ??= ((rnds[6]! * 0x7f) << 24) | (rnds[7]! << 16) | (rnds[8]! << 8) | rnds[9]!;\n\n // byte 0-5: timestamp (48 bits)\n buf[offset++] = (msecs / 0x10000000000) & 0xff;\n buf[offset++] = (msecs / 0x100000000) & 0xff;\n buf[offset++] = (msecs / 0x1000000) & 0xff;\n buf[offset++] = (msecs / 0x10000) & 0xff;\n buf[offset++] = (msecs / 0x100) & 0xff;\n buf[offset++] = msecs & 0xff;\n\n // byte 6: `version` (4 bits) | sequence bits 28-31 (4 bits)\n buf[offset++] = 0x70 | ((seq >>> 28) & 0x0f);\n\n // byte 7: sequence bits 20-27 (8 bits)\n buf[offset++] = (seq >>> 20) & 0xff;\n\n // byte 8: `variant` (2 bits) | sequence bits 14-19 (6 bits)\n buf[offset++] = 0x80 | ((seq >>> 14) & 0x3f);\n\n // byte 9: sequence bits 6-13 (8 bits)\n buf[offset++] = (seq >>> 6) & 0xff;\n\n // byte 10: sequence bits 0-5 (6 bits) | random (2 bits)\n buf[offset++] = ((seq << 2) & 0xff) | (rnds[10]! & 0x03);\n\n // bytes 11-15: random (40 bits)\n buf[offset++] = rnds[11]!;\n buf[offset++] = rnds[12]!;\n buf[offset++] = rnds[13]!;\n buf[offset++] = rnds[14]!;\n buf[offset++] = rnds[15]!;\n\n return buf;\n}\n","export function normalizeBase64(data: string | undefined): string | undefined {\n if (typeof data !== 'string') return undefined;\n\n const paddedLength = data.length + ((4 - (data.length % 4)) % 4);\n return data.replace(/-/g, '+').replace(/_/g, '/').padEnd(paddedLength, '=');\n}\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when passed DappMetadata is in incorrect format.\n */\nexport class DappMetadataError extends TonConnectError {\n protected get info(): string {\n return 'Passed DappMetadata is in incorrect format.';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, DappMetadataError.prototype);\n }\n}\n","export function removeUrlLastSlash(url: string): string {\n if (url.slice(-1) === '/') {\n return url.slice(0, -1);\n }\n\n return url;\n}\n\nexport function addPathToUrl(url: string, path: string): string {\n return removeUrlLastSlash(url) + '/' + path;\n}\n\nexport function isTelegramUrl(link: string | undefined): link is string {\n if (!link) {\n return false;\n }\n\n const url = new URL(link);\n return url.protocol === 'tg:' || url.hostname === 't.me';\n}\n\nexport function isConnectUrl(link: string | undefined): link is string {\n if (!link) {\n return false;\n }\n\n return link.includes('ton_addr') || link.includes('ton--5Faddr');\n}\n\nexport function encodeTelegramUrlParameters(parameters: string): string {\n return parameters\n .replaceAll('.', '%2E')\n .replaceAll('-', '%2D')\n .replaceAll('_', '%5F')\n .replaceAll('&', '-')\n .replaceAll('=', '__')\n .replaceAll('%', '--');\n}\n\nexport function decodeTelegramUrlParameters(parameters: string): string {\n return parameters\n .replaceAll('--', '%')\n .replaceAll('__', '=')\n .replaceAll('-', '&')\n .replaceAll('%5F', '_')\n .replaceAll('%2D', '-')\n .replaceAll('%2E', '.');\n}\n","export const PROTOCOL_VERSION = 2;\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when wallet can't get manifest by passed manifestUrl.\n */\nexport class ManifestNotFoundError extends TonConnectError {\n protected get info(): string {\n return 'Manifest 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';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, ManifestNotFoundError.prototype);\n }\n}\n","import {\n ChainId,\n CONNECT_ITEM_ERROR_CODES,\n ConnectEventSuccess,\n ConnectItem,\n ConnectRequest,\n SendTransactionRpcResponseSuccess,\n SignDataPayload,\n SignDataRpcResponseSuccess,\n TonAddressItemReply,\n TonProofItemReply\n} from '@tonconnect/protocol';\nimport { DappMetadataError } from 'src/errors/dapp/dapp-metadata.error';\nimport { ManifestContentErrorError } from 'src/errors/protocol/events/connect/manifest-content-error.error';\nimport { ManifestNotFoundError } from 'src/errors/protocol/events/connect/manifest-not-found.error';\nimport { TonConnectError } from 'src/errors/ton-connect.error';\nimport {\n WalletAlreadyConnectedError,\n WalletNotConnectedError,\n WalletMissingRequiredFeaturesError\n} from 'src/errors/wallet';\nimport {\n Account,\n RequiredFeatures,\n Wallet,\n WalletConnectionSource,\n WalletConnectionSourceHTTP,\n WalletConnectionSourceJS,\n WalletConnectionSourceWalletConnect,\n WalletInfo\n} from 'src/models';\nimport {\n SendTransactionRequest,\n SendTransactionResponse,\n SignDataResponse\n} from 'src/models/methods';\nimport { ConnectAdditionalRequest } from 'src/models/methods/connect/connect-additional-request';\nimport { AnalyticsSettings, TonConnectOptions } from 'src/models/ton-connect-options';\nimport {\n isWalletConnectionSourceJS,\n isWalletConnectionSourceWalletConnect\n} from 'src/models/wallet/wallet-connection-source';\nimport { connectErrorsParser } from 'src/parsers/connect-errors-parser';\nimport { sendTransactionParser } from 'src/parsers/send-transaction-parser';\nimport { signDataParser } from 'src/parsers/sign-data-parser';\nimport { BridgeProvider } from 'src/provider/bridge/bridge-provider';\nimport { InjectedProvider } from 'src/provider/injected/injected-provider';\nimport { Provider } from 'src/provider/provider';\nimport { BridgeConnectionStorage } from 'src/storage/bridge-connection-storage';\nimport { DefaultStorage } from 'src/storage/default-storage';\nimport { ITonConnect } from 'src/ton-connect.interface';\nimport { WalletWrongNetworkError } from 'src/errors/wallet/wallet-wrong-network.error';\nimport { getDocument, getOriginWithPath, getWebPageManifest } from 'src/utils/web-api';\nimport { WalletsListManager } from 'src/wallets-list-manager';\nimport { OptionalTraceable, Traceable } from 'src/utils/types';\nimport {\n checkSendTransactionSupport,\n checkRequiredWalletFeatures,\n checkSignDataSupport\n} from 'src/utils/feature-support';\nimport { callForSuccess } from 'src/utils/call-for-success';\nimport { logDebug, logError } from 'src/utils/log';\nimport { createAbortController } from 'src/utils/create-abort-controller';\nimport { TonConnectTracker } from 'src/tracker/ton-connect-tracker';\nimport { tonConnectSdkVersion } from 'src/constants/version';\nimport {\n validateSendTransactionRequest,\n validateSignDataPayload,\n validateConnectAdditionalRequest,\n validateTonProofItemReply\n} from './validation/schemas';\nimport { isQaModeEnabled } from './utils/qa-mode';\nimport { normalizeBase64 } from './utils/base64';\nimport { AnalyticsManager } from 'src/analytics/analytics-manager';\nimport { BrowserEventDispatcher } from 'src/tracker/browser-event-dispatcher';\nimport { EventDispatcher } from 'src/tracker/event-dispatcher';\nimport { SdkActionEvent } from 'src/tracker/types';\nimport { bindEventsTo } from 'src/analytics/sdk-actions-adapter';\nimport { BridgePartialSession, BridgeSession } from 'src/provider/bridge/models/bridge-session';\nimport { IEnvironment } from 'src/environment/models/environment.interface';\nimport { DefaultEnvironment } from 'src/environment/default-environment';\nimport { UUIDv7 } from 'src/utils/uuid';\nimport { TraceableWalletEvent } from 'src/models/wallet/traceable-events';\nimport { WalletConnectProvider } from 'src/provider/wallet-connect/wallet-connect-provider';\n\nexport class TonConnect implements ITonConnect {\n private desiredChainId: string | undefined;\n private static readonly walletsList = new WalletsListManager();\n\n /**\n * Check if specified wallet is injected and available to use with the app.\n * @param walletJSKey target wallet's js bridge key.\n */\n public static isWalletInjected = (walletJSKey: string): boolean =>\n InjectedProvider.isWalletInjected(walletJSKey);\n\n /**\n * Check if the app is opened inside specified wallet's browser.\n * @param walletJSKey target wallet's js bridge key.\n */\n public static isInsideWalletBrowser = (walletJSKey: string): boolean =>\n InjectedProvider.isInsideWalletBrowser(walletJSKey);\n\n /**\n * Returns available wallets list.\n */\n public static getWallets(): Promise<WalletInfo[]> {\n return this.walletsList.getWallets();\n }\n\n /**\n * Emits user action event to the EventDispatcher. By default, it uses `window.dispatchEvent` for browser environment.\n * @private\n */\n private readonly tracker: TonConnectTracker;\n\n private readonly walletsList: WalletsListManager;\n\n private analytics?: AnalyticsManager;\n\n private readonly environment: IEnvironment;\n\n private readonly dappSettings: Pick<Required<TonConnectOptions>, 'manifestUrl' | 'storage'>;\n\n private readonly bridgeConnectionStorage: BridgeConnectionStorage;\n\n private _wallet: Wallet | null = null;\n\n private provider: Provider | null = null;\n\n private statusChangeSubscriptions: ((walletInfo: Wallet | null) => void)[] = [];\n\n private statusChangeErrorSubscriptions: ((err: TonConnectError) => void)[] = [];\n\n private readonly walletsRequiredFeatures: RequiredFeatures | undefined;\n\n private abortController?: AbortController;\n\n /**\n * Shows if the wallet is connected right now.\n */\n public get connected(): boolean {\n return this._wallet !== null;\n }\n\n /**\n * Current connected account or null if no account is connected.\n */\n public get account(): Account | null {\n return this._wallet?.account || null;\n }\n\n /**\n * Current connected wallet or null if no account is connected.\n */\n public get wallet(): Wallet | null {\n return this._wallet;\n }\n\n private set wallet(value: Wallet | null) {\n this._wallet = value;\n this.statusChangeSubscriptions.forEach(callback => callback(this._wallet));\n }\n\n constructor(options?: TonConnectOptions) {\n const manifestUrl = options?.manifestUrl || getWebPageManifest();\n this.dappSettings = {\n manifestUrl,\n storage: options?.storage || new DefaultStorage()\n };\n\n this.walletsRequiredFeatures = options?.walletsRequiredFeatures;\n\n this.environment = options?.environment ?? new DefaultEnvironment();\n\n this.walletsList = new WalletsListManager({\n walletsListSource: options?.walletsListSource,\n cacheTTLMs: options?.walletsListCacheTTLMs,\n onDownloadDurationMeasured: (duration: number | undefined) => {\n this.analytics?.setWalletListDownloadDuration(duration);\n }\n });\n\n const eventDispatcher = options?.eventDispatcher ?? new BrowserEventDispatcher();\n this.tracker = new TonConnectTracker({\n eventDispatcher,\n tonConnectSdkVersion: tonConnectSdkVersion\n });\n\n this.environment = options?.environment ?? new DefaultEnvironment();\n\n this.initAnalytics(manifestUrl, eventDispatcher, options);\n\n if (!this.dappSettings.manifestUrl) {\n throw new DappMetadataError(\n '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'\n );\n }\n\n this.bridgeConnectionStorage = new BridgeConnectionStorage(\n this.dappSettings.storage,\n this.walletsList\n );\n\n if (!options?.disableAutoPauseConnection) {\n this.addWindowFocusAndBlurSubscriptions();\n }\n }\n\n /**\n * Returns available wallets list.\n */\n public getWallets(): Promise<WalletInfo[]> {\n return this.walletsList.getWallets();\n }\n\n /**\n * Allows to subscribe to connection status changes and handle connection errors.\n * @param callback will be called after connections status changes with actual wallet or null.\n * @param errorsHandler (optional) will be called with some instance of TonConnectError when connect error is received.\n * @returns unsubscribe callback.\n */\n public onStatusChange(\n callback: (wallet: Wallet | null) => void,\n errorsHandler?: (err: TonConnectError) => void\n ): () => void {\n this.statusChangeSubscriptions.push(callback);\n if (errorsHandler) {\n this.statusChangeErrorSubscriptions.push(errorsHandler);\n }\n\n return () => {\n this.statusChangeSubscriptions = this.statusChangeSubscriptions.filter(\n item => item !== callback\n );\n if (errorsHandler) {\n this.statusChangeErrorSubscriptions = this.statusChangeErrorSubscriptions.filter(\n item => item !== errorsHandler\n );\n }\n };\n }\n\n /**\n * Generates universal link for an external wallet and subscribes to the wallet's bridge, or sends connect request to the injected wallet.\n * @param wallet wallet's bridge url and universal link for an external wallet or jsBridge key for the injected wallet.\n * @param request (optional) additional request to pass to the wallet while connect (currently only ton_proof is available).\n * @param options (optional) openingDeadlineMS for the connection opening deadline and signal for the connection abort.\n * @returns universal link if external wallet was passed or void for the injected wallet.\n */\n\n public connect<\n T extends WalletConnectionSource | Pick<WalletConnectionSourceHTTP, 'bridgeUrl'>[]\n >(\n wallet: T,\n options?: OptionalTraceable<{\n request?: ConnectAdditionalRequest;\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }>\n ): T extends WalletConnectionSourceJS\n ? void\n : T extends WalletConnectionSourceWalletConnect\n ? void\n : string;\n /** @deprecated use connect(wallet, options) instead */\n public connect<\n T extends WalletConnectionSource | Pick<WalletConnectionSourceHTTP, 'bridgeUrl'>[]\n >(\n wallet: T,\n request?: ConnectAdditionalRequest,\n options?: OptionalTraceable<{\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }>\n ): T extends WalletConnectionSourceJS\n ? void\n : T extends WalletConnectionSourceWalletConnect\n ? void\n : string;\n // eslint-disable-next-line complexity\n public connect(\n wallet: WalletConnectionSource | Pick<WalletConnectionSourceHTTP, 'bridgeUrl'>[],\n requestOrOptions?:\n | ConnectAdditionalRequest\n | OptionalTraceable<{\n request?: ConnectAdditionalRequest;\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }>,\n additionalOptions?: OptionalTraceable<{\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }>\n ): void | string {\n // TODO: remove deprecated method\n const options: OptionalTraceable<{\n request?: ConnectAdditionalRequest;\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }> = {\n ...additionalOptions\n };\n\n if (\n typeof requestOrOptions === 'object' &&\n requestOrOptions !== null &&\n 'tonProof' in requestOrOptions\n ) {\n options.request = requestOrOptions;\n }\n\n if (\n typeof requestOrOptions === 'object' &&\n requestOrOptions !== null &&\n ('openingDeadlineMS' in requestOrOptions ||\n 'signal' in requestOrOptions ||\n 'request' in requestOrOptions ||\n 'traceId' in requestOrOptions)\n ) {\n options.request = requestOrOptions?.request;\n options.openingDeadlineMS = requestOrOptions?.openingDeadlineMS;\n options.signal = requestOrOptions?.signal;\n }\n\n if (options.request) {\n const validationError = validateConnectAdditionalRequest(options.request);\n if (validationError) {\n if (isQaModeEnabled()) {\n console.error('ConnectAdditionalRequest validation failed: ' + validationError);\n } else {\n throw new TonConnectError(\n 'ConnectAdditionalRequest validation failed: ' + validationError\n );\n }\n }\n }\n\n if (this.connected) {\n throw new WalletAlreadyConnectedError();\n }\n\n const abortController = createAbortController(options?.signal);\n this.abortController?.abort();\n this.abortController = abortController;\n\n if (abortController.signal.aborted) {\n throw new TonConnectError('Connection was aborted');\n }\n\n this.provider?.closeConnection();\n this.provider = this.createProvider(wallet);\n\n abortController.signal.addEventListener('abort', () => {\n this.provider?.closeConnection();\n this.provider = null;\n });\n\n const traceId = options?.traceId ?? UUIDv7();\n this.tracker.trackConnectionStarted(traceId);\n\n return this.provider.connect(this.createConnectRequest(options?.request), {\n openingDeadlineMS: options?.openingDeadlineMS,\n signal: abortController.signal,\n traceId\n });\n }\n\n /**\n * Try to restore existing session and reconnect to the corresponding wallet. Call it immediately when your app is loaded.\n */\n public async restoreConnection(\n options?: OptionalTraceable<{\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }>\n ): Promise<void> {\n const traceId = options?.traceId ?? UUIDv7();\n this.tracker.trackConnectionRestoringStarted(traceId);\n\n const abortController = createAbortController(options?.signal);\n this.abortController?.abort();\n this.abortController = abortController;\n\n if (abortController.signal.aborted) {\n this.tracker.trackConnectionRestoringError('Connection restoring was aborted', traceId);\n return;\n }\n\n // TODO: potentially race condition here\n const [bridgeConnectionType, embeddedWallet] = await Promise.all([\n this.bridgeConnectionStorage.storedConnectionType(),\n this.walletsList.getEmbeddedWallet()\n ]);\n\n if (abortController.signal.aborted) {\n this.tracker.trackConnectionRestoringError('Connection restoring was aborted', traceId);\n return;\n }\n\n let provider: Provider | null = null;\n try {\n switch (bridgeConnectionType) {\n case 'http':\n provider = await BridgeProvider.fromStorage(\n this.bridgeConnectionStorage,\n this.analytics\n );\n break;\n case 'injected':\n provider = await InjectedProvider.fromStorage(\n this.bridgeConnectionStorage,\n this.analytics\n );\n break;\n case 'wallet-connect':\n provider = await WalletConnectProvider.fromStorage(\n this.bridgeConnectionStorage\n );\n break;\n default:\n if (embeddedWallet) {\n provider = this.createProvider(embeddedWallet);\n } else {\n return;\n }\n }\n } catch (err) {\n logDebug('Provider is not restored', err);\n this.tracker.trackConnectionRestoringError('Provider is not restored', traceId);\n await this.bridgeConnectionStorage.removeConnection();\n provider?.closeConnection();\n provider = null;\n return;\n }\n\n if (abortController.signal.aborted) {\n provider?.closeConnection();\n this.tracker.trackConnectionRestoringError('Connection restoring was aborted', traceId);\n return;\n }\n\n if (!provider) {\n logError('Provider is not restored');\n this.tracker.trackConnectionRestoringError('Provider is not restored', traceId);\n return;\n }\n\n this.provider?.closeConnection();\n this.provider = provider;\n provider.listen(this.walletEventsListener.bind(this));\n\n const onAbortRestore = (): void => {\n this.tracker.trackConnectionRestoringError('Connection restoring was aborted', traceId);\n provider?.closeConnection();\n provider = null;\n };\n abortController.signal.addEventListener('abort', onAbortRestore);\n\n const restoreConnectionTask = callForSuccess(\n async _options => {\n await provider?.restoreConnection({\n openingDeadlineMS: options?.openingDeadlineMS,\n signal: _options.signal,\n traceId\n });\n\n abortController.signal.removeEventListener('abort', onAbortRestore);\n if (this.connected) {\n const sessionInfo = this.getSessionInfo();\n this.tracker.trackConnectionRestoringCompleted(\n this.wallet,\n sessionInfo,\n traceId\n );\n } else {\n this.tracker.trackConnectionRestoringError(\n 'Connection restoring failed',\n traceId\n );\n }\n },\n {\n attempts: Number.MAX_SAFE_INTEGER,\n delayMs: 2_000,\n signal: options?.signal\n }\n );\n const restoreConnectionTimeout = new Promise<void>(\n resolve => setTimeout(() => resolve(), 12_000) // connection deadline\n );\n return Promise.race([restoreConnectionTask, restoreConnectionTimeout]);\n }\n\n /**\n * Asks connected wallet to sign and send the transaction.\n * @param transaction transaction to send.\n * @param options (optional) onRequestSent will be called after the request was sent to the wallet and signal for the transaction abort.\n * @returns signed transaction boc that allows you to find the transaction in the blockchain.\n * If user rejects transaction, method will throw the corresponding error.\n */\n public sendTransaction(\n transaction: SendTransactionRequest,\n options?: OptionalTraceable<{\n onRequestSent?: () => void;\n signal?: AbortSignal;\n }>\n ): Promise<Traceable<SendTransactionResponse>>;\n /** @deprecated use sendTransaction(transaction, options) instead */\n public sendTransaction(\n transaction: SendTransactionRequest,\n onRequestSent?: () => void\n ): Promise<Traceable<SendTransactionResponse>>;\n public async sendTransaction(\n transaction: SendTransactionRequest,\n optionsOrOnRequestSent?:\n | OptionalTraceable<{\n onRequestSent?: () => void;\n signal?: AbortSignal;\n }>\n | (() => void)\n ): Promise<Traceable<SendTransactionResponse>> {\n // TODO: remove deprecated method\n const options: OptionalTraceable<{\n onRequestSent?: () => void;\n signal?: AbortSignal;\n }> = {};\n if (typeof optionsOrOnRequestSent === 'function') {\n options.onRequestSent = optionsOrOnRequestSent;\n } else {\n options.onRequestSent = optionsOrOnRequestSent?.onRequestSent;\n options.signal = optionsOrOnRequestSent?.signal;\n options.traceId = optionsOrOnRequestSent?.traceId;\n }\n\n // Validate transaction\n const validationError = validateSendTransactionRequest(transaction);\n if (validationError) {\n if (isQaModeEnabled()) {\n console.error('SendTransactionRequest validation failed: ' + validationError);\n } else {\n throw new TonConnectError(\n 'SendTransactionRequest validation failed: ' + validationError\n );\n }\n }\n\n const abortController = createAbortController(options?.signal);\n if (abortController.signal.aborted) {\n throw new TonConnectError('Transaction sending was aborted');\n }\n\n this.checkConnection();\n\n const requiredMessagesNumber = transaction.messages.length;\n const requireExtraCurrencies = transaction.messages.some(\n m => m.extraCurrency && Object.keys(m.extraCurrency).length > 0\n );\n checkSendTransactionSupport(this.wallet!.device.features, {\n requiredMessagesNumber,\n requireExtraCurrencies\n });\n\n const sessionInfo = this.getSessionInfo();\n const traceId = options?.traceId ?? UUIDv7();\n this.tracker.trackTransactionSentForSignature(\n this.wallet,\n transaction,\n sessionInfo,\n traceId\n );\n\n const { validUntil, messages, ...tx } = transaction;\n const from = transaction.from || this.account!.address;\n const network = transaction.network || this.account!.chain;\n\n if (this.wallet?.account.chain && network !== this.wallet.account.chain) {\n if (!isQaModeEnabled()) {\n throw new WalletWrongNetworkError('Wallet connected to a wrong network', {\n cause: {\n expectedChainId: this.wallet?.account.chain,\n actualChainId: network\n }\n });\n }\n console.error('Wallet connected to a wrong network', {\n expectedChainId: this.wallet?.account.chain,\n actualChainId: network\n });\n }\n\n const response = await this.provider!.sendRequest(\n sendTransactionParser.convertToRpcRequest({\n ...tx,\n from,\n network,\n valid_until: validUntil,\n messages: messages.map(({ extraCurrency, payload, stateInit, ...msg }) => ({\n ...msg,\n payload: normalizeBase64(payload),\n stateInit: normalizeBase64(stateInit),\n extra_currency: extraCurrency\n }))\n }),\n {\n onRequestSent: options.onRequestSent,\n signal: abortController.signal,\n traceId\n }\n );\n\n if (sendTransactionParser.isError(response)) {\n this.tracker.trackTransactionSigningFailed(\n this.wallet,\n transaction,\n response.error.message,\n response.error.code,\n sessionInfo,\n traceId\n );\n return sendTransactionParser.parseAndThrowError(response);\n }\n\n const result = sendTransactionParser.convertFromRpcResponse(\n response as SendTransactionRpcResponseSuccess\n );\n this.tracker.trackTransactionSigned(this.wallet, transaction, result, sessionInfo, traceId);\n return { ...result, traceId: response.traceId };\n }\n\n public async signData(\n data: SignDataPayload,\n options?: OptionalTraceable<{\n onRequestSent?: () => void;\n signal?: AbortSignal;\n }>\n ): Promise<Traceable<SignDataResponse>> {\n const abortController = createAbortController(options?.signal);\n if (abortController.signal.aborted) {\n throw new TonConnectError('data sending was aborted');\n }\n\n // Validate sign data\n const validationError = validateSignDataPayload(data);\n if (validationError) {\n if (isQaModeEnabled()) {\n console.error('SignDataPayload validation failed: ' + validationError);\n } else {\n throw new TonConnectError('SignDataPayload validation failed: ' + validationError);\n }\n }\n\n this.checkConnection();\n checkSignDataSupport(this.wallet!.device.features, { requiredTypes: [data.type] });\n\n const sessionInfo = this.getSessionInfo();\n const traceId = options?.traceId ?? UUIDv7();\n this.tracker.trackDataSentForSignature(this.wallet, data, sessionInfo, traceId);\n\n const from = data.from || this.account!.address;\n const network = data.network || this.account!.chain;\n\n if (this.wallet?.account.chain && network !== this.wallet.account.chain) {\n if (!isQaModeEnabled()) {\n throw new WalletWrongNetworkError('Wallet connected to a wrong network', {\n cause: {\n expectedChainId: this.wallet?.account.chain,\n actualChainId: network\n }\n });\n }\n console.error('Wallet connected to a wrong network', {\n expectedChainId: this.wallet?.account.chain,\n actualChainId: network\n });\n }\n\n const response = await this.provider!.sendRequest(\n signDataParser.convertToRpcRequest({\n ...data,\n ...(data.type === 'cell' ? { cell: normalizeBase64(data.cell) } : {}),\n from,\n network\n }),\n { onRequestSent: options?.onRequestSent, signal: abortController.signal, traceId }\n );\n\n if (signDataParser.isError(response)) {\n this.tracker.trackDataSigningFailed(\n this.wallet,\n data,\n response.error.message,\n response.error.code,\n sessionInfo,\n traceId\n );\n return signDataParser.parseAndThrowError(response);\n }\n\n const result = signDataParser.convertFromRpcResponse(\n response as SignDataRpcResponseSuccess\n );\n\n this.tracker.trackDataSigned(this.wallet, data, result, sessionInfo, traceId);\n\n return { ...result, traceId };\n }\n\n /**\n * Set desired network for the connection. Can only be set before connecting.\n * If wallet connects with a different chain, the SDK will throw an error and abort connection.\n * @param network desired network id (e.g., '-239', '-3', or custom). Pass undefined to allow any network.\n */\n public setConnectionNetwork(network?: ChainId): void {\n if (this.connected) {\n throw new TonConnectError('Cannot change network while wallet is connected');\n }\n this.desiredChainId = network;\n }\n\n /**\n * Disconnect form thw connected wallet and drop current session.\n */\n public async disconnect(options?: OptionalTraceable<{ signal?: AbortSignal }>): Promise<void> {\n if (!this.connected) {\n throw new WalletNotConnectedError();\n }\n\n const abortController = createAbortController(options?.signal);\n const prevAbortController = this.abortController;\n this.abortController = abortController;\n\n if (abortController.signal.aborted) {\n throw new TonConnectError('Disconnect was aborted');\n }\n\n const traceId = options?.traceId ?? UUIDv7();\n\n this.onWalletDisconnected('dapp', { traceId });\n await this.provider?.disconnect({\n signal: abortController.signal,\n traceId\n });\n prevAbortController?.abort();\n }\n\n /**\n * Gets the current session ID if available.\n * @returns session ID string or null if not available.\n */\n public async getSessionId(): Promise<string | null> {\n if (!this.provider) {\n return null;\n }\n\n try {\n const connection = await this.bridgeConnectionStorage.getConnection();\n if (!connection || connection.type !== 'http') {\n return null;\n }\n\n if ('sessionCrypto' in connection) {\n // Pending connection\n return connection.sessionCrypto.sessionId;\n } else {\n // Established connection\n return connection.session.sessionCrypto.sessionId;\n }\n } catch {\n return null;\n }\n }\n\n private getSessionInfo(): { clientId: string | null; walletId: string | null } | null {\n if (this.provider?.type !== 'http') {\n return null;\n }\n\n if (!('session' in this.provider)) {\n return null;\n }\n\n try {\n const session = this.provider.session as BridgeSession | BridgePartialSession | null;\n if (!session) {\n return null;\n }\n const clientId = session.sessionCrypto.sessionId;\n let walletId = null;\n if ('walletPublicKey' in session) {\n walletId = session.walletPublicKey;\n }\n return { clientId, walletId };\n } catch {\n return null;\n }\n }\n\n /**\n * Pause bridge HTTP connection. Might be helpful, if you want to pause connections while browser tab is unfocused,\n * or if you use SDK with NodeJS and want to save server resources.\n */\n public pauseConnection(): void {\n if (this.provider?.type !== 'http') {\n return;\n }\n\n this.provider.pause();\n }\n\n /**\n * Unpause bridge HTTP connection if it is paused.\n */\n public unPauseConnection(): Promise<void> {\n if (this.provider?.type !== 'http') {\n return Promise.resolve();\n }\n\n return this.provider.unPause();\n }\n\n private addWindowFocusAndBlurSubscriptions(): void {\n const document = getDocument();\n if (!document) {\n return;\n }\n\n try {\n document.addEventListener('visibilitychange', () => {\n if (document.hidden) {\n this.pauseConnection();\n } else {\n this.unPauseConnection().catch(() => {});\n }\n });\n } catch (e) {\n logError('Cannot subscribe to the document.visibilitychange: ', e);\n }\n }\n\n private initAnalytics(\n manifestUrl: string,\n eventDispatcher: EventDispatcher<SdkActionEvent>,\n options?: TonConnectOptions\n ): void {\n const analyticsSettings: AnalyticsSettings | undefined = options?.analytics;\n const mode = analyticsSettings?.mode ?? 'telemetry';\n\n if (mode === 'off') {\n return;\n }\n\n const analytics = new AnalyticsManager({\n environment: this.environment,\n mode\n });\n this.analytics = analytics;\n\n const telegramUser = this.environment.getTelegramUser();\n\n const sharedAnalyticsData: Parameters<typeof analytics.scoped>[0] = {\n browser: this.environment.getBrowser(),\n platform: this.environment.getPlatform(),\n manifest_json_url: manifestUrl,\n origin_url: getOriginWithPath,\n locale: this.environment.getLocale()\n };\n\n if (telegramUser) {\n sharedAnalyticsData.tg_id = telegramUser.id;\n sharedAnalyticsData.tma_is_premium = telegramUser.isPremium;\n }\n\n bindEventsTo(eventDispatcher, analytics.scoped(sharedAnalyticsData));\n }\n\n private createProvider(\n wallet: WalletConnectionSource | Pick<WalletConnectionSourceHTTP, 'bridgeUrl'>[]\n ): Provider {\n let provider: Provider;\n\n if (!Array.isArray(wallet) && isWalletConnectionSourceJS(wallet)) {\n provider = new InjectedProvider(\n this.bridgeConnectionStorage,\n wallet.jsBridgeKey,\n this.analytics\n );\n } else if (!Array.isArray(wallet) && isWalletConnectionSourceWalletConnect(wallet)) {\n provider = new WalletConnectProvider(this.bridgeConnectionStorage);\n } else {\n provider = new BridgeProvider(this.bridgeConnectionStorage, wallet, this.analytics);\n }\n\n provider.listen(this.walletEventsListener.bind(this));\n return provider;\n }\n\n private walletEventsListener(e: TraceableWalletEvent): void {\n switch (e.event) {\n case 'connect':\n this.onWalletConnected(e.payload, { traceId: e.traceId });\n break;\n case 'connect_error':\n this.tracker.trackConnectionError(\n e.payload.message,\n e.payload.code,\n this.getSessionInfo(),\n e.traceId\n );\n const walletError = connectErrorsParser.parseError(e.payload);\n this.onWalletConnectError(walletError);\n break;\n case 'disconnect':\n this.onWalletDisconnected('wallet', { traceId: e.traceId });\n }\n }\n\n private onWalletConnected(\n connectEvent: ConnectEventSuccess['payload'],\n options: Traceable\n ): void {\n const tonAccountItem: TonAddressItemReply | undefined = connectEvent.items.find(\n item => item.name === 'ton_addr'\n ) as TonAddressItemReply | undefined;\n\n const tonProofItem: TonProofItemReply | undefined = connectEvent.items.find(\n item => item.name === 'ton_proof'\n ) as TonProofItemReply | undefined;\n\n if (!tonAccountItem) {\n throw new TonConnectError('ton_addr connection item was not found');\n }\n\n const hasRequiredFeatures = checkRequiredWalletFeatures(\n connectEvent.device.features,\n this.walletsRequiredFeatures\n );\n\n if (!hasRequiredFeatures) {\n this.provider?.disconnect();\n this.onWalletConnectError(\n new WalletMissingRequiredFeaturesError(\n 'Wallet does not support required features',\n { cause: { connectEvent } }\n )\n );\n return;\n }\n\n const wallet: Wallet = {\n device: connectEvent.device,\n provider: this.provider!.type,\n account: {\n address: tonAccountItem.address,\n chain: tonAccountItem.network,\n walletStateInit: tonAccountItem.walletStateInit,\n publicKey: tonAccountItem.publicKey\n }\n };\n\n if (this.desiredChainId && wallet.account.chain !== this.desiredChainId) {\n const expectedChainId = this.desiredChainId;\n const actualChainId = wallet.account.chain;\n this.provider?.disconnect();\n this.onWalletConnectError(\n new WalletWrongNetworkError('Wallet connected to a wrong network', {\n cause: { expectedChainId, actualChainId }\n })\n );\n return;\n }\n\n if (tonProofItem) {\n const validationError = validateTonProofItemReply(tonProofItem as unknown);\n let tonProof: TonProofItemReply | undefined = undefined;\n if (validationError) {\n if (isQaModeEnabled()) {\n console.error('TonProofItem validation failed: ' + validationError);\n }\n tonProof = {\n name: 'ton_proof',\n error: {\n code: CONNECT_ITEM_ERROR_CODES.UNKNOWN_ERROR,\n message: validationError\n }\n };\n } else {\n try {\n if ('proof' in tonProofItem) {\n tonProof = {\n name: 'ton_proof',\n proof: {\n timestamp: tonProofItem.proof.timestamp,\n domain: {\n lengthBytes: tonProofItem.proof.domain.lengthBytes,\n value: tonProofItem.proof.domain.value\n },\n payload: tonProofItem.proof.payload,\n signature: tonProofItem.proof.signature\n }\n };\n } else if ('error' in tonProofItem) {\n tonProof = {\n name: 'ton_proof',\n error: {\n code: tonProofItem.error.code,\n message: tonProofItem.error.message\n }\n };\n } else {\n throw new TonConnectError('Invalid data format');\n }\n } catch (e) {\n tonProof = {\n name: 'ton_proof',\n error: {\n code: CONNECT_ITEM_ERROR_CODES.UNKNOWN_ERROR,\n message: 'Invalid data format'\n }\n };\n }\n }\n\n wallet.connectItems = { tonProof };\n }\n\n this.wallet = wallet;\n\n const sessionInfo = this.getSessionInfo();\n this.tracker.trackConnectionCompleted(wallet, sessionInfo, options?.traceId);\n }\n\n private onWalletConnectError(error: TonConnectError): void {\n this.statusChangeErrorSubscriptions.forEach(errorsHandler => errorsHandler(error));\n logDebug(error);\n\n if (error instanceof ManifestNotFoundError || error instanceof ManifestContentErrorError) {\n logError(error);\n throw error;\n }\n }\n\n private onWalletDisconnected(scope: 'wallet' | 'dapp', options: Traceable): void {\n const sessionInfo = this.getSessionInfo();\n this.tracker.trackDisconnection(this.wallet, scope, sessionInfo, options?.traceId);\n this.wallet = null;\n }\n\n private checkConnection(): void | never {\n if (!this.connected) {\n throw new WalletNotConnectedError();\n }\n }\n\n private createConnectRequest(request?: ConnectAdditionalRequest): ConnectRequest {\n const items: ConnectItem[] = [\n {\n name: 'ton_addr',\n ...(this.desiredChainId ? { network: this.desiredChainId } : {})\n }\n ];\n\n if (request?.tonProof) {\n items.push({\n name: 'ton_proof',\n payload: request.tonProof\n });\n }\n\n return {\n manifestUrl: this.dappSettings.manifestUrl,\n items\n };\n }\n}\n","import { WalletNotInjectedError } from 'src/errors/wallet/wallet-not-injected.error';\nimport {\n AppRequest,\n ConnectEventError,\n ConnectRequest,\n RpcMethod,\n WalletResponse\n} from '@tonconnect/protocol';\nimport {\n InjectedWalletApi,\n isJSBridgeWithMetadata\n} from 'src/provider/injected/models/injected-wallet-api';\nimport { InternalProvider } from 'src/provider/provider';\nimport { BridgeConnectionStorage } from 'src/storage/bridge-connection-storage';\nimport { OptionalTraceable, Traceable, WithoutId } from 'src/utils/types';\nimport { getWindow, getWindowEntries } from 'src/utils/web-api';\nimport { PROTOCOL_VERSION } from 'src/resources/protocol';\nimport { WalletInfoCurrentlyInjected } from 'src/models';\nimport { logDebug } from 'src/utils/log';\nimport { Analytics } from 'src/analytics/analytics';\nimport { AnalyticsManager } from 'src/analytics/analytics-manager';\nimport { JsBridgeEvent } from 'src/analytics/types';\nimport { UUIDv7 } from 'src/utils/uuid';\nimport { TraceableWalletEvent } from 'src/models/wallet/traceable-events';\n\ntype WindowWithTon<T extends string> = {\n [key in T]: {\n tonconnect: InjectedWalletApi;\n };\n} & Window;\n\nexport class InjectedProvider<T extends string = string> implements InternalProvider {\n private static window = getWindow();\n\n public static async fromStorage(\n storage: BridgeConnectionStorage,\n analyticsManager?: AnalyticsManager\n ): Promise<InjectedProvider> {\n const connection = await storage.getInjectedConnection();\n return new InjectedProvider(storage, connection.jsBridgeKey, analyticsManager);\n }\n\n public static isWalletInjected(injectedWalletKey: string): boolean {\n return InjectedProvider.isWindowContainsWallet(this.window, injectedWalletKey);\n }\n\n public static isInsideWalletBrowser(injectedWalletKey: string): boolean {\n if (InjectedProvider.isWindowContainsWallet(this.window, injectedWalletKey)) {\n return this.window[injectedWalletKey]!.tonconnect.isWalletBrowser;\n }\n\n return false;\n }\n\n public static getCurrentlyInjectedWallets(): WalletInfoCurrentlyInjected[] {\n if (!this.window) {\n return [];\n }\n\n const windowEntries = getWindowEntries();\n const wallets = windowEntries.filter(([_key, value]) => isJSBridgeWithMetadata(value)) as [\n string,\n { tonconnect: InjectedWalletApi }\n ][];\n\n return wallets.map(([jsBridgeKey, wallet]) => ({\n name: wallet.tonconnect.walletInfo.name,\n appName: wallet.tonconnect.walletInfo.app_name,\n aboutUrl: wallet.tonconnect.walletInfo.about_url,\n imageUrl: wallet.tonconnect.walletInfo.image,\n tondns: wallet.tonconnect.walletInfo.tondns,\n jsBridgeKey,\n injected: true,\n embedded: wallet.tonconnect.isWalletBrowser,\n platforms: wallet.tonconnect.walletInfo.platforms,\n features: wallet.tonconnect.walletInfo.features\n }));\n }\n\n private static isWindowContainsWallet<T extends string>(\n window: Window | undefined,\n injectedWalletKey: string\n ): window is WindowWithTon<T> {\n return (\n !!window &&\n injectedWalletKey in window &&\n typeof window[injectedWalletKey as keyof Window] === 'object' &&\n 'tonconnect' in window[injectedWalletKey as keyof Window]\n );\n }\n\n public readonly type = 'injected';\n\n private unsubscribeCallback: (() => void) | null = null;\n\n private injectedWallet: InjectedWalletApi;\n\n private listenSubscriptions = false;\n\n private listeners: Array<(e: TraceableWalletEvent) => void> = [];\n private readonly analytics?: Analytics<\n JsBridgeEvent,\n 'bridge_key' | 'wallet_app_name' | 'wallet_app_version'\n >;\n\n constructor(\n private readonly connectionStorage: BridgeConnectionStorage,\n private readonly injectedWalletKey: T,\n analyticsManager?: AnalyticsManager\n ) {\n const window: Window | undefined | WindowWithTon<T> = InjectedProvider.window;\n if (!InjectedProvider.isWindowContainsWallet(window, injectedWalletKey)) {\n throw new WalletNotInjectedError();\n }\n\n this.injectedWallet = window[injectedWalletKey]!.tonconnect!;\n\n if (analyticsManager) {\n this.analytics = analyticsManager.scoped({\n bridge_key: injectedWalletKey,\n wallet_app_name: this.injectedWallet.deviceInfo.appName,\n wallet_app_version: this.injectedWallet.deviceInfo.appVersion\n });\n }\n }\n\n public connect(message: ConnectRequest, options?: OptionalTraceable): void {\n this._connect(PROTOCOL_VERSION, message, options);\n }\n\n public async restoreConnection(options?: OptionalTraceable): Promise<void> {\n const traceId = options?.traceId ?? UUIDv7();\n try {\n logDebug(`Injected Provider restoring connection...`);\n this.analytics?.emitJsBridgeCall({\n js_bridge_method: 'restoreConnection',\n trace_id: traceId\n });\n const connectEvent = await this.injectedWallet.restoreConnection({\n traceId\n });\n this.analytics?.emitJsBridgeResponse({\n js_bridge_method: 'restoreConnection',\n trace_id: traceId\n });\n logDebug('Injected Provider restoring connection response', connectEvent);\n\n if (connectEvent.event === 'connect') {\n this.makeSubscriptions({ traceId });\n this.listeners.forEach(listener => listener({ ...connectEvent, traceId }));\n } else {\n await this.connectionStorage.removeConnection();\n }\n } catch (e) {\n this.analytics?.emitJsBridgeError({\n js_bridge_method: 'restoreConnection',\n error_message: String(e),\n trace_id: traceId\n });\n await this.connectionStorage.removeConnection();\n console.error(e);\n }\n }\n\n public closeConnection(): void {\n if (this.listenSubscriptions) {\n this.injectedWallet.disconnect();\n }\n this.closeAllListeners();\n }\n\n public async disconnect(options?: OptionalTraceable): Promise<void> {\n const traceId = options?.traceId ?? UUIDv7();\n return new Promise(resolve => {\n const onRequestSent = (): void => {\n this.closeAllListeners();\n this.connectionStorage.removeConnection().then(resolve);\n };\n\n try {\n this.injectedWallet.disconnect();\n onRequestSent();\n } catch (e) {\n logDebug(e);\n\n this.sendRequest(\n {\n method: 'disconnect',\n params: []\n },\n { onRequestSent, traceId }\n );\n }\n });\n }\n\n private closeAllListeners(): void {\n this.listenSubscriptions = false;\n this.listeners = [];\n this.unsubscribeCallback?.();\n }\n\n public listen(eventsCallback: (e: TraceableWalletEvent) => void): () => void {\n this.listeners.push(eventsCallback);\n return () =>\n (this.listeners = this.listeners.filter(listener => listener !== eventsCallback));\n }\n\n public sendRequest<T extends RpcMethod>(\n request: WithoutId<AppRequest<T>>,\n options?: OptionalTraceable<{\n onRequestSent?: () => void;\n signal?: AbortSignal;\n attempts?: number;\n }>\n ): Promise<WithoutId<WalletResponse<T>>>;\n /** @deprecated use sendRequest(transaction, options) instead */\n public sendRequest<T extends RpcMethod>(\n request: WithoutId<AppRequest<T>>,\n onRequestSent?: () => void\n ): Promise<WithoutId<WalletResponse<T>>>;\n public async sendRequest<T extends RpcMethod>(\n request: WithoutId<AppRequest<T>>,\n optionsOrOnRequestSent?:\n | (() => void)\n | OptionalTraceable<{\n onRequestSent?: () => void;\n signal?: AbortSignal;\n attempts?: number;\n }>\n ): Promise<WithoutId<WalletResponse<T>>> {\n // TODO: remove deprecated method\n const options: OptionalTraceable<{\n onRequestSent?: () => void;\n signal?: AbortSignal;\n attempts?: number;\n }> = {};\n if (typeof optionsOrOnRequestSent === 'function') {\n options.onRequestSent = optionsOrOnRequestSent;\n options.traceId = UUIDv7();\n } else {\n options.onRequestSent = optionsOrOnRequestSent?.onRequestSent;\n options.signal = optionsOrOnRequestSent?.signal;\n options.attempts = optionsOrOnRequestSent?.attempts;\n options.traceId = optionsOrOnRequestSent?.traceId ?? UUIDv7();\n }\n\n const id = (await this.connectionStorage.getNextRpcRequestId()).toString();\n await this.connectionStorage.increaseNextRpcRequestId();\n\n logDebug('Send injected-bridge request:', { ...request, id });\n this.analytics?.emitJsBridgeCall({\n js_bridge_method: 'send'\n });\n const result = this.injectedWallet.send<T>({ ...request, id } as AppRequest<T>, {\n traceId: options.traceId\n });\n result\n .then(response => {\n this.analytics?.emitJsBridgeResponse({\n js_bridge_method: 'send'\n });\n logDebug('Wallet message received:', response);\n })\n .catch(error => {\n this.analytics?.emitJsBridgeError({\n js_bridge_method: 'send',\n error_message: String(error)\n });\n });\n options?.onRequestSent?.();\n\n return result;\n }\n\n private async _connect(\n protocolVersion: number,\n message: ConnectRequest,\n options?: OptionalTraceable\n ): Promise<void> {\n const traceId = options?.traceId ?? UUIDv7();\n try {\n logDebug(\n `Injected Provider connect request: protocolVersion: ${protocolVersion}, message:`,\n message\n );\n this.analytics?.emitJsBridgeCall({\n js_bridge_method: 'connect',\n trace_id: traceId\n });\n const connectEvent = await this.injectedWallet.connect(protocolVersion, message, {\n traceId\n });\n this.analytics?.emitJsBridgeResponse({\n js_bridge_method: 'connect'\n });\n logDebug('Injected Provider connect response:', connectEvent);\n\n if (connectEvent.event === 'connect') {\n await this.updateSession();\n this.makeSubscriptions({ traceId });\n }\n this.listeners.forEach(listener => listener({ ...connectEvent, traceId }));\n } catch (e) {\n this.analytics?.emitJsBridgeError({\n js_bridge_method: 'connect',\n error_message: String(e),\n trace_id: traceId\n });\n logDebug('Injected Provider connect error:', e);\n const connectEventError: WithoutId<ConnectEventError> = {\n event: 'connect_error',\n payload: {\n code: 0,\n message: e?.toString()\n }\n };\n\n this.listeners.forEach(listener => listener({ ...connectEventError, traceId }));\n }\n }\n\n private makeSubscriptions(options: Traceable): void {\n this.listenSubscriptions = true;\n this.analytics?.emitJsBridgeCall({\n js_bridge_method: 'listen',\n trace_id: options.traceId\n });\n try {\n this.unsubscribeCallback = this.injectedWallet.listen(e => {\n const traceId = e.traceId ?? UUIDv7();\n logDebug('Wallet message received:', e);\n\n if (this.listenSubscriptions) {\n this.listeners.forEach(listener => listener({ ...e, traceId }));\n }\n\n if (e.event === 'disconnect') {\n this.disconnect({ traceId });\n }\n });\n this.analytics?.emitJsBridgeResponse({\n js_bridge_method: 'listen',\n trace_id: options.traceId\n });\n } catch (err) {\n this.analytics?.emitJsBridgeError({\n js_bridge_method: 'listen',\n error_message: String(err),\n trace_id: options.traceId\n });\n throw err;\n }\n }\n\n private updateSession(): Promise<void> {\n return this.connectionStorage.storeConnection({\n type: 'injected',\n jsBridgeKey: this.injectedWalletKey,\n nextRpcRequestId: 0\n });\n }\n}\n","export * from './protocol';\nexport * from './wallet';\nexport * from './storage';\nexport * from './wallets-manager';\nexport * from './address';\nexport * from './binary';\nexport { TonConnectError } from './ton-connect.error';\nexport { UnknownError } from './unknown.error';\n","export * from './wallet';\nexport * from './methods';\nexport { DappMetadata } from './dapp/dapp-metadata';\nexport { TonConnectOptions } from './ton-connect-options';\n","export type AsStruct<T> = { [P in keyof T as T[P] extends Function ? never : P]: T[P] };\n\nexport type WithoutId<T extends { id: unknown }> = Omit<T, 'id'>;\nexport type WithoutIdDistributive<T extends { id: unknown }> = DistributiveOmit<T, 'id'>;\n\nexport type DistributiveOmit<T, K extends keyof T> = T extends unknown ? Omit<T, K> : never;\n\nexport type Optional<T, K extends keyof T> = Pick<Partial<T>, K> & Omit<T, K>;\n\nexport function hasProperty<T extends string>(\n value: unknown,\n propertyKey: T\n): value is Record<T, unknown> {\n return hasProperties(value, [propertyKey]);\n}\n\nexport function hasProperties<T extends string>(\n value: unknown,\n propertyKeys: T[]\n): value is Record<T, unknown> {\n if (!value || typeof value !== 'object') {\n return false;\n }\n\n return propertyKeys.every(propertyKey => propertyKey in value);\n}\n\nexport type Dynamic<TObject extends Record<string, unknown>> = {\n [Key in keyof TObject]: TObject[Key] | (() => TObject[Key]);\n};\n\nexport type Traceable<T extends {} = {}> = { traceId: string } & T;\nexport type OptionalTraceable<T extends {} = {}> = { traceId?: string } & T;\n","import { Feature, SendTransactionFeature, SignDataFeature } from '@tonconnect/protocol';\nimport { logWarning } from 'src/utils/log';\nimport { WalletNotSupportFeatureError } from 'src/errors/wallet';\nimport {\n RequiredFeatures,\n RequiredSendTransactionFeature,\n RequiredSignDataFeature\n} from 'src/models';\n\nexport function checkSendTransactionSupport(\n features: Feature[],\n options: { requiredMessagesNumber: number; requireExtraCurrencies: boolean }\n): never | void {\n const supportsDeprecatedSendTransactionFeature = features.includes('SendTransaction');\n const sendTransactionFeature = findFeature(features, 'SendTransaction');\n\n const requiredFeature: RequiredSendTransactionFeature = {\n minMessages: options.requiredMessagesNumber,\n extraCurrencyRequired: options.requireExtraCurrencies\n };\n\n if (!supportsDeprecatedSendTransactionFeature && !sendTransactionFeature) {\n throw new WalletNotSupportFeatureError(\"Wallet doesn't support SendTransaction feature.\", {\n cause: { requiredFeature: { featureName: 'SendTransaction', value: requiredFeature } }\n });\n }\n\n if (options.requireExtraCurrencies) {\n if (!sendTransactionFeature || !sendTransactionFeature.extraCurrencySupported) {\n throw new WalletNotSupportFeatureError(\n `Wallet is not able to handle such SendTransaction request. Extra currencies support is required.`,\n {\n cause: {\n requiredFeature: { featureName: 'SendTransaction', value: requiredFeature }\n }\n }\n );\n }\n }\n\n if (sendTransactionFeature && sendTransactionFeature.maxMessages !== undefined) {\n if (sendTransactionFeature.maxMessages < options.requiredMessagesNumber) {\n throw new WalletNotSupportFeatureError(\n `Wallet is not able to handle such SendTransaction request. Max support messages number is ${sendTransactionFeature.maxMessages}, but ${options.requiredMessagesNumber} is required.`,\n {\n cause: {\n requiredFeature: { featureName: 'SendTransaction', value: requiredFeature }\n }\n }\n );\n }\n return;\n }\n\n logWarning(\n \"Connected wallet didn't provide information about max allowed messages in the SendTransaction request. Request may be rejected by the wallet.\"\n );\n}\n\nexport function checkSignDataSupport(\n features: Feature[],\n options: { requiredTypes: SignDataFeature['types'] }\n): never | void {\n const signDataFeature = features.find(\n feature => feature && typeof feature === 'object' && feature.name === 'SignData'\n ) as SignDataFeature;\n\n if (!signDataFeature) {\n throw new WalletNotSupportFeatureError(\"Wallet doesn't support SignData feature.\", {\n cause: {\n requiredFeature: {\n featureName: 'SignData',\n value: { types: options.requiredTypes }\n }\n }\n });\n }\n\n const unsupportedTypes = options.requiredTypes.filter(\n requiredType => !signDataFeature.types.includes(requiredType)\n );\n\n if (unsupportedTypes.length) {\n throw new WalletNotSupportFeatureError(\n `Wallet doesn't support required SignData types: ${unsupportedTypes.join(', ')}.`,\n {\n cause: {\n requiredFeature: { featureName: 'SignData', value: { types: unsupportedTypes } }\n }\n }\n );\n }\n}\n\nexport function checkRequiredWalletFeatures(\n features: Feature[],\n walletsRequiredFeatures?: RequiredFeatures\n): boolean {\n if (typeof walletsRequiredFeatures !== 'object') {\n return true;\n }\n\n const { sendTransaction, signData } = walletsRequiredFeatures;\n\n if (sendTransaction) {\n const feature = findFeature(features, 'SendTransaction');\n if (!feature) {\n return false;\n }\n\n if (!checkSendTransaction(feature, sendTransaction)) {\n return false;\n }\n }\n\n if (signData) {\n const feature = findFeature(features, 'SignData');\n if (!feature) {\n return false;\n }\n\n if (!checkSignData(feature, signData)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction findFeature<T extends Exclude<Feature, 'SendTransaction'>, P extends T['name']>(\n features: Feature[],\n requiredFeatureName: P\n): (T & { name: P }) | undefined {\n return features.find(f => f && typeof f === 'object' && f.name === requiredFeatureName) as\n | (T & {\n name: P;\n })\n | undefined;\n}\n\nfunction checkSendTransaction(\n feature: SendTransactionFeature,\n requiredFeature: RequiredSendTransactionFeature\n): boolean {\n const correctMessagesNumber =\n requiredFeature.minMessages === undefined ||\n requiredFeature.minMessages <= feature.maxMessages;\n\n const correctExtraCurrency =\n !requiredFeature.extraCurrencyRequired || feature.extraCurrencySupported;\n\n return !!(correctMessagesNumber && correctExtraCurrency);\n}\n\nfunction checkSignData(\n feature: SignDataFeature,\n requiredFeature: RequiredSignDataFeature\n): boolean {\n return requiredFeature.types.every(requiredType => feature.types.includes(requiredType));\n}\n","export { BadRequestError } from './bad-request.error';\nexport { UnknownAppError } from './unknown-app.error';\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when passed hex is in incorrect format.\n */\nexport class ParseHexError extends TonConnectError {\n protected get info(): string {\n return 'Passed hex is in incorrect format.';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, ParseHexError.prototype);\n }\n}\n","import {\n AppRequest,\n ConnectEvent,\n ConnectRequest,\n DeviceInfo,\n RpcMethod,\n WalletEvent,\n WalletResponse\n} from '@tonconnect/protocol';\nimport { WalletInfoDTO } from 'src/models/wallet/wallet-info';\nimport { hasProperties, hasProperty, OptionalTraceable } from 'src/utils/types';\n\nexport interface InjectedWalletApi {\n deviceInfo: DeviceInfo;\n walletInfo: Pick<\n WalletInfoDTO,\n 'name' | 'app_name' | 'tondns' | 'image' | 'about_url' | 'platforms' | 'features'\n >;\n protocolVersion: number;\n isWalletBrowser: boolean;\n connect(\n protocolVersion: number,\n message: ConnectRequest,\n options?: OptionalTraceable\n ): Promise<OptionalTraceable<ConnectEvent>>;\n restoreConnection(options?: OptionalTraceable): Promise<OptionalTraceable<ConnectEvent>>;\n send<T extends RpcMethod>(\n message: AppRequest<T>,\n options?: OptionalTraceable\n ): Promise<WalletResponse<T>>;\n listen(callback: (event: OptionalTraceable<WalletEvent>) => void): () => void;\n\n /**\n * @deprecated\n */\n disconnect(): void;\n}\n\nexport function isJSBridgeWithMetadata(value: unknown): value is { tonconnect: InjectedWalletApi } {\n try {\n if (!hasProperty(value, 'tonconnect') || !hasProperty(value.tonconnect, 'walletInfo')) {\n return false;\n }\n\n return hasProperties(value.tonconnect.walletInfo, [\n 'name',\n 'app_name',\n 'image',\n 'about_url',\n 'platforms'\n ]);\n } catch {\n return false;\n }\n}\n","declare const TON_CONNECT_SDK_VERSION: string;\n\nexport const tonConnectSdkVersion = TON_CONNECT_SDK_VERSION;\n","import { TonConnectError } from 'src/errors';\nimport { createAbortController } from 'src/utils/create-abort-controller';\n\n/**\n * Represents the options for deferring a task.\n */\nexport type DeferOptions = {\n /**\n * The timeout in milliseconds after which the task should be aborted.\n */\n timeout?: number;\n\n /**\n * An optional AbortSignal to use for aborting the task.\n */\n signal?: AbortSignal;\n};\n\n/**\n * Represents a deferrable action that can be executed asynchronously.\n *\n * @template T The type of the value returned by the deferrable action.\n * @param {DeferOptions} [options] The options to configure the deferrable action.\n * @returns {Promise<T>} A promise that resolves with the result of the deferrable action.\n */\nexport type Deferrable<T> = (\n resolve: (value: T) => void,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n reject: (reason?: any) => void,\n options: DeferOptions\n) => Promise<void>;\n\n/**\n * Executes a function and provides deferred behavior, allowing for a timeout and abort functionality.\n *\n * @param {Deferrable<T>} fn - The function to execute. It should return a promise that resolves with the desired result.\n * @param {DeferOptions} options - Optional configuration options for the defer behavior.\n * @returns {Promise<T>} - A promise that resolves with the result of the executed function, or rejects with an error if it times out or is aborted.\n */\nexport function timeout<T>(fn: Deferrable<T>, options?: DeferOptions): Promise<T> {\n const timeout = options?.timeout;\n const signal = options?.signal;\n\n const abortController = createAbortController(signal);\n\n return new Promise(async (resolve, reject) => {\n if (abortController.signal.aborted) {\n reject(new TonConnectError('Operation aborted'));\n return;\n }\n\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n if (typeof timeout !== 'undefined') {\n timeoutId = setTimeout(() => {\n abortController.abort();\n reject(new TonConnectError(`Timeout after ${timeout}ms`));\n }, timeout);\n }\n\n abortController.signal.addEventListener(\n 'abort',\n () => {\n clearTimeout(timeoutId);\n reject(new TonConnectError('Operation aborted'));\n },\n { once: true }\n );\n\n const deferOptions = { timeout, abort: abortController.signal };\n await fn(\n (...args) => {\n clearTimeout(timeoutId);\n resolve(...args);\n },\n () => {\n clearTimeout(timeoutId);\n reject();\n },\n deferOptions\n );\n });\n}\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when there is an attempt to connect to the injected wallet while it is not exists in the webpage.\n */\nexport class WalletNotInjectedError extends TonConnectError {\n protected get info(): string {\n return 'There is an attempt to connect to the injected wallet while it is not exists in the webpage.';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, WalletNotInjectedError.prototype);\n }\n}\n","import { SessionCrypto } from '@tonconnect/protocol';\nimport { TonConnectError } from 'src/errors';\nimport { BridgeSessionRaw } from 'src/provider/bridge/models/bridge-session-raw';\nimport {\n BridgeConnection,\n BridgeConnectionHttp,\n BridgeConnectionHttpRaw,\n BridgeConnectionInjected,\n BridgeConnectionRaw,\n BridgeConnectionWalletConnect,\n BridgePendingConnectionHttp,\n BridgePendingConnectionHttpRaw,\n isExpiredPendingConnectionHttpRaw,\n isPendingConnectionHttp,\n isPendingConnectionHttpRaw\n} from 'src/provider/bridge/models/bridge-connection';\nimport { IStorage } from 'src/storage/models/storage.interface';\nimport { logDebug } from 'src/utils/log';\nimport { WalletsListManager } from 'src/wallets-list-manager';\n\nexport class BridgeConnectionStorage {\n private readonly storeKey = 'ton-connect-storage_bridge-connection';\n\n constructor(\n public readonly storage: IStorage,\n private readonly walletsListManager: WalletsListManager\n ) {}\n\n public async storeConnection(connection: BridgeConnection): Promise<void> {\n if (connection.type === 'injected' || connection.type === 'wallet-connect') {\n return this.storage.setItem(this.storeKey, JSON.stringify(connection));\n }\n\n if (!isPendingConnectionHttp(connection)) {\n const rawSession: BridgeSessionRaw = {\n sessionKeyPair: connection.session.sessionCrypto.stringifyKeypair(),\n walletPublicKey: connection.session.walletPublicKey,\n bridgeUrl: connection.session.bridgeUrl\n };\n\n const rawConnection: BridgeConnectionHttpRaw = {\n type: 'http',\n connectEvent: connection.connectEvent,\n session: rawSession,\n lastWalletEventId: connection.lastWalletEventId,\n nextRpcRequestId: connection.nextRpcRequestId\n };\n return this.storage.setItem(this.storeKey, JSON.stringify(rawConnection));\n }\n\n const rawConnection: BridgePendingConnectionHttpRaw = {\n type: 'http',\n connectionSource: connection.connectionSource,\n sessionCrypto: connection.sessionCrypto.stringifyKeypair(),\n createdAt: Date.now()\n };\n\n return this.storage.setItem(this.storeKey, JSON.stringify(rawConnection));\n }\n\n public async removeConnection(): Promise<void> {\n return this.storage.removeItem(this.storeKey);\n }\n\n public async getConnection(): Promise<BridgeConnection | null> {\n try {\n const stored = await this.storage.getItem(this.storeKey);\n if (!stored) {\n return null;\n }\n\n const connection: BridgeConnectionRaw = JSON.parse(stored);\n\n if (connection.type === 'injected' || connection.type === 'wallet-connect') {\n return connection;\n }\n\n if (!isPendingConnectionHttpRaw(connection)) {\n const sessionCrypto = new SessionCrypto(connection.session.sessionKeyPair);\n return await this.actualizeBridgeConnection({\n type: 'http',\n connectEvent: connection.connectEvent,\n lastWalletEventId: connection.lastWalletEventId,\n nextRpcRequestId: connection.nextRpcRequestId,\n session: {\n sessionCrypto,\n bridgeUrl: connection.session.bridgeUrl,\n walletPublicKey: connection.session.walletPublicKey\n }\n });\n }\n\n if (isExpiredPendingConnectionHttpRaw(connection)) {\n await this.removeConnection();\n return null;\n }\n\n return {\n type: 'http',\n sessionCrypto: new SessionCrypto(connection.sessionCrypto),\n connectionSource: connection.connectionSource\n };\n } catch (err) {\n logDebug('Error retrieving connection', err);\n return null;\n }\n }\n\n public async getHttpConnection(): Promise<BridgeConnectionHttp | BridgePendingConnectionHttp> {\n const connection = await this.getConnection();\n if (!connection) {\n throw new TonConnectError(\n 'Trying to read HTTP connection source while nothing is stored'\n );\n }\n\n if (connection.type !== 'http') {\n throw new TonConnectError(\n `Trying to read HTTP connection source while ${connection.type} connection is stored`\n );\n }\n\n return connection;\n }\n\n public async getHttpPendingConnection(): Promise<BridgePendingConnectionHttp> {\n const connection = await this.getConnection();\n if (!connection) {\n throw new TonConnectError(\n 'Trying to read HTTP connection source while nothing is stored'\n );\n }\n\n if (connection.type !== 'http') {\n throw new TonConnectError(\n `Trying to read HTTP connection source while ${connection.type} connection is stored`\n );\n }\n\n if (!isPendingConnectionHttp(connection)) {\n throw new TonConnectError(\n 'Trying to read HTTP-pending connection while http connection is stored'\n );\n }\n\n return connection;\n }\n\n public async getInjectedConnection(): Promise<BridgeConnectionInjected> {\n const connection = await this.getConnection();\n\n if (!connection) {\n throw new TonConnectError(\n 'Trying to read Injected bridge connection source while nothing is stored'\n );\n }\n\n if (connection?.type !== 'injected') {\n throw new TonConnectError(\n `Trying to read Injected bridge connection source while ${connection.type} connection is stored`\n );\n }\n\n return connection;\n }\n\n public async getWalletConnectConnection(): Promise<BridgeConnectionWalletConnect> {\n const connection = await this.getConnection();\n if (!connection) {\n throw new TonConnectError(\n 'Trying to read wallet connect bridge connection source while nothing is stored'\n );\n }\n\n if (connection?.type !== 'wallet-connect') {\n throw new TonConnectError(\n `Trying to read wallet connect bridge connection source while ${connection.type} connection is stored`\n );\n }\n\n return connection;\n }\n\n public async storedConnectionType(): Promise<BridgeConnection['type'] | null> {\n const stored = await this.storage.getItem(this.storeKey);\n if (!stored) {\n return null;\n }\n const connection: BridgeConnection = JSON.parse(stored);\n return connection.type;\n }\n\n public async storeLastWalletEventId(id: number): Promise<void> {\n const connection = await this.getConnection();\n if (connection && connection.type === 'http' && !isPendingConnectionHttp(connection)) {\n connection.lastWalletEventId = id;\n return this.storeConnection(connection);\n }\n }\n\n public async getLastWalletEventId(): Promise<number | undefined> {\n const connection = await this.getConnection();\n if (connection && 'lastWalletEventId' in connection) {\n return connection.lastWalletEventId;\n }\n\n return undefined;\n }\n\n public async increaseNextRpcRequestId(): Promise<void> {\n const connection = await this.getConnection();\n if (connection && 'nextRpcRequestId' in connection) {\n const lastId = connection.nextRpcRequestId || 0;\n connection.nextRpcRequestId = lastId + 1;\n return this.storeConnection(connection);\n }\n }\n\n public async getNextRpcRequestId(): Promise<number> {\n const connection = await this.getConnection();\n if (connection && 'nextRpcRequestId' in connection) {\n return connection.nextRpcRequestId || 0;\n }\n\n return 0;\n }\n\n private async actualizeBridgeConnection(\n connection: BridgeConnectionHttp\n ): Promise<BridgeConnectionHttp> {\n try {\n const appName = connection.connectEvent.payload.device.appName;\n const wallet = await this.walletsListManager.getRemoteWallet(appName);\n\n if (wallet.bridgeUrl === connection.session.bridgeUrl) {\n return connection;\n }\n\n const actualizedConnection = {\n ...connection,\n session: {\n ...connection.session,\n bridgeUrl: wallet.bridgeUrl\n }\n } satisfies BridgeConnectionHttp;\n\n await this.storeConnection(actualizedConnection);\n\n return actualizedConnection;\n } catch (error) {\n logDebug('Failed to actualize bridge connection', error);\n return connection;\n }\n }\n}\n","import {\n AppRequest,\n CHAIN,\n CONNECT_EVENT_ERROR_CODES,\n ConnectItemReply,\n ConnectRequest,\n DeviceInfo,\n DISCONNECT_ERROR_CODES,\n DisconnectRpcResponseSuccess,\n Feature,\n RpcMethod,\n SEND_TRANSACTION_ERROR_CODES,\n SendTransactionRpcResponseSuccess,\n SignDataRpcResponseSuccess,\n TonProofItemReplySuccess,\n WalletResponseTemplateError\n} from '@tonconnect/protocol';\nimport { TraceableWalletEvent, TraceableWalletResponse } from 'src/models/wallet/traceable-events';\nimport { OptionalTraceable, Traceable, WithoutId } from 'src/utils/types';\nimport { UUIDv7 } from 'src/utils/uuid';\nimport { InternalProvider } from 'src/provider/provider';\nimport { BridgeConnectionStorage } from 'src/storage/bridge-connection-storage';\nimport { TonConnectError } from 'src/errors';\nimport {\n isValidUserFriendlyAddress,\n parseUserFriendlyAddress,\n toRawAddress\n} from 'src/utils/address';\nimport {\n getUniversalConnector,\n getWalletConnectOptions\n} from 'src/provider/wallet-connect/initialize';\nimport { logDebug } from 'src/utils/log';\nimport { createAbortController } from 'src/utils/create-abort-controller';\nimport { WalletConnectMetadata } from 'src/provider/wallet-connect/models/wallet-connect-options';\n\nconst DEFAULT_REQUEST_ID = '0';\nconst DEFAULT_EVENT_ID = 0;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype UniversalConnector = any;\n\nexport class WalletConnectProvider implements InternalProvider {\n public readonly type = 'injected';\n\n private listeners: Array<(e: TraceableWalletEvent) => void> = [];\n\n private connector: UniversalConnector | undefined = undefined;\n\n private abortController?: AbortController;\n\n private readonly config: {\n projectId: string;\n metadata: WalletConnectMetadata;\n networks: {\n namespace: 'ton';\n methods: string[];\n events: [];\n chains: {\n id: string | number;\n chainNamespace: 'ton';\n caipNetworkId: `ton:${number}`;\n name: 'TON';\n nativeCurrency: { name: 'TON'; symbol: 'TON'; decimals: 9 };\n rpcUrls: { default: { http: [] } };\n }[];\n }[];\n };\n\n constructor(private readonly connectionStorage: BridgeConnectionStorage) {\n const { projectId, metadata } = getWalletConnectOptions();\n\n this.config = {\n networks: [\n {\n namespace: 'ton',\n chains: [\n {\n id: -239,\n chainNamespace: 'ton',\n caipNetworkId: 'ton:-239',\n name: 'TON',\n nativeCurrency: { name: 'TON', symbol: 'TON', decimals: 9 },\n rpcUrls: { default: { http: [] } }\n },\n {\n id: -3,\n chainNamespace: 'ton',\n caipNetworkId: 'ton:-3',\n name: 'TON',\n nativeCurrency: { name: 'TON', symbol: 'TON', decimals: 9 },\n rpcUrls: { default: { http: [] } }\n }\n ],\n methods: ['ton_sendMessage', 'ton_signData'],\n events: []\n }\n ],\n projectId,\n metadata\n };\n }\n\n public static async fromStorage(\n storage: BridgeConnectionStorage\n ): Promise<WalletConnectProvider> {\n return new WalletConnectProvider(storage);\n }\n\n private async initialize(): Promise<UniversalConnector> {\n if (!this.connector) {\n this.connector = await getUniversalConnector().init(this.config);\n }\n\n return this.connector;\n }\n\n connect(message: ConnectRequest, options?: OptionalTraceable<{ signal?: AbortSignal }>): void {\n const traceId = options?.traceId ?? UUIDv7();\n const abortController = createAbortController(options?.signal);\n this.abortController?.abort();\n this.abortController = abortController;\n\n void this._connect(message, {\n traceId,\n signal: abortController.signal,\n abortController\n }).catch(error => logDebug('WalletConnect connect unexpected error', error));\n }\n\n async _connect(\n message: ConnectRequest,\n options: Traceable<{ signal?: AbortSignal; abortController: AbortController }>\n ) {\n const connector = await this.initialize();\n\n if (options.signal?.aborted) {\n logDebug('WalletConnect connect aborted before start');\n this.clearAbortController(options.abortController);\n return;\n }\n\n const tonProof = message.items.find(item => item.name === 'ton_proof');\n\n const authentication = tonProof\n ? [\n {\n domain: new URL(this.config.metadata.url).hostname,\n chains: ['ton:-239'],\n nonce: '',\n uri: 'ton_proof',\n ttl: 0,\n statement: tonProof.payload\n }\n ]\n : undefined;\n logDebug('Connecting through this.connector.connect');\n\n try {\n await connector.connect({ authentication });\n } catch (error) {\n if (options.signal?.aborted) {\n logDebug('WalletConnect connect aborted via signal');\n this.clearAbortController(options.abortController);\n return;\n }\n\n logDebug('WalletConnect connect error', error);\n const event = {\n id: DEFAULT_EVENT_ID,\n event: 'connect_error',\n traceId: options.traceId,\n payload: {\n code: CONNECT_EVENT_ERROR_CODES.USER_REJECTS_ERROR,\n message: 'User declined the connection'\n }\n } as const;\n\n logDebug('WalletConnect connect response:', event);\n this.emit(event);\n this.clearAbortController(options.abortController);\n return;\n }\n\n logDebug('Connected through this.connector.connect');\n\n try {\n await this.onConnect(connector, { ...options, includeTonProof: true });\n } catch (error) {\n logDebug('WalletConnect onConnect error', error);\n await this.disconnect({ traceId: options.traceId, signal: options.signal });\n } finally {\n this.clearAbortController(options.abortController);\n }\n }\n\n async restoreConnection(\n options?: OptionalTraceable<{ openingDeadlineMS?: number; signal?: AbortSignal }>\n ): Promise<void> {\n const traceId = options?.traceId ?? UUIDv7();\n const abortController = createAbortController(options?.signal);\n this.abortController?.abort();\n this.abortController = abortController;\n\n if (abortController.signal.aborted) {\n return;\n }\n\n try {\n logDebug('Restoring WalletConnect connection...');\n const storedConnection = await this.connectionStorage.getWalletConnectConnection();\n if (!storedConnection || abortController.signal.aborted) {\n return;\n }\n\n const connector = await this.initialize();\n if (abortController.signal.aborted) {\n return;\n }\n\n await this.onConnect(connector, {\n includeTonProof: false,\n traceId,\n signal: abortController.signal\n });\n logDebug('WalletConnect successfully restored.');\n } catch (error) {\n logDebug('WalletConnect restore error', error);\n await this.disconnect({ traceId, signal: abortController.signal });\n } finally {\n this.clearAbortController(abortController);\n }\n }\n\n closeConnection(): void {\n this.abortController?.abort();\n this.abortController = undefined;\n void this.disconnect();\n }\n\n async disconnect(options?: OptionalTraceable<{ signal?: AbortSignal }>): Promise<void> {\n const abortController = createAbortController(options?.signal);\n this.abortController?.abort();\n this.abortController = abortController;\n\n if (abortController.signal.aborted) {\n return;\n }\n\n try {\n await this.connectionStorage.removeConnection();\n if (abortController.signal.aborted) {\n return;\n }\n await this.connector?.disconnect();\n } catch (error) {\n logDebug('WalletConnect disconnect error', error);\n } finally {\n this.clearAbortController(abortController);\n }\n }\n\n sendRequest<T extends RpcMethod>(\n request: WithoutId<AppRequest<T>>,\n options?: OptionalTraceable<{\n onRequestSent?: () => void;\n signal?: AbortSignal;\n attempts?: number;\n }>\n ): Promise<TraceableWalletResponse<T>>;\n sendRequest<T extends RpcMethod>(\n request: WithoutId<AppRequest<T>>,\n onRequestSent?: () => void\n ): Promise<TraceableWalletResponse<T>>;\n async sendRequest<T extends RpcMethod>(\n request: WithoutId<AppRequest<T>>,\n optionsOrOnRequestSent?:\n | (() => void)\n | OptionalTraceable<{\n attempts?: number;\n onRequestSent?: () => void;\n signal?: AbortSignal;\n }>\n ): Promise<TraceableWalletResponse<T>> {\n if (!this.connector) {\n throw new TonConnectError('Wallet Connect not initialized');\n }\n\n const options: OptionalTraceable<{\n onRequestSent?: () => void;\n signal?: AbortSignal;\n attempts?: number;\n }> = {};\n if (typeof optionsOrOnRequestSent === 'function') {\n options.onRequestSent = optionsOrOnRequestSent;\n } else {\n options.onRequestSent = optionsOrOnRequestSent?.onRequestSent;\n options.signal = optionsOrOnRequestSent?.signal;\n options.attempts = optionsOrOnRequestSent?.attempts;\n options.traceId = optionsOrOnRequestSent?.traceId;\n }\n options.traceId ??= UUIDv7();\n\n try {\n if (options.signal?.aborted) {\n throw new TonConnectError('WalletConnect request aborted');\n }\n\n logDebug('Send wallet-connect request:', { ...request, id: DEFAULT_REQUEST_ID });\n\n if (request.method === 'sendTransaction') {\n const { network, ...sendTransactionPayload } = JSON.parse(request.params[0]!);\n\n const promise = this.connector!.request(\n {\n method: 'ton_sendMessage',\n params: sendTransactionPayload\n },\n `ton:${network}`\n );\n\n options?.onRequestSent?.();\n\n const result = (await promise) as WithoutId<SendTransactionRpcResponseSuccess>;\n logDebug('Wallet message received:', { result, id: DEFAULT_REQUEST_ID });\n\n return {\n result,\n id: DEFAULT_REQUEST_ID,\n traceId: options.traceId\n };\n } else if (request.method === 'signData') {\n const { network, ...signDataPayload } = JSON.parse(request.params[0]!);\n\n const promise = this.connector!.request(\n {\n method: 'ton_signData',\n params: signDataPayload\n },\n `ton:${network}`\n );\n\n options?.onRequestSent?.();\n\n const result = (await promise) as WithoutId<SignDataRpcResponseSuccess>;\n\n logDebug('Wallet message received:', { result, id: DEFAULT_REQUEST_ID });\n\n return { result, traceId: options.traceId, id: DEFAULT_REQUEST_ID };\n } else if (request.method === 'disconnect') {\n return {\n id: DEFAULT_REQUEST_ID,\n traceId: options.traceId\n } as Traceable<DisconnectRpcResponseSuccess>;\n }\n } catch (error) {\n logDebug('WalletConnect request error', error, error.stack);\n const result = (await this.handleWalletConnectError(error, {\n traceId: options.traceId\n })) as TraceableWalletResponse<T>;\n\n logDebug('Wallet message received:', result);\n\n return result;\n }\n\n return {\n id: DEFAULT_REQUEST_ID,\n error: { code: DISCONNECT_ERROR_CODES.UNKNOWN_ERROR, message: 'Not implemented.' },\n traceId: options.traceId\n };\n }\n\n private async handleWalletConnectError(\n error: unknown,\n options: Traceable\n ): Promise<Traceable<WalletResponseTemplateError>> {\n if (typeof error === 'object' && error !== null) {\n const message = String(\n 'message' in error ? error.message : 'msg' in error ? error.msg : error\n );\n\n if (message.toLowerCase().includes('reject')) {\n return {\n id: DEFAULT_REQUEST_ID,\n traceId: options.traceId,\n error: {\n code: SEND_TRANSACTION_ERROR_CODES.USER_REJECTS_ERROR,\n message\n }\n };\n }\n if (message.toLowerCase().includes('tonvalidationerror')) {\n return {\n id: DEFAULT_REQUEST_ID,\n traceId: options.traceId,\n error: {\n code: SEND_TRANSACTION_ERROR_CODES.BAD_REQUEST_ERROR,\n message\n }\n };\n }\n\n return {\n id: DEFAULT_REQUEST_ID,\n traceId: options.traceId,\n error: {\n code: SEND_TRANSACTION_ERROR_CODES.UNKNOWN_ERROR,\n message\n }\n };\n }\n\n return {\n id: DEFAULT_REQUEST_ID,\n traceId: options.traceId,\n error: {\n code: SEND_TRANSACTION_ERROR_CODES.UNKNOWN_ERROR,\n message: String(error)\n }\n };\n }\n\n public listen(callback: (e: TraceableWalletEvent) => void): () => void {\n this.listeners.push(callback);\n return () => (this.listeners = this.listeners.filter(listener => listener !== callback));\n }\n\n private buildTonProof(connector: UniversalConnector): TonProofItemReplySuccess | undefined {\n const auth = connector.provider.session!.authentication?.[0];\n const iat = auth?.p?.iat;\n const statement = auth?.p?.statement;\n\n if (!iat || !statement) {\n return;\n }\n\n const domain = auth.p.domain;\n return {\n name: 'ton_proof',\n proof: {\n timestamp: Math.floor(new Date(iat).getTime() / 1000),\n domain: {\n lengthBytes: domain.length,\n value: domain\n },\n payload: statement,\n signature: auth.s.s\n }\n } as const;\n }\n\n private async onConnect(\n connector: UniversalConnector,\n options: Traceable<{ includeTonProof?: boolean; signal?: AbortSignal }>\n ) {\n if (options.signal?.aborted) {\n logDebug('WalletConnect onConnect aborted');\n return;\n }\n\n const session = connector.provider.session!;\n\n const tonNamespace = session.namespaces['ton'];\n if (!tonNamespace?.accounts?.[0]) {\n await this.disconnectWithError({\n traceId: options.traceId,\n code: CONNECT_EVENT_ERROR_CODES.BAD_REQUEST_ERROR,\n message: 'Connection error. No TON accounts connected.'\n });\n return;\n }\n\n const account = tonNamespace.accounts[0];\n const [, network, address] = account.split(':', 3);\n\n const publicKey = session.sessionProperties?.ton_getPublicKey;\n\n if (!publicKey) {\n await this.disconnectWithError({\n traceId: options.traceId,\n code: CONNECT_EVENT_ERROR_CODES.BAD_REQUEST_ERROR,\n message: 'Connection error. No sessionProperties.ton_getPublicKey provided.'\n });\n return;\n }\n\n const stateInit = session.sessionProperties?.ton_getStateInit;\n if (!stateInit) {\n await this.disconnectWithError({\n traceId: options.traceId,\n code: CONNECT_EVENT_ERROR_CODES.BAD_REQUEST_ERROR,\n message: 'Connection error. No sessionProperties.ton_getStateInit provided.'\n });\n\n return;\n }\n\n connector.provider.once('session_delete', async () => {\n try {\n await this.connectionStorage.removeConnection();\n const event = {\n event: 'disconnect',\n traceId: UUIDv7(),\n payload: {}\n } as const;\n logDebug('Wallet message received:', event);\n this.emit(event);\n } catch (err) {\n logDebug('Error while deleting session', err);\n }\n });\n\n const tonProof = options?.includeTonProof ? this.buildTonProof(connector) : undefined;\n\n const parsedAddress = isValidUserFriendlyAddress(address!)\n ? toRawAddress(parseUserFriendlyAddress(address!))\n : address!;\n\n const features = this.buildFeatureList(tonNamespace.methods);\n\n const payload: {\n items: ConnectItemReply[];\n device: DeviceInfo;\n } = {\n items: [\n {\n name: 'ton_addr',\n address: parsedAddress,\n network: network as CHAIN,\n publicKey,\n walletStateInit: stateInit\n },\n ...(tonProof ? [tonProof] : [])\n ],\n device: {\n appName: 'wallet_connect',\n appVersion: '',\n maxProtocolVersion: 2,\n features,\n platform: 'browser'\n }\n };\n\n logDebug('WalletConnect connect response:', {\n event: 'connect',\n payload,\n id: DEFAULT_EVENT_ID\n });\n\n this.emit({ event: 'connect', payload, traceId: options.traceId });\n\n await this.storeConnection();\n }\n\n private buildFeatureList(methods: string[]) {\n const features: Feature[] = [];\n if (methods.includes('ton_sendMessage')) {\n features.push('SendTransaction', {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n });\n }\n if (methods.includes('ton_signData')) {\n features.push({ name: 'SignData', types: ['text', 'binary', 'cell'] });\n }\n return features;\n }\n\n private async disconnectWithError(\n options: Traceable<{ code: CONNECT_EVENT_ERROR_CODES; message: string }>\n ): Promise<void> {\n await this.disconnect();\n\n const payload = {\n code: options.code,\n message: options.message\n };\n\n logDebug('WalletConnect connect response:', {\n event: 'connect_error',\n id: DEFAULT_EVENT_ID,\n payload\n });\n\n this.emit({\n event: 'connect_error',\n traceId: options.traceId,\n payload\n });\n }\n\n private clearAbortController(abortController: AbortController): void {\n if (this.abortController === abortController) {\n this.abortController = undefined;\n }\n }\n\n private emit(event: TraceableWalletEvent, listeners?: typeof this.listeners) {\n (listeners ?? this.listeners).forEach(listener => listener(event));\n }\n\n private storeConnection(): Promise<void> {\n return this.connectionStorage.storeConnection({\n type: 'wallet-connect'\n });\n }\n}\n","import { delay } from 'src/utils/delay';\nimport { TonConnectError } from 'src/errors';\nimport { createAbortController } from 'src/utils/create-abort-controller';\n\n/**\n * Configuration options for the callForSuccess function.\n */\nexport type CallForSuccessOptions = {\n /**\n * An 'AbortSignal' object that can be used to abort the function.\n */\n signal?: AbortSignal;\n\n /**\n * The number of attempts to make before giving up. Default is 20.\n */\n attempts?: number;\n\n /**\n * The delay in milliseconds between each attempt. Default is 200ms.\n */\n delayMs?: number;\n};\n\n/**\n * Function to call ton api until we get response.\n * Because ton network is pretty unstable we need to make sure response is final.\n * @param {T} fn - function to call\n * @param {CallForSuccessOptions} [options] - optional configuration options\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function callForSuccess<T extends (options: { signal?: AbortSignal }) => Promise<any>>(\n fn: T,\n options?: CallForSuccessOptions\n): Promise<Awaited<ReturnType<T>>> {\n const attempts = options?.attempts ?? 10;\n const delayMs = options?.delayMs ?? 200;\n const abortController = createAbortController(options?.signal);\n\n if (typeof fn !== 'function') {\n throw new TonConnectError(`Expected a function, got ${typeof fn}`);\n }\n\n let i = 0;\n let lastError: unknown;\n\n while (i < attempts) {\n if (abortController.signal.aborted) {\n throw new TonConnectError(`Aborted after attempts ${i}`);\n }\n\n try {\n return await fn({ signal: abortController.signal });\n } catch (err) {\n lastError = err;\n i++;\n\n if (i < attempts) {\n await delay(delayMs);\n }\n }\n }\n\n throw lastError;\n}\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when user rejects the action in the wallet.\n */\nexport class UserRejectsError extends TonConnectError {\n protected get info(): string {\n return 'User rejects the action in the wallet.';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, UserRejectsError.prototype);\n }\n}\n","export { ParseHexError } from './parse-hex.error';\n","export { WrongAddressError } from './wrong-address.error';\n","import {\n AppRequest,\n RpcMethod,\n WalletResponse,\n WalletResponseError,\n WalletResponseSuccess\n} from '@tonconnect/protocol';\nimport { WithoutId } from 'src/utils/types';\n\nexport abstract class RpcParser<T extends RpcMethod> {\n abstract convertToRpcRequest(...args: unknown[]): WithoutId<AppRequest<T>>;\n\n abstract convertFromRpcResponse(rpcResponse: WithoutId<WalletResponseSuccess<T>>): unknown;\n\n abstract parseAndThrowError(response: WithoutId<WalletResponseError<T>>): never;\n\n public isError(\n response: WithoutId<WalletResponse<T>>\n ): response is WithoutId<WalletResponseError<T>> {\n return 'error' in response;\n }\n}\n","import { WalletConnectOptions } from 'src/provider/wallet-connect/models/wallet-connect-options';\nimport { TonConnectError } from 'src/errors';\n\nconst state: {\n UniversalConnectorCls?: unknown;\n walletConnectOptions?: WalletConnectOptions;\n} = {};\n\n/**\n * Initializes the WalletConnect integration.\n *\n * This function must be called once before using WalletConnect features.\n * A second call will throw an error to prevent accidental re-initialization.\n *\n * @param UniversalConnectorCls - A UniversalConnector class imported from '@reown/appkit-universal-connector'\n * @param {WalletConnectOptions} walletConnectOptions - Configuration options used for initializing WalletConnect.\n * @example\n * import { UniversalConnector } from '@reown/appkit-universal-connector';\n *\n * initializeWalletConnect(UniversalConnector, {\n * projectId: 'abcd1234abcd1234abcd1234abcd1234',\n * metadata: {\n * name: 'Demo DApp',\n * icons: [\n * 'https://example.com/my-icon.png'\n * ],\n * url: window.location.origin,\n * description: 'Demo DApp'\n * }\n * });\n */\nexport function initializeWalletConnect(\n UniversalConnectorCls: Function,\n walletConnectOptions: WalletConnectOptions\n) {\n if (state?.walletConnectOptions !== undefined || state?.UniversalConnectorCls !== undefined) {\n throw new TonConnectError('Wallet Connect already initialized.');\n }\n\n if (typeof UniversalConnectorCls !== 'function' || !('init' in UniversalConnectorCls)) {\n throw new TonConnectError('Initialize UniversalConnectorCls must be set');\n }\n\n state.UniversalConnectorCls = UniversalConnectorCls;\n state.walletConnectOptions = walletConnectOptions;\n}\n\nexport function isWalletConnectInitialized() {\n return state.UniversalConnectorCls !== undefined && state.walletConnectOptions !== undefined;\n}\n\nexport function getUniversalConnector(): { init: Function } {\n if (state.UniversalConnectorCls === undefined) {\n throw new TonConnectError('Wallet Connect is not initialized.');\n }\n return state.UniversalConnectorCls as { init: Function };\n}\n\nexport function getWalletConnectOptions(): WalletConnectOptions {\n if (state.walletConnectOptions === undefined) {\n throw new TonConnectError('Wallet Connect is not initialized.');\n }\n return state.walletConnectOptions;\n}\n","/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2010-2020 Robert Kieffer and other contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport { regex } from './regex';\n\nexport function validate(uuid: unknown) {\n return typeof uuid === 'string' && regex.test(uuid);\n}\n","export type WalletConnectionSource =\n | WalletConnectionSourceHTTP\n | WalletConnectionSourceJS\n | WalletConnectionSourceWalletConnect;\n\nexport interface WalletConnectionSourceHTTP {\n /**\n * Base part of the wallet universal url. The link should support [Ton Connect parameters]{@link https://github.com/ton-connect/docs/blob/main/bridge.md#universal-link}.\n */\n universalLink: string;\n\n /**\n * Url of the wallet's implementation of the [HTTP bridge]{@link https://github.com/ton-connect/docs/blob/main/bridge.md#http-bridge}.\n */\n bridgeUrl: string;\n}\n\nexport interface WalletConnectionSourceJS {\n /**\n * If the wallet handles JS Bridge connection, specifies the binding for the bridge object accessible through window. Example: the key \"tonkeeper\" means the bridge can be accessed as window.tonkeeper.\n */\n jsBridgeKey: string;\n}\n\nexport function isWalletConnectionSourceJS(\n value: WalletConnectionSource\n): value is WalletConnectionSourceJS {\n return 'jsBridgeKey' in value;\n}\n\nexport interface WalletConnectionSourceWalletConnect {\n type: 'wallet-connect';\n}\n\nexport function isWalletConnectionSourceWalletConnect(\n value: WalletConnectionSource\n): value is WalletConnectionSourceWalletConnect {\n return 'type' in value && value.type === 'wallet-connect';\n}\n","import {\n createConnectionCompletedEvent,\n createConnectionErrorEvent,\n createConnectionRestoringCompletedEvent,\n createConnectionRestoringErrorEvent,\n createConnectionRestoringStartedEvent,\n createConnectionStartedEvent,\n createDisconnectionEvent,\n createRequestVersionEvent,\n createResponseVersionEvent,\n createDataSentForSignatureEvent,\n createDataSignedEvent,\n createDataSigningFailedEvent,\n createTransactionSentForSignatureEvent,\n createTransactionSignedEvent,\n createTransactionSigningFailedEvent,\n createVersionInfo,\n ResponseVersionEvent,\n SdkActionEvent,\n Version,\n WithoutVersion\n} from './types';\nimport { EventDispatcher } from 'src/tracker/event-dispatcher';\n\n/**\n * Options for the TonConnect tracker.\n */\nexport type TonConnectTrackerOptions = {\n /**\n * Event dispatcher to track user actions.\n */\n eventDispatcher: EventDispatcher<SdkActionEvent>;\n /**\n * TonConnect SDK version.\n */\n tonConnectSdkVersion: string;\n};\n\n/**\n * Tracker for TonConnect user actions, such as transaction signing, connection, etc.\n *\n * List of events:\n * * `connection-started`: when a user starts connecting a wallet.\n * * `connection-completed`: when a user successfully connected a wallet.\n * * `connection-error`: when a user cancels a connection or there is an error during the connection process.\n * * `connection-restoring-started`: when the dApp starts restoring a connection.\n * * `connection-restoring-completed`: when the dApp successfully restores a connection.\n * * `connection-restoring-error`: when the dApp fails to restore a connection.\n * * `disconnection`: when a user starts disconnecting a wallet.\n * * `transaction-sent-for-signature`: when a user sends a transaction for signature.\n * * `transaction-signed`: when a user successfully signs a transaction.\n * * `transaction-signing-failed`: when a user cancels transaction signing or there is an error during the signing process.\n * * `sign-data-request-initiated`: when a user sends data for signature.\n * * `sign-data-request-completed`: when a user successfully signs data.\n * * `sign-data-request-failed`: when a user cancels data signing or there is an error during the signing process.\n *\n * If you want to track user actions, you can subscribe to the window events with prefix `ton-connect-`:\n *\n * @example\n * window.addEventListener('ton-connect-transaction-sent-for-signature', (event) => {\n * console.log('Transaction init', event.detail);\n * });\n *\n * @internal\n */\nexport class TonConnectTracker {\n /**\n * Event prefix for user actions.\n * @private\n */\n private readonly eventPrefix = 'ton-connect-';\n\n /**\n * TonConnect SDK version.\n */\n private readonly tonConnectSdkVersion: string;\n\n /**\n * TonConnect UI version.\n */\n private tonConnectUiVersion: string | null = null;\n\n /**\n * Version of the library.\n */\n get version(): Version {\n return createVersionInfo({\n ton_connect_sdk_lib: this.tonConnectSdkVersion,\n ton_connect_ui_lib: this.tonConnectUiVersion\n });\n }\n\n /**\n * Event dispatcher to track user actions. By default, it uses `window.dispatchEvent` for browser environment.\n * @private\n */\n private readonly eventDispatcher: EventDispatcher<SdkActionEvent>;\n\n constructor(options: TonConnectTrackerOptions) {\n this.eventDispatcher = options?.eventDispatcher;\n this.tonConnectSdkVersion = options.tonConnectSdkVersion;\n\n this.init().catch();\n }\n\n /**\n * Called once when the tracker is created and request version other libraries.\n */\n private async init(): Promise<void> {\n try {\n await this.setRequestVersionHandler();\n this.tonConnectUiVersion = await this.requestTonConnectUiVersion();\n } catch (e) {}\n }\n\n /**\n * Set request version handler.\n * @private\n */\n private async setRequestVersionHandler(): Promise<void> {\n await this.eventDispatcher.addEventListener('ton-connect-request-version', async () => {\n await this.eventDispatcher.dispatchEvent(\n 'ton-connect-response-version',\n createResponseVersionEvent(this.tonConnectSdkVersion)\n );\n });\n }\n\n /**\n * Request TonConnect UI version.\n * @private\n */\n private async requestTonConnectUiVersion(): Promise<string> {\n return new Promise(async (resolve, reject) => {\n try {\n await this.eventDispatcher.addEventListener(\n 'ton-connect-ui-response-version',\n (event: CustomEvent<ResponseVersionEvent>) => {\n resolve(event.detail.version);\n },\n { once: true }\n );\n\n await this.eventDispatcher.dispatchEvent(\n 'ton-connect-ui-request-version',\n createRequestVersionEvent()\n );\n } catch (e) {\n reject(e);\n }\n });\n }\n\n /**\n * Emit user action event to the window.\n * @param eventDetails\n * @private\n */\n private dispatchUserActionEvent(eventDetails: SdkActionEvent): void {\n try {\n this.eventDispatcher\n .dispatchEvent(`${this.eventPrefix}${eventDetails.type}`, eventDetails)\n .catch();\n } catch (e) {}\n }\n\n /**\n * Track connection init event.\n * @param args\n */\n public trackConnectionStarted(\n ...args: WithoutVersion<Parameters<typeof createConnectionStartedEvent>>\n ): void {\n try {\n const event = createConnectionStartedEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n\n /**\n * Track connection success event.\n * @param args\n */\n public trackConnectionCompleted(\n ...args: WithoutVersion<Parameters<typeof createConnectionCompletedEvent>>\n ): void {\n try {\n const event = createConnectionCompletedEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n\n /**\n * Track connection error event.\n * @param args\n */\n public trackConnectionError(\n ...args: WithoutVersion<Parameters<typeof createConnectionErrorEvent>>\n ): void {\n try {\n const event = createConnectionErrorEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n\n /**\n * Track connection restoring init event.\n * @param args\n */\n public trackConnectionRestoringStarted(\n ...args: WithoutVersion<Parameters<typeof createConnectionRestoringStartedEvent>>\n ): void {\n try {\n const event = createConnectionRestoringStartedEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n\n /**\n * Track connection restoring success event.\n * @param args\n */\n public trackConnectionRestoringCompleted(\n ...args: WithoutVersion<Parameters<typeof createConnectionRestoringCompletedEvent>>\n ): void {\n try {\n const event = createConnectionRestoringCompletedEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n\n /**\n * Track connection restoring error event.\n * @param args\n */\n public trackConnectionRestoringError(\n ...args: WithoutVersion<Parameters<typeof createConnectionRestoringErrorEvent>>\n ): void {\n try {\n const event = createConnectionRestoringErrorEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n\n /**\n * Track disconnect event.\n * @param args\n */\n public trackDisconnection(\n ...args: WithoutVersion<Parameters<typeof createDisconnectionEvent>>\n ): void {\n try {\n const event = createDisconnectionEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n\n /**\n * Track transaction init event.\n * @param args\n */\n public trackTransactionSentForSignature(\n ...args: WithoutVersion<Parameters<typeof createTransactionSentForSignatureEvent>>\n ): void {\n try {\n const event = createTransactionSentForSignatureEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n\n /**\n * Track transaction signed event.\n * @param args\n */\n public trackTransactionSigned(\n ...args: WithoutVersion<Parameters<typeof createTransactionSignedEvent>>\n ): void {\n try {\n const event = createTransactionSignedEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n\n /**\n * Track transaction error event.\n * @param args\n */\n public trackTransactionSigningFailed(\n ...args: WithoutVersion<Parameters<typeof createTransactionSigningFailedEvent>>\n ): void {\n try {\n const event = createTransactionSigningFailedEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n\n /**\n * Track sign data init event.\n * @param args\n */\n public trackDataSentForSignature(\n ...args: WithoutVersion<Parameters<typeof createDataSentForSignatureEvent>>\n ): void {\n try {\n const event = createDataSentForSignatureEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n\n /**\n * Track sign data success event.\n * @param args\n */\n public trackDataSigned(\n ...args: WithoutVersion<Parameters<typeof createDataSignedEvent>>\n ): void {\n try {\n const event = createDataSignedEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n\n /**\n * Track sign data error event.\n * @param args\n */\n public trackDataSigningFailed(\n ...args: WithoutVersion<Parameters<typeof createDataSigningFailedEvent>>\n ): void {\n try {\n const event = createDataSigningFailedEvent(this.version, ...args);\n this.dispatchUserActionEvent(event);\n } catch (e) {}\n }\n}\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Unhanded unknown error.\n */\nexport class UnknownError extends TonConnectError {\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, UnknownError.prototype);\n }\n}\n","import { EventDispatcher } from 'src/tracker/event-dispatcher';\nimport { ConnectionInfo, SdkActionEvent, Version } from 'src/tracker/types';\nimport { Analytics } from 'src/analytics/analytics';\nimport { TonConnectEvent } from 'src/analytics/types';\n\nfunction buildVersionInfo(version: Version): Record<string, string> {\n return {\n '@tonconnect/sdk': version.ton_connect_sdk_lib || '',\n '@tonconnect/ui': version.ton_connect_ui_lib || ''\n };\n}\n\nfunction buildTonConnectEvent(detail: ConnectionInfo & { trace_id?: string | null }) {\n return {\n versions: buildVersionInfo(detail.custom_data),\n network_id: detail.custom_data.chain_id ?? '',\n client_id: detail.custom_data.client_id ?? '',\n wallet_id: detail.custom_data.wallet_id ?? '',\n wallet_address: detail.wallet_address ?? '',\n wallet_app_name: detail.wallet_type ?? '',\n wallet_app_version: detail.wallet_version ?? '',\n wallet_state_init: detail.wallet_state_init ?? '',\n trace_id: detail.trace_id ?? undefined\n };\n}\n\nexport function bindEventsTo(\n eventDispatcher: EventDispatcher<SdkActionEvent>,\n analytics: Analytics<TonConnectEvent>\n) {\n eventDispatcher.addEventListener('ton-connect-ui-wallet-modal-opened', event => {\n const { detail } = event;\n analytics.emitConnectionStarted({\n client_id: detail.client_id || '',\n versions: buildVersionInfo(detail.custom_data),\n main_screen: detail.visible_wallets,\n trace_id: detail.trace_id ?? undefined\n });\n });\n eventDispatcher.addEventListener('ton-connect-ui-selected-wallet', event => {\n const { detail } = event;\n analytics.emitConnectionSelectedWallet({\n client_id: detail.client_id || '',\n versions: buildVersionInfo(detail.custom_data),\n main_screen: detail.visible_wallets,\n wallets_menu: detail.wallets_menu,\n trace_id: detail.trace_id ?? undefined,\n wallet_app_name: detail.wallet_type ?? '',\n wallet_redirect_method: detail.wallet_redirect_method,\n wallet_redirect_link: detail.wallet_redirect_link\n });\n });\n\n eventDispatcher.addEventListener('ton-connect-connection-completed', event => {\n const { detail } = event;\n analytics.emitConnectionCompleted(buildTonConnectEvent(detail));\n });\n eventDispatcher.addEventListener('ton-connect-connection-error', event => {\n const { detail } = event;\n analytics.emitConnectionError({\n client_id: detail.custom_data.client_id || '',\n wallet_id: detail.custom_data.wallet_id || '',\n error_code: detail.error_code ?? 0,\n error_message: detail.error_message,\n trace_id: detail.trace_id ?? undefined\n });\n });\n eventDispatcher.addEventListener('ton-connect-disconnection', event => {\n const { detail } = event;\n analytics.emitDisconnection(buildTonConnectEvent(detail));\n });\n eventDispatcher.addEventListener('ton-connect-transaction-sent-for-signature', event => {\n const { detail } = event;\n analytics.emitTransactionSent(buildTonConnectEvent(detail));\n });\n eventDispatcher.addEventListener('ton-connect-transaction-signed', event => {\n const { detail } = event;\n analytics.emitTransactionSigned({\n ...buildTonConnectEvent(detail),\n signed_boc: event.detail.signed_transaction\n });\n });\n eventDispatcher.addEventListener('ton-connect-transaction-signing-failed', event => {\n const { detail } = event;\n analytics.emitTransactionSigningFailed({\n ...buildTonConnectEvent(detail),\n valid_until: Number(detail.valid_until),\n messages: detail.messages.map(message => ({\n address: message.address ?? '',\n amount: message.amount ?? '',\n payload: message.payload ?? '',\n state_init: message.state_init ?? ''\n })),\n error_message: detail.error_message,\n error_code: detail.error_code ?? 0\n });\n });\n eventDispatcher.addEventListener('ton-connect-sign-data-request-initiated', event => {\n const { detail } = event;\n analytics?.emitSignDataRequestInitiated(buildTonConnectEvent(detail));\n });\n eventDispatcher.addEventListener('ton-connect-sign-data-request-completed', event => {\n const { detail } = event;\n analytics?.emitSignDataRequestCompleted(buildTonConnectEvent(detail));\n });\n eventDispatcher.addEventListener('ton-connect-sign-data-request-failed', event => {\n const { detail } = event;\n let signDataValue = '';\n let signDataSchema: string | undefined = undefined;\n if (detail.data.type === 'text') {\n signDataValue = detail.data.text;\n }\n if (detail.data.type === 'cell') {\n signDataValue = detail.data.cell;\n signDataSchema = detail.data.schema;\n }\n if (detail.data.type === 'binary') {\n signDataValue = detail.data.bytes;\n }\n analytics?.emitSignDataRequestFailed({\n ...buildTonConnectEvent(detail),\n sign_data_type: detail.data.type,\n sign_data_value: signDataValue,\n sign_data_schema: signDataSchema,\n error_code: detail.error_code ?? 0,\n error_message: detail.error_message\n });\n });\n}\n","import { InMemoryStorage } from 'src/storage/models/in-memory-storage';\nimport { TonConnectError } from 'src/errors';\n\nexport function getWindow(): Window | undefined {\n if (typeof window === 'undefined') {\n return undefined;\n }\n\n return window;\n}\n\n/**\n * The function try to get window keys, if it is not available it returns empty array.\n * As an example, for Safari's private mode it returns empty array, because the browser does not allow to get window keys.\n */\nexport function tryGetWindowKeys(): string[] {\n const window = getWindow();\n if (!window) {\n return [];\n }\n\n try {\n return Object.keys(window);\n } catch {\n return [];\n }\n}\n\nexport function getDocument(): Document | undefined {\n if (typeof document === 'undefined') {\n return undefined;\n }\n\n return document;\n}\n\nexport function getWebPageManifest(): string {\n const origin = getWindow()?.location.origin;\n if (origin) {\n return origin + '/tonconnect-manifest.json';\n }\n\n return '';\n}\n\nexport function getOriginWithPath() {\n const origin = getWindow()?.location?.origin;\n const path = getWindow()?.location?.pathname;\n\n if (origin && path) {\n return origin + path;\n }\n\n return '';\n}\n\n/**\n * Returns `localStorage` if it is available. In Safari's private mode, it returns `InMemoryStorage`. In Node.js, it throws an error.\n */\nexport function tryGetLocalStorage(): Storage {\n if (isLocalStorageAvailable()) {\n return localStorage;\n }\n\n if (isNodeJs()) {\n throw new TonConnectError(\n '`localStorage` is unavailable, but it is required for TonConnect. For more details, see https://github.com/ton-connect/sdk/tree/main/packages/sdk#init-connector'\n );\n }\n\n return InMemoryStorage.getInstance();\n}\n\n/**\n * Checks if `localStorage` is available.\n */\nfunction isLocalStorageAvailable(): boolean {\n // We use a try/catch block because Safari's private mode throws an error when attempting to access localStorage.\n try {\n return typeof localStorage !== 'undefined';\n } catch {\n return false;\n }\n}\n\n/**\n * Checks if the environment is Node.js.\n */\nfunction isNodeJs(): boolean {\n return (\n typeof process !== 'undefined' && process.versions != null && process.versions.node != null\n );\n}\n\n/**\n * Returns the current domain (hostname) if available.\n * In browser environment, returns window.location.hostname.\n * In Node.js environment or when window is not available, returns null.\n */\nexport function getDomain(): string | null {\n try {\n // In browser environment\n if (typeof window !== 'undefined' && window.location) {\n return window.location.hostname;\n } else {\n // In Node.js environment, skip domain validation\n return null;\n }\n } catch {\n return null;\n }\n}\n\n/**\n * Returns an array of [key, value] pairs from window object if available.\n * In browser environment, returns Object.entries(window).\n * In Node.js environment or when window is not available, returns empty array.\n */\nexport function getWindowEntries(): [string, unknown][] {\n const window = getWindow();\n if (!window) {\n return [];\n }\n\n try {\n return Object.entries(window);\n } catch {\n return [];\n }\n}\n","import { FeatureName } from '@tonconnect/protocol';\nimport { TonConnectError } from 'src/errors/ton-connect.error';\nimport { RequiredFeatures } from 'src/models';\n/**\n * Thrown when wallet doesn't support requested feature method.\n */\nexport class WalletNotSupportFeatureError extends TonConnectError {\n declare cause: {\n requiredFeature: {\n featureName: FeatureName;\n value?: RequiredFeatures['sendTransaction'] | RequiredFeatures['signData'];\n };\n };\n\n protected get info(): string {\n return \"Wallet doesn't support requested feature method.\";\n }\n\n constructor(\n message: string,\n options: {\n cause: {\n requiredFeature: {\n featureName: FeatureName;\n value?: RequiredFeatures['sendTransaction'] | RequiredFeatures['signData'];\n };\n };\n }\n ) {\n super(message, options);\n\n Object.setPrototypeOf(this, WalletNotSupportFeatureError.prototype);\n }\n}\n","export * from './connect';\n","/**\n * In memory storage like localStorage, but without persistence.\n * Uses as a fallback for localStorage in Safari's private mode.\n */\nexport class InMemoryStorage implements Storage {\n private static instance: InMemoryStorage;\n\n private storage: Record<string, string> = {};\n\n public static getInstance(): InMemoryStorage {\n if (!InMemoryStorage.instance) {\n InMemoryStorage.instance = new InMemoryStorage();\n }\n\n return InMemoryStorage.instance;\n }\n\n private constructor() {}\n\n public get length(): number {\n return Object.keys(this.storage).length;\n }\n\n public clear(): void {\n this.storage = {};\n }\n\n public getItem(key: string): string | null {\n return this.storage[key] ?? null;\n }\n\n public key(index: number): string | null {\n const keys = Object.keys(this.storage);\n if (index < 0 || index >= keys.length) {\n return null;\n }\n\n return keys[index] ?? null;\n }\n\n public removeItem(key: string): void {\n delete this.storage[key];\n }\n\n public setItem(key: string, value: string): void {\n this.storage[key] = value;\n }\n}\n","// Written in 2014-2016 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n(function(root, f) {\n 'use strict';\n if (typeof module !== 'undefined' && module.exports) module.exports = f();\n else if (root.nacl) root.nacl.util = f();\n else {\n root.nacl = {};\n root.nacl.util = f();\n }\n}(this, function() {\n 'use strict';\n\n var util = {};\n\n function validateBase64(s) {\n if (!(/^(?:[A-Za-z0-9+\\/]{2}[A-Za-z0-9+\\/]{2})*(?:[A-Za-z0-9+\\/]{2}==|[A-Za-z0-9+\\/]{3}=)?$/.test(s))) {\n throw new TypeError('invalid encoding');\n }\n }\n\n util.decodeUTF8 = function(s) {\n if (typeof s !== 'string') throw new TypeError('expected string');\n var i, d = unescape(encodeURIComponent(s)), b = new Uint8Array(d.length);\n for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i);\n return b;\n };\n\n util.encodeUTF8 = function(arr) {\n var i, s = [];\n for (i = 0; i < arr.length; i++) s.push(String.fromCharCode(arr[i]));\n return decodeURIComponent(escape(s.join('')));\n };\n\n if (typeof atob === 'undefined') {\n // Node.js\n\n if (typeof Buffer.from !== 'undefined') {\n // Node v6 and later\n util.encodeBase64 = function (arr) { // v6 and later\n return Buffer.from(arr).toString('base64');\n };\n\n util.decodeBase64 = function (s) {\n validateBase64(s);\n return new Uint8Array(Array.prototype.slice.call(Buffer.from(s, 'base64'), 0));\n };\n\n } else {\n // Node earlier than v6\n util.encodeBase64 = function (arr) { // v6 and later\n return (new Buffer(arr)).toString('base64');\n };\n\n util.decodeBase64 = function(s) {\n validateBase64(s);\n return new Uint8Array(Array.prototype.slice.call(new Buffer(s, 'base64'), 0));\n };\n }\n\n } else {\n // Browsers\n\n util.encodeBase64 = function(arr) {\n var i, s = [], len = arr.length;\n for (i = 0; i < len; i++) s.push(String.fromCharCode(arr[i]));\n return btoa(s.join(''));\n };\n\n util.decodeBase64 = function(s) {\n validateBase64(s);\n var i, d = atob(s), b = new Uint8Array(d.length);\n for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i);\n return b;\n };\n\n }\n\n return util;\n\n}));\n","export { WalletAlreadyConnectedError } from './wallet-already-connected.error';\nexport { WalletNotConnectedError } from './wallet-not-connected.error';\nexport { WalletNotInjectedError } from './wallet-not-injected.error';\nexport { WalletNotSupportFeatureError } from './wallet-not-support-feature.error';\nexport { WalletMissingRequiredFeaturesError } from './wallet-missing-required-features.error';\nexport { WalletWrongNetworkError } from './wallet-wrong-network.error';\n","import { IStorage } from 'src/storage/models/storage.interface';\n\nexport class HttpBridgeGatewayStorage {\n private readonly storeKey: string;\n\n constructor(\n private readonly storage: IStorage,\n bridgeUrl: string\n ) {\n this.storeKey = 'ton-connect-storage_http-bridge-gateway::' + bridgeUrl;\n }\n\n public async storeLastEventId(lastEventId: string): Promise<void> {\n return this.storage.setItem(this.storeKey, lastEventId);\n }\n\n public async removeLastEventId(): Promise<void> {\n return this.storage.removeItem(this.storeKey);\n }\n\n public async getLastEventId(): Promise<string | null> {\n const stored = await this.storage.getItem(this.storeKey);\n if (!stored) {\n return null;\n }\n\n return stored;\n }\n}\n","import { IStorage } from 'src/storage/models/storage.interface';\nimport { tryGetLocalStorage } from 'src/utils/web-api';\n\n/**\n * Default storage to save protocol data, uses `localStorage` if it is available. In Safari's private mode, it uses `InMemoryStorage`. In Node.js, it throws an error.\n */\nexport class DefaultStorage implements IStorage {\n private readonly localStorage: Storage;\n\n constructor() {\n this.localStorage = tryGetLocalStorage();\n }\n\n public async getItem(key: string): Promise<string | null> {\n return this.localStorage.getItem(key);\n }\n\n public async removeItem(key: string): Promise<void> {\n this.localStorage.removeItem(key);\n }\n\n public async setItem(key: string, value: string): Promise<void> {\n this.localStorage.setItem(key, value);\n }\n}\n","let qaModeEnabled = false;\nlet bannerObserver: MutationObserver | null = null;\n\nexport function enableQaMode(): void {\n qaModeEnabled = true;\n console.warn('🚨 QA Mode enabled - validation is disabled. This is unsafe for production!');\n showQaModeBanner();\n startBannerObserver();\n addQaModeStyles();\n}\n\nexport function isQaModeEnabled(): boolean {\n return qaModeEnabled;\n}\n\nexport function logValidationError(message: string): void {\n if (isQaModeEnabled()) {\n console.error(`[QA Mode] Validation failed: ${message}`);\n }\n}\n\nfunction showQaModeBanner(): void {\n if (typeof window === 'undefined') return;\n\n const existingBanner = document.getElementById('ton-connect-qa-banner');\n if (existingBanner) return;\n\n const banner = document.createElement('div');\n banner.id = 'ton-connect-qa-banner';\n banner.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n background: linear-gradient(90deg, #ff6b6b, #ff8e8e);\n color: white;\n padding: 12px 20px;\n text-align: center;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n font-weight: 600;\n font-size: 14px;\n z-index: 999999;\n box-shadow: 0 2px 8px rgba(0,0,0,0.2);\n animation: slideDown 0.3s ease-out;\n user-select: none;\n pointer-events: none;\n `;\n\n banner.innerHTML = `\n 🚨 QA Mode Active - Validation Disabled (Unsafe for Production)\n `;\n\n // Add CSS animation\n const style = document.createElement('style');\n style.textContent = `\n @keyframes slideDown {\n from { transform: translateY(-100%); }\n to { transform: translateY(0); }\n }\n `;\n document.head.appendChild(style);\n\n document.body.appendChild(banner);\n addQaModeStyles();\n}\n\nfunction addQaModeStyles(): void {\n if (typeof window === 'undefined') return;\n\n const existingStyle = document.getElementById('ton-connect-qa-mode-styles');\n if (existingStyle) return;\n\n const style = document.createElement('style');\n style.id = 'ton-connect-qa-mode-styles';\n style.textContent = `\n body.qa-mode-active {\n padding-top: 48px !important;\n }\n \n body.qa-mode-active header {\n margin-top: 48px !important;\n }\n \n body.qa-mode-active .qa-mode-control {\n top: 128px !important;\n }\n `;\n\n document.head.appendChild(style);\n document.body.classList.add('qa-mode-active');\n}\n\nfunction startBannerObserver(): void {\n if (typeof window === 'undefined' || bannerObserver) return;\n\n bannerObserver = new MutationObserver(mutations => {\n mutations.forEach(mutation => {\n if (mutation.type === 'childList') {\n mutation.removedNodes.forEach(node => {\n if (node.nodeType === Node.ELEMENT_NODE) {\n const element = node as Element;\n if (element.id === 'ton-connect-qa-banner' && qaModeEnabled) {\n console.warn('QA Mode banner was removed, restoring...');\n setTimeout(() => showQaModeBanner(), 100);\n } else if (element.id === 'ton-connect-qa-mode-styles' && qaModeEnabled) {\n console.warn('QA Mode styles were removed, restoring...');\n setTimeout(() => addQaModeStyles(), 100);\n }\n }\n });\n }\n });\n });\n\n bannerObserver.observe(document.body, {\n childList: true,\n subtree: false\n });\n\n bannerObserver.observe(document.head, {\n childList: true,\n subtree: false\n });\n}\n","export * from './connect';\nexport * from './send-transaction';\nexport * from './sign-data';\n","/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2010-2020 Robert Kieffer and other contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\n// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\n\nlet getRandomValues: typeof crypto.getRandomValues | undefined;\n\nconst rnds8 = new Uint8Array(16);\n\nexport function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n if (typeof crypto === 'undefined' || !crypto.getRandomValues) {\n throw new Error(\n 'crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported'\n );\n }\n\n getRandomValues = crypto.getRandomValues.bind(crypto);\n }\n\n return getRandomValues(rnds8);\n}\n","export { UUIDv7 } from './v7';\n","import {\n AppRequest,\n Base64,\n ConnectEventSuccess,\n ConnectRequest,\n hexToByteArray,\n RpcMethod,\n SessionCrypto,\n TonAddressItemReply,\n WalletMessage,\n WalletResponse\n} from '@tonconnect/protocol';\nimport { TonConnectError } from 'src/errors/ton-connect.error';\nimport { WalletConnectionSourceHTTP } from 'src/models/wallet/wallet-connection-source';\nimport { BridgeGateway } from 'src/provider/bridge/bridge-gateway';\nimport {\n BridgeConnectionHttp,\n isPendingConnectionHttp\n} from 'src/provider/bridge/models/bridge-connection';\nimport { BridgeIncomingMessage } from 'src/provider/bridge/models/bridge-incomming-message';\nimport { BridgePartialSession, BridgeSession } from 'src/provider/bridge/models/bridge-session';\nimport { HTTPProvider } from 'src/provider/provider';\nimport { BridgeConnectionStorage } from 'src/storage/bridge-connection-storage';\nimport { Optional, OptionalTraceable, Traceable, WithoutId } from 'src/utils/types';\nimport { PROTOCOL_VERSION } from 'src/resources/protocol';\nimport { logDebug, logError } from 'src/utils/log';\nimport { encodeTelegramUrlParameters, isTelegramUrl } from 'src/utils/url';\nimport { callForSuccess } from 'src/utils/call-for-success';\nimport { createAbortController } from 'src/utils/create-abort-controller';\nimport { AnalyticsManager } from 'src/analytics/analytics-manager';\nimport { Analytics } from 'src/analytics/analytics';\nimport { BridgeClientEvent } from 'src/analytics/types';\nimport { TraceableWalletEvent, TraceableWalletResponse } from 'src/models/wallet/traceable-events';\nimport { UUIDv7 } from 'src/utils/uuid';\nimport { waitForSome } from 'src/utils/promise';\n\nexport class BridgeProvider implements HTTPProvider {\n public static async fromStorage(\n storage: BridgeConnectionStorage,\n analyticsManager?: AnalyticsManager\n ): Promise<BridgeProvider> {\n const connection = await storage.getHttpConnection();\n\n if (isPendingConnectionHttp(connection)) {\n return new BridgeProvider(storage, connection.connectionSource, analyticsManager);\n }\n return new BridgeProvider(\n storage,\n { bridgeUrl: connection.session.bridgeUrl },\n analyticsManager\n );\n }\n\n public readonly type = 'http';\n\n private readonly standardUniversalLink = 'tc://';\n\n private readonly pendingRequests = new Map<\n string,\n (response: TraceableWalletResponse<RpcMethod>) => void\n >();\n\n private session: BridgeSession | BridgePartialSession | null = null;\n\n private gateway: BridgeGateway | null = null;\n\n private pendingGateways: BridgeGateway[] = [];\n\n private listeners: Array<(e: TraceableWalletEvent) => void> = [];\n\n private readonly defaultOpeningDeadlineMS = 12000;\n\n private readonly defaultRetryTimeoutMS = 2000;\n\n private readonly optionalOpenGateways = 3;\n\n private abortController?: AbortController;\n\n private readonly analytics?: Analytics<BridgeClientEvent>;\n\n constructor(\n private readonly connectionStorage: BridgeConnectionStorage,\n private readonly walletConnectionSource:\n | Optional<WalletConnectionSourceHTTP, 'universalLink'>\n | Pick<WalletConnectionSourceHTTP, 'bridgeUrl'>[],\n private readonly analyticsManager?: AnalyticsManager\n ) {\n this.analytics = this.analyticsManager?.scoped();\n }\n\n public connect(\n message: ConnectRequest,\n options?: OptionalTraceable<{\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }>\n ): string {\n const traceId = options?.traceId ?? UUIDv7();\n const abortController = createAbortController(options?.signal);\n this.abortController?.abort();\n this.abortController = abortController;\n\n this.closeGateways();\n\n const sessionCrypto = new SessionCrypto();\n\n this.session = {\n sessionCrypto,\n bridgeUrl:\n 'bridgeUrl' in this.walletConnectionSource\n ? this.walletConnectionSource.bridgeUrl\n : ''\n };\n\n this.connectionStorage\n .storeConnection({\n type: 'http',\n connectionSource: this.walletConnectionSource,\n sessionCrypto\n })\n .then(async () => {\n if (abortController.signal.aborted) {\n return;\n }\n\n await callForSuccess(\n _options =>\n this.openGateways(sessionCrypto, {\n openingDeadlineMS:\n options?.openingDeadlineMS ?? this.defaultOpeningDeadlineMS,\n signal: _options?.signal,\n traceId\n }),\n {\n attempts: Number.MAX_SAFE_INTEGER,\n delayMs: this.defaultRetryTimeoutMS,\n signal: abortController.signal\n }\n );\n });\n\n const universalLink =\n 'universalLink' in this.walletConnectionSource &&\n this.walletConnectionSource.universalLink\n ? this.walletConnectionSource.universalLink\n : this.standardUniversalLink;\n\n return this.generateUniversalLink(universalLink, message, { traceId });\n }\n\n public async restoreConnection(\n options?: OptionalTraceable<{\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }>\n ): Promise<void> {\n const traceId = options?.traceId ?? UUIDv7();\n\n const abortController = createAbortController(options?.signal);\n this.abortController?.abort();\n this.abortController = abortController;\n\n if (abortController.signal.aborted) {\n return;\n }\n\n this.closeGateways();\n const storedConnection = await this.connectionStorage.getHttpConnection();\n if (!storedConnection) {\n return;\n }\n\n if (abortController.signal.aborted) {\n return;\n }\n\n const openingDeadlineMS = options?.openingDeadlineMS ?? this.defaultOpeningDeadlineMS;\n\n if (isPendingConnectionHttp(storedConnection)) {\n this.session = {\n sessionCrypto: storedConnection.sessionCrypto,\n bridgeUrl:\n 'bridgeUrl' in this.walletConnectionSource\n ? this.walletConnectionSource.bridgeUrl\n : ''\n };\n\n return await this.openGateways(storedConnection.sessionCrypto, {\n openingDeadlineMS: openingDeadlineMS,\n signal: abortController?.signal,\n traceId: options?.traceId\n });\n }\n\n if (Array.isArray(this.walletConnectionSource)) {\n throw new TonConnectError(\n 'Internal error. Connection source is array while WalletConnectionSourceHTTP was expected.'\n );\n }\n\n this.session = storedConnection.session;\n\n if (this.gateway) {\n logDebug('Gateway is already opened, closing previous gateway');\n await this.gateway.close();\n }\n\n this.gateway = new BridgeGateway(\n this.connectionStorage.storage,\n this.walletConnectionSource.bridgeUrl,\n storedConnection.session.sessionCrypto.sessionId,\n this.gatewayListener.bind(this),\n this.gatewayErrorsListener.bind(this),\n this.analyticsManager\n );\n\n if (abortController.signal.aborted) {\n return;\n }\n\n // notify listeners about stored connection\n this.listeners.forEach(listener => listener({ ...storedConnection.connectEvent, traceId }));\n\n // wait for the connection to be opened\n try {\n await callForSuccess(\n options =>\n this.gateway!.registerSession({\n openingDeadlineMS: openingDeadlineMS,\n signal: options.signal,\n traceId\n }),\n {\n attempts: Number.MAX_SAFE_INTEGER,\n delayMs: this.defaultRetryTimeoutMS,\n signal: abortController.signal\n }\n );\n } catch (e) {\n await this.disconnect({ signal: abortController.signal, traceId });\n return;\n }\n }\n\n public sendRequest<T extends RpcMethod>(\n request: WithoutId<AppRequest<T>>,\n options?: OptionalTraceable<{\n attempts?: number;\n onRequestSent?: () => void;\n signal?: AbortSignal;\n }>\n ): Promise<WithoutId<WalletResponse<T>>>;\n /** @deprecated use sendRequest(transaction, options) instead */\n public sendRequest<T extends RpcMethod>(\n request: WithoutId<AppRequest<T>>,\n onRequestSent?: () => void\n ): Promise<WithoutId<WalletResponse<T>>>;\n public sendRequest<T extends RpcMethod>(\n request: WithoutId<AppRequest<T>>,\n optionsOrOnRequestSent?:\n | (() => void)\n | OptionalTraceable<{\n attempts?: number;\n onRequestSent?: () => void;\n signal?: AbortSignal;\n }>\n ): Promise<TraceableWalletResponse<T>> {\n // TODO: remove deprecated method\n const options: OptionalTraceable<{\n onRequestSent?: () => void;\n signal?: AbortSignal;\n attempts?: number;\n }> = {};\n if (typeof optionsOrOnRequestSent === 'function') {\n options.onRequestSent = optionsOrOnRequestSent;\n } else {\n options.onRequestSent = optionsOrOnRequestSent?.onRequestSent;\n options.signal = optionsOrOnRequestSent?.signal;\n options.attempts = optionsOrOnRequestSent?.attempts;\n options.traceId = optionsOrOnRequestSent?.traceId;\n }\n options.traceId ??= UUIDv7();\n\n return new Promise(async (resolve, reject) => {\n if (!this.gateway || !this.session || !('walletPublicKey' in this.session)) {\n throw new TonConnectError('Trying to send bridge request without session');\n }\n\n const id = (await this.connectionStorage.getNextRpcRequestId()).toString();\n await this.connectionStorage.increaseNextRpcRequestId();\n\n logDebug('Send http-bridge request:', { ...request, id });\n\n const encodedRequest = this.session!.sessionCrypto.encrypt(\n JSON.stringify({ ...request, id }),\n hexToByteArray(this.session.walletPublicKey)\n );\n\n try {\n this.analytics?.emitBridgeClientMessageSent({\n bridge_url: this.gateway.bridgeUrl,\n client_id: this.session.sessionCrypto.sessionId,\n wallet_id: this.session.walletPublicKey,\n message_id: id,\n request_type: request.method,\n trace_id: options.traceId\n });\n await this.gateway.send(\n encodedRequest,\n this.session.walletPublicKey,\n request.method,\n {\n attempts: options?.attempts,\n signal: options?.signal,\n traceId: options.traceId\n }\n );\n options?.onRequestSent?.();\n this.pendingRequests.set(id.toString(), resolve);\n } catch (e) {\n reject(e);\n }\n });\n }\n\n public closeConnection(): void {\n this.closeGateways();\n this.listeners = [];\n this.session = null;\n this.gateway = null;\n }\n\n public async disconnect(options?: OptionalTraceable<{ signal?: AbortSignal }>): Promise<void> {\n const traceId = options?.traceId ?? UUIDv7();\n return new Promise(async resolve => {\n let called = false;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n const onRequestSent = (): void => {\n if (!called) {\n called = true;\n this.removeBridgeAndSession().then(resolve);\n }\n };\n\n try {\n this.closeGateways();\n\n const abortController = createAbortController(options?.signal);\n timeoutId = setTimeout(() => {\n abortController.abort();\n }, this.defaultOpeningDeadlineMS);\n\n await this.sendRequest(\n { method: 'disconnect', params: [] },\n {\n onRequestSent: onRequestSent,\n signal: abortController.signal,\n attempts: 1,\n traceId\n }\n );\n } catch (e) {\n logDebug('Disconnect error:', e);\n\n if (!called) {\n this.removeBridgeAndSession().then(resolve);\n }\n } finally {\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n\n onRequestSent();\n }\n });\n }\n\n public listen(callback: (e: TraceableWalletEvent) => void): () => void {\n this.listeners.push(callback);\n return () => (this.listeners = this.listeners.filter(listener => listener !== callback));\n }\n\n public pause(): void {\n this.gateway?.pause();\n this.pendingGateways.forEach(bridge => bridge.pause());\n }\n\n public async unPause(): Promise<void> {\n const promises = this.pendingGateways.map(bridge => bridge.unPause());\n if (this.gateway) {\n promises.push(this.gateway.unPause());\n }\n await Promise.all(promises);\n }\n\n private async pendingGatewaysListener(\n gateway: BridgeGateway,\n bridgeUrl: string,\n bridgeIncomingMessage: BridgeIncomingMessage\n ): Promise<void> {\n if (!this.pendingGateways.includes(gateway)) {\n await gateway.close();\n return;\n }\n\n this.closeGateways({ except: gateway });\n\n if (this.gateway) {\n logDebug('Gateway is already opened, closing previous gateway');\n await this.gateway.close();\n }\n\n this.session!.bridgeUrl = bridgeUrl;\n this.gateway = gateway;\n this.gateway.setErrorsListener(this.gatewayErrorsListener.bind(this));\n this.gateway.setListener(this.gatewayListener.bind(this));\n return this.gatewayListener(bridgeIncomingMessage);\n }\n\n private async gatewayListener(bridgeIncomingMessage: BridgeIncomingMessage): Promise<void> {\n const traceId = bridgeIncomingMessage.traceId ?? UUIDv7();\n let walletMessage: WalletMessage;\n try {\n walletMessage = JSON.parse(\n this.session!.sessionCrypto.decrypt(\n Base64.decode(bridgeIncomingMessage.message).toUint8Array(),\n hexToByteArray(bridgeIncomingMessage.from)\n )\n );\n } catch (err) {\n this.analytics?.emitBridgeClientMessageDecodeError({\n bridge_url: this.session!.bridgeUrl,\n client_id: this.session!.sessionCrypto.sessionId,\n wallet_id: bridgeIncomingMessage.from,\n error_message: String(err),\n trace_id: bridgeIncomingMessage?.traceId\n });\n throw err;\n }\n\n logDebug('Wallet message received:', walletMessage);\n const requestType = 'event' in walletMessage ? walletMessage.event : '';\n this.analytics?.emitBridgeClientMessageReceived({\n bridge_url: this.session!.bridgeUrl,\n client_id: this.session!.sessionCrypto.sessionId,\n wallet_id: bridgeIncomingMessage.from,\n message_id: String(walletMessage.id),\n request_type: requestType,\n trace_id: bridgeIncomingMessage?.traceId\n });\n\n if (!('event' in walletMessage)) {\n const id = walletMessage.id.toString();\n const resolve = this.pendingRequests.get(id);\n if (!resolve) {\n logDebug(`Response id ${id} doesn't match any request's id`);\n return;\n }\n\n resolve({ ...walletMessage, traceId });\n this.pendingRequests.delete(id);\n return;\n }\n\n if (walletMessage.id !== undefined) {\n const lastId = await this.connectionStorage.getLastWalletEventId();\n\n if (lastId !== undefined && walletMessage.id <= lastId) {\n logError(\n `Received event id (=${walletMessage.id}) must be greater than stored last wallet event id (=${lastId}) `\n );\n return;\n }\n\n if (walletMessage.event !== 'connect') {\n await this.connectionStorage.storeLastWalletEventId(walletMessage.id);\n }\n }\n\n // `this.listeners` might be modified in the event handler\n const listeners = this.listeners;\n\n if (walletMessage.event === 'connect') {\n await this.updateSession(walletMessage, bridgeIncomingMessage.from);\n }\n\n if (walletMessage.event === 'disconnect') {\n logDebug(`Removing bridge and session: received disconnect event`);\n await this.removeBridgeAndSession();\n }\n\n listeners.forEach(listener => listener({ ...walletMessage, traceId }));\n }\n\n private async gatewayErrorsListener(e: Event): Promise<void> {\n throw new TonConnectError(`Bridge error ${JSON.stringify(e)}`);\n }\n\n private async updateSession(\n connectEvent: ConnectEventSuccess,\n walletPublicKey: string\n ): Promise<void> {\n this.session = {\n ...this.session!,\n walletPublicKey\n };\n\n const tonAddrItem: TonAddressItemReply = connectEvent.payload.items.find(\n item => item.name === 'ton_addr'\n ) as TonAddressItemReply;\n\n const connectEventToSave: BridgeConnectionHttp['connectEvent'] = {\n ...connectEvent,\n payload: {\n ...connectEvent.payload,\n items: [tonAddrItem]\n }\n };\n\n await this.connectionStorage.storeConnection({\n type: 'http',\n session: this.session,\n lastWalletEventId: connectEvent.id,\n connectEvent: connectEventToSave,\n nextRpcRequestId: 0\n });\n }\n\n private async removeBridgeAndSession(): Promise<void> {\n this.closeConnection();\n await this.connectionStorage.removeConnection();\n }\n\n private generateUniversalLink(\n universalLink: string,\n message: ConnectRequest,\n options: Traceable\n ): string {\n if (isTelegramUrl(universalLink)) {\n return this.generateTGUniversalLink(universalLink, message, options);\n }\n\n return this.generateRegularUniversalLink(universalLink, message, options);\n }\n\n private generateRegularUniversalLink(\n universalLink: string,\n message: ConnectRequest,\n options: Traceable\n ): string {\n const url = new URL(universalLink);\n url.searchParams.append('v', PROTOCOL_VERSION.toString());\n url.searchParams.append('id', this.session!.sessionCrypto.sessionId);\n url.searchParams.append('trace_id', options.traceId);\n url.searchParams.append('r', JSON.stringify(message));\n return url.toString();\n }\n\n private generateTGUniversalLink(\n universalLink: string,\n message: ConnectRequest,\n options: Traceable\n ): string {\n const urlToWrap = this.generateRegularUniversalLink('about:blank', message, options);\n const linkParams = urlToWrap.split('?')[1]!;\n\n const startapp = 'tonconnect-' + encodeTelegramUrlParameters(linkParams);\n\n // TODO: Remove this line after all dApps and the wallets-list.json have been updated\n const updatedUniversalLink = this.convertToDirectLink(universalLink);\n\n const url = new URL(updatedUniversalLink);\n url.searchParams.append('startapp', startapp);\n return url.toString();\n }\n\n // TODO: Remove this method after all dApps and the wallets-list.json have been updated\n private convertToDirectLink(universalLink: string): string {\n const url = new URL(universalLink);\n\n if (url.searchParams.has('attach')) {\n url.searchParams.delete('attach');\n url.pathname += '/start';\n }\n\n return url.toString();\n }\n\n private async openGateways(\n sessionCrypto: SessionCrypto,\n options?: OptionalTraceable<{\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }>\n ): Promise<void> {\n const traceId = options?.traceId ?? UUIDv7();\n if (Array.isArray(this.walletConnectionSource)) {\n // close all gateways before opening new ones\n this.pendingGateways.map(bridge => bridge.close().catch());\n\n // open new gateways\n this.pendingGateways = this.walletConnectionSource.map(source => {\n const gateway = new BridgeGateway(\n this.connectionStorage.storage,\n source.bridgeUrl,\n sessionCrypto.sessionId,\n () => {},\n () => {},\n this.analyticsManager\n );\n\n gateway.setListener(message =>\n this.pendingGatewaysListener(gateway, source.bridgeUrl, message)\n );\n\n return gateway;\n });\n\n // Wait until the specified optional gateways are opened, not necessarily all gateways\n const gatewaysToWaitFor = Math.max(\n this.pendingGateways.length - this.optionalOpenGateways,\n 1\n );\n\n await waitForSome(\n this.pendingGateways.map(bridge =>\n callForSuccess(\n (_options): Promise<void> => {\n if (!this.pendingGateways.some(item => item === bridge)) {\n return bridge.close();\n }\n\n return bridge.registerSession({\n openingDeadlineMS:\n options?.openingDeadlineMS ?? this.defaultOpeningDeadlineMS,\n signal: _options.signal,\n traceId\n });\n },\n {\n attempts: Number.MAX_SAFE_INTEGER,\n delayMs: this.defaultRetryTimeoutMS,\n signal: options?.signal\n }\n )\n ),\n gatewaysToWaitFor\n );\n\n return;\n } else {\n if (this.gateway) {\n logDebug(`Gateway is already opened, closing previous gateway`);\n await this.gateway.close();\n }\n\n this.gateway = new BridgeGateway(\n this.connectionStorage.storage,\n this.walletConnectionSource.bridgeUrl,\n sessionCrypto.sessionId,\n this.gatewayListener.bind(this),\n this.gatewayErrorsListener.bind(this),\n this.analyticsManager\n );\n return await this.gateway.registerSession({\n openingDeadlineMS: options?.openingDeadlineMS,\n signal: options?.signal,\n traceId\n });\n }\n }\n\n private closeGateways(options?: { except: BridgeGateway }): void {\n this.gateway?.close();\n this.pendingGateways\n .filter(item => item !== options?.except)\n .forEach(bridge => bridge.close());\n this.pendingGateways = [];\n }\n}\n","import { TonConnectError } from 'src/errors';\n\n/**\n * Configuration options for the delay function.\n */\nexport type DelayFnOptions = {\n /**\n * An 'AbortSignal' object that can be used to abort the delay.\n */\n signal?: AbortSignal;\n};\n\n/**\n * Delays the execution of code for a specified number of milliseconds.\n * @param {number} timeout - The number of milliseconds to delay the execution.\n * @param {DelayOptions} [options] - Optional configuration options for the delay.\n * @return {Promise<void>} - A promise that resolves after the specified delay, or rejects if the delay is aborted.\n */\nexport async function delay(timeout: number, options?: DelayFnOptions): Promise<void> {\n return new Promise((resolve, reject) => {\n if (options?.signal?.aborted) {\n reject(new TonConnectError('Delay aborted'));\n return;\n }\n\n const timeoutId = setTimeout(() => resolve(), timeout);\n options?.signal?.addEventListener('abort', () => {\n clearTimeout(timeoutId);\n reject(new TonConnectError('Delay aborted'));\n });\n });\n}\n","import { getWindow } from 'src/utils/web-api';\nimport { AddTonConnectPrefix, EventDispatcher, RemoveTonConnectPrefix } from './event-dispatcher';\n\n/**\n * A concrete implementation of EventDispatcher that dispatches events to the browser window.\n */\nexport class BrowserEventDispatcher<T extends { type: string }> implements EventDispatcher<T> {\n /**\n * The window object, possibly undefined in a server environment.\n * @private\n */\n private readonly window: Window | undefined = getWindow();\n\n /**\n * Dispatches an event with the given name and details to the browser window.\n * @param eventName - The name of the event to dispatch.\n * @param eventDetails - The details of the event to dispatch.\n * @returns A promise that resolves when the event has been dispatched.\n */\n public async dispatchEvent<P extends AddTonConnectPrefix<T['type']>>(\n eventName: P,\n eventDetails: T & { type: RemoveTonConnectPrefix<P> }\n ): Promise<void> {\n const event = new CustomEvent<T>(eventName, { detail: eventDetails });\n this.window?.dispatchEvent(event);\n }\n\n /**\n * Adds an event listener to the browser window.\n * @param eventName - The name of the event to listen for.\n * @param listener - The listener to add.\n * @param options - The options for the listener.\n * @returns A function that removes the listener.\n */\n public async addEventListener<P extends AddTonConnectPrefix<T['type']>>(\n eventName: P,\n listener: (event: CustomEvent<T & { type: RemoveTonConnectPrefix<P> }>) => void,\n options?: AddEventListenerOptions\n ): Promise<() => void> {\n this.window?.addEventListener(\n eventName,\n listener as EventListener | EventListenerObject,\n options\n );\n return () =>\n this.window?.removeEventListener(\n eventName,\n listener as EventListener | EventListenerObject\n );\n }\n}\n","export { UserRejectsError } from 'src/errors/protocol/events/connect/user-rejects.error';\n","import { BadRequestError, UnknownAppError, UserRejectsError } from 'src/errors';\nimport { ManifestContentErrorError } from 'src/errors/protocol/events/connect/manifest-content-error.error';\nimport { ManifestNotFoundError } from 'src/errors/protocol/events/connect/manifest-not-found.error';\nimport { TonConnectError } from 'src/errors/ton-connect.error';\nimport { UnknownError } from 'src/errors/unknown.error';\nimport { CONNECT_EVENT_ERROR_CODES, ConnectEventError } from '@tonconnect/protocol';\n\nconst connectEventErrorsCodes: Partial<Record<CONNECT_EVENT_ERROR_CODES, typeof TonConnectError>> =\n {\n [CONNECT_EVENT_ERROR_CODES.UNKNOWN_ERROR]: UnknownError,\n [CONNECT_EVENT_ERROR_CODES.USER_REJECTS_ERROR]: UserRejectsError,\n [CONNECT_EVENT_ERROR_CODES.BAD_REQUEST_ERROR]: BadRequestError,\n [CONNECT_EVENT_ERROR_CODES.UNKNOWN_APP_ERROR]: UnknownAppError,\n [CONNECT_EVENT_ERROR_CODES.MANIFEST_NOT_FOUND_ERROR]: ManifestNotFoundError,\n [CONNECT_EVENT_ERROR_CODES.MANIFEST_CONTENT_ERROR]: ManifestContentErrorError\n };\n\nclass ConnectErrorsParser {\n parseError(error: ConnectEventError['payload']): TonConnectError {\n let ErrorConstructor: typeof TonConnectError = UnknownError;\n\n if (error.code in connectEventErrorsCodes) {\n ErrorConstructor = connectEventErrorsCodes[error.code] || UnknownError;\n }\n\n return new ErrorConstructor(error.message);\n }\n}\n\nexport const connectErrorsParser = new ConnectErrorsParser();\n","/**\n * Converts a PascalCase (or camelCase) string to kebab-case.\n *\n * For example:\n * - \"PascalCase\" → \"pascal-case\"\n * - \"camelCaseExample\" → \"camel-case-example\"\n *\n * @param value - The input string in PascalCase or camelCase format.\n * @returns The converted kebab-case string.\n */\nexport function pascalToKebab(value: string): string {\n return value.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase();\n}\n\n/**\n * Network Information API interface (not available in all browsers)\n */\ninterface NetworkInformation {\n rtt?: number;\n effectiveType?: string;\n type?: string;\n}\n\n/**\n * Extended Navigator interface with Network Information API\n */\ninterface NavigatorWithConnection extends Navigator {\n connection?: NetworkInformation;\n mozConnection?: NetworkInformation;\n webkitConnection?: NetworkInformation;\n}\n\n/**\n * Collects static connection metrics from the browser's Performance API.\n * TTFB is measured once at page load and doesn't change.\n * @returns An object containing static connection metrics (TTFB) or empty object if not available.\n */\nexport function getStaticConnectionMetrics(): {\n conn_ttfb?: number;\n} {\n const metrics: {\n conn_ttfb?: number;\n } = {};\n\n // Get TTFB from Navigation Timing API (static, measured once at page load)\n try {\n const navEntries = performance.getEntriesByType('navigation');\n if (navEntries.length > 0) {\n const nav = navEntries[0] as PerformanceNavigationTiming;\n if (nav.responseStart && nav.requestStart) {\n metrics.conn_ttfb = Math.round(nav.responseStart - nav.requestStart);\n }\n }\n } catch (e) {\n // Performance API not available or error occurred\n }\n\n return metrics;\n}\n\n/**\n * Collects dynamic connection metrics from the browser's Network Information API.\n * @returns An object containing dynamic connection metrics (RTT, network type) or empty object if not available.\n */\nexport function getDynamicConnectionMetrics(): {\n conn_rtt?: number;\n conn_network_type?: string;\n} {\n const metrics: {\n conn_rtt?: number;\n conn_network_type?: string;\n } = {};\n\n // Get RTT and network type from Network Information API (dynamic, can change)\n try {\n const navigatorWithConnection = navigator as NavigatorWithConnection;\n const connection =\n navigatorWithConnection.connection ||\n navigatorWithConnection.mozConnection ||\n navigatorWithConnection.webkitConnection;\n if (connection) {\n if (connection.rtt !== undefined) {\n metrics.conn_rtt = connection.rtt;\n }\n if (connection.effectiveType) {\n metrics.conn_network_type = connection.effectiveType;\n } else if (connection.type) {\n metrics.conn_network_type = connection.type;\n }\n }\n } catch (e) {\n // Network Information API not available or error occurred\n }\n\n return metrics;\n}\n","'use strict';\n\nvar nacl = require('tweetnacl-util');\nvar nacl$1 = require('tweetnacl');\n\nexports.CONNECT_EVENT_ERROR_CODES = void 0;\n(function (CONNECT_EVENT_ERROR_CODES) {\n CONNECT_EVENT_ERROR_CODES[CONNECT_EVENT_ERROR_CODES[\"UNKNOWN_ERROR\"] = 0] = \"UNKNOWN_ERROR\";\n CONNECT_EVENT_ERROR_CODES[CONNECT_EVENT_ERROR_CODES[\"BAD_REQUEST_ERROR\"] = 1] = \"BAD_REQUEST_ERROR\";\n CONNECT_EVENT_ERROR_CODES[CONNECT_EVENT_ERROR_CODES[\"MANIFEST_NOT_FOUND_ERROR\"] = 2] = \"MANIFEST_NOT_FOUND_ERROR\";\n CONNECT_EVENT_ERROR_CODES[CONNECT_EVENT_ERROR_CODES[\"MANIFEST_CONTENT_ERROR\"] = 3] = \"MANIFEST_CONTENT_ERROR\";\n CONNECT_EVENT_ERROR_CODES[CONNECT_EVENT_ERROR_CODES[\"UNKNOWN_APP_ERROR\"] = 100] = \"UNKNOWN_APP_ERROR\";\n CONNECT_EVENT_ERROR_CODES[CONNECT_EVENT_ERROR_CODES[\"USER_REJECTS_ERROR\"] = 300] = \"USER_REJECTS_ERROR\";\n CONNECT_EVENT_ERROR_CODES[CONNECT_EVENT_ERROR_CODES[\"METHOD_NOT_SUPPORTED\"] = 400] = \"METHOD_NOT_SUPPORTED\";\n})(exports.CONNECT_EVENT_ERROR_CODES || (exports.CONNECT_EVENT_ERROR_CODES = {}));\nexports.CONNECT_ITEM_ERROR_CODES = void 0;\n(function (CONNECT_ITEM_ERROR_CODES) {\n CONNECT_ITEM_ERROR_CODES[CONNECT_ITEM_ERROR_CODES[\"UNKNOWN_ERROR\"] = 0] = \"UNKNOWN_ERROR\";\n CONNECT_ITEM_ERROR_CODES[CONNECT_ITEM_ERROR_CODES[\"METHOD_NOT_SUPPORTED\"] = 400] = \"METHOD_NOT_SUPPORTED\";\n})(exports.CONNECT_ITEM_ERROR_CODES || (exports.CONNECT_ITEM_ERROR_CODES = {}));\n\nexports.SEND_TRANSACTION_ERROR_CODES = void 0;\n(function (SEND_TRANSACTION_ERROR_CODES) {\n SEND_TRANSACTION_ERROR_CODES[SEND_TRANSACTION_ERROR_CODES[\"UNKNOWN_ERROR\"] = 0] = \"UNKNOWN_ERROR\";\n SEND_TRANSACTION_ERROR_CODES[SEND_TRANSACTION_ERROR_CODES[\"BAD_REQUEST_ERROR\"] = 1] = \"BAD_REQUEST_ERROR\";\n SEND_TRANSACTION_ERROR_CODES[SEND_TRANSACTION_ERROR_CODES[\"UNKNOWN_APP_ERROR\"] = 100] = \"UNKNOWN_APP_ERROR\";\n SEND_TRANSACTION_ERROR_CODES[SEND_TRANSACTION_ERROR_CODES[\"USER_REJECTS_ERROR\"] = 300] = \"USER_REJECTS_ERROR\";\n SEND_TRANSACTION_ERROR_CODES[SEND_TRANSACTION_ERROR_CODES[\"METHOD_NOT_SUPPORTED\"] = 400] = \"METHOD_NOT_SUPPORTED\";\n})(exports.SEND_TRANSACTION_ERROR_CODES || (exports.SEND_TRANSACTION_ERROR_CODES = {}));\n\nexports.SIGN_DATA_ERROR_CODES = void 0;\n(function (SIGN_DATA_ERROR_CODES) {\n SIGN_DATA_ERROR_CODES[SIGN_DATA_ERROR_CODES[\"UNKNOWN_ERROR\"] = 0] = \"UNKNOWN_ERROR\";\n SIGN_DATA_ERROR_CODES[SIGN_DATA_ERROR_CODES[\"BAD_REQUEST_ERROR\"] = 1] = \"BAD_REQUEST_ERROR\";\n SIGN_DATA_ERROR_CODES[SIGN_DATA_ERROR_CODES[\"UNKNOWN_APP_ERROR\"] = 100] = \"UNKNOWN_APP_ERROR\";\n SIGN_DATA_ERROR_CODES[SIGN_DATA_ERROR_CODES[\"USER_REJECTS_ERROR\"] = 300] = \"USER_REJECTS_ERROR\";\n SIGN_DATA_ERROR_CODES[SIGN_DATA_ERROR_CODES[\"METHOD_NOT_SUPPORTED\"] = 400] = \"METHOD_NOT_SUPPORTED\";\n})(exports.SIGN_DATA_ERROR_CODES || (exports.SIGN_DATA_ERROR_CODES = {}));\n\nexports.DISCONNECT_ERROR_CODES = void 0;\n(function (DISCONNECT_ERROR_CODES) {\n DISCONNECT_ERROR_CODES[DISCONNECT_ERROR_CODES[\"UNKNOWN_ERROR\"] = 0] = \"UNKNOWN_ERROR\";\n DISCONNECT_ERROR_CODES[DISCONNECT_ERROR_CODES[\"BAD_REQUEST_ERROR\"] = 1] = \"BAD_REQUEST_ERROR\";\n DISCONNECT_ERROR_CODES[DISCONNECT_ERROR_CODES[\"UNKNOWN_APP_ERROR\"] = 100] = \"UNKNOWN_APP_ERROR\";\n DISCONNECT_ERROR_CODES[DISCONNECT_ERROR_CODES[\"METHOD_NOT_SUPPORTED\"] = 400] = \"METHOD_NOT_SUPPORTED\";\n})(exports.DISCONNECT_ERROR_CODES || (exports.DISCONNECT_ERROR_CODES = {}));\n\nexports.CHAIN = void 0;\n(function (CHAIN) {\n CHAIN[\"MAINNET\"] = \"-239\";\n CHAIN[\"TESTNET\"] = \"-3\";\n})(exports.CHAIN || (exports.CHAIN = {}));\n\nfunction encodeUint8Array(value, urlSafe) {\n const encoded = nacl.encodeBase64(value);\n if (!urlSafe) {\n return encoded;\n }\n return encodeURIComponent(encoded);\n}\nfunction decodeToUint8Array(value, urlSafe) {\n if (urlSafe) {\n value = decodeURIComponent(value);\n }\n return nacl.decodeBase64(value);\n}\nfunction encode(value, urlSafe = false) {\n let uint8Array;\n if (value instanceof Uint8Array) {\n uint8Array = value;\n }\n else {\n if (typeof value !== 'string') {\n value = JSON.stringify(value);\n }\n uint8Array = nacl.decodeUTF8(value);\n }\n return encodeUint8Array(uint8Array, urlSafe);\n}\nfunction decode(value, urlSafe = false) {\n const decodedUint8Array = decodeToUint8Array(value, urlSafe);\n return {\n toString() {\n return nacl.encodeUTF8(decodedUint8Array);\n },\n toObject() {\n try {\n return JSON.parse(nacl.encodeUTF8(decodedUint8Array));\n }\n catch (e) {\n return null;\n }\n },\n toUint8Array() {\n return decodedUint8Array;\n }\n };\n}\nconst Base64 = {\n encode,\n decode\n};\n\nfunction concatUint8Arrays(buffer1, buffer2) {\n const mergedArray = new Uint8Array(buffer1.length + buffer2.length);\n mergedArray.set(buffer1);\n mergedArray.set(buffer2, buffer1.length);\n return mergedArray;\n}\nfunction splitToUint8Arrays(array, index) {\n if (index >= array.length) {\n throw new Error('Index is out of buffer');\n }\n const subArray1 = array.slice(0, index);\n const subArray2 = array.slice(index);\n return [subArray1, subArray2];\n}\nfunction toHexString(byteArray) {\n let hexString = '';\n byteArray.forEach(byte => {\n hexString += ('0' + (byte & 0xff).toString(16)).slice(-2);\n });\n return hexString;\n}\nfunction hexToByteArray(hexString) {\n if (hexString.length % 2 !== 0) {\n throw new Error(`Cannot convert ${hexString} to bytesArray`);\n }\n const result = new Uint8Array(hexString.length / 2);\n for (let i = 0; i < hexString.length; i += 2) {\n result[i / 2] = parseInt(hexString.slice(i, i + 2), 16);\n }\n return result;\n}\n\nfunction isNode() {\n return (typeof process !== 'undefined' && process.versions != null && process.versions.node != null);\n}\n\nclass SessionCrypto {\n constructor(keyPair) {\n this.nonceLength = 24;\n this.keyPair = keyPair ? this.createKeypairFromString(keyPair) : this.createKeypair();\n this.sessionId = toHexString(this.keyPair.publicKey);\n }\n createKeypair() {\n return nacl$1.box.keyPair();\n }\n createKeypairFromString(keyPair) {\n return {\n publicKey: hexToByteArray(keyPair.publicKey),\n secretKey: hexToByteArray(keyPair.secretKey)\n };\n }\n createNonce() {\n return nacl$1.randomBytes(this.nonceLength);\n }\n encrypt(message, receiverPublicKey) {\n const encodedMessage = new TextEncoder().encode(message);\n const nonce = this.createNonce();\n const encrypted = nacl$1.box(encodedMessage, nonce, receiverPublicKey, this.keyPair.secretKey);\n return concatUint8Arrays(nonce, encrypted);\n }\n decrypt(message, senderPublicKey) {\n const [nonce, internalMessage] = splitToUint8Arrays(message, this.nonceLength);\n const decrypted = nacl$1.box.open(internalMessage, nonce, senderPublicKey, this.keyPair.secretKey);\n if (!decrypted) {\n throw new Error(`Decryption error: \\n message: ${message.toString()} \\n sender pubkey: ${senderPublicKey.toString()} \\n keypair pubkey: ${this.keyPair.publicKey.toString()} \\n keypair secretkey: ${this.keyPair.secretKey.toString()}`);\n }\n return new TextDecoder().decode(decrypted);\n }\n stringifyKeypair() {\n return {\n publicKey: toHexString(this.keyPair.publicKey),\n secretKey: toHexString(this.keyPair.secretKey)\n };\n }\n}\n\nexports.Base64 = Base64;\nexports.SessionCrypto = SessionCrypto;\nexports.concatUint8Arrays = concatUint8Arrays;\nexports.hexToByteArray = hexToByteArray;\nexports.isNode = isNode;\nexports.splitToUint8Arrays = splitToUint8Arrays;\nexports.toHexString = toHexString;\n//# sourceMappingURL=index.cjs.map\n","import { WalletInfoDTO } from 'src/models/wallet/wallet-info';\n\nexport const FALLBACK_WALLETS_LIST: WalletInfoDTO[] = [\n {\n app_name: 'telegram-wallet',\n name: 'Wallet',\n image: 'https://wallet.tg/images/logo-288.png',\n about_url: 'https://wallet.tg/',\n universal_url: 'https://t.me/wallet?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://walletbot.me/tonconnect-bridge/bridge'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 255,\n extraCurrencySupported: true\n },\n {\n name: 'SignData',\n types: ['text', 'binary', 'cell']\n }\n ]\n },\n {\n app_name: 'tonkeeper',\n name: 'Tonkeeper',\n image: 'https://tonkeeper.com/assets/tonconnect-icon.png',\n tondns: 'tonkeeper.ton',\n about_url: 'https://tonkeeper.com',\n universal_url: 'https://app.tonkeeper.com/ton-connect',\n deepLink: 'tonkeeper-tc://',\n bridge: [\n {\n type: 'sse',\n url: 'https://bridge.tonapi.io/bridge'\n },\n {\n type: 'js',\n key: 'tonkeeper'\n }\n ],\n platforms: ['ios', 'android', 'chrome', 'firefox', 'macos'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 255,\n extraCurrencySupported: true\n },\n {\n name: 'SignData',\n types: ['text', 'binary', 'cell']\n }\n ]\n },\n {\n app_name: 'mytonwallet',\n name: 'MyTonWallet',\n image: 'https://static.mytonwallet.io/icon-256.png',\n about_url: 'https://mytonwallet.io',\n universal_url: 'https://connect.mytonwallet.org',\n deepLink: 'mytonwallet-tc://',\n bridge: [\n {\n type: 'js',\n key: 'mytonwallet'\n },\n {\n type: 'sse',\n url: 'https://tonconnectbridge.mytonwallet.org/bridge/'\n }\n ],\n platforms: ['chrome', 'windows', 'macos', 'linux', 'ios', 'android', 'firefox'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 255,\n extraCurrencySupported: false\n },\n {\n name: 'SignData',\n types: ['text', 'binary', 'cell']\n }\n ]\n },\n {\n app_name: 'tonhub',\n name: 'Tonhub',\n image: 'https://tonhub.com/tonconnect_logo.png',\n about_url: 'https://tonhub.com',\n universal_url: 'https://tonhub.com/ton-connect',\n bridge: [\n {\n type: 'js',\n key: 'tonhub'\n },\n {\n type: 'sse',\n url: 'https://connect.tonhubapi.com/tonconnect'\n }\n ],\n platforms: ['ios', 'android'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 255,\n extraCurrencySupported: true\n },\n {\n name: 'SignData',\n types: ['text', 'binary', 'cell']\n }\n ]\n },\n {\n app_name: 'bitgetTonWallet',\n name: 'Bitget Wallet',\n image: 'https://raw.githubusercontent.com/bitgetwallet/download/refs/heads/main/logo/png/bitget_wallet_logo_288_mini.png',\n about_url: 'https://web3.bitget.com',\n deepLink: 'bitkeep://',\n bridge: [\n {\n type: 'js',\n key: 'bitgetTonWallet'\n },\n {\n type: 'sse',\n url: 'https://ton-connect-bridge.bgwapi.io/bridge'\n }\n ],\n platforms: ['ios', 'android', 'chrome'],\n universal_url: 'https://bkcode.vip/ton-connect',\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'okxMiniWallet',\n name: 'OKX Mini Wallet',\n image: 'https://static.okx.com/cdn/assets/imgs/2411/8BE1A4A434D8F58A.png',\n about_url: 'https://www.okx.com/web3',\n universal_url: 'https://t.me/OKX_WALLET_BOT?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://www.okx.com/tonbridge/discover/rpc/bridge'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'binanceWeb3TonWallet',\n name: 'Binance Wallet',\n image: 'https://public.bnbstatic.com/static/binance-w3w/ton-provider/binancew3w.png',\n about_url: 'https://www.binance.com/en/web3wallet',\n deepLink: 'bnc://app.binance.com/cedefi/ton-connect',\n bridge: [\n {\n type: 'js',\n key: 'binancew3w'\n },\n {\n type: 'sse',\n url: 'https://wallet.binance.com/tonbridge/bridge'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n universal_url: 'https://app.binance.com/cedefi/ton-connect',\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'fintopio-tg',\n name: 'Fintopio',\n image: 'https://raw.githubusercontent.com/fintopio/ton-pub/refs/heads/main/logos/tonconnect-icon.png',\n about_url: 'https://fintopio.com',\n universal_url: 'https://t.me/fintopio?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://wallet-bridge.fintopio.com/bridge'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'okxTonWallet',\n name: 'OKX Wallet',\n image: 'https://static.okx.com/cdn/assets/imgs/247/58E63FEA47A2B7D7.png',\n about_url: 'https://www.okx.com/web3',\n universal_url:\n 'https://www.okx.com/download?appendQuery=true&deeplink=okx://web3/wallet/tonconnect',\n bridge: [\n {\n type: 'js',\n key: 'okxTonWallet'\n },\n {\n type: 'sse',\n url: 'https://www.okx.com/tonbridge/discover/rpc/bridge'\n }\n ],\n platforms: ['chrome', 'safari', 'firefox', 'ios', 'android'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'hot',\n name: 'HOT',\n image: 'https://raw.githubusercontent.com/hot-dao/media/main/logo.png',\n about_url: 'https://hot-labs.org/',\n universal_url: 'https://t.me/herewalletbot?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://sse-bridge.hot-labs.org'\n },\n {\n type: 'js',\n key: 'hotWallet'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'bybitTonWallet',\n name: 'Bybit Wallet',\n image: 'https://raw.githubusercontent.com/bybit-web3/bybit-web3.github.io/main/docs/images/bybit-logo.png',\n about_url: 'https://www.bybit.com/web3',\n universal_url: 'https://app.bybit.com/ton-connect',\n deepLink: 'bybitapp://',\n bridge: [\n {\n type: 'js',\n key: 'bybitTonWallet'\n },\n {\n type: 'sse',\n url: 'https://api-node.bybit.com/spot/api/web3/bridge/ton/bridge'\n }\n ],\n platforms: ['ios', 'android', 'chrome'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'dewallet',\n name: 'DeWallet',\n image: 'https://raw.githubusercontent.com/delab-team/manifests-images/main/WalletAvatar.png',\n about_url: 'https://delabwallet.com',\n universal_url: 'https://t.me/dewallet?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://bridge.dewallet.pro/bridge'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'safepalwallet',\n name: 'SafePal',\n image: 'https://s.pvcliping.com/web/public_image/SafePal_x288.png',\n tondns: '',\n about_url: 'https://www.safepal.com',\n universal_url: 'https://link.safepal.io/ton-connect',\n deepLink: 'safepal-tc://',\n bridge: [\n {\n type: 'sse',\n url: 'https://ton-bridge.safepal.com/tonbridge/v1/bridge'\n },\n {\n type: 'js',\n key: 'safepalwallet'\n }\n ],\n platforms: ['ios', 'android', 'chrome', 'firefox'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 1,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'GateWallet',\n name: 'GateWallet',\n image: 'https://img.gatedataimg.com/prd-ordinal-imgs/036f07bb8730716e/gateio-0925.png',\n about_url: 'https://www.gate.io/',\n bridge: [\n {\n type: 'js',\n key: 'gatetonwallet'\n },\n {\n type: 'sse',\n url: 'https://dapp.gateio.services/tonbridge_api/bridge/v1'\n }\n ],\n platforms: ['ios', 'android'],\n universal_url:\n 'https://gate.onelink.me/Hls0/web3?gate_web3_wallet_universal_type=ton_connect',\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'openmask',\n name: 'OpenMask',\n image: 'https://raw.githubusercontent.com/OpenProduct/openmask-extension/main/public/openmask-logo-288.png',\n about_url: 'https://www.openmask.app/',\n bridge: [\n {\n type: 'js',\n key: 'openmask'\n }\n ],\n platforms: ['chrome'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'BitgetWeb3',\n name: 'BitgetWeb3',\n image: 'https://img.bitgetimg.com/image/third/1731638059795.png',\n about_url: 'https://www.bitget.com',\n universal_url: 'https://t.me/BitgetOfficialBot?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://ton-connect-bridge.bgwapi.io/bridge'\n }\n ],\n platforms: ['ios', 'android', 'windows', 'macos', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'xtonwallet',\n name: 'XTONWallet',\n image: 'https://xtonwallet.com/assets/img/icon-256-back.png',\n about_url: 'https://xtonwallet.com',\n bridge: [\n {\n type: 'js',\n key: 'xtonwallet'\n }\n ],\n platforms: ['chrome', 'firefox'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 1,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'tonwallet',\n name: 'TON Wallet',\n image: 'https://wallet.ton.org/assets/ui/qr-logo.png',\n about_url:\n 'https://chrome.google.com/webstore/detail/ton-wallet/nphplpgoakhhjchkkhmiggakijnkhfnd',\n bridge: [\n {\n type: 'js',\n key: 'tonwallet'\n }\n ],\n platforms: ['chrome'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'bitgetWalletLite',\n name: 'Bitget Wallet Lite',\n image: 'https://raw.githubusercontent.com/bitgetwallet/download/refs/heads/main/logo/png/bitget_wallet_lite_logo_288.png',\n about_url: 'https://web3.bitget.com',\n universal_url: 'https://t.me/BitgetWallet_TGBot?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://ton-connect-bridge.bgwapi.io/bridge'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 255,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'tomoWallet',\n name: 'Tomo Wallet',\n image: 'https://pub.tomo.inc/logo.png',\n about_url: 'https://www.tomo.inc/',\n universal_url: 'https://t.me/tomowalletbot?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://go-bridge.tomo.inc/bridge'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'miraiapp-tg',\n name: 'Mirai Mini App',\n image: 'https://cdn.mirailabs.co/miraihub/miraiapp-tg-icon-288.png',\n about_url: 'https://mirai.app',\n universal_url: 'https://t.me/MiraiAppBot?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://bridge.mirai.app'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 255,\n extraCurrencySupported: false\n },\n {\n name: 'SignData',\n types: ['text', 'binary', 'cell']\n }\n ]\n },\n {\n app_name: 'Architec.ton',\n name: 'Architec.ton',\n image: 'https://raw.githubusercontent.com/Architec-Ton/wallet-tma/refs/heads/dev/public/images/arcwallet_logo.png',\n about_url: 'https://architecton.tech',\n universal_url: 'https://t.me/architec_ton_bot?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://tc.architecton.su/bridge'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 255,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'tokenpocket',\n name: 'TokenPocket',\n image: 'https://hk.tpstatic.net/logo/tokenpocket.png',\n about_url: 'https://www.tokenpocket.pro',\n universal_url: 'https://tp-lab.tptool.pro/ton-connect/',\n bridge: [\n {\n type: 'js',\n key: 'tokenpocket'\n },\n {\n type: 'sse',\n url: 'https://ton-connect.mytokenpocket.vip/bridge'\n }\n ],\n platforms: ['ios', 'android'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'uxuyWallet',\n name: 'UXUY Wallet',\n image: 'https://chain-cdn.uxuy.com/logo/square_288.png',\n about_url: 'https://docs.uxuy.com',\n universal_url: 'https://t.me/UXUYbot?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://bridge.uxuy.me/bridge'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'tonkeeper-pro',\n name: 'Tonkeeper Pro',\n image: 'https://tonkeeper.com/assets/tonconnect-icon-pro.png',\n tondns: 'tonkeeper.ton',\n about_url: 'https://tonkeeper.com/pro',\n universal_url: 'https://app.tonkeeper.com/pro/ton-connect',\n deepLink: 'tonkeeper-pro-tc://',\n bridge: [\n {\n type: 'sse',\n url: 'https://bridge.tonapi.io/bridge'\n }\n ],\n platforms: ['ios', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 255,\n extraCurrencySupported: true\n },\n {\n name: 'SignData',\n types: ['text', 'binary', 'cell']\n }\n ]\n },\n {\n app_name: 'nicegramWallet',\n name: 'Nicegram Wallet',\n image: 'https://static.nicegram.app/icon.png',\n about_url: 'https://nicegram.app',\n universal_url: 'https://nicegram.app/tc',\n deepLink: 'nicegram-tc://',\n bridge: [\n {\n type: 'sse',\n url: 'https://tc.nicegram.app/bridge'\n },\n {\n type: 'js',\n key: 'nicegramWallet'\n }\n ],\n platforms: ['ios', 'android'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 255,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'echoooTonWallet',\n name: 'EchoooWallet',\n image: 'https://cdn.echooo.xyz/front-end/source/images/logo/echooo-ton.png',\n about_url: 'https://www.echooo.xyz',\n universal_url: 'https://www.echooo.xyz/ton-connect',\n deepLink: 'echooo://',\n bridge: [\n {\n type: 'js',\n key: 'echoooTonWallet'\n },\n {\n type: 'sse',\n url: 'https://ton-connect-bridge.echooo.link/bridge'\n }\n ],\n platforms: ['ios', 'android'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 255,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'blitzwallet',\n name: 'BLITZ wallet',\n image: 'https://blitzwallet.cfd/wallet/public/logo.png',\n about_url: 'https://blitzwallet.cfd',\n universal_url: 'https://t.me/blitz_wallet_bot?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://blitzwallet.cfd/bridge/'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'koloWeb3Wallet',\n name: 'Kolo',\n image: 'https://raw.githubusercontent.com/onidev1/tc-assets/refs/heads/main/kolo_logo_288.png',\n about_url: 'https://kolo.xyz',\n universal_url: 'https://t.me/kolo?attach=wallet',\n bridge: [\n {\n type: 'sse',\n url: 'https://web3-bridge.kolo.in/bridge'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 255,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'imToken',\n name: 'imToken',\n image: 'https://aws-v2-cdn.token.im/orbit/token-v2/icons/logo-ton-connect.png',\n about_url: 'https://token.im',\n universal_url: 'https://connect.token.im/link/ton-connect',\n deepLink: 'imtokenv2://link/ton-connect',\n bridge: [\n {\n type: 'sse',\n url: 'https://connect.token.im/tonbridge'\n },\n {\n type: 'js',\n key: 'imToken'\n }\n ],\n platforms: ['ios', 'android'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 255,\n extraCurrencySupported: false\n }\n ]\n },\n {\n app_name: 'cactuslink',\n name: 'Cactus Link',\n image: 'https://downloads.mycactus.com/288_cactus_link.png',\n about_url: 'https://www.mycactus.com/defi-connector',\n bridge: [\n {\n type: 'js',\n key: 'cactuslink_ton'\n }\n ],\n platforms: ['chrome'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n },\n {\n name: 'SignData',\n types: ['text', 'binary']\n }\n ]\n },\n {\n app_name: 'onekey',\n name: 'OneKey',\n image: 'https://uni.onekey-asset.com/static/logo/onekey-x288.png',\n about_url: 'https://onekey.so',\n bridge: [\n {\n type: 'js',\n key: 'onekeyTonWallet'\n }\n ],\n platforms: ['chrome'],\n features: [\n {\n name: 'SendTransaction',\n maxMessages: 4,\n extraCurrencySupported: false\n }\n ]\n }\n];\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when request to the wallet contains errors.\n */\nexport class BadRequestError extends TonConnectError {\n protected get info(): string {\n return 'Request to the wallet contains errors.';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, BadRequestError.prototype);\n }\n}\n","import { Feature } from '@tonconnect/protocol';\n\n/**\n * Common information for injectable and http-compatible wallets.\n */\nexport interface WalletInfoBase {\n /**\n * Human-readable name of the wallet.\n */\n name: string;\n\n /**\n * ID of the wallet, equals to the `appName` property into {@link Wallet.device}.\n */\n appName: string;\n\n /**\n * Url to the icon of the wallet. Resolution 288×288px. On non-transparent background, without rounded corners. PNG format.\n */\n imageUrl: string;\n\n /**\n * Will be used in the protocol later.\n */\n tondns?: string;\n\n /**\n * Info or landing page of your wallet. May be useful for TON newcomers.\n */\n aboutUrl: string;\n\n /**\n * List of features supported by the wallet.\n */\n features?: Feature[];\n\n /**\n * OS and browsers where the wallet could be installed\n */\n platforms: (\n | 'ios'\n | 'android'\n | 'macos'\n | 'windows'\n | 'linux'\n | 'chrome'\n | 'firefox'\n | 'safari'\n )[];\n}\n\n/**\n * Http-compatible wallet information.\n */\nexport interface WalletInfoRemote extends WalletInfoBase {\n /**\n * Base part of the wallet universal url. The link should support [Ton Connect parameters]{@link https://github.com/ton-connect/docs/blob/main/bridge.md#universal-link}.\n */\n universalLink: string;\n\n /**\n * Native wallet app deepLink. The link should support [Ton Connect parameters]{@link https://github.com/ton-connect/docs/blob/main/bridge.md#universal-link}.\n */\n deepLink?: string;\n\n /**\n * Url of the wallet's implementation of the [HTTP bridge]{@link https://github.com/ton-connect/docs/blob/main/bridge.md#http-bridge}.\n */\n bridgeUrl: string;\n}\n\n/**\n * JS-injectable wallet information.\n */\nexport interface WalletInfoInjectable extends WalletInfoBase {\n /**\n * If the wallet handles JS Bridge connection, specifies the binding for the bridge object accessible through window. Example: the key \"tonkeeper\" means the bridge can be accessed as window.tonkeeper.\n */\n jsBridgeKey: string;\n\n /**\n * Indicates if the wallet currently is injected to the webpage.\n */\n injected: boolean;\n\n /**\n * Indicates if the dapp is opened inside this wallet's browser.\n */\n embedded: boolean;\n}\n\n/**\n * Information about the JS-injectable wallet that is injected to the current webpage.\n */\nexport interface WalletInfoCurrentlyInjected extends WalletInfoInjectable {\n injected: true;\n}\n\n/**\n * Information about the JS-injectable wallet in the browser of which the dApp is opened.\n */\nexport interface WalletInfoCurrentlyEmbedded extends WalletInfoCurrentlyInjected {\n injected: true;\n\n embedded: true;\n}\n\n/**\n * @deprecated Use `WalletInfoInjectable` or `WalletInfoCurrentlyInjected` instead.\n */\nexport interface WalletInfoInjected extends WalletInfoBase {\n jsBridgeKey: string;\n injected: boolean;\n embedded: boolean;\n}\n\nexport type WalletInfo =\n | WalletInfoRemote\n | WalletInfoInjectable\n | (WalletInfoRemote & WalletInfoInjectable);\n\nexport interface WalletInfoDTO {\n name: string;\n app_name: string;\n image: string;\n tondns?: string;\n about_url: string;\n universal_url?: string;\n features?: Feature[];\n platforms: (\n | 'ios'\n | 'android'\n | 'macos'\n | 'windows'\n | 'linux'\n | 'chrome'\n | 'firefox'\n | 'safari'\n )[];\n\n deepLink?: string;\n bridge: (WalletInfoBridgeRemoteDTO | WalletInfoBridgeInjectedDTO)[];\n}\n\nexport interface WalletInfoBridgeRemoteDTO {\n type: 'sse';\n url: string;\n}\n\nexport interface WalletInfoBridgeInjectedDTO {\n type: 'js';\n key: string;\n}\n\n/**\n * Checks if `WalletInfo` is `WalletInfoInjectable` and `WalletInfo` is injected to the current webpage (`walletInfo.injected === true`).\n * @param value WalletInfo to check.\n */\nexport function isWalletInfoCurrentlyInjected(\n value: WalletInfo\n): value is WalletInfoCurrentlyInjected {\n return isWalletInfoInjectable(value) && value.injected;\n}\n\n/**\n * Checks if `WalletInfo` is `WalletInfoInjectable` and dApp is opened inside this wallet's browser.\n * @param value WalletInfo to check.\n */\nexport function isWalletInfoCurrentlyEmbedded(\n value: WalletInfo\n): value is WalletInfoCurrentlyEmbedded {\n return isWalletInfoCurrentlyInjected(value) && value.embedded;\n}\n\n/**\n * Checks if `WalletInfo` is `WalletInfoInjected`, but doesn't check if it is injected to the page or not.\n * @param value WalletInfo to check.\n */\nexport function isWalletInfoInjectable(value: WalletInfo): value is WalletInfoInjectable {\n return 'jsBridgeKey' in value;\n}\n\n/**\n * Checks if `WalletInfo` is `WalletInfoRemote`.\n * @param value WalletInfo to check.\n */\nexport function isWalletInfoRemote(value: WalletInfo): value is WalletInfoRemote {\n return 'bridgeUrl' in value;\n}\n\n/**\n * @deprecated use `isWalletInfoInjectable` or `isWalletInfoCurrentlyInjected` instead.\n * @param value WalletInfo to check.\n */\nexport function isWalletInfoInjected(value: WalletInfo): value is WalletInfoInjected {\n return 'jsBridgeKey' in value;\n}\n","export * from './events';\nexport * from './responses';\n","export { FetchWalletsError } from './fetch-wallets.error';\n","import { Base64, RpcMethod } from '@tonconnect/protocol';\nimport { TonConnectError } from 'src/errors/ton-connect.error';\nimport { BridgeIncomingMessage } from 'src/provider/bridge/models/bridge-incomming-message';\nimport { HttpBridgeGatewayStorage } from 'src/storage/http-bridge-gateway-storage';\nimport { IStorage } from 'src/storage/models/storage.interface';\nimport { addPathToUrl } from 'src/utils/url';\nimport '@tonconnect/isomorphic-eventsource';\nimport '@tonconnect/isomorphic-fetch';\nimport { callForSuccess } from 'src/utils/call-for-success';\nimport { logDebug, logError } from 'src/utils/log';\nimport { createResource } from 'src/utils/resource';\nimport { timeout } from 'src/utils/timeout';\nimport { createAbortController } from 'src/utils/create-abort-controller';\nimport { AnalyticsManager } from 'src/analytics/analytics-manager';\nimport { Analytics } from 'src/analytics/analytics';\nimport { BridgeClientEvent } from 'src/analytics/types';\nimport { OptionalTraceable } from 'src/utils/types';\n\nexport class BridgeGateway {\n private readonly ssePath = 'events';\n\n private readonly postPath = 'message';\n\n private readonly heartbeatMessage = 'heartbeat';\n\n private readonly defaultTtl = 300;\n\n private readonly defaultReconnectDelay = 2000;\n\n private readonly defaultResendDelay = 5000;\n\n private eventSource = createResource(\n async (\n signal?: AbortSignal,\n openingDeadlineMS?: number,\n traceId?: string\n ): Promise<EventSource> => {\n const eventSourceConfig = {\n bridgeUrl: this.bridgeUrl,\n ssePath: this.ssePath,\n sessionId: this.sessionId,\n bridgeGatewayStorage: this.bridgeGatewayStorage,\n errorHandler: this.errorsHandler.bind(this),\n messageHandler: this.messagesHandler.bind(this),\n signal: signal,\n openingDeadlineMS: openingDeadlineMS,\n traceId\n };\n return await createEventSource(eventSourceConfig);\n },\n async (resource: EventSource) => {\n resource.close();\n }\n );\n\n private get isReady(): boolean {\n const eventSource = this.eventSource.current();\n return eventSource?.readyState === EventSource.OPEN;\n }\n\n private get isClosed(): boolean {\n const eventSource = this.eventSource.current();\n return eventSource?.readyState !== EventSource.OPEN;\n }\n\n private get isConnecting(): boolean {\n const eventSource = this.eventSource.current();\n return eventSource?.readyState === EventSource.CONNECTING;\n }\n\n private readonly bridgeGatewayStorage: HttpBridgeGatewayStorage;\n private readonly analytics?: Analytics<BridgeClientEvent, 'bridge_url' | 'client_id'>;\n\n constructor(\n storage: IStorage,\n public readonly bridgeUrl: string,\n public readonly sessionId: string,\n private listener: (msg: BridgeIncomingMessage) => void,\n private errorsListener: (err: Event) => void,\n analyticsManager?: AnalyticsManager\n ) {\n this.bridgeGatewayStorage = new HttpBridgeGatewayStorage(storage, bridgeUrl);\n this.analytics = analyticsManager?.scoped({\n bridge_url: bridgeUrl,\n client_id: sessionId\n });\n }\n\n public async registerSession(options?: RegisterSessionOptions): Promise<void> {\n try {\n this.analytics?.emitBridgeClientConnectStarted({\n trace_id: options?.traceId\n });\n const connectionStarted = Date.now();\n await this.eventSource.create(\n options?.signal,\n options?.openingDeadlineMS,\n options?.traceId\n );\n\n const bridgeConnectDuration = Date.now() - connectionStarted;\n this.analytics?.emitBridgeClientConnectEstablished({\n bridge_connect_duration: bridgeConnectDuration,\n trace_id: options?.traceId\n });\n } catch (error) {\n this.analytics?.emitBridgeClientConnectError({\n trace_id: options?.traceId,\n error_message: String(error)\n });\n throw error;\n }\n }\n\n public async send(\n message: Uint8Array,\n receiver: string,\n topic: RpcMethod,\n options?: OptionalTraceable<{\n ttl?: number;\n signal?: AbortSignal;\n attempts?: number;\n }>\n ): Promise<void>;\n /** @deprecated use send(message, receiver, topic, options) instead */\n public async send(\n message: Uint8Array,\n receiver: string,\n topic: RpcMethod,\n ttl?: number\n ): Promise<void>;\n public async send(\n message: Uint8Array,\n receiver: string,\n topic: RpcMethod,\n ttlOrOptions?:\n | number\n | OptionalTraceable<{ ttl?: number; signal?: AbortSignal; attempts?: number }>\n ): Promise<void> {\n // TODO: remove deprecated method\n const options: OptionalTraceable<{\n ttl?: number;\n signal?: AbortSignal;\n attempts?: number;\n }> = {};\n if (typeof ttlOrOptions === 'number') {\n options.ttl = ttlOrOptions;\n } else {\n options.ttl = ttlOrOptions?.ttl;\n options.signal = ttlOrOptions?.signal;\n options.attempts = ttlOrOptions?.attempts;\n options.traceId = ttlOrOptions?.traceId;\n }\n\n const url = new URL(addPathToUrl(this.bridgeUrl, this.postPath));\n url.searchParams.append('client_id', this.sessionId);\n url.searchParams.append('to', receiver);\n url.searchParams.append('ttl', (options?.ttl || this.defaultTtl).toString());\n url.searchParams.append('topic', topic);\n if (options?.traceId) {\n url.searchParams.append('trace_id', options.traceId);\n }\n\n const body = Base64.encode(message);\n\n await callForSuccess(\n async options => {\n const response = await this.post(url, body, options.signal);\n\n if (!response.ok) {\n throw new TonConnectError(`Bridge send failed, status ${response.status}`);\n }\n },\n {\n attempts: options?.attempts ?? Number.MAX_SAFE_INTEGER,\n delayMs: this.defaultResendDelay,\n signal: options?.signal\n }\n );\n }\n\n public pause(): void {\n this.eventSource.dispose().catch(e => logError(`Bridge pause failed, ${e}`));\n }\n\n public async unPause(): Promise<void> {\n const RECREATE_WITHOUT_DELAY = 0;\n await this.eventSource.recreate(RECREATE_WITHOUT_DELAY);\n }\n\n public async close(): Promise<void> {\n await this.eventSource.dispose().catch(e => logError(`Bridge close failed, ${e}`));\n }\n\n public setListener(listener: (msg: BridgeIncomingMessage) => void): void {\n this.listener = listener;\n }\n\n public setErrorsListener(errorsListener: (err: Event) => void): void {\n this.errorsListener = errorsListener;\n }\n\n private async post(url: URL, body: string, signal?: AbortSignal): Promise<Response> {\n const response = await fetch(url, {\n method: 'post',\n body: body,\n signal: signal\n });\n\n if (!response.ok) {\n throw new TonConnectError(`Bridge send failed, status ${response.status}`);\n }\n\n return response;\n }\n\n private async errorsHandler(eventSource: EventSource, e: Event): Promise<EventSource | void> {\n if (this.isConnecting) {\n eventSource.close();\n throw new TonConnectError('Bridge error, failed to connect');\n }\n\n if (this.isReady) {\n try {\n this.errorsListener(e);\n } catch (e) {}\n return;\n }\n\n if (this.isClosed) {\n eventSource.close();\n logDebug(`Bridge reconnecting, ${this.defaultReconnectDelay}ms delay`);\n return await this.eventSource.recreate(this.defaultReconnectDelay);\n }\n\n throw new TonConnectError('Bridge error, unknown state');\n }\n\n private async messagesHandler(e: MessageEvent<string>): Promise<void> {\n if (e.data === this.heartbeatMessage) {\n return;\n }\n\n await this.bridgeGatewayStorage.storeLastEventId(e.lastEventId);\n\n if (this.isClosed) {\n return;\n }\n\n let bridgeIncomingMessage: BridgeIncomingMessage;\n try {\n const bridgeIncomingMessageRaw = JSON.parse(e.data);\n bridgeIncomingMessage = {\n message: bridgeIncomingMessageRaw.message,\n from: bridgeIncomingMessageRaw.from,\n traceId: bridgeIncomingMessageRaw.trace_id\n };\n } catch (_) {\n throw new TonConnectError(`Bridge message parse failed, message ${e.data}`);\n }\n this.listener(bridgeIncomingMessage);\n }\n}\n\n/**\n * Represents options for creating an event source.\n */\nexport type RegisterSessionOptions = OptionalTraceable<{\n /**\n * Deadline for opening the event source.\n */\n openingDeadlineMS?: number;\n\n /**\n * Signal to abort the operation.\n */\n signal?: AbortSignal;\n}>;\n\n/**\n * Configuration for creating an event source.\n */\nexport type CreateEventSourceConfig = OptionalTraceable<{\n /**\n * URL of the bridge.\n */\n bridgeUrl: string;\n /**\n * Path to the SSE endpoint.\n */\n ssePath: string;\n /**\n * Session ID of the client.\n */\n sessionId: string;\n /**\n * Storage for the last event ID.\n */\n bridgeGatewayStorage: HttpBridgeGatewayStorage;\n /**\n * Error handler for the event source.\n */\n errorHandler: (eventSource: EventSource, e: Event) => Promise<EventSource | void>;\n /**\n * Message handler for the event source.\n */\n messageHandler: (e: MessageEvent<string>) => void;\n /**\n * Signal to abort opening the event source and destroy it.\n */\n signal?: AbortSignal;\n /**\n * Deadline for opening the event source.\n */\n openingDeadlineMS?: number;\n}>;\n\n/**\n * Creates an event source.\n * @param {CreateEventSourceConfig} config - Configuration for creating an event source.\n */\nasync function createEventSource(config: CreateEventSourceConfig): Promise<EventSource> {\n return await timeout(\n async (resolve, reject, deferOptions) => {\n const abortController = createAbortController(deferOptions.signal);\n const signal = abortController.signal;\n\n if (signal.aborted) {\n reject(new TonConnectError('Bridge connection aborted'));\n return;\n }\n\n const url = new URL(addPathToUrl(config.bridgeUrl, config.ssePath));\n url.searchParams.append('client_id', config.sessionId);\n\n const lastEventId = await config.bridgeGatewayStorage.getLastEventId();\n if (lastEventId) {\n url.searchParams.append('last_event_id', lastEventId);\n }\n if (config.traceId) {\n url.searchParams.append('trace_id', config.traceId);\n }\n\n if (signal.aborted) {\n reject(new TonConnectError('Bridge connection aborted'));\n return;\n }\n\n const eventSource = new EventSource(url.toString());\n\n eventSource.onerror = async (reason: Event): Promise<void> => {\n if (signal.aborted) {\n eventSource.close();\n reject(new TonConnectError('Bridge connection aborted'));\n return;\n }\n\n try {\n const newInstance = await config.errorHandler(eventSource, reason);\n if (newInstance !== eventSource) {\n eventSource.close();\n }\n\n if (newInstance && newInstance !== eventSource) {\n resolve(newInstance);\n }\n } catch (e) {\n eventSource.close();\n reject(e);\n }\n };\n eventSource.onopen = (): void => {\n if (signal.aborted) {\n eventSource.close();\n reject(new TonConnectError('Bridge connection aborted'));\n return;\n }\n resolve(eventSource);\n };\n eventSource.onmessage = (event: MessageEvent<string>): void => {\n if (signal.aborted) {\n eventSource.close();\n reject(new TonConnectError('Bridge connection aborted'));\n return;\n }\n config.messageHandler(event);\n };\n\n config.signal?.addEventListener('abort', () => {\n eventSource.close();\n reject(new TonConnectError('Bridge connection aborted'));\n });\n },\n { timeout: config.openingDeadlineMS, signal: config.signal }\n );\n}\n","import { WrongAddressError, ParseHexError } from 'src/errors';\nimport { Base64 } from '@tonconnect/protocol';\n\nconst bounceableTag = 0x11;\nconst noBounceableTag = 0x51;\nconst testOnlyTag = 0x80;\n\n/**\n * Converts raw TON address to no-bounceable user-friendly format. [See details]{@link https://ton.org/docs/learn/overviews/addresses#user-friendly-address}\n * @param hexAddress raw TON address formatted as \"0:<hex string without 0x>\".\n * @param [testOnly=false] convert address to test-only form. [See details]{@link https://ton.org/docs/learn/overviews/addresses#user-friendly-address}\n */\nexport function toUserFriendlyAddress(hexAddress: string, testOnly = false): string {\n const { wc, hex } = parseHexAddress(hexAddress);\n\n let tag = noBounceableTag;\n if (testOnly) {\n tag |= testOnlyTag;\n }\n\n const addr = new Int8Array(34);\n addr[0] = tag;\n addr[1] = wc;\n addr.set(hex, 2);\n\n const addressWithChecksum = new Uint8Array(36);\n addressWithChecksum.set(addr);\n addressWithChecksum.set(crc16(addr), 34);\n\n let addressBase64 = Base64.encode(addressWithChecksum);\n\n return addressBase64.replace(/\\+/g, '-').replace(/\\//g, '_');\n}\n\n/**\n * Validates if the address is in user-friendly format by attempting to parse it.\n * @param address address to validate\n * @returns true if the address is valid user-friendly format, false otherwise\n */\nexport function isValidUserFriendlyAddress(address: string): boolean {\n try {\n parseUserFriendlyAddress(address);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Validates if the address is in raw hex format (e.g., \"0:1234...\" or \"-1:1234...\").\n * @param address address to validate\n * @returns true if the address is valid raw format, false otherwise\n */\nexport function isValidRawAddress(address: string): boolean {\n try {\n parseHexAddress(address);\n return true;\n } catch {\n return false;\n }\n}\n\nexport function toRawAddress({ wc, hex }: { wc: number; hex: string }): string {\n return `${wc}:${hex}`;\n}\n\n/**\n * Parses user-friendly address and returns its components.\n * @param address user-friendly address\n * @returns parsed address components\n */\nexport function parseUserFriendlyAddress(address: string): {\n wc: 0 | -1;\n hex: string;\n testOnly: boolean;\n isBounceable: boolean;\n} {\n const base64 = address.replace(/-/g, '+').replace(/_/g, '/');\n\n let decoded: Uint8Array;\n try {\n decoded = Base64.decode(base64).toUint8Array();\n } catch {\n throw new WrongAddressError(`Invalid base64 encoding in address: ${address}`);\n }\n\n if (decoded.length !== 36) {\n throw new WrongAddressError(`Invalid address length: ${address}`);\n }\n\n const addr = decoded.slice(0, 34);\n const checksum = decoded.slice(34, 36);\n\n const calculatedChecksum = crc16(addr);\n if (!checksum.every((byte, i) => byte === calculatedChecksum[i])) {\n throw new WrongAddressError(`Invalid checksum in address: ${address}`);\n }\n\n let tag = addr[0]!;\n let isTestOnly = false;\n let isBounceable = false;\n if (tag & testOnlyTag) {\n isTestOnly = true;\n tag = tag ^ testOnlyTag;\n }\n if (tag !== bounceableTag && tag !== noBounceableTag) {\n throw new WrongAddressError(`Unknown address tag: ${tag}`);\n }\n\n isBounceable = tag === bounceableTag;\n let wc = null;\n if (addr[1] === 0xff) {\n // TODO we should read signed integer here\n wc = -1;\n } else {\n wc = addr[1] as 0 | -1;\n }\n const hex = addr.slice(2);\n\n if (wc !== 0 && wc !== -1) {\n throw new WrongAddressError(`Invalid workchain: ${wc}`);\n }\n\n return {\n wc,\n hex: Array.from(hex)\n .map(b => b.toString(16).padStart(2, '0'))\n .join(''),\n testOnly: isTestOnly,\n isBounceable\n };\n}\n\nfunction parseHexAddress(hexAddress: string): { wc: 0 | -1; hex: Uint8Array } {\n if (!hexAddress.includes(':')) {\n throw new WrongAddressError(`Wrong address ${hexAddress}. Address must include \":\".`);\n }\n\n const parts = hexAddress.split(':');\n if (parts.length !== 2) {\n throw new WrongAddressError(\n `Wrong address ${hexAddress}. Address must include \":\" only once.`\n );\n }\n\n const wc = parseInt(parts[0]!);\n if (wc !== 0 && wc !== -1) {\n throw new WrongAddressError(\n `Wrong address ${hexAddress}. WC must be eq 0 or -1, but ${wc} received.`\n );\n }\n\n const hex = parts[1];\n if (hex?.length !== 64) {\n throw new WrongAddressError(\n `Wrong address ${hexAddress}. Hex part must be 64bytes length, but ${hex?.length} received.`\n );\n }\n\n return {\n wc,\n hex: hexToBytes(hex)\n };\n}\n\nfunction crc16(data: ArrayLike<number>): Uint8Array {\n const poly = 0x1021;\n let reg = 0;\n const message = new Uint8Array(data.length + 2);\n message.set(data);\n for (let byte of message) {\n let mask = 0x80;\n while (mask > 0) {\n reg <<= 1;\n if (byte & mask) {\n reg += 1;\n }\n mask >>= 1;\n if (reg > 0xffff) {\n reg &= 0xffff;\n reg ^= poly;\n }\n }\n }\n return new Uint8Array([Math.floor(reg / 256), reg % 256]);\n}\n\nconst toByteMap: Record<string, number> = {};\nfor (let ord = 0; ord <= 0xff; ord++) {\n let s = ord.toString(16);\n if (s.length < 2) {\n s = '0' + s;\n }\n toByteMap[s] = ord;\n}\n\nexport function hexToBytes(hex: string): Uint8Array {\n hex = hex.toLowerCase();\n const length2 = hex.length;\n if (length2 % 2 !== 0) {\n throw new ParseHexError('Hex string must have length a multiple of 2: ' + hex);\n }\n const length = length2 / 2;\n const result = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n const doubled = i * 2;\n const hexSubstring = hex.substring(doubled, doubled + 2);\n if (!toByteMap.hasOwnProperty(hexSubstring)) {\n throw new ParseHexError('Invalid hex character: ' + hexSubstring);\n }\n result[i] = toByteMap[hexSubstring]!;\n }\n return result;\n}\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when send transaction or other protocol methods called while wallet is not connected.\n */\nexport class WalletNotConnectedError extends TonConnectError {\n protected get info(): string {\n return 'Send transaction or other protocol methods called while wallet is not connected.';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, WalletNotConnectedError.prototype);\n }\n}\n","import { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when an error occurred while fetching the wallets list.\n */\nexport class FetchWalletsError extends TonConnectError {\n protected get info(): string {\n return 'An error occurred while fetching the wallets list.';\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, FetchWalletsError.prototype);\n }\n}\n","export async function waitForSome<T>(\n promises: Promise<T>[],\n count: number\n): Promise<PromiseSettledResult<T>[]> {\n if (count <= 0) return [];\n if (count > promises.length) {\n throw new RangeError('count cannot be greater than the number of promises');\n }\n\n const results: PromiseSettledResult<T>[] = new Array(promises.length);\n let settledCount = 0;\n\n return new Promise(resolve => {\n promises.forEach((p, index) => {\n Promise.resolve(p)\n .then(value => ({ status: 'fulfilled' as const, value }))\n .catch(reason => ({ status: 'rejected' as const, reason }))\n .then(result => {\n results[index] = result;\n settledCount++;\n if (settledCount === count) {\n resolve(results);\n }\n });\n });\n });\n}\n","export { LocalstorageNotFoundError } from './localstorage-not-found.error';\n","(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES,\n\n gf: gf,\n D: D,\n L: L,\n pack25519: pack25519,\n unpack25519: unpack25519,\n M: M,\n A: A,\n S: S,\n Z: Z,\n pow2523: pow2523,\n add: add,\n set25519: set25519,\n modL: modL,\n scalarmult: scalarmult,\n scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return null;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","import { DeviceInfo, KeyPair, SessionCrypto, TonAddressItemReply } from '@tonconnect/protocol';\nimport { BridgeSessionRaw } from 'src/provider/bridge/models/bridge-session-raw';\nimport { BridgeSession } from './bridge-session';\nimport { WalletConnectionSourceHTTP } from 'src/models';\nimport { Optional } from 'src/utils/types';\n\nexport const CONNECTION_HTTP_EXPIRATION_TIME = 5 * 60 * 1000;\n\nexport type BridgeConnection =\n | BridgeConnectionHttp\n | BridgePendingConnectionHttp\n | BridgeConnectionInjected\n | BridgeConnectionWalletConnect;\n\nexport interface BridgeConnectionWalletConnect {\n type: 'wallet-connect';\n}\n\nexport interface BridgeConnectionInjected {\n type: 'injected';\n jsBridgeKey: string;\n nextRpcRequestId: number;\n}\n\nexport interface BridgeConnectionHttp {\n type: 'http';\n lastWalletEventId?: number;\n nextRpcRequestId: number;\n connectEvent: {\n event: 'connect';\n payload: {\n items: [TonAddressItemReply];\n device: DeviceInfo;\n };\n };\n session: BridgeSession;\n}\n\nexport interface BridgePendingConnectionHttp {\n type: 'http';\n sessionCrypto: SessionCrypto;\n connectionSource:\n | Optional<WalletConnectionSourceHTTP, 'universalLink'>\n | Pick<WalletConnectionSourceHTTP, 'bridgeUrl'>[];\n}\n\nexport function isPendingConnectionHttp(\n connection: BridgePendingConnectionHttp | BridgeConnectionHttp\n): connection is BridgePendingConnectionHttp {\n return !('connectEvent' in connection);\n}\n\nexport function isPendingConnectionHttpRaw(\n connection: BridgePendingConnectionHttpRaw | BridgeConnectionHttpRaw\n): connection is BridgePendingConnectionHttpRaw {\n return !('connectEvent' in connection);\n}\n\nexport function isExpiredPendingConnectionHttpRaw(\n connection: BridgePendingConnectionHttpRaw\n): boolean {\n return Date.now() - (connection.createdAt ?? 0) > CONNECTION_HTTP_EXPIRATION_TIME;\n}\n\nexport type BridgeConnectionHttpRaw = Omit<BridgeConnectionHttp, 'session'> & {\n session: BridgeSessionRaw;\n};\n\nexport type BridgePendingConnectionHttpRaw = Omit<BridgePendingConnectionHttp, 'sessionCrypto'> & {\n sessionCrypto: KeyPair;\n createdAt?: number;\n};\n\nexport type BridgeConnectionRaw =\n | BridgeConnectionHttpRaw\n | BridgePendingConnectionHttpRaw\n | BridgeConnectionInjected\n | BridgeConnectionWalletConnect;\n","/**\n * The MIT License (MIT)\n *\n * Copyright (c) 2010-2020 Robert Kieffer and other contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nimport { validate } from './validate';\n\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nconst byteToHex: string[] = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr: Uint8Array, offset = 0): string {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n //\n // Note to future-self: No, you can't remove the `toLowerCase()` call.\n // REF: https://github.com/uuidjs/uuid/pull/677#issuecomment-1757351351\n return (\n byteToHex[arr[offset + 0]!]! +\n byteToHex[arr[offset + 1]!] +\n byteToHex[arr[offset + 2]!] +\n byteToHex[arr[offset + 3]!] +\n '-' +\n byteToHex[arr[offset + 4]!] +\n byteToHex[arr[offset + 5]!] +\n '-' +\n byteToHex[arr[offset + 6]!] +\n byteToHex[arr[offset + 7]!] +\n '-' +\n byteToHex[arr[offset + 8]!] +\n byteToHex[arr[offset + 9]!] +\n '-' +\n byteToHex[arr[offset + 10]!] +\n byteToHex[arr[offset + 11]!] +\n byteToHex[arr[offset + 12]!] +\n byteToHex[arr[offset + 13]!] +\n byteToHex[arr[offset + 14]!] +\n byteToHex[arr[offset + 15]!]\n ).toLowerCase();\n}\n\nexport function stringify(arr: Uint8Array, offset = 0) {\n const uuid = unsafeStringify(arr, offset);\n\n // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n","import { TonConnectError } from 'src/errors';\nimport { delay } from 'src/utils/delay';\nimport { createAbortController } from 'src/utils/create-abort-controller';\n\n/**\n * The resource interface.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type Resource<T, Args extends any[]> = {\n /**\n * Create a new resource.\n */\n create: (abortSignal?: AbortSignal, ...args: Args) => Promise<T>;\n\n /**\n * Get the current resource.\n */\n current: () => T | null;\n\n /**\n * Dispose the current resource.\n */\n dispose: () => Promise<void>;\n\n /**\n * Recreate the current resource.\n */\n recreate: (delayMs: number) => Promise<T>;\n};\n\n/**\n * Create a resource.\n *\n * @template T - The type of the resource.\n * @template Args - The type of the arguments for creating the resource.\n *\n * @param {(...args: Args) => Promise<T>} createFn - A function that creates the resource.\n * @param {(resource: T) => Promise<void>} [disposeFn] - An optional function that disposes the resource.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function createResource<T extends EventSource, Args extends any[]>(\n createFn: (signal?: AbortSignal, ...args: Args) => Promise<T>,\n disposeFn: (resource: T) => Promise<void>\n): Resource<T, Args> {\n let currentResource: T | null = null;\n let currentArgs: Args | null = null;\n let currentPromise: Promise<T> | null = null;\n let currentSignal: AbortSignal | null = null;\n let abortController: AbortController | null = null;\n\n // create a new resource\n const create = async (signal?: AbortSignal, ...args: Args): Promise<T> => {\n currentSignal = signal ?? null;\n\n abortController?.abort();\n abortController = createAbortController(signal);\n\n if (abortController.signal.aborted) {\n throw new TonConnectError('Resource creation was aborted');\n }\n\n currentArgs = args ?? null;\n\n const promise = createFn(abortController.signal, ...args);\n currentPromise = promise;\n const resource = await promise;\n\n if (currentPromise !== promise && resource !== currentResource) {\n await disposeFn(resource);\n throw new TonConnectError('Resource creation was aborted by a new resource creation');\n }\n\n currentResource = resource;\n return currentResource;\n };\n\n // get the current resource\n const current = (): T | null => {\n return currentResource ?? null;\n };\n\n // dispose the current resource\n const dispose = async (): Promise<void> => {\n try {\n const resource = currentResource;\n currentResource = null;\n\n const promise = currentPromise;\n currentPromise = null;\n\n try {\n abortController?.abort();\n } catch (e) {}\n\n await Promise.allSettled([\n resource ? disposeFn(resource) : Promise.resolve(),\n promise ? disposeFn(await promise) : Promise.resolve()\n ]);\n } catch (e) {}\n };\n\n // recreate the current resource\n const recreate = async (delayMs: number): Promise<T> => {\n const resource = currentResource;\n const promise = currentPromise;\n const args = currentArgs;\n const signal = currentSignal;\n\n await delay(delayMs);\n\n if (\n resource === currentResource &&\n promise === currentPromise &&\n args === currentArgs &&\n signal === currentSignal\n ) {\n return await create(currentSignal!, ...((args ?? []) as Args));\n }\n\n throw new TonConnectError('Resource recreation was aborted by a new resource creation');\n };\n\n return {\n create,\n current,\n dispose,\n recreate\n };\n}\n","import {\n CONNECT_EVENT_ERROR_CODES,\n SEND_TRANSACTION_ERROR_CODES,\n SendTransactionRpcRequest,\n SendTransactionRpcResponseError,\n SendTransactionRpcResponseSuccess\n} from '@tonconnect/protocol';\nimport { BadRequestError, TonConnectError, UnknownAppError, UserRejectsError } from 'src/errors';\nimport { UnknownError } from 'src/errors/unknown.error';\nimport { SendTransactionRequest, SendTransactionResponse } from 'src/models/methods';\nimport { RpcParser } from 'src/parsers/rpc-parser';\nimport { WithoutId } from 'src/utils/types';\n\ntype ArrayElement<T> = T extends Array<infer U> ? U : never;\ntype Message = ArrayElement<SendTransactionRequest['messages']>;\n\nconst sendTransactionErrors: Partial<Record<CONNECT_EVENT_ERROR_CODES, typeof TonConnectError>> = {\n [SEND_TRANSACTION_ERROR_CODES.UNKNOWN_ERROR]: UnknownError,\n [SEND_TRANSACTION_ERROR_CODES.USER_REJECTS_ERROR]: UserRejectsError,\n [SEND_TRANSACTION_ERROR_CODES.BAD_REQUEST_ERROR]: BadRequestError,\n [SEND_TRANSACTION_ERROR_CODES.UNKNOWN_APP_ERROR]: UnknownAppError\n};\n\nclass SendTransactionParser extends RpcParser<'sendTransaction'> {\n convertToRpcRequest(\n request: Omit<SendTransactionRequest, 'validUntil' | 'messages'> & {\n valid_until: number;\n messages: Array<\n Omit<Message, 'extraCurrency'> & { extra_currency?: Message['extraCurrency'] }\n >;\n }\n ): WithoutId<SendTransactionRpcRequest> {\n return {\n method: 'sendTransaction',\n params: [JSON.stringify(request)]\n };\n }\n\n parseAndThrowError(response: WithoutId<SendTransactionRpcResponseError>): never {\n let ErrorConstructor: typeof TonConnectError = UnknownError;\n\n if (response.error.code in sendTransactionErrors) {\n ErrorConstructor = sendTransactionErrors[response.error.code] || UnknownError;\n }\n\n throw new ErrorConstructor(response.error.message);\n }\n\n convertFromRpcResponse(\n rpcResponse: WithoutId<SendTransactionRpcResponseSuccess>\n ): SendTransactionResponse {\n return {\n boc: rpcResponse.result\n };\n }\n}\n\nexport const sendTransactionParser = new SendTransactionParser();\n","import { isValidUserFriendlyAddress, isValidRawAddress } from 'src/utils/address';\nimport { getDomain } from 'src/utils/web-api';\n\nconst BASE64_REGEX = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;\nconst BASE64URL_REGEX = /^[A-Za-z0-9\\-_]+$/;\n\nconst BOC_PREFIX = 'te6cc';\nconst INTEGER_REGEX = /^-?\\d+$/;\nconst POSITIVE_INTEGER_REGEX = /^\\d+$/;\n\nconst MAX_DOMAIN_BYTES = 128;\nconst MAX_PAYLOAD_BYTES = 128;\nconst MAX_TOTAL_BYTES = 222;\n\ntype ValidationResult = string | null;\n\nfunction isValidNumber(value: unknown): value is number {\n return typeof value === 'number' && !isNaN(value);\n}\n\nfunction isValidString(value: unknown): value is string {\n return typeof value === 'string' && value.length > 0;\n}\n\nfunction isValidAddress(value: unknown): boolean {\n return isValidString(value) && (isValidRawAddress(value) || isValidUserFriendlyAddress(value));\n}\n\nfunction isValidNetwork(value: unknown): boolean {\n return isValidString(value) && /^-?\\d+$/.test(value);\n}\n\nfunction isValidBoc(value: unknown): value is string {\n return (\n typeof value === 'string' &&\n (BASE64_REGEX.test(value) || BASE64URL_REGEX.test(value)) &&\n value.startsWith(BOC_PREFIX)\n );\n}\n\nfunction isValidObject(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isValidArray(value: unknown): value is unknown[] {\n return Array.isArray(value);\n}\n\nfunction hasExtraProperties(obj: Record<string, unknown>, allowedKeys: string[]): boolean {\n return Object.keys(obj).some(key => !allowedKeys.includes(key));\n}\n\nexport function validateSendTransactionRequest(data: unknown): ValidationResult {\n if (!isValidObject(data)) {\n return 'Request must be an object';\n }\n\n const allowedKeys = ['validUntil', 'network', 'from', 'messages'];\n if (hasExtraProperties(data, allowedKeys)) {\n return 'Request contains extra properties';\n }\n\n if (data.validUntil) {\n if (!isValidNumber(data.validUntil)) {\n return \"Incorrect 'validUntil'\";\n }\n\n const now = Math.floor(Date.now() / 1000);\n const fiveMinutesFromNow = now + 300;\n if (data.validUntil > fiveMinutesFromNow) {\n console.warn(\n `validUntil (${data.validUntil}) is more than 5 minutes from now (${now})`\n );\n }\n }\n\n if (data.network !== undefined) {\n if (!isValidNetwork(data.network)) {\n return \"Invalid 'network' format\";\n }\n }\n\n if (data.from !== undefined && !isValidAddress(data.from)) {\n return \"Invalid 'from' address format\";\n }\n\n if (!isValidArray(data.messages) || data.messages.length === 0) {\n return \"'messages' is required\";\n }\n\n for (let i = 0; i < data.messages.length; i++) {\n const message = data.messages[i];\n const messageError = validateTransactionMessage(message, i);\n if (messageError) {\n return messageError;\n }\n }\n\n return null;\n}\n\nfunction validateTransactionMessage(message: unknown, index: number): ValidationResult {\n if (!isValidObject(message)) {\n return `Message at index ${index} must be an object`;\n }\n\n const allowedKeys = ['address', 'amount', 'stateInit', 'payload', 'extraCurrency'];\n if (hasExtraProperties(message, allowedKeys)) {\n return `Message at index ${index} contains extra properties`;\n }\n\n if (!isValidString(message.address)) {\n return `'address' is required in message at index ${index}`;\n }\n if (!isValidUserFriendlyAddress(message.address)) {\n return `Wrong 'address' format in message at index ${index}`;\n }\n\n if (!isValidString(message.amount)) {\n return `'amount' is required in message at index ${index}`;\n }\n if (!/^[0-9]+$/.test(message.amount)) {\n return `Incorrect 'amount' in message at index ${index}`;\n }\n\n if (message.stateInit !== undefined) {\n if (!isValidString(message.stateInit) || !isValidBoc(message.stateInit)) {\n return `Invalid 'stateInit' in message at index ${index}`;\n }\n }\n\n if (message.payload !== undefined) {\n if (!isValidString(message.payload) || !isValidBoc(message.payload)) {\n return `Invalid 'payload' in message at index ${index}`;\n }\n }\n\n if (message.extraCurrency !== undefined) {\n if (!isValidObject(message.extraCurrency)) {\n return `Invalid 'extraCurrency' in message at index ${index}`;\n }\n for (const [key, value] of Object.entries(message.extraCurrency)) {\n if (\n !INTEGER_REGEX.test(key) ||\n typeof value !== 'string' ||\n !POSITIVE_INTEGER_REGEX.test(value)\n ) {\n return `Invalid 'extraCurrency' format in message at index ${index}`;\n }\n }\n }\n\n return null;\n}\n\nexport function validateConnectAdditionalRequest(data: unknown): ValidationResult {\n if (!isValidObject(data)) {\n return 'Request must be an object';\n }\n\n const allowedKeys = ['tonProof'];\n if (hasExtraProperties(data, allowedKeys)) {\n return 'Request contains extra properties';\n }\n\n if (data.tonProof !== undefined) {\n if (typeof data.tonProof !== 'string') {\n return \"Invalid 'tonProof'\";\n }\n\n const payload = data.tonProof;\n if (payload.length === 0) {\n return \"Empty 'tonProof' payload\";\n }\n\n // Get current domain for validation first\n const domain = getDomain();\n if (!domain) {\n // In Node.js environment, skip domain validation\n return null;\n }\n\n // Validate domain size (max 128 bytes)\n const domainBytes = new TextEncoder().encode(domain).length;\n if (domainBytes > MAX_DOMAIN_BYTES) {\n return 'Current domain exceeds 128 bytes limit';\n }\n\n // Validate payload size (max 128 bytes)\n const payloadBytes = new TextEncoder().encode(payload).length;\n if (payloadBytes > MAX_PAYLOAD_BYTES) {\n return \"'tonProof' payload exceeds 128 bytes limit\";\n }\n\n // Validate total size (domain + payload <= 222 bytes)\n if (domainBytes + payloadBytes > MAX_TOTAL_BYTES) {\n return \"'tonProof' domain + payload exceeds 222 bytes limit\";\n }\n }\n\n return null;\n}\n\nexport function validateSignDataPayload(data: unknown): ValidationResult {\n if (!isValidObject(data)) {\n return 'Payload must be an object';\n }\n\n if (!isValidString(data.type)) {\n return \"'type' is required\";\n }\n\n switch (data.type) {\n case 'text':\n return validateSignDataPayloadText(data);\n case 'binary':\n return validateSignDataPayloadBinary(data);\n case 'cell':\n return validateSignDataPayloadCell(data);\n default:\n return \"Invalid 'type' value\";\n }\n}\n\nfunction validateSignDataPayloadText(data: Record<string, unknown>): ValidationResult {\n const allowedKeys = ['type', 'text', 'network', 'from'];\n if (hasExtraProperties(data, allowedKeys)) {\n return 'Text payload contains extra properties';\n }\n\n if (!isValidString(data.text)) {\n return \"'text' is required\";\n }\n\n if (data.network !== undefined) {\n if (!isValidNetwork(data.network)) {\n return \"Invalid 'network' format\";\n }\n }\n\n if (data.from !== undefined && !isValidAddress(data.from)) {\n return \"Invalid 'from'\";\n }\n\n return null;\n}\n\nfunction validateSignDataPayloadBinary(data: Record<string, unknown>): ValidationResult {\n const allowedKeys = ['type', 'bytes', 'network', 'from'];\n if (hasExtraProperties(data, allowedKeys)) {\n return 'Binary payload contains extra properties';\n }\n\n if (!isValidString(data.bytes)) {\n return \"'bytes' is required\";\n }\n\n if (data.network !== undefined) {\n if (!isValidNetwork(data.network)) {\n return \"Invalid 'network' format\";\n }\n }\n\n if (data.from !== undefined && !isValidAddress(data.from)) {\n return \"Invalid 'from'\";\n }\n\n return null;\n}\n\nfunction validateSignDataPayloadCell(data: Record<string, unknown>): ValidationResult {\n const allowedKeys = ['type', 'schema', 'cell', 'network', 'from'];\n if (hasExtraProperties(data, allowedKeys)) {\n return 'Cell payload contains extra properties';\n }\n\n if (!isValidString(data.schema)) {\n return \"'schema' is required\";\n }\n\n if (!isValidString(data.cell)) {\n return \"'cell' is required\";\n }\n\n if (!isValidBoc(data.cell)) {\n return \"Invalid 'cell' format (must be valid base64)\";\n }\n\n if (data.network !== undefined) {\n if (!isValidNetwork(data.network)) {\n return \"Invalid 'network' format\";\n }\n }\n\n if (data.from !== undefined && !isValidAddress(data.from)) {\n return \"Invalid 'from'\";\n }\n\n return null;\n}\n\n/**\n * Validates ton_proof item received from wallet in connect event.\n */\n// eslint-disable-next-line complexity\nexport function validateTonProofItemReply(data: unknown): ValidationResult {\n if (!isValidObject(data)) {\n return 'ton_proof item must be an object';\n }\n\n const allowedKeys = ['error', 'proof', 'name'];\n if (hasExtraProperties(data, allowedKeys)) {\n return 'ton_proof item contains extra properties';\n }\n\n const hasProof = Object.prototype.hasOwnProperty.call(data, 'proof');\n const hasError = Object.prototype.hasOwnProperty.call(data, 'error');\n\n if (!hasProof && !hasError) {\n return \"'ton_proof' item must contain either 'proof' or 'error'\";\n }\n\n if (hasProof && hasError) {\n return \"'ton_proof' item must contain either 'proof' or 'error', not both\";\n }\n\n if (hasProof) {\n const proof = (data as Record<string, unknown>).proof as\n | Record<string, unknown>\n | undefined;\n if (!isValidObject(proof)) {\n return \"Invalid 'proof' object\";\n }\n\n if (!isValidNumber(proof.timestamp)) {\n return \"Invalid 'proof.timestamp'\";\n }\n\n const domain = proof.domain as Record<string, unknown> | undefined;\n if (!isValidObject(domain)) {\n return \"Invalid 'proof.domain'\";\n }\n if (!isValidNumber(domain.lengthBytes)) {\n return \"Invalid 'proof.domain.lengthBytes'\";\n }\n if (!isValidString(domain.value)) {\n return \"Invalid 'proof.domain.value'\";\n }\n // Try to verify that provided byte length matches actual byte length of value\n try {\n const encoderAvailable = typeof TextEncoder !== 'undefined';\n const actualLength = encoderAvailable\n ? new TextEncoder().encode(domain.value).length\n : (domain.value as string).length;\n if (actualLength !== (domain.lengthBytes as number)) {\n return \"'proof.domain.lengthBytes' does not match 'proof.domain.value'\";\n }\n } catch {\n // Ignore environment issues; best-effort validation\n }\n\n if (!isValidString(proof.payload)) {\n return \"Invalid 'proof.payload'\";\n }\n\n if (!isValidString(proof.signature) || !BASE64_REGEX.test(proof.signature)) {\n return \"Invalid 'proof.signature' format\";\n }\n }\n\n if (hasError) {\n const error = (data as Record<string, unknown>).error as\n | Record<string, unknown>\n | undefined;\n if (!isValidObject(error)) {\n return \"Invalid 'error' object\";\n }\n\n const allowedErrorKeys = ['code', 'message'];\n if (hasExtraProperties(error, allowedErrorKeys)) {\n return 'ton_proof error contains extra properties';\n }\n\n if (!isValidNumber(error.code)) {\n return \"Invalid 'error.code'\";\n }\n if (!isValidString(error.message)) {\n return \"Invalid 'error.message'\";\n }\n }\n\n return null;\n}\n","import { FetchWalletsError } from 'src/errors/wallets-manager/fetch-wallets.error';\nimport {\n WalletInfoRemote,\n WalletInfoInjectable,\n WalletInfo,\n WalletInfoDTO,\n isWalletInfoCurrentlyEmbedded,\n WalletInfoCurrentlyEmbedded,\n WalletInfoCurrentlyInjected,\n isWalletInfoRemote,\n WalletInfoBase\n} from 'src/models/wallet/wallet-info';\nimport { InjectedProvider } from 'src/provider/injected/injected-provider';\nimport { logError } from 'src/utils/log';\nimport { FALLBACK_WALLETS_LIST } from 'src/resources/fallback-wallets-list';\nimport { isQaModeEnabled } from './utils/qa-mode';\nimport { TonConnectError } from 'src/errors';\n\nexport class WalletsListManager {\n private walletsListDTOCache: Promise<WalletInfoDTO[]> | null = null;\n\n private walletsListDTOCacheCreationTimestamp: number | null = null;\n\n private readonly cacheTTLMs: number | undefined;\n\n private readonly walletsListSource: string;\n\n private readonly onDownloadDurationMeasured?: (duration: number | undefined) => void;\n\n constructor(options?: {\n walletsListSource?: string;\n cacheTTLMs?: number;\n onDownloadDurationMeasured?: (duration: number | undefined) => void;\n }) {\n if (isQaModeEnabled()) {\n this.walletsListSource =\n 'https://raw.githubusercontent.com/ton-connect/wallets-list-staging/refs/heads/main/wallets-v2.json';\n } else {\n this.walletsListSource =\n options?.walletsListSource ?? 'https://config.ton.org/wallets-v2.json';\n }\n\n this.cacheTTLMs = options?.cacheTTLMs;\n this.onDownloadDurationMeasured = options?.onDownloadDurationMeasured;\n }\n\n public async getWallets(): Promise<WalletInfo[]> {\n const [walletsListDTO, currentlyInjectedWallets] = await Promise.all([\n this.fetchWalletsListDTO(),\n this.getCurrentlyInjectedWallets()\n ]);\n\n return this.mergeWalletsLists(\n this.walletConfigDTOListToWalletConfigList(walletsListDTO),\n currentlyInjectedWallets\n );\n }\n\n public async getEmbeddedWallet(): Promise<WalletInfoCurrentlyEmbedded | null> {\n const walletsList = await this.getWallets();\n const embeddedWallets = walletsList.filter(isWalletInfoCurrentlyEmbedded);\n return embeddedWallets.length === 1 ? embeddedWallets[0]! : null;\n }\n\n private async fetchWalletsListDTO(): Promise<WalletInfoDTO[]> {\n if (\n this.cacheTTLMs &&\n this.walletsListDTOCacheCreationTimestamp &&\n Date.now() > this.walletsListDTOCacheCreationTimestamp + this.cacheTTLMs\n ) {\n this.walletsListDTOCache = null;\n }\n\n if (!this.walletsListDTOCache) {\n this.walletsListDTOCache = this.fetchWalletsListFromSource();\n this.walletsListDTOCache\n .then(() => {\n this.walletsListDTOCacheCreationTimestamp = Date.now();\n })\n .catch(() => {\n this.walletsListDTOCache = null;\n this.walletsListDTOCacheCreationTimestamp = null;\n });\n }\n\n return this.walletsListDTOCache;\n }\n\n public async getRemoteWallet(appName: string): Promise<WalletInfoRemote> {\n const walletsList = await this.getWallets();\n\n const wallet = walletsList.find(wallet => wallet.appName === appName);\n\n if (!wallet) {\n throw new TonConnectError(`Wallet info not found for appName: \"${appName}\"`);\n }\n\n if (!isWalletInfoRemote(wallet)) {\n throw new TonConnectError(`Wallet \"${appName}\" is not remote`);\n }\n\n return wallet;\n }\n\n private async fetchWalletsListFromSource(): Promise<WalletInfoDTO[]> {\n let walletsList: WalletInfoDTO[] = [];\n const startTime = performance.now();\n\n try {\n const walletsResponse = await fetch(this.walletsListSource);\n walletsList = await walletsResponse.json();\n\n if (!Array.isArray(walletsList)) {\n throw new FetchWalletsError(\n 'Wrong wallets list format, wallets list must be an array.'\n );\n }\n\n const wrongFormatWallets = walletsList.filter(\n wallet => !this.isCorrectWalletConfigDTO(wallet)\n );\n if (wrongFormatWallets.length) {\n logError(\n `Wallet(s) ${wrongFormatWallets\n .map(wallet => (wallet as WalletInfoDTO)?.name || 'unknown')\n .join(\n ', '\n )} config format is wrong. They were removed from the wallets list.`\n );\n\n walletsList = walletsList.filter(wallet => this.isCorrectWalletConfigDTO(wallet));\n }\n\n const endTime = performance.now();\n const duration = Math.round(endTime - startTime);\n this.onDownloadDurationMeasured?.(duration);\n } catch (e) {\n logError(e);\n walletsList = FALLBACK_WALLETS_LIST;\n\n this.onDownloadDurationMeasured?.(undefined);\n }\n\n return walletsList;\n }\n\n private getCurrentlyInjectedWallets(): WalletInfoCurrentlyInjected[] {\n if (!isQaModeEnabled()) {\n return [];\n }\n\n try {\n return InjectedProvider.getCurrentlyInjectedWallets();\n } catch (e) {\n logError(e);\n return [];\n }\n }\n\n private walletConfigDTOListToWalletConfigList(walletConfigDTO: WalletInfoDTO[]): WalletInfo[] {\n return walletConfigDTO.map(walletConfigDTO => {\n const walletConfig: WalletInfoBase = {\n name: walletConfigDTO.name,\n appName: walletConfigDTO.app_name,\n imageUrl: walletConfigDTO.image,\n aboutUrl: walletConfigDTO.about_url,\n tondns: walletConfigDTO.tondns,\n platforms: walletConfigDTO.platforms,\n features: walletConfigDTO.features\n };\n\n walletConfigDTO.bridge.forEach(bridge => {\n if (bridge.type === 'sse') {\n (walletConfig as WalletInfoRemote).bridgeUrl = bridge.url;\n (walletConfig as WalletInfoRemote).universalLink =\n walletConfigDTO.universal_url!;\n (walletConfig as WalletInfoRemote).deepLink = walletConfigDTO.deepLink;\n }\n if (bridge.type === 'js') {\n const jsBridgeKey = bridge.key;\n (walletConfig as WalletInfoInjectable).jsBridgeKey = jsBridgeKey;\n (walletConfig as WalletInfoInjectable).injected =\n InjectedProvider.isWalletInjected(jsBridgeKey);\n (walletConfig as WalletInfoInjectable).embedded =\n InjectedProvider.isInsideWalletBrowser(jsBridgeKey);\n }\n });\n\n return walletConfig as WalletInfo;\n });\n }\n\n private mergeWalletsLists(list1: WalletInfo[], list2: WalletInfo[]): WalletInfo[] {\n const names = new Set(list1.concat(list2).map(item => item.name));\n\n return [...names.values()].map(name => {\n const list1Item = list1.find(item => item.name === name);\n const list2Item = list2.find(item => item.name === name);\n\n return {\n ...(list1Item && { ...list1Item }),\n ...(list2Item && { ...list2Item })\n } as WalletInfo;\n });\n }\n\n // eslint-disable-next-line complexity\n private isCorrectWalletConfigDTO(value: unknown): value is WalletInfoDTO {\n if (!value || !(typeof value === 'object')) {\n return false;\n }\n\n const containsName = 'name' in value;\n const containsAppName = 'app_name' in value;\n const containsImage = 'image' in value;\n const containsAbout = 'about_url' in value;\n const containsPlatforms = 'platforms' in value;\n\n if (\n !containsName ||\n !containsImage ||\n !containsAbout ||\n !containsPlatforms ||\n !containsAppName\n ) {\n return false;\n }\n\n if (\n !(value as { platforms: unknown }).platforms ||\n !Array.isArray((value as { platforms: unknown }).platforms) ||\n !(value as { platforms: string[] }).platforms.length\n ) {\n return false;\n }\n if (\n !('bridge' in value) ||\n !Array.isArray((value as { bridge: unknown }).bridge) ||\n !(value as { bridge: unknown[] }).bridge.length\n ) {\n return false;\n }\n\n const bridge = (value as { bridge: unknown[] }).bridge;\n\n if (bridge.some(item => !item || typeof item !== 'object' || !('type' in item))) {\n return false;\n }\n\n const sseBridge = bridge.find(item => (item as { type: string }).type === 'sse');\n\n if (sseBridge) {\n if (\n !(typeof sseBridge === 'object' && 'url' in sseBridge) ||\n !(sseBridge as { url: string }).url ||\n !(value as unknown as { universal_url: string }).universal_url\n ) {\n return false;\n }\n }\n\n const jsBridge = bridge.find(item => (item as { type: string }).type === 'js');\n\n if (jsBridge) {\n if (\n typeof jsBridge !== 'object' ||\n !('key' in jsBridge) ||\n !(jsBridge as { key: string }).key\n ) {\n return false;\n }\n }\n\n return true;\n }\n}\n","export type { Account } from './account';\nexport type { Wallet } from './wallet';\nexport type {\n WalletConnectionSource,\n WalletConnectionSourceHTTP,\n WalletConnectionSourceJS,\n WalletConnectionSourceWalletConnect\n} from './wallet-connection-source';\nexport {\n WalletInfo,\n WalletInfoBase,\n WalletInfoInjectable,\n WalletInfoCurrentlyInjected,\n WalletInfoCurrentlyEmbedded,\n WalletInfoRemote,\n WalletInfoInjected,\n isWalletInfoCurrentlyInjected,\n isWalletInfoCurrentlyEmbedded,\n isWalletInfoInjectable,\n isWalletInfoRemote,\n isWalletInfoInjected\n} from './wallet-info';\nexport {\n RequiredFeatures,\n RequiredSendTransactionFeature,\n RequiredSignDataFeature\n} from './require-feature';\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(151);\n"],"names":["WrongAddressError","TonConnectError","info","constructor","args","super","Object","setPrototypeOf","this","prototype","regex","ManifestContentErrorError","TonConnect","WalletsListManager","createConnectionStartedEvent","createConnectionErrorEvent","createConnectionCompletedEvent","createConnectionRestoringStartedEvent","createConnectionRestoringErrorEvent","createConnectionRestoringCompletedEvent","createDisconnectionEvent","createTransactionSentForSignatureEvent","createTransactionSigningFailedEvent","createTransactionSignedEvent","createDataSentForSignatureEvent","createDataSigningFailedEvent","createDataSignedEvent","createRequestVersionEvent","createResponseVersionEvent","createVersionInfo","createWalletModalOpenedEvent","createSelectedWalletEvent","BrowserEventDispatcher","CHAIN","SessionCrypto","CONNECT_ITEM_ERROR_CODES","CONNECT_EVENT_ERROR_CODES","SEND_TRANSACTION_ERROR_CODES","SIGN_DATA_ERROR_CODES","toUserFriendlyAddress","checkRequiredWalletFeatures","isTelegramUrl","encodeTelegramUrlParameters","decodeTelegramUrlParameters","isConnectUrl","enableQaMode","isQaModeEnabled","initializeWalletConnect","isWalletConnectInitialized","UUIDv7","signDataErrors","UNKNOWN_ERROR","UnknownError","USER_REJECTS_ERROR","UserRejectsError","BAD_REQUEST_ERROR","BadRequestError","UNKNOWN_APP_ERROR","UnknownAppError","SignDataParser","RpcParser","convertToRpcRequest","payload","method","params","JSON","stringify","parseAndThrowError","response","ErrorConstructor","error","code","message","convertFromRpcResponse","rpcResponse","result","signDataParser","getClientEnvironment","getBrowser","getLocale","getPlatform","getTelegramUser","LocalstorageNotFoundError","WalletAlreadyConnectedError","signal","abortController","AbortController","aborted","abort","addEventListener","once","type","version","traceId","custom_data","trace_id","wallet","sessionInfo","is_success","createConnectionInfo","error_message","errorCode","error_code","client_id","clientId","wallet_id","walletId","errorMessage","transaction","createTransactionInfo","signedTransaction","signed_transaction","boc","valid_until","String","validUntil","from","account","address","messages","map","amount","state_init","stateInit","createTransactionFullInfo","data","signedData","signed_data","scope","visibleWallets","visible_wallets","lastSelectedWallet","walletsMenu","redirectLink","redirectLinkType","walletRedirectMethod","wallets_menu","wallet_redirect_method","wallet_redirect_link","undefined","wallet_type","appName","ton_connect_sdk_lib","ton_connect_ui_lib","authType","connectItems","tonProof","wallet_address","wallet_state_init","walletStateInit","device","wallet_version","appVersion","auth_type","chain_id","chain","provider","WalletMissingRequiredFeaturesError","options","WalletWrongNetworkError","name","AnalyticsManager","events","timeoutId","isProcessing","backoff","shouldSend","batchTimeoutMs","currentBatchTimeoutMs","maxBatchSize","analyticsUrl","mode","baseEvent","subsystem","tonConnectSdkVersion","client_environment","environment","getStaticConnectionMetrics","addWindowFocusAndBlurSubscriptions","scoped","sharedData","Proxy","get","target","prop","propName","toString","startsWith","eventNamePascal","replace","eventNameKebab","pascalToKebab","event","executedData","fromEntries","entries","key","value","emit","event_name","dynamicMetrics","getDynamicConnectionMetrics","enhancedEvent","event_id","client_timestamp","Math","floor","Date","now","filteredEvent","filterFullModeFields","logDebug","push","length","flush","startTimeout","setTimeout","clearTimeout","eventsToSend","extractEventsToSend","processEventsBatch","restoreEvents","logError","scheduleNextFlushIfNeeded","slice","sendEvents","handleResponse","err","handleUnknownError","status","statusText","isTooManyRequests","handleTooManyRequests","isClientError","handleClientError","isServerError","unshift","fetch","headers","body","HTTP_STATUS","CLIENT_ERROR_START","SERVER_ERROR_START","TOO_MANY_REQUESTS","MAX_BACKOFF_ATTEMPTS","BACKOFF_MULTIPLIER","document","getDocument","hidden","e","getMode","getPendingEventsCount","filtered","field","FULL_MODE_FIELDS","eventName","includes","setWalletListDownloadDuration","duration","wallet_list_download_duration","console","debug","warn","Error","prefix","buf","offset","bytes","v7Bytes","random","rng","msecs","seq","rnds","updateV7State","_state","unsafeStringify","state","RangeError","Uint8Array","paddedLength","padEnd","DappMetadataError","removeUrlLastSlash","url","path","link","URL","protocol","hostname","parameters","replaceAll","PROTOCOL_VERSION","ManifestNotFoundError","getWallets","walletsList","connected","_wallet","statusChangeSubscriptions","forEach","callback","statusChangeErrorSubscriptions","manifestUrl","getWebPageManifest","dappSettings","storage","DefaultStorage","walletsRequiredFeatures","DefaultEnvironment","walletsListSource","cacheTTLMs","walletsListCacheTTLMs","onDownloadDurationMeasured","analytics","eventDispatcher","tracker","TonConnectTracker","initAnalytics","bridgeConnectionStorage","BridgeConnectionStorage","disableAutoPauseConnection","onStatusChange","errorsHandler","filter","item","connect","requestOrOptions","additionalOptions","request","openingDeadlineMS","validationError","validateConnectAdditionalRequest","createAbortController","closeConnection","createProvider","trackConnectionStarted","createConnectRequest","restoreConnection","trackConnectionRestoringStarted","trackConnectionRestoringError","bridgeConnectionType","embeddedWallet","Promise","all","storedConnectionType","getEmbeddedWallet","BridgeProvider","fromStorage","InjectedProvider","WalletConnectProvider","removeConnection","listen","walletEventsListener","bind","onAbortRestore","restoreConnectionTask","callForSuccess","_options","removeEventListener","getSessionInfo","trackConnectionRestoringCompleted","attempts","Number","MAX_SAFE_INTEGER","delayMs","restoreConnectionTimeout","resolve","race","sendTransaction","optionsOrOnRequestSent","onRequestSent","validateSendTransactionRequest","checkConnection","requiredMessagesNumber","requireExtraCurrencies","some","m","extraCurrency","keys","checkSendTransactionSupport","features","trackTransactionSentForSignature","tx","network","cause","expectedChainId","actualChainId","sendRequest","sendTransactionParser","msg","normalizeBase64","extra_currency","isError","trackTransactionSigningFailed","trackTransactionSigned","signData","validateSignDataPayload","checkSignDataSupport","requiredTypes","trackDataSentForSignature","cell","trackDataSigningFailed","trackDataSigned","setConnectionNetwork","desiredChainId","disconnect","WalletNotConnectedError","prevAbortController","onWalletDisconnected","getSessionId","connection","getConnection","sessionCrypto","sessionId","session","walletPublicKey","pauseConnection","pause","unPauseConnection","unPause","catch","analyticsSettings","telegramUser","sharedAnalyticsData","browser","platform","manifest_json_url","origin_url","getOriginWithPath","locale","tg_id","id","tma_is_premium","isPremium","bindEventsTo","Array","isArray","isWalletConnectionSourceJS","jsBridgeKey","isWalletConnectionSourceWalletConnect","onWalletConnected","trackConnectionError","walletError","connectErrorsParser","parseError","onWalletConnectError","connectEvent","tonAccountItem","items","find","tonProofItem","publicKey","validateTonProofItemReply","proof","timestamp","domain","lengthBytes","signature","trackConnectionCompleted","trackDisconnection","isWalletInjected","walletJSKey","isInsideWalletBrowser","analyticsManager","getInjectedConnection","injectedWalletKey","isWindowContainsWallet","window","tonconnect","isWalletBrowser","getCurrentlyInjectedWallets","getWindowEntries","_key","isJSBridgeWithMetadata","walletInfo","app_name","aboutUrl","about_url","imageUrl","image","tondns","injected","embedded","platforms","connectionStorage","unsubscribeCallback","listenSubscriptions","listeners","WalletNotInjectedError","injectedWallet","bridge_key","wallet_app_name","deviceInfo","wallet_app_version","_connect","emitJsBridgeCall","js_bridge_method","emitJsBridgeResponse","makeSubscriptions","listener","emitJsBridgeError","closeAllListeners","then","eventsCallback","getNextRpcRequestId","increaseNextRpcRequestId","send","protocolVersion","updateSession","connectEventError","storeConnection","nextRpcRequestId","getWindow","hasProperties","propertyKeys","every","propertyKey","supportsDeprecatedSendTransactionFeature","sendTransactionFeature","findFeature","requiredFeature","minMessages","extraCurrencyRequired","WalletNotSupportFeatureError","featureName","extraCurrencySupported","maxMessages","logWarning","signDataFeature","feature","types","unsupportedTypes","requiredType","join","correctMessagesNumber","correctExtraCurrency","checkSendTransaction","checkSignData","requiredFeatureName","f","ParseHexError","hasProperty","fn","timeout","reject","deferOptions","walletsListManager","storeKey","setItem","isPendingConnectionHttp","rawSession","sessionKeyPair","stringifyKeypair","bridgeUrl","rawConnection","lastWalletEventId","connectionSource","createdAt","removeItem","stored","getItem","parse","isPendingConnectionHttpRaw","actualizeBridgeConnection","isExpiredPendingConnectionHttpRaw","getHttpConnection","getHttpPendingConnection","getWalletConnectConnection","storeLastWalletEventId","getLastWalletEventId","lastId","getRemoteWallet","actualizedConnection","DEFAULT_REQUEST_ID","connector","projectId","metadata","getWalletConnectOptions","config","networks","namespace","chains","chainNamespace","caipNetworkId","nativeCurrency","symbol","decimals","rpcUrls","default","http","methods","initialize","getUniversalConnector","init","clearAbortController","authentication","nonce","uri","ttl","statement","onConnect","includeTonProof","sendTransactionPayload","promise","signDataPayload","stack","handleWalletConnectError","DISCONNECT_ERROR_CODES","toLowerCase","buildTonProof","auth","iat","p","getTime","s","tonNamespace","namespaces","accounts","disconnectWithError","split","sessionProperties","ton_getPublicKey","ton_getStateInit","isValidUserFriendlyAddress","toRawAddress","parseUserFriendlyAddress","maxProtocolVersion","buildFeatureList","lastError","i","delay","UniversalConnectorCls","walletConnectOptions","uuid","test","tonConnectUiVersion","eventPrefix","setRequestVersionHandler","requestTonConnectUiVersion","dispatchEvent","detail","dispatchUserActionEvent","eventDetails","buildVersionInfo","buildTonConnectEvent","versions","network_id","emitConnectionStarted","main_screen","emitConnectionSelectedWallet","emitConnectionCompleted","emitConnectionError","emitDisconnection","emitTransactionSent","emitTransactionSigned","signed_boc","emitTransactionSigningFailed","emitSignDataRequestInitiated","emitSignDataRequestCompleted","signDataSchema","signDataValue","text","schema","emitSignDataRequestFailed","sign_data_type","sign_data_value","sign_data_schema","origin","location","pathname","localStorage","isLocalStorageAvailable","process","node","InMemoryStorage","getInstance","instance","clear","index","root","module","exports","nacl","util","validateBase64","TypeError","decodeUTF8","d","unescape","encodeURIComponent","b","charCodeAt","encodeUTF8","arr","fromCharCode","decodeURIComponent","escape","atob","Buffer","encodeBase64","decodeBase64","call","len","btoa","storeLastEventId","lastEventId","removeLastEventId","getLastEventId","tryGetLocalStorage","qaModeEnabled","showQaModeBanner","bannerObserver","MutationObserver","mutations","mutation","removedNodes","nodeType","Node","ELEMENT_NODE","element","addQaModeStyles","observe","childList","subtree","head","getElementById","banner","createElement","style","cssText","innerHTML","textContent","appendChild","classList","add","getRandomValues","crypto","rnds8","walletConnectionSource","standardUniversalLink","pendingRequests","Map","gateway","pendingGateways","defaultOpeningDeadlineMS","defaultRetryTimeoutMS","optionalOpenGateways","closeGateways","openGateways","universalLink","generateUniversalLink","storedConnection","close","BridgeGateway","gatewayListener","gatewayErrorsListener","registerSession","encodedRequest","encrypt","hexToByteArray","emitBridgeClientMessageSent","bridge_url","message_id","request_type","set","called","removeBridgeAndSession","bridge","promises","pendingGatewaysListener","bridgeIncomingMessage","except","setErrorsListener","setListener","walletMessage","decrypt","Base64","decode","toUint8Array","emitBridgeClientMessageDecodeError","requestType","emitBridgeClientMessageReceived","delete","tonAddrItem","connectEventToSave","generateTGUniversalLink","generateRegularUniversalLink","searchParams","append","linkParams","startapp","updatedUniversalLink","convertToDirectLink","has","source","gatewaysToWaitFor","max","waitForSome","CustomEvent","connectEventErrorsCodes","MANIFEST_NOT_FOUND_ERROR","MANIFEST_CONTENT_ERROR","metrics","navEntries","performance","getEntriesByType","nav","responseStart","requestStart","conn_ttfb","round","navigatorWithConnection","navigator","mozConnection","webkitConnection","rtt","conn_rtt","effectiveType","conn_network_type","nacl$1","encode","urlSafe","uint8Array","encoded","encodeUint8Array","decodedUint8Array","decodeToUint8Array","toObject","concatUint8Arrays","buffer1","buffer2","mergedArray","splitToUint8Arrays","array","toHexString","byteArray","hexString","byte","parseInt","keyPair","nonceLength","createKeypairFromString","createKeypair","box","secretKey","createNonce","randomBytes","receiverPublicKey","encodedMessage","TextEncoder","senderPublicKey","internalMessage","decrypted","open","TextDecoder","isNode","FALLBACK_WALLETS_LIST","universal_url","deepLink","isWalletInfoCurrentlyInjected","isWalletInfoInjectable","FetchWalletsError","isReady","eventSource","current","readyState","EventSource","OPEN","isClosed","isConnecting","CONNECTING","errorsListener","ssePath","postPath","heartbeatMessage","defaultTtl","defaultReconnectDelay","defaultResendDelay","createResource","eventSourceConfig","bridgeGatewayStorage","errorHandler","messageHandler","messagesHandler","addPathToUrl","onerror","reason","newInstance","onopen","onmessage","createEventSource","resource","HttpBridgeGatewayStorage","emitBridgeClientConnectStarted","connectionStarted","create","bridgeConnectDuration","emitBridgeClientConnectEstablished","bridge_connect_duration","emitBridgeClientConnectError","receiver","topic","ttlOrOptions","post","ok","dispose","recreate","bridgeIncomingMessageRaw","_","hexAddress","testOnly","wc","hex","parseHexAddress","tag","noBounceableTag","testOnlyTag","addr","Int8Array","addressWithChecksum","crc16","bounceableTag","base64","decoded","checksum","calculatedChecksum","isTestOnly","isBounceable","padStart","parts","hexToBytes","reg","mask","toByteMap","ord","length2","doubled","hexSubstring","substring","hasOwnProperty","count","results","settledCount","gf","r","Float64Array","randombytes","_0","_9","gf0","gf1","_121665","D","D2","X","Y","I","ts64","x","h","l","vn","xi","y","yi","n","crypto_verify_16","crypto_verify_32","crypto_core_salsa20","out","inp","k","c","o","u","j0","j1","j2","j3","j4","j5","j6","j7","j8","j9","j10","j11","j12","j13","j14","j15","x0","x1","x2","x3","x4","x5","x6","x7","x8","x9","x10","x11","x12","x13","x14","x15","core_salsa20","crypto_core_hsalsa20","core_hsalsa20","sigma","crypto_stream_salsa20_xor","cpos","mpos","z","crypto_stream_salsa20","crypto_stream","sn","crypto_stream_xor","poly1305","t0","t1","t2","t3","t4","t5","t6","t7","buffer","Uint16Array","pad","leftover","fin","crypto_onetimeauth","outpos","update","finish","crypto_onetimeauth_verify","hpos","crypto_secretbox","crypto_secretbox_open","set25519","a","car25519","v","sel25519","q","t","pack25519","j","neq25519","par25519","unpack25519","A","Z","M","t8","t9","t10","t11","t12","t13","t14","t15","t16","t17","t18","t19","t20","t21","t22","t23","t24","t25","t26","t27","t28","t29","t30","b0","b1","b2","b3","b4","b5","b6","b7","b8","b9","b10","b11","b12","b13","b14","b15","S","inv25519","pow2523","crypto_scalarmult","x32","subarray","x16","crypto_scalarmult_base","crypto_box_keypair","crypto_box_beforenm","blocks","d0","d1","d2","d3","d4","d5","d6","d7","d8","d9","hibit","h0","h1","h2","h3","h4","h5","h6","h7","h8","h9","r0","r1","r2","r3","r4","r5","r6","r7","r8","r9","mac","macpos","g","want","crypto_box_afternm","crypto_box_open_afternm","K","crypto_hashblocks_hl","hh","hl","bh0","bh1","bh2","bh3","bh4","bh5","bh6","bh7","bl0","bl1","bl2","bl3","bl4","bl5","bl6","bl7","th","tl","wh","Int32Array","wl","ah0","ah1","ah2","ah3","ah4","ah5","ah6","ah7","al0","al1","al2","al3","al4","al5","al6","al7","pos","crypto_hash","cswap","pack","ty","zi","scalarmult","scalarbase","crypto_sign_keypair","pk","sk","seeded","L","modL","carry","reduce","crypto_sign","sm","smlen","crypto_sign_open","chk","num","den","den2","den4","den6","unpackneg","crypto_sign_BYTES","crypto_sign_PUBLICKEYBYTES","crypto_sign_SECRETKEYBYTES","checkLengths","checkArrayTypes","arguments","cleanup","lowlevel","crypto_box","crypto_box_open","crypto_secretbox_KEYBYTES","crypto_secretbox_NONCEBYTES","crypto_secretbox_ZEROBYTES","crypto_secretbox_BOXZEROBYTES","crypto_scalarmult_BYTES","crypto_scalarmult_SCALARBYTES","crypto_box_PUBLICKEYBYTES","crypto_box_SECRETKEYBYTES","crypto_box_BEFORENMBYTES","crypto_box_NONCEBYTES","crypto_box_ZEROBYTES","crypto_box_BOXZEROBYTES","crypto_sign_SEEDBYTES","crypto_hash_BYTES","secretbox","keyLength","overheadLength","scalarMult","base","scalarLength","groupElementLength","before","checkBoxLengths","after","fromSecretKey","publicKeyLength","secretKeyLength","sharedKeyLength","sign","signedMsg","tmp","mlen","detached","sig","verify","fromSeed","seed","seedLength","signatureLength","hash","hashLength","setPRNG","self","msCrypto","min","CONNECTION_HTTP_EXPIRATION_TIME","validate","byteToHex","createFn","disposeFn","currentResource","currentArgs","currentPromise","currentSignal","allSettled","sendTransactionErrors","SendTransactionParser","isValidObject","hasExtraProperties","isValidNumber","fiveMinutesFromNow","isValidNetwork","isValidAddress","messageError","validateTransactionMessage","getDomain","domainBytes","MAX_DOMAIN_BYTES","payloadBytes","MAX_PAYLOAD_BYTES","MAX_TOTAL_BYTES","isValidString","validateSignDataPayloadText","validateSignDataPayloadBinary","isValidBoc","validateSignDataPayloadCell","hasProof","hasError","BASE64_REGEX","BASE64URL_REGEX","BOC_PREFIX","INTEGER_REGEX","POSITIVE_INTEGER_REGEX","isNaN","isValidRawAddress","obj","allowedKeys","walletsListDTOCache","walletsListDTOCacheCreationTimestamp","walletsListDTO","currentlyInjectedWallets","fetchWalletsListDTO","mergeWalletsLists","walletConfigDTOListToWalletConfigList","embeddedWallets","isWalletInfoCurrentlyEmbedded","fetchWalletsListFromSource","isWalletInfoRemote","startTime","walletsResponse","json","wrongFormatWallets","isCorrectWalletConfigDTO","endTime","walletConfigDTO","walletConfig","list1","list2","Set","concat","values","list1Item","list2Item","sseBridge","jsBridge","isWalletInfoInjected","__webpack_module_cache__","__webpack_exports__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""}
|