@tonconnect/sdk 3.0.1-beta.0 → 3.0.1-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/tonconnect-sdk.min.js +1 -1
- package/dist/tonconnect-sdk.min.js.map +1 -1
- package/lib/cjs/index.cjs +187 -109
- package/lib/cjs/index.cjs.map +1 -1
- package/lib/esm/index.mjs +187 -109
- package/lib/esm/index.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tonconnect-sdk.min.js","mappings":"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","sources":["webpack://TonConnectSDK/./src/errors/address/index.ts","webpack://TonConnectSDK/./src/errors/address/wrong-address.error.ts","webpack://TonConnectSDK/./src/errors/binary/index.ts","webpack://TonConnectSDK/./src/errors/binary/parse-hex.error.ts","webpack://TonConnectSDK/./src/errors/dapp/dapp-metadata.error.ts","webpack://TonConnectSDK/./src/errors/index.ts","webpack://TonConnectSDK/./src/errors/protocol/events/connect/index.ts","webpack://TonConnectSDK/./src/errors/protocol/events/connect/manifest-content-error.error.ts","webpack://TonConnectSDK/./src/errors/protocol/events/connect/manifest-not-found.error.ts","webpack://TonConnectSDK/./src/errors/protocol/events/connect/user-rejects.error.ts","webpack://TonConnectSDK/./src/errors/protocol/events/index.ts","webpack://TonConnectSDK/./src/errors/protocol/index.ts","webpack://TonConnectSDK/./src/errors/protocol/responses/bad-request.error.ts","webpack://TonConnectSDK/./src/errors/protocol/responses/index.ts","webpack://TonConnectSDK/./src/errors/protocol/responses/unknown-app.error.ts","webpack://TonConnectSDK/./src/errors/storage/index.ts","webpack://TonConnectSDK/./src/errors/storage/localstorage-not-found.error.ts","webpack://TonConnectSDK/./src/errors/ton-connect.error.ts","webpack://TonConnectSDK/./src/errors/unknown.error.ts","webpack://TonConnectSDK/./src/errors/wallet/index.ts","webpack://TonConnectSDK/./src/errors/wallet/wallet-already-connected.error.ts","webpack://TonConnectSDK/./src/errors/wallet/wallet-not-connected.error.ts","webpack://TonConnectSDK/./src/errors/wallet/wallet-not-injected.error.ts","webpack://TonConnectSDK/./src/errors/wallet/wallet-not-support-feature.error.ts","webpack://TonConnectSDK/./src/errors/wallets-manager/fetch-wallets.error.ts","webpack://TonConnectSDK/./src/errors/wallets-manager/index.ts","webpack://TonConnectSDK/./src/index.ts","webpack://TonConnectSDK/./src/models/index.ts","webpack://TonConnectSDK/./src/models/methods/index.ts","webpack://TonConnectSDK/./src/models/wallet/index.ts","webpack://TonConnectSDK/./src/models/wallet/wallet-connection-source.ts","webpack://TonConnectSDK/./src/models/wallet/wallet-info.ts","webpack://TonConnectSDK/./src/parsers/connect-errors-parser.ts","webpack://TonConnectSDK/./src/parsers/rpc-parser.ts","webpack://TonConnectSDK/./src/parsers/send-transaction-parser.ts","webpack://TonConnectSDK/./src/provider/bridge/bridge-gateway.ts","webpack://TonConnectSDK/./src/provider/bridge/bridge-provider.ts","webpack://TonConnectSDK/./src/provider/bridge/models/bridge-connection.ts","webpack://TonConnectSDK/./src/provider/injected/injected-provider.ts","webpack://TonConnectSDK/./src/provider/injected/models/injected-wallet-api.ts","webpack://TonConnectSDK/./src/resources/fallback-wallets-list.ts","webpack://TonConnectSDK/./src/resources/protocol.ts","webpack://TonConnectSDK/./src/storage/bridge-connection-storage.ts","webpack://TonConnectSDK/./src/storage/default-storage.ts","webpack://TonConnectSDK/./src/storage/http-bridge-gateway-storage.ts","webpack://TonConnectSDK/./src/storage/models/in-memory-storage.ts","webpack://TonConnectSDK/./src/ton-connect.ts","webpack://TonConnectSDK/./src/utils/address.ts","webpack://TonConnectSDK/./src/utils/call-for-success.ts","webpack://TonConnectSDK/./src/utils/defer.ts","webpack://TonConnectSDK/./src/utils/delay.ts","webpack://TonConnectSDK/./src/utils/feature-support.ts","webpack://TonConnectSDK/./src/utils/log.ts","webpack://TonConnectSDK/./src/utils/resource.ts","webpack://TonConnectSDK/./src/utils/types.ts","webpack://TonConnectSDK/./src/utils/url.ts","webpack://TonConnectSDK/./src/utils/web-api.ts","webpack://TonConnectSDK/./src/wallets-list-manager.ts","webpack://TonConnectSDK/../../node_modules/tweetnacl-util/nacl-util.js","webpack://TonConnectSDK/../../node_modules/tweetnacl/nacl-fast.js","webpack://TonConnectSDK/../protocol/lib/cjs/index.cjs","webpack://TonConnectSDK/webpack/bootstrap","webpack://TonConnectSDK/webpack/startup"],"sourcesContent":["export { WrongAddressError } from './wrong-address.error';\n","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","export { ParseHexError } from './parse-hex.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 { 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 * 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 { UserRejectsError } from 'src/errors/protocol/events/connect/user-rejects.error';\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","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 { 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 * from './connect';\n","export * from './events';\nexport * from './responses';\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","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 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","export { LocalstorageNotFoundError } from './localstorage-not-found.error';\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","/**\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 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?: unknown;\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 * 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","export { WalletAlreadyConnectedError } from './wallet-already-connected.error';\nexport { WalletNotConnectedError } from './wallet-not-connected.error';\nexport { WalletNotInjectedError } from './wallet-not-injected.error';\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","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 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 { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when wallet doesn't support requested feature method.\n */\nexport class WalletNotSupportFeatureError extends TonConnectError {\n protected get info(): string {\n return \"Wallet doesn't support requested feature method.\";\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, WalletNotSupportFeatureError.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 { FetchWalletsError } from './fetch-wallets.error';\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 {\n CHAIN,\n DeviceInfo,\n Feature,\n SendTransactionFeature,\n SignDataFeature,\n SendTransactionFeatureDeprecated,\n TonProofItemReply,\n TonProofItemReplySuccess,\n TonProofItemReplyError,\n ConnectItemReplyError,\n CONNECT_ITEM_ERROR_CODES\n} from '@tonconnect/protocol';\nexport { toUserFriendlyAddress } from './utils/address';\nexport { isTelegramUrl, encodeTelegramUrlParameters } from './utils/url';\n","export * from './wallet';\nexport * from './methods';\nexport { DappMetadata } from './dapp/dapp-metadata';\nexport { TonConnectOptions } from './ton-connect-options';\n","export * from './connect';\nexport * from './send-transaction';\n","export type { Account } from './account';\nexport type { Wallet } from './wallet';\nexport type {\n WalletConnectionSource,\n WalletConnectionSourceHTTP,\n WalletConnectionSourceJS\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';\n","export type WalletConnectionSource = WalletConnectionSourceHTTP | WalletConnectionSourceJS;\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","/**\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 * 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 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","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","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 {\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\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'> & { valid_until: number }\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 { 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 { delay } from 'src/utils/delay';\nimport { createResource } from 'src/utils/resource';\nimport { createAbortController, defer } from 'src/utils/defer';\n\ntype CreateEventSourceOptions = {\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n};\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 eventSource = createResource(\n async (signal: AbortSignal, options?: CreateEventSourceOptions): 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 };\n return await createEventSource(eventSourceConfig, options);\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\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 ) {\n this.bridgeGatewayStorage = new HttpBridgeGatewayStorage(storage, bridgeUrl);\n }\n\n public async registerSession(options?: CreateEventSourceOptions): Promise<void> {\n await this.eventSource.create(options);\n }\n\n public async send(\n message: Uint8Array,\n receiver: string,\n topic: RpcMethod,\n options?: {\n ttl?: number;\n signal?: AbortSignal;\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?: number | { ttl?: number; signal?: AbortSignal }\n ): Promise<void> {\n // TODO: remove deprecated method\n const options: { ttl?: number; signal?: AbortSignal } = {};\n if (typeof ttlOrOptions === 'number') {\n options.ttl = ttlOrOptions;\n } else {\n options.ttl = ttlOrOptions?.ttl;\n options.signal = ttlOrOptions?.signal;\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 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 { attempts: Number.MAX_SAFE_INTEGER, delayMs: 5_000, signal: options?.signal }\n );\n }\n\n public pause(): void {\n this.eventSource?.dispose();\n }\n\n public async unPause(): Promise<void> {\n await this.eventSource.recreate();\n }\n\n public async close(): Promise<void> {\n await this.eventSource.dispose();\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(e: Event): Promise<void> {\n if (this.isConnecting) {\n logError('Bridge error', JSON.stringify(e));\n return;\n }\n\n if (this.isReady) {\n this.errorsListener(e);\n return;\n }\n\n if (this.isClosed) {\n logDebug('Bridge reconnecting, 200ms delay');\n await delay(200);\n await this.eventSource.recreate();\n return;\n }\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 bridgeIncomingMessage = JSON.parse(e.data);\n } catch (e) {\n throw new TonConnectError(`Bridge message parse failed, message ${e.data}`);\n }\n this.listener(bridgeIncomingMessage);\n }\n}\n\nasync function createEventSource(\n config: {\n bridgeUrl: string;\n ssePath: string;\n sessionId: string;\n bridgeGatewayStorage: HttpBridgeGatewayStorage;\n errorHandler: (e: Event) => void;\n messageHandler: (e: MessageEvent<string>) => void;\n signal: AbortSignal;\n },\n options?: CreateEventSourceOptions\n): Promise<EventSource> {\n return await defer(\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\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 = (reason: Event): void => {\n if (signal.aborted) {\n reject(new TonConnectError('Bridge connection aborted'));\n return;\n }\n\n config.errorHandler(reason);\n };\n eventSource.onopen = (): void => {\n if (signal.aborted) {\n reject(new TonConnectError('Bridge connection aborted'));\n return;\n }\n resolve(eventSource);\n };\n eventSource.onmessage = (event: MessageEvent<string>): void => {\n config.messageHandler(event);\n };\n\n config?.signal?.addEventListener('abort', () => {\n logError('Bridge connection aborted');\n eventSource.close();\n reject(new TonConnectError('Bridge connection aborted'));\n });\n },\n { timeout: options?.openingDeadlineMS, signal: config?.signal }\n );\n}\n","import {\n AppRequest,\n Base64,\n ConnectEventSuccess,\n ConnectRequest,\n hexToByteArray,\n RpcMethod,\n SessionCrypto,\n TonAddressItemReply,\n WalletEvent,\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 { IStorage } from 'src/storage/models/storage.interface';\nimport { Optional, WithoutId, WithoutIdDistributive } 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 { createAbortController } from 'src/utils/defer';\nimport { callForSuccess } from 'src/utils/call-for-success';\n\nexport class BridgeProvider implements HTTPProvider {\n public static async fromStorage(storage: IStorage): Promise<BridgeProvider> {\n const bridgeConnectionStorage = new BridgeConnectionStorage(storage);\n const connection = await bridgeConnectionStorage.getHttpConnection();\n\n if (isPendingConnectionHttp(connection)) {\n return new BridgeProvider(storage, connection.connectionSource);\n }\n return new BridgeProvider(storage, { bridgeUrl: connection.session.bridgeUrl });\n }\n\n public readonly type = 'http';\n\n private readonly standardUniversalLink = 'tc://';\n\n private readonly connectionStorage: BridgeConnectionStorage;\n\n private readonly pendingRequests = new Map<\n string,\n (response: WithoutId<WalletResponse<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: WithoutIdDistributive<WalletEvent>) => void> = [];\n\n private readonly defaultOpeningDeadlineMS = 5000;\n\n private abortController?: AbortController;\n\n constructor(\n private readonly storage: IStorage,\n private readonly walletConnectionSource:\n | Optional<WalletConnectionSourceHTTP, 'universalLink'>\n | Pick<WalletConnectionSourceHTTP, 'bridgeUrl'>[]\n ) {\n this.connectionStorage = new BridgeConnectionStorage(storage);\n }\n\n public connect(\n message: ConnectRequest,\n options?: {\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }\n ): string {\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 await callForSuccess(\n _options =>\n this.openGateways(sessionCrypto, {\n openingDeadlineMS: options?.openingDeadlineMS,\n signal: _options?.signal\n }),\n {\n attempts: Number.MAX_SAFE_INTEGER,\n delayMs: 5_000,\n signal: options?.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);\n }\n\n public async restoreConnection(options?: {\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }): 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 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 });\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.storage,\n this.walletConnectionSource.bridgeUrl,\n storedConnection.session.sessionCrypto.sessionId,\n this.gatewayListener.bind(this),\n this.gatewayErrorsListener.bind(this)\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));\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 }),\n {\n attempts: Number.MAX_SAFE_INTEGER,\n delayMs: 5_000,\n signal: abortController.signal\n }\n );\n } catch (e) {\n await this.disconnect({ signal: abortController.signal });\n return;\n }\n }\n\n public sendRequest<T extends RpcMethod>(\n request: WithoutId<AppRequest<T>>,\n options?: {\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?: (() => void) | { onRequestSent?: () => void; signal?: AbortSignal }\n ): Promise<WithoutId<WalletResponse<T>>> {\n // TODO: remove deprecated method\n const options: {\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 }\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 await this.gateway.send(\n encodedRequest,\n this.session.walletPublicKey,\n request.method,\n { signal: options?.signal }\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?: { signal?: AbortSignal }): Promise<void> {\n return new Promise(async resolve => {\n let called = false;\n const onRequestSent = (): void => {\n called = true;\n this.removeBridgeAndSession().then(resolve);\n };\n\n try {\n this.closeGateways();\n await this.sendRequest(\n { method: 'disconnect', params: [] },\n {\n onRequestSent: onRequestSent,\n signal: options?.signal\n }\n );\n } catch (e) {\n logDebug('Disconnect error:', e);\n\n if (!called) {\n this.removeBridgeAndSession().then(resolve);\n }\n }\n });\n }\n\n public listen(callback: (e: WithoutIdDistributive<WalletEvent>) => 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 walletMessage: WalletMessage = JSON.parse(\n this.session!.sessionCrypto.decrypt(\n Base64.decode(bridgeIncomingMessage.message).toUint8Array(),\n hexToByteArray(bridgeIncomingMessage.from)\n )\n );\n\n logDebug('Wallet message received:', walletMessage);\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);\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));\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(universalLink: string, message: ConnectRequest): string {\n if (isTelegramUrl(universalLink)) {\n return this.generateTGUniversalLink(universalLink, message);\n }\n\n return this.generateRegularUniversalLink(universalLink, message);\n }\n\n private generateRegularUniversalLink(universalLink: string, message: ConnectRequest): 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('r', JSON.stringify(message));\n return url.toString();\n }\n\n private generateTGUniversalLink(universalLink: string, message: ConnectRequest): string {\n const urlToWrap = this.generateRegularUniversalLink('about:blank', message);\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?: {\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }\n ): Promise<void> {\n const abortController = createAbortController(options?.signal);\n this.abortController?.abort();\n this.abortController = abortController;\n\n if (Array.isArray(this.walletConnectionSource)) {\n // close all gateways before opening new ones\n this.pendingGateways.map(bridge => bridge.close().catch(e => console.error(e)));\n\n // open new gateways\n this.pendingGateways = this.walletConnectionSource.map(source => {\n const gateway = new BridgeGateway(\n this.storage,\n source.bridgeUrl,\n sessionCrypto.sessionId,\n () => {},\n e => {\n console.error(e);\n }\n );\n\n gateway.setListener(message =>\n this.pendingGatewaysListener(gateway, source.bridgeUrl, message)\n );\n\n return gateway;\n });\n\n await Promise.allSettled(\n this.pendingGateways.map(bridge =>\n callForSuccess(\n (_options): Promise<void> => {\n return bridge.registerSession({\n openingDeadlineMS: options?.openingDeadlineMS,\n signal: _options.signal\n });\n },\n {\n attempts: Number.MAX_SAFE_INTEGER,\n delayMs: 5_000,\n signal: abortController.signal\n }\n )\n )\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.storage,\n this.walletConnectionSource.bridgeUrl,\n sessionCrypto.sessionId,\n this.gatewayListener.bind(this),\n this.gatewayErrorsListener.bind(this)\n );\n return await this.gateway.registerSession({\n openingDeadlineMS: options?.openingDeadlineMS,\n signal: abortController.signal\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 { 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 type BridgeConnection =\n | BridgeConnectionHttp\n | BridgePendingConnectionHttp\n | BridgeConnectionInjected;\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 type BridgeConnectionHttpRaw = Omit<BridgeConnectionHttp, 'session'> & {\n session: BridgeSessionRaw;\n};\n\nexport type BridgePendingConnectionHttpRaw = Omit<BridgePendingConnectionHttp, 'sessionCrypto'> & {\n sessionCrypto: KeyPair;\n};\n\nexport type BridgeConnectionRaw =\n | BridgeConnectionHttpRaw\n | BridgePendingConnectionHttpRaw\n | BridgeConnectionInjected;\n","import { WalletNotInjectedError } from 'src/errors/wallet/wallet-not-injected.error';\nimport {\n AppRequest,\n ConnectEventError,\n ConnectRequest,\n RpcMethod,\n WalletEvent,\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 { IStorage } from 'src/storage/models/storage.interface';\nimport { WithoutId, WithoutIdDistributive } from 'src/utils/types';\nimport { getWindow, tryGetWindowKeys } from 'src/utils/web-api';\nimport { PROTOCOL_VERSION } from 'src/resources/protocol';\nimport { WalletInfoCurrentlyInjected } from 'src/models';\nimport { logDebug } from 'src/utils/log';\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(storage: IStorage): Promise<InjectedProvider> {\n const bridgeConnectionStorage = new BridgeConnectionStorage(storage);\n const connection = await bridgeConnectionStorage.getInjectedConnection();\n return new InjectedProvider(storage, connection.jsBridgeKey);\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 windowKeys = tryGetWindowKeys();\n const wallets = windowKeys.filter(([_, value]) =>\n isJSBridgeWithMetadata(value)\n ) as unknown as [string, { tonconnect: InjectedWalletApi }][];\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 }));\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 readonly connectionStorage: BridgeConnectionStorage;\n\n private listenSubscriptions = false;\n\n private listeners: Array<(e: WithoutIdDistributive<WalletEvent>) => void> = [];\n\n constructor(storage: IStorage, private readonly injectedWalletKey: T) {\n const window: Window | undefined | WindowWithTon<T> = InjectedProvider.window;\n if (!InjectedProvider.isWindowContainsWallet(window, injectedWalletKey)) {\n throw new WalletNotInjectedError();\n }\n\n this.connectionStorage = new BridgeConnectionStorage(storage);\n this.injectedWallet = window[injectedWalletKey]!.tonconnect!;\n }\n\n public connect(message: ConnectRequest): void {\n this._connect(PROTOCOL_VERSION, message);\n }\n\n public async restoreConnection(): Promise<void> {\n try {\n logDebug(`Injected Provider restoring connection...`);\n const connectEvent = await this.injectedWallet.restoreConnection();\n logDebug('Injected Provider restoring connection response', connectEvent);\n\n if (connectEvent.event === 'connect') {\n this.makeSubscriptions();\n this.listeners.forEach(listener => listener(connectEvent));\n } else {\n await this.connectionStorage.removeConnection();\n }\n } catch (e) {\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(): Promise<void> {\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\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: WithoutIdDistributive<WalletEvent>) => 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?: {\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 async sendRequest<T extends RpcMethod>(\n request: WithoutId<AppRequest<T>>,\n optionsOrOnRequestSent?: (() => void) | { onRequestSent?: () => void; signal?: AbortSignal }\n ): Promise<WithoutId<WalletResponse<T>>> {\n // TODO: remove deprecated method\n const options: {\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 }\n\n const id = (await this.connectionStorage.getNextRpcRequestId()).toString();\n await this.connectionStorage.increaseNextRpcRequestId();\n\n logDebug('Send injected-bridge request:', { ...request, id });\n const result = this.injectedWallet.send<T>({ ...request, id } as AppRequest<T>);\n result.then(response => logDebug('Wallet message received:', response));\n options?.onRequestSent?.();\n\n return result;\n }\n\n private async _connect(protocolVersion: number, message: ConnectRequest): Promise<void> {\n try {\n logDebug(\n `Injected Provider connect request: protocolVersion: ${protocolVersion}, message:`,\n message\n );\n const connectEvent = await this.injectedWallet.connect(protocolVersion, message);\n\n logDebug('Injected Provider connect response:', connectEvent);\n\n if (connectEvent.event === 'connect') {\n await this.updateSession();\n this.makeSubscriptions();\n }\n this.listeners.forEach(listener => listener(connectEvent));\n } catch (e) {\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));\n }\n }\n\n private makeSubscriptions(): void {\n this.listenSubscriptions = true;\n this.unsubscribeCallback = this.injectedWallet.listen(e => {\n logDebug('Wallet message received:', e);\n\n if (this.listenSubscriptions) {\n this.listeners.forEach(listener => listener(e));\n }\n\n if (e.event === 'disconnect') {\n this.disconnect();\n }\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","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 } 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'\n >;\n protocolVersion: number;\n isWalletBrowser: boolean;\n connect(protocolVersion: number, message: ConnectRequest): Promise<ConnectEvent>;\n restoreConnection(): Promise<ConnectEvent>;\n send<T extends RpcMethod>(message: AppRequest<T>): Promise<WalletResponse<T>>;\n listen(callback: (event: 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","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://bridge.tonapi.io/bridge'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux']\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 },\n {\n app_name: 'mytonwallet',\n name: 'MyTonWallet',\n image: 'https://mytonwallet.io/icon-256.png',\n about_url: 'https://mytonwallet.io',\n universal_url: 'https://connect.mytonwallet.org',\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 },\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 },\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 },\n {\n app_name: 'dewallet',\n name: 'DeWallet',\n image: 'https://app.delabwallet.com/logo_black.png',\n about_url: 'https://delabwallet.com',\n bridge: [\n {\n type: 'js',\n key: 'dewallet'\n }\n ],\n platforms: ['chrome']\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 },\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 }\n];\n","export const PROTOCOL_VERSION = 2;\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 BridgePendingConnectionHttp,\n BridgePendingConnectionHttpRaw,\n isPendingConnectionHttp\n} from 'src/provider/bridge/models/bridge-connection';\nimport { IStorage } from 'src/storage/models/storage.interface';\n\nexport class BridgeConnectionStorage {\n private readonly storeKey = 'ton-connect-storage_bridge-connection';\n\n constructor(private readonly storage: IStorage) {}\n\n public async storeConnection(connection: BridgeConnection): Promise<void> {\n if (connection.type === 'injected') {\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 };\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 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') {\n return connection;\n }\n\n if ('connectEvent' in connection) {\n const sessionCrypto = new SessionCrypto(connection.session.sessionKeyPair);\n return {\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 return {\n type: 'http',\n sessionCrypto: new SessionCrypto(connection.sessionCrypto),\n connectionSource: connection.connectionSource\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 === 'injected') {\n throw new TonConnectError(\n 'Trying to read HTTP connection source while injected 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 === 'injected') {\n throw new TonConnectError(\n 'Trying to read HTTP connection source while injected 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 === 'http') {\n throw new TonConnectError(\n 'Trying to read Injected bridge connection source while HTTP 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","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","import { IStorage } from 'src/storage/models/storage.interface';\n\nexport class HttpBridgeGatewayStorage {\n private readonly storeKey: string;\n\n constructor(private readonly storage: IStorage, bridgeUrl: string) {\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","/**\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","import {\n ConnectEventError,\n ConnectEventSuccess,\n ConnectItem,\n ConnectRequest,\n SendTransactionRpcResponseSuccess,\n TonAddressItemReply,\n TonProofItemReply,\n WalletEvent\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 { WalletAlreadyConnectedError } from 'src/errors/wallet/wallet-already-connected.error';\nimport { WalletNotConnectedError } from 'src/errors/wallet/wallet-not-connected.error';\nimport {\n Account,\n Wallet,\n WalletConnectionSource,\n WalletConnectionSourceHTTP,\n WalletInfo\n} from 'src/models';\nimport { SendTransactionRequest, SendTransactionResponse } from 'src/models/methods';\nimport { ConnectAdditionalRequest } from 'src/models/methods/connect/connect-additional-request';\nimport { TonConnectOptions } from 'src/models/ton-connect-options';\nimport {\n isWalletConnectionSourceJS,\n WalletConnectionSourceJS\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 { 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 { getDocument, getWebPageManifest } from 'src/utils/web-api';\nimport { WalletsListManager } from 'src/wallets-list-manager';\nimport { WithoutIdDistributive } from 'src/utils/types';\nimport { checkSendTransactionSupport } from 'src/utils/feature-support';\nimport { createAbortController } from 'src/utils/defer';\nimport { callForSuccess } from 'src/utils/call-for-success';\nimport { logError } from 'src/utils/log';\n\nexport class TonConnect implements ITonConnect {\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 private readonly walletsList = new WalletsListManager();\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 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 this.dappSettings = {\n manifestUrl: options?.manifestUrl || getWebPageManifest(),\n storage: options?.storage || new DefaultStorage()\n };\n\n this.walletsList = new WalletsListManager({\n walletsListSource: options?.walletsListSource,\n cacheTTLMs: options?.walletsListCacheTTLMs\n });\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(this.dappSettings.storage);\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?: {\n request?: ConnectAdditionalRequest;\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }\n ): T extends WalletConnectionSourceJS ? void : 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?: {\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }\n ): T extends WalletConnectionSourceJS ? void : string;\n public connect(\n wallet: WalletConnectionSource | Pick<WalletConnectionSourceHTTP, 'bridgeUrl'>[],\n requestOrOptions?:\n | ConnectAdditionalRequest\n | {\n request?: ConnectAdditionalRequest;\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }\n ): void | string {\n // TODO: remove deprecated method\n const options: {\n request?: ConnectAdditionalRequest;\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n } = {};\n if (typeof requestOrOptions === 'object' && 'tonProof' in requestOrOptions) {\n options.request = requestOrOptions;\n }\n if (\n typeof requestOrOptions === 'object' &&\n ('openingDeadlineMS' in requestOrOptions ||\n 'signal' in requestOrOptions ||\n 'request' in requestOrOptions)\n ) {\n options.request = requestOrOptions?.request;\n options.openingDeadlineMS = requestOrOptions?.openingDeadlineMS;\n options.signal = requestOrOptions?.signal;\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 return this.provider.connect(this.createConnectRequest(options?.request), {\n openingDeadlineMS: options?.openingDeadlineMS,\n signal: abortController.signal\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(options?: {\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }): 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 // 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 return;\n }\n\n let provider: Provider | null = null;\n try {\n switch (bridgeConnectionType) {\n case 'http':\n provider = await BridgeProvider.fromStorage(this.dappSettings.storage);\n break;\n case 'injected':\n provider = await InjectedProvider.fromStorage(this.dappSettings.storage);\n break;\n default:\n if (embeddedWallet) {\n provider = this.createProvider(embeddedWallet);\n } else {\n return;\n }\n }\n } catch {\n await this.bridgeConnectionStorage.removeConnection();\n provider?.closeConnection();\n provider = null;\n return;\n }\n\n if (abortController.signal.aborted) {\n provider?.closeConnection();\n return;\n }\n\n if (!provider) {\n logError('Provider is not restored');\n return;\n }\n\n this.provider?.closeConnection();\n this.provider = provider;\n provider.listen(this.walletEventsListener.bind(this));\n\n return await callForSuccess(\n async _options =>\n provider?.restoreConnection({\n openingDeadlineMS: options?.openingDeadlineMS,\n signal: _options.signal\n }),\n {\n attempts: Number.MAX_SAFE_INTEGER,\n delayMs: 5_000,\n signal: options?.signal\n }\n );\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?: {\n onRequestSent?: () => void;\n signal?: AbortSignal;\n }\n ): Promise<SendTransactionResponse>;\n /** @deprecated use sendTransaction(transaction, options) instead */\n public sendTransaction(\n transaction: SendTransactionRequest,\n onRequestSent?: () => void\n ): Promise<SendTransactionResponse>;\n public async sendTransaction(\n transaction: SendTransactionRequest,\n optionsOrOnRequestSent?:\n | {\n onRequestSent?: () => void;\n signal?: AbortSignal;\n }\n | (() => void)\n ): Promise<SendTransactionResponse> {\n // TODO: remove deprecated method\n const options: {\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 }\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 checkSendTransactionSupport(this.wallet!.device.features, {\n requiredMessagesNumber: transaction.messages.length\n });\n\n const { validUntil, ...tx } = transaction;\n const from = transaction.from || this.account!.address;\n const network = transaction.network || this.account!.chain;\n\n const response = await this.provider!.sendRequest(\n sendTransactionParser.convertToRpcRequest({\n ...tx,\n valid_until: validUntil,\n from,\n network\n }),\n { onRequestSent: options.onRequestSent, signal: abortController.signal }\n );\n\n if (sendTransactionParser.isError(response)) {\n return sendTransactionParser.parseAndThrowError(response);\n }\n\n return sendTransactionParser.convertFromRpcResponse(\n response as SendTransactionRpcResponseSuccess\n );\n }\n\n /**\n * Disconnect form thw connected wallet and drop current session.\n */\n public async disconnect(options?: { signal?: AbortSignal }): Promise<void> {\n if (!this.connected) {\n throw new WalletNotConnectedError();\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('Disconnect was aborted');\n }\n\n this.onWalletDisconnected();\n await this.provider?.disconnect({\n signal: abortController.signal\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();\n }\n });\n } catch (e) {\n console.error('Cannot subscribe to the document.visibilitychange: ', e);\n }\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(this.dappSettings.storage, wallet.jsBridgeKey);\n } else {\n provider = new BridgeProvider(this.dappSettings.storage, wallet);\n }\n\n provider.listen(this.walletEventsListener.bind(this));\n return provider;\n }\n\n private walletEventsListener(e: WithoutIdDistributive<WalletEvent>): void {\n switch (e.event) {\n case 'connect':\n this.onWalletConnected(e.payload);\n break;\n case 'connect_error':\n this.onWalletConnectError(e.payload);\n break;\n case 'disconnect':\n this.onWalletDisconnected();\n }\n }\n\n private onWalletConnected(connectEvent: ConnectEventSuccess['payload']): 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 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 (tonProofItem) {\n wallet.connectItems = {\n tonProof: tonProofItem\n };\n }\n\n this.wallet = wallet;\n }\n\n private onWalletConnectError(connectEventError: ConnectEventError['payload']): void {\n const error = connectErrorsParser.parseError(connectEventError);\n this.statusChangeErrorSubscriptions.forEach(errorsHandler => errorsHandler(error));\n\n console.debug(error);\n\n if (error instanceof ManifestNotFoundError || error instanceof ManifestContentErrorError) {\n console.error(error);\n throw error;\n }\n }\n\n private onWalletDisconnected(): void {\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 }\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 { WrongAddressError, ParseHexError } from 'src/errors';\nimport { Base64 } from '@tonconnect/protocol';\n\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\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\nfunction 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 { delay } from 'src/utils/delay';\nimport { createAbortController } from 'src/utils/defer';\nimport { TonConnectError } from 'src/errors';\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 100ms.\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 */\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 await delay(delayMs);\n }\n }\n\n throw lastError;\n}\n","import { TonConnectError } from 'src/errors';\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 reject: (reason?: any) => void,\n options: DeferOptions\n) => Promise<void>;\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\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 defer<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((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 reject(new TonConnectError(`Timeout after ${timeout}ms`));\n abortController.abort();\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 fn(resolve, reject, deferOptions).finally(() => clearTimeout(timeoutId));\n });\n}\n","import { defer } from 'src/utils/defer';\nimport { 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 await defer(\n async (resolve, reject, options): Promise<void> => {\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 { signal: options?.signal }\n );\n}\n","import { Feature, SendTransactionFeature } from '@tonconnect/protocol';\nimport { logWarning } from 'src/utils/log';\nimport { WalletNotSupportFeatureError } from 'src/errors/wallet/wallet-not-support-feature.error';\n\nexport function checkSendTransactionSupport(\n features: Feature[],\n options: { requiredMessagesNumber: number }\n): never | void {\n const supportsDeprecatedSendTransactionFeature = features.includes('SendTransaction');\n const sendTransactionFeature = features.find(\n feature => feature && typeof feature === 'object' && feature.name === 'SendTransaction'\n ) as SendTransactionFeature;\n\n if (!supportsDeprecatedSendTransactionFeature && !sendTransactionFeature) {\n throw new WalletNotSupportFeatureError(\"Wallet doesn't support SendTransaction feature.\");\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 }\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","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\n","import { createAbortController } from 'src/utils/defer';\nimport { TonConnectError } from 'src/errors';\n\n/**\n * The resource interface.\n */\nexport type Resource<T, Args extends any[]> = {\n /**\n * Create a new resource.\n */\n create: (...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: () => 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 */\nexport function createResource<T, 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 abortController: AbortController | null = null;\n\n // create a new resource\n const create = async (...args: Args): Promise<T> => {\n abortController?.abort();\n abortController = createAbortController();\n\n currentArgs = args;\n\n const promise = createFn(abortController.signal, ...args);\n currentPromise = promise;\n const resource = await promise;\n\n if (currentPromise !== promise) {\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 const resource = currentResource;\n currentResource = null;\n\n const promise = currentPromise;\n currentPromise = null;\n\n abortController?.abort();\n\n await Promise.allSettled([\n resource ? disposeFn(resource) : Promise.resolve(),\n promise ? disposeFn(await promise) : Promise.resolve()\n ]);\n };\n\n // recreate the current resource\n const recreate = async (): Promise<T> => {\n await dispose();\n\n return create(...(currentArgs ?? ([] as unknown as Args)));\n };\n\n return {\n create,\n current,\n dispose,\n recreate\n };\n}\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","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 encodeTelegramUrlParameters(parameters: string): string {\n return parameters\n .replaceAll('.', '%2E')\n .replaceAll('-', '%2D')\n .replaceAll('_', '%5F')\n .replaceAll('&', '-')\n .replaceAll('=', '__')\n .replaceAll('%', '--');\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\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","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 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';\n\nexport class WalletsListManager {\n private walletsListCache: Promise<WalletInfo[]> | null = null;\n\n private walletsListCacheCreationTimestamp: number | null = null;\n\n private readonly cacheTTLMs: number | undefined;\n\n private readonly walletsListSource: string =\n 'https://raw.githubusercontent.com/ton-blockchain/wallets-list/main/wallets-v2.json';\n\n constructor(options?: { walletsListSource?: string; cacheTTLMs?: number }) {\n if (options?.walletsListSource) {\n this.walletsListSource = options.walletsListSource;\n }\n\n if (options?.cacheTTLMs) {\n this.cacheTTLMs = options.cacheTTLMs;\n }\n }\n\n public async getWallets(): Promise<WalletInfo[]> {\n if (\n this.cacheTTLMs &&\n this.walletsListCacheCreationTimestamp &&\n Date.now() > this.walletsListCacheCreationTimestamp + this.cacheTTLMs\n ) {\n this.walletsListCache = null;\n }\n\n if (!this.walletsListCache) {\n this.walletsListCache = this.fetchWalletsList();\n this.walletsListCache\n .then(() => {\n this.walletsListCacheCreationTimestamp = Date.now();\n })\n .catch(() => {\n this.walletsListCache = null;\n this.walletsListCacheCreationTimestamp = null;\n });\n }\n\n return this.walletsListCache;\n }\n\n public async getEmbeddedWallet(): Promise<WalletInfoCurrentlyEmbedded | null> {\n const walletsList = await this.getWallets();\n const embeddedWallets = walletsList.filter(isWalletInfoCurrentlyEmbedded);\n\n if (embeddedWallets.length !== 1) {\n return null;\n }\n\n return embeddedWallets[0]!;\n }\n\n private async fetchWalletsList(): Promise<WalletInfo[]> {\n let walletsList: WalletInfoDTO[] = [];\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.name)\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 } catch (e) {\n logError(e);\n walletsList = FALLBACK_WALLETS_LIST;\n }\n\n let currentlyInjectedWallets: WalletInfoCurrentlyInjected[] = [];\n try {\n currentlyInjectedWallets = InjectedProvider.getCurrentlyInjectedWallets();\n } catch (e) {\n logError(e);\n }\n\n return this.mergeWalletsLists(\n this.walletConfigDTOListToWalletConfigList(walletsList),\n currentlyInjectedWallets\n );\n }\n\n private walletConfigDTOListToWalletConfigList(walletConfigDTO: WalletInfoDTO[]): WalletInfo[] {\n return walletConfigDTO.map(walletConfigDTO => {\n const walletConfigBase: 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 };\n\n const walletConfig: WalletInfo = walletConfigBase as WalletInfo;\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\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;\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 !('url' in sseBridge) ||\n !(sseBridge as { url: string }).url ||\n !(value 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 (!('key' in jsBridge) || !(jsBridge as { key: string }).key) {\n return false;\n }\n }\n\n return true;\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","(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","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar nacl = require('tweetnacl-util');\nvar nacl$1 = require('tweetnacl');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar nacl__default = /*#__PURE__*/_interopDefaultLegacy(nacl);\nvar nacl__default$1 = /*#__PURE__*/_interopDefaultLegacy(nacl$1);\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__default[\"default\"].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__default[\"default\"].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__default[\"default\"].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__default[\"default\"].encodeUTF8(decodedUint8Array);\n },\n toObject() {\n try {\n return JSON.parse(nacl__default[\"default\"].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__default$1[\"default\"].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__default$1[\"default\"].randomBytes(this.nonceLength);\n }\n encrypt(message, receiverPublicKey) {\n const encodedMessage = new TextEncoder().encode(message);\n const nonce = this.createNonce();\n const encrypted = nacl__default$1[\"default\"].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__default$1[\"default\"].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","// 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__(1920);\n"],"names":["WrongAddressError","TonConnectError","info","constructor","args","super","Object","setPrototypeOf","this","prototype","ParseHexError","DappMetadataError","UnknownError","UserRejectsError","ManifestContentErrorError","ManifestNotFoundError","BadRequestError","UnknownAppError","LocalstorageNotFoundError","Error","message","options","prefix","name","WalletAlreadyConnectedError","WalletNotConnectedError","WalletNotInjectedError","WalletNotSupportFeatureError","FetchWalletsError","TonConnect","WalletsListManager","CHAIN","CONNECT_ITEM_ERROR_CODES","toUserFriendlyAddress","isTelegramUrl","encodeTelegramUrlParameters","isWalletInfoCurrentlyInjected","isWalletInfoCurrentlyEmbedded","isWalletInfoInjectable","isWalletInfoRemote","isWalletInfoInjected","value","injected","embedded","connectEventErrorsCodes","CONNECT_EVENT_ERROR_CODES","UNKNOWN_ERROR","USER_REJECTS_ERROR","BAD_REQUEST_ERROR","UNKNOWN_APP_ERROR","MANIFEST_NOT_FOUND_ERROR","MANIFEST_CONTENT_ERROR","connectErrorsParser","parseError","error","ErrorConstructor","code","isError","response","sendTransactionErrors","SEND_TRANSACTION_ERROR_CODES","SendTransactionParser","RpcParser","convertToRpcRequest","request","method","params","JSON","stringify","parseAndThrowError","convertFromRpcResponse","rpcResponse","boc","result","sendTransactionParser","storage","bridgeUrl","sessionId","listener","errorsListener","ssePath","postPath","heartbeatMessage","defaultTtl","eventSource","createResource","signal","eventSourceConfig","bridgeGatewayStorage","errorHandler","errorsHandler","bind","messageHandler","messagesHandler","config","defer","resolve","reject","deferOptions","createAbortController","aborted","url","URL","addPathToUrl","searchParams","append","lastEventId","getLastEventId","EventSource","toString","onerror","reason","onopen","onmessage","event","addEventListener","logError","close","timeout","openingDeadlineMS","createEventSource","resource","HttpBridgeGatewayStorage","isReady","current","readyState","OPEN","isClosed","isConnecting","CONNECTING","registerSession","create","send","receiver","topic","ttlOrOptions","ttl","body","Base64","encode","callForSuccess","post","ok","status","attempts","Number","MAX_SAFE_INTEGER","delayMs","pause","dispose","unPause","recreate","setListener","setErrorsListener","fetch","e","logDebug","delay","data","storeLastEventId","bridgeIncomingMessage","parse","BridgeProvider","walletConnectionSource","type","standardUniversalLink","pendingRequests","Map","session","gateway","pendingGateways","listeners","defaultOpeningDeadlineMS","connectionStorage","BridgeConnectionStorage","static","bridgeConnectionStorage","connection","getHttpConnection","isPendingConnectionHttp","connectionSource","connect","closeGateways","sessionCrypto","SessionCrypto","storeConnection","then","_options","openGateways","universalLink","generateUniversalLink","restoreConnection","abortController","abort","storedConnection","Array","isArray","BridgeGateway","gatewayListener","gatewayErrorsListener","forEach","connectEvent","disconnect","sendRequest","optionsOrOnRequestSent","onRequestSent","Promise","id","getNextRpcRequestId","increaseNextRpcRequestId","encodedRequest","encrypt","hexToByteArray","walletPublicKey","set","closeConnection","called","removeBridgeAndSession","listen","callback","push","filter","bridge","promises","map","all","pendingGatewaysListener","includes","except","walletMessage","decrypt","decode","toUint8Array","from","get","delete","undefined","lastId","getLastWalletEventId","storeLastWalletEventId","updateSession","tonAddrItem","payload","items","find","item","connectEventToSave","lastWalletEventId","nextRpcRequestId","removeConnection","generateTGUniversalLink","generateRegularUniversalLink","PROTOCOL_VERSION","linkParams","split","startapp","updatedUniversalLink","convertToDirectLink","has","pathname","catch","console","source","allSettled","InjectedProvider","injectedWalletKey","unsubscribeCallback","listenSubscriptions","window","isWindowContainsWallet","injectedWallet","tonconnect","getInjectedConnection","jsBridgeKey","isWalletBrowser","tryGetWindowKeys","_","isJSBridgeWithMetadata","wallet","walletInfo","appName","app_name","aboutUrl","about_url","imageUrl","image","tondns","platforms","_connect","makeSubscriptions","closeAllListeners","eventsCallback","protocolVersion","connectEventError","getWindow","hasProperty","hasProperties","FALLBACK_WALLETS_LIST","universal_url","deepLink","key","storeKey","setItem","rawSession","sessionKeyPair","stringifyKeypair","rawConnection","removeItem","getConnection","stored","getItem","getHttpPendingConnection","storedConnectionType","localStorage","tryGetLocalStorage","removeLastEventId","InMemoryStorage","instance","length","keys","clear","index","walletsList","_wallet","provider","statusChangeSubscriptions","statusChangeErrorSubscriptions","dappSettings","manifestUrl","getWebPageManifest","DefaultStorage","walletsListSource","cacheTTLMs","walletsListCacheTTLMs","disableAutoPauseConnection","addWindowFocusAndBlurSubscriptions","getWallets","connected","account","onStatusChange","requestOrOptions","createProvider","createConnectRequest","bridgeConnectionType","embeddedWallet","getEmbeddedWallet","fromStorage","walletEventsListener","sendTransaction","transaction","checkConnection","checkSendTransactionSupport","device","features","requiredMessagesNumber","messages","validUntil","tx","address","network","chain","valid_until","onWalletDisconnected","pauseConnection","unPauseConnection","document","getDocument","hidden","isWalletConnectionSourceJS","onWalletConnected","onWalletConnectError","tonAccountItem","tonProofItem","walletStateInit","publicKey","connectItems","tonProof","debug","isWalletInjected","walletJSKey","isInsideWalletBrowser","hexAddress","testOnly","wc","hex","parts","parseInt","hexToBytes","parseHexAddress","tag","addr","Int8Array","addressWithChecksum","Uint8Array","reg","byte","mask","Math","floor","crc16","replace","toByteMap","ord","s","length2","toLowerCase","i","doubled","hexSubstring","substring","hasOwnProperty","fn","lastError","err","AbortController","once","timeoutId","setTimeout","clearTimeout","finally","supportsDeprecatedSendTransactionFeature","sendTransactionFeature","feature","maxMessages","logWarning","warn","createFn","disposeFn","currentResource","currentArgs","currentPromise","promise","propertyKeys","every","propertyKey","removeUrlLastSlash","slice","path","link","protocol","hostname","parameters","replaceAll","origin","location","isLocalStorageAvailable","process","versions","node","getInstance","walletsListCache","walletsListCacheCreationTimestamp","Date","now","fetchWalletsList","embeddedWallets","walletsResponse","json","wrongFormatWallets","isCorrectWalletConfigDTO","join","currentlyInjectedWallets","getCurrentlyInjectedWallets","mergeWalletsLists","walletConfigDTOListToWalletConfigList","walletConfigDTO","walletConfig","list1","list2","Set","concat","values","list1Item","list2Item","some","sseBridge","jsBridge","root","f","module","exports","nacl","util","validateBase64","test","TypeError","decodeUTF8","d","unescape","encodeURIComponent","b","charCodeAt","encodeUTF8","arr","String","fromCharCode","decodeURIComponent","escape","atob","Buffer","encodeBase64","decodeBase64","call","len","btoa","gf","init","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","p","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","m","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","bytes","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","add","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","crypto_secretbox_KEYBYTES","crypto_secretbox_NONCEBYTES","crypto_box_NONCEBYTES","crypto_sign_BYTES","crypto_sign_PUBLICKEYBYTES","crypto_sign_SECRETKEYBYTES","checkLengths","checkArrayTypes","arguments","cleanup","lowlevel","crypto_box","crypto_box_open","crypto_secretbox_ZEROBYTES","crypto_secretbox_BOXZEROBYTES","crypto_scalarmult_BYTES","crypto_scalarmult_SCALARBYTES","crypto_box_PUBLICKEYBYTES","crypto_box_SECRETKEYBYTES","crypto_box_BEFORENMBYTES","crypto_box_ZEROBYTES","crypto_box_BOXZEROBYTES","crypto_sign_SEEDBYTES","crypto_hash_BYTES","randomBytes","secretbox","msg","nonce","open","box","keyLength","nonceLength","overheadLength","scalarMult","base","scalarLength","groupElementLength","secretKey","before","checkBoxLengths","after","keyPair","fromSecretKey","publicKeyLength","secretKeyLength","sharedKeyLength","sign","signedMsg","tmp","mlen","detached","sig","verify","fromSeed","seed","seedLength","signatureLength","hash","hashLength","setPRNG","self","msCrypto","getRandomValues","min","defineProperty","nacl$1","_interopDefaultLegacy","SIGN_DATA_ERROR_CODES","DISCONNECT_ERROR_CODES","nacl__default","nacl__default$1","urlSafe","uint8Array","encoded","encodeUint8Array","decodedUint8Array","decodeToUint8Array","toObject","concatUint8Arrays","buffer1","buffer2","mergedArray","splitToUint8Arrays","array","toHexString","byteArray","hexString","createKeypairFromString","createKeypair","createNonce","receiverPublicKey","encodedMessage","TextEncoder","senderPublicKey","internalMessage","decrypted","TextDecoder","isNode","__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/index.ts","webpack://TonConnectSDK/./src/errors/address/wrong-address.error.ts","webpack://TonConnectSDK/./src/errors/binary/index.ts","webpack://TonConnectSDK/./src/errors/binary/parse-hex.error.ts","webpack://TonConnectSDK/./src/errors/dapp/dapp-metadata.error.ts","webpack://TonConnectSDK/./src/errors/index.ts","webpack://TonConnectSDK/./src/errors/protocol/events/connect/index.ts","webpack://TonConnectSDK/./src/errors/protocol/events/connect/manifest-content-error.error.ts","webpack://TonConnectSDK/./src/errors/protocol/events/connect/manifest-not-found.error.ts","webpack://TonConnectSDK/./src/errors/protocol/events/connect/user-rejects.error.ts","webpack://TonConnectSDK/./src/errors/protocol/events/index.ts","webpack://TonConnectSDK/./src/errors/protocol/index.ts","webpack://TonConnectSDK/./src/errors/protocol/responses/bad-request.error.ts","webpack://TonConnectSDK/./src/errors/protocol/responses/index.ts","webpack://TonConnectSDK/./src/errors/protocol/responses/unknown-app.error.ts","webpack://TonConnectSDK/./src/errors/storage/index.ts","webpack://TonConnectSDK/./src/errors/storage/localstorage-not-found.error.ts","webpack://TonConnectSDK/./src/errors/ton-connect.error.ts","webpack://TonConnectSDK/./src/errors/unknown.error.ts","webpack://TonConnectSDK/./src/errors/wallet/index.ts","webpack://TonConnectSDK/./src/errors/wallet/wallet-already-connected.error.ts","webpack://TonConnectSDK/./src/errors/wallet/wallet-not-connected.error.ts","webpack://TonConnectSDK/./src/errors/wallet/wallet-not-injected.error.ts","webpack://TonConnectSDK/./src/errors/wallet/wallet-not-support-feature.error.ts","webpack://TonConnectSDK/./src/errors/wallets-manager/fetch-wallets.error.ts","webpack://TonConnectSDK/./src/errors/wallets-manager/index.ts","webpack://TonConnectSDK/./src/index.ts","webpack://TonConnectSDK/./src/models/index.ts","webpack://TonConnectSDK/./src/models/methods/index.ts","webpack://TonConnectSDK/./src/models/wallet/index.ts","webpack://TonConnectSDK/./src/models/wallet/wallet-connection-source.ts","webpack://TonConnectSDK/./src/models/wallet/wallet-info.ts","webpack://TonConnectSDK/./src/parsers/connect-errors-parser.ts","webpack://TonConnectSDK/./src/parsers/rpc-parser.ts","webpack://TonConnectSDK/./src/parsers/send-transaction-parser.ts","webpack://TonConnectSDK/./src/provider/bridge/bridge-gateway.ts","webpack://TonConnectSDK/./src/provider/bridge/bridge-provider.ts","webpack://TonConnectSDK/./src/provider/bridge/models/bridge-connection.ts","webpack://TonConnectSDK/./src/provider/injected/injected-provider.ts","webpack://TonConnectSDK/./src/provider/injected/models/injected-wallet-api.ts","webpack://TonConnectSDK/./src/resources/fallback-wallets-list.ts","webpack://TonConnectSDK/./src/resources/protocol.ts","webpack://TonConnectSDK/./src/storage/bridge-connection-storage.ts","webpack://TonConnectSDK/./src/storage/default-storage.ts","webpack://TonConnectSDK/./src/storage/http-bridge-gateway-storage.ts","webpack://TonConnectSDK/./src/storage/models/in-memory-storage.ts","webpack://TonConnectSDK/./src/ton-connect.ts","webpack://TonConnectSDK/./src/utils/address.ts","webpack://TonConnectSDK/./src/utils/call-for-success.ts","webpack://TonConnectSDK/./src/utils/create-abort-controller.ts","webpack://TonConnectSDK/./src/utils/delay.ts","webpack://TonConnectSDK/./src/utils/feature-support.ts","webpack://TonConnectSDK/./src/utils/log.ts","webpack://TonConnectSDK/./src/utils/resource.ts","webpack://TonConnectSDK/./src/utils/timeout.ts","webpack://TonConnectSDK/./src/utils/types.ts","webpack://TonConnectSDK/./src/utils/url.ts","webpack://TonConnectSDK/./src/utils/web-api.ts","webpack://TonConnectSDK/./src/wallets-list-manager.ts","webpack://TonConnectSDK/../../node_modules/tweetnacl-util/nacl-util.js","webpack://TonConnectSDK/../../node_modules/tweetnacl/nacl-fast.js","webpack://TonConnectSDK/../protocol/lib/cjs/index.cjs","webpack://TonConnectSDK/webpack/bootstrap","webpack://TonConnectSDK/webpack/startup"],"sourcesContent":["export { WrongAddressError } from './wrong-address.error';\n","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","export { ParseHexError } from './parse-hex.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 { 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 * 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 { UserRejectsError } from 'src/errors/protocol/events/connect/user-rejects.error';\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","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 { 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 * from './connect';\n","export * from './events';\nexport * from './responses';\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","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 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","export { LocalstorageNotFoundError } from './localstorage-not-found.error';\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","/**\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 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?: unknown;\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 * 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","export { WalletAlreadyConnectedError } from './wallet-already-connected.error';\nexport { WalletNotConnectedError } from './wallet-not-connected.error';\nexport { WalletNotInjectedError } from './wallet-not-injected.error';\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","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 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 { TonConnectError } from 'src/errors/ton-connect.error';\n\n/**\n * Thrown when wallet doesn't support requested feature method.\n */\nexport class WalletNotSupportFeatureError extends TonConnectError {\n protected get info(): string {\n return \"Wallet doesn't support requested feature method.\";\n }\n\n constructor(...args: ConstructorParameters<typeof TonConnectError>) {\n super(...args);\n\n Object.setPrototypeOf(this, WalletNotSupportFeatureError.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 { FetchWalletsError } from './fetch-wallets.error';\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 {\n CHAIN,\n DeviceInfo,\n Feature,\n SendTransactionFeature,\n SignDataFeature,\n SendTransactionFeatureDeprecated,\n TonProofItemReply,\n TonProofItemReplySuccess,\n TonProofItemReplyError,\n ConnectItemReplyError,\n CONNECT_ITEM_ERROR_CODES\n} from '@tonconnect/protocol';\nexport { toUserFriendlyAddress } from './utils/address';\nexport { isTelegramUrl, encodeTelegramUrlParameters } from './utils/url';\n","export * from './wallet';\nexport * from './methods';\nexport { DappMetadata } from './dapp/dapp-metadata';\nexport { TonConnectOptions } from './ton-connect-options';\n","export * from './connect';\nexport * from './send-transaction';\n","export type { Account } from './account';\nexport type { Wallet } from './wallet';\nexport type {\n WalletConnectionSource,\n WalletConnectionSourceHTTP,\n WalletConnectionSourceJS\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';\n","export type WalletConnectionSource = WalletConnectionSourceHTTP | WalletConnectionSourceJS;\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","/**\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 * 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 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","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","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 {\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\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'> & { valid_until: number }\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 { 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';\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 = 5000;\n\n private eventSource = createResource(\n async (signal?: AbortSignal, openingDeadlineMS?: number): 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 };\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\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 ) {\n this.bridgeGatewayStorage = new HttpBridgeGatewayStorage(storage, bridgeUrl);\n }\n\n public async registerSession(options?: RegisterSessionOptions): Promise<void> {\n await this.eventSource.create(options?.signal, options?.openingDeadlineMS);\n }\n\n public async send(\n message: Uint8Array,\n receiver: string,\n topic: RpcMethod,\n options?: {\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?: number | { ttl?: number; signal?: AbortSignal; attempts?: number }\n ): Promise<void> {\n // TODO: remove deprecated method\n const options: { ttl?: number; signal?: AbortSignal; attempts?: number } = {};\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 }\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 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: 5_000,\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 logError('Bridge error', JSON.stringify(e));\n return;\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 bridgeIncomingMessage = JSON.parse(e.data);\n } catch (e) {\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 = {\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 = {\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\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 && newInstance !== eventSource) {\n resolve(newInstance);\n }\n } catch (e) {\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 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 {\n AppRequest,\n Base64,\n ConnectEventSuccess,\n ConnectRequest,\n hexToByteArray,\n RpcMethod,\n SessionCrypto,\n TonAddressItemReply,\n WalletEvent,\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 { IStorage } from 'src/storage/models/storage.interface';\nimport { Optional, WithoutId, WithoutIdDistributive } 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';\n\nexport class BridgeProvider implements HTTPProvider {\n public static async fromStorage(storage: IStorage): Promise<BridgeProvider> {\n const bridgeConnectionStorage = new BridgeConnectionStorage(storage);\n const connection = await bridgeConnectionStorage.getHttpConnection();\n\n if (isPendingConnectionHttp(connection)) {\n return new BridgeProvider(storage, connection.connectionSource);\n }\n return new BridgeProvider(storage, { bridgeUrl: connection.session.bridgeUrl });\n }\n\n public readonly type = 'http';\n\n private readonly standardUniversalLink = 'tc://';\n\n private readonly connectionStorage: BridgeConnectionStorage;\n\n private readonly pendingRequests = new Map<\n string,\n (response: WithoutId<WalletResponse<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: WithoutIdDistributive<WalletEvent>) => void> = [];\n\n private readonly defaultOpeningDeadlineMS = 5000;\n\n private abortController?: AbortController;\n\n constructor(\n private readonly storage: IStorage,\n private readonly walletConnectionSource:\n | Optional<WalletConnectionSourceHTTP, 'universalLink'>\n | Pick<WalletConnectionSourceHTTP, 'bridgeUrl'>[]\n ) {\n this.connectionStorage = new BridgeConnectionStorage(storage);\n }\n\n public connect(\n message: ConnectRequest,\n options?: {\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }\n ): string {\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: options?.openingDeadlineMS,\n signal: _options?.signal\n }),\n {\n attempts: Number.MAX_SAFE_INTEGER,\n delayMs: 5_000,\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);\n }\n\n public async restoreConnection(options?: {\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }): 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 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 });\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.storage,\n this.walletConnectionSource.bridgeUrl,\n storedConnection.session.sessionCrypto.sessionId,\n this.gatewayListener.bind(this),\n this.gatewayErrorsListener.bind(this)\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));\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 }),\n {\n attempts: Number.MAX_SAFE_INTEGER,\n delayMs: 5_000,\n signal: abortController.signal\n }\n );\n } catch (e) {\n await this.disconnect({ signal: abortController.signal });\n return;\n }\n }\n\n public sendRequest<T extends RpcMethod>(\n request: WithoutId<AppRequest<T>>,\n options?: {\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?: (() => void) | { attempts?: number; onRequestSent?: () => void; signal?: AbortSignal }\n ): Promise<WithoutId<WalletResponse<T>>> {\n // TODO: remove deprecated method\n const options: {\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 }\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 await this.gateway.send(\n encodedRequest,\n this.session.walletPublicKey,\n request.method,\n { attempts: options?.attempts, signal: options?.signal }\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?: { signal?: AbortSignal }): Promise<void> {\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 }\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: WithoutIdDistributive<WalletEvent>) => 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 walletMessage: WalletMessage = JSON.parse(\n this.session!.sessionCrypto.decrypt(\n Base64.decode(bridgeIncomingMessage.message).toUint8Array(),\n hexToByteArray(bridgeIncomingMessage.from)\n )\n );\n\n logDebug('Wallet message received:', walletMessage);\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);\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));\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(universalLink: string, message: ConnectRequest): string {\n if (isTelegramUrl(universalLink)) {\n return this.generateTGUniversalLink(universalLink, message);\n }\n\n return this.generateRegularUniversalLink(universalLink, message);\n }\n\n private generateRegularUniversalLink(universalLink: string, message: ConnectRequest): 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('r', JSON.stringify(message));\n return url.toString();\n }\n\n private generateTGUniversalLink(universalLink: string, message: ConnectRequest): string {\n const urlToWrap = this.generateRegularUniversalLink('about:blank', message);\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?: {\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }\n ): Promise<void> {\n if (Array.isArray(this.walletConnectionSource)) {\n // close all gateways before opening new ones\n this.pendingGateways.map(bridge => bridge.close().catch(e => console.error(e)));\n\n // open new gateways\n this.pendingGateways = this.walletConnectionSource.map(source => {\n const gateway = new BridgeGateway(\n this.storage,\n source.bridgeUrl,\n sessionCrypto.sessionId,\n () => {},\n e => {\n console.error(e);\n }\n );\n\n gateway.setListener(message =>\n this.pendingGatewaysListener(gateway, source.bridgeUrl, message)\n );\n\n return gateway;\n });\n\n await Promise.allSettled(\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: options?.openingDeadlineMS,\n signal: _options.signal\n });\n },\n {\n attempts: Number.MAX_SAFE_INTEGER,\n delayMs: 5_000,\n signal: options?.signal\n }\n )\n )\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.storage,\n this.walletConnectionSource.bridgeUrl,\n sessionCrypto.sessionId,\n this.gatewayListener.bind(this),\n this.gatewayErrorsListener.bind(this)\n );\n return await this.gateway.registerSession({\n openingDeadlineMS: options?.openingDeadlineMS,\n signal: options?.signal\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 { 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 type BridgeConnection =\n | BridgeConnectionHttp\n | BridgePendingConnectionHttp\n | BridgeConnectionInjected;\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 type BridgeConnectionHttpRaw = Omit<BridgeConnectionHttp, 'session'> & {\n session: BridgeSessionRaw;\n};\n\nexport type BridgePendingConnectionHttpRaw = Omit<BridgePendingConnectionHttp, 'sessionCrypto'> & {\n sessionCrypto: KeyPair;\n};\n\nexport type BridgeConnectionRaw =\n | BridgeConnectionHttpRaw\n | BridgePendingConnectionHttpRaw\n | BridgeConnectionInjected;\n","import { WalletNotInjectedError } from 'src/errors/wallet/wallet-not-injected.error';\nimport {\n AppRequest,\n ConnectEventError,\n ConnectRequest,\n RpcMethod,\n WalletEvent,\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 { IStorage } from 'src/storage/models/storage.interface';\nimport { WithoutId, WithoutIdDistributive } from 'src/utils/types';\nimport { getWindow, tryGetWindowKeys } from 'src/utils/web-api';\nimport { PROTOCOL_VERSION } from 'src/resources/protocol';\nimport { WalletInfoCurrentlyInjected } from 'src/models';\nimport { logDebug } from 'src/utils/log';\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(storage: IStorage): Promise<InjectedProvider> {\n const bridgeConnectionStorage = new BridgeConnectionStorage(storage);\n const connection = await bridgeConnectionStorage.getInjectedConnection();\n return new InjectedProvider(storage, connection.jsBridgeKey);\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 windowKeys = tryGetWindowKeys();\n const wallets = windowKeys.filter(([_, value]) =>\n isJSBridgeWithMetadata(value)\n ) as unknown as [string, { tonconnect: InjectedWalletApi }][];\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 }));\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 readonly connectionStorage: BridgeConnectionStorage;\n\n private listenSubscriptions = false;\n\n private listeners: Array<(e: WithoutIdDistributive<WalletEvent>) => void> = [];\n\n constructor(storage: IStorage, private readonly injectedWalletKey: T) {\n const window: Window | undefined | WindowWithTon<T> = InjectedProvider.window;\n if (!InjectedProvider.isWindowContainsWallet(window, injectedWalletKey)) {\n throw new WalletNotInjectedError();\n }\n\n this.connectionStorage = new BridgeConnectionStorage(storage);\n this.injectedWallet = window[injectedWalletKey]!.tonconnect!;\n }\n\n public connect(message: ConnectRequest): void {\n this._connect(PROTOCOL_VERSION, message);\n }\n\n public async restoreConnection(): Promise<void> {\n try {\n logDebug(`Injected Provider restoring connection...`);\n const connectEvent = await this.injectedWallet.restoreConnection();\n logDebug('Injected Provider restoring connection response', connectEvent);\n\n if (connectEvent.event === 'connect') {\n this.makeSubscriptions();\n this.listeners.forEach(listener => listener(connectEvent));\n } else {\n await this.connectionStorage.removeConnection();\n }\n } catch (e) {\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(): Promise<void> {\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\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: WithoutIdDistributive<WalletEvent>) => 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?: {\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?: (() => void) | { onRequestSent?: () => void; signal?: AbortSignal; attempts?: number }\n ): Promise<WithoutId<WalletResponse<T>>> {\n // TODO: remove deprecated method\n const options: {\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 }\n\n const id = (await this.connectionStorage.getNextRpcRequestId()).toString();\n await this.connectionStorage.increaseNextRpcRequestId();\n\n logDebug('Send injected-bridge request:', { ...request, id });\n const result = this.injectedWallet.send<T>({ ...request, id } as AppRequest<T>);\n result.then(response => logDebug('Wallet message received:', response));\n options?.onRequestSent?.();\n\n return result;\n }\n\n private async _connect(protocolVersion: number, message: ConnectRequest): Promise<void> {\n try {\n logDebug(\n `Injected Provider connect request: protocolVersion: ${protocolVersion}, message:`,\n message\n );\n const connectEvent = await this.injectedWallet.connect(protocolVersion, message);\n\n logDebug('Injected Provider connect response:', connectEvent);\n\n if (connectEvent.event === 'connect') {\n await this.updateSession();\n this.makeSubscriptions();\n }\n this.listeners.forEach(listener => listener(connectEvent));\n } catch (e) {\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));\n }\n }\n\n private makeSubscriptions(): void {\n this.listenSubscriptions = true;\n this.unsubscribeCallback = this.injectedWallet.listen(e => {\n logDebug('Wallet message received:', e);\n\n if (this.listenSubscriptions) {\n this.listeners.forEach(listener => listener(e));\n }\n\n if (e.event === 'disconnect') {\n this.disconnect();\n }\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","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 } 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'\n >;\n protocolVersion: number;\n isWalletBrowser: boolean;\n connect(protocolVersion: number, message: ConnectRequest): Promise<ConnectEvent>;\n restoreConnection(): Promise<ConnectEvent>;\n send<T extends RpcMethod>(message: AppRequest<T>): Promise<WalletResponse<T>>;\n listen(callback: (event: 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","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://bridge.tonapi.io/bridge'\n }\n ],\n platforms: ['ios', 'android', 'macos', 'windows', 'linux']\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 },\n {\n app_name: 'mytonwallet',\n name: 'MyTonWallet',\n image: 'https://mytonwallet.io/icon-256.png',\n about_url: 'https://mytonwallet.io',\n universal_url: 'https://connect.mytonwallet.org',\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 },\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 },\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 },\n {\n app_name: 'dewallet',\n name: 'DeWallet',\n image: 'https://app.delabwallet.com/logo_black.png',\n about_url: 'https://delabwallet.com',\n bridge: [\n {\n type: 'js',\n key: 'dewallet'\n }\n ],\n platforms: ['chrome']\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 },\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 }\n];\n","export const PROTOCOL_VERSION = 2;\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 BridgePendingConnectionHttp,\n BridgePendingConnectionHttpRaw,\n isPendingConnectionHttp\n} from 'src/provider/bridge/models/bridge-connection';\nimport { IStorage } from 'src/storage/models/storage.interface';\n\nexport class BridgeConnectionStorage {\n private readonly storeKey = 'ton-connect-storage_bridge-connection';\n\n constructor(private readonly storage: IStorage) {}\n\n public async storeConnection(connection: BridgeConnection): Promise<void> {\n if (connection.type === 'injected') {\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 };\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 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') {\n return connection;\n }\n\n if ('connectEvent' in connection) {\n const sessionCrypto = new SessionCrypto(connection.session.sessionKeyPair);\n return {\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 return {\n type: 'http',\n sessionCrypto: new SessionCrypto(connection.sessionCrypto),\n connectionSource: connection.connectionSource\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 === 'injected') {\n throw new TonConnectError(\n 'Trying to read HTTP connection source while injected 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 === 'injected') {\n throw new TonConnectError(\n 'Trying to read HTTP connection source while injected 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 === 'http') {\n throw new TonConnectError(\n 'Trying to read Injected bridge connection source while HTTP 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","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","import { IStorage } from 'src/storage/models/storage.interface';\n\nexport class HttpBridgeGatewayStorage {\n private readonly storeKey: string;\n\n constructor(private readonly storage: IStorage, bridgeUrl: string) {\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","/**\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","import {\n ConnectEventError,\n ConnectEventSuccess,\n ConnectItem,\n ConnectRequest,\n SendTransactionRpcResponseSuccess,\n TonAddressItemReply,\n TonProofItemReply,\n WalletEvent\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 { WalletAlreadyConnectedError } from 'src/errors/wallet/wallet-already-connected.error';\nimport { WalletNotConnectedError } from 'src/errors/wallet/wallet-not-connected.error';\nimport {\n Account,\n Wallet,\n WalletConnectionSource,\n WalletConnectionSourceHTTP,\n WalletInfo\n} from 'src/models';\nimport { SendTransactionRequest, SendTransactionResponse } from 'src/models/methods';\nimport { ConnectAdditionalRequest } from 'src/models/methods/connect/connect-additional-request';\nimport { TonConnectOptions } from 'src/models/ton-connect-options';\nimport {\n isWalletConnectionSourceJS,\n WalletConnectionSourceJS\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 { 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 { getDocument, getWebPageManifest } from 'src/utils/web-api';\nimport { WalletsListManager } from 'src/wallets-list-manager';\nimport { WithoutIdDistributive } from 'src/utils/types';\nimport { checkSendTransactionSupport } 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';\n\nexport class TonConnect implements ITonConnect {\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 private readonly walletsList = new WalletsListManager();\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 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 this.dappSettings = {\n manifestUrl: options?.manifestUrl || getWebPageManifest(),\n storage: options?.storage || new DefaultStorage()\n };\n\n this.walletsList = new WalletsListManager({\n walletsListSource: options?.walletsListSource,\n cacheTTLMs: options?.walletsListCacheTTLMs\n });\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(this.dappSettings.storage);\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?: {\n request?: ConnectAdditionalRequest;\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }\n ): T extends WalletConnectionSourceJS ? void : 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?: {\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }\n ): T extends WalletConnectionSourceJS ? void : string;\n public connect(\n wallet: WalletConnectionSource | Pick<WalletConnectionSourceHTTP, 'bridgeUrl'>[],\n requestOrOptions?:\n | ConnectAdditionalRequest\n | {\n request?: ConnectAdditionalRequest;\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }\n ): void | string {\n // TODO: remove deprecated method\n const options: {\n request?: ConnectAdditionalRequest;\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n } = {};\n if (typeof requestOrOptions === 'object' && 'tonProof' in requestOrOptions) {\n options.request = requestOrOptions;\n }\n if (\n typeof requestOrOptions === 'object' &&\n ('openingDeadlineMS' in requestOrOptions ||\n 'signal' in requestOrOptions ||\n 'request' in requestOrOptions)\n ) {\n options.request = requestOrOptions?.request;\n options.openingDeadlineMS = requestOrOptions?.openingDeadlineMS;\n options.signal = requestOrOptions?.signal;\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 return this.provider.connect(this.createConnectRequest(options?.request), {\n openingDeadlineMS: options?.openingDeadlineMS,\n signal: abortController.signal\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(options?: {\n openingDeadlineMS?: number;\n signal?: AbortSignal;\n }): 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 // 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 return;\n }\n\n let provider: Provider | null = null;\n try {\n switch (bridgeConnectionType) {\n case 'http':\n provider = await BridgeProvider.fromStorage(this.dappSettings.storage);\n break;\n case 'injected':\n provider = await InjectedProvider.fromStorage(this.dappSettings.storage);\n break;\n default:\n if (embeddedWallet) {\n provider = this.createProvider(embeddedWallet);\n } else {\n return;\n }\n }\n } catch {\n await this.bridgeConnectionStorage.removeConnection();\n provider?.closeConnection();\n provider = null;\n return;\n }\n\n if (abortController.signal.aborted) {\n provider?.closeConnection();\n return;\n }\n\n if (!provider) {\n logError('Provider is not restored');\n return;\n }\n\n this.provider?.closeConnection();\n this.provider = provider;\n provider.listen(this.walletEventsListener.bind(this));\n\n abortController.signal.addEventListener('abort', () => {\n provider?.closeConnection();\n provider = null;\n });\n\n return await callForSuccess(\n async _options =>\n provider?.restoreConnection({\n openingDeadlineMS: options?.openingDeadlineMS,\n signal: _options.signal\n }),\n {\n attempts: Number.MAX_SAFE_INTEGER,\n delayMs: 5_000,\n signal: options?.signal\n }\n );\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?: {\n onRequestSent?: () => void;\n signal?: AbortSignal;\n }\n ): Promise<SendTransactionResponse>;\n /** @deprecated use sendTransaction(transaction, options) instead */\n public sendTransaction(\n transaction: SendTransactionRequest,\n onRequestSent?: () => void\n ): Promise<SendTransactionResponse>;\n public async sendTransaction(\n transaction: SendTransactionRequest,\n optionsOrOnRequestSent?:\n | {\n onRequestSent?: () => void;\n signal?: AbortSignal;\n }\n | (() => void)\n ): Promise<SendTransactionResponse> {\n // TODO: remove deprecated method\n const options: {\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 }\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 checkSendTransactionSupport(this.wallet!.device.features, {\n requiredMessagesNumber: transaction.messages.length\n });\n\n const { validUntil, ...tx } = transaction;\n const from = transaction.from || this.account!.address;\n const network = transaction.network || this.account!.chain;\n\n const response = await this.provider!.sendRequest(\n sendTransactionParser.convertToRpcRequest({\n ...tx,\n valid_until: validUntil,\n from,\n network\n }),\n { onRequestSent: options.onRequestSent, signal: abortController.signal }\n );\n\n if (sendTransactionParser.isError(response)) {\n return sendTransactionParser.parseAndThrowError(response);\n }\n\n return sendTransactionParser.convertFromRpcResponse(\n response as SendTransactionRpcResponseSuccess\n );\n }\n\n /**\n * Disconnect form thw connected wallet and drop current session.\n */\n public async disconnect(options?: { signal?: AbortSignal }): Promise<void> {\n if (!this.connected) {\n throw new WalletNotConnectedError();\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 this.onWalletDisconnected();\n await this.provider?.disconnect({\n signal: abortController.signal\n });\n prevAbortController?.abort();\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(e => logError('Cannot unpause connection', e));\n }\n });\n } catch (e) {\n logError('Cannot subscribe to the document.visibilitychange: ', e);\n }\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(this.dappSettings.storage, wallet.jsBridgeKey);\n } else {\n provider = new BridgeProvider(this.dappSettings.storage, wallet);\n }\n\n provider.listen(this.walletEventsListener.bind(this));\n return provider;\n }\n\n private walletEventsListener(e: WithoutIdDistributive<WalletEvent>): void {\n switch (e.event) {\n case 'connect':\n this.onWalletConnected(e.payload);\n break;\n case 'connect_error':\n this.onWalletConnectError(e.payload);\n break;\n case 'disconnect':\n this.onWalletDisconnected();\n }\n }\n\n private onWalletConnected(connectEvent: ConnectEventSuccess['payload']): 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 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 (tonProofItem) {\n wallet.connectItems = {\n tonProof: tonProofItem\n };\n }\n\n this.wallet = wallet;\n }\n\n private onWalletConnectError(connectEventError: ConnectEventError['payload']): void {\n const error = connectErrorsParser.parseError(connectEventError);\n this.statusChangeErrorSubscriptions.forEach(errorsHandler => errorsHandler(error));\n\n console.debug(error);\n\n if (error instanceof ManifestNotFoundError || error instanceof ManifestContentErrorError) {\n console.error(error);\n throw error;\n }\n }\n\n private onWalletDisconnected(): void {\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 }\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 { WrongAddressError, ParseHexError } from 'src/errors';\nimport { Base64 } from '@tonconnect/protocol';\n\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\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\nfunction 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 { 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 100ms.\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 */\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","/**\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 { 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 { Feature, SendTransactionFeature } from '@tonconnect/protocol';\nimport { logWarning } from 'src/utils/log';\nimport { WalletNotSupportFeatureError } from 'src/errors/wallet/wallet-not-support-feature.error';\n\nexport function checkSendTransactionSupport(\n features: Feature[],\n options: { requiredMessagesNumber: number }\n): never | void {\n const supportsDeprecatedSendTransactionFeature = features.includes('SendTransaction');\n const sendTransactionFeature = features.find(\n feature => feature && typeof feature === 'object' && feature.name === 'SendTransaction'\n ) as SendTransactionFeature;\n\n if (!supportsDeprecatedSendTransactionFeature && !sendTransactionFeature) {\n throw new WalletNotSupportFeatureError(\"Wallet doesn't support SendTransaction feature.\");\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 }\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","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\n","import { TonConnectError } from 'src/errors';\nimport { logError } from 'src/utils/log';\nimport { delay } from 'src/utils/delay';\nimport { createAbortController } from 'src/utils/create-abort-controller';\n\n/**\n * The resource interface.\n */\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 */\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(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 abortController?.abort();\n\n await Promise.allSettled([\n resource ? disposeFn(resource) : Promise.resolve(),\n promise ? disposeFn(await promise) : Promise.resolve()\n ]);\n } catch (e) {\n logError('Failed to dispose the resource', e);\n }\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 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 { 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 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((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 fn(resolve, reject, deferOptions).finally(() => clearTimeout(timeoutId));\n });\n}\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","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 encodeTelegramUrlParameters(parameters: string): string {\n return parameters\n .replaceAll('.', '%2E')\n .replaceAll('-', '%2D')\n .replaceAll('_', '%5F')\n .replaceAll('&', '-')\n .replaceAll('=', '__')\n .replaceAll('%', '--');\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\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","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 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';\n\nexport class WalletsListManager {\n private walletsListCache: Promise<WalletInfo[]> | null = null;\n\n private walletsListCacheCreationTimestamp: number | null = null;\n\n private readonly cacheTTLMs: number | undefined;\n\n private readonly walletsListSource: string =\n 'https://raw.githubusercontent.com/ton-blockchain/wallets-list/main/wallets-v2.json';\n\n constructor(options?: { walletsListSource?: string; cacheTTLMs?: number }) {\n if (options?.walletsListSource) {\n this.walletsListSource = options.walletsListSource;\n }\n\n if (options?.cacheTTLMs) {\n this.cacheTTLMs = options.cacheTTLMs;\n }\n }\n\n public async getWallets(): Promise<WalletInfo[]> {\n if (\n this.cacheTTLMs &&\n this.walletsListCacheCreationTimestamp &&\n Date.now() > this.walletsListCacheCreationTimestamp + this.cacheTTLMs\n ) {\n this.walletsListCache = null;\n }\n\n if (!this.walletsListCache) {\n this.walletsListCache = this.fetchWalletsList();\n this.walletsListCache\n .then(() => {\n this.walletsListCacheCreationTimestamp = Date.now();\n })\n .catch(() => {\n this.walletsListCache = null;\n this.walletsListCacheCreationTimestamp = null;\n });\n }\n\n return this.walletsListCache;\n }\n\n public async getEmbeddedWallet(): Promise<WalletInfoCurrentlyEmbedded | null> {\n const walletsList = await this.getWallets();\n const embeddedWallets = walletsList.filter(isWalletInfoCurrentlyEmbedded);\n\n if (embeddedWallets.length !== 1) {\n return null;\n }\n\n return embeddedWallets[0]!;\n }\n\n private async fetchWalletsList(): Promise<WalletInfo[]> {\n let walletsList: WalletInfoDTO[] = [];\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.name)\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 } catch (e) {\n logError(e);\n walletsList = FALLBACK_WALLETS_LIST;\n }\n\n let currentlyInjectedWallets: WalletInfoCurrentlyInjected[] = [];\n try {\n currentlyInjectedWallets = InjectedProvider.getCurrentlyInjectedWallets();\n } catch (e) {\n logError(e);\n }\n\n return this.mergeWalletsLists(\n this.walletConfigDTOListToWalletConfigList(walletsList),\n currentlyInjectedWallets\n );\n }\n\n private walletConfigDTOListToWalletConfigList(walletConfigDTO: WalletInfoDTO[]): WalletInfo[] {\n return walletConfigDTO.map(walletConfigDTO => {\n const walletConfigBase: 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 };\n\n const walletConfig: WalletInfo = walletConfigBase as WalletInfo;\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\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;\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 !('url' in sseBridge) ||\n !(sseBridge as { url: string }).url ||\n !(value 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 (!('key' in jsBridge) || !(jsBridge as { key: string }).key) {\n return false;\n }\n }\n\n return true;\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","(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","'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\nvar nacl = require('tweetnacl-util');\nvar nacl$1 = require('tweetnacl');\n\nfunction _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }\n\nvar nacl__default = /*#__PURE__*/_interopDefaultLegacy(nacl);\nvar nacl__default$1 = /*#__PURE__*/_interopDefaultLegacy(nacl$1);\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__default[\"default\"].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__default[\"default\"].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__default[\"default\"].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__default[\"default\"].encodeUTF8(decodedUint8Array);\n },\n toObject() {\n try {\n return JSON.parse(nacl__default[\"default\"].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__default$1[\"default\"].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__default$1[\"default\"].randomBytes(this.nonceLength);\n }\n encrypt(message, receiverPublicKey) {\n const encodedMessage = new TextEncoder().encode(message);\n const nonce = this.createNonce();\n const encrypted = nacl__default$1[\"default\"].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__default$1[\"default\"].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","// 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__(1920);\n"],"names":["WrongAddressError","TonConnectError","info","constructor","args","super","Object","setPrototypeOf","this","prototype","ParseHexError","DappMetadataError","UnknownError","UserRejectsError","ManifestContentErrorError","ManifestNotFoundError","BadRequestError","UnknownAppError","LocalstorageNotFoundError","Error","message","options","prefix","name","WalletAlreadyConnectedError","WalletNotConnectedError","WalletNotInjectedError","WalletNotSupportFeatureError","FetchWalletsError","TonConnect","WalletsListManager","CHAIN","CONNECT_ITEM_ERROR_CODES","toUserFriendlyAddress","isTelegramUrl","encodeTelegramUrlParameters","isWalletInfoCurrentlyInjected","isWalletInfoCurrentlyEmbedded","isWalletInfoInjectable","isWalletInfoRemote","isWalletInfoInjected","value","injected","embedded","connectEventErrorsCodes","CONNECT_EVENT_ERROR_CODES","UNKNOWN_ERROR","USER_REJECTS_ERROR","BAD_REQUEST_ERROR","UNKNOWN_APP_ERROR","MANIFEST_NOT_FOUND_ERROR","MANIFEST_CONTENT_ERROR","connectErrorsParser","parseError","error","ErrorConstructor","code","isError","response","sendTransactionErrors","SEND_TRANSACTION_ERROR_CODES","SendTransactionParser","RpcParser","convertToRpcRequest","request","method","params","JSON","stringify","parseAndThrowError","convertFromRpcResponse","rpcResponse","boc","result","sendTransactionParser","storage","bridgeUrl","sessionId","listener","errorsListener","ssePath","postPath","heartbeatMessage","defaultTtl","defaultReconnectDelay","eventSource","createResource","signal","openingDeadlineMS","eventSourceConfig","bridgeGatewayStorage","errorHandler","errorsHandler","bind","messageHandler","messagesHandler","config","timeout","resolve","reject","deferOptions","createAbortController","aborted","url","URL","addPathToUrl","searchParams","append","lastEventId","getLastEventId","EventSource","toString","onerror","reason","close","newInstance","e","onopen","onmessage","event","addEventListener","createEventSource","resource","HttpBridgeGatewayStorage","isReady","current","readyState","OPEN","isClosed","isConnecting","CONNECTING","registerSession","create","send","receiver","topic","ttlOrOptions","ttl","attempts","body","Base64","encode","callForSuccess","post","ok","status","Number","MAX_SAFE_INTEGER","delayMs","pause","dispose","catch","logError","unPause","recreate","setListener","setErrorsListener","fetch","logDebug","data","storeLastEventId","bridgeIncomingMessage","parse","BridgeProvider","walletConnectionSource","type","standardUniversalLink","pendingRequests","Map","session","gateway","pendingGateways","listeners","defaultOpeningDeadlineMS","connectionStorage","BridgeConnectionStorage","static","bridgeConnectionStorage","connection","getHttpConnection","isPendingConnectionHttp","connectionSource","connect","abortController","abort","closeGateways","sessionCrypto","SessionCrypto","storeConnection","then","_options","openGateways","universalLink","generateUniversalLink","restoreConnection","storedConnection","Array","isArray","BridgeGateway","gatewayListener","gatewayErrorsListener","forEach","connectEvent","disconnect","sendRequest","optionsOrOnRequestSent","onRequestSent","Promise","id","getNextRpcRequestId","increaseNextRpcRequestId","encodedRequest","encrypt","hexToByteArray","walletPublicKey","set","closeConnection","called","timeoutId","removeBridgeAndSession","setTimeout","clearTimeout","listen","callback","push","filter","bridge","promises","map","all","pendingGatewaysListener","includes","except","walletMessage","decrypt","decode","toUint8Array","from","get","delete","undefined","lastId","getLastWalletEventId","storeLastWalletEventId","updateSession","tonAddrItem","payload","items","find","item","connectEventToSave","lastWalletEventId","nextRpcRequestId","removeConnection","generateTGUniversalLink","generateRegularUniversalLink","PROTOCOL_VERSION","linkParams","split","startapp","updatedUniversalLink","convertToDirectLink","has","pathname","console","source","allSettled","some","InjectedProvider","injectedWalletKey","unsubscribeCallback","listenSubscriptions","window","isWindowContainsWallet","injectedWallet","tonconnect","getInjectedConnection","jsBridgeKey","isWalletBrowser","tryGetWindowKeys","_","isJSBridgeWithMetadata","wallet","walletInfo","appName","app_name","aboutUrl","about_url","imageUrl","image","tondns","platforms","_connect","makeSubscriptions","closeAllListeners","eventsCallback","protocolVersion","connectEventError","getWindow","hasProperty","hasProperties","FALLBACK_WALLETS_LIST","universal_url","deepLink","key","storeKey","setItem","rawSession","sessionKeyPair","stringifyKeypair","rawConnection","removeItem","getConnection","stored","getItem","getHttpPendingConnection","storedConnectionType","localStorage","tryGetLocalStorage","removeLastEventId","InMemoryStorage","instance","length","keys","clear","index","walletsList","_wallet","provider","statusChangeSubscriptions","statusChangeErrorSubscriptions","dappSettings","manifestUrl","getWebPageManifest","DefaultStorage","walletsListSource","cacheTTLMs","walletsListCacheTTLMs","disableAutoPauseConnection","addWindowFocusAndBlurSubscriptions","getWallets","connected","account","onStatusChange","requestOrOptions","createProvider","createConnectRequest","bridgeConnectionType","embeddedWallet","getEmbeddedWallet","fromStorage","walletEventsListener","sendTransaction","transaction","checkConnection","checkSendTransactionSupport","device","features","requiredMessagesNumber","messages","validUntil","tx","address","network","chain","valid_until","prevAbortController","onWalletDisconnected","pauseConnection","unPauseConnection","document","getDocument","hidden","isWalletConnectionSourceJS","onWalletConnected","onWalletConnectError","tonAccountItem","tonProofItem","walletStateInit","publicKey","connectItems","tonProof","debug","isWalletInjected","walletJSKey","isInsideWalletBrowser","hexAddress","testOnly","wc","hex","parts","parseInt","hexToBytes","parseHexAddress","tag","addr","Int8Array","addressWithChecksum","Uint8Array","reg","byte","mask","Math","floor","crc16","replace","toByteMap","ord","s","length2","toLowerCase","i","doubled","hexSubstring","substring","hasOwnProperty","fn","lastError","err","delay","AbortController","once","supportsDeprecatedSendTransactionFeature","sendTransactionFeature","feature","maxMessages","logWarning","warn","createFn","disposeFn","currentResource","currentArgs","currentPromise","currentSignal","promise","finally","propertyKeys","every","propertyKey","removeUrlLastSlash","slice","path","link","protocol","hostname","parameters","replaceAll","origin","location","isLocalStorageAvailable","process","versions","node","getInstance","walletsListCache","walletsListCacheCreationTimestamp","Date","now","fetchWalletsList","embeddedWallets","walletsResponse","json","wrongFormatWallets","isCorrectWalletConfigDTO","join","currentlyInjectedWallets","getCurrentlyInjectedWallets","mergeWalletsLists","walletConfigDTOListToWalletConfigList","walletConfigDTO","walletConfig","list1","list2","Set","concat","values","list1Item","list2Item","sseBridge","jsBridge","root","f","module","exports","nacl","util","validateBase64","test","TypeError","decodeUTF8","d","unescape","encodeURIComponent","b","charCodeAt","encodeUTF8","arr","String","fromCharCode","decodeURIComponent","escape","atob","Buffer","encodeBase64","decodeBase64","call","len","btoa","gf","init","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","p","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","m","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","bytes","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","add","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","crypto_secretbox_KEYBYTES","crypto_secretbox_NONCEBYTES","crypto_box_NONCEBYTES","crypto_sign_BYTES","crypto_sign_PUBLICKEYBYTES","crypto_sign_SECRETKEYBYTES","checkLengths","checkArrayTypes","arguments","cleanup","lowlevel","crypto_box","crypto_box_open","crypto_secretbox_ZEROBYTES","crypto_secretbox_BOXZEROBYTES","crypto_scalarmult_BYTES","crypto_scalarmult_SCALARBYTES","crypto_box_PUBLICKEYBYTES","crypto_box_SECRETKEYBYTES","crypto_box_BEFORENMBYTES","crypto_box_ZEROBYTES","crypto_box_BOXZEROBYTES","crypto_sign_SEEDBYTES","crypto_hash_BYTES","randomBytes","secretbox","msg","nonce","open","box","keyLength","nonceLength","overheadLength","scalarMult","base","scalarLength","groupElementLength","secretKey","before","checkBoxLengths","after","keyPair","fromSecretKey","publicKeyLength","secretKeyLength","sharedKeyLength","sign","signedMsg","tmp","mlen","detached","sig","verify","fromSeed","seed","seedLength","signatureLength","hash","hashLength","setPRNG","self","msCrypto","getRandomValues","min","defineProperty","nacl$1","_interopDefaultLegacy","SIGN_DATA_ERROR_CODES","DISCONNECT_ERROR_CODES","nacl__default","nacl__default$1","urlSafe","uint8Array","encoded","encodeUint8Array","decodedUint8Array","decodeToUint8Array","toObject","concatUint8Arrays","buffer1","buffer2","mergedArray","splitToUint8Arrays","array","toHexString","byteArray","hexString","createKeypairFromString","createKeypair","createNonce","receiverPublicKey","encodedMessage","TextEncoder","senderPublicKey","internalMessage","decrypted","TextDecoder","isNode","__webpack_module_cache__","__webpack_exports__","__webpack_require__","moduleId","cachedModule","__webpack_modules__"],"sourceRoot":""}
|