{"version":3,"file":"index.cjs","sources":["../src/caip.ts","../src/errors.ts","../src/misc.ts","../src/signatures.ts","../src/cacao.ts","../src/crypto.ts","../src/relay.ts","../src/uri.ts","../src/namespaces.ts","../src/validators.ts","../src/network.ts","../src/memoryStore.ts","../src/polkadot.ts","../src/logger.ts"],"sourcesContent":["import { SessionTypes, ProposalTypes } from \"@walletconnect/types\";\n\ninterface ChainIdParams {\n  namespace: string;\n  reference: string;\n}\n\ninterface AccountIdParams extends ChainIdParams {\n  address: string;\n}\n\nconst CAIP_DELIMITER = \":\";\n\nexport function parseChainId(chain: string): ChainIdParams {\n  const [namespace, reference] = chain.split(CAIP_DELIMITER);\n  return { namespace, reference };\n}\n\nexport function formatChainId(params: ChainIdParams): string {\n  const { namespace, reference } = params;\n  return [namespace, reference].join(CAIP_DELIMITER);\n}\n\nexport function parseAccountId(account: string): AccountIdParams {\n  const [namespace, reference, address] = account.split(CAIP_DELIMITER);\n  return { namespace, reference, address };\n}\n\nexport function formatAccountId(params: AccountIdParams): string {\n  const { namespace, reference, address } = params;\n  return [namespace, reference, address].join(CAIP_DELIMITER);\n}\n\nexport function getUniqueValues(array: string[], parser: (str: string) => string): string[] {\n  const unique: string[] = [];\n  array.forEach((str) => {\n    const value = parser(str);\n    if (!unique.includes(value)) unique.push(value);\n  });\n  return unique;\n}\n\nexport function getAddressFromAccount(account: string) {\n  const { address } = parseAccountId(account);\n  return address;\n}\n\nexport function getChainFromAccount(account: string) {\n  const { namespace, reference } = parseAccountId(account);\n  const chain = formatChainId({ namespace, reference });\n  return chain;\n}\n\nexport function formatAccountWithChain(address: string, chain: string) {\n  const { namespace, reference } = parseChainId(chain);\n  const account = formatAccountId({ namespace, reference, address });\n  return account;\n}\n\nexport function getAddressesFromAccounts(accounts: string[]) {\n  return getUniqueValues(accounts, getAddressFromAccount);\n}\n\nexport function getChainsFromAccounts(accounts: string[]) {\n  return getUniqueValues(accounts, getChainFromAccount);\n}\n\nexport function getAccountsFromNamespaces(\n  namespaces: SessionTypes.Namespaces,\n  keys: string[] = [],\n): string[] {\n  const accounts: string[] = [];\n  Object.keys(namespaces).forEach((key) => {\n    if (keys.length && !keys.includes(key)) return;\n    const ns = namespaces[key];\n    accounts.push(...ns.accounts);\n  });\n  return accounts;\n}\n\nexport function getChainsFromNamespaces(\n  namespaces: SessionTypes.Namespaces,\n  keys: string[] = [],\n): string[] {\n  const chains: string[] = [];\n  Object.keys(namespaces).forEach((key) => {\n    if (keys.length && !keys.includes(key)) return;\n    const ns = namespaces[key];\n    chains.push(...getChainsFromAccounts(ns.accounts));\n  });\n  return chains;\n}\n\nexport function getChainsFromRequiredNamespaces(\n  requiredNamespaces: ProposalTypes.RequiredNamespaces,\n  keys: string[] = [],\n): string[] {\n  const chains: string[] = [];\n  Object.keys(requiredNamespaces).forEach((key) => {\n    if (keys.length && !keys.includes(key)) return;\n    const ns = requiredNamespaces[key];\n    chains.push(...getChainsFromNamespace(key, ns));\n  });\n  return chains;\n}\n\nexport function getChainsFromNamespace(\n  namespace: string,\n  namespaceProps: ProposalTypes.BaseRequiredNamespace,\n) {\n  // check if chainId is provided in the key as `eip155:1` or in the namespace as chains[]\n  return namespace.includes(\":\") ? [namespace] : namespaceProps.chains || [];\n}\n","/**\n * Types\n */\nexport type SdkErrorKey = keyof typeof SDK_ERRORS;\nexport type InternalErrorKey = keyof typeof INTERNAL_ERRORS;\n\n/**\n * Constants\n */\nexport const SDK_ERRORS = {\n  /* ----- INVALID (1xxx) ----- */\n  INVALID_METHOD: {\n    message: \"Invalid method.\",\n    code: 1001,\n  },\n  INVALID_EVENT: {\n    message: \"Invalid event.\",\n    code: 1002,\n  },\n  INVALID_UPDATE_REQUEST: {\n    message: \"Invalid update request.\",\n    code: 1003,\n  },\n  INVALID_EXTEND_REQUEST: {\n    message: \"Invalid extend request.\",\n    code: 1004,\n  },\n  INVALID_SESSION_SETTLE_REQUEST: {\n    message: \"Invalid session settle request.\",\n    code: 1005,\n  },\n  /* ----- UNAUTHORIZED (3xxx) ----- */\n  UNAUTHORIZED_METHOD: {\n    message: \"Unauthorized method.\",\n    code: 3001,\n  },\n  UNAUTHORIZED_EVENT: {\n    message: \"Unauthorized event.\",\n    code: 3002,\n  },\n  UNAUTHORIZED_UPDATE_REQUEST: {\n    message: \"Unauthorized update request.\",\n    code: 3003,\n  },\n  UNAUTHORIZED_EXTEND_REQUEST: {\n    message: \"Unauthorized extend request.\",\n    code: 3004,\n  },\n  /* ----- REJECTED (5xxx) ----- */\n  USER_REJECTED: {\n    message: \"User rejected.\",\n    code: 5000,\n  },\n  USER_REJECTED_CHAINS: {\n    message: \"User rejected chains.\",\n    code: 5001,\n  },\n  USER_REJECTED_METHODS: {\n    message: \"User rejected methods.\",\n    code: 5002,\n  },\n  USER_REJECTED_EVENTS: {\n    message: \"User rejected events.\",\n    code: 5003,\n  },\n  UNSUPPORTED_CHAINS: {\n    message: \"Unsupported chains.\",\n    code: 5100,\n  },\n  UNSUPPORTED_METHODS: {\n    message: \"Unsupported methods.\",\n    code: 5101,\n  },\n  UNSUPPORTED_EVENTS: {\n    message: \"Unsupported events.\",\n    code: 5102,\n  },\n  UNSUPPORTED_ACCOUNTS: {\n    message: \"Unsupported accounts.\",\n    code: 5103,\n  },\n  UNSUPPORTED_NAMESPACE_KEY: {\n    message: \"Unsupported namespace key.\",\n    code: 5104,\n  },\n  /* ----- REASON (6xxx) ----- */\n  USER_DISCONNECTED: {\n    message: \"User disconnected.\",\n    code: 6000,\n  },\n  /* ----- FAILURE (7xxx) ----- */\n  SESSION_SETTLEMENT_FAILED: {\n    message: \"Session settlement failed.\",\n    code: 7000,\n  },\n  /* ----- PAIRING (10xxx) ----- */\n  WC_METHOD_UNSUPPORTED: {\n    message: \"Unsupported wc_ method.\",\n    code: 10001,\n  },\n};\n\nexport const INTERNAL_ERRORS = {\n  NOT_INITIALIZED: {\n    message: \"Not initialized.\",\n    code: 1,\n  },\n  NO_MATCHING_KEY: {\n    message: \"No matching key.\",\n    code: 2,\n  },\n  RESTORE_WILL_OVERRIDE: {\n    message: \"Restore will override.\",\n    code: 3,\n  },\n  RESUBSCRIBED: {\n    message: \"Resubscribed.\",\n    code: 4,\n  },\n  MISSING_OR_INVALID: {\n    message: \"Missing or invalid.\",\n    code: 5,\n  },\n  EXPIRED: {\n    message: \"Expired.\",\n    code: 6,\n  },\n  UNKNOWN_TYPE: {\n    message: \"Unknown type.\",\n    code: 7,\n  },\n  MISMATCHED_TOPIC: {\n    message: \"Mismatched topic.\",\n    code: 8,\n  },\n  NON_CONFORMING_NAMESPACES: {\n    message: \"Non conforming namespaces.\",\n    code: 9,\n  },\n};\n\n/**\n * Utilities\n */\nexport function getInternalError(key: InternalErrorKey, context?: string | number) {\n  const { message, code } = INTERNAL_ERRORS[key];\n  return {\n    message: context ? `${message} ${context}` : message,\n    code,\n  };\n}\n\nexport function getSdkError(key: SdkErrorKey, context?: string | number) {\n  const { message, code } = SDK_ERRORS[key];\n  return {\n    message: context ? `${message} ${context}` : message,\n    code,\n  };\n}\n\nexport interface SDKError extends Error {\n  code?: number;\n}\n","import { detect } from \"detect-browser\";\nimport { FIVE_MINUTES, fromMiliseconds, toMiliseconds } from \"@walletconnect/time\";\nimport {\n  SignClientTypes,\n  RelayerClientMetadata,\n  EngineTypes,\n  RelayerTypes,\n} from \"@walletconnect/types\";\nimport { getDocument, getLocation, getNavigator } from \"@walletconnect/window-getters\";\nimport { getWindowMetadata } from \"@walletconnect/window-metadata\";\nimport { ErrorResponse } from \"@walletconnect/jsonrpc-utils\";\nimport { IKeyValueStorage } from \"@walletconnect/keyvaluestorage\";\n\nimport { getInternalError, SDKError } from \"./errors.js\";\n\n// -- constants -----------------------------------------//\nexport const REACT_NATIVE_PRODUCT = \"ReactNative\";\n\nexport const ENV_MAP = {\n  reactNative: \"react-native\",\n  node: \"node\",\n  browser: \"browser\",\n  unknown: \"unknown\",\n};\n\nexport const EMPTY_SPACE = \" \";\n\nexport const COLON = \":\";\n\nexport const SLASH = \"/\";\n\nexport const DEFAULT_DEPTH = 2;\n\nexport const ONE_THOUSAND = 1000;\n\nexport const SDK_TYPE = \"js\";\n\n// -- env -----------------------------------------------//\n\nexport function isNode(): boolean {\n  return (\n    typeof process !== \"undefined\" &&\n    typeof process.versions !== \"undefined\" &&\n    typeof process.versions.node !== \"undefined\"\n  );\n}\n\nexport function isReactNative(): boolean {\n  return !getDocument() && !!getNavigator() && navigator.product === REACT_NATIVE_PRODUCT;\n}\n\nexport function isAndroid(): boolean {\n  return (\n    isReactNative() &&\n    typeof global !== \"undefined\" &&\n    typeof (global as any)?.Platform !== \"undefined\" &&\n    (global as any)?.Platform.OS === \"android\"\n  );\n}\n\nexport function isIos(): boolean {\n  return (\n    isReactNative() &&\n    typeof global !== \"undefined\" &&\n    typeof (global as any)?.Platform !== \"undefined\" &&\n    (global as any)?.Platform.OS === \"ios\"\n  );\n}\n\nexport function isBrowser(): boolean {\n  return !isNode() && !!getNavigator() && !!getDocument();\n}\n\nexport function getEnvironment(): string {\n  if (isReactNative()) return ENV_MAP.reactNative;\n  if (isNode()) return ENV_MAP.node;\n  if (isBrowser()) return ENV_MAP.browser;\n  return ENV_MAP.unknown;\n}\n\nexport function getAppId(): string | undefined {\n  try {\n    if (\n      isReactNative() &&\n      typeof global !== \"undefined\" &&\n      typeof (global as any)?.Application !== \"undefined\"\n    ) {\n      return (global as any).Application?.applicationId;\n    }\n    return undefined;\n  } catch {\n    return undefined;\n  }\n}\n\n// -- query -----------------------------------------------//\n\nexport function appendToQueryString(\n  queryString: string,\n  newQueryParams: Record<string, string | number | boolean | undefined>,\n): string {\n  const urlSearchParams = new URLSearchParams(queryString);\n\n  Object.entries(newQueryParams)\n    .sort(([a], [b]) => a.localeCompare(b))\n    .forEach(([key, value]) => {\n      if (value !== undefined && value !== null) {\n        urlSearchParams.set(key, String(value));\n      }\n    });\n\n  return urlSearchParams.toString();\n}\n\n// -- metadata ----------------------------------------------//\n\nexport function populateAppMetadata(metadata?: SignClientTypes.Metadata): SignClientTypes.Metadata {\n  const appMetadata = getAppMetadata();\n  try {\n    if (metadata?.url && appMetadata.url) {\n      if (new URL(metadata.url).host !== new URL(appMetadata.url).host) {\n        console.warn(\n          `The configured WalletConnect 'metadata.url':${metadata.url} differs from the actual page url:${appMetadata.url}. This is probably unintended and can lead to issues.`,\n        );\n        metadata.url = appMetadata.url;\n      }\n    }\n\n    if (metadata?.icons?.length && metadata.icons.length > 0) {\n      metadata.icons = metadata.icons.filter((icon) => icon !== \"\");\n    }\n\n    return {\n      ...appMetadata,\n      ...metadata,\n      url: metadata?.url || appMetadata.url,\n      name: metadata?.name || appMetadata.name,\n      description: metadata?.description || appMetadata.description,\n      icons:\n        metadata?.icons?.length && metadata.icons.length > 0 ? metadata.icons : appMetadata.icons,\n    };\n  } catch (error) {\n    console.warn(\"Error populating app metadata\", error);\n    return metadata || appMetadata;\n  }\n}\n\nexport function getAppMetadata(): SignClientTypes.Metadata {\n  return (\n    getWindowMetadata() || {\n      name: \"\",\n      description: \"\",\n      url: \"\",\n      icons: [\"\"],\n    }\n  );\n}\n\nexport function getRelayClientMetadata(protocol: string, version: number): RelayerClientMetadata {\n  const env = getEnvironment();\n\n  const metadata: RelayerClientMetadata = { protocol, version, env };\n  if (env === \"browser\") {\n    metadata.host = getLocation()?.host || \"unknown\";\n  }\n  return metadata;\n}\n\n// -- rpcUrl ----------------------------------------------//\n\nexport function getJavascriptOS() {\n  const env = getEnvironment();\n  // global.Platform is set by react-native-compat\n  if (\n    env === ENV_MAP.reactNative &&\n    typeof global !== \"undefined\" &&\n    typeof (global as any)?.Platform !== \"undefined\"\n  ) {\n    const { OS, Version } = (global as any).Platform;\n    return [OS, Version].join(\"-\");\n  }\n\n  const info = detect();\n  if (info === null) return \"unknown\";\n  const os = info.os ? info.os.replace(\" \", \"\").toLowerCase() : \"unknown\";\n  if (info.type === \"browser\") {\n    return [os, info.name, info.version].join(\"-\");\n  }\n  return [os, info.version].join(\"-\");\n}\n\nexport function getJavascriptID() {\n  const env = getEnvironment();\n  return env === ENV_MAP.browser ? [env, getLocation()?.host || \"unknown\"].join(\":\") : env;\n}\n\nexport function formatUA(protocol: string, version: number, sdkVersion: string) {\n  const os = getJavascriptOS();\n  const id = getJavascriptID();\n  return [[protocol, version].join(\"-\"), [SDK_TYPE, sdkVersion].join(\"-\"), os, id].join(\"/\");\n}\nconsole;\n\nexport function formatRelayRpcUrl({\n  protocol,\n  version,\n  relayUrl,\n  sdkVersion,\n  auth,\n  projectId,\n  useOnCloseEvent,\n  bundleId,\n  packageName,\n}: RelayerTypes.RpcUrlParams) {\n  const splitUrl = relayUrl.split(\"?\");\n  const ua = formatUA(protocol, version, sdkVersion);\n  const params = {\n    auth,\n    ua,\n    projectId,\n    useOnCloseEvent: useOnCloseEvent || undefined,\n    packageName: packageName || undefined,\n    bundleId: bundleId || undefined,\n  };\n  const queryString = appendToQueryString(splitUrl[1] || \"\", params);\n  return splitUrl[0] + \"?\" + queryString;\n}\n\nexport function getHttpUrl(url: string) {\n  // regex from https://stackoverflow.com/questions/3883871/regexp-to-grab-protocol-from-url\n  const matches = url.match(/^[^:]+(?=:\\/\\/)/gi) || [];\n  let protocol = matches[0];\n  const domain = typeof protocol !== \"undefined\" ? url.split(\"://\")[1] : url;\n  protocol = protocol === \"wss\" ? \"https\" : \"http\";\n  return [protocol, domain].join(\"://\");\n}\n\n// -- assert ------------------------------------------------- //\n\nexport function assertType(obj: any, key: string, type: string) {\n  // eslint-disable-next-line valid-typeof\n  if (!obj[key] || typeof obj[key] !== type) {\n    throw new Error(`Missing or invalid \"${key}\" param`);\n  }\n}\n\n// -- context ------------------------------------------------- //\n\nexport function parseContextNames(context: string, depth = DEFAULT_DEPTH) {\n  return getLastItems(context.split(SLASH), depth);\n}\n\nexport function formatMessageContext(context: string): string {\n  return parseContextNames(context).join(EMPTY_SPACE);\n}\n\n// -- array ------------------------------------------------- //\n\nexport function hasOverlap(a: any[], b: any[]): boolean {\n  const matches = a.filter((x) => b.includes(x));\n  return matches.length === a.length;\n}\n\nexport function getLastItems(arr: any[], depth = DEFAULT_DEPTH): any[] {\n  return arr.slice(Math.max(arr.length - depth, 0));\n}\n\n// -- map ------------------------------------------------- //\n\nexport function mapToObj<T = any>(map: Map<string, T>): Record<string, T> {\n  return Object.fromEntries(map.entries());\n}\n\nexport function objToMap<T = any>(obj: Record<string, T>): Map<string, T> {\n  return new Map<string, T>(Object.entries<T>(obj));\n}\n\nexport function mapEntries<A = any, B = any>(\n  obj: Record<string, A>,\n  cb: (x: A) => B,\n): Record<string, B> {\n  const res: any = {};\n  Object.keys(obj).forEach((key) => {\n    res[key] = cb(obj[key]);\n  });\n  return res;\n}\n\n// -- enum ------------------------------------------------- //\n\n// source: https://github.com/microsoft/TypeScript/issues/3192#issuecomment-261720275\nexport const enumify = <T extends { [index: string]: U }, U extends string>(x: T): T => x;\n\n// -- string ------------------------------------------------- //\n\nexport function capitalizeWord(word: string) {\n  return word.trim().replace(/^\\w/, (c) => c.toUpperCase());\n}\n\nexport function capitalize(str: string) {\n  return str\n    .split(EMPTY_SPACE)\n    .map((w) => capitalizeWord(w))\n    .join(EMPTY_SPACE);\n}\n\n// -- promises --------------------------------------------- //\nexport function createDelayedPromise<T>(\n  expiry: number = FIVE_MINUTES,\n  expireErrorMessage?: string,\n) {\n  const timeout = toMiliseconds(expiry || FIVE_MINUTES);\n  let cacheResolve: undefined | ((value: T | PromiseLike<T>) => void);\n  let cacheReject: undefined | ((value?: ErrorResponse) => void);\n  let cacheTimeout: undefined | NodeJS.Timeout;\n  let result: Promise<Awaited<T>> | Promise<T> | undefined;\n\n  const done = () =>\n    new Promise<T>((promiseResolve, promiseReject) => {\n      if (result) {\n        return promiseResolve(result);\n      }\n      cacheTimeout = setTimeout(() => {\n        const expiredError = getInternalError(\"EXPIRED\");\n        const err = new Error(expireErrorMessage || expiredError.message) as SDKError;\n        err.code = expiredError.code;\n        promiseReject(err);\n      }, timeout);\n      cacheResolve = promiseResolve;\n      cacheReject = promiseReject;\n    });\n  const resolve = (value?: T) => {\n    if (cacheTimeout && cacheResolve) {\n      clearTimeout(cacheTimeout);\n      cacheResolve(value as T);\n      result = Promise.resolve(value) as Promise<Awaited<T>>;\n    }\n  };\n  const reject = (value?: ErrorResponse) => {\n    if (cacheTimeout && cacheReject) {\n      clearTimeout(cacheTimeout);\n      cacheReject(value);\n    }\n  };\n\n  return {\n    resolve,\n    reject,\n    done,\n  };\n}\n\nexport function createExpiringPromise<T>(\n  promise: Promise<T>,\n  expiry: number,\n  expireErrorMessage?: string,\n) {\n  return new Promise(async (resolve, reject) => {\n    const timeout = setTimeout(() => reject(new Error(expireErrorMessage)), expiry);\n    try {\n      const result = await promise;\n      resolve(result);\n    } catch (error) {\n      reject(error);\n    }\n    clearTimeout(timeout);\n  });\n}\n\n// -- expirer --------------------------------------------- //\n\nexport function formatExpirerTarget(type: \"topic\" | \"id\", value: string | number): string {\n  if (typeof value === \"string\" && value.startsWith(`${type}:`)) return value;\n  if (type.toLowerCase() === \"topic\") {\n    if (typeof value !== \"string\")\n      throw new Error(`Value must be \"string\" for expirer target type: topic`);\n    return `topic:${value}`;\n  } else if (type.toLowerCase() === \"id\") {\n    if (typeof value !== \"number\")\n      throw new Error(`Value must be \"number\" for expirer target type: id`);\n    return `id:${value}`;\n  }\n  throw new Error(`Unknown expirer target type: ${type}`);\n}\n\nexport function formatTopicTarget(topic: string): string {\n  return formatExpirerTarget(\"topic\", topic);\n}\n\nexport function formatIdTarget(id: number): string {\n  return formatExpirerTarget(\"id\", id);\n}\n\nexport function parseExpirerTarget(target: string) {\n  const [type, value] = target.split(\":\");\n  const parsed: { id?: number; topic?: string } = { id: undefined, topic: undefined };\n  if (type === \"topic\" && typeof value === \"string\") {\n    parsed.topic = value;\n  } else if (type === \"id\" && Number.isInteger(Number(value))) {\n    parsed.id = Number(value);\n  } else {\n    throw new Error(`Invalid target, expected id:number or topic:string, got ${type}:${value}`);\n  }\n\n  return parsed;\n}\n\nexport function calcExpiry(ttl: number, now?: number): number {\n  return fromMiliseconds((now || Date.now()) + toMiliseconds(ttl));\n}\n\nexport function isExpired(expiry: number) {\n  return Date.now() >= toMiliseconds(expiry);\n}\n\n// -- events ---------------------------------------------- //\n\nexport function engineEvent(event: EngineTypes.Event, id?: number | string | undefined) {\n  return `${event}${id ? `:${id}` : \"\"}`;\n}\n\nexport function mergeArrays<T>(a: T[] = [], b: T[] = []): T[] {\n  return [...new Set([...a, ...b])];\n}\n\nexport async function handleDeeplinkRedirect({\n  id,\n  topic,\n  wcDeepLink,\n}: {\n  id: number;\n  topic: string;\n  wcDeepLink: string;\n}) {\n  try {\n    if (!wcDeepLink) return;\n\n    const json = typeof wcDeepLink === \"string\" ? JSON.parse(wcDeepLink) : wcDeepLink;\n    const deeplink = json?.href;\n    if (typeof deeplink !== \"string\") return;\n    const link = formatDeeplinkUrl(deeplink, id, topic);\n    const env = getEnvironment();\n\n    if (env === ENV_MAP.browser) {\n      if (!getDocument()?.hasFocus()) {\n        console.warn(\"Document does not have focus, skipping deeplink.\");\n        return;\n      }\n\n      openDeeplink(link);\n    } else if (env === ENV_MAP.reactNative) {\n      // global.Linking is set by react-native-compat\n      if (typeof (global as any)?.Linking !== \"undefined\") {\n        await (global as any).Linking.openURL(link);\n      }\n    }\n  } catch (err) {\n    // Silent error, just log in console\n    // eslint-disable-next-line no-console\n    console.error(err);\n  }\n}\n\nexport function formatDeeplinkUrl(deeplink: string, requestId: number, sessionTopic: string) {\n  const payload = `requestId=${requestId}&sessionTopic=${sessionTopic}`;\n  if (deeplink.endsWith(\"/\")) deeplink = deeplink.slice(0, -1);\n  let link = `${deeplink}`;\n  if (deeplink.startsWith(\"https://t.me\")) {\n    const startApp = deeplink.includes(\"?\") ? \"&startapp=\" : \"?startapp=\";\n    link = `${link}${startApp}${toBase64(payload, true)}`;\n  } else {\n    link = `${link}/wc?${payload}`;\n  }\n  return link;\n}\n\nexport function openDeeplink(url: string) {\n  let target = \"_self\";\n  if (isIframe()) {\n    target = \"_top\";\n  } else if (isTelegram() || url.startsWith(\"https://\") || url.startsWith(\"http://\")) {\n    target = \"_blank\";\n  }\n\n  window.open(url, target, \"noreferrer noopener\");\n}\n\nexport async function getDeepLink(storage: IKeyValueStorage, key: string) {\n  let link: string | undefined = \"\";\n  try {\n    if (isBrowser()) {\n      link = localStorage.getItem(key) as string;\n      if (link) return link;\n    }\n    link = await storage.getItem(key);\n  } catch (err) {\n    // eslint-disable-next-line no-console\n    console.error(err);\n  }\n  return link;\n}\n\nexport function getCommonValuesInArrays<T = string | number | boolean>(arr1: T[], arr2: T[]): T[] {\n  return arr1.filter((value) => arr2.includes(value));\n}\n\nexport function getSearchParamFromURL(url: string, param: any) {\n  const include = url.includes(param);\n  if (!include) return null;\n  const params = url.split(/([&,?,=])/);\n  const index = params.indexOf(param);\n  const value = params[index + 2];\n  return value;\n}\n\nexport function uuidv4() {\n  if (typeof crypto !== \"undefined\" && crypto?.randomUUID) {\n    return crypto.randomUUID();\n  }\n\n  return \"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx\".replace(/[xy]/gu, (c) => {\n    const r = (Math.random() * 16) | 0;\n    const v = c === \"x\" ? r : (r & 0x3) | 0x8;\n\n    return v.toString(16);\n  });\n}\n\nexport function isTestRun() {\n  return typeof process !== \"undefined\" && process.env.IS_VITEST === \"true\";\n}\n\nexport function isTelegram() {\n  return (\n    typeof window !== \"undefined\" &&\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    (Boolean((window as any).TelegramWebviewProxy) ||\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      Boolean((window as any).Telegram) ||\n      // eslint-disable-next-line @typescript-eslint/no-explicit-any\n      Boolean((window as any).TelegramWebviewProxyProto))\n  );\n}\n\nexport function isIframe() {\n  try {\n    return window.self !== window.top;\n  } catch {\n    return false;\n  }\n}\n\nexport function toBase64(input: string, removePadding = false): string {\n  const bytes = new TextEncoder().encode(input);\n  const chars = new Array<string>(bytes.length);\n  for (let i = 0; i < bytes.length; i++) {\n    chars[i] = String.fromCharCode(bytes[i]);\n  }\n  const encoded = btoa(chars.join(\"\"));\n  return removePadding ? encoded.replace(/[=]/g, \"\") : encoded;\n}\n\nexport function fromBase64(encodedString: string): string {\n  const padded = encodedString + \"=\".repeat((4 - (encodedString.length % 4)) % 4);\n  const binary = atob(padded);\n  const bytes = new Uint8Array(binary.length);\n  for (let i = 0; i < binary.length; i++) {\n    bytes[i] = binary.charCodeAt(i);\n  }\n  return new TextDecoder().decode(bytes);\n}\n\nexport function sleep(ms: number) {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport class LimitedSet<T> {\n  private limit: number;\n  private set: Set<T>;\n\n  constructor({ limit }: { limit: number }) {\n    this.limit = limit;\n    this.set = new Set<T>();\n  }\n\n  add(item: T) {\n    if (this.set.has(item)) return;\n\n    if (this.set.size >= this.limit) {\n      // Remove the oldest entry (FIFO)\n      const firstKey = this.set.values().next().value;\n      if (firstKey) {\n        this.set.delete(firstKey);\n      }\n    }\n\n    this.set.add(item);\n  }\n\n  has(item: T) {\n    return this.set.has(item);\n  }\n}\n","import { keccak_256 } from \"@noble/hashes/sha3\";\nimport { Secp256k1, Signature } from \"ox\";\nimport { sha256, sha512_256 } from \"@noble/hashes/sha2\";\nimport { blake2b } from \"@noble/hashes/blake2\";\nimport { encode as msgpackEncode, decode as msgpackDecode } from \"@msgpack/msgpack\";\nimport { base32, base58 } from \"@scure/base\";\nimport { concat, toString } from \"uint8arrays\";\nimport { AuthTypes } from \"@walletconnect/types\";\n\nimport { parseChainId } from \"./caip.js\";\n\nconst DEFAULT_RPC_URL = \"https://rpc.walletconnect.org/v1\";\n\nfunction base64ToBytes(b64: string): Uint8Array {\n  const padded = b64 + \"=\".repeat((4 - (b64.length % 4)) % 4);\n  const binary = atob(padded);\n  const bytes = new Uint8Array(binary.length);\n  for (let i = 0; i < binary.length; i++) {\n    bytes[i] = binary.charCodeAt(i);\n  }\n  return bytes;\n}\n\nexport function hashEthereumMessage(message: string) {\n  const prefix = `\\x19Ethereum Signed Message:\\n${message.length}`;\n  const prefixedMessage = new TextEncoder().encode(prefix + message);\n  return \"0x\" + toString(keccak_256(prefixedMessage), \"base16\");\n}\n\nexport async function verifySignature(\n  address: string,\n  reconstructedMessage: string,\n  cacaoSignature: AuthTypes.CacaoSignature,\n  chainId: string,\n  projectId: string,\n  baseRpcUrl?: string,\n): Promise<boolean> {\n  // Determine if this signature is from an EOA or a contract.\n  switch (cacaoSignature.t) {\n    case \"eip191\":\n      return await isValidEip191Signature(address, reconstructedMessage, cacaoSignature.s);\n    case \"eip1271\":\n      return await isValidEip1271Signature(\n        address,\n        reconstructedMessage,\n        cacaoSignature.s,\n        chainId,\n        projectId,\n        baseRpcUrl,\n      );\n      break;\n    default:\n      throw new Error(\n        `verifySignature failed: Attempted to verify CacaoSignature with unknown type: ${cacaoSignature.t}`,\n      );\n  }\n}\n\nexport function isValidEip191Signature(\n  address: string,\n  message: string,\n  signature: string,\n): boolean {\n  const parsedSignature = Signature.fromHex(signature as `0x${string}`);\n  const recoveredAddress = Secp256k1.recoverAddress({\n    payload: hashEthereumMessage(message) as `0x${string}`,\n    signature: parsedSignature,\n  });\n  return recoveredAddress.toLowerCase() === address.toLowerCase();\n}\n\nexport async function isValidEip1271Signature(\n  address: string,\n  reconstructedMessage: string,\n  signature: string,\n  chainId: string,\n  projectId: string,\n  baseRpcUrl?: string,\n) {\n  const parsedChain = parseChainId(chainId);\n  if (!parsedChain.namespace || !parsedChain.reference) {\n    throw new Error(\n      `isValidEip1271Signature failed: chainId must be in CAIP-2 format, received: ${chainId}`,\n    );\n  }\n  try {\n    const eip1271MagicValue = \"0x1626ba7e\";\n    const dynamicTypeOffset = \"0000000000000000000000000000000000000000000000000000000000000040\";\n    const nonPrefixedSignature = signature.substring(2);\n    const dynamicTypeLength = (nonPrefixedSignature.length / 2).toString(16).padStart(64, \"0\");\n    const nonPrefixedHashedMessage = (\n      reconstructedMessage.startsWith(\"0x\")\n        ? reconstructedMessage\n        : hashEthereumMessage(reconstructedMessage)\n    ).substring(2);\n    const data =\n      eip1271MagicValue +\n      nonPrefixedHashedMessage +\n      dynamicTypeOffset +\n      dynamicTypeLength +\n      nonPrefixedSignature;\n    const response = await fetch(\n      `${baseRpcUrl || DEFAULT_RPC_URL}/?chainId=${chainId}&projectId=${projectId}`,\n      {\n        headers: {\n          \"Content-Type\": \"application/json\",\n        },\n        method: \"POST\",\n        body: JSON.stringify({\n          id: generateJsonRpcId(),\n          jsonrpc: \"2.0\",\n          method: \"eth_call\",\n          params: [{ to: address, data }, \"latest\"],\n        }),\n      },\n    );\n    const { result } = await response.json();\n    if (!result) return false;\n\n    // Remove right-padded zeros from result to get only the concrete recovered value.\n    const recoveredValue = result.slice(0, eip1271MagicValue.length);\n    return recoveredValue.toLowerCase() === eip1271MagicValue.toLowerCase();\n  } catch (error: any) {\n    // eslint-disable-next-line no-console\n    console.error(\"isValidEip1271Signature: \", error);\n    return false;\n  }\n}\n\nfunction generateJsonRpcId() {\n  return Date.now() + Math.floor(Math.random() * 1000);\n}\n\nexport function extractSolanaTransactionId(solanaTransaction: string): string {\n  const bytes = base64ToBytes(solanaTransaction);\n\n  const signatureCount = bytes[0];\n  if (signatureCount === 0) {\n    throw new Error(\"No signatures found\");\n  }\n\n  const signatureEndPos = 1 + signatureCount * 64;\n  if (bytes.length < signatureEndPos) {\n    throw new Error(\"Transaction data too short for claimed signature count\");\n  }\n\n  if (bytes.length < 100) {\n    throw new Error(\"Transaction too short\");\n  }\n\n  const signatureBytes = bytes.slice(1, 65);\n  return base58.encode(signatureBytes);\n}\n\nexport function getSuiDigest(transaction: string) {\n  const txBytes = base64ToBytes(transaction);\n  const typeTagBytes = new TextEncoder().encode(\"TransactionData::\");\n\n  const dataWithTag = new Uint8Array(typeTagBytes.length + txBytes.length);\n  dataWithTag.set(typeTagBytes);\n  dataWithTag.set(txBytes, typeTagBytes.length);\n\n  const hash = blake2b(dataWithTag, { dkLen: 32 });\n  return base58.encode(hash);\n}\n\nexport function getNearTransactionIdFromSignedTransaction(signedTransaction: unknown) {\n  const hash = new Uint8Array(sha256(getNearUint8ArrayFromBytes(signedTransaction)));\n  const hashBase58 = base58.encode(hash);\n  return hashBase58;\n}\n\nexport function getNearUint8ArrayFromBytes(bytes: unknown) {\n  if (bytes instanceof Uint8Array) {\n    return bytes;\n  } else if (Array.isArray(bytes)) {\n    return new Uint8Array(bytes);\n  } else if (typeof bytes === \"object\" && (bytes as any)?.data) {\n    return new Uint8Array(Object.values((bytes as any).data));\n  } else if (typeof bytes === \"object\" && bytes) {\n    return new Uint8Array(Object.values(bytes));\n  } else {\n    throw new Error(\"getNearUint8ArrayFromBytes: Unexpected result type from bytes array\");\n  }\n}\n\nexport function getAlgorandTransactionId(transaction: string) {\n  const signedTxnBytes = base64ToBytes(transaction);\n\n  const decoded = msgpackDecode(signedTxnBytes) as any;\n\n  const unsignedTxn = decoded.txn;\n  if (!unsignedTxn) {\n    throw new Error(\"Invalid signed transaction: missing 'txn' field\");\n  }\n\n  const serializedUnsignedTxn = msgpackEncode(unsignedTxn);\n\n  const txPrefix = new TextEncoder().encode(\"TX\");\n  const toHash = concat([txPrefix, new Uint8Array(serializedUnsignedTxn)]);\n\n  const hash = sha512_256(toHash);\n  return base32.encode(hash).replace(/=+$/, \"\");\n}\n\nfunction encodeVarint(value: number | bigint): Uint8Array {\n  const result: number[] = [];\n  let v = BigInt(value);\n  while (v >= 0x80n) {\n    result.push(Number((v & 0x7fn) | 0x80n));\n    v >>= 7n;\n  }\n  result.push(Number(v));\n  return new Uint8Array(result);\n}\n\nexport function getSignDirectHash(payload: {\n  signed: {\n    chainId: string;\n    accountNumber: string;\n    authInfoBytes: string;\n    bodyBytes: string;\n  };\n  signature: {\n    pub_key: {\n      type: string;\n      value: string;\n    };\n    signature: string;\n  };\n}) {\n  const bodyBytes = base64ToBytes(payload.signed.bodyBytes);\n  const authInfoBytes = base64ToBytes(payload.signed.authInfoBytes);\n  const signature = base64ToBytes(payload.signature.signature);\n\n  const chunks: Uint8Array[] = [];\n\n  chunks.push(new Uint8Array([0x0a]));\n  chunks.push(encodeVarint(bodyBytes.length));\n  chunks.push(bodyBytes);\n\n  chunks.push(new Uint8Array([0x12]));\n  chunks.push(encodeVarint(authInfoBytes.length));\n  chunks.push(authInfoBytes);\n\n  chunks.push(new Uint8Array([0x1a]));\n  chunks.push(encodeVarint(signature.length));\n  chunks.push(signature);\n\n  const txRawBytes = concat(chunks);\n  const hashBytes = sha256(txRawBytes);\n\n  return toString(hashBytes, \"base16\").toUpperCase();\n}\n\nexport function getWalletSendCallsHashes(\n  result: string | { id: string; capabilities: { caip345: { transactionHashes: string[] } } },\n) {\n  const hashes: string[] = [];\n  try {\n    if (typeof result === \"string\") {\n      hashes.push(result);\n      return hashes;\n    }\n\n    if (typeof result !== \"object\") {\n      return hashes;\n    }\n\n    if (result?.id) {\n      hashes.push(result.id);\n    }\n\n    const txHashes = result?.capabilities?.caip345?.transactionHashes;\n\n    if (txHashes) {\n      hashes.push(...txHashes);\n    }\n  } catch (error) {\n    console.warn(\"getWalletSendCallsHashes failed: \", error);\n  }\n\n  return hashes;\n}\n","import { AuthTypes } from \"@walletconnect/types\";\nimport { getCommonValuesInArrays } from \"./misc.js\";\nimport { verifySignature } from \"./signatures.js\";\nconst didPrefix = \"did:pkh:\";\nconst NAMESPACE_DISPLAY_NAMES = {\n  eip155: \"Ethereum\",\n  solana: \"Solana\",\n  bip122: \"Bitcoin\",\n};\n\nconst getNamespaceNameFromNamespace = (namespace?: string) => {\n  if (!namespace) return \"\";\n  const displayName = NAMESPACE_DISPLAY_NAMES[namespace as keyof typeof NAMESPACE_DISPLAY_NAMES];\n  return displayName || namespace;\n};\n\nexport const getDidAddressSegments = (iss: string) => {\n  return iss?.split(\":\");\n};\n\nexport const getDidChainId = (iss: string) => {\n  const segments = iss && getDidAddressSegments(iss);\n  if (segments) {\n    return iss.includes(didPrefix) ? segments[3] : segments[1];\n  }\n  return undefined;\n};\n\nexport const getDidAddressNamespace = (iss: string) => {\n  const segments = iss && getDidAddressSegments(iss);\n  if (segments) {\n    return iss.includes(didPrefix) ? segments[2] : segments[0];\n  }\n  return undefined;\n};\n\nexport const getNamespacedDidChainId = (iss: string) => {\n  const segments = iss && getDidAddressSegments(iss);\n  if (segments) {\n    return segments[2] + \":\" + segments[3];\n  }\n  return undefined;\n};\n\nexport const getDidAddress = (iss: string) => {\n  const segments = iss && getDidAddressSegments(iss);\n  if (segments) {\n    return segments.pop();\n  }\n  return undefined;\n};\n\nexport async function validateSignedCacao(params: { cacao: AuthTypes.Cacao; projectId?: string }) {\n  const { cacao, projectId } = params;\n  const { s: signature, p: payload } = cacao;\n  const reconstructed = formatMessage(payload, payload.iss);\n  const walletAddress = getDidAddress(payload.iss) as string;\n  const isValid = await verifySignature(\n    walletAddress,\n    reconstructed,\n    signature,\n    getNamespacedDidChainId(payload.iss) as string,\n    projectId as string,\n  );\n\n  return isValid;\n}\n\nexport const formatMessage = (cacao: AuthTypes.FormatMessageParams, iss: string) => {\n  const didNamespace = getDidAddressNamespace(iss);\n  if (!didNamespace) {\n    throw new Error(\"Invalid issuer: \" + iss);\n  }\n  const header = `${cacao.domain} wants you to sign in with your ${getNamespaceNameFromNamespace(didNamespace)} account:`;\n  const walletAddress = getDidAddress(iss);\n\n  if (!cacao.aud && !cacao.uri) {\n    throw new Error(\"Either `aud` or `uri` is required to construct the message\");\n  }\n\n  let statement = cacao.statement || undefined;\n  const uri = `URI: ${cacao.aud || cacao.uri}`;\n  const version = `Version: ${cacao.version}`;\n  const chainId = `Chain ID: ${getDidChainId(iss)}`;\n  const nonce = `Nonce: ${cacao.nonce}`;\n  const issuedAt = `Issued At: ${cacao.iat}`;\n  const expirationTime = cacao.exp ? `Expiration Time: ${cacao.exp}` : undefined;\n  const notBefore = cacao.nbf ? `Not Before: ${cacao.nbf}` : undefined;\n  const requestId = cacao.requestId ? `Request ID: ${cacao.requestId}` : undefined;\n  const resources = cacao.resources\n    ? `Resources:${cacao.resources.map((resource) => `\\n- ${resource}`).join(\"\")}`\n    : undefined;\n  const recap = getRecapFromResources(cacao.resources);\n  if (recap) {\n    const decoded = decodeRecap(recap);\n    statement = formatStatementFromRecap(statement, decoded);\n  }\n\n  const message = [\n    header,\n    walletAddress,\n    ``,\n    statement,\n    ``,\n    uri,\n    version,\n    chainId,\n    nonce,\n    issuedAt,\n    expirationTime,\n    notBefore,\n    requestId,\n    resources,\n  ]\n    .filter((val) => val !== undefined && val !== null) // remove unnecessary empty lines\n    .join(\"\\n\");\n\n  return message;\n};\n\nexport function buildAuthObject(\n  requestPayload: AuthTypes.PayloadParams,\n  signature: AuthTypes.CacaoSignature,\n  iss: string,\n) {\n  if (!iss.includes(\"did:pkh:\")) {\n    iss = `did:pkh:${iss}`;\n  }\n\n  const authObject: AuthTypes.Cacao = {\n    h: {\n      t: \"caip122\",\n    },\n    p: {\n      iss,\n      domain: requestPayload.domain,\n      aud: requestPayload.aud,\n      version: requestPayload.version,\n      nonce: requestPayload.nonce,\n      iat: requestPayload.iat,\n      statement: requestPayload.statement,\n      requestId: requestPayload.requestId,\n      resources: requestPayload.resources,\n      nbf: requestPayload.nbf,\n      exp: requestPayload.exp,\n    },\n    s: signature,\n  };\n  return authObject;\n}\ntype PopulateAuthPayloadParams = {\n  authPayload: AuthTypes.PayloadParams;\n  chains: string[];\n  methods: string[];\n};\nexport function populateAuthPayload(params: PopulateAuthPayloadParams): AuthTypes.PayloadParams {\n  const { authPayload, chains, methods } = params;\n  const statement = authPayload.statement || \"\";\n\n  if (!chains?.length) return authPayload;\n\n  const requested = authPayload.chains;\n  const supported = chains;\n\n  const supportedChains = getCommonValuesInArrays<string>(requested, supported);\n  if (!supportedChains?.length) {\n    throw new Error(\"No supported chains\");\n  }\n\n  const requestedRecaps = getDecodedRecapFromResources(authPayload.resources);\n  if (!requestedRecaps) return authPayload;\n\n  isValidRecap(requestedRecaps);\n  const resource = getRecapResource(requestedRecaps, \"eip155\");\n  let updatedResources = authPayload?.resources || [];\n\n  if (resource?.length) {\n    const actions = getReCapActions(resource);\n    const supportedActions = getCommonValuesInArrays<string>(actions, methods);\n    if (!supportedActions?.length) {\n      throw new Error(\n        `Supported methods don't satisfy the requested: ${JSON.stringify(\n          actions,\n        )}, supported: ${JSON.stringify(methods)}`,\n      );\n    }\n    const formattedActions = assignAbilityToActions(\"request\", supportedActions as string[], {\n      chains: supportedChains,\n    });\n    const updatedRecap = addResourceToRecap(requestedRecaps, \"eip155\", formattedActions);\n    // remove recap from resources as we will add the updated one\n    updatedResources = authPayload?.resources?.slice(0, -1) || [];\n    updatedResources.push(encodeRecap(updatedRecap));\n  }\n\n  return {\n    ...authPayload,\n    statement: buildRecapStatement(statement, getRecapFromResources(updatedResources)),\n    chains: supportedChains,\n    resources: authPayload?.resources || updatedResources.length > 0 ? updatedResources : undefined,\n  };\n}\n\nexport function getDecodedRecapFromResources(resources?: string[]) {\n  const resource = getRecapFromResources(resources);\n  if (!resource) return;\n  if (!isRecap(resource)) return;\n  return decodeRecap(resource);\n}\n\nexport function recapHasResource(recap: any, resource: string) {\n  return recap?.att?.hasOwnProperty(resource);\n}\n\nexport function getRecapResource(recap: any, resource: string): any[] {\n  return recap?.att?.[resource] ? Object.keys(recap?.att?.[resource]) : [];\n}\n\nexport function getRecapAbilitiesFromResource(actions: any[]) {\n  return actions?.map((action) => Object.keys(action)) || [];\n}\n\nexport function getReCapActions(abilities: any[]) {\n  return abilities?.map((ability) => ability.split(\"/\")?.[1]) || [];\n}\n\nexport function base64Encode(input: unknown): string {\n  const json = JSON.stringify(input);\n  const bytes = new TextEncoder().encode(json);\n  const chars = new Array<string>(bytes.length);\n  for (let i = 0; i < bytes.length; i++) {\n    chars[i] = String.fromCharCode(bytes[i]);\n  }\n  return btoa(chars.join(\"\"));\n}\n\nexport function base64Decode(encodedString: string): string {\n  const padded = encodedString + \"=\".repeat((4 - (encodedString.length % 4)) % 4);\n  const binary = atob(padded);\n  const bytes = new Uint8Array(binary.length);\n  for (let i = 0; i < binary.length; i++) {\n    bytes[i] = binary.charCodeAt(i);\n  }\n  return JSON.parse(new TextDecoder().decode(bytes));\n}\n\nexport function isValidRecap(recap: any) {\n  if (!recap) throw new Error(\"No recap provided, value is undefined\");\n  if (!recap.att) throw new Error(\"No `att` property found\");\n  const resources = Object.keys(recap.att);\n  if (!resources?.length) throw new Error(\"No resources found in `att` property\");\n  resources.forEach((resource) => {\n    const resourceAbilities = recap.att[resource];\n    if (Array.isArray(resourceAbilities))\n      throw new Error(`Resource must be an object: ${resource}`);\n    if (typeof resourceAbilities !== \"object\")\n      throw new Error(`Resource must be an object: ${resource}`);\n    if (!Object.keys(resourceAbilities).length)\n      throw new Error(`Resource object is empty: ${resource}`);\n\n    Object.keys(resourceAbilities).forEach((ability) => {\n      const limits = resourceAbilities[ability];\n      if (!Array.isArray(limits))\n        throw new Error(`Ability limits ${ability} must be an array of objects, found: ${limits}`);\n      if (!limits.length)\n        throw new Error(`Value of ${ability} is empty array, must be an array with objects`);\n      limits.forEach((limit) => {\n        if (typeof limit !== \"object\")\n          throw new Error(\n            `Ability limits (${ability}) must be an array of objects, found: ${limit}`,\n          );\n      });\n    });\n  });\n}\n\nexport function createRecap(resource: string, ability: string, actions: string[], limits = {}) {\n  actions?.sort((a, b) => a.localeCompare(b));\n  return {\n    att: { [resource]: assignAbilityToActions(ability, actions, limits) },\n  };\n}\n\ntype RecapType = {\n  att: {\n    [key: string]: Record<string, unknown>;\n  };\n};\nexport function addResourceToRecap(recap: RecapType, resource: string, actions: unknown[]) {\n  recap.att[resource] = {\n    ...actions,\n  };\n  const keys = Object.keys(recap.att)?.sort((a, b) => a.localeCompare(b));\n  const baseRecap: RecapType = { att: {} };\n  const sorted = keys.reduce((obj, key) => {\n    obj.att[key] = recap.att[key];\n    return obj;\n  }, baseRecap);\n  return sorted;\n}\n\nexport function assignAbilityToActions(ability: string, actions: string[], limits = {}) {\n  // sort resources alphabetically\n  actions = actions?.sort((a, b) => a.localeCompare(b));\n  const abilities = actions.map((action) => {\n    return {\n      [`${ability}/${action}`]: [limits],\n    };\n  });\n  return Object.assign({}, ...abilities);\n}\n\nexport function encodeRecap(recap: any) {\n  isValidRecap(recap);\n  // remove the padding from the base64 string as per recap spec\n  return `urn:recap:${base64Encode(recap).replace(/=/g, \"\")}`;\n}\n\nexport function decodeRecap(recap: any): RecapType {\n  // base64Decode adds padding internally so don't need to add it back if it was removed\n  const decoded = base64Decode(recap.replace(\"urn:recap:\", \"\"));\n  isValidRecap(decoded);\n  return decoded as unknown as RecapType;\n}\n\nexport function createEncodedRecap(resource: string, ability: string, actions: string[]): string {\n  const recap = createRecap(resource, ability, actions);\n  return encodeRecap(recap);\n}\n\nexport function isRecap(resource: string) {\n  return resource && resource.includes(\"urn:recap:\");\n}\n\nexport function mergeEncodedRecaps(recap1: string, recap2: string) {\n  const decoded1 = decodeRecap(recap1);\n  const decoded2 = decodeRecap(recap2);\n  const merged = mergeRecaps(decoded1, decoded2);\n  return encodeRecap(merged);\n}\n\nexport function mergeRecaps(recap1: RecapType, recap2: RecapType) {\n  isValidRecap(recap1);\n  isValidRecap(recap2);\n  const keys = Object.keys(recap1.att)\n    .concat(Object.keys(recap2.att))\n    .sort((a, b) => a.localeCompare(b));\n  const mergedRecap: RecapType = { att: {} };\n  keys.forEach((key) => {\n    const actions = Object.keys(recap1.att?.[key] || {})\n      .concat(Object.keys(recap2.att?.[key] || {}))\n      .sort((a, b) => a.localeCompare(b));\n    actions.forEach((action) => {\n      mergedRecap.att[key] = {\n        ...mergedRecap.att[key],\n        [action]: recap1.att[key]?.[action] || recap2.att[key]?.[action],\n      };\n    });\n  });\n  return mergedRecap;\n}\n\nexport function formatStatementFromRecap(statement = \"\", recap: RecapType) {\n  isValidRecap(recap);\n  const base = \"I further authorize the stated URI to perform the following actions on my behalf: \";\n\n  if (statement.includes(base)) return statement;\n\n  const statementForRecap: string[] = [];\n  let currentCounter = 0;\n  Object.keys(recap.att).forEach((resource) => {\n    const actions = Object.keys(recap.att[resource]).map((ability: any) => {\n      return {\n        ability: ability.split(\"/\")[0],\n        action: ability.split(\"/\")[1],\n      };\n    });\n    //\n    actions.sort((a, b) => a.action.localeCompare(b.action));\n    const uniqueAbilities: Record<string, string[]> = {};\n    actions.forEach((action: any) => {\n      if (!uniqueAbilities[action.ability]) {\n        uniqueAbilities[action.ability] = [];\n      }\n      uniqueAbilities[action.ability].push(action.action);\n    });\n    const abilities = Object.keys(uniqueAbilities).map((ability) => {\n      currentCounter++;\n      return `(${currentCounter}) '${ability}': '${uniqueAbilities[ability].join(\n        \"', '\",\n      )}' for '${resource}'.`;\n    });\n    statementForRecap.push(abilities.join(\", \").replace(\".,\", \".\"));\n  });\n\n  const recapStatemet = statementForRecap.join(\" \");\n  const recapStatement = `${base}${recapStatemet}`;\n  // add a space if there is a statement\n  return `${statement ? statement + \" \" : \"\"}${recapStatement}`;\n}\n\nexport function getMethodsFromRecap(recap: string) {\n  const decoded = decodeRecap(recap);\n  isValidRecap(decoded);\n  // methods are only available for eip155 as per the current implementation\n  const resource = decoded.att?.eip155;\n  if (!resource) return [];\n  return Object.keys(resource).map((ability: any) => ability.split(\"/\")[1]);\n}\n\nexport function getChainsFromRecap(recap: string) {\n  const decoded = decodeRecap(recap);\n  isValidRecap(decoded);\n  const chains: string[] = [];\n\n  Object.values(decoded.att).forEach((resource: any) => {\n    Object.values(resource).forEach((ability: any) => {\n      if (ability?.[0]?.chains) {\n        chains.push(ability[0].chains);\n      }\n    });\n  });\n  return [...new Set(chains.flat())];\n}\n\nexport function buildRecapStatement(statement: string, recap: unknown) {\n  if (!recap) return statement;\n  const decoded = decodeRecap(recap);\n  isValidRecap(decoded);\n  return formatStatementFromRecap(statement, decoded);\n}\n\nexport function getRecapFromResources(resources?: string[]) {\n  if (!resources) return;\n  // per spec, recap is always the last resource\n  const resource = resources?.[resources.length - 1];\n  return isRecap(resource) ? resource : undefined;\n}\n","import { chacha20poly1305 } from \"@noble/ciphers/chacha\";\nimport { hkdf } from \"@noble/hashes/hkdf\";\nimport { randomBytes } from \"@noble/hashes/utils\";\nimport { sha256 } from \"@noble/hashes/sha256\";\nimport { x25519 } from \"@noble/curves/ed25519\";\nimport { p256 } from \"@noble/curves/p256\";\nimport { CryptoTypes } from \"@walletconnect/types\";\nimport { decodeJWT } from \"@walletconnect/relay-auth\";\nimport { concat, fromString, toString } from \"uint8arrays\";\n\nexport const BASE10 = \"base10\";\nexport const BASE16 = \"base16\";\nexport const BASE64 = \"base64pad\";\nexport const BASE64URL = \"base64url\";\nexport const UTF8 = \"utf8\";\n\nexport const TYPE_0 = 0;\nexport const TYPE_1 = 1;\nexport const TYPE_2 = 2;\n\nexport type P256KeyDataType = {\n  crv: \"P-256\" | string;\n  ext: true | boolean;\n  key_ops: [\"verify\"] | string[];\n  kty: string;\n  x: string;\n  y: string;\n};\n\nconst ZERO_INDEX = 0;\nconst TYPE_LENGTH = 1;\nconst IV_LENGTH = 12;\nconst KEY_LENGTH = 32;\n\nexport function generateKeyPair(): CryptoTypes.KeyPair {\n  const privateKey = x25519.utils.randomPrivateKey();\n  const publicKey = x25519.getPublicKey(privateKey);\n  return {\n    privateKey: toString(privateKey, BASE16),\n    publicKey: toString(publicKey, BASE16),\n  };\n}\n\nexport function generateRandomBytes32(): string {\n  const random = randomBytes(KEY_LENGTH);\n  return toString(random, BASE16);\n}\n\nexport function deriveSymKey(privateKeyA: string, publicKeyB: string): string {\n  const sharedKey = x25519.getSharedSecret(\n    fromString(privateKeyA, BASE16),\n    fromString(publicKeyB, BASE16),\n  );\n  const symKey = hkdf(sha256, sharedKey, undefined, undefined, KEY_LENGTH);\n  return toString(symKey, BASE16);\n}\n\nexport function hashKey(key: string): string {\n  const result = sha256(fromString(key, BASE16));\n  return toString(result, BASE16);\n}\n\nexport function hashMessage(message: string): string {\n  const result = sha256(fromString(message, UTF8));\n  return toString(result, BASE16);\n}\n\nexport function encodeTypeByte(type: number): Uint8Array {\n  return fromString(`${type}`, BASE10);\n}\n\nexport function decodeTypeByte(byte: Uint8Array): number {\n  return Number(toString(byte, BASE10));\n}\n\nfunction toBase64URL(base64: string): string {\n  return base64.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\n\nfunction fromBase64URL(base64url: string): string {\n  const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n  const padding = (4 - (base64.length % 4)) % 4;\n  return base64 + \"=\".repeat(padding);\n}\n\nexport function encrypt(params: CryptoTypes.EncryptParams): string {\n  const type = encodeTypeByte(typeof params.type !== \"undefined\" ? params.type : TYPE_0);\n  if (decodeTypeByte(type) === TYPE_1 && typeof params.senderPublicKey === \"undefined\") {\n    throw new Error(\"Missing sender public key for type 1 envelope\");\n  }\n  const senderPublicKey =\n    typeof params.senderPublicKey !== \"undefined\"\n      ? fromString(params.senderPublicKey, BASE16)\n      : undefined;\n\n  const iv =\n    typeof params.iv !== \"undefined\" ? fromString(params.iv, BASE16) : randomBytes(IV_LENGTH);\n  const key = fromString(params.symKey, BASE16);\n  const box = chacha20poly1305(key, iv);\n  const sealed = box.encrypt(fromString(params.message, UTF8));\n  const result = serialize({ type, sealed, iv, senderPublicKey });\n  return params.encoding === BASE64URL ? toBase64URL(result) : result;\n}\n\nexport function decrypt(params: CryptoTypes.DecryptParams): string {\n  const key = fromString(params.symKey, BASE16);\n  const { sealed, iv } = deserialize({ encoded: params.encoded, encoding: params.encoding });\n  const box = chacha20poly1305(key, iv);\n  const message = box.decrypt(sealed);\n  if (message === null) throw new Error(\"Failed to decrypt\");\n  return toString(message, UTF8);\n}\n\nexport function encodeTypeTwoEnvelope(\n  message: string,\n  encoding?: CryptoTypes.EncodingType,\n): string {\n  const type = encodeTypeByte(TYPE_2);\n  // iv is not used in type 2 envelopes\n  const iv = randomBytes(IV_LENGTH);\n  const sealed = fromString(message, UTF8);\n  const result = serialize({ type, sealed, iv });\n  return encoding === BASE64URL ? toBase64URL(result) : result;\n}\n\nexport function decodeTypeTwoEnvelope(\n  encoded: string,\n  encoding?: CryptoTypes.EncodingType,\n): string {\n  const { sealed } = deserialize({ encoded, encoding });\n  return toString(sealed, UTF8);\n}\n\nexport function serialize(params: CryptoTypes.EncodingParams): string {\n  if (decodeTypeByte(params.type) === TYPE_2) {\n    return toString(concat([params.type, params.sealed]), BASE64);\n  }\n  if (decodeTypeByte(params.type) === TYPE_1) {\n    if (typeof params.senderPublicKey === \"undefined\") {\n      throw new Error(\"Missing sender public key for type 1 envelope\");\n    }\n    return toString(\n      concat([params.type, params.senderPublicKey, params.iv, params.sealed]),\n      BASE64,\n    );\n  }\n  // default to type 0 envelope\n  return toString(concat([params.type, params.iv, params.sealed]), BASE64);\n}\n\nexport function deserialize(params: CryptoTypes.DecodingParams): CryptoTypes.EncodingParams {\n  const encoding = params.encoding || BASE64;\n  const normalizedEncoded = encoding === BASE64URL ? fromBase64URL(params.encoded) : params.encoded;\n  const bytes = fromString(normalizedEncoded, BASE64);\n  const type = bytes.slice(ZERO_INDEX, TYPE_LENGTH);\n  const slice1 = TYPE_LENGTH;\n  if (decodeTypeByte(type) === TYPE_1) {\n    const slice2 = slice1 + KEY_LENGTH;\n    const slice3 = slice2 + IV_LENGTH;\n    const senderPublicKey = bytes.slice(slice1, slice2);\n    const iv = bytes.slice(slice2, slice3);\n    const sealed = bytes.slice(slice3);\n    return { type, sealed, iv, senderPublicKey };\n  }\n  if (decodeTypeByte(type) === TYPE_2) {\n    const sealed = bytes.slice(slice1);\n    // iv is not used in type 2 envelopes\n    const iv = randomBytes(IV_LENGTH);\n    return { type, sealed, iv };\n  }\n  // default to type 0 envelope\n  const slice2 = slice1 + IV_LENGTH;\n  const iv = bytes.slice(slice1, slice2);\n  const sealed = bytes.slice(slice2);\n  return { type, sealed, iv };\n}\n\nexport function validateDecoding(\n  encoded: string,\n  opts?: CryptoTypes.DecodeOptions,\n): CryptoTypes.EncodingValidation {\n  const deserialized = deserialize({ encoded, encoding: opts?.encoding });\n  return validateEncoding({\n    type: decodeTypeByte(deserialized.type),\n    senderPublicKey:\n      typeof deserialized.senderPublicKey !== \"undefined\"\n        ? toString(deserialized.senderPublicKey, BASE16)\n        : undefined,\n    receiverPublicKey: opts?.receiverPublicKey,\n  });\n}\n\nexport function validateEncoding(opts?: CryptoTypes.EncodeOptions): CryptoTypes.EncodingValidation {\n  const type = opts?.type || TYPE_0;\n  if (type === TYPE_1) {\n    if (typeof opts?.senderPublicKey === \"undefined\") {\n      throw new Error(\"missing sender public key\");\n    }\n    if (typeof opts?.receiverPublicKey === \"undefined\") {\n      throw new Error(\"missing receiver public key\");\n    }\n  }\n  return {\n    type,\n    senderPublicKey: opts?.senderPublicKey,\n    receiverPublicKey: opts?.receiverPublicKey,\n  };\n}\n\nexport function isTypeOneEnvelope(\n  result: CryptoTypes.EncodingValidation,\n): result is CryptoTypes.TypeOneParams {\n  return (\n    result.type === TYPE_1 &&\n    typeof result.senderPublicKey === \"string\" &&\n    typeof result.receiverPublicKey === \"string\"\n  );\n}\n\nexport function isTypeTwoEnvelope(\n  result: CryptoTypes.EncodingValidation,\n): result is CryptoTypes.TypeOneParams {\n  return result.type === TYPE_2;\n}\n\nexport function getCryptoKeyFromKeyData(keyData: P256KeyDataType): Uint8Array {\n  const xBytes = fromString(fromBase64URL(keyData.x), BASE64);\n  const yBytes = fromString(fromBase64URL(keyData.y), BASE64);\n\n  return concat([new Uint8Array([0x04]), xBytes, yBytes]);\n}\n\nexport function verifyP256Jwt<T>(token: string, keyData: P256KeyDataType) {\n  const [headerBase64Url, payloadBase64Url, signatureBase64Url] = token.split(\".\");\n\n  const signatureBytes = fromString(fromBase64URL(signatureBase64Url), BASE64);\n\n  if (signatureBytes.length !== 64) {\n    throw new Error(\"Invalid signature length\");\n  }\n\n  const r = signatureBytes.slice(0, 32);\n  const s = signatureBytes.slice(32, 64);\n\n  const signingInput = `${headerBase64Url}.${payloadBase64Url}`;\n  const messageHash = sha256(signingInput);\n  const publicKey = getCryptoKeyFromKeyData(keyData);\n\n  const isValid = p256.verify(concat([r, s]), messageHash, publicKey);\n\n  if (!isValid) {\n    throw new Error(\"Invalid signature\");\n  }\n\n  const data = decodeJWT(token) as unknown as { payload: T };\n  return data.payload;\n}\n","import { RELAY_JSONRPC } from \"@walletconnect/relay-api\";\nimport { RelayerTypes } from \"@walletconnect/types\";\n\nexport const RELAYER_DEFAULT_PROTOCOL = \"irn\";\n\nexport function getRelayProtocolName(\n  opts?: RelayerTypes.RequestOptions,\n): RelayerTypes.ProtocolOptions {\n  return opts?.relay || { protocol: RELAYER_DEFAULT_PROTOCOL };\n}\n\nexport function getRelayProtocolApi(protocol: string) {\n  const jsonrpc = RELAY_JSONRPC[protocol];\n  if (typeof jsonrpc === \"undefined\") {\n    throw new Error(`Relay Protocol not supported: ${protocol}`);\n  }\n  return jsonrpc;\n}\n","import { EngineTypes, RelayerTypes } from \"@walletconnect/types\";\nimport { fromBase64 } from \"./misc.js\";\n\n// -- uri -------------------------------------------------- //\n\nexport function parseRelayParams(params: any, delimiter = \"-\"): RelayerTypes.ProtocolOptions {\n  const relay: any = {};\n  const prefix = \"relay\" + delimiter;\n  Object.keys(params).forEach((key) => {\n    if (key.startsWith(prefix)) {\n      const name = key.replace(prefix, \"\");\n      const value = params[key];\n      relay[name] = value;\n    }\n  });\n  return relay;\n}\n\nexport function parseUri(str: string): EngineTypes.UriParameters {\n  if (!str.includes(\"wc:\")) {\n    const parsed = fromBase64(str);\n    if (parsed?.includes(\"wc:\")) {\n      str = parsed;\n    }\n  }\n\n  // remove android schema prefix\n  str = str.includes(\"wc://\") ? str.replace(\"wc://\", \"\") : str;\n  // remove ios schema prefix\n  str = str.includes(\"wc:\") ? str.replace(\"wc:\", \"\") : str;\n  const pathStart: number = str.indexOf(\":\");\n  const pathEnd: number | undefined = str.indexOf(\"?\") !== -1 ? str.indexOf(\"?\") : undefined;\n  const protocol: string = str.substring(0, pathStart);\n  const path: string = str.substring(pathStart + 1, pathEnd);\n  const requiredValues = path.split(\"@\");\n  const queryString: string = typeof pathEnd !== \"undefined\" ? str.substring(pathEnd) : \"\";\n  const urlSearchParams = new URLSearchParams(queryString);\n  const queryParams = Object.fromEntries(urlSearchParams.entries());\n  const methods =\n    typeof queryParams.methods === \"string\" ? queryParams.methods.split(\",\") : undefined;\n  const result = {\n    protocol,\n    topic: parseTopic(requiredValues[0]),\n    version: parseInt(requiredValues[1], 10),\n    symKey: queryParams.symKey as string,\n    relay: parseRelayParams(queryParams),\n    methods,\n    expiryTimestamp: queryParams.expiryTimestamp\n      ? parseInt(queryParams.expiryTimestamp as string, 10)\n      : undefined,\n  };\n  return result;\n}\n\nexport function parseTopic(topic: string): string {\n  return topic.startsWith(\"//\") ? topic.substring(2) : topic;\n}\n\nexport function formatRelayParams(relay: RelayerTypes.ProtocolOptions, delimiter = \"-\") {\n  const prefix = \"relay\";\n  const params: any = {};\n  Object.keys(relay).forEach((key) => {\n    const typedKey = key as keyof typeof relay;\n    const k = prefix + delimiter + typedKey;\n    if (relay[typedKey]) {\n      params[k] = relay[typedKey];\n    }\n  });\n  return params;\n}\n\nexport function formatUri(params: EngineTypes.UriParameters): string {\n  const urlSearchParams = new URLSearchParams();\n\n  // Combine all params into a single object first\n  const allParams = {\n    ...formatRelayParams(params.relay),\n    symKey: params.symKey,\n    ...(params.expiryTimestamp && { expiryTimestamp: params.expiryTimestamp.toString() }),\n    ...(params.methods && { methods: params.methods.join(\",\") }),\n  };\n\n  // Sort and append all at once\n  Object.entries(allParams)\n    .sort(([a], [b]) => a.localeCompare(b))\n    .forEach(([key, value]) => {\n      if (value !== undefined) {\n        urlSearchParams.append(key, String(value));\n      }\n    });\n\n  return `${params.protocol}:${params.topic}@${params.version}?${urlSearchParams}`;\n}\n\nexport function getLinkModeURL(\n  universalLink: string,\n  topic: string,\n  encodedEnvelope: string,\n): string {\n  return `${universalLink}?wc_ev=${encodedEnvelope}&topic=${topic}`;\n}\n","import { ProposalTypes, SessionTypes } from \"@walletconnect/types\";\nimport { mergeArrays } from \"./misc.js\";\nimport { isConformingNamespaces, isValidNamespaces, isValidObject } from \"./validators.js\";\n\nexport function getAccountsChains(accounts: SessionTypes.Namespace[\"accounts\"]) {\n  const chains: string[] = [];\n  accounts.forEach((account) => {\n    const [chain, chainId] = account.split(\":\");\n    chains.push(`${chain}:${chainId}`);\n  });\n\n  return chains;\n}\n\nexport function getNamespacesChains(namespaces: SessionTypes.Namespaces) {\n  const chains: string[] = [];\n  Object.values(namespaces).forEach((namespace) => {\n    chains.push(...getAccountsChains(namespace.accounts));\n  });\n\n  return [...new Set(chains)];\n}\n\nexport function getNamespacesMethods(namespaces: SessionTypes.Namespaces) {\n  const methods: SessionTypes.Namespace[\"methods\"] = [];\n  Object.values(namespaces).forEach((namespace) => {\n    methods.push(...namespace.methods);\n  });\n  return [...new Set(methods)];\n}\n\nexport function getNamespacesEvents(namespaces: SessionTypes.Namespaces) {\n  const events: SessionTypes.Namespace[\"events\"] = [];\n  Object.values(namespaces).forEach((namespace) => {\n    events.push(...namespace.events);\n  });\n  return [...new Set(events)];\n}\n\nexport function getNamespacesMethodsForChainId(\n  namespaces: SessionTypes.Namespaces,\n  chainId: string,\n) {\n  const methods: SessionTypes.Namespace[\"methods\"] = [];\n  Object.values(namespaces).forEach((namespace) => {\n    const chains = getAccountsChains(namespace.accounts);\n    if (chains.includes(chainId)) methods.push(...namespace.methods);\n  });\n\n  return methods;\n}\n\nexport function getNamespacesEventsForChainId(\n  namespaces: SessionTypes.Namespaces,\n  chainId: string,\n) {\n  const events: SessionTypes.Namespace[\"events\"] = [];\n  Object.values(namespaces).forEach((namespace) => {\n    const chains = getAccountsChains(namespace.accounts);\n    if (chains.includes(chainId)) events.push(...namespace.events);\n  });\n\n  return events;\n}\n\nexport function getRequiredNamespacesFromNamespaces(\n  namespaces: SessionTypes.Namespaces,\n  caller: string,\n): ProposalTypes.RequiredNamespaces {\n  const validNamespacesError = isValidNamespaces(namespaces, caller);\n  if (validNamespacesError) throw new Error(validNamespacesError.message);\n\n  const required: ProposalTypes.RequiredNamespaces = {};\n  for (const [namespace, values] of Object.entries(namespaces)) {\n    required[namespace] = {\n      methods: values.methods,\n      events: values.events,\n      chains: values.accounts.map((account) => `${account.split(\":\")[0]}:${account.split(\":\")[1]}`),\n    };\n  }\n  return required;\n}\n\nexport type BuildApprovedNamespacesParams = {\n  proposal: ProposalTypes.Struct;\n  supportedNamespaces: Record<\n    string,\n    { chains: string[]; methods: string[]; events: string[]; accounts: string[] }\n  >;\n};\n\n/**\n * util designed for Wallets that builds namespaces structure by provided supported chains, methods, events & accounts.\n * It takes required & optional namespaces provided in the session proposal\n * along with the supported chains/methods/events/accounts by the wallet and returns a structured namespaces object\n * @param {BuildApprovedNamespacesParams} params\n * @returns {SessionTypes.Namespaces}\n */\nexport function buildApprovedNamespaces(\n  params: BuildApprovedNamespacesParams,\n): SessionTypes.Namespaces {\n  const {\n    proposal: { requiredNamespaces, optionalNamespaces = {} },\n    supportedNamespaces,\n  } = params;\n  const normalizedRequired = normalizeNamespaces(requiredNamespaces);\n  const normalizedOptional = normalizeNamespaces(optionalNamespaces);\n\n  // build approved namespaces\n  const namespaces: SessionTypes.Namespaces = {};\n  Object.keys(supportedNamespaces).forEach((namespace) => {\n    const supportedChains = supportedNamespaces[namespace].chains;\n    const supportedMethods = supportedNamespaces[namespace].methods;\n    const supportedEvents = supportedNamespaces[namespace].events;\n    const supportedAccounts = supportedNamespaces[namespace].accounts;\n\n    supportedChains.forEach((chain) => {\n      if (!supportedAccounts.some((account) => account.includes(chain))) {\n        throw new Error(`No accounts provided for chain ${chain} in namespace ${namespace}`);\n      }\n    });\n\n    namespaces[namespace] = {\n      chains: supportedChains,\n      methods: supportedMethods,\n      events: supportedEvents,\n      accounts: supportedAccounts,\n    };\n  });\n\n  // verify all required namespaces are supported\n  const err = isConformingNamespaces(requiredNamespaces, namespaces, \"approve()\");\n  if (err) throw new Error(err.message);\n\n  const approvedNamespaces: SessionTypes.Namespaces = {};\n\n  // if both required & optional namespaces are empty, return all supported namespaces by the wallet\n  if (!Object.keys(requiredNamespaces).length && !Object.keys(optionalNamespaces).length)\n    return namespaces;\n\n  // assign accounts for the required namespaces\n  Object.keys(normalizedRequired).forEach((requiredNamespace) => {\n    const chains = supportedNamespaces[requiredNamespace].chains.filter((chain) =>\n      normalizedRequired[requiredNamespace]?.chains?.includes(chain),\n    );\n    const methods = supportedNamespaces[requiredNamespace].methods.filter((method) =>\n      normalizedRequired[requiredNamespace]?.methods?.includes(method),\n    );\n    const events = supportedNamespaces[requiredNamespace].events.filter((event) =>\n      normalizedRequired[requiredNamespace]?.events?.includes(event),\n    );\n\n    const accounts = chains\n      .map((chain: string) =>\n        supportedNamespaces[requiredNamespace].accounts.filter((account: string) =>\n          account.includes(`${chain}:`),\n        ),\n      )\n      .flat();\n\n    approvedNamespaces[requiredNamespace] = {\n      chains,\n      methods,\n      events,\n      accounts,\n    };\n  });\n\n  // add optional namespaces\n  Object.keys(normalizedOptional).forEach((optionalNamespace) => {\n    if (!supportedNamespaces[optionalNamespace]) return;\n\n    const chainsToAdd = normalizedOptional[optionalNamespace]?.chains?.filter((chain) =>\n      supportedNamespaces[optionalNamespace].chains.includes(chain),\n    );\n    const methodsToAdd = supportedNamespaces[optionalNamespace].methods.filter((method) =>\n      normalizedOptional[optionalNamespace]?.methods?.includes(method),\n    );\n    const eventsToAdd = supportedNamespaces[optionalNamespace].events.filter((event) =>\n      normalizedOptional[optionalNamespace]?.events?.includes(event),\n    );\n\n    const accountsToAdd = chainsToAdd\n      ?.map((chain: string) =>\n        supportedNamespaces[optionalNamespace].accounts.filter((account: string) =>\n          account.includes(`${chain}:`),\n        ),\n      )\n      .flat();\n\n    approvedNamespaces[optionalNamespace] = {\n      chains: mergeArrays(approvedNamespaces[optionalNamespace]?.chains, chainsToAdd),\n      methods: mergeArrays(approvedNamespaces[optionalNamespace]?.methods, methodsToAdd),\n      events: mergeArrays(approvedNamespaces[optionalNamespace]?.events, eventsToAdd),\n      accounts: mergeArrays(approvedNamespaces[optionalNamespace]?.accounts, accountsToAdd),\n    };\n  });\n\n  // remove namespaces with no chains or accounts\n  for (const [namespace, values] of Object.entries(approvedNamespaces)) {\n    if (values.accounts.length === 0 || values?.chains?.length === 0) {\n      delete approvedNamespaces[namespace];\n    }\n  }\n\n  return approvedNamespaces;\n}\n\nexport function isCaipNamespace(namespace: string): boolean {\n  return namespace.includes(\":\");\n}\n\nexport function parseNamespaceKey(namespace: string) {\n  return isCaipNamespace(namespace) ? namespace.split(\":\")[0] : namespace;\n}\n\n/**\n * Converts\n * ```\n * {\n *  \"eip155:1\": {...},\n *  \"eip155:2\": {...},\n * }\n * ```\n * into\n * ```\n * {\n *  \"eip155\": {\n *      chains: [\"eip155:1\", \"eip155:2\"],\n *      ...\n *    }\n * }\n *```\n */\nexport function normalizeNamespaces(\n  namespaces: ProposalTypes.RequiredNamespaces,\n): ProposalTypes.RequiredNamespaces {\n  const normalizedNamespaces = {} as ProposalTypes.RequiredNamespaces;\n  if (!isValidObject(namespaces)) return normalizedNamespaces;\n  for (const [key, values] of Object.entries(namespaces)) {\n    const chains = isCaipNamespace(key) ? [key] : values.chains;\n    const methods = values.methods || [];\n    const events = values.events || [];\n    const normalizedKey = parseNamespaceKey(key);\n    normalizedNamespaces[normalizedKey] = {\n      ...normalizedNamespaces[normalizedKey],\n      chains: mergeArrays(chains, normalizedNamespaces[normalizedKey]?.chains),\n      methods: mergeArrays(methods, normalizedNamespaces[normalizedKey]?.methods),\n      events: mergeArrays(events, normalizedNamespaces[normalizedKey]?.events),\n    };\n  }\n  return normalizedNamespaces;\n}\n\nexport function getNamespacesFromAccounts(accounts: string[]) {\n  const namespaces: SessionTypes.Namespaces = {};\n  accounts?.forEach((account) => {\n    const [namespace, chainId] = account.split(\":\");\n    if (!namespaces[namespace]) {\n      namespaces[namespace] = {\n        accounts: [],\n        chains: [],\n        events: [],\n        methods: [],\n      };\n    }\n    namespaces[namespace].accounts.push(account);\n    namespaces[namespace].chains?.push(`${namespace}:${chainId}`);\n  });\n\n  return namespaces;\n}\n\nexport function buildNamespacesFromAuth(methods: string[], accounts: string[]) {\n  accounts = accounts.map((account) => account.replace(\"did:pkh:\", \"\"));\n\n  const namespaces = getNamespacesFromAccounts(accounts);\n\n  for (const [_, values] of Object.entries(namespaces) as [string, SessionTypes.Namespace][]) {\n    if (!values.methods) {\n      values.methods = methods;\n    } else {\n      values.methods = mergeArrays(values.methods, methods);\n    }\n    values.events = [\"chainChanged\", \"accountsChanged\"];\n  }\n  return namespaces;\n}\n\nexport function mergeRequiredAndOptionalNamespaces(\n  requiredNamespaces: ProposalTypes.RequiredNamespaces,\n  optionalNamespaces: ProposalTypes.OptionalNamespaces,\n) {\n  const normalizedRequired = normalizeNamespaces(requiredNamespaces);\n  const normalizedOptional = normalizeNamespaces(optionalNamespaces);\n\n  const mergedNamespaces: ProposalTypes.OptionalNamespaces = {};\n\n  const combinedNamespaces = Object.keys(normalizedRequired).concat(\n    Object.keys(normalizedOptional),\n  );\n\n  for (const namespace of combinedNamespaces) {\n    mergedNamespaces[namespace] = {\n      chains: mergeArrays(\n        normalizedRequired[namespace]?.chains,\n        normalizedOptional[namespace]?.chains,\n      ),\n      methods: mergeArrays(\n        normalizedRequired[namespace]?.methods,\n        normalizedOptional[namespace]?.methods,\n      ),\n      events: mergeArrays(\n        normalizedRequired[namespace]?.events,\n        normalizedOptional[namespace]?.events,\n      ),\n    };\n  }\n\n  return mergedNamespaces;\n}\n","import { SessionTypes, ProposalTypes, RelayerTypes, EngineTypes } from \"@walletconnect/types\";\nimport { ErrorResponse } from \"@walletconnect/jsonrpc-types\";\nimport {\n  getNamespacesChains,\n  getNamespacesMethodsForChainId,\n  getNamespacesEventsForChainId,\n  getAccountsChains,\n} from \"./namespaces.js\";\nimport { getSdkError, getInternalError } from \"./errors.js\";\nimport { fromBase64, hasOverlap } from \"./misc.js\";\nimport { getChainsFromNamespace } from \"./caip.js\";\n\nexport type ErrorObject = { message: string; code: number } | null;\n\n// -- types validation ----------------------------------------------------- //\n\nexport function isValidArray(arr: any, itemCondition?: (item: any) => boolean) {\n  if (Array.isArray(arr)) {\n    if (typeof itemCondition !== \"undefined\" && arr.length) {\n      return arr.every(itemCondition);\n    } else {\n      return true;\n    }\n  }\n  return false;\n}\n\nexport function isValidObject(obj: any) {\n  return Object.getPrototypeOf(obj) === Object.prototype && Object.keys(obj).length;\n}\n\nexport function isUndefined(input: any): input is undefined {\n  return typeof input === \"undefined\";\n}\n\nexport function isValidString(input: any, optional: boolean): input is string {\n  if (optional && isUndefined(input)) return true;\n\n  return typeof input === \"string\" && Boolean(input.trim().length);\n}\n\nexport function isValidNumber(input: any, optional: boolean) {\n  if (optional && isUndefined(input)) return true;\n\n  return typeof input === \"number\" && !isNaN(input);\n}\n\n// -- protocol validation -------------------------------------------------- //\n\nexport function isSessionCompatible(session: SessionTypes.Struct, params: EngineTypes.FindParams) {\n  const { requiredNamespaces } = params;\n  const sessionKeys = Object.keys(session.namespaces);\n  const paramsKeys = Object.keys(requiredNamespaces);\n  let compatible = true;\n\n  if (!hasOverlap(paramsKeys, sessionKeys)) return false;\n\n  sessionKeys.forEach((key) => {\n    const { accounts, methods, events } = session.namespaces[key];\n    const chains = getAccountsChains(accounts);\n    const requiredNamespace = requiredNamespaces[key];\n    if (\n      !hasOverlap(getChainsFromNamespace(key, requiredNamespace), chains) ||\n      !hasOverlap(requiredNamespace.methods, methods) ||\n      !hasOverlap(requiredNamespace.events, events)\n    ) {\n      compatible = false;\n    }\n  });\n\n  return compatible;\n}\n\nexport function isValidChainId(value: any) {\n  if (isValidString(value, false) && value.includes(\":\")) {\n    const split = value.split(\":\");\n    return split.length === 2;\n  }\n  return false;\n}\n\nexport function isValidAccountId(value: any) {\n  if (isValidString(value, false) && value.includes(\":\")) {\n    const split = value.split(\":\");\n    if (split.length === 3) {\n      const chainId = split[0] + \":\" + split[1];\n      return !!split[2] && isValidChainId(chainId);\n    }\n  }\n  return false;\n}\n\nexport function isValidUrl(value: any) {\n  function validateUrl(blob: string) {\n    try {\n      const url = new URL(blob);\n      return typeof url !== \"undefined\";\n    } catch (e) {\n      return false;\n    }\n  }\n  try {\n    if (isValidString(value, false)) {\n      const isValid = validateUrl(value);\n      if (isValid) return true;\n\n      const decoded = fromBase64(value);\n      return validateUrl(decoded);\n    }\n  } catch (e) {}\n  return false;\n}\n\nexport function isProposalStruct(input: any): input is ProposalTypes.Struct {\n  return input?.proposer?.publicKey;\n}\n\nexport function isSessionStruct(input: any): input is SessionTypes.Struct {\n  return input?.topic;\n}\n\nexport function isValidController(input: any, method: string) {\n  let error: ErrorObject = null;\n  if (!isValidString(input?.publicKey, false)) {\n    error = getInternalError(\n      \"MISSING_OR_INVALID\",\n      `${method} controller public key should be a string`,\n    );\n  }\n\n  return error;\n}\n\nexport function isValidNamespaceMethodsOrEvents(input: any): input is string {\n  let valid = true;\n  if (isValidArray(input)) {\n    if (input.length) {\n      valid = input.every((item: any) => isValidString(item, false));\n    }\n  } else {\n    valid = false;\n  }\n\n  return valid;\n}\n\nexport function isValidChains(key: string, chains: any, context: string) {\n  let error: ErrorObject = null;\n\n  if (isValidArray(chains) && chains.length) {\n    chains.forEach((chain: any) => {\n      if (error) return;\n      if (!isValidChainId(chain)) {\n        error = getSdkError(\n          \"UNSUPPORTED_CHAINS\",\n          `${context}, chain ${chain} should be a string and conform to \"namespace:chainId\" format`,\n        );\n      }\n    });\n  } else if (!isValidChainId(key)) {\n    error = getSdkError(\n      \"UNSUPPORTED_CHAINS\",\n      `${context}, chains must be defined as \"namespace:chainId\" e.g. \"eip155:1\": {...} in the namespace key OR as an array of CAIP-2 chainIds e.g. eip155: { chains: [\"eip155:1\", \"eip155:5\"] }`,\n    );\n  }\n\n  return error;\n}\n\nexport function isValidNamespaceChains(namespaces: any, method: string, type: string) {\n  let error: ErrorObject = null;\n  Object.entries(namespaces).forEach(([key, namespace]: [string, any]) => {\n    if (error) return;\n    const validChainsError = isValidChains(\n      key,\n      getChainsFromNamespace(key, namespace),\n      `${method} ${type}`,\n    );\n    if (validChainsError) {\n      error = validChainsError;\n    }\n  });\n\n  return error;\n}\n\nexport function isValidAccounts(accounts: any, context: string) {\n  let error: ErrorObject = null;\n  if (isValidArray(accounts)) {\n    accounts.forEach((account: any) => {\n      if (error) return;\n      if (!isValidAccountId(account)) {\n        error = getSdkError(\n          \"UNSUPPORTED_ACCOUNTS\",\n          `${context}, account ${account} should be a string and conform to \"namespace:chainId:address\" format`,\n        );\n      }\n    });\n  } else {\n    error = getSdkError(\n      \"UNSUPPORTED_ACCOUNTS\",\n      `${context}, accounts should be an array of strings conforming to \"namespace:chainId:address\" format`,\n    );\n  }\n\n  return error;\n}\n\nexport function isValidNamespaceAccounts(input: any, method: string) {\n  let error: ErrorObject = null;\n  Object.values(input).forEach((namespace: any) => {\n    if (error) return;\n    const validAccountsError = isValidAccounts(namespace?.accounts, `${method} namespace`);\n    if (validAccountsError) {\n      error = validAccountsError;\n    }\n  });\n\n  return error;\n}\n\nexport function isValidActions(namespace: any, context: string) {\n  let error: ErrorObject = null;\n  if (!isValidNamespaceMethodsOrEvents(namespace?.methods)) {\n    error = getSdkError(\n      \"UNSUPPORTED_METHODS\",\n      `${context}, methods should be an array of strings or empty array for no methods`,\n    );\n  } else if (!isValidNamespaceMethodsOrEvents(namespace?.events)) {\n    error = getSdkError(\n      \"UNSUPPORTED_EVENTS\",\n      `${context}, events should be an array of strings or empty array for no events`,\n    );\n  }\n\n  return error;\n}\n\nexport function isValidNamespaceActions(input: any, method: string) {\n  let error: ErrorObject = null;\n  Object.values(input).forEach((namespace: any) => {\n    if (error) return;\n    const validActionsError = isValidActions(namespace, `${method}, namespace`);\n    if (validActionsError) {\n      error = validActionsError;\n    }\n  });\n\n  return error;\n}\n\nexport function isValidRequiredNamespaces(input: any, method: string, type: string) {\n  let error: ErrorObject = null;\n  if (input && isValidObject(input)) {\n    const validActionsError = isValidNamespaceActions(input, method);\n    if (validActionsError) {\n      error = validActionsError;\n    }\n    const validChainsError = isValidNamespaceChains(input, method, type);\n    if (validChainsError) {\n      error = validChainsError;\n    }\n  } else {\n    error = getInternalError(\n      \"MISSING_OR_INVALID\",\n      `${method}, ${type} should be an object with data`,\n    );\n  }\n\n  return error;\n}\n\nexport function isValidNamespaces(input: any, method: string) {\n  let error: ErrorObject = null;\n  if (input && isValidObject(input)) {\n    const validActionsError = isValidNamespaceActions(input, method);\n    if (validActionsError) {\n      error = validActionsError;\n    }\n    const validAccountsError = isValidNamespaceAccounts(input, method);\n    if (validAccountsError) {\n      error = validAccountsError;\n    }\n  } else {\n    error = getInternalError(\n      \"MISSING_OR_INVALID\",\n      `${method}, namespaces should be an object with data`,\n    );\n  }\n\n  return error;\n}\n\nexport function isValidRelay(input: any): input is RelayerTypes.ProtocolOptions {\n  return isValidString(input.protocol, true);\n}\n\nexport function isValidRelays(\n  input: any,\n  optional: boolean,\n): input is RelayerTypes.ProtocolOptions[] {\n  let valid = false;\n\n  if (optional && !input) valid = true;\n  else if (input && isValidArray(input) && input.length) {\n    input.forEach((relay: RelayerTypes.ProtocolOptions) => {\n      valid = isValidRelay(relay);\n    });\n  }\n\n  return valid;\n}\n\nexport function isValidId(input: any) {\n  return typeof input === \"number\";\n}\n\nexport function isValidParams(input: any) {\n  // eslint-disable-next-line valid-typeof\n  return typeof input !== \"undefined\" && typeof input !== null;\n}\n\nexport function isValidErrorReason(input: any): input is ErrorResponse {\n  if (!input) return false;\n  if (typeof input !== \"object\") return false;\n  if (!input.code || !isValidNumber(input.code, false)) return false;\n  if (!input.message || !isValidString(input.message, false)) return false;\n\n  return true;\n}\n\nexport function isValidRequest(request: any) {\n  if (isUndefined(request)) return false;\n  if (!isValidString(request.method, false)) return false;\n  return true;\n}\n\nexport function isValidResponse(response: any) {\n  if (isUndefined(response)) return false;\n  if (isUndefined(response.result) && isUndefined(response.error)) return false;\n  if (!isValidNumber(response.id, false)) return false;\n  if (!isValidString(response.jsonrpc, false)) return false;\n  return true;\n}\n\nexport function isValidEvent(event: any) {\n  if (isUndefined(event)) return false;\n  if (!isValidString(event.name, false)) return false;\n  return true;\n}\n\nexport function isValidNamespacesChainId(namespaces: SessionTypes.Namespaces, chainId: string) {\n  if (!isValidChainId(chainId)) return false;\n  const chains = getNamespacesChains(namespaces);\n  if (!chains.includes(chainId)) return false;\n\n  return true;\n}\n\nexport function isValidNamespacesRequest(\n  namespaces: SessionTypes.Namespaces,\n  chainId: string,\n  method: string,\n) {\n  if (!isValidString(method, false)) return false;\n  const methods = getNamespacesMethodsForChainId(namespaces, chainId);\n  return methods.includes(method);\n}\n\nexport function isValidNamespacesEvent(\n  namespaces: SessionTypes.Namespaces,\n  chainId: string,\n  eventName: string,\n) {\n  if (!isValidString(eventName, false)) return false;\n  const events = getNamespacesEventsForChainId(namespaces, chainId);\n  return events.includes(eventName);\n}\n\nexport function isConformingNamespaces(\n  requiredNamespaces: ProposalTypes.RequiredNamespaces,\n  namespaces: SessionTypes.Namespaces,\n  context: string,\n) {\n  let error: ErrorObject = null;\n\n  const parsedRequired = parseNamespaces(requiredNamespaces);\n  const parsedApproved = parseApprovedNamespaces(namespaces);\n  const requiredChains = Object.keys(parsedRequired);\n  const approvedChains = Object.keys(parsedApproved);\n\n  const uniqueRequired = filterDuplicateNamespaces(Object.keys(requiredNamespaces));\n  const uniqueApproved = filterDuplicateNamespaces(Object.keys(namespaces));\n  const missingRequiredNamespaces = uniqueRequired.filter(\n    (namespace) => !uniqueApproved.includes(namespace),\n  );\n\n  if (missingRequiredNamespaces.length) {\n    error = getInternalError(\n      \"NON_CONFORMING_NAMESPACES\",\n      `${context} namespaces keys don't satisfy requiredNamespaces.\n      Required: ${missingRequiredNamespaces.toString()}\n      Received: ${Object.keys(namespaces).toString()}`,\n    );\n  }\n\n  if (!hasOverlap(requiredChains, approvedChains)) {\n    error = getInternalError(\n      \"NON_CONFORMING_NAMESPACES\",\n      `${context} namespaces chains don't satisfy required namespaces.\n      Required: ${requiredChains.toString()}\n      Approved: ${approvedChains.toString()}`,\n    );\n  }\n\n  // validate inline defined chains with approved accounts\n  Object.keys(namespaces).forEach((chain) => {\n    if (!chain.includes(\":\")) return;\n    if (error) return;\n    const chains = getAccountsChains(namespaces[chain].accounts);\n    if (!chains.includes(chain)) {\n      error = getInternalError(\n        \"NON_CONFORMING_NAMESPACES\",\n        `${context} namespaces accounts don't satisfy namespace accounts for ${chain}\n        Required: ${chain}\n        Approved: ${chains.toString()}`,\n      );\n    }\n  });\n\n  requiredChains.forEach((chain) => {\n    if (error) return;\n\n    if (!hasOverlap(parsedRequired[chain].methods, parsedApproved[chain].methods)) {\n      error = getInternalError(\n        \"NON_CONFORMING_NAMESPACES\",\n        `${context} namespaces methods don't satisfy namespace methods for ${chain}`,\n      );\n    } else if (!hasOverlap(parsedRequired[chain].events, parsedApproved[chain].events)) {\n      error = getInternalError(\n        \"NON_CONFORMING_NAMESPACES\",\n        `${context} namespaces events don't satisfy namespace events for ${chain}`,\n      );\n    }\n  });\n\n  return error;\n}\n\nfunction parseNamespaces(namespaces: ProposalTypes.RequiredNamespaces) {\n  const parsed: ProposalTypes.RequiredNamespaces = {};\n  Object.keys(namespaces).forEach((key) => {\n    // e.g. `eip155:1`\n    const isInlineChainDefinition = key.includes(\":\");\n\n    if (isInlineChainDefinition) {\n      parsed[key] = namespaces[key];\n    } else {\n      namespaces[key].chains?.forEach((chain) => {\n        parsed[chain] = {\n          methods: namespaces[key].methods,\n          events: namespaces[key].events,\n        };\n      });\n    }\n  });\n  return parsed;\n}\n\nfunction filterDuplicateNamespaces(namespaces: string[]) {\n  return [\n    ...new Set(\n      namespaces.map((namespace) =>\n        namespace.includes(\":\") ? namespace.split(\":\")[0] : namespace,\n      ),\n    ),\n  ];\n}\n\nfunction parseApprovedNamespaces(namespaces: SessionTypes.Namespaces) {\n  const parsed: SessionTypes.Namespaces = {};\n  Object.keys(namespaces).forEach((key) => {\n    const isInlineChainDefinition = key.includes(\":\");\n    if (isInlineChainDefinition) {\n      parsed[key] = namespaces[key];\n    } else {\n      const chains = getAccountsChains(namespaces[key].accounts);\n      chains?.forEach((chain) => {\n        parsed[chain] = {\n          accounts: namespaces[key].accounts.filter((account: string) =>\n            account.includes(`${chain}:`),\n          ),\n          methods: namespaces[key].methods,\n          events: namespaces[key].events,\n        };\n      });\n    }\n  });\n  return parsed;\n}\n\nexport function isValidRequestExpiry(expiry: number, boundaries: { min: number; max: number }) {\n  return isValidNumber(expiry, false) && expiry <= boundaries.max && expiry >= boundaries.min;\n}\n","import { getDocument } from \"@walletconnect/window-getters\";\nimport { getEnvironment, ENV_MAP, isBrowser, isReactNative } from \"./misc.js\";\n\nexport function isOnline(): Promise<boolean> {\n  const env = getEnvironment();\n  return new Promise((resolve) => {\n    switch (env) {\n      case ENV_MAP.browser:\n        resolve(getBrowserOnlineStatus());\n        break;\n      case ENV_MAP.reactNative:\n        resolve(getReactNativeOnlineStatus());\n        break;\n      case ENV_MAP.node:\n        resolve(getNodeOnlineStatus());\n        break;\n      default:\n        resolve(true);\n    }\n  });\n}\n\nexport function getBrowserOnlineStatus() {\n  return isBrowser() && navigator?.onLine;\n}\n\nexport async function getReactNativeOnlineStatus(): Promise<boolean> {\n  // global.NetInfo is set in react-native-compat\n  if (isReactNative() && typeof global !== \"undefined\" && (global as any)?.NetInfo) {\n    const state = await (global as any)?.NetInfo.fetch();\n    return state?.isConnected;\n  }\n  // fallback to true if global.NetInfo is undefined, meaning an older version of react-native-compat is used\n  return true;\n}\n\nexport function getNodeOnlineStatus() {\n  /**\n   * TODO: need to implement\n   */\n  return true;\n}\n\nexport function subscribeToNetworkChange(callbackHandler: (connected: boolean) => void) {\n  const env = getEnvironment();\n  switch (env) {\n    case ENV_MAP.browser:\n      subscribeToBrowserNetworkChange(callbackHandler);\n      break;\n    case ENV_MAP.reactNative:\n      subscribeToReactNativeNetworkChange(callbackHandler);\n      break;\n    case ENV_MAP.node:\n      // wip: need to implement\n      break;\n    default:\n      break;\n  }\n}\n\nexport function subscribeToBrowserNetworkChange(callbackHandler: (connected: boolean) => void) {\n  if (!isReactNative() && isBrowser()) {\n    window.addEventListener(\"online\", () => callbackHandler(true));\n    window.addEventListener(\"offline\", () => callbackHandler(false));\n  }\n}\n\n// global.NetInfo is set in react-native-compat\nexport function subscribeToReactNativeNetworkChange(callbackHandler: (connected: boolean) => void) {\n  if (isReactNative() && typeof global !== \"undefined\" && (global as any)?.NetInfo) {\n    (global as any)?.NetInfo.addEventListener((state: any) => callbackHandler(state?.isConnected));\n  }\n}\n\nexport function isAppVisible(): boolean {\n  if (isBrowser() && getDocument()) {\n    return getDocument()?.visibilityState === \"visible\";\n  }\n  // TODO: implement reliable visibility check for react-native\n  // node.js does not have a visibilityState\n  return true;\n}\n","const memoryStore: Record<string, any> = {};\n\nexport abstract class MemoryStore {\n  static get<T = unknown>(key: string) {\n    return memoryStore[key] as T | undefined;\n  }\n\n  static set(key: string, value: unknown) {\n    memoryStore[key] = value;\n  }\n\n  static delete(key: string) {\n    delete memoryStore[key];\n  }\n}\n","import { base58 } from \"@scure/base\";\nimport { blake2b } from \"blakejs\";\nimport { toString } from \"uint8arrays\";\n\nexport function ss58AddressToPublicKey(address: string): Uint8Array {\n  const decoded = base58.decode(address);\n  if (decoded.length < 33) throw new Error(\"Too short to contain a public key\");\n  return decoded.slice(1, 33);\n}\n\nexport function addSignatureToExtrinsic({\n  publicKey,\n  signature,\n  payload,\n}: {\n  publicKey: Uint8Array;\n  signature: Uint8Array;\n  payload: any;\n}): Uint8Array {\n  const method = hexToBytes(payload.method);\n  const version = parseInt(payload.version?.toString() || \"4\");\n  const extrinsicVersion = 0x80 | version;\n\n  const signatureType = guessSignatureTypeFromAddress(payload.address);\n\n  const era = payload.era === \"00\" ? new Uint8Array([0x00]) : hexToBytes(payload.era);\n  if (era.length !== 1 && era.length !== 2) throw new Error(\"Invalid era length\");\n\n  const nonce = parseInt(payload.nonce, 16);\n  const nonceBytes = new Uint8Array([nonce & 0xff, (nonce >> 8) & 0xff]);\n\n  const tip = BigInt(`0x${normalizeHex(payload.tip)}`);\n  const tipBytes = compactEncodeBigInt(tip);\n\n  const body = new Uint8Array([\n    0x00, // MultiAddress::Id\n    ...publicKey,\n    signatureType,\n    ...signature,\n    ...era,\n    ...nonceBytes,\n    ...tipBytes,\n    ...method,\n  ]);\n\n  const lengthPrefix = compactEncodeInt(body.length + 1);\n  return new Uint8Array([...lengthPrefix, extrinsicVersion, ...body]);\n}\n\nexport function deriveExtrinsicHash(signedExtrinsicHex: string): string {\n  const bytes = hexToBytes(signedExtrinsicHex);\n  const hash = blake2b(bytes, undefined, 32);\n  return \"0x\" + toString(hash, \"base16\");\n}\n\nfunction hexToBytes(hex: string): Uint8Array {\n  return new Uint8Array(\n    hex\n      .replace(/^0x/, \"\")\n      .match(/.{1,2}/g)!\n      .map((byte) => parseInt(byte, 16)),\n  );\n}\n\nfunction normalizeHex(input: string): string {\n  return input.startsWith(\"0x\") ? input.slice(2) : input;\n}\n\nfunction guessSignatureTypeFromAddress(address: string): number {\n  const decoded = base58.decode(address);\n  const prefix = decoded[0];\n  if (prefix === 42) return 0x00; // Ed25519\n  if (prefix === 60) return 0x02; // Secp256k1\n  return 0x01; // Default Sr25519\n}\n\nfunction compactEncodeInt(value: number): Uint8Array {\n  if (value < 1 << 6) {\n    return new Uint8Array([value << 2]);\n  } else if (value < 1 << 14) {\n    const val = (value << 2) | 0x01;\n    return new Uint8Array([val & 0xff, (val >> 8) & 0xff]);\n  } else if (value < 1 << 30) {\n    const val = (value << 2) | 0x02;\n    return new Uint8Array([val & 0xff, (val >> 8) & 0xff, (val >> 16) & 0xff, (val >> 24) & 0xff]);\n  } else {\n    throw new Error(\"Compact encoding > 2^30 not supported\");\n  }\n}\n\nfunction compactEncodeBigInt(value: bigint): Uint8Array {\n  if (value < 1n << 6n) {\n    return new Uint8Array([Number(value << 2n)]);\n  } else if (value < 1n << 14n) {\n    const val = (value << 2n) | 0x01n;\n    return new Uint8Array([Number(val & 0xffn), Number((val >> 8n) & 0xffn)]);\n  } else if (value < 1n << 30n) {\n    const val = (value << 2n) | 0x02n;\n    return new Uint8Array([\n      Number(val & 0xffn),\n      Number((val >> 8n) & 0xffn),\n      Number((val >> 16n) & 0xffn),\n      Number((val >> 24n) & 0xffn),\n    ]);\n  } else {\n    throw new Error(\"BigInt compact encoding not supported > 2^30\");\n  }\n}\n\nexport function buildSignedExtrinsicHash(payload: {\n  transaction: {\n    method: string;\n    era: string;\n    nonce: string;\n    tip: string;\n    mode: string;\n    address: string;\n    version: number;\n  };\n  signature: string;\n}) {\n  const signature = hexToBytes(payload.signature);\n\n  const publicKey = ss58AddressToPublicKey(payload.transaction.address);\n  const signed = addSignatureToExtrinsic({ publicKey, signature, payload: payload.transaction });\n  const hexSigned = toString(signed, \"base16\");\n  const hash = deriveExtrinsicHash(hexSigned);\n\n  return hash;\n}\n","import { generatePlatformLogger, Logger } from \"@walletconnect/logger\";\n\nexport function createLogger({ logger, name }: { logger: Logger | string; name: string }) {\n  const loggerInstance =\n    typeof logger === \"string\"\n      ? generatePlatformLogger({\n          opts: {\n            level: logger,\n            name,\n          },\n        }).logger\n      : logger;\n  loggerInstance.level = typeof logger === \"string\" ? logger : logger.level;\n  return loggerInstance as Logger;\n}\n"],"names":["CAIP_DELIMITER","parseChainId","chain","namespace","reference","formatChainId","params","parseAccountId","account","address","formatAccountId","getUniqueValues","array","parser","unique","str","value","getAddressFromAccount","getChainFromAccount","formatAccountWithChain","getAddressesFromAccounts","accounts","getChainsFromAccounts","getAccountsFromNamespaces","namespaces","keys","key","ns","getChainsFromNamespaces","chains","getChainsFromRequiredNamespaces","requiredNamespaces","getChainsFromNamespace","namespaceProps","SDK_ERRORS","INTERNAL_ERRORS","getInternalError","context","message","code","getSdkError","REACT_NATIVE_PRODUCT","ENV_MAP","EMPTY_SPACE","COLON","SLASH","DEFAULT_DEPTH","ONE_THOUSAND","SDK_TYPE","isNode","isReactNative","getDocument","getNavigator","isAndroid","isIos","isBrowser","getEnvironment","getAppId","appendToQueryString","queryString","newQueryParams","urlSearchParams","a","b","populateAppMetadata","metadata","appMetadata","getAppMetadata","icon","error","getWindowMetadata","getRelayClientMetadata","protocol","version","env","getLocation","getJavascriptOS","OS","Version","info","detect","os","getJavascriptID","formatUA","sdkVersion","id","formatRelayRpcUrl","relayUrl","auth","projectId","useOnCloseEvent","bundleId","packageName","splitUrl","ua","getHttpUrl","url","domain","assertType","obj","type","parseContextNames","depth","getLastItems","formatMessageContext","hasOverlap","x","arr","mapToObj","map","objToMap","mapEntries","cb","res","enumify","capitalizeWord","word","c","capitalize","w","createDelayedPromise","expiry","FIVE_MINUTES","expireErrorMessage","timeout","toMiliseconds","cacheResolve","cacheReject","cacheTimeout","result","promiseResolve","promiseReject","expiredError","err","createExpiringPromise","promise","resolve","reject","formatExpirerTarget","formatTopicTarget","topic","formatIdTarget","parseExpirerTarget","target","parsed","calcExpiry","ttl","now","fromMiliseconds","isExpired","engineEvent","event","mergeArrays","handleDeeplinkRedirect","wcDeepLink","deeplink","link","formatDeeplinkUrl","openDeeplink","requestId","sessionTopic","payload","startApp","toBase64","isIframe","isTelegram","getDeepLink","storage","getCommonValuesInArrays","arr1","arr2","getSearchParamFromURL","param","index","uuidv4","r","isTestRun","input","removePadding","bytes","chars","i","encoded","fromBase64","encodedString","padded","binary","sleep","ms","LimitedSet","limit","item","firstKey","DEFAULT_RPC_URL","base64ToBytes","b64","hashEthereumMessage","prefix","prefixedMessage","toString","keccak_256","verifySignature","reconstructedMessage","cacaoSignature","chainId","baseRpcUrl","isValidEip191Signature","isValidEip1271Signature","signature","parsedSignature","Signature","Secp256k1","parsedChain","eip1271MagicValue","dynamicTypeOffset","nonPrefixedSignature","dynamicTypeLength","nonPrefixedHashedMessage","data","response","generateJsonRpcId","extractSolanaTransactionId","solanaTransaction","signatureCount","signatureEndPos","signatureBytes","base58","getSuiDigest","transaction","txBytes","typeTagBytes","dataWithTag","hash","blake2b","getNearTransactionIdFromSignedTransaction","signedTransaction","sha256","getNearUint8ArrayFromBytes","getAlgorandTransactionId","signedTxnBytes","unsignedTxn","msgpackDecode","serializedUnsignedTxn","msgpackEncode","txPrefix","toHash","concat","sha512_256","base32","encodeVarint","v","getSignDirectHash","bodyBytes","authInfoBytes","chunks","txRawBytes","hashBytes","getWalletSendCallsHashes","hashes","txHashes","didPrefix","NAMESPACE_DISPLAY_NAMES","getNamespaceNameFromNamespace","getDidAddressSegments","iss","getDidChainId","segments","getDidAddressNamespace","getNamespacedDidChainId","getDidAddress","validateSignedCacao","cacao","reconstructed","formatMessage","walletAddress","didNamespace","header","statement","uri","nonce","issuedAt","expirationTime","notBefore","resources","resource","recap","getRecapFromResources","decoded","decodeRecap","formatStatementFromRecap","val","buildAuthObject","requestPayload","populateAuthPayload","authPayload","methods","requested","supportedChains","requestedRecaps","getDecodedRecapFromResources","isValidRecap","getRecapResource","updatedResources","actions","getReCapActions","supportedActions","formattedActions","assignAbilityToActions","updatedRecap","addResourceToRecap","encodeRecap","buildRecapStatement","isRecap","recapHasResource","getRecapAbilitiesFromResource","action","abilities","ability","base64Encode","json","base64Decode","resourceAbilities","limits","createRecap","baseRecap","createEncodedRecap","mergeEncodedRecaps","recap1","recap2","decoded1","decoded2","merged","mergeRecaps","mergedRecap","base","statementForRecap","currentCounter","uniqueAbilities","recapStatemet","recapStatement","getMethodsFromRecap","getChainsFromRecap","BASE10","BASE16","BASE64","BASE64URL","UTF8","TYPE_0","TYPE_1","TYPE_2","ZERO_INDEX","TYPE_LENGTH","IV_LENGTH","KEY_LENGTH","generateKeyPair","privateKey","x25519","publicKey","generateRandomBytes32","random","randomBytes","deriveSymKey","privateKeyA","publicKeyB","sharedKey","fromString","symKey","hkdf","hashKey","hashMessage","encodeTypeByte","decodeTypeByte","byte","toBase64URL","base64","fromBase64URL","base64url","padding","encrypt","senderPublicKey","iv","sealed","chacha20poly1305","serialize","decrypt","deserialize","encodeTypeTwoEnvelope","encoding","decodeTypeTwoEnvelope","normalizedEncoded","slice1","slice2","slice3","validateDecoding","opts","deserialized","validateEncoding","isTypeOneEnvelope","isTypeTwoEnvelope","getCryptoKeyFromKeyData","keyData","xBytes","yBytes","verifyP256Jwt","token","headerBase64Url","payloadBase64Url","signatureBase64Url","s","signingInput","messageHash","p256","decodeJWT","RELAYER_DEFAULT_PROTOCOL","getRelayProtocolName","getRelayProtocolApi","jsonrpc","RELAY_JSONRPC","parseRelayParams","delimiter","relay","name","parseUri","pathStart","pathEnd","requiredValues","queryParams","parseTopic","formatRelayParams","typedKey","k","formatUri","allParams","getLinkModeURL","universalLink","encodedEnvelope","getAccountsChains","getNamespacesChains","getNamespacesMethods","getNamespacesEvents","events","getNamespacesMethodsForChainId","getNamespacesEventsForChainId","getRequiredNamespacesFromNamespaces","caller","validNamespacesError","isValidNamespaces","required","values","buildApprovedNamespaces","optionalNamespaces","supportedNamespaces","normalizedRequired","normalizeNamespaces","normalizedOptional","supportedMethods","supportedEvents","supportedAccounts","isConformingNamespaces","approvedNamespaces","requiredNamespace","method","optionalNamespace","chainsToAdd","methodsToAdd","eventsToAdd","accountsToAdd","isCaipNamespace","parseNamespaceKey","normalizedNamespaces","isValidObject","normalizedKey","getNamespacesFromAccounts","buildNamespacesFromAuth","_","mergeRequiredAndOptionalNamespaces","mergedNamespaces","combinedNamespaces","isValidArray","itemCondition","isUndefined","isValidString","optional","isValidNumber","isSessionCompatible","session","sessionKeys","paramsKeys","compatible","isValidChainId","isValidAccountId","split","isValidUrl","validateUrl","blob","isProposalStruct","isSessionStruct","isValidController","isValidNamespaceMethodsOrEvents","valid","isValidChains","isValidNamespaceChains","validChainsError","isValidAccounts","isValidNamespaceAccounts","validAccountsError","isValidActions","isValidNamespaceActions","validActionsError","isValidRequiredNamespaces","isValidRelay","isValidRelays","isValidId","isValidParams","isValidErrorReason","isValidRequest","request","isValidResponse","isValidEvent","isValidNamespacesChainId","isValidNamespacesRequest","isValidNamespacesEvent","eventName","parsedRequired","parseNamespaces","parsedApproved","parseApprovedNamespaces","requiredChains","approvedChains","uniqueRequired","filterDuplicateNamespaces","uniqueApproved","missingRequiredNamespaces","isValidRequestExpiry","boundaries","isOnline","getBrowserOnlineStatus","getReactNativeOnlineStatus","getNodeOnlineStatus","subscribeToNetworkChange","callbackHandler","subscribeToBrowserNetworkChange","subscribeToReactNativeNetworkChange","state","isAppVisible","memoryStore","MemoryStore","ss58AddressToPublicKey","addSignatureToExtrinsic","hexToBytes","extrinsicVersion","signatureType","guessSignatureTypeFromAddress","era","nonceBytes","tip","normalizeHex","tipBytes","compactEncodeBigInt","body","lengthPrefix","compactEncodeInt","deriveExtrinsicHash","signedExtrinsicHex","hex","buildSignedExtrinsicHash","signed","hexSigned","createLogger","logger","loggerInstance","generatePlatformLogger"],"mappings":"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"}