@walletconnect/types
Version:
Typings for WalletConnect Protocol
1 lines • 49.7 kB
Source Map (JSON)
{"version":3,"file":"index.cjs","sources":["../src/core/core.ts","../src/core/crypto.ts","../src/core/history.ts","../src/core/messages.ts","../src/core/publisher.ts","../src/core/relayer.ts","../src/core/store.ts","../src/core/subscriber.ts","../src/core/keychain.ts","../src/core/expirer.ts","../src/core/pairing.ts","../src/core/verify.ts","../src/core/echo.ts","../src/core/events.ts","../src/sign-client/client.ts","../src/sign-client/engine.ts"],"sourcesContent":["import { IEvents } from \"@walletconnect/events\";\nimport { IHeartBeat } from \"@walletconnect/heartbeat\";\nimport { IKeyValueStorage, KeyValueStorageOptions } from \"@walletconnect/keyvaluestorage\";\nimport { Logger } from \"@walletconnect/logger\";\n\nimport { ICrypto } from \"./crypto.js\";\nimport { IRelayer } from \"./relayer.js\";\nimport { IKeyChain } from \"./keychain.js\";\nimport { IJsonRpcHistory } from \"./history.js\";\nimport { IExpirer } from \"./expirer.js\";\nimport { IPairing } from \"./pairing.js\";\nimport { IVerify } from \"./verify.js\";\nimport { IEchoClient } from \"./echo.js\";\nimport { IEventClient } from \"./events.js\";\nexport declare namespace CoreTypes {\n interface Options {\n projectId?: string;\n name?: string;\n relayUrl?: string;\n logger?: string | Logger;\n keychain?: IKeyChain;\n storage?: IKeyValueStorage;\n storageOptions?: KeyValueStorageOptions;\n maxLogBlobSizeInBytes?: number;\n customStoragePrefix?: string;\n telemetryEnabled?: boolean;\n }\n\n interface Metadata {\n name: string;\n description: string;\n url: string;\n icons: string[];\n verifyUrl?: string;\n redirect?: {\n native?: string;\n universal?: string;\n linkMode?: boolean;\n };\n }\n}\n\nexport abstract class ICore extends IEvents {\n public readonly protocol = \"wc\";\n public readonly version = 2;\n\n public abstract readonly name: string;\n public abstract readonly context: string;\n public abstract readonly relayUrl?: string;\n public abstract readonly projectId?: string;\n public abstract readonly customStoragePrefix: string;\n\n public abstract logger: Logger;\n public abstract heartbeat: IHeartBeat;\n public abstract crypto: ICrypto;\n public abstract relayer: IRelayer;\n public abstract storage: IKeyValueStorage;\n public abstract history: IJsonRpcHistory;\n public abstract expirer: IExpirer;\n public abstract pairing: IPairing;\n public abstract verify: IVerify;\n public abstract echoClient: IEchoClient;\n public abstract linkModeSupportedApps: string[];\n public abstract eventClient: IEventClient;\n\n constructor(public opts?: CoreTypes.Options) {\n super();\n }\n\n public abstract start(): Promise<void>;\n public abstract dispatchEnvelope(params: {\n topic: string;\n message: string;\n sessionExists: boolean;\n }): void;\n\n public abstract addLinkModeSupportedApp(universalLink: string): void;\n}\n","import { JsonRpcPayload } from \"@walletconnect/jsonrpc-types\";\nimport { Logger } from \"@walletconnect/logger\";\nimport { ICore } from \"./core.js\";\nimport { IKeyChain } from \"./keychain.js\";\n\nexport declare namespace CryptoTypes {\n export type EncodingType = \"base64pad\" | \"base64url\";\n\n export interface Participant {\n publicKey: string;\n }\n\n export interface KeyPair {\n privateKey: string;\n publicKey: string;\n }\n\n export interface EncryptParams {\n message: string;\n symKey: string;\n type?: number;\n iv?: string;\n senderPublicKey?: string;\n encoding?: EncodingType;\n }\n\n export interface DecryptParams {\n symKey: string;\n encoded: string;\n encoding?: EncodingType;\n }\n\n export interface EncodingParams {\n type: Uint8Array;\n sealed: Uint8Array;\n iv: Uint8Array;\n senderPublicKey?: Uint8Array;\n encoding?: EncodingType;\n }\n\n export interface DecodingParams {\n encoded: string;\n encoding?: EncodingType;\n }\n\n export interface EncodeOptions {\n type?: number;\n senderPublicKey?: string;\n receiverPublicKey?: string;\n encoding?: EncodingType;\n }\n\n export interface DecodeOptions {\n receiverPublicKey?: string;\n encoding?: EncodingType;\n }\n\n export interface EncodingValidation {\n type: number;\n senderPublicKey?: string;\n receiverPublicKey?: string;\n }\n\n export interface TypeOneParams {\n type: 1;\n senderPublicKey: string;\n receiverPublicKey: string;\n }\n}\n\nexport abstract class ICrypto {\n public abstract name: string;\n\n public abstract readonly context: string;\n\n public abstract keychain: IKeyChain;\n\n public abstract readonly randomSessionIdentifier: string;\n\n constructor(\n public core: ICore,\n public logger: Logger,\n // @ts-ignore\n keychain?: IKeyChain,\n ) {}\n\n public abstract init(): Promise<void>;\n\n public abstract hasKeys(tag: string): boolean;\n\n public abstract getClientId(): Promise<string>;\n\n public abstract generateKeyPair(): Promise<string>;\n\n public abstract generateSharedKey(\n selfPublicKey: string,\n peerPublicKey: string,\n overrideTopic?: string,\n ): Promise<string>;\n\n public abstract setSymKey(symKey: string, overrideTopic?: string): Promise<string>;\n\n public abstract deleteKeyPair(publicKey: string): Promise<void>;\n\n public abstract deleteSymKey(topic: string): Promise<void>;\n\n public abstract encode(\n topic: string,\n payload: JsonRpcPayload,\n opts?: CryptoTypes.EncodeOptions,\n ): Promise<string>;\n\n public abstract decode(\n topic: string,\n encoded: string,\n opts?: CryptoTypes.DecodeOptions,\n ): Promise<JsonRpcPayload>;\n\n public abstract signJWT(aud: string): Promise<string>;\n public abstract getPayloadType(encoded: string, encoding?: CryptoTypes.EncodingType): number;\n public abstract getPayloadSenderPublicKey(\n encoded: string,\n encoding?: CryptoTypes.EncodingType,\n ): string | undefined;\n}\n","import { IEvents } from \"@walletconnect/events\";\nimport {\n ErrorResponse,\n JsonRpcRequest,\n JsonRpcResponse,\n RequestArguments,\n} from \"@walletconnect/jsonrpc-types\";\nimport { Logger } from \"@walletconnect/logger\";\n\nimport { ICore } from \"./core.js\";\n\nexport interface JsonRpcRecord {\n id: number;\n topic: string;\n request: RequestArguments;\n chainId?: string;\n response?: { result: any } | { error: ErrorResponse };\n expiry?: number;\n}\n\nexport interface RequestEvent {\n topic: string;\n request: JsonRpcRequest;\n chainId?: string;\n}\n\nexport abstract class IJsonRpcHistory extends IEvents {\n public records = new Map<number, JsonRpcRecord>();\n\n public abstract readonly context: string;\n\n public abstract readonly size: number;\n\n public abstract readonly keys: number[];\n\n public abstract readonly values: JsonRpcRecord[];\n\n public abstract readonly pending: RequestEvent[];\n\n constructor(\n public core: ICore,\n public logger: Logger,\n ) {\n super();\n }\n\n public abstract init(): Promise<void>;\n\n public abstract set(topic: string, request: JsonRpcRequest, chainId?: string): void;\n\n public abstract get(topic: string, id: number): Promise<JsonRpcRecord>;\n\n public abstract resolve(response: JsonRpcResponse): Promise<void>;\n\n public abstract delete(topic: string, id?: number): void;\n\n public abstract exists(topic: string, id: number): Promise<boolean>;\n}\n","import { Logger } from \"@walletconnect/logger\";\nimport { ICore } from \"./core.js\";\n\nexport type MessageRecord = Record<string, string>;\n\nexport abstract class IMessageTracker {\n public abstract messages: Map<string, MessageRecord>;\n public abstract messagesWithoutClientAck: Map<string, MessageRecord>;\n\n public abstract name: string;\n\n public abstract readonly context: string;\n\n constructor(\n public logger: Logger,\n public core: ICore,\n ) {}\n\n public abstract init(): Promise<void>;\n\n public abstract set(\n topic: string,\n message: string,\n direction?: \"inbound\" | \"outbound\",\n ): Promise<string>;\n\n public abstract get(topic: string): MessageRecord;\n\n public abstract getWithoutAck(topics: string[]): Record<string, string[]>;\n\n public abstract has(topic: string, message: string): boolean;\n\n public abstract del(topic: string): Promise<void>;\n\n public abstract ack(topic: string, message: string): Promise<void>;\n}\n","import { IEvents } from \"@walletconnect/events\";\nimport { Logger } from \"@walletconnect/logger\";\n\nimport { IRelayer, RelayerTypes } from \"./relayer.js\";\n\nexport declare namespace PublisherTypes {\n export interface Params {\n topic: string;\n message: string;\n opts: Omit<RelayerTypes.PublishOptions, \"internal\">;\n }\n}\n\nexport abstract class IPublisher extends IEvents {\n public abstract name: string;\n\n public abstract readonly context: string;\n\n constructor(\n public relayer: IRelayer,\n public logger: Logger,\n ) {\n super();\n }\n\n public abstract publish(\n topic: string,\n message: string,\n opts?: RelayerTypes.PublishOptions,\n ): Promise<void>;\n\n public abstract publishCustom(params: {\n payload: any;\n opts?: RelayerTypes.PublishOptions;\n }): Promise<void>;\n}\n","import { IEvents } from \"@walletconnect/events\";\nimport { IJsonRpcProvider, JsonRpcPayload, RequestArguments } from \"@walletconnect/jsonrpc-types\";\nimport { Logger } from \"@walletconnect/logger\";\n\nimport { ICore } from \"./core.js\";\nimport { IMessageTracker } from \"./messages.js\";\nimport { IPublisher } from \"./publisher.js\";\nimport { ISubscriber } from \"./subscriber.js\";\n\nexport declare namespace RelayerTypes {\n export interface ProtocolOptions {\n protocol: string;\n data?: string;\n }\n export interface PublishOptions {\n relay?: ProtocolOptions;\n ttl?: number;\n prompt?: boolean;\n tag?: number;\n id?: number;\n internal?: {\n throwOnFailedPublish?: boolean;\n };\n tvf?: ITVF;\n attestation?: string;\n publishMethod?: string;\n }\n\n export type TransportType = \"relay\" | \"link_mode\";\n\n export interface SubscribeOptions {\n relay?: ProtocolOptions;\n transportType?: TransportType;\n internal?: {\n throwOnFailedPublish?: boolean;\n skipSubscribe?: boolean;\n };\n }\n\n export interface UnsubscribeOptions {\n id?: string;\n relay: ProtocolOptions;\n }\n\n export type RequestOptions = PublishOptions | SubscribeOptions | UnsubscribeOptions;\n\n export interface PublishPayload {\n topic: string;\n message: string;\n opts?: RelayerTypes.PublishOptions;\n }\n export interface MessageEvent {\n topic: string;\n message: string;\n publishedAt: number;\n transportType?: TransportType;\n attestation?: string;\n }\n\n export interface RpcUrlParams {\n protocol: string;\n version: number;\n auth: string;\n relayUrl: string;\n sdkVersion: string;\n projectId?: string;\n useOnCloseEvent?: boolean;\n bundleId?: string;\n packageName?: string;\n }\n\n export interface ITVF {\n correlationId?: number;\n rpcMethods?: string[];\n chainId?: string;\n txHashes?: string[];\n contractAddresses?: string[];\n approvedChains?: string[];\n approvedMethods?: string[];\n approvedEvents?: string[];\n sessionProperties?: Record<string, string>;\n scopedProperties?: Record<string, unknown>;\n }\n\n export type MessageDirection = \"inbound\" | \"outbound\";\n}\n\nexport interface RelayerOptions {\n core: ICore;\n logger?: string | Logger;\n relayUrl?: string;\n projectId?: string;\n}\n\nexport interface RelayerClientMetadata {\n protocol: string;\n version: number;\n env: string;\n host?: string;\n}\n\nexport abstract class IRelayer extends IEvents {\n public abstract protocol: string;\n\n public abstract version: number;\n\n public abstract core: ICore;\n\n public abstract logger: Logger;\n\n public abstract subscriber: ISubscriber;\n\n public abstract publisher: IPublisher;\n\n public abstract messages: IMessageTracker;\n\n public abstract provider: IJsonRpcProvider;\n\n public abstract name: string;\n\n public abstract transportExplicitlyClosed: boolean;\n\n public abstract readonly context: string;\n\n public abstract readonly connected: boolean;\n\n public abstract readonly connecting: boolean;\n\n constructor(\n // @ts-ignore\n opts: RelayerOptions,\n ) {\n super();\n }\n\n public abstract init(): Promise<void>;\n\n public abstract publish(\n topic: string,\n message: string,\n opts?: RelayerTypes.PublishOptions,\n ): Promise<void>;\n\n public abstract publishCustom(params: {\n payload: any;\n opts?: RelayerTypes.PublishOptions;\n }): Promise<void>;\n\n public abstract request(request: RequestArguments): Promise<JsonRpcPayload>;\n\n public abstract subscribe(topic: string, opts?: RelayerTypes.SubscribeOptions): Promise<string>;\n\n public abstract unsubscribe(topic: string, opts?: RelayerTypes.UnsubscribeOptions): Promise<void>;\n public abstract transportClose(): Promise<void>;\n public abstract transportOpen(relayUrl?: string): Promise<void>;\n public abstract restartTransport(relayUrl?: string): Promise<void>;\n public abstract confirmOnlineStateOrThrow(): Promise<void>;\n public abstract handleBatchMessageEvents(messages: RelayerTypes.MessageEvent[]): Promise<void>;\n public abstract onLinkMessageEvent(\n messageEvent: RelayerTypes.MessageEvent,\n opts?: { sessionExists?: boolean },\n ): Promise<void>;\n}\n","import { ErrorResponse } from \"@walletconnect/jsonrpc-types\";\nimport { Logger } from \"@walletconnect/logger\";\nimport { ICore } from \"./core.js\";\n\nexport abstract class IStore<Key, Value> {\n public abstract map: Map<Key, Value>;\n\n public abstract readonly context: string;\n\n public abstract readonly length: number;\n\n public abstract readonly keys: Key[];\n\n public abstract readonly values: Value[];\n\n constructor(\n public core: ICore,\n public logger: Logger,\n public name: string,\n // @ts-ignore\n storagePrefix?: string,\n ) {}\n\n public abstract init(): Promise<void>;\n\n public abstract set(key: Key, value: Value): Promise<void>;\n\n public abstract get(key: Key): Value;\n\n public abstract getAll(filter?: Partial<Value>): Value[];\n\n public abstract update(key: Key, update: Partial<Value>): Promise<void>;\n\n public abstract delete(key: Key, reason: ErrorResponse): Promise<void>;\n}\n","import { IEvents } from \"@walletconnect/events\";\nimport { ErrorResponse } from \"@walletconnect/jsonrpc-types\";\nimport { Logger } from \"@walletconnect/logger\";\n\nimport { IRelayer, RelayerTypes } from \"./relayer.js\";\n\nexport declare namespace SubscriberTypes {\n export interface Params extends RelayerTypes.SubscribeOptions {\n topic: string;\n }\n\n export interface Active extends Params {\n id: string;\n }\n}\n\nexport declare namespace SubscriberEvents {\n export type Created = SubscriberTypes.Active;\n\n export interface Deleted extends SubscriberTypes.Active {\n reason: ErrorResponse;\n }\n\n export type Expired = Deleted;\n}\n\nexport abstract class ISubscriberTopicMap {\n public map = new Map<string, string[]>();\n\n public abstract readonly topics: string[];\n\n public abstract set(topic: string, id: string): void;\n\n public abstract get(topic: string): string[];\n\n public abstract exists(topic: string, id: string): boolean;\n\n public abstract delete(topic: string, id?: string): void;\n\n public abstract clear(): void;\n}\n\nexport abstract class ISubscriber extends IEvents {\n public abstract subscriptions: Map<string, SubscriberTypes.Active>;\n\n public abstract topicMap: ISubscriberTopicMap;\n\n public abstract pending: Map<string, SubscriberTypes.Params>;\n\n public abstract readonly length: number;\n\n public abstract readonly ids: string[];\n\n public abstract readonly values: SubscriberTypes.Active[];\n\n public abstract readonly topics: string[];\n\n public abstract readonly hasAnyTopics: boolean;\n\n public abstract name: string;\n\n public abstract readonly context: string;\n\n constructor(\n public relayer: IRelayer,\n public logger: Logger,\n ) {\n super();\n }\n\n public abstract init(): Promise<void>;\n\n public abstract subscribe(\n topic: string,\n opts?: RelayerTypes.SubscribeOptions,\n ): Promise<string | null>;\n\n public abstract unsubscribe(topic: string, opts?: RelayerTypes.UnsubscribeOptions): Promise<void>;\n\n public abstract isSubscribed(topic: string): Promise<boolean>;\n\n public abstract isKnownTopic(topic: string): Promise<boolean>;\n\n public abstract start(): Promise<void>;\n\n public abstract stop(): Promise<void>;\n}\n","import { Logger } from \"@walletconnect/logger\";\nimport { ICore } from \"./core.js\";\n\nexport abstract class IKeyChain {\n public abstract keychain: Map<string, string>;\n\n public abstract name: string;\n\n public abstract readonly context: string;\n\n constructor(\n public core: ICore,\n public logger: Logger,\n ) {}\n\n public abstract init(): Promise<void>;\n\n public abstract has(tag: string, opts?: any): boolean;\n\n public abstract set(tag: string, key: string, opts?: any): Promise<void>;\n\n public abstract get(tag: string, opts?: any): string;\n\n public abstract del(tag: string, opts?: any): Promise<void>;\n}\n","import { IEvents } from \"@walletconnect/events\";\nimport { Logger } from \"@walletconnect/logger\";\n\nimport { ICore } from \"./core.js\";\n\nexport declare namespace ExpirerTypes {\n interface Expiration {\n target: string;\n expiry: number;\n }\n\n interface Created {\n target: string;\n expiration: Expiration;\n }\n\n interface Deleted {\n target: string;\n expiration: Expiration;\n }\n\n interface Expired {\n target: string;\n expiration: Expiration;\n }\n}\n\nexport abstract class IExpirer extends IEvents {\n public abstract name: string;\n\n public abstract readonly context: string;\n\n public abstract readonly length: number;\n\n public abstract readonly keys: string[];\n\n public abstract readonly values: ExpirerTypes.Expiration[];\n\n constructor(\n public core: ICore,\n public logger: Logger,\n ) {\n super();\n }\n\n public abstract init(): Promise<void>;\n\n public abstract has(key: string | number): boolean;\n\n public abstract set(key: string | number, expiry: number): void;\n\n public abstract get(key: string | number): ExpirerTypes.Expiration;\n\n public abstract del(key: string | number): void;\n}\n","import {\n ErrorResponse,\n JsonRpcRequest,\n JsonRpcResponse,\n JsonRpcResult,\n JsonRpcError,\n} from \"@walletconnect/jsonrpc-types\";\nimport EventEmitter from \"events\";\nimport { Logger } from \"@walletconnect/logger\";\n\nimport { ICore, CoreTypes } from \"./core.js\";\nimport { IStore } from \"./store.js\";\n\nimport { RelayerTypes } from \"../core/relayer.js\";\n\nexport declare namespace PairingTypes {\n interface Struct {\n topic: string;\n expiry: number;\n relay: RelayerTypes.ProtocolOptions;\n active: boolean;\n peerMetadata?: CoreTypes.Metadata;\n methods?: string[];\n }\n}\n\nexport declare namespace PairingJsonRpcTypes {\n // -- core ------------------------------------------------------- //\n type DefaultResponse = true | ErrorResponse;\n\n type WcMethod = \"wc_pairingDelete\" | \"wc_pairingPing\";\n\n type Error = ErrorResponse;\n\n // -- requests --------------------------------------------------- //\n\n interface RequestParams {\n wc_pairingDelete: {\n code: number;\n message: string;\n };\n wc_pairingPing: Record<string, unknown>;\n }\n\n // -- responses -------------------------------------------------- //\n interface Results {\n wc_pairingDelete: true;\n wc_pairingPing: true;\n }\n\n // -- events ----------------------------------------------------- //\n interface EventCallback<T extends JsonRpcRequest | JsonRpcResponse> {\n topic: string;\n payload: T;\n }\n}\n\nexport type IPairingStore = IStore<string, PairingTypes.Struct>;\n\nexport abstract class IPairing {\n public abstract name: string;\n public abstract readonly context: string;\n public abstract events: EventEmitter;\n public abstract pairings: IPairingStore;\n\n constructor(\n public logger: Logger,\n public core: ICore,\n ) {}\n\n public abstract init(): Promise<void>;\n\n public abstract pair(params: {\n uri: string;\n activatePairing?: boolean;\n }): Promise<PairingTypes.Struct>;\n\n // for proposer to create inactive pairing\n public abstract create(params?: {\n methods?: string[];\n transportType?: RelayerTypes.SubscribeOptions[\"transportType\"];\n internal?: RelayerTypes.SubscribeOptions[\"internal\"];\n }): Promise<{ topic: string; uri: string }>;\n\n // for either to activate a previously created pairing\n public abstract activate(params: { topic: string }): Promise<void>;\n\n // for both to subscribe on methods requests\n public abstract register(params: { methods: string[] }): void;\n\n // for either to update the expiry of an existing pairing.\n public abstract updateExpiry(params: { topic: string; expiry: number }): Promise<void>;\n\n // for either to update the metadata of an existing pairing.\n public abstract updateMetadata(params: {\n topic: string;\n metadata: CoreTypes.Metadata;\n }): Promise<void>;\n\n // query pairings\n public abstract getPairings(): PairingTypes.Struct[];\n\n // for either to ping a peer\n public abstract ping(params: { topic: string }): Promise<void>;\n\n // for either peer to disconnect a pairing\n public abstract disconnect(params: { topic: string }): Promise<void>;\n\n public abstract formatUriFromPairing(pairing: PairingTypes.Struct): string;\n}\n\nexport interface IPairingPrivate {\n sendRequest<M extends PairingJsonRpcTypes.WcMethod>(\n topic: string,\n method: M,\n params: PairingJsonRpcTypes.RequestParams[M],\n ): Promise<number>;\n\n sendResult<M extends PairingJsonRpcTypes.WcMethod>(\n id: number,\n topic: string,\n result: PairingJsonRpcTypes.Results[M],\n ): Promise<void>;\n\n sendError(id: number, topic: string, error: PairingJsonRpcTypes.Error): Promise<void>;\n\n onRelayEventRequest(event: PairingJsonRpcTypes.EventCallback<JsonRpcRequest>): Promise<void>;\n\n onRelayEventResponse(event: PairingJsonRpcTypes.EventCallback<JsonRpcResponse>): Promise<void>;\n\n onPairingPingRequest(\n topic: string,\n payload: JsonRpcRequest<PairingJsonRpcTypes.RequestParams[\"wc_pairingPing\"]>,\n ): Promise<void>;\n\n onPairingPingResponse(\n topic: string,\n payload: JsonRpcResult<PairingJsonRpcTypes.Results[\"wc_pairingPing\"]> | JsonRpcError,\n ): void;\n\n onPairingDeleteRequest(\n topic: string,\n payload: JsonRpcRequest<PairingJsonRpcTypes.RequestParams[\"wc_pairingDelete\"]>,\n ): Promise<void>;\n\n onUnknownRpcMethodRequest(topic: string, payload: JsonRpcRequest): Promise<void>;\n\n onUnknownRpcMethodResponse(method: string): void;\n\n deletePairing(topic: string, expirerHasDeleted?: boolean): Promise<void>;\n}\n","import { Logger } from \"@walletconnect/logger\";\nimport { IKeyValueStorage } from \"@walletconnect/keyvaluestorage\";\nimport { ICore } from \"./core.js\";\n\nexport declare namespace Verify {\n export interface Context {\n verified: {\n origin: string;\n validation: \"UNKNOWN\" | \"VALID\" | \"INVALID\";\n verifyUrl: string;\n isScam?: boolean;\n };\n }\n}\n\nexport abstract class IVerify {\n public abstract readonly context: string;\n\n constructor(\n public core: ICore,\n public logger: Logger,\n public store: IKeyValueStorage,\n ) {}\n\n public abstract register(params: {\n id: string;\n decryptedId: string;\n }): Promise<string | undefined>;\n\n public abstract resolve(params: {\n attestationId?: string;\n hash?: string;\n encryptedId?: string;\n verifyUrl?: string;\n }): Promise<{ origin: string; isScam?: boolean }>;\n}\n","import { Logger } from \"@walletconnect/logger\";\n\nexport declare namespace EchoClientTypes {\n type RegisterDeviceTokenParams = {\n clientId: string;\n token: string;\n notificationType: \"fcm\" | \"apns\" | \"apns-sandbox\" | \"noop\";\n enableEncrypted?: boolean;\n };\n}\nexport abstract class IEchoClient {\n public abstract readonly context: string;\n constructor(\n public projectId: string,\n public logger: Logger,\n ) {}\n\n public abstract registerDeviceToken(\n params: EchoClientTypes.RegisterDeviceTokenParams,\n ): Promise<void>;\n}\n","import { Logger } from \"@walletconnect/logger\";\nimport { ICore } from \"./core.js\";\n\nexport declare namespace EventClientTypes {\n export interface Event {\n eventId: string;\n bundleId: string;\n timestamp: number;\n props: Props;\n addTrace: (trace: string) => void;\n setError: (error: string) => void;\n }\n\n export interface Props {\n event: string;\n type: string;\n properties: Properties;\n }\n\n export interface Properties {\n topic: string;\n trace: Trace;\n }\n\n export type Trace = string[];\n}\n\nexport abstract class IEventClient {\n public abstract readonly context: string;\n\n constructor(\n public core: ICore,\n public logger: Logger,\n public telemetryEnabled: boolean,\n ) {}\n\n public abstract init(): Promise<void>;\n\n public abstract createEvent(params: {\n event?: \"ERROR\";\n type?: string;\n properties: {\n topic: string;\n trace: EventClientTypes.Trace;\n };\n }): EventClientTypes.Event;\n\n public abstract getEvent(params: {\n eventId?: string;\n topic?: string;\n }): EventClientTypes.Event | undefined;\n\n public abstract deleteEvent(params: { eventId: string }): void;\n}\n","import { Logger } from \"@walletconnect/logger\";\nimport EventEmmiter from \"events\";\nimport { CoreTypes, ICore } from \"../core/core.js\";\nimport { IEngine } from \"./engine.js\";\nimport { IPendingRequest } from \"./pendingRequest.js\";\nimport { IProposal, ProposalTypes } from \"./proposal.js\";\nimport { ISession, SessionTypes } from \"./session.js\";\nimport { Verify } from \"../core/verify.js\";\nimport { IAuth, AuthTypes } from \"./auth.js\";\nimport { RelayerTypes } from \"../core/relayer.js\";\n\nexport declare namespace SignClientTypes {\n type Event =\n | \"session_proposal\"\n | \"session_update\"\n | \"session_extend\"\n | \"session_ping\"\n | \"session_delete\"\n | \"session_expire\"\n | \"session_request\"\n | \"session_request_sent\"\n | \"session_event\"\n | \"session_authenticate\"\n | \"proposal_expire\"\n | \"session_request_expire\"\n | \"session_connect\";\n\n interface BaseEventArgs<T = unknown> {\n id: number;\n topic: string;\n params: T;\n }\n interface EventArguments {\n session_proposal: {\n verifyContext: Verify.Context;\n } & Omit<BaseEventArgs<ProposalTypes.Struct>, \"topic\">;\n session_update: BaseEventArgs<{ namespaces: SessionTypes.Namespaces }>;\n session_extend: Omit<BaseEventArgs, \"params\">;\n session_ping: Omit<BaseEventArgs, \"params\">;\n session_delete: Omit<BaseEventArgs, \"params\">;\n session_expire: { topic: string };\n session_request: {\n verifyContext: Verify.Context;\n } & BaseEventArgs<{\n request: { method: string; params: any; expiryTimestamp?: number };\n chainId: string;\n }>;\n session_request_sent: {\n request: { method: string; params: any };\n topic: string;\n chainId: string;\n id: number;\n };\n session_event: BaseEventArgs<{\n event: { name: string; data: any };\n chainId: string;\n }>;\n session_authenticate: {\n verifyContext: Verify.Context;\n transportType?: RelayerTypes.TransportType;\n } & BaseEventArgs<AuthTypes.AuthRequestEventArgs>;\n proposal_expire: { id: number };\n session_request_expire: { id: number };\n session_connect: { session: SessionTypes.Struct };\n }\n\n type Metadata = CoreTypes.Metadata;\n\n type SignConfig = {\n /**\n * Disables the sequential processing of session requests.\n *\n * WARNING: The WalletConnect system has an at-least-once delivery guarantee,\n * which means the same message may be delivered multiple times.\n *\n * When this option is enabled, you MUST implement your own message\n * deduplication logic to prevent processing duplicate requests.\n * This is especially important during the first second after\n * initialization when duplicate events are more likely to occur.\n *\n * @default false\n */\n disableRequestQueue?: boolean;\n };\n\n interface Options extends CoreTypes.Options {\n core?: ICore;\n metadata?: Metadata;\n signConfig?: SignConfig;\n }\n}\n\nexport abstract class ISignClientEvents extends EventEmmiter {\n constructor() {\n super();\n }\n\n public abstract emit: <E extends SignClientTypes.Event>(\n event: E,\n args: SignClientTypes.EventArguments[E],\n ) => boolean;\n\n public abstract on: <E extends SignClientTypes.Event>(\n event: E,\n listener: (args: SignClientTypes.EventArguments[E]) => any,\n ) => this;\n\n public abstract once: <E extends SignClientTypes.Event>(\n event: E,\n listener: (args: SignClientTypes.EventArguments[E]) => any,\n ) => this;\n\n public abstract off: <E extends SignClientTypes.Event>(\n event: E,\n listener: (args: SignClientTypes.EventArguments[E]) => any,\n ) => this;\n\n public abstract removeListener: <E extends SignClientTypes.Event>(\n event: E,\n listener: (args: SignClientTypes.EventArguments[E]) => any,\n ) => this;\n\n public abstract removeAllListeners: <E extends SignClientTypes.Event>(event: E) => this;\n}\n\nexport abstract class ISignClient {\n public readonly protocol = \"wc\";\n public readonly version = 2;\n\n public abstract readonly name: string;\n public abstract readonly context: string;\n public abstract readonly metadata: SignClientTypes.Metadata;\n\n public abstract core: ICore;\n public abstract logger: Logger;\n public abstract events: ISignClientEvents;\n public abstract engine: IEngine;\n public abstract session: ISession;\n public abstract proposal: IProposal;\n public abstract pendingRequest: IPendingRequest;\n public abstract auth: IAuth;\n public abstract signConfig?: SignClientTypes.SignConfig;\n\n constructor(public opts?: SignClientTypes.Options) {}\n\n public abstract connect: IEngine[\"connect\"];\n public abstract pair: IEngine[\"pair\"];\n public abstract approve: IEngine[\"approve\"];\n public abstract reject: IEngine[\"reject\"];\n public abstract update: IEngine[\"update\"];\n public abstract extend: IEngine[\"extend\"];\n public abstract request: IEngine[\"request\"];\n public abstract respond: IEngine[\"respond\"];\n public abstract ping: IEngine[\"ping\"];\n public abstract emit: IEngine[\"emit\"];\n public abstract disconnect: IEngine[\"disconnect\"];\n public abstract find: IEngine[\"find\"];\n public abstract getPendingSessionRequests: IEngine[\"getPendingSessionRequests\"];\n public abstract authenticate: IEngine[\"authenticate\"];\n public abstract formatAuthMessage: IEngine[\"formatAuthMessage\"];\n public abstract approveSessionAuthenticate: IEngine[\"approveSessionAuthenticate\"];\n public abstract rejectSessionAuthenticate: IEngine[\"rejectSessionAuthenticate\"];\n}\n","import { EventEmitter } from \"events\";\nimport {\n JsonRpcResponse,\n JsonRpcRequest,\n ErrorResponse,\n JsonRpcResult,\n JsonRpcError,\n} from \"@walletconnect/jsonrpc-types\";\nimport { ISignClient } from \"./client.js\";\nimport { RelayerTypes } from \"../core/relayer.js\";\nimport { SessionTypes } from \"./session.js\";\nimport { ProposalTypes } from \"./proposal.js\";\nimport { PairingTypes } from \"../core/pairing.js\";\nimport { JsonRpcTypes } from \"./jsonrpc.js\";\nimport { PendingRequestTypes } from \"./pendingRequest.js\";\nimport { AuthTypes } from \"./auth.js\";\nimport { CryptoTypes } from \"../core/crypto.js\";\n\nexport declare namespace EngineTypes {\n type Event =\n | \"session_connect\"\n | \"session_approve\"\n | \"session_update\"\n | \"session_extend\"\n | \"session_ping\"\n | \"pairing_ping\"\n | \"session_request\";\n\n interface EventArguments {\n session_connect: {\n error?: ErrorResponse;\n session?: SessionTypes.Struct;\n };\n session_approve: { error?: ErrorResponse };\n session_update: { error?: ErrorResponse };\n session_extend: { error?: ErrorResponse };\n session_ping: { error?: ErrorResponse };\n pairing_ping: { error?: ErrorResponse };\n session_request: { error?: ErrorResponse; result?: any };\n }\n\n interface UriParameters {\n protocol: string;\n version: number;\n topic: string;\n symKey: string;\n relay: RelayerTypes.ProtocolOptions;\n methods?: string[];\n expiryTimestamp?: number;\n }\n\n interface EventCallback<T extends JsonRpcRequest | JsonRpcResponse> {\n topic: string;\n payload: T;\n transportType?: RelayerTypes.MessageEvent[\"transportType\"];\n attestation?: string;\n encryptedId?: string;\n }\n\n type Hex = `0x${string}`;\n\n interface PaymentOption {\n asset: string;\n amount: Hex;\n recipient: string;\n }\n\n interface WalletPayParams {\n version: string;\n orderId?: string;\n acceptedPayments: PaymentOption[];\n expiry: number;\n }\n\n interface WalletPayResult {\n version: string;\n orderId?: string;\n txid: string;\n recipient: string;\n asset: string;\n amount: Hex;\n }\n\n interface ConnectParams {\n /**\n * @deprecated Use `optionalNamespaces` instead.\n */\n requiredNamespaces?: ProposalTypes.RequiredNamespaces;\n optionalNamespaces?: ProposalTypes.OptionalNamespaces;\n sessionProperties?: ProposalTypes.SessionProperties;\n scopedProperties?: ProposalTypes.ScopedProperties;\n pairingTopic?: string;\n relays?: RelayerTypes.ProtocolOptions[];\n /**\n * @experimental - This feature could change in the next releases. Use with caution.\n */\n authentication?: AuthTypes.AuthenticateRequestParams[];\n /**\n * @experimental - This feature could change in the next releases. Use with caution.\n */\n walletPay?: WalletPayParams;\n }\n\n interface PairParams {\n uri: string;\n }\n\n type ProposalRequestsResponses = {\n authentication?: AuthTypes.Cacao[];\n walletPay?: WalletPayResult[];\n };\n\n interface ApproveParams {\n id: number;\n namespaces: SessionTypes.Namespaces;\n sessionProperties?: ProposalTypes.SessionProperties;\n scopedProperties?: ProposalTypes.ScopedProperties;\n sessionConfig?: SessionTypes.SessionConfig;\n relayProtocol?: string;\n proposalRequestsResponses?: ProposalRequestsResponses;\n }\n\n interface RejectParams {\n id: number;\n reason: ErrorResponse;\n }\n\n interface UpdateParams {\n topic: string;\n namespaces: SessionTypes.Namespaces;\n }\n\n interface ExtendParams {\n topic: string;\n }\n\n interface RequestParams {\n topic: string;\n request: {\n method: string;\n params: any;\n };\n chainId: string;\n expiry?: number;\n }\n\n interface RespondParams {\n topic: string;\n response: JsonRpcResponse;\n }\n\n interface EmitParams {\n topic: string;\n event: {\n name: string;\n data: any;\n };\n chainId: string;\n }\n\n interface PingParams {\n topic: string;\n }\n\n interface DisconnectParams {\n topic: string;\n reason: ErrorResponse;\n }\n\n interface FindParams {\n requiredNamespaces: ProposalTypes.RequiredNamespaces;\n }\n\n type AcknowledgedPromise = Promise<{ acknowledged: () => Promise<void> }>;\n\n type SessionAuthenticateResponsePromise = {\n uri: string;\n response: () => Promise<AuthTypes.AuthenticateResponseResult>;\n };\n\n interface RpcOpts {\n req: RelayerTypes.PublishOptions & {\n ttl: number;\n };\n res: RelayerTypes.PublishOptions & {\n ttl: number;\n };\n reject?: RelayerTypes.PublishOptions & {\n ttl: number;\n };\n autoReject?: RelayerTypes.PublishOptions & {\n ttl: number;\n };\n }\n\n type RpcOptsMap = Record<JsonRpcTypes.WcMethod, RpcOpts>;\n\n type EngineQueue<T> = {\n state: \"IDLE\" | \"ACTIVE\";\n queue: T[];\n };\n}\n\nexport abstract class IEngineEvents extends EventEmitter {\n constructor() {\n super();\n }\n\n public abstract emit: <E extends EngineTypes.Event>(\n event: string,\n args: EngineTypes.EventArguments[E],\n ) => boolean;\n\n public abstract once: <E extends EngineTypes.Event>(\n event: string,\n listener: (args: EngineTypes.EventArguments[E]) => any,\n ) => this;\n}\n\n// -- private method interface -------------------------------------- //\n\nexport interface EnginePrivate {\n sendRequest<M extends JsonRpcTypes.WcMethod>(args: {\n topic: string;\n method: M;\n params: JsonRpcTypes.RequestParams[M];\n expiry?: number;\n relayRpcId?: number;\n clientRpcId?: number;\n throwOnFailedPublish?: boolean;\n appLink?: string;\n tvf?: RelayerTypes.ITVF;\n publishOpts?: RelayerTypes.PublishOptions;\n }): Promise<number>;\n\n sendBatchRequest<M extends JsonRpcTypes.WcMethod>(args: {\n sharedPayload: Record<string, any>;\n requests: Record<\n string,\n {\n topic: string;\n method: M;\n params: JsonRpcTypes.RequestParams[M];\n expiry?: number;\n relayRpcId?: number;\n clientRpcId?: number;\n }\n >;\n throwOnFailedPublish?: boolean;\n appLink?: string;\n tvf?: RelayerTypes.ITVF;\n publishOpts?: RelayerTypes.PublishOptions;\n }): Promise<number>;\n\n sendResult<M extends JsonRpcTypes.WcMethod>(args: {\n id: number;\n topic: string;\n result: JsonRpcTypes.Results[M];\n throwOnFailedPublish?: boolean;\n encodeOpts?: CryptoTypes.EncodeOptions;\n appLink?: string;\n publishOpts?: RelayerTypes.PublishOptions;\n }): Promise<void>;\n\n sendError(params: {\n id: number;\n topic: string;\n error: JsonRpcTypes.Error;\n encodeOpts?: CryptoTypes.EncodeOptions;\n rpcOpts?: RelayerTypes.PublishOptions;\n appLink?: string;\n publishOpts?: RelayerTypes.PublishOptions;\n }): Promise<void>;\n\n sendApproveSession(params: {\n sessionTopic: string;\n proposal: ProposalTypes.Struct;\n pairingProposalResponse: JsonRpcTypes.Results[JsonRpcTypes.WcMethod];\n sessionSettleRequest: JsonRpcTypes.RequestParams[JsonRpcTypes.WcMethod];\n publishOpts: RelayerTypes.PublishOptions;\n }): Promise<void>;\n\n sendProposeSession(params: {\n proposal: ProposalTypes.Struct;\n publishOpts: RelayerTypes.PublishOptions;\n }): Promise<void>;\n\n onRelayEventRequest(event: EngineTypes.EventCallback<JsonRpcRequest>): Promise<void>;\n\n onRelayEventResponse(event: EngineTypes.EventCallback<JsonRpcResponse>): Promise<void>;\n\n onRelayEventUnknownPayload(event: EngineTypes.EventCallback<any>): Promise<void>;\n\n shouldIgnorePairingRequest(params: { topic: string; requestMethod: string }): boolean;\n\n deleteSession(params: {\n topic: string;\n expirerHasDeleted?: boolean;\n id?: number;\n emitEvent?: boolean;\n }): Promise<void>;\n\n deleteProposal(id: number, expirerHasDeleted?: boolean): Promise<void>;\n\n setExpiry(topic: string, expiry: number): Promise<void>;\n\n setProposal(id: number, proposal: ProposalTypes.Struct): Promise<void>;\n\n setAuthRequest(\n id: number,\n params: {\n request: AuthTypes.SessionAuthenticateRequest;\n pairingTopic: string;\n transportType?: RelayerTypes.MessageEvent[\"transportType\"];\n },\n ): Promise<void>;\n\n setPendingSessionRequest(pendingRequest: PendingRequestTypes.Struct): Promise<void>;\n\n deletePendingSessionRequest(\n id: number,\n reason: ErrorResponse,\n expirerHasDeleted?: boolean,\n ): Promise<void>;\n\n deletePendingAuthRequest(\n id: number,\n reason: ErrorResponse,\n expirerHasDeleted?: boolean,\n ): Promise<void>;\n\n cleanupDuplicatePairings(session: SessionTypes.Struct): Promise<void>;\n\n cleanup(): Promise<void>;\n\n onSessionProposeRequest(params: {\n topic: string;\n payload: JsonRpcRequest<JsonRpcTypes.RequestParams[\"wc_sessionPropose\"]>;\n attestation?: string;\n encryptedId?: string;\n }): Promise<void>;\n\n onSessionProposeResponse(\n topic: string,\n payload: JsonRpcResult<JsonRpcTypes.Results[\"wc_sessionPropose\"]> | JsonRpcError,\n transportType?: RelayerTypes.MessageEvent[\"transportType\"],\n ): Promise<void>;\n\n onSessionSettleRequest(\n topic: string,\n payload: JsonRpcRequest<JsonRpcTypes.RequestParams[\"wc_sessionSettle\"]>,\n ): Promise<void>;\n\n onSessionSettleResponse(\n topic: string,\n payload: JsonRpcResult<JsonRpcTypes.Results[\"wc_sessionSettle\"]> | JsonRpcError,\n ): Promise<void>;\n\n onSessionUpdateRequest(\n topic: string,\n payload: JsonRpcRequest<JsonRpcTypes.RequestParams[\"wc_sessionUpdate\"]>,\n ): Promise<void>;\n\n onSessionUpdateResponse(\n topic: string,\n payload: JsonRpcResult<JsonRpcTypes.Results[\"wc_sessionUpdate\"]> | JsonRpcError,\n ): void;\n\n onSessionExtendRequest(\n topic: string,\n payload: JsonRpcRequest<JsonRpcTypes.RequestParams[\"wc_sessionExtend\"]>,\n ): Promise<void>;\n\n onSessionExtendResponse(\n topic: string,\n payload: JsonRpcResult<JsonRpcTypes.Results[\"wc_sessionExtend\"]> | JsonRpcError,\n ): void;\n\n onSessionPingRequest(\n topic: string,\n payload: JsonRpcRequest<JsonRpcTypes.RequestParams[\"wc_sessionPing\"]>,\n ): Promise<void>;\n\n onSessionPingResponse(\n topic: string,\n payload: JsonRpcResult<JsonRpcTypes.Results[\"wc_sessionPing\"]> | JsonRpcError,\n ): void;\n\n onSessionDeleteRequest(\n topic: string,\n payload: JsonRpcRequest<JsonRpcTypes.RequestParams[\"wc_sessionDelete\"]>,\n ): Promise<void>;\n\n onSessionRequest(params: {\n topic: string;\n payload: JsonRpcRequest<JsonRpcTypes.RequestParams[\"wc_sessionRequest\"]>;\n transportType?: RelayerTypes.MessageEvent[\"transportType\"];\n attestation?: string;\n encryptedId?: string;\n }): Promise<void>;\n\n onSessionRequestResponse(\n topic: string,\n payload: JsonRpcResult<JsonRpcTypes.Results[\"wc_sessionRequest\"]> | JsonRpcError,\n ): void;\n\n onSessionEventRequest(\n topic: string,\n payload: JsonRpcRequest<JsonRpcTypes.RequestParams[\"wc_sessionEvent\"]>,\n ): Promise<void>;\n\n onSessionAuthenticateRequest(params: {\n topic: string;\n payload: JsonRpcRequest<JsonRpcTypes.RequestParams[\"wc_sessionAuthenticate\"]>;\n transportType?: RelayerTypes.MessageEvent[\"transportType\"];\n attestation?: string;\n encryptedId?: string;\n }): Promise<void>;\n\n onSessionAuthenticateResponse(\n topic: string,\n payload: JsonRpcResult<JsonRpcTypes.Results[\"wc_sessionAuthenticate\"]> | JsonRpcError,\n ): void;\n\n // -- Validators ---------------------------------------------------- //\n isValidConnect(params: EngineTypes.ConnectParams): Promise<void>;\n\n isValidSessionSettleRequest(params: JsonRpcTypes.RequestParams[\"wc_sessionSettle\"]): void;\n\n isValidApprove(params: EngineTypes.ApproveParams): Promise<void>;\n\n isValidReject(params: EngineTypes.RejectParams): Promise<void>;\n\n isValidUpdate(params: EngineTypes.UpdateParams): Promise<void>;\n\n isValidExtend(params: EngineTypes.ExtendParams): Promise<void>;\n\n isValidRequest(params: EngineTypes.RequestParams): Promise<void>;\n\n isValidRespond(params: EngineTypes.RespondParams): Promise<void>;\n\n isValidPing(params: EngineTypes.PingParams): Promise<void>;\n\n isValidEmit(params: EngineTypes.EmitParams): Promise<void>;\n\n isValidDisconnect(params: EngineTypes.DisconnectParams): Promise<void>;\n}\n\n// -- class interface ----------------------------------------------- //\n\nexport abstract class IEngine {\n constructor(public client: ISignClient) {}\n\n public abstract init(): Promise<void>;\n\n public abstract connect(\n params: EngineTypes.ConnectParams,\n ): Promise<{ uri?: string; approval: () => Promise<SessionTypes.Struct> }>;\n\n public abstract pair(params: EngineTypes.PairParams): Promise<PairingTypes.Struct>;\n\n public abstract approve(\n params: EngineTypes.ApproveParams,\n ): Promise<{ topic: string; acknowledged: () => Promise<SessionTypes.Struct> }>;\n\n public abstract reject(params: EngineTypes.RejectParams): Promise<void>;\n\n public abstract update(params: EngineTypes.UpdateParams): EngineTypes.AcknowledgedPromise;\n\n public abstract extend(params: EngineTypes.ExtendParams): EngineTypes.AcknowledgedPromise;\n\n public abstract request<T>(params: EngineTypes.RequestParams): Promise<T>;\n\n public abstract respond(params: EngineTypes.RespondParams): Promise<void>;\n\n public abstract emit(params: EngineTypes.EmitParams): Promise<void>;\n\n public abstract ping(params: EngineTypes.PingParams): Promise<void>;\n\n public abstract disconnect(params: EngineTypes.DisconnectParams): Promise<void>;\n\n public abstract find: (params: EngineTypes.FindParams) => SessionTypes.Struct[];\n\n public abstract getPendingSessionRequests: () => PendingRequestTypes.Struct[];\n\n public abstract authenticate: (\n params: AuthTypes.SessionAuthenticateParams,\n walletUniversalLink?: string,\n ) => Promise<EngineTypes.SessionAuthenticateResponsePromise>;\n\n public abstract approveSessionAuthenticate: (\n params: AuthTypes.ApproveSessionAuthenticateParams,\n ) => Promise<{ session: SessionTypes.Struct | undefined }>;\n\n public abstract formatAuthMessage: (params: {\n request: AuthTypes.BaseAuthRequestParams;\n iss: string;\n }) => string;\n\n public abstract rejectSessionAuthenticate(params: EngineTypes.RejectParams): Promise<void>;\n\n /**\n * no longer used as the client initializes instantly without waiting to connect+subscribe\n * @deprecated\n */\n public abstract processRelayMessageCache(): void;\n}\n"],"names":["IEvents","opts","__publicField","core","logger","keychain","relayer","name","storagePrefix","store","projectId","telemetryEnabled","EventEmmiter","EventEmitter","client"],"mappings":";;;;;;;;;;;0KA0CO,MAAe,cAAcA,cAAQ,CAuB1C,WAAmBC,CAAAA,CAAAA,CAA0B,CAC3C,KAAA,GADiB,IAAAA,CAAAA,IAAAA,CAAAA,CAAAA,CAtBnBC,IAAA,IAAgB,CAAA,UAAA,CAAW,MAC3BA,GAAA,CAAA,IAAA,CAAgB,SAAU,CAAA,CAAA,EAuB1B,CAUF;;ACPsB,MAAA,OAAQ,CAS5B,WAAA,CACSC,CACAC,CAAAA,CAAAA,CAEPC,CACA,CAAA,CAJO,IAAAF,CAAAA,IAAAA,CAAAA,CAAAA,CACA,IAAAC,CAAAA,MAAAA,CAAAA,EAGN,CAwCL;;wKClGO,MAAe,wBAAwBJ,cAAQ,CAapD,WACSG,CAAAA,CAAAA,CACAC,CACP,CAAA,CACA,OAHO,CAAA,IAAA,CAAA,IAAA,CAAAD,EACA,IAAAC,CAAAA,MAAAA,CAAAA,CAAAA,CAdTF,EAAA,IAAO,CAAA,SAAA,CAAU,IAAI,GAAA,EAiBrB,CAaF;;ACpDsB,MAAA,eAAgB,CAQpC,WAAA,CACSE,CACAD,CAAAA,CAAAA,CACP,CAFO,IAAAC,CAAAA,MAAAA,CAAAA,CAAAA,CACA,IAAAD,CAAAA,IAAAA,CAAAA,EACN,CAmBL;;ACtBsB,MAAA,UAAA,SAAmBH,cAAQ,CAK/C,WAAA,CACSM,CACAF,CAAAA,CAAAA,CACP,CACA,KAAM,EAAA,CAHC,aAAAE,CACA,CAAA,IAAA,CAAA,MAAA,CAAAF,EAGT,CAYF;;ACkEO,MAAe,QAAiBJ,SAAAA,cAAQ,CA2B7C,WAAA,CAEEC,CACA,CAAA,CACA,KAAM,GACR,CA6BF;;AC9JO,MAAe,MAAmB,CAWvC,WACSE,CAAAA,CAAAA,CACAC,EACAG,CAEPC,CAAAA,CAAAA,CACA,CALO,IAAA,CAAA,IAAA,CAAAL,CACA,CAAA,IAAA,CAAA,MAAA,CAAAC,CACA,CAAA,IAAA,CAAA,IAAA,CAAAG,EAGN,CAaL;;wKCRsB,MAAA,mBAAoB,CAAnC,WAAA,EAAA,CACLL,CAAA,CAAA,IAAA,CAAO,KAAM,CAAA,IAAI,GAanB,EAAA,CAAA,CAEsB,MAAA,WAAA,SAAoBF,cAAQ,CAqBhD,WACSM,CAAAA,CAAAA,CACAF,CACP,CAAA,CACA,KAAM,EAAA,CAHC,IAAAE,CAAAA,OAAAA,CAAAA,CAAAA,CACA,IAAAF,CAAAA,MAAAA,CAAAA,EAGT,CAkBF;;ACnFsB,MAAA,SAAU,CAO9B,WAAA,CACSD,CACAC,CAAAA,CAAAA,CACP,CAFO,IAAAD,CAAAA,IAAAA,CAAAA,CAAAA,CACA,IAAAC,CAAAA,MAAAA,CAAAA,EACN,CAWL;;ACGsB,MAAA,QAAA,SAAiBJ,cAAQ,CAW7C,WAAA,CACSG,CACAC,CAAAA,CAAAA,CACP,CACA,KAAM,EAAA,CAHC,UAAAD,CACA,CAAA,IAAA,CAAA,MAAA,CAAAC,EAGT,CAWF;;ACKsB,MAAA,QAAS,CAM7B,WAAA,CACSA,CACAD,CAAAA,CAAAA,CACP,CAFO,IAAAC,CAAAA,MAAAA,CAAAA,CAAAA,CACA,IAAAD,CAAAA,IAAAA,CAAAA,EACN,CAyCL;;AC9FO,MAAe,OAAQ,CAG5B,WACSA,CAAAA,CAAAA,CACAC,CACAK,CAAAA,CAAAA,CACP,CAHO,IAAA,CAAA,IAAA,CAAAN,CACA,CAAA,IAAA,CAAA,MAAA,CAAAC,CACA,CAAA,IAAA,CAAA,KAAA,CAAAK,EACN,CAaL;;ACzBsB,MAAA,WAAY,CAEhC,WAAA,CACSC,CACAN,CAAAA,CAAAA,CACP,CAFO,IAAAM,CAAAA,SAAAA,CAAAA,CAAAA,CACA,IAAAN,CAAAA,MAAAA,CAAAA,EACN,CAKL;;ACOO,MAAe,YAAa,CAGjC,WACSD,CAAAA,CAAAA,CACAC,CACAO,CAAAA,CAAAA,CACP,CAHO,IAAA,CAAA,IAAA,CAAAR,CACA,CAAA,IAAA,CAAA,MAAA,CAAAC,CACA,CAAA,IAAA,CAAA,gBAAA,CAAAO,EACN,CAmBL;;ACpDA,IAAA,CAAA,CAAA,MAAA,CAAA,cAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAA,YAAA,CAAA,CAAA,CAAA,CAAA,QAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAA,CAAA,CAAA,CAAA,CAAA,OAAA,CAAA,EAAA,QAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CA2FsB,MAAA,iBAAA,SAA0BC,qBAAa,CAC3D,WAAc,EAAA,CACZ,KAAM,GACR,CA4BF,CAEsB,MAAA,WAAY,CAkBhC,WAAA,CAAmBX,CAAgC,CAAA,CAAhC,IAAAA,CAAAA,IAAAA,CAAAA,CAAAA,CAjBnBC,CAAA,CAAA,IAAA,CAAgB,UAAW,CAAA,IAAA,CAAA,CAC3BA,CAAA,CAAA,IAAA,CAAgB,SAAU,CAAA,CAAA,EAgB0B,CAmBtD;;ACyCO,MAAe,sBAAsBW,gBAAa,CACvD,aAAc,CACZ,KAAA,GACF,CAWF,OAyOsB,OAAQ,CAC5B,YAAmBC,CAAqB,CAAA,CAArB,IAAAA,CAAAA,MAAAA,CAAAA,EAAsB,CAuD3C;;;;;;;;;;;;;;;;;;;;;;"}