@bigio/better-auth-electron 1.0.2 → 1.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/clean-stores/index.js","../node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/atom/index.js","../src/options/electron-plugin-options.ts","../src/utils/electron-plugin-env.ts","../node_modules/.pnpm/@oslojs+encoding@1.1.0/node_modules/@oslojs/encoding/dist/base32.js","../node_modules/.pnpm/@oslojs+encoding@1.1.0/node_modules/@oslojs/encoding/dist/base64.js","../src/utils/electron-plugin-utils.ts","../src/renderer/electron-renderer-plugin.ts"],"names":["window","EncodingPadding","DecodingPadding","z"],"mappings":"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","file":"renderer.js","sourcesContent":["import { cleanTasks } from '../task/index.js'\n\nexport let clean = Symbol('clean')\n\nexport let cleanStores = (...stores) => {\n if (process.env.NODE_ENV === 'production') {\n throw new Error(\n 'cleanStores() can be used only during development or tests'\n )\n }\n cleanTasks()\n for (let $store of stores) {\n if ($store) {\n if ($store.mocked) delete $store.mocked\n if ($store[clean]) $store[clean]()\n }\n }\n}\n","import { clean } from '../clean-stores/index.js'\n\nlet listenerQueue = []\nlet lqIndex = 0\nconst QUEUE_ITEMS_PER_LISTENER = 4\nexport let epoch = 0\n\n/* @__NO_SIDE_EFFECTS__ */\nexport const atom = initialValue => {\n let listeners = []\n let $atom = {\n get() {\n if (!$atom.lc) {\n $atom.listen(() => {})()\n }\n return $atom.value\n },\n lc: 0,\n listen(listener) {\n $atom.lc = listeners.push(listener)\n\n return () => {\n for (\n let i = lqIndex + QUEUE_ITEMS_PER_LISTENER;\n i < listenerQueue.length;\n\n ) {\n if (listenerQueue[i] === listener) {\n listenerQueue.splice(i, QUEUE_ITEMS_PER_LISTENER)\n } else {\n i += QUEUE_ITEMS_PER_LISTENER\n }\n }\n\n let index = listeners.indexOf(listener)\n if (~index) {\n listeners.splice(index, 1)\n if (!--$atom.lc) $atom.off()\n }\n }\n },\n notify(oldValue, changedKey) {\n epoch++\n let runListenerQueue = !listenerQueue.length\n for (let listener of listeners) {\n listenerQueue.push(listener, $atom.value, oldValue, changedKey)\n }\n\n if (runListenerQueue) {\n for (\n lqIndex = 0;\n lqIndex < listenerQueue.length;\n lqIndex += QUEUE_ITEMS_PER_LISTENER\n ) {\n listenerQueue[lqIndex](\n listenerQueue[lqIndex + 1],\n listenerQueue[lqIndex + 2],\n listenerQueue[lqIndex + 3]\n )\n }\n listenerQueue.length = 0\n }\n },\n /* It will be called on last listener unsubscribing.\n We will redefine it in onMount and onStop. */\n off() {},\n set(newValue) {\n let oldValue = $atom.value\n if (oldValue !== newValue) {\n $atom.value = newValue\n $atom.notify(oldValue)\n }\n },\n subscribe(listener) {\n let unbind = $atom.listen(listener)\n listener($atom.value)\n return unbind\n },\n value: initialValue\n }\n\n if (process.env.NODE_ENV !== 'production') {\n $atom[clean] = () => {\n listeners = []\n $atom.lc = 0\n $atom.off()\n }\n }\n\n return $atom\n}\n\nexport const readonlyType = store => store\n","// root/src/utils/electron-plugin-options.ts\n\nimport type { BetterAuthClientOptions, Session, User } from 'better-auth'\nimport type { AuthClient } from 'better-auth/client'\nimport type { BrowserWindow } from 'electron'\n// import { renderOAuthPage } from '../preact/electron-login'\n// import type { BigIOError } from '../utils/electron-plugin-env'\n\nexport type ElectronServerPluginOptions = {\n /**\n * The custom protocol scheme used for deep linking authentication.\n * @remarks\n * This should match the protocol registered in your Electron Main Process.\n * Do not include the `://` suffix.\n * @example \"bigio\" to be like \"bigio://better-auth-callback\"\n */\n ELECTRON_SCHEME: string\n PROVIDERS: string[]\n // baseURL?: string\n // cookiePrefix?: string\n // logger?: typeof bigIOLogger | typeof logsgh\n debugMode?: boolean\n WEB_ERROR_PAGE_URL?: string\n WEB_OAUTH_SIGNIN_CALLBACK_PATHNAME?: string\n ELECTRON_TO_BACKEND_HOST_PATH?: string\n ELECTRON_APP_HOST?: string\n\n /**\n * The specific action path or host used to identify the auth callback.\n * This will be combined with the scheme to form the full callback URL.\n * Format: `${scheme}://${hostname}`\n * @example \"better-auth-callback\"\n * // Resulting URL: \"bigio://better-auth-callback\"\n */\n ELECTRON_CALLBACK_HOST_PATH?: string\n /**\n * The IPC event name used to receive deep link URLs from the main process.\n * @example \"deep-link-received\"\n */\n DEEPLINK_EVENT_NAME?: string\n /**\n * The IPC event name used to notify the main process that the renderer app is mounted.\n * @example \"renderer-app-mounted\"\n */\n APP_MOUNTED_EVENT_NAME?: string\n /**\n * The URL path for the backend exchange endpoint to exchange the JWT ticket.\n * @example \"/electron/exchange\"\n */\n BACKEND_EXCHANGE_URL?: string\n BACKEND_FAST_TICKET_URL?: string\n BACKEND_LOGIN_URL?: string\n PREACT_LOGIN_PAGE?: (\n baseURL?: string | undefined,\n scheme?: string | undefined,\n provider?: string | undefined,\n ) => string\n customPreactJS?: string\n TICKET_NAME_IN_URL?: string\n SCHEME_NAME_IN_URL?: string\n PROVIDER_NAME_IN_URL?: string\n CHALLENGE_NAME_IN_URL?: string\n TICKET_TTL_SEC?: number\n ELECTRON_SESSION_DURATION?: number\n}\n\nexport type ElectronRendererPluginOptions = {\n /**\n * The custom protocol scheme used for deep linking authentication.\n * @remarks\n * This should match the protocol registered in your Electron Main Process.\n * Do not include the `://` suffix.\n * @example \"bigio\" to be like \"bigio://better-auth-callback\"\n */\n ELECTRON_SCHEME: string\n // baseURL?: string\n // cookiePrefix?: string\n // logger?: typeof bigIOLogger | typeof log\n // betterAuthClient: AuthClient<BetterAuthClientOptions>\n debug?: boolean\n refetchSessionOnFocus?: boolean\n CHALLENGE_NAME_IN_URL?: string\n ELECTRON_APP_HOST?: string\n TICKET_NAME_IN_URL?: string\n onDeepLinkFailedFn?: (error: unknown) => Promise<void>\n onDeepLinkSuccessFn?: (data: {\n session: Pick<Session, 'createdAt' | 'updatedAt' | 'expiresAt'>\n user: User\n }) => Promise<void>\n lazySignalUIReadyForFn?: boolean\n /**\n * The specific action path or host used to identify the auth callback.\n * This will be combined with the scheme to form the full callback URL.\n * Format: `${scheme}://${hostname}`\n * @example \"better-auth-callback\"\n * // Resulting URL: \"bigio://better-auth-callback\"\n */\n ELECTRON_CALLBACK_HOST_PATH?: string\n /**\n * The IPC event name used to receive deep link URLs from the main process.\n * @example \"deep-link-received\"\n */\n DEEPLINK_EVENT_NAME?: string\n /**\n * The IPC event name used to notify the main process that the renderer app is mounted.\n * @example \"renderer-app-mounted\"\n */\n APP_MOUNTED_EVENT_NAME?: string\n /**\n * The URL path for the backend exchange endpoint to exchange the JWT ticket.\n * @example \"/electron/exchange\"\n */\n BACKEND_EXCHANGE_URL?: string\n}\nexport type ElectronMainPluginOptions = {\n isOAuth: boolean\n /**\n * The custom protocol scheme used for deep linking authentication.\n * @remarks\n * This should match the protocol registered in your Electron Main Process.\n * Do not include the `://` suffix.\n * @example \"bigio\" to be like \"bigio://better-auth-callback\"\n */\n ELECTRON_SCHEME: string\n BETTER_AUTH_BASEURL: string\n PROVIDERS: string[]\n FRONTEND_URL: string\n ELECTRON_APP_NAME: string\n /**\n * The specific action path or host used to identify the auth callback.\n * This will be combined with the scheme to form the full callback URL.\n * Format: `${scheme}://${hostname}`\n * @example \"better-auth-callback\"\n * // Resulting URL: \"bigio://better-auth-callback\"\n */\n // logger?: typeof bigIOLogger | typeof log\n debugMode?: boolean\n ELECTRON_VERIFIER_LENGTH?: number\n CHALLENGE_NAME_IN_URL?: string\n SCHEME_NAME_IN_URL?: string\n PROVIDER_NAME_IN_URL?: string\n CALLBACK_PATHNAME_IN_URL?: string\n WEB_OAUTH_SIGNIN_CALLBACK_PATHNAME?: string\n ELECTRON_APP_HOST?: string\n ELECTRON_RENDERER_PATH?: string\n OLD_SCHOOL_ONBEFORE_WAY?: boolean\n GET_COOKIES_EVENT_NAME?: string\n ELECTRON_VERIFIER_FILE_NAME?: string\n /**\n * The specific action path or host used to identify the auth callback.\n * This will be combined with the scheme to form the full callback URL.\n * Format: `${scheme}://${hostname}`\n * @example \"better-auth-callback\"\n * // Resulting URL: \"bigio://better-auth-callback\"\n */\n ELECTRON_CALLBACK_HOST_PATH?: string\n /**\n * The IPC event name used to receive deep link URLs from the main process.\n * @example \"deep-link-received\"\n */\n DEEPLINK_EVENT_NAME?: string\n /**\n * The IPC event name used to clear cookies from the main process.\n * @example \"clear-Cookies\"\n */\n CLEAR_COOKIES_EVENT_NAME?: string\n /**\n * The IPC event name used to notify the main process that the renderer app is mounted.\n * @example \"renderer-app-mounted\"\n */\n APP_MOUNTED_EVENT_NAME?: string\n /**\n * The URL path for the backend exchange endpoint to exchange the JWT ticket.\n * @example \"/electron/exchange\"\n */\n BACKEND_EXCHANGE_URL?: string\n openHandlerHelper?: (details: Electron.HandlerDetails) => Electron.WindowOpenHandlerResponse\n\n beforeSendHelper?: (details: Electron.OnBeforeSendHeadersListenerDetails) => {\n callback: {\n requestHeaders: Record<string, string | string[]>\n cancel?: boolean\n }\n }\n customProtocolServingHelper?: {\n scheme?: string\n privileges?: {\n standard: boolean\n secure: boolean\n supportFetchAPI: boolean\n corsEnabled: boolean\n bypassCSP: boolean\n allowServiceWorkers?: boolean\n codeCache?: boolean\n stream?: boolean\n }\n protocolHandleOnCreateWindow?: (mainWindow: BrowserWindow) => Promise<void>\n protocolHandleOnAppReady?: (request: Request) => Response | Promise<Response>\n }\n}\nexport type ElectronButtonOptions = {\n FRONTEND_URL: string\n PROVIDER_NAME_IN_URL: string\n}\nexport type ElectronWebOptions = typeof defatultWebOptions\n\nexport const defaultServerPluginOptions = {\n ELECTRON_SCHEME: 'bigio',\n ELECTRON_APP_HOST: 'app-renderer',\n PROVIDERS: ['github', 'google'],\n BACKEND_EXCHANGE_URL: 'electron/exchange',\n BACKEND_FAST_TICKET_URL: 'electron/fastTicket',\n WEB_ERROR_PAGE_URL: 'http://localhost:3001/better-auth',\n WEB_OAUTH_SIGNIN_CALLBACK_PATHNAME: 'electron-handoff',\n ELECTRON_CALLBACK_HOST_PATH: 'better-auth-callback',\n ELECTRON_TO_BACKEND_HOST_PATH: 'from-electron-to-auth-backend',\n BACKEND_LOGIN_URL: 'electron/login',\n // PREACT_LOGIN_PAGE: renderOAuthPage,\n TICKET_NAME_IN_URL: 'ticket',\n SCHEME_NAME_IN_URL: 'scheme',\n PROVIDER_NAME_IN_URL: 'provider',\n CHALLENGE_NAME_IN_URL: 'electron_challenge',\n TICKET_TTL_SEC: 60 * 5,\n ELECTRON_SESSION_DURATION: 7 * 24 * 60 * 60 * 1000,\n // customPreactJS: customPreactJS,\n} satisfies Partial<ElectronServerPluginOptions>\n\nexport const defaultRendererPluginOptions = {\n ELECTRON_SCHEME: 'bigio',\n ELECTRON_APP_HOST: 'app-renderer',\n BACKEND_EXCHANGE_URL: 'electron/exchange',\n refetchSessionOnFocus: true,\n ELECTRON_CALLBACK_HOST_PATH: 'better-auth-callback',\n DEEPLINK_EVENT_NAME: 'deep-link-received',\n APP_MOUNTED_EVENT_NAME: 'renderer-app-mounted',\n CHALLENGE_NAME_IN_URL: 'electron_challenge',\n TICKET_NAME_IN_URL: 'ticket',\n lazySignalUIReadyForFn: false,\n} satisfies Partial<ElectronRendererPluginOptions>\n\nexport const defaultMainPluginOptions = {\n debugMode: false,\n isOAuth: true,\n BETTER_AUTH_BASEURL: 'http://localhost:3002',\n ELECTRON_APP_NAME: 'bigio-electron-demo',\n PROVIDERS: ['github', 'google'],\n ELECTRON_APP_HOST: 'app-renderer',\n ELECTRON_SCHEME: 'bigio',\n ELECTRON_RENDERER_PATH: 'out/renderer',\n DEEPLINK_EVENT_NAME: 'deep-link-received',\n APP_MOUNTED_EVENT_NAME: 'renderer-app-mounted',\n CLEAR_COOKIES_EVENT_NAME: 'clear-Cookies',\n GET_COOKIES_EVENT_NAME: 'get-Cookies',\n ELECTRON_VERIFIER_LENGTH: 32,\n FRONTEND_URL: 'http://localhost:3002/oauth',\n WEB_OAUTH_SIGNIN_CALLBACK_PATHNAME: 'electron-handoff',\n SCHEME_NAME_IN_URL: 'scheme',\n PROVIDER_NAME_IN_URL: 'provider',\n CHALLENGE_NAME_IN_URL: 'electron_challenge',\n CALLBACK_PATHNAME_IN_URL: 'callbackpath',\n OLD_SCHOOL_ONBEFORE_WAY: false,\n ELECTRON_CALLBACK_HOST_PATH: 'better-auth-callback',\n ELECTRON_VERIFIER_FILE_NAME: 'bigio-auth-state.json',\n} satisfies Partial<ElectronMainPluginOptions>\n\nexport const defaultButtonOptions = {\n FRONTEND_URL: 'http://localhost:3001/oauth',\n PROVIDER_NAME_IN_URL: 'provider',\n} satisfies Partial<ElectronButtonOptions>\n\nexport const defatultWebOptions = {\n ELECTRON_SCHEME: 'bigio',\n SCHEME_NAME_IN_URL: 'scheme',\n PROVIDERS: ['github', 'google'],\n PROVIDER_NAME_IN_URL: 'provider',\n CHALLENGE_NAME_IN_URL: 'electron_challenge',\n WEB_OAUTH_SIGNIN_CALLBACK_PATHNAME: 'electron-handoff',\n BACKEND_FAST_TICKET_URL: 'electron/fastTicket',\n} as const\n","// utils/electron-plugin-env.ts\n/** biome-ignore-all lint/style/useConsistentTypeDefinitions: <> */\nimport type { IpcRenderer, WebFrame, WebUtils } from 'electron'\n\ntype Prettify<T> = {\n [K in keyof T]: T[K]\n} & {}\ndeclare const process:\n | {\n env: {\n NODE_ENV?: string\n }\n versions?: {\n electron?: string\n }\n }\n | undefined\n\ndeclare global {\n interface ImportMetaEnv {\n readonly MODE: string\n readonly DEV: boolean\n readonly PROD: boolean\n readonly SSR: boolean\n\n [key: string]: unknown\n }\n\n interface ImportMeta {\n readonly env: ImportMetaEnv\n }\n}\n\ndeclare global {\n interface Window {\n electron: {\n webUtils: Prettify<WebUtils>\n webFrame: Prettify<WebFrame>\n process: Prettify<SafeProcess>\n ipcRenderer: Prettify<IpcRenderer>\n }\n }\n}\ntype SafeProcess = {\n readonly platform: NodeJS.Platform\n readonly versions: NodeJS.ProcessVersions\n readonly env: NodeJS.ProcessEnv\n}\n\ntype ElectronWindow = Window & {\n electron: {\n webUtils: Prettify<WebUtils>\n webFrame: Prettify<WebFrame>\n process: Prettify<SafeProcess>\n ipcRenderer: Prettify<IpcRenderer>\n }\n}\nconst getGlobal = () => {\n if (typeof globalThis !== 'undefined') {\n return globalThis\n }\n if (typeof self !== 'undefined') {\n return self\n }\n if (typeof window !== 'undefined') {\n return window\n }\n if (typeof global !== 'undefined') {\n return global\n }\n throw new Error('unable to locate global object')\n}\nconst globals = getGlobal()\n// function requireSetCookies(headers: Headers) {\n// if (typeof headers.getSetCookie !== 'function') {\n// throw new BigIOError('Environment Error: headers.getSetCookie is not a function.', {\n// bigioErrorStack: [\n// {\n// msg: 'Outdated Node.js Environment',\n// ctx: `'Please upgrade NodeJS to 18.14+`,\n// },\n// ],\n// })\n// }\n\n// const setCookieHeader = headers.getSetCookie()\n// if (!setCookieHeader || setCookieHeader.length === 0) {\n// const headerKeys = Array.from(headers.keys()).join(', ')\n// throw new APIError('INTERNAL_SERVER_ERROR', {\n// message: 'Critical: No Set-Cookie headers received from provider',\n// debugInfo: { availableHeaders: headerKeys },\n// })\n// }\n// return setCookieHeader\n// }\nexport function isElectronWindow(window: Window | typeof globalThis): window is ElectronWindow {\n if (typeof window !== 'undefined') {\n if (\n typeof navigator !== 'undefined' &&\n 'userAgent' in navigator &&\n navigator.userAgent.toLowerCase().includes(' electron/')\n ) {\n return true\n }\n if ('electron' in window && typeof window.electron !== 'undefined') {\n return true\n }\n }\n return false\n}\nconst getEnv = () => {\n if (typeof window !== 'undefined') {\n if (isElectronWindow(globals)) {\n return 'ELECTRON_RENDERER'\n }\n return 'BROWSER'\n }\n if (globalThis === self) {\n return 'WORKER'\n }\n if (typeof global !== 'undefined' && typeof process !== 'undefined') {\n if (typeof process.versions?.electron !== 'undefined') {\n return 'ELECTRON_MAIN'\n }\n return 'NODE'\n }\n return 'UNKNOWN'\n}\nconst getRawNodeEnv = (): string => {\n if (typeof import.meta !== 'undefined' && import.meta.env && import.meta.env.MODE) {\n return import.meta.env.MODE\n }\n\n // biome-ignore lint/complexity/useOptionalChain: <>\n if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV) {\n return process.env.NODE_ENV\n }\n\n return 'development'\n}\n\nconst RAW_ENV = getRawNodeEnv()\n\nexport const IS_DEV = RAW_ENV === 'development'\nexport const IS_PROD = RAW_ENV === 'production'\nexport const IS_TEST = RAW_ENV === 'test'\n\nexport const IS_ELECTRON_PACKAGED = (() => {\n // biome-ignore lint/complexity/useOptionalChain: <>\n if (typeof process !== 'undefined' && process.versions && process.versions.electron) {\n try {\n return require('electron').app.isPackaged\n } catch {\n return false\n }\n }\n return false\n})()\n\nif (typeof console !== 'undefined') {\n console.debug(`[ENV] Current Mode: ${RAW_ENV} | Packaged: ${IS_ELECTRON_PACKAGED}`)\n}\n","export function encodeBase32UpperCase(bytes) {\n return encodeBase32_internal(bytes, base32UpperCaseAlphabet, EncodingPadding.Include);\n}\nexport function encodeBase32UpperCaseNoPadding(bytes) {\n return encodeBase32_internal(bytes, base32UpperCaseAlphabet, EncodingPadding.None);\n}\nexport function encodeBase32LowerCase(bytes) {\n return encodeBase32_internal(bytes, base32LowerCaseAlphabet, EncodingPadding.Include);\n}\nexport function encodeBase32LowerCaseNoPadding(bytes) {\n return encodeBase32_internal(bytes, base32LowerCaseAlphabet, EncodingPadding.None);\n}\n/** Replaced: Use encodeBase32UpperCase() instead. */\nexport function encodeBase32(bytes) {\n return encodeBase32UpperCase(bytes);\n}\n/** Replaced: Use encodeBase32UpperCaseNoPadding() instead. */\nexport function encodeBase32NoPadding(bytes) {\n return encodeBase32UpperCaseNoPadding(bytes);\n}\nfunction encodeBase32_internal(bytes, alphabet, padding) {\n let result = \"\";\n for (let i = 0; i < bytes.byteLength; i += 5) {\n let buffer = 0n;\n let bufferBitSize = 0;\n for (let j = 0; j < 5 && i + j < bytes.byteLength; j++) {\n buffer = (buffer << 8n) | BigInt(bytes[i + j]);\n bufferBitSize += 8;\n }\n if (bufferBitSize % 5 !== 0) {\n buffer = buffer << BigInt(5 - (bufferBitSize % 5));\n bufferBitSize += 5 - (bufferBitSize % 5);\n }\n for (let j = 0; j < 8; j++) {\n if (bufferBitSize >= 5) {\n result += alphabet[Number((buffer >> BigInt(bufferBitSize - 5)) & 0x1fn)];\n bufferBitSize -= 5;\n }\n else if (bufferBitSize > 0) {\n result += alphabet[Number((buffer << BigInt(6 - bufferBitSize)) & 0x3fn)];\n bufferBitSize = 0;\n }\n else if (padding === EncodingPadding.Include) {\n result += \"=\";\n }\n }\n }\n return result;\n}\nexport function decodeBase32(encoded) {\n return decodeBase32_internal(encoded, base32DecodeMap, DecodingPadding.Required);\n}\nexport function decodeBase32IgnorePadding(encoded) {\n return decodeBase32_internal(encoded, base32DecodeMap, DecodingPadding.Ignore);\n}\nfunction decodeBase32_internal(encoded, decodeMap, padding) {\n const result = new Uint8Array(Math.ceil(encoded.length / 8) * 5);\n let totalBytes = 0;\n for (let i = 0; i < encoded.length; i += 8) {\n let chunk = 0n;\n let bitsRead = 0;\n for (let j = 0; j < 8; j++) {\n if (padding === DecodingPadding.Required) {\n if (encoded[i + j] === \"=\") {\n continue;\n }\n if (i + j >= encoded.length) {\n throw new Error(\"Invalid padding\");\n }\n }\n if (padding === DecodingPadding.Ignore) {\n if (i + j >= encoded.length || encoded[i + j] === \"=\") {\n continue;\n }\n }\n if (j > 0 && encoded[i + j - 1] === \"=\") {\n throw new Error(\"Invalid padding\");\n }\n if (!(encoded[i + j] in decodeMap)) {\n throw new Error(\"Invalid character\");\n }\n chunk |= BigInt(decodeMap[encoded[i + j]]) << BigInt((7 - j) * 5);\n bitsRead += 5;\n }\n if (bitsRead < 40) {\n let unused;\n if (bitsRead === 10) {\n unused = chunk & 0xffffffffn;\n }\n else if (bitsRead === 20) {\n unused = chunk & 0xffffffn;\n }\n else if (bitsRead === 25) {\n unused = chunk & 0xffffn;\n }\n else if (bitsRead === 35) {\n unused = chunk & 0xffn;\n }\n else {\n throw new Error(\"Invalid padding\");\n }\n if (unused !== 0n) {\n throw new Error(\"Invalid padding\");\n }\n }\n const byteLength = Math.floor(bitsRead / 8);\n for (let i = 0; i < byteLength; i++) {\n result[totalBytes] = Number((chunk >> BigInt(32 - i * 8)) & 0xffn);\n totalBytes++;\n }\n }\n return result.slice(0, totalBytes);\n}\nconst base32UpperCaseAlphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\nconst base32LowerCaseAlphabet = \"abcdefghijklmnopqrstuvwxyz234567\";\nconst base32DecodeMap = {\n A: 0,\n B: 1,\n C: 2,\n D: 3,\n E: 4,\n F: 5,\n G: 6,\n H: 7,\n I: 8,\n J: 9,\n K: 10,\n L: 11,\n M: 12,\n N: 13,\n O: 14,\n P: 15,\n Q: 16,\n R: 17,\n S: 18,\n T: 19,\n U: 20,\n V: 21,\n W: 22,\n X: 23,\n Y: 24,\n Z: 25,\n a: 0,\n b: 1,\n c: 2,\n d: 3,\n e: 4,\n f: 5,\n g: 6,\n h: 7,\n i: 8,\n j: 9,\n k: 10,\n l: 11,\n m: 12,\n n: 13,\n o: 14,\n p: 15,\n q: 16,\n r: 17,\n s: 18,\n t: 19,\n u: 20,\n v: 21,\n w: 22,\n x: 23,\n y: 24,\n z: 25,\n \"2\": 26,\n \"3\": 27,\n \"4\": 28,\n \"5\": 29,\n \"6\": 30,\n \"7\": 31\n};\nvar EncodingPadding;\n(function (EncodingPadding) {\n EncodingPadding[EncodingPadding[\"Include\"] = 0] = \"Include\";\n EncodingPadding[EncodingPadding[\"None\"] = 1] = \"None\";\n})(EncodingPadding || (EncodingPadding = {}));\nvar DecodingPadding;\n(function (DecodingPadding) {\n DecodingPadding[DecodingPadding[\"Required\"] = 0] = \"Required\";\n DecodingPadding[DecodingPadding[\"Ignore\"] = 1] = \"Ignore\";\n})(DecodingPadding || (DecodingPadding = {}));\n","export function encodeBase64(bytes) {\n return encodeBase64_internal(bytes, base64Alphabet, EncodingPadding.Include);\n}\nexport function encodeBase64NoPadding(bytes) {\n return encodeBase64_internal(bytes, base64Alphabet, EncodingPadding.None);\n}\nexport function encodeBase64url(bytes) {\n return encodeBase64_internal(bytes, base64urlAlphabet, EncodingPadding.Include);\n}\nexport function encodeBase64urlNoPadding(bytes) {\n return encodeBase64_internal(bytes, base64urlAlphabet, EncodingPadding.None);\n}\nfunction encodeBase64_internal(bytes, alphabet, padding) {\n let result = \"\";\n for (let i = 0; i < bytes.byteLength; i += 3) {\n let buffer = 0;\n let bufferBitSize = 0;\n for (let j = 0; j < 3 && i + j < bytes.byteLength; j++) {\n buffer = (buffer << 8) | bytes[i + j];\n bufferBitSize += 8;\n }\n for (let j = 0; j < 4; j++) {\n if (bufferBitSize >= 6) {\n result += alphabet[(buffer >> (bufferBitSize - 6)) & 0x3f];\n bufferBitSize -= 6;\n }\n else if (bufferBitSize > 0) {\n result += alphabet[(buffer << (6 - bufferBitSize)) & 0x3f];\n bufferBitSize = 0;\n }\n else if (padding === EncodingPadding.Include) {\n result += \"=\";\n }\n }\n }\n return result;\n}\nconst base64Alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nconst base64urlAlphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\nexport function decodeBase64(encoded) {\n return decodeBase64_internal(encoded, base64DecodeMap, DecodingPadding.Required);\n}\nexport function decodeBase64IgnorePadding(encoded) {\n return decodeBase64_internal(encoded, base64DecodeMap, DecodingPadding.Ignore);\n}\nexport function decodeBase64url(encoded) {\n return decodeBase64_internal(encoded, base64urlDecodeMap, DecodingPadding.Required);\n}\nexport function decodeBase64urlIgnorePadding(encoded) {\n return decodeBase64_internal(encoded, base64urlDecodeMap, DecodingPadding.Ignore);\n}\nfunction decodeBase64_internal(encoded, decodeMap, padding) {\n const result = new Uint8Array(Math.ceil(encoded.length / 4) * 3);\n let totalBytes = 0;\n for (let i = 0; i < encoded.length; i += 4) {\n let chunk = 0;\n let bitsRead = 0;\n for (let j = 0; j < 4; j++) {\n if (padding === DecodingPadding.Required && encoded[i + j] === \"=\") {\n continue;\n }\n if (padding === DecodingPadding.Ignore &&\n (i + j >= encoded.length || encoded[i + j] === \"=\")) {\n continue;\n }\n if (j > 0 && encoded[i + j - 1] === \"=\") {\n throw new Error(\"Invalid padding\");\n }\n if (!(encoded[i + j] in decodeMap)) {\n throw new Error(\"Invalid character\");\n }\n chunk |= decodeMap[encoded[i + j]] << ((3 - j) * 6);\n bitsRead += 6;\n }\n if (bitsRead < 24) {\n let unused;\n if (bitsRead === 12) {\n unused = chunk & 0xffff;\n }\n else if (bitsRead === 18) {\n unused = chunk & 0xff;\n }\n else {\n throw new Error(\"Invalid padding\");\n }\n if (unused !== 0) {\n throw new Error(\"Invalid padding\");\n }\n }\n const byteLength = Math.floor(bitsRead / 8);\n for (let i = 0; i < byteLength; i++) {\n result[totalBytes] = (chunk >> (16 - i * 8)) & 0xff;\n totalBytes++;\n }\n }\n return result.slice(0, totalBytes);\n}\nvar EncodingPadding;\n(function (EncodingPadding) {\n EncodingPadding[EncodingPadding[\"Include\"] = 0] = \"Include\";\n EncodingPadding[EncodingPadding[\"None\"] = 1] = \"None\";\n})(EncodingPadding || (EncodingPadding = {}));\nvar DecodingPadding;\n(function (DecodingPadding) {\n DecodingPadding[DecodingPadding[\"Required\"] = 0] = \"Required\";\n DecodingPadding[DecodingPadding[\"Ignore\"] = 1] = \"Ignore\";\n})(DecodingPadding || (DecodingPadding = {}));\nconst base64DecodeMap = {\n \"0\": 52,\n \"1\": 53,\n \"2\": 54,\n \"3\": 55,\n \"4\": 56,\n \"5\": 57,\n \"6\": 58,\n \"7\": 59,\n \"8\": 60,\n \"9\": 61,\n A: 0,\n B: 1,\n C: 2,\n D: 3,\n E: 4,\n F: 5,\n G: 6,\n H: 7,\n I: 8,\n J: 9,\n K: 10,\n L: 11,\n M: 12,\n N: 13,\n O: 14,\n P: 15,\n Q: 16,\n R: 17,\n S: 18,\n T: 19,\n U: 20,\n V: 21,\n W: 22,\n X: 23,\n Y: 24,\n Z: 25,\n a: 26,\n b: 27,\n c: 28,\n d: 29,\n e: 30,\n f: 31,\n g: 32,\n h: 33,\n i: 34,\n j: 35,\n k: 36,\n l: 37,\n m: 38,\n n: 39,\n o: 40,\n p: 41,\n q: 42,\n r: 43,\n s: 44,\n t: 45,\n u: 46,\n v: 47,\n w: 48,\n x: 49,\n y: 50,\n z: 51,\n \"+\": 62,\n \"/\": 63\n};\nconst base64urlDecodeMap = {\n \"0\": 52,\n \"1\": 53,\n \"2\": 54,\n \"3\": 55,\n \"4\": 56,\n \"5\": 57,\n \"6\": 58,\n \"7\": 59,\n \"8\": 60,\n \"9\": 61,\n A: 0,\n B: 1,\n C: 2,\n D: 3,\n E: 4,\n F: 5,\n G: 6,\n H: 7,\n I: 8,\n J: 9,\n K: 10,\n L: 11,\n M: 12,\n N: 13,\n O: 14,\n P: 15,\n Q: 16,\n R: 17,\n S: 18,\n T: 19,\n U: 20,\n V: 21,\n W: 22,\n X: 23,\n Y: 24,\n Z: 25,\n a: 26,\n b: 27,\n c: 28,\n d: 29,\n e: 30,\n f: 31,\n g: 32,\n h: 33,\n i: 34,\n j: 35,\n k: 36,\n l: 37,\n m: 38,\n n: 39,\n o: 40,\n p: 41,\n q: 42,\n r: 43,\n s: 44,\n t: 45,\n u: 46,\n v: 47,\n w: 48,\n x: 49,\n y: 50,\n z: 51,\n \"-\": 62,\n _: 63\n};\n","// root/packages/better-auth-electron/src/utils/electron-plugin-utils.ts\n\nimport { decodeBase64urlIgnorePadding, encodeBase64urlNoPadding } from '@oslojs/encoding'\n// import type { AuthClient, BetterAuthClientOptions } from 'better-auth/client'\nimport type { IpcRenderer, WebFrame, WebUtils } from 'electron'\n\n// import { atom } from 'jotai/vanilla'\n\nimport z from 'zod'\n\nimport { IS_DEV } from './electron-plugin-env'\n\n// import { BigIOError } from './electron-plugin-env'\n// import { okOr, safeTry } from './electron-plugin-helper'\n// root/packages/better-auth-electron/src/utils/electron-plugin-helper.ts\n\n// import { BigIOError, consoleError } from './electron-plugin-utils'\ntype Prettify<T> = {\n [K in keyof T]: T[K]\n} & {}\ntype NonNull<T> = Exclude<T, null | undefined>\nexport class BigIOError extends Error {\n public readonly bigioErrorStack: unknown[]\n\n constructor(message: string, options: { cause?: unknown; bigioErrorStack?: unknown[] }) {\n super(message, { cause: options.cause })\n this.name = 'BigIOError'\n this.bigioErrorStack = options.bigioErrorStack || []\n\n Object.setPrototypeOf(this, new.target.prototype)\n Object.defineProperty(this, 'bigioErrorStack', { enumerable: false })\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n }\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n stack: this.stack,\n cause: this.cause,\n bigioErrorStack: this.bigioErrorStack,\n }\n }\n}\n\nexport const consoleError = (\n originalError: unknown,\n message?: string,\n bigioErrorStack?: unknown[],\n) => {\n if (!IS_DEV) {\n return\n }\n if (message && bigioErrorStack) {\n console.groupCollapsed(`[BigIOError]`)\n console.error('[BigIOError] message: ', message)\n if (Array.isArray(bigioErrorStack) && bigioErrorStack.length > 0) {\n console.log('[BigIOError] Stack Trace Table: ')\n console.table(bigioErrorStack)\n }\n console.error('[BigIOError] Original Error: ', originalError)\n console.groupEnd()\n } else if (originalError instanceof BigIOError) {\n console.groupCollapsed(`[BigIOError]`)\n console.error('[BigIOError] message: ', originalError.message)\n if (\n Array.isArray(originalError.bigioErrorStack) &&\n originalError.bigioErrorStack.length > 0\n ) {\n console.log('[BigIOError] Stack Trace Table: ')\n console.table(originalError.bigioErrorStack)\n }\n console.error('[BigIOError] Original Error: ', originalError.cause)\n console.groupEnd()\n } else {\n console.groupCollapsed(`[Error]`)\n console.error('[Error]: ', originalError)\n console.groupEnd()\n }\n}\nexport const consoleLog = (...argv: unknown[]): void => {\n if (IS_DEV) {\n console.log(...argv)\n }\n}\ntype BigIOLogger = {\n info(message: unknown, ...args: unknown[]): void\n warn(message: unknown, ...args: unknown[]): void\n error(message: unknown, ...args: unknown[]): void\n debug?(message: unknown, ...args: unknown[]): void\n}\n\nexport const bigIOLogger: BigIOLogger = {\n info: (message: unknown, ...args: unknown[]) => {\n console.log(message, ...args)\n },\n warn: (message: unknown, ...args: unknown[]) => {\n console.warn(message, ...args)\n },\n error: (message: unknown, ...args: unknown[]) => {\n console.error(message, ...args)\n },\n debug: (message: unknown, ...args: unknown[]) => {\n console.debug(message, ...args)\n },\n}\nfunction getPreviousBigIOErrorStack(error: unknown): unknown[] {\n if (error instanceof BigIOError) {\n return error.bigioErrorStack\n }\n\n if (error instanceof Error && 'bigioErrorStack' in error) {\n return Array.isArray(error.bigioErrorStack) ? error.bigioErrorStack : []\n }\n return []\n}\ntype ErrorMessage = { msg?: string; ctx: unknown } | string | Error | boolean\n\n// biome-ignore lint/style/useUnifiedTypeSignatures: <>\nexport function okOr<T>(value: T): NonNull<T>\nexport function okOr<T>(value: T, errorMessage: string): NonNull<T>\nexport function okOr<T>(value: T, errorMessage: { msg?: string; ctx: unknown }): NonNull<T>\nexport function okOr<T>(value: T, errorMessage: Error): NonNull<T>\nexport function okOr<T>(value: T, errorMessage: boolean): NonNull<T>\nexport function okOr<T>(value: T, errorMessage: ErrorMessage): NonNull<T>\nexport function okOr<T>(value: T, errorMessage?: ErrorMessage): NonNull<T> {\n // Happy Path\n if (value !== null && value !== undefined) {\n return value as NonNull<T>\n }\n const now = Date.now()\n\n const ctx = (() => {\n const DEFAULT_CTX = 'okOr function failed'\n\n if (\n !(errorMessage instanceof Error) &&\n typeof errorMessage === 'object' &&\n 'ctx' in errorMessage\n ) {\n return errorMessage.ctx\n }\n if (typeof errorMessage === 'string') {\n return DEFAULT_CTX\n }\n if (errorMessage === undefined) {\n return DEFAULT_CTX\n }\n if (errorMessage instanceof Error) {\n return DEFAULT_CTX\n }\n if (errorMessage === true) {\n return DEFAULT_CTX\n }\n return DEFAULT_CTX\n })()\n const msg = (() => {\n const DEFAULT_MSG = 'Unexpected return null or undefined value'\n if (\n !(errorMessage instanceof Error) &&\n typeof errorMessage === 'object' &&\n 'msg' in errorMessage &&\n typeof errorMessage.msg === 'string'\n ) {\n return errorMessage.msg\n }\n if (typeof errorMessage === 'string') {\n return errorMessage\n }\n if (errorMessage === undefined) {\n return DEFAULT_MSG\n }\n if (errorMessage instanceof Error) {\n return DEFAULT_MSG\n }\n if (errorMessage === true) {\n return DEFAULT_MSG\n }\n return DEFAULT_MSG\n })()\n\n const newItem = {\n msg: msg,\n ctx: ctx,\n timestamp: now,\n }\n\n if (errorMessage instanceof Error) {\n const prevStack = getPreviousBigIOErrorStack(errorMessage)\n const newStack = [...prevStack, newItem]\n if (!errorMessage.cause) {\n try {\n Object.defineProperty(errorMessage, 'cause', {\n value: new BigIOError(msg, {\n bigioErrorStack: newStack,\n }),\n configurable: true,\n writable: true,\n enumerable: false,\n })\n } catch {\n // some\n }\n }\n try {\n Object.defineProperty(errorMessage, 'bigioErrorStack', {\n value: newStack,\n configurable: true,\n writable: true,\n enumerable: false,\n })\n } catch {\n throw new BigIOError('Wrapper for frozen user error', {\n cause: errorMessage,\n bigioErrorStack: newStack,\n })\n }\n throw errorMessage\n }\n\n throw new BigIOError(msg, {\n bigioErrorStack: [newItem],\n })\n}\n\nconst handleUnsafeError = (originalError: unknown, errorMessage?: ErrorMessage) => {\n const now = Date.now()\n const prevStack = getPreviousBigIOErrorStack(originalError)\n const originalErrorMsg =\n originalError instanceof Error ? originalError.message : String(originalError)\n const newMsg = (() => {\n if (errorMessage === true) {\n return originalErrorMsg\n }\n if (typeof errorMessage === 'string') {\n return errorMessage\n }\n if (\n typeof errorMessage === 'object' &&\n 'ctx' in errorMessage &&\n !(errorMessage instanceof Error)\n ) {\n return errorMessage.msg || originalErrorMsg\n }\n if (errorMessage instanceof Error) {\n return errorMessage.message\n }\n return originalErrorMsg\n })()\n const userStack = (() => {\n if (errorMessage === true) {\n return [\n {\n msg: 'SafeTry failed',\n ctx: originalErrorMsg,\n timestamp: now,\n },\n ]\n }\n if (typeof errorMessage === 'string') {\n return [\n {\n msg: errorMessage,\n ctx: originalErrorMsg,\n timestamp: now,\n },\n ]\n }\n if (\n typeof errorMessage === 'object' &&\n 'ctx' in errorMessage &&\n !(errorMessage instanceof Error)\n ) {\n return [\n {\n msg: errorMessage.msg || originalErrorMsg,\n ctx: errorMessage.ctx,\n timestamp: now,\n },\n ]\n }\n if (errorMessage instanceof Error) {\n const userNewStack = getPreviousBigIOErrorStack(errorMessage)\n if (userNewStack.length > 0) {\n const lastItem = userNewStack.at(-1)\n if (\n lastItem &&\n typeof lastItem === 'object' &&\n !('timestamp' in lastItem && lastItem.timestamp)\n ) {\n return [...userNewStack.slice(0, -1), { ...lastItem, timestamp: now }]\n }\n return userNewStack\n }\n return [{ msg: errorMessage.message, ctx: originalErrorMsg, timestamp: now }]\n }\n\n return [{ ctx: originalErrorMsg }]\n })()\n const MAX_STACK_SIZE = IS_DEV ? 500 : 50\n const newStack = (() => {\n const stack = [...prevStack, ...userStack]\n if (stack.length > MAX_STACK_SIZE) {\n return [\n {\n msg: `... Truncated (Stack > ${MAX_STACK_SIZE}) ...`,\n ctx: null,\n timestamp: now,\n },\n ...stack.slice(-MAX_STACK_SIZE),\n ]\n }\n return stack\n })()\n consoleError(originalError, newMsg, newStack)\n if (errorMessage instanceof Error) {\n if (!errorMessage.cause && originalError) {\n try {\n Object.defineProperty(errorMessage, 'cause', {\n value: originalError,\n configurable: true,\n writable: true,\n enumerable: false,\n })\n } catch {\n // some\n }\n }\n try {\n Object.defineProperty(errorMessage, 'bigioErrorStack', {\n value: newStack,\n configurable: true,\n writable: true,\n enumerable: false,\n })\n } catch {\n throw new BigIOError('Wrapper for frozen user error', {\n cause: errorMessage,\n bigioErrorStack: newStack,\n })\n }\n throw errorMessage\n }\n throw new BigIOError(newMsg, {\n cause: originalError,\n bigioErrorStack: newStack,\n })\n}\n\nconst handleSafeError = (originalError: unknown) => {\n const prevStack = getPreviousBigIOErrorStack(originalError)\n const originalErrorMsg =\n originalError instanceof Error ? originalError.message : String(originalError)\n const now = Date.now()\n const newStack = [\n ...prevStack,\n { msg: originalErrorMsg, ctx: originalErrorMsg, timestamp: now },\n ]\n return {\n data: null,\n error: new BigIOError(originalErrorMsg, {\n cause: originalError,\n bigioErrorStack: newStack,\n }),\n }\n}\n\nconst handlePromise = <T>(internalPromise: Promise<T>, errorMessage?: ErrorMessage) => {\n if (errorMessage !== undefined) {\n return internalPromise\n .then((data) => okOr(data, errorMessage))\n .catch((originalError) => handleUnsafeError(originalError, errorMessage))\n }\n\n return internalPromise\n .then((data) => ({ data: okOr(data), error: null }))\n .catch((originalError) => handleSafeError(originalError))\n}\n\ntype SafeResult<T> =\n | {\n data: NonNull<T>\n error: null\n }\n | {\n data: null\n error: Error\n }\n// biome-ignore lint/style/useUnifiedTypeSignatures: temp\nexport function safeTry<T>(func: Promise<T>): Promise<SafeResult<T>>\nexport function safeTry<T>(func: Promise<T>, errorMessage: ErrorMessage): Promise<NonNull<T>>\nexport function safeTry<T>(func: () => Promise<T>): Promise<SafeResult<T>>\nexport function safeTry<T>(func: () => Promise<T>, errorMessage: ErrorMessage): Promise<NonNull<T>>\nexport function safeTry<T>(func: () => T): SafeResult<T>\nexport function safeTry<T>(func: () => T, errorMessage: ErrorMessage): NonNull<T>\n\nexport function safeTry<T>(\n func: Promise<T> | (() => Promise<T>) | (() => T),\n errorMessage?: ErrorMessage,\n): Promise<SafeResult<T>> | Promise<NonNull<T>> | SafeResult<T> | NonNull<T> {\n try {\n if (func instanceof Promise) {\n return handlePromise(func, errorMessage)\n }\n if (typeof func === 'function') {\n const result = func()\n if (result instanceof Promise) {\n return handlePromise(result, errorMessage)\n }\n\n if (errorMessage !== undefined) {\n return okOr(result, errorMessage)\n }\n return {\n data: okOr(result),\n error: null,\n }\n }\n } catch (error) {\n if (errorMessage !== undefined) {\n handleUnsafeError(error, errorMessage)\n }\n return handleSafeError(error)\n }\n const now = Date.now()\n const invalidInputMsg = 'SayTry Fn Invalid input: expected Function or Promise'\n const invalidError = new BigIOError(invalidInputMsg, {\n cause: func,\n bigioErrorStack: [\n {\n msg: invalidInputMsg,\n ctx: 'Type Check Failed',\n timestamp: now,\n },\n ],\n })\n if (errorMessage !== undefined) {\n throw invalidError\n }\n return {\n data: null,\n error: invalidError,\n }\n}\n\nconst crypto = globalThis.crypto\nconst ALGO_SHA = 'SHA-256'\nconst HKDF_ALGO = { name: 'HKDF' }\nconst AES_ALGO = { name: 'AES-GCM', length: 128 }\nconst secretKeyCache = new Map<string, CryptoKey>()\n\nconst MAX_CACHE_SIZE = 50\nconst GLOBAL_ENCODER = new TextEncoder()\nasync function getCachedKey(secret: string): Promise<CryptoKey> {\n const checkSecret = okOr(secret, {\n msg: 'Invalid secret input for getCachedKey',\n ctx: {\n secretLength: secret?.length,\n },\n })\n const keyDataBuffer = await safeTry(\n crypto.subtle.digest(ALGO_SHA, GLOBAL_ENCODER.encode(checkSecret)),\n {\n msg: 'Failed to create SHA digest from secret',\n ctx: { secretLength: checkSecret.length },\n },\n )\n\n const cacheKeyIndex = encode64(keyDataBuffer)\n if (secretKeyCache.has(cacheKeyIndex)) {\n const cachedKey = secretKeyCache.get(cacheKeyIndex)\n if (cachedKey) {\n secretKeyCache.delete(cacheKeyIndex)\n secretKeyCache.set(cacheKeyIndex, cachedKey)\n return cachedKey\n }\n }\n const keyMaterial = await safeTry(\n crypto.subtle.importKey('raw', GLOBAL_ENCODER.encode(checkSecret), HKDF_ALGO, false, [\n 'deriveKey',\n ]),\n {\n msg: 'Failed to import raw key material',\n ctx: {\n algo: HKDF_ALGO.name,\n },\n },\n )\n const key = await safeTry(\n crypto.subtle.deriveKey(\n {\n name: 'HKDF',\n hash: ALGO_SHA,\n salt: new Uint8Array(),\n info: GLOBAL_ENCODER.encode('better-auth-electron-v1'),\n },\n keyMaterial,\n AES_ALGO,\n false,\n ['encrypt', 'decrypt'],\n ),\n {\n msg: 'HKDF deriveKey failed',\n ctx: {\n algo: HKDF_ALGO.name,\n },\n },\n )\n if (secretKeyCache.size >= MAX_CACHE_SIZE) {\n const staleKey = secretKeyCache.keys().next().value\n if (staleKey) {\n secretKeyCache.delete(staleKey)\n }\n }\n secretKeyCache.set(cacheKeyIndex, key)\n return key\n}\n\nfunction encode64(buffer: Uint8Array | ArrayBuffer) {\n const checkBuffer = okOr(buffer, {\n msg: 'Invalid buffer input for toBase64Url',\n ctx: { type: typeof buffer },\n })\n const bytes = checkBuffer instanceof Uint8Array ? checkBuffer : new Uint8Array(checkBuffer)\n\n return encodeBase64urlNoPadding(bytes)\n}\n\nfunction decode64(str: string): Uint8Array {\n const checkStr = okOr(str, {\n msg: 'Invalid string input for fromBase64Url',\n ctx: {\n stringLength: str?.length,\n },\n })\n\n const normalizedStr = checkStr.replace(/\\+/g, '-').replace(/\\//g, '_')\n const bytesBuffer = safeTry(() => decodeBase64urlIgnorePadding(normalizedStr), {\n msg: 'Base64 Decoding Failed',\n ctx: {\n msg: 'Oslo decode failed',\n ctx: { strPart: str.slice(0, 10) },\n },\n })\n\n return bytesBuffer as unknown as Uint8Array\n}\n\nexport async function encryptTicket(\n payload: Record<string, unknown>,\n secret: string,\n ttlSeconds = 60,\n): Promise<string> {\n const checkPayload = okOr(payload, {\n msg: 'Invalid payload: input is null or undefined for encryptTicket',\n ctx: {\n keys: payload ? Object.keys(payload) : null,\n },\n })\n const checkSecret = okOr(secret, {\n msg: 'Invalid secret: input is empty or invalid for encryptTicket',\n ctx: { secretLength: secret?.length },\n })\n const key = await safeTry(getCachedKey(checkSecret), {\n msg: 'Key initialization failed: unable to derive crypto key from secret',\n ctx: { secretLength: secret.length },\n })\n const iv = okOr(crypto.getRandomValues(new Uint8Array(12)), {\n msg: 'Crypto failure: system RNG failed to generate Initialization Vector (IV)',\n ctx: { requiredBytes: 12 },\n })\n const finalPayload = {\n payload: checkPayload,\n exp: Date.now() + ttlSeconds * 1000,\n }\n const jsonString = safeTry(() => JSON.stringify(finalPayload), {\n msg: 'Serialization failed: payload contains unserializable data (e.g., BigInt, Circular ref)',\n ctx: {\n payloadKeys: Object.keys(checkPayload),\n exp: finalPayload.exp,\n },\n })\n\n const encodedData = GLOBAL_ENCODER.encode(jsonString)\n const encryptedContent = await safeTry(\n crypto.subtle.encrypt({ name: 'AES-GCM', iv: iv }, key, encodedData),\n {\n msg: 'Encryption failed: AES-GCM encryption process encountered an error',\n ctx: {\n ivLength: iv.byteLength,\n dataLength: encodedData.byteLength,\n algo: 'AES-GCM',\n },\n },\n )\n const returnIV = encode64(iv)\n const returnData = encode64(encryptedContent)\n\n return `${returnIV}.${returnData}`\n}\n\nexport async function decryptTicket<T = Record<string, unknown>>(\n ticket: string,\n secret: string,\n): Promise<T> {\n const checkTicket = okOr(ticket, {\n msg: 'Ticket Validation for decryptTicket Failed: Input is null or undefined',\n ctx: {\n length: ticket?.length,\n },\n })\n const checkSecret = okOr(secret, {\n msg: 'Secret Validation for decryptTicket Failed: Input is null or undefined',\n ctx: {\n length: secret?.length,\n },\n })\n const now = Date.now()\n if (!checkTicket.includes('.')) {\n throw new BigIOError('Ticket Malformed: Missing separator (.)', {\n bigioErrorStack: [\n {\n msg: 'Ticket Malformed: Missing separator (.)',\n ctx: { ticketPart: `${checkTicket.slice(0, 10)}...` },\n timestamp: now,\n },\n ],\n })\n }\n const [ivUrl, dataUrl] = checkTicket.split('.')\n if (!(ivUrl && dataUrl)) {\n throw new BigIOError('Invalid ticket format: incomplete parts', {\n bigioErrorStack: [\n {\n msg: 'Invalid ticket format: incomplete parts',\n ctx: { ticketPart: `${checkTicket.slice(0, 10)}...` },\n timestamp: now,\n },\n ],\n })\n }\n const iv = decode64(ivUrl)\n const data = decode64(dataUrl)\n\n if (iv.byteLength !== 12) {\n throw new BigIOError('Crypto Failure: Invalid IV length', {\n bigioErrorStack: [\n {\n msg: 'AES-GCM requires 12-byte IV',\n ctx: { actualLength: iv.byteLength, expected: 12 },\n timestamp: now,\n },\n ],\n })\n }\n const key = await safeTry(getCachedKey(checkSecret), {\n msg: 'Key Derivation Failed: Unable to generate crypto key',\n ctx: { secretLength: checkSecret.length },\n })\n const decryptedBuffer = await safeTry(\n crypto.subtle.decrypt(\n { name: 'AES-GCM', iv: iv as unknown as BufferSource },\n key,\n data as unknown as BufferSource,\n ),\n {\n msg: 'Decryption Failed: Authentication tag mismatch or data corruption',\n ctx: { ivLength: iv.byteLength, dataLength: data.byteLength },\n },\n )\n const decodedString = new TextDecoder().decode(decryptedBuffer)\n const rawJson = safeTry(() => JSON.parse(decodedString), {\n msg: 'JSON Parsing Decrypted payload Failed',\n ctx: { len: decodedString.length, prefix: decodedString.slice(0, 10) },\n })\n const isValidPayload = safeTry(\n () =>\n z\n .object({\n payload: z.record(z.string(), z.unknown()).or(z.looseObject({})),\n exp: z.number().int().min(1),\n })\n .parse(rawJson),\n true,\n )\n const expNow = Date.now()\n\n if (expNow > isValidPayload.exp) {\n throw new BigIOError('Ticket Expired', {\n bigioErrorStack: [\n {\n msg: 'Ticket Expired',\n ctx: {\n exp: isValidPayload.exp,\n now: expNow,\n expiredByMs: expNow - isValidPayload.exp,\n },\n timestamp: expNow,\n },\n ],\n })\n }\n return isValidPayload.payload as T\n}\n\nexport function pkceGenerateVerifier(byteLength = 32): string {\n if (byteLength < 32 || byteLength > 96) {\n throw new BigIOError('PKCE Error: Invalid Verifier Length', {\n bigioErrorStack: [\n {\n msg: 'Verifier byte length must be between 32 and 96',\n ctx: {\n inputLength: byteLength,\n rfcRequirement: '43-128 chars string',\n },\n timestamp: Date.now(),\n },\n ],\n })\n }\n\n const buffer = new Uint8Array(byteLength)\n\n const randomValues = okOr(crypto.getRandomValues(buffer), {\n msg: 'PKCE Failure: System RNG failed to generate Verifier entropy',\n ctx: { requiredBytes: byteLength },\n })\n const result = encode64(randomValues)\n return result\n}\n\nexport async function pkceGenerateChallenge(verifier: string): Promise<string> {\n const checkVerifier = okOr(verifier, {\n msg: 'PKCE Challenge Failure: Verifier input is empty or invalid',\n ctx: { length: verifier?.length },\n })\n const data = GLOBAL_ENCODER.encode(checkVerifier)\n const hashBuffer = await safeTry(crypto.subtle.digest(ALGO_SHA, data), {\n msg: `PKCE Challenge Failure: ${ALGO_SHA} digest failed`,\n ctx: {\n verifierBytes: data.byteLength,\n algo: ALGO_SHA,\n },\n })\n\n return encode64(hashBuffer)\n}\nconst REGEX_BASE64_URL = /^[a-zA-Z0-9\\-_]+=*$/\n\nexport function SearchParamsZod(ELECTRON_SCHEME: string, PROVIDERS: string[]) {\n return z.object({\n scheme: z\n .string()\n .min(1, 'Scheme cannot be empty')\n .regex(REGEX_BASE64_URL)\n .refine((scheme) => scheme === ELECTRON_SCHEME, {\n message: 'Invalid scheme provided',\n }),\n provider: z.enum(PROVIDERS),\n challenge: z\n .string()\n .length(43, 'Challenge must be exactly 43 characters')\n .regex(REGEX_BASE64_URL),\n })\n}\n","// root/packages/better-auth-electron/client/better-auth/electron-renderer-plugin.ts\n\nimport type { BetterAuthClientPlugin, Session, User } from 'better-auth'\nimport { atom } from 'nanostores'\nimport z from 'zod'\nimport type { ElectronRendererPluginOptions } from '../options/electron-plugin-options'\nimport { defaultRendererPluginOptions } from '../options/electron-plugin-options'\nimport type { electronServerPlugin } from '../server/electron-server-plugin'\nimport { isElectronWindow } from '../utils/electron-plugin-env'\nimport {\n BigIOError,\n consoleError,\n consoleLog,\n pkceGenerateChallenge,\n safeTry,\n} from '../utils/electron-plugin-utils'\n\ntype ExchangeResult = {\n session: Pick<Session, 'createdAt' | 'updatedAt' | 'expiresAt'>\n user: User\n}\n// Extend the Window interface to include our custom property\nconst LOCK_NAME_IN_WINDOW = '__BIGIO_BETTER_AUTH_ELECTRON_ATTACHED__'\n\nconst checkAndSetGlobalLock = (): boolean => {\n const win = window as typeof window & { [key: string]: unknown }\n if (typeof win[LOCK_NAME_IN_WINDOW] === 'boolean' && win[LOCK_NAME_IN_WINDOW]) {\n return true\n }\n win[LOCK_NAME_IN_WINDOW] = true\n return false\n}\n\nconst ipcDeepLinkAtom = atom(false)\nconst abortSignalAtom = atom<AbortController | null>(null)\nconst ensureFreshSignal = () => {\n const currentAbortSignal = abortSignalAtom.get()\n if (currentAbortSignal) {\n currentAbortSignal.abort()\n }\n const newAbortSignal = new AbortController()\n abortSignalAtom.set(newAbortSignal)\n return newAbortSignal.signal\n}\n\nconst isPluginReadyAtom = atom(false)\nconst appMountedAtom = atom(false)\nconst resultFromDeepLinkAtom = atom<ExchangeResult | Error | null>(null)\nconst onDeepLinkSuccessFnAtom =\n atom<ElectronRendererPluginOptions['onDeepLinkSuccessFn']>(undefined)\n\nconst onDeepLinkFailedFnAtom = atom<ElectronRendererPluginOptions['onDeepLinkFailedFn']>(undefined)\n\nexport const electronRendererPlugin = (\n electronRendererPluginOptions: ElectronRendererPluginOptions,\n) => {\n const config = { ...defaultRendererPluginOptions, ...electronRendererPluginOptions }\n const {\n refetchSessionOnFocus,\n ELECTRON_SCHEME,\n ELECTRON_CALLBACK_HOST_PATH,\n DEEPLINK_EVENT_NAME,\n BACKEND_EXCHANGE_URL,\n APP_MOUNTED_EVENT_NAME,\n CHALLENGE_NAME_IN_URL,\n TICKET_NAME_IN_URL,\n onDeepLinkSuccessFn,\n onDeepLinkFailedFn,\n lazySignalUIReadyForFn,\n // ELECTRON_APP_HOST,\n } = config\n if (typeof onDeepLinkSuccessFn === 'function') {\n onDeepLinkSuccessFnAtom.set(onDeepLinkSuccessFn)\n }\n if (typeof onDeepLinkFailedFn === 'function') {\n onDeepLinkFailedFnAtom.set(onDeepLinkFailedFn)\n }\n function sendAppMounted() {\n if (!isElectronWindow(window)) {\n return\n }\n window.electron.ipcRenderer.send(APP_MOUNTED_EVENT_NAME)\n }\n return {\n id: 'bigio-electron-renderer-plugin',\n $InferServerPlugin: {} as ReturnType<typeof electronServerPlugin>,\n\n getActions: function ($fetch, $store, options) {\n if (!isElectronWindow(window)) {\n return {\n bigio: {\n onDeepLinkSuccess: () => null,\n onDeepLinkFailed: () => null,\n },\n }\n }\n if (!(checkAndSetGlobalLock() || isPluginReadyAtom.get())) {\n consoleLog('[Better-Auth-Electron] Initializing IPC Listeners...')\n\n if (refetchSessionOnFocus) {\n const focusEventAbortSignal = ensureFreshSignal()\n window.addEventListener(\n 'focus',\n () => {\n $store.notify('$sessionSignal')\n // betterAuthClient.getSession()\n },\n { signal: focusEventAbortSignal },\n )\n }\n if (!ipcDeepLinkAtom.get()) {\n const dataFromMainZod = z.object({\n deepLinkURL: z.string().min(1),\n verifier: z.string().min(1),\n })\n\n window.electron.ipcRenderer.on(\n DEEPLINK_EVENT_NAME,\n async (_event, dataFromMain) => {\n console.log(dataFromMain)\n const { data: readyData, error: dataError } = await safeTry(\n async () => {\n const bigioErrorStack = [{ ctx: dataFromMain }]\n const safeEvent = dataFromMainZod.safeParse(dataFromMain)\n if (!safeEvent.success || safeEvent.data === undefined) {\n throw new BigIOError(\n 'Failed to parse dataFromMain with zod',\n {\n cause: safeEvent.error,\n bigioErrorStack: [{ ctx: safeEvent }],\n },\n )\n }\n\n const { deepLinkURL, verifier } = safeEvent.data\n const deepLink = new URL(deepLinkURL)\n\n if (deepLink.protocol !== `${ELECTRON_SCHEME}:`) {\n throw new BigIOError('Bad Electron Scheme', {\n bigioErrorStack: bigioErrorStack,\n })\n }\n\n const deepLinkHostName = deepLink.hostname.toLowerCase()\n\n if (deepLinkHostName !== ELECTRON_CALLBACK_HOST_PATH) {\n throw new BigIOError('Bad CallBackHostPath', {\n bigioErrorStack: bigioErrorStack,\n })\n }\n\n // Challenge Check\n const challenge =\n deepLink.searchParams.get(CHALLENGE_NAME_IN_URL)\n\n console.log(challenge)\n if (!challenge) {\n throw new BigIOError('Error Challenge', {\n bigioErrorStack: bigioErrorStack,\n })\n }\n console.log(challenge)\n await safeTry(async () => {\n const checkChallenge = await pkceGenerateChallenge(verifier)\n if (challenge !== checkChallenge) {\n throw new BigIOError('That is not my ticket', {\n bigioErrorStack: bigioErrorStack,\n })\n }\n return checkChallenge\n }, true)\n\n // Ticket Extraction\n const deepLinkTicket =\n deepLink.searchParams.get(TICKET_NAME_IN_URL)\n if (!deepLinkTicket) {\n throw new BigIOError('No Ticket', {\n bigioErrorStack: bigioErrorStack,\n })\n }\n return { ticket: deepLinkTicket, verifier: verifier }\n },\n )\n console.log(dataError)\n\n const onFailedFn = onDeepLinkFailedFnAtom.get()\n if (!readyData && dataError) {\n if (\n lazySignalUIReadyForFn &&\n (typeof onDeepLinkSuccessFn === 'function' ||\n typeof onDeepLinkFailedFn === 'function')\n ) {\n resultFromDeepLinkAtom.set(dataError)\n }\n if (onFailedFn) {\n // this is async fn,prevent fake async fn that return promise\n // fire and forget\n safeTry(\n () => onFailedFn(dataError),\n new BigIOError('Failed at onFailedFn', {\n bigioErrorStack: [\n {\n ctx: String(dataError),\n },\n ],\n }),\n )\n return\n }\n if (dataError instanceof BigIOError) {\n consoleError(dataError)\n } else {\n console.error(\n `[Better-auth-electron-plugin] Unknown Error: ${dataError instanceof Error ? dataError.message : String(dataError)}`,\n )\n }\n return\n }\n\n // Exchange Ticket\n const result = await $fetch<ExchangeResult>(\n `/${BACKEND_EXCHANGE_URL}`,\n {\n method: 'POST',\n body: {\n ticket: readyData.ticket,\n verifier: readyData.verifier,\n },\n },\n )\n if (result.error) {\n const bigIOError = new BigIOError('Failed to exchange the ticket', {\n bigioErrorStack: [\n {\n ctx: {\n deepLinkEvent: dataFromMain,\n fetchError: result.error,\n },\n },\n ],\n })\n if (\n lazySignalUIReadyForFn &&\n (typeof onDeepLinkSuccessFn === 'function' ||\n typeof onDeepLinkFailedFn === 'function')\n ) {\n resultFromDeepLinkAtom.set(bigIOError)\n }\n if (onFailedFn) {\n // this is async fn,prevent fake async fn that return promise\n // fire and forget\n safeTry(() => onFailedFn(result.error), bigIOError)\n return\n }\n consoleError(bigIOError)\n return\n }\n $store.notify('$sessionSignal')\n\n const originalSessionDate = result.data.session\n const hydratedSession = {\n createdAt: new Date(originalSessionDate.createdAt),\n updatedAt: new Date(originalSessionDate.updatedAt),\n expiresAt: new Date(originalSessionDate.expiresAt),\n }\n const userSession = { user: result.data.user, session: hydratedSession }\n if (\n lazySignalUIReadyForFn &&\n (typeof onDeepLinkSuccessFn === 'function' ||\n typeof onDeepLinkFailedFn === 'function')\n ) {\n resultFromDeepLinkAtom.set(userSession)\n }\n const onSuccessFn = onDeepLinkSuccessFnAtom.get()\n if (onSuccessFn) {\n // this is async fn,prevent fake async fn that return promise\n // fire and forget\n safeTry(\n () => onSuccessFn(userSession),\n new BigIOError('Failed at onSuccessFn', {\n bigioErrorStack: [\n {\n ctx: {\n deepLinkEvent: dataFromMain,\n },\n },\n ],\n }),\n )\n }\n return\n },\n )\n ipcDeepLinkAtom.set(true)\n }\n\n // Tell main app is ready handle the coldstart\n consoleLog('[Client] 發送 App Ready 信號...')\n if (\n !lazySignalUIReadyForFn ||\n typeof onDeepLinkSuccessFn === 'function' ||\n typeof onDeepLinkFailedFn === 'function'\n ) {\n appMountedAtom.set(true)\n sendAppMounted()\n }\n }\n\n // Lock it\n isPluginReadyAtom.set(true)\n return {\n bigio: {\n onDeepLinkSuccess: (\n fn: ElectronRendererPluginOptions['onDeepLinkSuccessFn'],\n ) => {\n if (!isElectronWindow(window)) {\n return\n }\n if (typeof fn === 'function') {\n onDeepLinkSuccessFnAtom.set(fn)\n }\n if (lazySignalUIReadyForFn) {\n if (!appMountedAtom.get()) {\n appMountedAtom.set(true)\n sendAppMounted()\n return\n }\n const result = resultFromDeepLinkAtom.get()\n if (!(result instanceof Error) && result && fn) {\n safeTry(\n async () => {\n await fn(result)\n resultFromDeepLinkAtom.set(null)\n },\n new BigIOError('Failed at lazy onSuccessFn', {\n bigioErrorStack: [\n {\n ctx: result,\n },\n ],\n }),\n )\n }\n return\n }\n },\n onDeepLinkFailed: (fn: ElectronRendererPluginOptions['onDeepLinkFailedFn']) => {\n if (!isElectronWindow(window)) {\n return\n }\n if (typeof fn === 'function') {\n onDeepLinkFailedFnAtom.set(fn)\n }\n if (lazySignalUIReadyForFn) {\n if (!appMountedAtom.get()) {\n appMountedAtom.set(true)\n sendAppMounted()\n return\n }\n const result = resultFromDeepLinkAtom.get()\n if (result instanceof Error && fn) {\n safeTry(\n async () => {\n await fn(result)\n resultFromDeepLinkAtom.set(null)\n },\n new BigIOError('Failed at lazy onFailedFn', {\n bigioErrorStack: [\n {\n ctx: String(result),\n },\n ],\n }),\n )\n }\n return\n }\n },\n },\n }\n },\n } satisfies BetterAuthClientPlugin\n}\n"]}
1
+ {"version":3,"sources":["../node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/clean-stores/index.js","../node_modules/.pnpm/nanostores@1.1.0/node_modules/nanostores/atom/index.js","../src/options/electron-plugin-options.ts","../src/utils/electron-plugin-env.ts","../node_modules/.pnpm/@oslojs+encoding@1.1.0/node_modules/@oslojs/encoding/dist/base32.js","../node_modules/.pnpm/@oslojs+encoding@1.1.0/node_modules/@oslojs/encoding/dist/base64.js","../src/utils/electron-plugin-utils.ts","../src/renderer/electron-renderer-plugin.ts"],"names":["window","EncodingPadding","DecodingPadding","z"],"mappings":";;;;;;;;;;AAEO,IAAI,KAAA,0BAAe,OAAO,CAAA;;;ACAjC,IAAI,gBAAgB,EAAC;AACrB,IAAI,OAAA,GAAU,CAAA;AACd,IAAM,wBAAA,GAA2B,CAAA;AAI1B,IAAM,kCAAO,CAAA,YAAA,KAAgB;AAClC,EAAA,IAAI,YAAY,EAAC;AACjB,EAAA,IAAI,KAAA,GAAQ;AAAA,IACV,GAAA,GAAM;AACJ,MAAA,IAAI,CAAC,MAAM,EAAA,EAAI;AACb,QAAA,KAAA,CAAM,OAAO,MAAM;AAAA,QAAC,CAAC,CAAA,EAAE;AAAA,MACzB;AACA,MAAA,OAAO,KAAA,CAAM,KAAA;AAAA,IACf,CAAA;AAAA,IACA,EAAA,EAAI,CAAA;AAAA,IACJ,OAAO,QAAA,EAAU;AACf,MAAA,KAAA,CAAM,EAAA,GAAK,SAAA,CAAU,IAAA,CAAK,QAAQ,CAAA;AAElC,MAAA,OAAO,MAAM;AACX,QAAA,KAAA,IACM,CAAA,GAAI,OAAA,GAAU,wBAAA,EAClB,CAAA,GAAI,cAAc,MAAA,IAElB;AACA,UAAA,IAAI,aAAA,CAAc,CAAC,CAAA,KAAM,QAAA,EAAU;AACjC,YAAA,aAAA,CAAc,MAAA,CAAO,GAAG,wBAAwB,CAAA;AAAA,UAClD,CAAA,MAAO;AACL,YAAA,CAAA,IAAK,wBAAA;AAAA,UACP;AAAA,QACF;AAEA,QAAA,IAAI,KAAA,GAAQ,SAAA,CAAU,OAAA,CAAQ,QAAQ,CAAA;AACtC,QAAA,IAAI,CAAC,KAAA,EAAO;AACV,UAAA,SAAA,CAAU,MAAA,CAAO,OAAO,CAAC,CAAA;AACzB,UAAA,IAAI,CAAC,EAAE,KAAA,CAAM,EAAA,QAAU,GAAA,EAAI;AAAA,QAC7B;AAAA,MACF,CAAA;AAAA,IACF,CAAA;AAAA,IACA,MAAA,CAAO,UAAU,UAAA,EAAY;AAE3B,MAAA,IAAI,gBAAA,GAAmB,CAAC,aAAA,CAAc,MAAA;AACtC,MAAA,KAAA,IAAS,YAAY,SAAA,EAAW;AAC9B,QAAA,aAAA,CAAc,IAAA,CAAK,QAAA,EAAU,KAAA,CAAM,KAAA,EAAO,UAAU,UAAU,CAAA;AAAA,MAChE;AAEA,MAAA,IAAI,gBAAA,EAAkB;AACpB,QAAA,KACE,UAAU,CAAA,EACV,OAAA,GAAU,aAAA,CAAc,MAAA,EACxB,WAAW,wBAAA,EACX;AACA,UAAA,aAAA,CAAc,OAAO,CAAA;AAAA,YACnB,aAAA,CAAc,UAAU,CAAC,CAAA;AAAA,YACzB,aAAA,CAAc,UAAU,CAAC,CAAA;AAAA,YACzB,aAAA,CAAc,UAAU,CAAC;AAAA,WAC3B;AAAA,QACF;AACA,QAAA,aAAA,CAAc,MAAA,GAAS,CAAA;AAAA,MACzB;AAAA,IACF,CAAA;AAAA;AAAA;AAAA,IAGA,GAAA,GAAM;AAAA,IAAC,CAAA;AAAA,IACP,IAAI,QAAA,EAAU;AACZ,MAAA,IAAI,WAAW,KAAA,CAAM,KAAA;AACrB,MAAA,IAAI,aAAa,QAAA,EAAU;AACzB,QAAA,KAAA,CAAM,KAAA,GAAQ,QAAA;AACd,QAAA,KAAA,CAAM,OAAO,QAAQ,CAAA;AAAA,MACvB;AAAA,IACF,CAAA;AAAA,IACA,UAAU,QAAA,EAAU;AAClB,MAAA,IAAI,MAAA,GAAS,KAAA,CAAM,MAAA,CAAO,QAAQ,CAAA;AAClC,MAAA,QAAA,CAAS,MAAM,KAAK,CAAA;AACpB,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAAA,IACA,KAAA,EAAO;AAAA,GACT;AAEA,EAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,IAAA,KAAA,CAAM,KAAK,IAAI,MAAM;AACnB,MAAA,SAAA,GAAY,EAAC;AACb,MAAA,KAAA,CAAM,EAAA,GAAK,CAAA;AACX,MAAA,KAAA,CAAM,GAAA,EAAI;AAAA,IACZ,CAAA;AAAA,EACF;AAEA,EAAA,OAAO,KAAA;AACT,CAAA;AC0IO,IAAM,4BAAA,GAA+B;AAAA,EACxC,eAAA,EAAiB,OAAA;AAAA,EACjB,iBAAA,EAAmB,cAAA;AAAA,EACnB,oBAAA,EAAsB,mBAAA;AAAA,EACtB,qBAAA,EAAuB,IAAA;AAAA,EACvB,2BAAA,EAA6B,sBAAA;AAAA,EAC7B,mBAAA,EAAqB,oBAAA;AAAA,EACrB,sBAAA,EAAwB,sBAAA;AAAA,EACxB,qBAAA,EAAuB,oBAAA;AAAA,EACvB,kBAAA,EAAoB,QAAA;AAAA,EACpB,sBAAA,EAAwB;AAC5B,CAAA;;;ACtLA,IAAM,YAAY,MAAM;AACpB,EAAA,IAAI,OAAO,eAAe,WAAA,EAAa;AACnC,IAAA,OAAO,UAAA;AAAA,EACX;AACA,EAAA,IAAI,OAAO,SAAS,WAAA,EAAa;AAC7B,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAC/B,IAAA,OAAO,MAAA;AAAA,EACX;AACA,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAC/B,IAAA,OAAO,MAAA;AAAA,EACX;AACA,EAAA,MAAM,IAAI,MAAM,gCAAgC,CAAA;AACpD,CAAA;AACgB,SAAA;AAuBT,SAAS,iBAAiBA,OAAAA,EAA8D;AAC3F,EAAA,IAAI,OAAOA,YAAW,WAAA,EAAa;AAC/B,IAAA,IACI,OAAO,SAAA,KAAc,WAAA,IACrB,WAAA,IAAe,SAAA,IACf,SAAA,CAAU,SAAA,CAAU,WAAA,EAAY,CAAE,QAAA,CAAS,YAAY,CAAA,EACzD;AACE,MAAA,OAAO,IAAA;AAAA,IACX;AACA,IAAA,IAAI,UAAA,IAAcA,OAAAA,IAAU,OAAOA,OAAAA,CAAO,aAAa,WAAA,EAAa;AAChE,MAAA,OAAO,IAAA;AAAA,IACX;AAAA,EACJ;AACA,EAAA,OAAO,KAAA;AACX;AAmBA,IAAM,gBAAgB,MAAc;AAChC,EAAA,IAAI,OAAO,MAAA,CAAA,IAAA,KAAgB,WAAA,IAAe,YAAY,GAAA,IAAO,MAAA,CAAA,IAAA,CAAY,IAAI,IAAA,EAAM;AAC/E,IAAA,OAAO,YAAY,GAAA,CAAI,IAAA;AAAA,EAC3B;AAGA,EAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,QAAQ,GAAA,IAAO,OAAA,CAAQ,IAAI,QAAA,EAAU;AACvE,IAAA,OAAO,QAAQ,GAAA,CAAI,QAAA;AAAA,EACvB;AAEA,EAAA,OAAO,aAAA;AACX,CAAA;AAEA,IAAM,UAAU,aAAA,EAAc;AAEvB,IAAM,SAAS,OAAA,KAAY,aAAA;AAI3B,IAAM,wBAAwB,MAAM;AAEvC,EAAA,IAAI,OAAO,OAAA,KAAY,WAAA,IAAe,QAAQ,QAAA,IAAY,OAAA,CAAQ,SAAS,QAAA,EAAU;AACjF,IAAA,IAAI;AACA,MAAA,OAAO,SAAA,CAAQ,UAAU,CAAA,CAAE,GAAA,CAAI,UAAA;AAAA,IACnC,CAAA,CAAA,MAAQ;AACJ,MAAA,OAAO,KAAA;AAAA,IACX;AAAA,EACJ;AACA,EAAA,OAAO,KAAA;AACX,CAAA,GAAG;AAEH,IAAI,OAAO,YAAY,WAAA,EAAa;AAChC,EAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,oBAAA,EAAuB,OAAO,CAAA,aAAA,EAAgB,oBAAoB,CAAA,CAAE,CAAA;AACtF;;;ACcA,IAAI,eAAA;AAAA,CACH,SAAUC,gBAAAA,EAAiB;AACxB,EAAAA,gBAAAA,CAAgBA,gBAAAA,CAAgB,SAAS,CAAA,GAAI,CAAC,CAAA,GAAI,SAAA;AAClD,EAAAA,gBAAAA,CAAgBA,gBAAAA,CAAgB,MAAM,CAAA,GAAI,CAAC,CAAA,GAAI,MAAA;AACnD,CAAA,EAAG,eAAA,KAAoB,eAAA,GAAkB,EAAC,CAAE,CAAA;AAC5C,IAAI,eAAA;AAAA,CACH,SAAUC,gBAAAA,EAAiB;AACxB,EAAAA,gBAAAA,CAAgBA,gBAAAA,CAAgB,UAAU,CAAA,GAAI,CAAC,CAAA,GAAI,UAAA;AACnD,EAAAA,gBAAAA,CAAgBA,gBAAAA,CAAgB,QAAQ,CAAA,GAAI,CAAC,CAAA,GAAI,QAAA;AACrD,CAAA,EAAG,eAAA,KAAoB,eAAA,GAAkB,EAAC,CAAE,CAAA;;;AC/KrC,SAAS,yBAAyB,KAAA,EAAO;AAC5C,EAAA,OAAO,qBAAA,CAAsB,KAAA,EAAO,iBAAA,EAAmBD,gBAAAA,CAAgB,IAAI,CAAA;AAC/E;AACA,SAAS,qBAAA,CAAsB,KAAA,EAAO,QAAA,EAAU,OAAA,EAAS;AACrD,EAAA,IAAI,MAAA,GAAS,EAAA;AACb,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,UAAA,EAAY,KAAK,CAAA,EAAG;AAC1C,IAAA,IAAI,MAAA,GAAS,CAAA;AACb,IAAA,IAAI,aAAA,GAAgB,CAAA;AACpB,IAAA,KAAA,IAAS,CAAA,GAAI,GAAG,CAAA,GAAI,CAAA,IAAK,IAAI,CAAA,GAAI,KAAA,CAAM,YAAY,CAAA,EAAA,EAAK;AACpD,MAAA,MAAA,GAAU,MAAA,IAAU,CAAA,GAAK,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA;AACpC,MAAA,aAAA,IAAiB,CAAA;AAAA,IACrB;AACA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,EAAK;AACxB,MAAA,IAAI,iBAAiB,CAAA,EAAG;AACpB,QAAA,MAAA,IAAU,QAAA,CAAU,MAAA,IAAW,aAAA,GAAgB,CAAA,GAAM,EAAI,CAAA;AACzD,QAAA,aAAA,IAAiB,CAAA;AAAA,MACrB,CAAA,MAAA,IACS,gBAAgB,CAAA,EAAG;AACxB,QAAA,MAAA,IAAU,QAAA,CAAU,MAAA,IAAW,CAAA,GAAI,aAAA,GAAkB,EAAI,CAAA;AACzD,QAAA,aAAA,GAAgB,CAAA;AAAA,MACpB,CAAA,MAAA,IACS,OAAA,KAAYA,gBAAAA,CAAgB,OAAA,EAAS;AAC1C,QAAA,MAAA,IAAU,GAAA;AAAA,MACd;AAAA,IACJ;AAAA,EACJ;AACA,EAAA,OAAO,MAAA;AACX;AAEA,IAAM,iBAAA,GAAoB,kEAAA;AA2D1B,IAAIA,gBAAAA;AAAA,CACH,SAAUA,gBAAAA,EAAiB;AACxB,EAAAA,gBAAAA,CAAgBA,gBAAAA,CAAgB,SAAS,CAAA,GAAI,CAAC,CAAA,GAAI,SAAA;AAClD,EAAAA,gBAAAA,CAAgBA,gBAAAA,CAAgB,MAAM,CAAA,GAAI,CAAC,CAAA,GAAI,MAAA;AACnD,CAAA,EAAGA,gBAAAA,KAAoBA,gBAAAA,GAAkB,EAAC,CAAE,CAAA;AAC5C,IAAIC,gBAAAA;AAAA,CACH,SAAUA,gBAAAA,EAAiB;AACxB,EAAAA,gBAAAA,CAAgBA,gBAAAA,CAAgB,UAAU,CAAA,GAAI,CAAC,CAAA,GAAI,UAAA;AACnD,EAAAA,gBAAAA,CAAgBA,gBAAAA,CAAgB,QAAQ,CAAA,GAAI,CAAC,CAAA,GAAI,QAAA;AACrD,CAAA,EAAGA,gBAAAA,KAAoBA,gBAAAA,GAAkB,EAAC,CAAE,CAAA;ACrFrC,IAAM,UAAA,GAAN,cAAyB,KAAA,CAAM;AAAA,EAClB,eAAA;AAAA,EAEhB,WAAA,CAAY,SAAiB,OAAA,EAA2D;AACpF,IAAA,KAAA,CAAM,OAAA,EAAS,EAAE,KAAA,EAAO,OAAA,CAAQ,OAAO,CAAA;AACvC,IAAA,IAAA,CAAK,IAAA,GAAO,YAAA;AACZ,IAAA,IAAA,CAAK,eAAA,GAAkB,OAAA,CAAQ,eAAA,IAAmB,EAAC;AAEnD,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAAA;AAChD,IAAA,MAAA,CAAO,eAAe,IAAA,EAAM,iBAAA,EAAmB,EAAE,UAAA,EAAY,OAAO,CAAA;AACpE,IAAA,IAAI,MAAM,iBAAA,EAAmB;AACzB,MAAA,KAAA,CAAM,iBAAA,CAAkB,IAAA,EAAM,IAAA,CAAK,WAAW,CAAA;AAAA,IAClD;AAAA,EACJ;AAAA,EACA,MAAA,GAAS;AACL,IAAA,OAAO;AAAA,MACH,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,iBAAiB,IAAA,CAAK;AAAA,KAC1B;AAAA,EACJ;AACJ,CAAA;AAEO,IAAM,YAAA,GAAe,CACxB,aAAA,EACA,OAAA,EACA,eAAA,KACC;AACD,EAAA,IAAI,CAAC,MAAA,EAAQ;AACT,IAAA;AAAA,EACJ;AACA,EAAA,IAAI,WAAW,eAAA,EAAiB;AAC5B,IAAA,OAAA,CAAQ,eAAe,CAAA,YAAA,CAAc,CAAA;AACrC,IAAA,OAAA,CAAQ,KAAA,CAAM,0BAA0B,OAAO,CAAA;AAC/C,IAAA,IAAI,MAAM,OAAA,CAAQ,eAAe,CAAA,IAAK,eAAA,CAAgB,SAAS,CAAA,EAAG;AAC9D,MAAA,OAAA,CAAQ,IAAI,kCAAkC,CAAA;AAC9C,MAAA,OAAA,CAAQ,MAAM,eAAe,CAAA;AAAA,IACjC;AACA,IAAA,OAAA,CAAQ,KAAA,CAAM,iCAAiC,aAAa,CAAA;AAC5D,IAAA,OAAA,CAAQ,QAAA,EAAS;AAAA,EACrB,CAAA,MAAA,IAAW,yBAAyB,UAAA,EAAY;AAC5C,IAAA,OAAA,CAAQ,eAAe,CAAA,YAAA,CAAc,CAAA;AACrC,IAAA,OAAA,CAAQ,KAAA,CAAM,wBAAA,EAA0B,aAAA,CAAc,OAAO,CAAA;AAC7D,IAAA,IACI,KAAA,CAAM,QAAQ,aAAA,CAAc,eAAe,KAC3C,aAAA,CAAc,eAAA,CAAgB,SAAS,CAAA,EACzC;AACE,MAAA,OAAA,CAAQ,IAAI,kCAAkC,CAAA;AAC9C,MAAA,OAAA,CAAQ,KAAA,CAAM,cAAc,eAAe,CAAA;AAAA,IAC/C;AACA,IAAA,OAAA,CAAQ,KAAA,CAAM,+BAAA,EAAiC,aAAA,CAAc,KAAK,CAAA;AAClE,IAAA,OAAA,CAAQ,QAAA,EAAS;AAAA,EACrB,CAAA,MAAO;AACH,IAAA,OAAA,CAAQ,eAAe,CAAA,OAAA,CAAS,CAAA;AAChC,IAAA,OAAA,CAAQ,KAAA,CAAM,aAAa,aAAa,CAAA;AACxC,IAAA,OAAA,CAAQ,QAAA,EAAS;AAAA,EACrB;AACJ,CAAA;AACO,IAAM,UAAA,GAAa,IAAI,IAAA,KAA0B;AACpD,EAAA,IAAI,MAAA,EAAQ;AACR,IAAA,OAAA,CAAQ,GAAA,CAAI,GAAG,IAAI,CAAA;AAAA,EACvB;AACJ,CAAA;AAsBA,SAAS,2BAA2B,KAAA,EAA2B;AAC3D,EAAA,IAAI,iBAAiB,UAAA,EAAY;AAC7B,IAAA,OAAO,KAAA,CAAM,eAAA;AAAA,EACjB;AAEA,EAAA,IAAI,KAAA,YAAiB,KAAA,IAAS,iBAAA,IAAqB,KAAA,EAAO;AACtD,IAAA,OAAO,MAAM,OAAA,CAAQ,KAAA,CAAM,eAAe,CAAA,GAAI,KAAA,CAAM,kBAAkB,EAAC;AAAA,EAC3E;AACA,EAAA,OAAO,EAAC;AACZ;AAUO,SAAS,IAAA,CAAQ,OAAU,YAAA,EAAyC;AAEvE,EAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,KAAA,KAAU,MAAA,EAAW;AACvC,IAAA,OAAO,KAAA;AAAA,EACX;AACA,EAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AAErB,EAAA,MAAM,OAAO,MAAM;AACf,IAAA,MAAM,WAAA,GAAc,sBAAA;AAEpB,IAAA,IACI,EAAE,YAAA,YAAwB,KAAA,CAAA,IAC1B,OAAO,YAAA,KAAiB,QAAA,IACxB,SAAS,YAAA,EACX;AACE,MAAA,OAAO,YAAA,CAAa,GAAA;AAAA,IACxB;AACA,IAAA,IAAI,OAAO,iBAAiB,QAAA,EAAU;AAClC,MAAA,OAAO,WAAA;AAAA,IACX;AACA,IAAA,IAAI,iBAAiB,MAAA,EAAW;AAC5B,MAAA,OAAO,WAAA;AAAA,IACX;AACA,IAAA,IAAI,wBAAwB,KAAA,EAAO;AAC/B,MAAA,OAAO,WAAA;AAAA,IACX;AACA,IAAA,IAAI,iBAAiB,IAAA,EAAM;AACvB,MAAA,OAAO,WAAA;AAAA,IACX;AACA,IAAA,OAAO,WAAA;AAAA,EACX,CAAA,GAAG;AACH,EAAA,MAAM,OAAO,MAAM;AACf,IAAA,MAAM,WAAA,GAAc,2CAAA;AACpB,IAAA,IACI,EAAE,YAAA,YAAwB,KAAA,CAAA,IAC1B,OAAO,YAAA,KAAiB,QAAA,IACxB,KAAA,IAAS,YAAA,IACT,OAAO,YAAA,CAAa,GAAA,KAAQ,QAAA,EAC9B;AACE,MAAA,OAAO,YAAA,CAAa,GAAA;AAAA,IACxB;AACA,IAAA,IAAI,OAAO,iBAAiB,QAAA,EAAU;AAClC,MAAA,OAAO,YAAA;AAAA,IACX;AACA,IAAA,IAAI,iBAAiB,MAAA,EAAW;AAC5B,MAAA,OAAO,WAAA;AAAA,IACX;AACA,IAAA,IAAI,wBAAwB,KAAA,EAAO;AAC/B,MAAA,OAAO,WAAA;AAAA,IACX;AACA,IAAA,IAAI,iBAAiB,IAAA,EAAM;AACvB,MAAA,OAAO,WAAA;AAAA,IACX;AACA,IAAA,OAAO,WAAA;AAAA,EACX,CAAA,GAAG;AAEH,EAAA,MAAM,OAAA,GAAU;AAAA,IACZ,GAAA;AAAA,IACA,GAAA;AAAA,IACA,SAAA,EAAW;AAAA,GACf;AAEA,EAAA,IAAI,wBAAwB,KAAA,EAAO;AAC/B,IAAA,MAAM,SAAA,GAAY,2BAA2B,YAAY,CAAA;AACzD,IAAA,MAAM,QAAA,GAAW,CAAC,GAAG,SAAA,EAAW,OAAO,CAAA;AACvC,IAAA,IAAI,CAAC,aAAa,KAAA,EAAO;AACrB,MAAA,IAAI;AACA,QAAA,MAAA,CAAO,cAAA,CAAe,cAAc,OAAA,EAAS;AAAA,UACzC,KAAA,EAAO,IAAI,UAAA,CAAW,GAAA,EAAK;AAAA,YACvB,eAAA,EAAiB;AAAA,WACpB,CAAA;AAAA,UACD,YAAA,EAAc,IAAA;AAAA,UACd,QAAA,EAAU,IAAA;AAAA,UACV,UAAA,EAAY;AAAA,SACf,CAAA;AAAA,MACL,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACJ;AACA,IAAA,IAAI;AACA,MAAA,MAAA,CAAO,cAAA,CAAe,cAAc,iBAAA,EAAmB;AAAA,QACnD,KAAA,EAAO,QAAA;AAAA,QACP,YAAA,EAAc,IAAA;AAAA,QACd,QAAA,EAAU,IAAA;AAAA,QACV,UAAA,EAAY;AAAA,OACf,CAAA;AAAA,IACL,CAAA,CAAA,MAAQ;AACJ,MAAA,MAAM,IAAI,WAAW,+BAAA,EAAiC;AAAA,QAClD,KAAA,EAAO,YAAA;AAAA,QACP,eAAA,EAAiB;AAAA,OACpB,CAAA;AAAA,IACL;AACA,IAAA,MAAM,YAAA;AAAA,EACV;AAEA,EAAA,MAAM,IAAI,WAAW,GAAA,EAAK;AAAA,IACtB,eAAA,EAAiB,CAAC,OAAO;AAAA,GAC5B,CAAA;AACL;AAEA,IAAM,iBAAA,GAAoB,CAAC,aAAA,EAAwB,YAAA,KAAgC;AAC/E,EAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,EAAA,MAAM,SAAA,GAAY,2BAA2B,aAAa,CAAA;AAC1D,EAAA,MAAM,mBACF,aAAA,YAAyB,KAAA,GAAQ,aAAA,CAAc,OAAA,GAAU,OAAO,aAAa,CAAA;AACjF,EAAA,MAAM,UAAU,MAAM;AAClB,IAAA,IAAI,iBAAiB,IAAA,EAAM;AACvB,MAAA,OAAO,gBAAA;AAAA,IACX;AACA,IAAA,IAAI,OAAO,iBAAiB,QAAA,EAAU;AAClC,MAAA,OAAO,YAAA;AAAA,IACX;AACA,IAAA,IACI,OAAO,YAAA,KAAiB,QAAA,IACxB,SAAS,YAAA,IACT,EAAE,wBAAwB,KAAA,CAAA,EAC5B;AACE,MAAA,OAAO,aAAa,GAAA,IAAO,gBAAA;AAAA,IAC/B;AACA,IAAA,IAAI,wBAAwB,KAAA,EAAO;AAC/B,MAAA,OAAO,YAAA,CAAa,OAAA;AAAA,IACxB;AACA,IAAA,OAAO,gBAAA;AAAA,EACX,CAAA,GAAG;AACH,EAAA,MAAM,aAAa,MAAM;AACrB,IAAA,IAAI,iBAAiB,IAAA,EAAM;AACvB,MAAA,OAAO;AAAA,QACH;AAAA,UACI,GAAA,EAAK,gBAAA;AAAA,UACL,GAAA,EAAK,gBAAA;AAAA,UACL,SAAA,EAAW;AAAA;AACf,OACJ;AAAA,IACJ;AACA,IAAA,IAAI,OAAO,iBAAiB,QAAA,EAAU;AAClC,MAAA,OAAO;AAAA,QACH;AAAA,UACI,GAAA,EAAK,YAAA;AAAA,UACL,GAAA,EAAK,gBAAA;AAAA,UACL,SAAA,EAAW;AAAA;AACf,OACJ;AAAA,IACJ;AACA,IAAA,IACI,OAAO,YAAA,KAAiB,QAAA,IACxB,SAAS,YAAA,IACT,EAAE,wBAAwB,KAAA,CAAA,EAC5B;AACE,MAAA,OAAO;AAAA,QACH;AAAA,UACI,GAAA,EAAK,aAAa,GAAA,IAAO,gBAAA;AAAA,UACzB,KAAK,YAAA,CAAa,GAAA;AAAA,UAClB,SAAA,EAAW;AAAA;AACf,OACJ;AAAA,IACJ;AACA,IAAA,IAAI,wBAAwB,KAAA,EAAO;AAC/B,MAAA,MAAM,YAAA,GAAe,2BAA2B,YAAY,CAAA;AAC5D,MAAA,IAAI,YAAA,CAAa,SAAS,CAAA,EAAG;AACzB,QAAA,MAAM,QAAA,GAAW,YAAA,CAAa,EAAA,CAAG,EAAE,CAAA;AACnC,QAAA,IACI,QAAA,IACA,OAAO,QAAA,KAAa,QAAA,IACpB,EAAE,WAAA,IAAe,QAAA,IAAY,SAAS,SAAA,CAAA,EACxC;AACE,UAAA,OAAO,CAAC,GAAG,YAAA,CAAa,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,EAAG,EAAE,GAAG,QAAA,EAAU,SAAA,EAAW,GAAA,EAAK,CAAA;AAAA,QACzE;AACA,QAAA,OAAO,YAAA;AAAA,MACX;AACA,MAAA,OAAO,CAAC,EAAE,GAAA,EAAK,YAAA,CAAa,SAAS,GAAA,EAAK,gBAAA,EAAkB,SAAA,EAAW,GAAA,EAAK,CAAA;AAAA,IAChF;AAEA,IAAA,OAAO,CAAC,EAAE,GAAA,EAAK,gBAAA,EAAkB,CAAA;AAAA,EACrC,CAAA,GAAG;AACH,EAAA,MAAM,cAAA,GAAiB,SAAS,GAAA,GAAM,EAAA;AACtC,EAAA,MAAM,YAAY,MAAM;AACpB,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,SAAA,EAAW,GAAG,SAAS,CAAA;AACzC,IAAA,IAAI,KAAA,CAAM,SAAS,cAAA,EAAgB;AAC/B,MAAA,OAAO;AAAA,QACH;AAAA,UACI,GAAA,EAAK,0BAA0B,cAAc,CAAA,KAAA,CAAA;AAAA,UAC7C,GAAA,EAAK,IAAA;AAAA,UACL,SAAA,EAAW;AAAA,SACf;AAAA,QACA,GAAG,KAAA,CAAM,KAAA,CAAM,CAAC,cAAc;AAAA,OAClC;AAAA,IACJ;AACA,IAAA,OAAO,KAAA;AAAA,EACX,CAAA,GAAG;AACH,EAAA,YAAA,CAAa,aAAA,EAAe,QAAQ,QAAQ,CAAA;AAC5C,EAAA,IAAI,wBAAwB,KAAA,EAAO;AAC/B,IAAA,IAAI,CAAC,YAAA,CAAa,KAAA,IAAS,aAAA,EAAe;AACtC,MAAA,IAAI;AACA,QAAA,MAAA,CAAO,cAAA,CAAe,cAAc,OAAA,EAAS;AAAA,UACzC,KAAA,EAAO,aAAA;AAAA,UACP,YAAA,EAAc,IAAA;AAAA,UACd,QAAA,EAAU,IAAA;AAAA,UACV,UAAA,EAAY;AAAA,SACf,CAAA;AAAA,MACL,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACJ;AACA,IAAA,IAAI;AACA,MAAA,MAAA,CAAO,cAAA,CAAe,cAAc,iBAAA,EAAmB;AAAA,QACnD,KAAA,EAAO,QAAA;AAAA,QACP,YAAA,EAAc,IAAA;AAAA,QACd,QAAA,EAAU,IAAA;AAAA,QACV,UAAA,EAAY;AAAA,OACf,CAAA;AAAA,IACL,CAAA,CAAA,MAAQ;AACJ,MAAA,MAAM,IAAI,WAAW,+BAAA,EAAiC;AAAA,QAClD,KAAA,EAAO,YAAA;AAAA,QACP,eAAA,EAAiB;AAAA,OACpB,CAAA;AAAA,IACL;AACA,IAAA,MAAM,YAAA;AAAA,EACV;AACA,EAAA,MAAM,IAAI,WAAW,MAAA,EAAQ;AAAA,IACzB,KAAA,EAAO,aAAA;AAAA,IACP,eAAA,EAAiB;AAAA,GACpB,CAAA;AACL,CAAA;AAEA,IAAM,eAAA,GAAkB,CAAC,aAAA,KAA2B;AAChD,EAAA,MAAM,SAAA,GAAY,2BAA2B,aAAa,CAAA;AAC1D,EAAA,MAAM,mBACF,aAAA,YAAyB,KAAA,GAAQ,aAAA,CAAc,OAAA,GAAU,OAAO,aAAa,CAAA;AACjF,EAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,EAAA,MAAM,QAAA,GAAW;AAAA,IACb,GAAG,SAAA;AAAA,IACH,EAAE,GAAA,EAAK,gBAAA,EAAkB,GAAA,EAAK,gBAAA,EAAkB,WAAW,GAAA;AAAI,GACnE;AACA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,IAAA;AAAA,IACN,KAAA,EAAO,IAAI,UAAA,CAAW,gBAAA,EAAkB;AAAA,MACpC,KAAA,EAAO,aAAA;AAAA,MACP,eAAA,EAAiB;AAAA,KACpB;AAAA,GACL;AACJ,CAAA;AAEA,IAAM,aAAA,GAAgB,CAAI,eAAA,EAA6B,YAAA,KAAgC;AACnF,EAAA,IAAI,iBAAiB,MAAA,EAAW;AAC5B,IAAA,OAAO,eAAA,CACF,IAAA,CAAK,CAAC,IAAA,KAAS,KAAK,IAAA,EAAM,YAAY,CAAC,CAAA,CACvC,MAAM,CAAC,aAAA,KAAkB,iBAAA,CAAkB,aAAA,EAAe,YAAY,CAAC,CAAA;AAAA,EAChF;AAEA,EAAA,OAAO,gBACF,IAAA,CAAK,CAAC,UAAU,EAAE,IAAA,EAAM,KAAK,IAAI,CAAA,EAAG,KAAA,EAAO,IAAA,GAAO,CAAA,CAClD,KAAA,CAAM,CAAC,aAAA,KAAkB,eAAA,CAAgB,aAAa,CAAC,CAAA;AAChE,CAAA;AAmBO,SAAS,OAAA,CACZ,MACA,YAAA,EACyE;AACzE,EAAA,IAAI;AACA,IAAA,IAAI,gBAAgB,OAAA,EAAS;AACzB,MAAA,OAAO,aAAA,CAAc,MAAM,YAAY,CAAA;AAAA,IAC3C;AACA,IAAA,IAAI,OAAO,SAAS,UAAA,EAAY;AAC5B,MAAA,MAAM,SAAS,IAAA,EAAK;AACpB,MAAA,IAAI,kBAAkB,OAAA,EAAS;AAC3B,QAAA,OAAO,aAAA,CAAc,QAAQ,YAAY,CAAA;AAAA,MAC7C;AAEA,MAAA,IAAI,iBAAiB,KAAA,CAAA,EAAW;AAC5B,QAAA,OAAO,IAAA,CAAK,QAAQ,YAAY,CAAA;AAAA,MACpC;AACA,MAAA,OAAO;AAAA,QACH,IAAA,EAAM,KAAK,MAAM,CAAA;AAAA,QACjB,KAAA,EAAO;AAAA,OACX;AAAA,IACJ;AAAA,EACJ,SAAS,KAAA,EAAO;AACZ,IAAA,IAAI,iBAAiB,MAAA,EAAW;AAC5B,MAAA,iBAAA,CAAkB,OAAO,YAAY,CAAA;AAAA,IACzC;AACA,IAAA,OAAO,gBAAgB,KAAK,CAAA;AAAA,EAChC;AACA,EAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,EAAA,MAAM,eAAA,GAAkB,uDAAA;AACxB,EAAA,MAAM,YAAA,GAAe,IAAI,UAAA,CAAW,eAAA,EAAiB;AAAA,IACjD,KAAA,EAAO,IAAA;AAAA,IACP,eAAA,EAAiB;AAAA,MACb;AAAA,QACI,GAAA,EAAK,eAAA;AAAA,QACL,GAAA,EAAK,mBAAA;AAAA,QACL,SAAA,EAAW;AAAA;AACf;AACJ,GACH,CAAA;AACD,EAAA,IAAI,iBAAiB,MAAA,EAAW;AAC5B,IAAA,MAAM,YAAA;AAAA,EACV;AACA,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,IAAA;AAAA,IACN,KAAA,EAAO;AAAA,GACX;AACJ;AAEA,IAAM,SAAS,UAAA,CAAW,MAAA;AAC1B,IAAM,QAAA,GAAW,SAAA;AAMjB,IAAM,cAAA,GAAiB,IAAI,WAAA,EAAY;AAkEvC,SAAS,SAAS,MAAA,EAAkC;AAChD,EAAA,MAAM,WAAA,GAAc,KAAK,MAAA,EAAQ;AAAA,IAC7B,GAAA,EAAK,sCAAA;AAAA,IACL,GAAA,EAAK,EAAE,IAAA,EAAM,OAAO,MAAA;AAAO,GAC9B,CAAA;AACD,EAAA,MAAM,QAAQ,WAAA,YAAuB,UAAA,GAAa,WAAA,GAAc,IAAI,WAAW,WAAW,CAAA;AAE1F,EAAA,OAAO,yBAAyB,KAAK,CAAA;AACzC;AA6MA,eAAsB,sBAAsB,QAAA,EAAmC;AAC3E,EAAA,MAAM,aAAA,GAAgB,KAAK,QAAA,EAAU;AAAA,IACjC,GAAA,EAAK,4DAAA;AAAA,IACL,GAAA,EAAK,EAAE,MAAA,EAAQ,QAAA,EAAU,MAAA;AAAO,GACnC,CAAA;AACD,EAAA,MAAM,IAAA,GAAO,cAAA,CAAe,MAAA,CAAO,aAAa,CAAA;AAChD,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,MAAA,CAAO,OAAO,MAAA,CAAO,QAAA,EAAU,IAAI,CAAA,EAAG;AAAA,IACnE,GAAA,EAAK,2BAA2B,QAAQ,CAAA,cAAA,CAAA;AAAA,IACxC,GAAA,EAAK;AAAA,MACD,eAAe,IAAA,CAAK,UAAA;AAAA,MACpB,IAAA,EAAM;AAAA;AACV,GACH,CAAA;AAED,EAAA,OAAO,SAAS,UAAU,CAAA;AAC9B;;;ACrtBA,IAAM,mBAAA,GAAsB,yCAAA;AAE5B,IAAM,wBAAwB,MAAe;AACzC,EAAA,MAAM,GAAA,GAAM,MAAA;AACZ,EAAA,IAAI,OAAO,GAAA,CAAI,mBAAmB,MAAM,SAAA,IAAa,GAAA,CAAI,mBAAmB,CAAA,EAAG;AAC3E,IAAA,OAAO,IAAA;AAAA,EACX;AACA,EAAA,GAAA,CAAI,mBAAmB,CAAA,GAAI,IAAA;AAC3B,EAAA,OAAO,KAAA;AACX,CAAA;AAEA,IAAM,eAAA,GAAkB,KAAK,KAAK,CAAA;AAClC,IAAM,eAAA,GAAkB,KAA6B,IAAI,CAAA;AACzD,IAAM,oBAAoB,MAAM;AAC5B,EAAA,MAAM,kBAAA,GAAqB,gBAAgB,GAAA,EAAI;AAC/C,EAAA,IAAI,kBAAA,EAAoB;AACpB,IAAA,kBAAA,CAAmB,KAAA,EAAM;AAAA,EAC7B;AACA,EAAA,MAAM,cAAA,GAAiB,IAAI,eAAA,EAAgB;AAC3C,EAAA,eAAA,CAAgB,IAAI,cAAc,CAAA;AAClC,EAAA,OAAO,cAAA,CAAe,MAAA;AAC1B,CAAA;AAEA,IAAM,iBAAA,GAAoB,KAAK,KAAK,CAAA;AACpC,IAAM,cAAA,GAAiB,KAAK,KAAK,CAAA;AACjC,IAAM,sBAAA,GAAyB,KAAoC,IAAI,CAAA;AACvE,IAAM,uBAAA,GACF,KAA2D,MAAS,CAAA;AAExE,IAAM,sBAAA,GAAyB,KAA0D,MAAS,CAAA;AAE3F,IAAM,sBAAA,GAAyB,CAClC,6BAAA,KACC;AACD,EAAA,MAAM,MAAA,GAAS,EAAE,GAAG,4BAAA,EAA8B,GAAG,6BAAA,EAA8B;AACnF,EAAA,MAAM;AAAA,IACF,qBAAA;AAAA,IACA,eAAA;AAAA,IACA,2BAAA;AAAA,IACA,mBAAA;AAAA,IACA,oBAAA;AAAA,IACA,sBAAA;AAAA,IACA,qBAAA;AAAA,IACA,kBAAA;AAAA,IACA,mBAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA;AAAA,GAEJ,GAAI,MAAA;AACJ,EAAA,IAAI,OAAO,wBAAwB,UAAA,EAAY;AAC3C,IAAA,uBAAA,CAAwB,IAAI,mBAAmB,CAAA;AAAA,EACnD;AACA,EAAA,IAAI,OAAO,uBAAuB,UAAA,EAAY;AAC1C,IAAA,sBAAA,CAAuB,IAAI,kBAAkB,CAAA;AAAA,EACjD;AACA,EAAA,SAAS,cAAA,GAAiB;AACtB,IAAA,IAAI,CAAC,gBAAA,CAAiB,MAAM,CAAA,EAAG;AAC3B,MAAA;AAAA,IACJ;AACA,IAAA,MAAA,CAAO,QAAA,CAAS,WAAA,CAAY,IAAA,CAAK,sBAAsB,CAAA;AAAA,EAC3D;AACA,EAAA,OAAO;AAAA,IACH,EAAA,EAAI,gCAAA;AAAA,IACJ,oBAAoB,EAAC;AAAA,IAErB,UAAA,EAAY,SAAU,MAAA,EAAQ,MAAA,EAAQ,OAAA,EAAS;AAC3C,MAAA,IAAI,CAAC,gBAAA,CAAiB,MAAM,CAAA,EAAG;AAC3B,QAAA,OAAO;AAAA,UACH,KAAA,EAAO;AAAA,YACH,mBAAmB,MAAM,IAAA;AAAA,YACzB,kBAAkB,MAAM;AAAA;AAC5B,SACJ;AAAA,MACJ;AACA,MAAA,IAAI,EAAE,qBAAA,EAAsB,IAAK,iBAAA,CAAkB,KAAI,CAAA,EAAI;AACvD,QAAA,UAAA,CAAW,sDAAsD,CAAA;AAEjE,QAAA,IAAI,qBAAA,EAAuB;AACvB,UAAA,MAAM,wBAAwB,iBAAA,EAAkB;AAChD,UAAA,MAAA,CAAO,gBAAA;AAAA,YACH,OAAA;AAAA,YACA,MAAM;AACF,cAAA,MAAA,CAAO,OAAO,gBAAgB,CAAA;AAAA,YAElC,CAAA;AAAA,YACA,EAAE,QAAQ,qBAAA;AAAsB,WACpC;AAAA,QACJ;AACA,QAAA,IAAI,CAAC,eAAA,CAAgB,GAAA,EAAI,EAAG;AACxB,UAAA,MAAM,eAAA,GAAkBC,GAAE,MAAA,CAAO;AAAA,YAC7B,WAAA,EAAaA,EAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,YAC7B,QAAA,EAAUA,EAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC;AAAA,WAC7B,CAAA;AAED,UAAA,MAAA,CAAO,SAAS,WAAA,CAAY,EAAA;AAAA,YACxB,mBAAA;AAAA,YACA,OAAO,QAAQ,YAAA,KAAiB;AAC5B,cAAA,OAAA,CAAQ,IAAI,YAAY,CAAA;AACxB,cAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAW,KAAA,EAAO,SAAA,KAAc,MAAM,OAAA;AAAA,gBAChD,YAAY;AACR,kBAAA,MAAM,eAAA,GAAkB,CAAC,EAAE,GAAA,EAAK,cAAc,CAAA;AAC9C,kBAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,SAAA,CAAU,YAAY,CAAA;AACxD,kBAAA,IAAI,CAAC,SAAA,CAAU,OAAA,IAAW,SAAA,CAAU,SAAS,KAAA,CAAA,EAAW;AACpD,oBAAA,MAAM,IAAI,UAAA;AAAA,sBACN,uCAAA;AAAA,sBACA;AAAA,wBACI,OAAO,SAAA,CAAU,KAAA;AAAA,wBACjB,eAAA,EAAiB,CAAC,EAAE,GAAA,EAAK,WAAW;AAAA;AACxC,qBACJ;AAAA,kBACJ;AAEA,kBAAA,MAAM,EAAE,WAAA,EAAa,QAAA,EAAS,GAAI,SAAA,CAAU,IAAA;AAC5C,kBAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,WAAW,CAAA;AAEpC,kBAAA,IAAI,QAAA,CAAS,QAAA,KAAa,CAAA,EAAG,eAAe,CAAA,CAAA,CAAA,EAAK;AAC7C,oBAAA,MAAM,IAAI,WAAW,qBAAA,EAAuB;AAAA,sBACxC;AAAA,qBACH,CAAA;AAAA,kBACL;AAEA,kBAAA,MAAM,gBAAA,GAAmB,QAAA,CAAS,QAAA,CAAS,WAAA,EAAY;AAEvD,kBAAA,IAAI,qBAAqB,2BAAA,EAA6B;AAClD,oBAAA,MAAM,IAAI,WAAW,sBAAA,EAAwB;AAAA,sBACzC;AAAA,qBACH,CAAA;AAAA,kBACL;AAGA,kBAAA,MAAM,SAAA,GACF,QAAA,CAAS,YAAA,CAAa,GAAA,CAAI,qBAAqB,CAAA;AAEnD,kBAAA,OAAA,CAAQ,IAAI,SAAS,CAAA;AACrB,kBAAA,IAAI,CAAC,SAAA,EAAW;AACZ,oBAAA,MAAM,IAAI,WAAW,iBAAA,EAAmB;AAAA,sBACpC;AAAA,qBACH,CAAA;AAAA,kBACL;AACA,kBAAA,OAAA,CAAQ,IAAI,SAAS,CAAA;AACrB,kBAAA,MAAM,QAAQ,YAAY;AACtB,oBAAA,MAAM,cAAA,GAAiB,MAAM,qBAAA,CAAsB,QAAQ,CAAA;AAC3D,oBAAA,IAAI,cAAc,cAAA,EAAgB;AAC9B,sBAAA,MAAM,IAAI,WAAW,uBAAA,EAAyB;AAAA,wBAC1C;AAAA,uBACH,CAAA;AAAA,oBACL;AACA,oBAAA,OAAO,cAAA;AAAA,kBACX,GAAG,IAAI,CAAA;AAGP,kBAAA,MAAM,cAAA,GACF,QAAA,CAAS,YAAA,CAAa,GAAA,CAAI,kBAAkB,CAAA;AAChD,kBAAA,IAAI,CAAC,cAAA,EAAgB;AACjB,oBAAA,MAAM,IAAI,WAAW,WAAA,EAAa;AAAA,sBAC9B;AAAA,qBACH,CAAA;AAAA,kBACL;AACA,kBAAA,OAAO,EAAE,MAAA,EAAQ,cAAA,EAAgB,QAAA,EAAmB;AAAA,gBACxD;AAAA,eACJ;AACA,cAAA,OAAA,CAAQ,IAAI,SAAS,CAAA;AAErB,cAAA,MAAM,UAAA,GAAa,uBAAuB,GAAA,EAAI;AAC9C,cAAA,IAAI,CAAC,aAAa,SAAA,EAAW;AACzB,gBAAA,IACI,2BACC,OAAO,mBAAA,KAAwB,UAAA,IAC5B,OAAO,uBAAuB,UAAA,CAAA,EACpC;AACE,kBAAA,sBAAA,CAAuB,IAAI,SAAS,CAAA;AAAA,gBACxC;AACA,gBAAA,IAAI,UAAA,EAAY;AAGZ,kBAAA,OAAA;AAAA,oBACI,MAAM,WAAW,SAAS,CAAA;AAAA,oBAC1B,IAAI,WAAW,sBAAA,EAAwB;AAAA,sBACnC,eAAA,EAAiB;AAAA,wBACb;AAAA,0BACI,GAAA,EAAK,OAAO,SAAS;AAAA;AACzB;AACJ,qBACH;AAAA,mBACL;AACA,kBAAA;AAAA,gBACJ;AACA,gBAAA,IAAI,qBAAqB,UAAA,EAAY;AACjC,kBAAA,YAAA,CAAa,SAAS,CAAA;AAAA,gBAC1B,CAAA,MAAO;AACH,kBAAA,OAAA,CAAQ,KAAA;AAAA,oBACJ,gDAAgD,SAAA,YAAqB,KAAA,GAAQ,UAAU,OAAA,GAAU,MAAA,CAAO,SAAS,CAAC,CAAA;AAAA,mBACtH;AAAA,gBACJ;AACA,gBAAA;AAAA,cACJ;AAGA,cAAA,MAAM,SAAS,MAAM,MAAA;AAAA,gBACjB,IAAI,oBAAoB,CAAA,CAAA;AAAA,gBACxB;AAAA,kBACI,MAAA,EAAQ,MAAA;AAAA,kBACR,IAAA,EAAM;AAAA,oBACF,QAAQ,SAAA,CAAU,MAAA;AAAA,oBAClB,UAAU,SAAA,CAAU;AAAA;AACxB;AACJ,eACJ;AACA,cAAA,IAAI,OAAO,KAAA,EAAO;AACd,gBAAA,MAAM,UAAA,GAAa,IAAI,UAAA,CAAW,+BAAA,EAAiC;AAAA,kBAC/D,eAAA,EAAiB;AAAA,oBACb;AAAA,sBACI,GAAA,EAAK;AAAA,wBACD,aAAA,EAAe,YAAA;AAAA,wBACf,YAAY,MAAA,CAAO;AAAA;AACvB;AACJ;AACJ,iBACH,CAAA;AACD,gBAAA,IACI,2BACC,OAAO,mBAAA,KAAwB,UAAA,IAC5B,OAAO,uBAAuB,UAAA,CAAA,EACpC;AACE,kBAAA,sBAAA,CAAuB,IAAI,UAAU,CAAA;AAAA,gBACzC;AACA,gBAAA,IAAI,UAAA,EAAY;AAGZ,kBAAA,OAAA,CAAQ,MAAM,UAAA,CAAW,MAAA,CAAO,KAAK,GAAG,UAAU,CAAA;AAClD,kBAAA;AAAA,gBACJ;AACA,gBAAA,YAAA,CAAa,UAAU,CAAA;AACvB,gBAAA;AAAA,cACJ;AACA,cAAA,MAAA,CAAO,OAAO,gBAAgB,CAAA;AAE9B,cAAA,MAAM,mBAAA,GAAsB,OAAO,IAAA,CAAK,OAAA;AACxC,cAAA,MAAM,eAAA,GAAkB;AAAA,gBACpB,SAAA,EAAW,IAAI,IAAA,CAAK,mBAAA,CAAoB,SAAS,CAAA;AAAA,gBACjD,SAAA,EAAW,IAAI,IAAA,CAAK,mBAAA,CAAoB,SAAS,CAAA;AAAA,gBACjD,SAAA,EAAW,IAAI,IAAA,CAAK,mBAAA,CAAoB,SAAS;AAAA,eACrD;AACA,cAAA,MAAM,cAAc,EAAE,IAAA,EAAM,OAAO,IAAA,CAAK,IAAA,EAAM,SAAS,eAAA,EAAgB;AACvE,cAAA,IACI,2BACC,OAAO,mBAAA,KAAwB,UAAA,IAC5B,OAAO,uBAAuB,UAAA,CAAA,EACpC;AACE,gBAAA,sBAAA,CAAuB,IAAI,WAAW,CAAA;AAAA,cAC1C;AACA,cAAA,MAAM,WAAA,GAAc,wBAAwB,GAAA,EAAI;AAChD,cAAA,IAAI,WAAA,EAAa;AAGb,gBAAA,OAAA;AAAA,kBACI,MAAM,YAAY,WAAW,CAAA;AAAA,kBAC7B,IAAI,WAAW,uBAAA,EAAyB;AAAA,oBACpC,eAAA,EAAiB;AAAA,sBACb;AAAA,wBACI,GAAA,EAAK;AAAA,0BACD,aAAA,EAAe;AAAA;AACnB;AACJ;AACJ,mBACH;AAAA,iBACL;AAAA,cACJ;AACA,cAAA;AAAA,YACJ;AAAA,WACJ;AACA,UAAA,eAAA,CAAgB,IAAI,IAAI,CAAA;AAAA,QAC5B;AAGA,QAAA,UAAA,CAAW,iDAA6B,CAAA;AACxC,QAAA,IACI,CAAC,sBAAA,IACD,OAAO,wBAAwB,UAAA,IAC/B,OAAO,uBAAuB,UAAA,EAChC;AACE,UAAA,cAAA,CAAe,IAAI,IAAI,CAAA;AACvB,UAAA,cAAA,EAAe;AAAA,QACnB;AAAA,MACJ;AAGA,MAAA,iBAAA,CAAkB,IAAI,IAAI,CAAA;AAC1B,MAAA,OAAO;AAAA,QACH,KAAA,EAAO;AAAA,UACH,iBAAA,EAAmB,CACf,EAAA,KACC;AACD,YAAA,IAAI,CAAC,gBAAA,CAAiB,MAAM,CAAA,EAAG;AAC3B,cAAA;AAAA,YACJ;AACA,YAAA,IAAI,OAAO,OAAO,UAAA,EAAY;AAC1B,cAAA,uBAAA,CAAwB,IAAI,EAAE,CAAA;AAAA,YAClC;AACA,YAAA,IAAI,sBAAA,EAAwB;AACxB,cAAA,IAAI,CAAC,cAAA,CAAe,GAAA,EAAI,EAAG;AACvB,gBAAA,cAAA,CAAe,IAAI,IAAI,CAAA;AACvB,gBAAA,cAAA,EAAe;AACf,gBAAA;AAAA,cACJ;AACA,cAAA,MAAM,MAAA,GAAS,uBAAuB,GAAA,EAAI;AAC1C,cAAA,IAAI,EAAE,MAAA,YAAkB,KAAA,CAAA,IAAU,MAAA,IAAU,EAAA,EAAI;AAC5C,gBAAA,OAAA;AAAA,kBACI,YAAY;AACR,oBAAA,MAAM,GAAG,MAAM,CAAA;AACf,oBAAA,sBAAA,CAAuB,IAAI,IAAI,CAAA;AAAA,kBACnC,CAAA;AAAA,kBACA,IAAI,WAAW,4BAAA,EAA8B;AAAA,oBACzC,eAAA,EAAiB;AAAA,sBACb;AAAA,wBACI,GAAA,EAAK;AAAA;AACT;AACJ,mBACH;AAAA,iBACL;AAAA,cACJ;AACA,cAAA;AAAA,YACJ;AAAA,UACJ,CAAA;AAAA,UACA,gBAAA,EAAkB,CAAC,EAAA,KAA4D;AAC3E,YAAA,IAAI,CAAC,gBAAA,CAAiB,MAAM,CAAA,EAAG;AAC3B,cAAA;AAAA,YACJ;AACA,YAAA,IAAI,OAAO,OAAO,UAAA,EAAY;AAC1B,cAAA,sBAAA,CAAuB,IAAI,EAAE,CAAA;AAAA,YACjC;AACA,YAAA,IAAI,sBAAA,EAAwB;AACxB,cAAA,IAAI,CAAC,cAAA,CAAe,GAAA,EAAI,EAAG;AACvB,gBAAA,cAAA,CAAe,IAAI,IAAI,CAAA;AACvB,gBAAA,cAAA,EAAe;AACf,gBAAA;AAAA,cACJ;AACA,cAAA,MAAM,MAAA,GAAS,uBAAuB,GAAA,EAAI;AAC1C,cAAA,IAAI,MAAA,YAAkB,SAAS,EAAA,EAAI;AAC/B,gBAAA,OAAA;AAAA,kBACI,YAAY;AACR,oBAAA,MAAM,GAAG,MAAM,CAAA;AACf,oBAAA,sBAAA,CAAuB,IAAI,IAAI,CAAA;AAAA,kBACnC,CAAA;AAAA,kBACA,IAAI,WAAW,2BAAA,EAA6B;AAAA,oBACxC,eAAA,EAAiB;AAAA,sBACb;AAAA,wBACI,GAAA,EAAK,OAAO,MAAM;AAAA;AACtB;AACJ,mBACH;AAAA,iBACL;AAAA,cACJ;AACA,cAAA;AAAA,YACJ;AAAA,UACJ;AAAA;AACJ,OACJ;AAAA,IACJ;AAAA,GACJ;AACJ","file":"renderer.js","sourcesContent":["import { cleanTasks } from '../task/index.js'\n\nexport let clean = Symbol('clean')\n\nexport let cleanStores = (...stores) => {\n if (process.env.NODE_ENV === 'production') {\n throw new Error(\n 'cleanStores() can be used only during development or tests'\n )\n }\n cleanTasks()\n for (let $store of stores) {\n if ($store) {\n if ($store.mocked) delete $store.mocked\n if ($store[clean]) $store[clean]()\n }\n }\n}\n","import { clean } from '../clean-stores/index.js'\n\nlet listenerQueue = []\nlet lqIndex = 0\nconst QUEUE_ITEMS_PER_LISTENER = 4\nexport let epoch = 0\n\n/* @__NO_SIDE_EFFECTS__ */\nexport const atom = initialValue => {\n let listeners = []\n let $atom = {\n get() {\n if (!$atom.lc) {\n $atom.listen(() => {})()\n }\n return $atom.value\n },\n lc: 0,\n listen(listener) {\n $atom.lc = listeners.push(listener)\n\n return () => {\n for (\n let i = lqIndex + QUEUE_ITEMS_PER_LISTENER;\n i < listenerQueue.length;\n\n ) {\n if (listenerQueue[i] === listener) {\n listenerQueue.splice(i, QUEUE_ITEMS_PER_LISTENER)\n } else {\n i += QUEUE_ITEMS_PER_LISTENER\n }\n }\n\n let index = listeners.indexOf(listener)\n if (~index) {\n listeners.splice(index, 1)\n if (!--$atom.lc) $atom.off()\n }\n }\n },\n notify(oldValue, changedKey) {\n epoch++\n let runListenerQueue = !listenerQueue.length\n for (let listener of listeners) {\n listenerQueue.push(listener, $atom.value, oldValue, changedKey)\n }\n\n if (runListenerQueue) {\n for (\n lqIndex = 0;\n lqIndex < listenerQueue.length;\n lqIndex += QUEUE_ITEMS_PER_LISTENER\n ) {\n listenerQueue[lqIndex](\n listenerQueue[lqIndex + 1],\n listenerQueue[lqIndex + 2],\n listenerQueue[lqIndex + 3]\n )\n }\n listenerQueue.length = 0\n }\n },\n /* It will be called on last listener unsubscribing.\n We will redefine it in onMount and onStop. */\n off() {},\n set(newValue) {\n let oldValue = $atom.value\n if (oldValue !== newValue) {\n $atom.value = newValue\n $atom.notify(oldValue)\n }\n },\n subscribe(listener) {\n let unbind = $atom.listen(listener)\n listener($atom.value)\n return unbind\n },\n value: initialValue\n }\n\n if (process.env.NODE_ENV !== 'production') {\n $atom[clean] = () => {\n listeners = []\n $atom.lc = 0\n $atom.off()\n }\n }\n\n return $atom\n}\n\nexport const readonlyType = store => store\n","// root/src/utils/electron-plugin-options.ts\n\nimport type { BetterAuthClientOptions, Session, User } from 'better-auth'\nimport type { AuthClient } from 'better-auth/client'\nimport type { BrowserWindow } from 'electron'\n// import { renderOAuthPage } from '../preact/electron-login'\n// import type { BigIOError } from '../utils/electron-plugin-env'\n\nexport type ElectronServerPluginOptions = {\n /**\n * The custom protocol scheme used for deep linking authentication.\n * @remarks\n * This should match the protocol registered in your Electron Main Process.\n * Do not include the `://` suffix.\n * @example \"bigio\" to be like \"bigio://better-auth-callback\"\n */\n ELECTRON_SCHEME: string\n PROVIDERS: string[]\n // baseURL?: string\n // cookiePrefix?: string\n // logger?: typeof bigIOLogger | typeof logsgh\n debugMode?: boolean\n WEB_ERROR_PAGE_URL?: string\n WEB_OAUTH_SIGNIN_CALLBACK_PATHNAME?: string\n ELECTRON_TO_BACKEND_HOST_PATH?: string\n ELECTRON_APP_HOST?: string\n\n /**\n * The specific action path or host used to identify the auth callback.\n * This will be combined with the scheme to form the full callback URL.\n * Format: `${scheme}://${hostname}`\n * @example \"better-auth-callback\"\n * // Resulting URL: \"bigio://better-auth-callback\"\n */\n ELECTRON_CALLBACK_HOST_PATH?: string\n /**\n * The IPC event name used to receive deep link URLs from the main process.\n * @example \"deep-link-received\"\n */\n DEEPLINK_EVENT_NAME?: string\n /**\n * The IPC event name used to notify the main process that the renderer app is mounted.\n * @example \"renderer-app-mounted\"\n */\n APP_MOUNTED_EVENT_NAME?: string\n /**\n * The URL path for the backend exchange endpoint to exchange the JWT ticket.\n * @example \"/electron/exchange\"\n */\n BACKEND_EXCHANGE_URL?: string\n BACKEND_FAST_TICKET_URL?: string\n BACKEND_LOGIN_URL?: string\n PREACT_LOGIN_PAGE?: (\n baseURL?: string | undefined,\n scheme?: string | undefined,\n provider?: string | undefined,\n ) => string\n customPreactJS?: string\n TICKET_NAME_IN_URL?: string\n SCHEME_NAME_IN_URL?: string\n PROVIDER_NAME_IN_URL?: string\n CHALLENGE_NAME_IN_URL?: string\n TICKET_TTL_SEC?: number\n ELECTRON_SESSION_DURATION?: number\n}\n\nexport type ElectronRendererPluginOptions = {\n /**\n * The custom protocol scheme used for deep linking authentication.\n * @remarks\n * This should match the protocol registered in your Electron Main Process.\n * Do not include the `://` suffix.\n * @example \"bigio\" to be like \"bigio://better-auth-callback\"\n */\n ELECTRON_SCHEME: string\n // baseURL?: string\n // cookiePrefix?: string\n // logger?: typeof bigIOLogger | typeof log\n // betterAuthClient: AuthClient<BetterAuthClientOptions>\n debug?: boolean\n refetchSessionOnFocus?: boolean\n CHALLENGE_NAME_IN_URL?: string\n ELECTRON_APP_HOST?: string\n TICKET_NAME_IN_URL?: string\n onDeepLinkFailedFn?: (error: unknown) => Promise<void>\n onDeepLinkSuccessFn?: (data: {\n session: Pick<Session, 'createdAt' | 'updatedAt' | 'expiresAt'>\n user: User\n }) => Promise<void>\n lazySignalUIReadyForFn?: boolean\n /**\n * The specific action path or host used to identify the auth callback.\n * This will be combined with the scheme to form the full callback URL.\n * Format: `${scheme}://${hostname}`\n * @example \"better-auth-callback\"\n * // Resulting URL: \"bigio://better-auth-callback\"\n */\n ELECTRON_CALLBACK_HOST_PATH?: string\n /**\n * The IPC event name used to receive deep link URLs from the main process.\n * @example \"deep-link-received\"\n */\n DEEPLINK_EVENT_NAME?: string\n /**\n * The IPC event name used to notify the main process that the renderer app is mounted.\n * @example \"renderer-app-mounted\"\n */\n APP_MOUNTED_EVENT_NAME?: string\n /**\n * The URL path for the backend exchange endpoint to exchange the JWT ticket.\n * @example \"/electron/exchange\"\n */\n BACKEND_EXCHANGE_URL?: string\n}\nexport type ElectronMainPluginOptions = {\n isOAuth: boolean\n /**\n * The custom protocol scheme used for deep linking authentication.\n * @remarks\n * This should match the protocol registered in your Electron Main Process.\n * Do not include the `://` suffix.\n * @example \"bigio\" to be like \"bigio://better-auth-callback\"\n */\n ELECTRON_SCHEME: string\n BETTER_AUTH_BASEURL: string\n PROVIDERS: string[]\n FRONTEND_URL: string\n ELECTRON_APP_NAME: string\n CONTENT_SECURITY_POLICY?: string\n /**\n * The specific action path or host used to identify the auth callback.\n * This will be combined with the scheme to form the full callback URL.\n * Format: `${scheme}://${hostname}`\n * @example \"better-auth-callback\"\n * // Resulting URL: \"bigio://better-auth-callback\"\n */\n // logger?: typeof bigIOLogger | typeof log\n debugMode?: boolean\n ELECTRON_VERIFIER_LENGTH?: number\n CHALLENGE_NAME_IN_URL?: string\n SCHEME_NAME_IN_URL?: string\n PROVIDER_NAME_IN_URL?: string\n CALLBACK_PATHNAME_IN_URL?: string\n WEB_OAUTH_SIGNIN_CALLBACK_PATHNAME?: string\n ELECTRON_APP_HOST?: string\n ELECTRON_RENDERER_PATH?: string\n OLD_SCHOOL_ONBEFORE_WAY?: boolean\n GET_COOKIES_EVENT_NAME?: string\n ELECTRON_VERIFIER_FILE_NAME?: string\n /**\n * The specific action path or host used to identify the auth callback.\n * This will be combined with the scheme to form the full callback URL.\n * Format: `${scheme}://${hostname}`\n * @example \"better-auth-callback\"\n * // Resulting URL: \"bigio://better-auth-callback\"\n */\n ELECTRON_CALLBACK_HOST_PATH?: string\n /**\n * The IPC event name used to receive deep link URLs from the main process.\n * @example \"deep-link-received\"\n */\n DEEPLINK_EVENT_NAME?: string\n /**\n * The IPC event name used to clear cookies from the main process.\n * @example \"clear-Cookies\"\n */\n CLEAR_COOKIES_EVENT_NAME?: string\n /**\n * The IPC event name used to notify the main process that the renderer app is mounted.\n * @example \"renderer-app-mounted\"\n */\n APP_MOUNTED_EVENT_NAME?: string\n /**\n * The URL path for the backend exchange endpoint to exchange the JWT ticket.\n * @example \"/electron/exchange\"\n */\n BACKEND_EXCHANGE_URL?: string\n openHandlerHelper?: (details: Electron.HandlerDetails) => Electron.WindowOpenHandlerResponse\n\n beforeSendHelper?: (details: Electron.OnBeforeSendHeadersListenerDetails) => {\n callback: {\n requestHeaders: Record<string, string | string[]>\n cancel?: boolean\n }\n }\n customProtocolServingHelper?: {\n scheme?: string\n privileges?: {\n standard: boolean\n secure: boolean\n supportFetchAPI: boolean\n corsEnabled: boolean\n bypassCSP: boolean\n allowServiceWorkers?: boolean\n codeCache?: boolean\n stream?: boolean\n }\n protocolHandleOnCreateWindow?: (mainWindow: BrowserWindow) => Promise<void>\n protocolHandleOnAppReady?: (request: Request) => Response | Promise<Response>\n }\n}\nexport type ElectronButtonOptions = {\n FRONTEND_URL: string\n PROVIDER_NAME_IN_URL: string\n}\nexport type ElectronWebOptions = typeof defatultWebOptions\n\nexport const defaultServerPluginOptions = {\n ELECTRON_SCHEME: 'bigio',\n ELECTRON_APP_HOST: 'app-renderer',\n PROVIDERS: ['github', 'google'],\n BACKEND_EXCHANGE_URL: 'electron/exchange',\n BACKEND_FAST_TICKET_URL: 'electron/fastTicket',\n WEB_ERROR_PAGE_URL: 'http://localhost:3001/better-auth',\n WEB_OAUTH_SIGNIN_CALLBACK_PATHNAME: 'electron-handoff',\n ELECTRON_CALLBACK_HOST_PATH: 'better-auth-callback',\n ELECTRON_TO_BACKEND_HOST_PATH: 'from-electron-to-auth-backend',\n BACKEND_LOGIN_URL: 'electron/login',\n // PREACT_LOGIN_PAGE: renderOAuthPage,\n TICKET_NAME_IN_URL: 'ticket',\n SCHEME_NAME_IN_URL: 'scheme',\n PROVIDER_NAME_IN_URL: 'provider',\n CHALLENGE_NAME_IN_URL: 'electron_challenge',\n TICKET_TTL_SEC: 60 * 5,\n ELECTRON_SESSION_DURATION: 7 * 24 * 60 * 60 * 1000,\n // customPreactJS: customPreactJS,\n} satisfies Partial<ElectronServerPluginOptions>\n\nexport const defaultRendererPluginOptions = {\n ELECTRON_SCHEME: 'bigio',\n ELECTRON_APP_HOST: 'app-renderer',\n BACKEND_EXCHANGE_URL: 'electron/exchange',\n refetchSessionOnFocus: true,\n ELECTRON_CALLBACK_HOST_PATH: 'better-auth-callback',\n DEEPLINK_EVENT_NAME: 'deep-link-received',\n APP_MOUNTED_EVENT_NAME: 'renderer-app-mounted',\n CHALLENGE_NAME_IN_URL: 'electron_challenge',\n TICKET_NAME_IN_URL: 'ticket',\n lazySignalUIReadyForFn: false,\n} satisfies Partial<ElectronRendererPluginOptions>\n\nexport const defaultMainPluginOptions = {\n debugMode: false,\n isOAuth: true,\n BETTER_AUTH_BASEURL: 'http://localhost:3002',\n ELECTRON_APP_NAME: 'bigio-electron-demo',\n PROVIDERS: ['github', 'google'],\n ELECTRON_APP_HOST: 'app-renderer',\n ELECTRON_SCHEME: 'bigio',\n ELECTRON_RENDERER_PATH: 'out/renderer',\n DEEPLINK_EVENT_NAME: 'deep-link-received',\n APP_MOUNTED_EVENT_NAME: 'renderer-app-mounted',\n CLEAR_COOKIES_EVENT_NAME: 'clear-Cookies',\n GET_COOKIES_EVENT_NAME: 'get-Cookies',\n ELECTRON_VERIFIER_LENGTH: 32,\n FRONTEND_URL: 'http://localhost:3002/oauth',\n WEB_OAUTH_SIGNIN_CALLBACK_PATHNAME: 'electron-handoff',\n SCHEME_NAME_IN_URL: 'scheme',\n PROVIDER_NAME_IN_URL: 'provider',\n CHALLENGE_NAME_IN_URL: 'electron_challenge',\n CALLBACK_PATHNAME_IN_URL: 'callbackpath',\n OLD_SCHOOL_ONBEFORE_WAY: false,\n ELECTRON_CALLBACK_HOST_PATH: 'better-auth-callback',\n ELECTRON_VERIFIER_FILE_NAME: 'bigio-auth-state.json',\n} satisfies Partial<ElectronMainPluginOptions>\n\nexport const defaultButtonOptions = {\n FRONTEND_URL: 'http://localhost:3001/oauth',\n PROVIDER_NAME_IN_URL: 'provider',\n} satisfies Partial<ElectronButtonOptions>\n\nexport const defatultWebOptions = {\n ELECTRON_SCHEME: 'bigio',\n SCHEME_NAME_IN_URL: 'scheme',\n PROVIDERS: ['github', 'google'],\n PROVIDER_NAME_IN_URL: 'provider',\n CHALLENGE_NAME_IN_URL: 'electron_challenge',\n WEB_OAUTH_SIGNIN_CALLBACK_PATHNAME: 'electron-handoff',\n BACKEND_FAST_TICKET_URL: 'electron/fastTicket',\n} as const\n","// utils/electron-plugin-env.ts\n/** biome-ignore-all lint/style/useConsistentTypeDefinitions: <> */\nimport type { IpcRenderer, WebFrame, WebUtils } from 'electron'\n\ntype Prettify<T> = {\n [K in keyof T]: T[K]\n} & {}\ndeclare const process:\n | {\n env: {\n NODE_ENV?: string\n }\n versions?: {\n electron?: string\n }\n }\n | undefined\n\ndeclare global {\n interface ImportMetaEnv {\n readonly MODE: string\n readonly DEV: boolean\n readonly PROD: boolean\n readonly SSR: boolean\n\n [key: string]: unknown\n }\n\n interface ImportMeta {\n readonly env: ImportMetaEnv\n }\n}\n\ndeclare global {\n interface Window {\n electron: {\n webUtils: Prettify<WebUtils>\n webFrame: Prettify<WebFrame>\n process: Prettify<SafeProcess>\n ipcRenderer: Prettify<IpcRenderer>\n }\n }\n}\ntype SafeProcess = {\n readonly platform: NodeJS.Platform\n readonly versions: NodeJS.ProcessVersions\n readonly env: NodeJS.ProcessEnv\n}\n\ntype ElectronWindow = Window & {\n electron: {\n webUtils: Prettify<WebUtils>\n webFrame: Prettify<WebFrame>\n process: Prettify<SafeProcess>\n ipcRenderer: Prettify<IpcRenderer>\n }\n}\nconst getGlobal = () => {\n if (typeof globalThis !== 'undefined') {\n return globalThis\n }\n if (typeof self !== 'undefined') {\n return self\n }\n if (typeof window !== 'undefined') {\n return window\n }\n if (typeof global !== 'undefined') {\n return global\n }\n throw new Error('unable to locate global object')\n}\nconst globals = getGlobal()\n// function requireSetCookies(headers: Headers) {\n// if (typeof headers.getSetCookie !== 'function') {\n// throw new BigIOError('Environment Error: headers.getSetCookie is not a function.', {\n// bigioErrorStack: [\n// {\n// msg: 'Outdated Node.js Environment',\n// ctx: `'Please upgrade NodeJS to 18.14+`,\n// },\n// ],\n// })\n// }\n\n// const setCookieHeader = headers.getSetCookie()\n// if (!setCookieHeader || setCookieHeader.length === 0) {\n// const headerKeys = Array.from(headers.keys()).join(', ')\n// throw new APIError('INTERNAL_SERVER_ERROR', {\n// message: 'Critical: No Set-Cookie headers received from provider',\n// debugInfo: { availableHeaders: headerKeys },\n// })\n// }\n// return setCookieHeader\n// }\nexport function isElectronWindow(window: Window | typeof globalThis): window is ElectronWindow {\n if (typeof window !== 'undefined') {\n if (\n typeof navigator !== 'undefined' &&\n 'userAgent' in navigator &&\n navigator.userAgent.toLowerCase().includes(' electron/')\n ) {\n return true\n }\n if ('electron' in window && typeof window.electron !== 'undefined') {\n return true\n }\n }\n return false\n}\nconst getEnv = () => {\n if (typeof window !== 'undefined') {\n if (isElectronWindow(globals)) {\n return 'ELECTRON_RENDERER'\n }\n return 'BROWSER'\n }\n if (globalThis === self) {\n return 'WORKER'\n }\n if (typeof global !== 'undefined' && typeof process !== 'undefined') {\n if (typeof process.versions?.electron !== 'undefined') {\n return 'ELECTRON_MAIN'\n }\n return 'NODE'\n }\n return 'UNKNOWN'\n}\nconst getRawNodeEnv = (): string => {\n if (typeof import.meta !== 'undefined' && import.meta.env && import.meta.env.MODE) {\n return import.meta.env.MODE\n }\n\n // biome-ignore lint/complexity/useOptionalChain: <>\n if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV) {\n return process.env.NODE_ENV\n }\n\n return 'development'\n}\n\nconst RAW_ENV = getRawNodeEnv()\n\nexport const IS_DEV = RAW_ENV === 'development'\nexport const IS_PROD = RAW_ENV === 'production'\nexport const IS_TEST = RAW_ENV === 'test'\n\nexport const IS_ELECTRON_PACKAGED = (() => {\n // biome-ignore lint/complexity/useOptionalChain: <>\n if (typeof process !== 'undefined' && process.versions && process.versions.electron) {\n try {\n return require('electron').app.isPackaged\n } catch {\n return false\n }\n }\n return false\n})()\n\nif (typeof console !== 'undefined') {\n console.debug(`[ENV] Current Mode: ${RAW_ENV} | Packaged: ${IS_ELECTRON_PACKAGED}`)\n}\n","export function encodeBase32UpperCase(bytes) {\n return encodeBase32_internal(bytes, base32UpperCaseAlphabet, EncodingPadding.Include);\n}\nexport function encodeBase32UpperCaseNoPadding(bytes) {\n return encodeBase32_internal(bytes, base32UpperCaseAlphabet, EncodingPadding.None);\n}\nexport function encodeBase32LowerCase(bytes) {\n return encodeBase32_internal(bytes, base32LowerCaseAlphabet, EncodingPadding.Include);\n}\nexport function encodeBase32LowerCaseNoPadding(bytes) {\n return encodeBase32_internal(bytes, base32LowerCaseAlphabet, EncodingPadding.None);\n}\n/** Replaced: Use encodeBase32UpperCase() instead. */\nexport function encodeBase32(bytes) {\n return encodeBase32UpperCase(bytes);\n}\n/** Replaced: Use encodeBase32UpperCaseNoPadding() instead. */\nexport function encodeBase32NoPadding(bytes) {\n return encodeBase32UpperCaseNoPadding(bytes);\n}\nfunction encodeBase32_internal(bytes, alphabet, padding) {\n let result = \"\";\n for (let i = 0; i < bytes.byteLength; i += 5) {\n let buffer = 0n;\n let bufferBitSize = 0;\n for (let j = 0; j < 5 && i + j < bytes.byteLength; j++) {\n buffer = (buffer << 8n) | BigInt(bytes[i + j]);\n bufferBitSize += 8;\n }\n if (bufferBitSize % 5 !== 0) {\n buffer = buffer << BigInt(5 - (bufferBitSize % 5));\n bufferBitSize += 5 - (bufferBitSize % 5);\n }\n for (let j = 0; j < 8; j++) {\n if (bufferBitSize >= 5) {\n result += alphabet[Number((buffer >> BigInt(bufferBitSize - 5)) & 0x1fn)];\n bufferBitSize -= 5;\n }\n else if (bufferBitSize > 0) {\n result += alphabet[Number((buffer << BigInt(6 - bufferBitSize)) & 0x3fn)];\n bufferBitSize = 0;\n }\n else if (padding === EncodingPadding.Include) {\n result += \"=\";\n }\n }\n }\n return result;\n}\nexport function decodeBase32(encoded) {\n return decodeBase32_internal(encoded, base32DecodeMap, DecodingPadding.Required);\n}\nexport function decodeBase32IgnorePadding(encoded) {\n return decodeBase32_internal(encoded, base32DecodeMap, DecodingPadding.Ignore);\n}\nfunction decodeBase32_internal(encoded, decodeMap, padding) {\n const result = new Uint8Array(Math.ceil(encoded.length / 8) * 5);\n let totalBytes = 0;\n for (let i = 0; i < encoded.length; i += 8) {\n let chunk = 0n;\n let bitsRead = 0;\n for (let j = 0; j < 8; j++) {\n if (padding === DecodingPadding.Required) {\n if (encoded[i + j] === \"=\") {\n continue;\n }\n if (i + j >= encoded.length) {\n throw new Error(\"Invalid padding\");\n }\n }\n if (padding === DecodingPadding.Ignore) {\n if (i + j >= encoded.length || encoded[i + j] === \"=\") {\n continue;\n }\n }\n if (j > 0 && encoded[i + j - 1] === \"=\") {\n throw new Error(\"Invalid padding\");\n }\n if (!(encoded[i + j] in decodeMap)) {\n throw new Error(\"Invalid character\");\n }\n chunk |= BigInt(decodeMap[encoded[i + j]]) << BigInt((7 - j) * 5);\n bitsRead += 5;\n }\n if (bitsRead < 40) {\n let unused;\n if (bitsRead === 10) {\n unused = chunk & 0xffffffffn;\n }\n else if (bitsRead === 20) {\n unused = chunk & 0xffffffn;\n }\n else if (bitsRead === 25) {\n unused = chunk & 0xffffn;\n }\n else if (bitsRead === 35) {\n unused = chunk & 0xffn;\n }\n else {\n throw new Error(\"Invalid padding\");\n }\n if (unused !== 0n) {\n throw new Error(\"Invalid padding\");\n }\n }\n const byteLength = Math.floor(bitsRead / 8);\n for (let i = 0; i < byteLength; i++) {\n result[totalBytes] = Number((chunk >> BigInt(32 - i * 8)) & 0xffn);\n totalBytes++;\n }\n }\n return result.slice(0, totalBytes);\n}\nconst base32UpperCaseAlphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\nconst base32LowerCaseAlphabet = \"abcdefghijklmnopqrstuvwxyz234567\";\nconst base32DecodeMap = {\n A: 0,\n B: 1,\n C: 2,\n D: 3,\n E: 4,\n F: 5,\n G: 6,\n H: 7,\n I: 8,\n J: 9,\n K: 10,\n L: 11,\n M: 12,\n N: 13,\n O: 14,\n P: 15,\n Q: 16,\n R: 17,\n S: 18,\n T: 19,\n U: 20,\n V: 21,\n W: 22,\n X: 23,\n Y: 24,\n Z: 25,\n a: 0,\n b: 1,\n c: 2,\n d: 3,\n e: 4,\n f: 5,\n g: 6,\n h: 7,\n i: 8,\n j: 9,\n k: 10,\n l: 11,\n m: 12,\n n: 13,\n o: 14,\n p: 15,\n q: 16,\n r: 17,\n s: 18,\n t: 19,\n u: 20,\n v: 21,\n w: 22,\n x: 23,\n y: 24,\n z: 25,\n \"2\": 26,\n \"3\": 27,\n \"4\": 28,\n \"5\": 29,\n \"6\": 30,\n \"7\": 31\n};\nvar EncodingPadding;\n(function (EncodingPadding) {\n EncodingPadding[EncodingPadding[\"Include\"] = 0] = \"Include\";\n EncodingPadding[EncodingPadding[\"None\"] = 1] = \"None\";\n})(EncodingPadding || (EncodingPadding = {}));\nvar DecodingPadding;\n(function (DecodingPadding) {\n DecodingPadding[DecodingPadding[\"Required\"] = 0] = \"Required\";\n DecodingPadding[DecodingPadding[\"Ignore\"] = 1] = \"Ignore\";\n})(DecodingPadding || (DecodingPadding = {}));\n","export function encodeBase64(bytes) {\n return encodeBase64_internal(bytes, base64Alphabet, EncodingPadding.Include);\n}\nexport function encodeBase64NoPadding(bytes) {\n return encodeBase64_internal(bytes, base64Alphabet, EncodingPadding.None);\n}\nexport function encodeBase64url(bytes) {\n return encodeBase64_internal(bytes, base64urlAlphabet, EncodingPadding.Include);\n}\nexport function encodeBase64urlNoPadding(bytes) {\n return encodeBase64_internal(bytes, base64urlAlphabet, EncodingPadding.None);\n}\nfunction encodeBase64_internal(bytes, alphabet, padding) {\n let result = \"\";\n for (let i = 0; i < bytes.byteLength; i += 3) {\n let buffer = 0;\n let bufferBitSize = 0;\n for (let j = 0; j < 3 && i + j < bytes.byteLength; j++) {\n buffer = (buffer << 8) | bytes[i + j];\n bufferBitSize += 8;\n }\n for (let j = 0; j < 4; j++) {\n if (bufferBitSize >= 6) {\n result += alphabet[(buffer >> (bufferBitSize - 6)) & 0x3f];\n bufferBitSize -= 6;\n }\n else if (bufferBitSize > 0) {\n result += alphabet[(buffer << (6 - bufferBitSize)) & 0x3f];\n bufferBitSize = 0;\n }\n else if (padding === EncodingPadding.Include) {\n result += \"=\";\n }\n }\n }\n return result;\n}\nconst base64Alphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nconst base64urlAlphabet = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\";\nexport function decodeBase64(encoded) {\n return decodeBase64_internal(encoded, base64DecodeMap, DecodingPadding.Required);\n}\nexport function decodeBase64IgnorePadding(encoded) {\n return decodeBase64_internal(encoded, base64DecodeMap, DecodingPadding.Ignore);\n}\nexport function decodeBase64url(encoded) {\n return decodeBase64_internal(encoded, base64urlDecodeMap, DecodingPadding.Required);\n}\nexport function decodeBase64urlIgnorePadding(encoded) {\n return decodeBase64_internal(encoded, base64urlDecodeMap, DecodingPadding.Ignore);\n}\nfunction decodeBase64_internal(encoded, decodeMap, padding) {\n const result = new Uint8Array(Math.ceil(encoded.length / 4) * 3);\n let totalBytes = 0;\n for (let i = 0; i < encoded.length; i += 4) {\n let chunk = 0;\n let bitsRead = 0;\n for (let j = 0; j < 4; j++) {\n if (padding === DecodingPadding.Required && encoded[i + j] === \"=\") {\n continue;\n }\n if (padding === DecodingPadding.Ignore &&\n (i + j >= encoded.length || encoded[i + j] === \"=\")) {\n continue;\n }\n if (j > 0 && encoded[i + j - 1] === \"=\") {\n throw new Error(\"Invalid padding\");\n }\n if (!(encoded[i + j] in decodeMap)) {\n throw new Error(\"Invalid character\");\n }\n chunk |= decodeMap[encoded[i + j]] << ((3 - j) * 6);\n bitsRead += 6;\n }\n if (bitsRead < 24) {\n let unused;\n if (bitsRead === 12) {\n unused = chunk & 0xffff;\n }\n else if (bitsRead === 18) {\n unused = chunk & 0xff;\n }\n else {\n throw new Error(\"Invalid padding\");\n }\n if (unused !== 0) {\n throw new Error(\"Invalid padding\");\n }\n }\n const byteLength = Math.floor(bitsRead / 8);\n for (let i = 0; i < byteLength; i++) {\n result[totalBytes] = (chunk >> (16 - i * 8)) & 0xff;\n totalBytes++;\n }\n }\n return result.slice(0, totalBytes);\n}\nvar EncodingPadding;\n(function (EncodingPadding) {\n EncodingPadding[EncodingPadding[\"Include\"] = 0] = \"Include\";\n EncodingPadding[EncodingPadding[\"None\"] = 1] = \"None\";\n})(EncodingPadding || (EncodingPadding = {}));\nvar DecodingPadding;\n(function (DecodingPadding) {\n DecodingPadding[DecodingPadding[\"Required\"] = 0] = \"Required\";\n DecodingPadding[DecodingPadding[\"Ignore\"] = 1] = \"Ignore\";\n})(DecodingPadding || (DecodingPadding = {}));\nconst base64DecodeMap = {\n \"0\": 52,\n \"1\": 53,\n \"2\": 54,\n \"3\": 55,\n \"4\": 56,\n \"5\": 57,\n \"6\": 58,\n \"7\": 59,\n \"8\": 60,\n \"9\": 61,\n A: 0,\n B: 1,\n C: 2,\n D: 3,\n E: 4,\n F: 5,\n G: 6,\n H: 7,\n I: 8,\n J: 9,\n K: 10,\n L: 11,\n M: 12,\n N: 13,\n O: 14,\n P: 15,\n Q: 16,\n R: 17,\n S: 18,\n T: 19,\n U: 20,\n V: 21,\n W: 22,\n X: 23,\n Y: 24,\n Z: 25,\n a: 26,\n b: 27,\n c: 28,\n d: 29,\n e: 30,\n f: 31,\n g: 32,\n h: 33,\n i: 34,\n j: 35,\n k: 36,\n l: 37,\n m: 38,\n n: 39,\n o: 40,\n p: 41,\n q: 42,\n r: 43,\n s: 44,\n t: 45,\n u: 46,\n v: 47,\n w: 48,\n x: 49,\n y: 50,\n z: 51,\n \"+\": 62,\n \"/\": 63\n};\nconst base64urlDecodeMap = {\n \"0\": 52,\n \"1\": 53,\n \"2\": 54,\n \"3\": 55,\n \"4\": 56,\n \"5\": 57,\n \"6\": 58,\n \"7\": 59,\n \"8\": 60,\n \"9\": 61,\n A: 0,\n B: 1,\n C: 2,\n D: 3,\n E: 4,\n F: 5,\n G: 6,\n H: 7,\n I: 8,\n J: 9,\n K: 10,\n L: 11,\n M: 12,\n N: 13,\n O: 14,\n P: 15,\n Q: 16,\n R: 17,\n S: 18,\n T: 19,\n U: 20,\n V: 21,\n W: 22,\n X: 23,\n Y: 24,\n Z: 25,\n a: 26,\n b: 27,\n c: 28,\n d: 29,\n e: 30,\n f: 31,\n g: 32,\n h: 33,\n i: 34,\n j: 35,\n k: 36,\n l: 37,\n m: 38,\n n: 39,\n o: 40,\n p: 41,\n q: 42,\n r: 43,\n s: 44,\n t: 45,\n u: 46,\n v: 47,\n w: 48,\n x: 49,\n y: 50,\n z: 51,\n \"-\": 62,\n _: 63\n};\n","// root/packages/better-auth-electron/src/utils/electron-plugin-utils.ts\n\nimport { decodeBase64urlIgnorePadding, encodeBase64urlNoPadding } from '@oslojs/encoding'\n// import type { AuthClient, BetterAuthClientOptions } from 'better-auth/client'\nimport type { IpcRenderer, WebFrame, WebUtils } from 'electron'\n\n// import { atom } from 'jotai/vanilla'\n\nimport z from 'zod'\n\nimport { IS_DEV } from './electron-plugin-env'\n\n// import { BigIOError } from './electron-plugin-env'\n// import { okOr, safeTry } from './electron-plugin-helper'\n// root/packages/better-auth-electron/src/utils/electron-plugin-helper.ts\n\n// import { BigIOError, consoleError } from './electron-plugin-utils'\ntype Prettify<T> = {\n [K in keyof T]: T[K]\n} & {}\ntype NonNull<T> = Exclude<T, null | undefined>\nexport class BigIOError extends Error {\n public readonly bigioErrorStack: unknown[]\n\n constructor(message: string, options: { cause?: unknown; bigioErrorStack?: unknown[] }) {\n super(message, { cause: options.cause })\n this.name = 'BigIOError'\n this.bigioErrorStack = options.bigioErrorStack || []\n\n Object.setPrototypeOf(this, new.target.prototype)\n Object.defineProperty(this, 'bigioErrorStack', { enumerable: false })\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor)\n }\n }\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n stack: this.stack,\n cause: this.cause,\n bigioErrorStack: this.bigioErrorStack,\n }\n }\n}\n\nexport const consoleError = (\n originalError: unknown,\n message?: string,\n bigioErrorStack?: unknown[],\n) => {\n if (!IS_DEV) {\n return\n }\n if (message && bigioErrorStack) {\n console.groupCollapsed(`[BigIOError]`)\n console.error('[BigIOError] message: ', message)\n if (Array.isArray(bigioErrorStack) && bigioErrorStack.length > 0) {\n console.log('[BigIOError] Stack Trace Table: ')\n console.table(bigioErrorStack)\n }\n console.error('[BigIOError] Original Error: ', originalError)\n console.groupEnd()\n } else if (originalError instanceof BigIOError) {\n console.groupCollapsed(`[BigIOError]`)\n console.error('[BigIOError] message: ', originalError.message)\n if (\n Array.isArray(originalError.bigioErrorStack) &&\n originalError.bigioErrorStack.length > 0\n ) {\n console.log('[BigIOError] Stack Trace Table: ')\n console.table(originalError.bigioErrorStack)\n }\n console.error('[BigIOError] Original Error: ', originalError.cause)\n console.groupEnd()\n } else {\n console.groupCollapsed(`[Error]`)\n console.error('[Error]: ', originalError)\n console.groupEnd()\n }\n}\nexport const consoleLog = (...argv: unknown[]): void => {\n if (IS_DEV) {\n console.log(...argv)\n }\n}\ntype BigIOLogger = {\n info(message: unknown, ...args: unknown[]): void\n warn(message: unknown, ...args: unknown[]): void\n error(message: unknown, ...args: unknown[]): void\n debug?(message: unknown, ...args: unknown[]): void\n}\n\nexport const bigIOLogger: BigIOLogger = {\n info: (message: unknown, ...args: unknown[]) => {\n console.log(message, ...args)\n },\n warn: (message: unknown, ...args: unknown[]) => {\n console.warn(message, ...args)\n },\n error: (message: unknown, ...args: unknown[]) => {\n console.error(message, ...args)\n },\n debug: (message: unknown, ...args: unknown[]) => {\n console.debug(message, ...args)\n },\n}\nfunction getPreviousBigIOErrorStack(error: unknown): unknown[] {\n if (error instanceof BigIOError) {\n return error.bigioErrorStack\n }\n\n if (error instanceof Error && 'bigioErrorStack' in error) {\n return Array.isArray(error.bigioErrorStack) ? error.bigioErrorStack : []\n }\n return []\n}\ntype ErrorMessage = { msg?: string; ctx: unknown } | string | Error | boolean\n\n// biome-ignore lint/style/useUnifiedTypeSignatures: <>\nexport function okOr<T>(value: T): NonNull<T>\nexport function okOr<T>(value: T, errorMessage: string): NonNull<T>\nexport function okOr<T>(value: T, errorMessage: { msg?: string; ctx: unknown }): NonNull<T>\nexport function okOr<T>(value: T, errorMessage: Error): NonNull<T>\nexport function okOr<T>(value: T, errorMessage: boolean): NonNull<T>\nexport function okOr<T>(value: T, errorMessage: ErrorMessage): NonNull<T>\nexport function okOr<T>(value: T, errorMessage?: ErrorMessage): NonNull<T> {\n // Happy Path\n if (value !== null && value !== undefined) {\n return value as NonNull<T>\n }\n const now = Date.now()\n\n const ctx = (() => {\n const DEFAULT_CTX = 'okOr function failed'\n\n if (\n !(errorMessage instanceof Error) &&\n typeof errorMessage === 'object' &&\n 'ctx' in errorMessage\n ) {\n return errorMessage.ctx\n }\n if (typeof errorMessage === 'string') {\n return DEFAULT_CTX\n }\n if (errorMessage === undefined) {\n return DEFAULT_CTX\n }\n if (errorMessage instanceof Error) {\n return DEFAULT_CTX\n }\n if (errorMessage === true) {\n return DEFAULT_CTX\n }\n return DEFAULT_CTX\n })()\n const msg = (() => {\n const DEFAULT_MSG = 'Unexpected return null or undefined value'\n if (\n !(errorMessage instanceof Error) &&\n typeof errorMessage === 'object' &&\n 'msg' in errorMessage &&\n typeof errorMessage.msg === 'string'\n ) {\n return errorMessage.msg\n }\n if (typeof errorMessage === 'string') {\n return errorMessage\n }\n if (errorMessage === undefined) {\n return DEFAULT_MSG\n }\n if (errorMessage instanceof Error) {\n return DEFAULT_MSG\n }\n if (errorMessage === true) {\n return DEFAULT_MSG\n }\n return DEFAULT_MSG\n })()\n\n const newItem = {\n msg: msg,\n ctx: ctx,\n timestamp: now,\n }\n\n if (errorMessage instanceof Error) {\n const prevStack = getPreviousBigIOErrorStack(errorMessage)\n const newStack = [...prevStack, newItem]\n if (!errorMessage.cause) {\n try {\n Object.defineProperty(errorMessage, 'cause', {\n value: new BigIOError(msg, {\n bigioErrorStack: newStack,\n }),\n configurable: true,\n writable: true,\n enumerable: false,\n })\n } catch {\n // some\n }\n }\n try {\n Object.defineProperty(errorMessage, 'bigioErrorStack', {\n value: newStack,\n configurable: true,\n writable: true,\n enumerable: false,\n })\n } catch {\n throw new BigIOError('Wrapper for frozen user error', {\n cause: errorMessage,\n bigioErrorStack: newStack,\n })\n }\n throw errorMessage\n }\n\n throw new BigIOError(msg, {\n bigioErrorStack: [newItem],\n })\n}\n\nconst handleUnsafeError = (originalError: unknown, errorMessage?: ErrorMessage) => {\n const now = Date.now()\n const prevStack = getPreviousBigIOErrorStack(originalError)\n const originalErrorMsg =\n originalError instanceof Error ? originalError.message : String(originalError)\n const newMsg = (() => {\n if (errorMessage === true) {\n return originalErrorMsg\n }\n if (typeof errorMessage === 'string') {\n return errorMessage\n }\n if (\n typeof errorMessage === 'object' &&\n 'ctx' in errorMessage &&\n !(errorMessage instanceof Error)\n ) {\n return errorMessage.msg || originalErrorMsg\n }\n if (errorMessage instanceof Error) {\n return errorMessage.message\n }\n return originalErrorMsg\n })()\n const userStack = (() => {\n if (errorMessage === true) {\n return [\n {\n msg: 'SafeTry failed',\n ctx: originalErrorMsg,\n timestamp: now,\n },\n ]\n }\n if (typeof errorMessage === 'string') {\n return [\n {\n msg: errorMessage,\n ctx: originalErrorMsg,\n timestamp: now,\n },\n ]\n }\n if (\n typeof errorMessage === 'object' &&\n 'ctx' in errorMessage &&\n !(errorMessage instanceof Error)\n ) {\n return [\n {\n msg: errorMessage.msg || originalErrorMsg,\n ctx: errorMessage.ctx,\n timestamp: now,\n },\n ]\n }\n if (errorMessage instanceof Error) {\n const userNewStack = getPreviousBigIOErrorStack(errorMessage)\n if (userNewStack.length > 0) {\n const lastItem = userNewStack.at(-1)\n if (\n lastItem &&\n typeof lastItem === 'object' &&\n !('timestamp' in lastItem && lastItem.timestamp)\n ) {\n return [...userNewStack.slice(0, -1), { ...lastItem, timestamp: now }]\n }\n return userNewStack\n }\n return [{ msg: errorMessage.message, ctx: originalErrorMsg, timestamp: now }]\n }\n\n return [{ ctx: originalErrorMsg }]\n })()\n const MAX_STACK_SIZE = IS_DEV ? 500 : 50\n const newStack = (() => {\n const stack = [...prevStack, ...userStack]\n if (stack.length > MAX_STACK_SIZE) {\n return [\n {\n msg: `... Truncated (Stack > ${MAX_STACK_SIZE}) ...`,\n ctx: null,\n timestamp: now,\n },\n ...stack.slice(-MAX_STACK_SIZE),\n ]\n }\n return stack\n })()\n consoleError(originalError, newMsg, newStack)\n if (errorMessage instanceof Error) {\n if (!errorMessage.cause && originalError) {\n try {\n Object.defineProperty(errorMessage, 'cause', {\n value: originalError,\n configurable: true,\n writable: true,\n enumerable: false,\n })\n } catch {\n // some\n }\n }\n try {\n Object.defineProperty(errorMessage, 'bigioErrorStack', {\n value: newStack,\n configurable: true,\n writable: true,\n enumerable: false,\n })\n } catch {\n throw new BigIOError('Wrapper for frozen user error', {\n cause: errorMessage,\n bigioErrorStack: newStack,\n })\n }\n throw errorMessage\n }\n throw new BigIOError(newMsg, {\n cause: originalError,\n bigioErrorStack: newStack,\n })\n}\n\nconst handleSafeError = (originalError: unknown) => {\n const prevStack = getPreviousBigIOErrorStack(originalError)\n const originalErrorMsg =\n originalError instanceof Error ? originalError.message : String(originalError)\n const now = Date.now()\n const newStack = [\n ...prevStack,\n { msg: originalErrorMsg, ctx: originalErrorMsg, timestamp: now },\n ]\n return {\n data: null,\n error: new BigIOError(originalErrorMsg, {\n cause: originalError,\n bigioErrorStack: newStack,\n }),\n }\n}\n\nconst handlePromise = <T>(internalPromise: Promise<T>, errorMessage?: ErrorMessage) => {\n if (errorMessage !== undefined) {\n return internalPromise\n .then((data) => okOr(data, errorMessage))\n .catch((originalError) => handleUnsafeError(originalError, errorMessage))\n }\n\n return internalPromise\n .then((data) => ({ data: okOr(data), error: null }))\n .catch((originalError) => handleSafeError(originalError))\n}\n\ntype SafeResult<T> =\n | {\n data: NonNull<T>\n error: null\n }\n | {\n data: null\n error: Error\n }\n// biome-ignore lint/style/useUnifiedTypeSignatures: temp\nexport function safeTry<T>(func: Promise<T>): Promise<SafeResult<T>>\nexport function safeTry<T>(func: Promise<T>, errorMessage: ErrorMessage): Promise<NonNull<T>>\nexport function safeTry<T>(func: () => Promise<T>): Promise<SafeResult<T>>\nexport function safeTry<T>(func: () => Promise<T>, errorMessage: ErrorMessage): Promise<NonNull<T>>\nexport function safeTry<T>(func: () => T): SafeResult<T>\nexport function safeTry<T>(func: () => T, errorMessage: ErrorMessage): NonNull<T>\n\nexport function safeTry<T>(\n func: Promise<T> | (() => Promise<T>) | (() => T),\n errorMessage?: ErrorMessage,\n): Promise<SafeResult<T>> | Promise<NonNull<T>> | SafeResult<T> | NonNull<T> {\n try {\n if (func instanceof Promise) {\n return handlePromise(func, errorMessage)\n }\n if (typeof func === 'function') {\n const result = func()\n if (result instanceof Promise) {\n return handlePromise(result, errorMessage)\n }\n\n if (errorMessage !== undefined) {\n return okOr(result, errorMessage)\n }\n return {\n data: okOr(result),\n error: null,\n }\n }\n } catch (error) {\n if (errorMessage !== undefined) {\n handleUnsafeError(error, errorMessage)\n }\n return handleSafeError(error)\n }\n const now = Date.now()\n const invalidInputMsg = 'SayTry Fn Invalid input: expected Function or Promise'\n const invalidError = new BigIOError(invalidInputMsg, {\n cause: func,\n bigioErrorStack: [\n {\n msg: invalidInputMsg,\n ctx: 'Type Check Failed',\n timestamp: now,\n },\n ],\n })\n if (errorMessage !== undefined) {\n throw invalidError\n }\n return {\n data: null,\n error: invalidError,\n }\n}\n\nconst crypto = globalThis.crypto\nconst ALGO_SHA = 'SHA-256'\nconst HKDF_ALGO = { name: 'HKDF' }\nconst AES_ALGO = { name: 'AES-GCM', length: 128 }\nconst secretKeyCache = new Map<string, CryptoKey>()\n\nconst MAX_CACHE_SIZE = 50\nconst GLOBAL_ENCODER = new TextEncoder()\nasync function getCachedKey(secret: string): Promise<CryptoKey> {\n const checkSecret = okOr(secret, {\n msg: 'Invalid secret input for getCachedKey',\n ctx: {\n secretLength: secret?.length,\n },\n })\n const keyDataBuffer = await safeTry(\n crypto.subtle.digest(ALGO_SHA, GLOBAL_ENCODER.encode(checkSecret)),\n {\n msg: 'Failed to create SHA digest from secret',\n ctx: { secretLength: checkSecret.length },\n },\n )\n\n const cacheKeyIndex = encode64(keyDataBuffer)\n if (secretKeyCache.has(cacheKeyIndex)) {\n const cachedKey = secretKeyCache.get(cacheKeyIndex)\n if (cachedKey) {\n secretKeyCache.delete(cacheKeyIndex)\n secretKeyCache.set(cacheKeyIndex, cachedKey)\n return cachedKey\n }\n }\n const keyMaterial = await safeTry(\n crypto.subtle.importKey('raw', GLOBAL_ENCODER.encode(checkSecret), HKDF_ALGO, false, [\n 'deriveKey',\n ]),\n {\n msg: 'Failed to import raw key material',\n ctx: {\n algo: HKDF_ALGO.name,\n },\n },\n )\n const key = await safeTry(\n crypto.subtle.deriveKey(\n {\n name: 'HKDF',\n hash: ALGO_SHA,\n salt: new Uint8Array(),\n info: GLOBAL_ENCODER.encode('better-auth-electron-v1'),\n },\n keyMaterial,\n AES_ALGO,\n false,\n ['encrypt', 'decrypt'],\n ),\n {\n msg: 'HKDF deriveKey failed',\n ctx: {\n algo: HKDF_ALGO.name,\n },\n },\n )\n if (secretKeyCache.size >= MAX_CACHE_SIZE) {\n const staleKey = secretKeyCache.keys().next().value\n if (staleKey) {\n secretKeyCache.delete(staleKey)\n }\n }\n secretKeyCache.set(cacheKeyIndex, key)\n return key\n}\n\nfunction encode64(buffer: Uint8Array | ArrayBuffer) {\n const checkBuffer = okOr(buffer, {\n msg: 'Invalid buffer input for toBase64Url',\n ctx: { type: typeof buffer },\n })\n const bytes = checkBuffer instanceof Uint8Array ? checkBuffer : new Uint8Array(checkBuffer)\n\n return encodeBase64urlNoPadding(bytes)\n}\n\nfunction decode64(str: string): Uint8Array {\n const checkStr = okOr(str, {\n msg: 'Invalid string input for fromBase64Url',\n ctx: {\n stringLength: str?.length,\n },\n })\n\n const normalizedStr = checkStr.replace(/\\+/g, '-').replace(/\\//g, '_')\n const bytesBuffer = safeTry(() => decodeBase64urlIgnorePadding(normalizedStr), {\n msg: 'Base64 Decoding Failed',\n ctx: {\n msg: 'Oslo decode failed',\n ctx: { strPart: str.slice(0, 10) },\n },\n })\n\n return bytesBuffer as unknown as Uint8Array\n}\n\nexport async function encryptTicket(\n payload: Record<string, unknown>,\n secret: string,\n ttlSeconds = 60,\n): Promise<string> {\n const checkPayload = okOr(payload, {\n msg: 'Invalid payload: input is null or undefined for encryptTicket',\n ctx: {\n keys: payload ? Object.keys(payload) : null,\n },\n })\n const checkSecret = okOr(secret, {\n msg: 'Invalid secret: input is empty or invalid for encryptTicket',\n ctx: { secretLength: secret?.length },\n })\n const key = await safeTry(getCachedKey(checkSecret), {\n msg: 'Key initialization failed: unable to derive crypto key from secret',\n ctx: { secretLength: secret.length },\n })\n const iv = okOr(crypto.getRandomValues(new Uint8Array(12)), {\n msg: 'Crypto failure: system RNG failed to generate Initialization Vector (IV)',\n ctx: { requiredBytes: 12 },\n })\n const finalPayload = {\n payload: checkPayload,\n exp: Date.now() + ttlSeconds * 1000,\n }\n const jsonString = safeTry(() => JSON.stringify(finalPayload), {\n msg: 'Serialization failed: payload contains unserializable data (e.g., BigInt, Circular ref)',\n ctx: {\n payloadKeys: Object.keys(checkPayload),\n exp: finalPayload.exp,\n },\n })\n\n const encodedData = GLOBAL_ENCODER.encode(jsonString)\n const encryptedContent = await safeTry(\n crypto.subtle.encrypt({ name: 'AES-GCM', iv: iv }, key, encodedData),\n {\n msg: 'Encryption failed: AES-GCM encryption process encountered an error',\n ctx: {\n ivLength: iv.byteLength,\n dataLength: encodedData.byteLength,\n algo: 'AES-GCM',\n },\n },\n )\n const returnIV = encode64(iv)\n const returnData = encode64(encryptedContent)\n\n return `${returnIV}.${returnData}`\n}\n\nexport async function decryptTicket<T = Record<string, unknown>>(\n ticket: string,\n secret: string,\n): Promise<T> {\n const checkTicket = okOr(ticket, {\n msg: 'Ticket Validation for decryptTicket Failed: Input is null or undefined',\n ctx: {\n length: ticket?.length,\n },\n })\n const checkSecret = okOr(secret, {\n msg: 'Secret Validation for decryptTicket Failed: Input is null or undefined',\n ctx: {\n length: secret?.length,\n },\n })\n const now = Date.now()\n if (!checkTicket.includes('.')) {\n throw new BigIOError('Ticket Malformed: Missing separator (.)', {\n bigioErrorStack: [\n {\n msg: 'Ticket Malformed: Missing separator (.)',\n ctx: { ticketPart: `${checkTicket.slice(0, 10)}...` },\n timestamp: now,\n },\n ],\n })\n }\n const [ivUrl, dataUrl] = checkTicket.split('.')\n if (!(ivUrl && dataUrl)) {\n throw new BigIOError('Invalid ticket format: incomplete parts', {\n bigioErrorStack: [\n {\n msg: 'Invalid ticket format: incomplete parts',\n ctx: { ticketPart: `${checkTicket.slice(0, 10)}...` },\n timestamp: now,\n },\n ],\n })\n }\n const iv = decode64(ivUrl)\n const data = decode64(dataUrl)\n\n if (iv.byteLength !== 12) {\n throw new BigIOError('Crypto Failure: Invalid IV length', {\n bigioErrorStack: [\n {\n msg: 'AES-GCM requires 12-byte IV',\n ctx: { actualLength: iv.byteLength, expected: 12 },\n timestamp: now,\n },\n ],\n })\n }\n const key = await safeTry(getCachedKey(checkSecret), {\n msg: 'Key Derivation Failed: Unable to generate crypto key',\n ctx: { secretLength: checkSecret.length },\n })\n const decryptedBuffer = await safeTry(\n crypto.subtle.decrypt(\n { name: 'AES-GCM', iv: iv as unknown as BufferSource },\n key,\n data as unknown as BufferSource,\n ),\n {\n msg: 'Decryption Failed: Authentication tag mismatch or data corruption',\n ctx: { ivLength: iv.byteLength, dataLength: data.byteLength },\n },\n )\n const decodedString = new TextDecoder().decode(decryptedBuffer)\n const rawJson = safeTry(() => JSON.parse(decodedString), {\n msg: 'JSON Parsing Decrypted payload Failed',\n ctx: { len: decodedString.length, prefix: decodedString.slice(0, 10) },\n })\n const isValidPayload = safeTry(\n () =>\n z\n .object({\n payload: z.record(z.string(), z.unknown()).or(z.looseObject({})),\n exp: z.number().int().min(1),\n })\n .parse(rawJson),\n true,\n )\n const expNow = Date.now()\n\n if (expNow > isValidPayload.exp) {\n throw new BigIOError('Ticket Expired', {\n bigioErrorStack: [\n {\n msg: 'Ticket Expired',\n ctx: {\n exp: isValidPayload.exp,\n now: expNow,\n expiredByMs: expNow - isValidPayload.exp,\n },\n timestamp: expNow,\n },\n ],\n })\n }\n return isValidPayload.payload as T\n}\n\nexport function pkceGenerateVerifier(byteLength = 32): string {\n if (byteLength < 32 || byteLength > 96) {\n throw new BigIOError('PKCE Error: Invalid Verifier Length', {\n bigioErrorStack: [\n {\n msg: 'Verifier byte length must be between 32 and 96',\n ctx: {\n inputLength: byteLength,\n rfcRequirement: '43-128 chars string',\n },\n timestamp: Date.now(),\n },\n ],\n })\n }\n\n const buffer = new Uint8Array(byteLength)\n\n const randomValues = okOr(crypto.getRandomValues(buffer), {\n msg: 'PKCE Failure: System RNG failed to generate Verifier entropy',\n ctx: { requiredBytes: byteLength },\n })\n const result = encode64(randomValues)\n return result\n}\n\nexport async function pkceGenerateChallenge(verifier: string): Promise<string> {\n const checkVerifier = okOr(verifier, {\n msg: 'PKCE Challenge Failure: Verifier input is empty or invalid',\n ctx: { length: verifier?.length },\n })\n const data = GLOBAL_ENCODER.encode(checkVerifier)\n const hashBuffer = await safeTry(crypto.subtle.digest(ALGO_SHA, data), {\n msg: `PKCE Challenge Failure: ${ALGO_SHA} digest failed`,\n ctx: {\n verifierBytes: data.byteLength,\n algo: ALGO_SHA,\n },\n })\n\n return encode64(hashBuffer)\n}\nconst REGEX_BASE64_URL = /^[a-zA-Z0-9\\-_]+=*$/\n\nexport function SearchParamsZod(ELECTRON_SCHEME: string, PROVIDERS: string[]) {\n return z.object({\n scheme: z\n .string()\n .min(1, 'Scheme cannot be empty')\n .regex(REGEX_BASE64_URL)\n .refine((scheme) => scheme === ELECTRON_SCHEME, {\n message: 'Invalid scheme provided',\n }),\n provider: z.enum(PROVIDERS),\n challenge: z\n .string()\n .length(43, 'Challenge must be exactly 43 characters')\n .regex(REGEX_BASE64_URL),\n })\n}\n","// root/packages/better-auth-electron/client/better-auth/electron-renderer-plugin.ts\n\nimport type { BetterAuthClientPlugin, Session, User } from 'better-auth'\nimport { atom } from 'nanostores'\nimport z from 'zod'\nimport type { ElectronRendererPluginOptions } from '../options/electron-plugin-options'\nimport { defaultRendererPluginOptions } from '../options/electron-plugin-options'\nimport type { electronServerPlugin } from '../server/electron-server-plugin'\nimport { isElectronWindow } from '../utils/electron-plugin-env'\nimport {\n BigIOError,\n consoleError,\n consoleLog,\n pkceGenerateChallenge,\n safeTry,\n} from '../utils/electron-plugin-utils'\n\ntype ExchangeResult = {\n session: Pick<Session, 'createdAt' | 'updatedAt' | 'expiresAt'>\n user: User\n}\n// Extend the Window interface to include our custom property\nconst LOCK_NAME_IN_WINDOW = '__BIGIO_BETTER_AUTH_ELECTRON_ATTACHED__'\n\nconst checkAndSetGlobalLock = (): boolean => {\n const win = window as typeof window & { [key: string]: unknown }\n if (typeof win[LOCK_NAME_IN_WINDOW] === 'boolean' && win[LOCK_NAME_IN_WINDOW]) {\n return true\n }\n win[LOCK_NAME_IN_WINDOW] = true\n return false\n}\n\nconst ipcDeepLinkAtom = atom(false)\nconst abortSignalAtom = atom<AbortController | null>(null)\nconst ensureFreshSignal = () => {\n const currentAbortSignal = abortSignalAtom.get()\n if (currentAbortSignal) {\n currentAbortSignal.abort()\n }\n const newAbortSignal = new AbortController()\n abortSignalAtom.set(newAbortSignal)\n return newAbortSignal.signal\n}\n\nconst isPluginReadyAtom = atom(false)\nconst appMountedAtom = atom(false)\nconst resultFromDeepLinkAtom = atom<ExchangeResult | Error | null>(null)\nconst onDeepLinkSuccessFnAtom =\n atom<ElectronRendererPluginOptions['onDeepLinkSuccessFn']>(undefined)\n\nconst onDeepLinkFailedFnAtom = atom<ElectronRendererPluginOptions['onDeepLinkFailedFn']>(undefined)\n\nexport const electronRendererPlugin = (\n electronRendererPluginOptions: ElectronRendererPluginOptions,\n) => {\n const config = { ...defaultRendererPluginOptions, ...electronRendererPluginOptions }\n const {\n refetchSessionOnFocus,\n ELECTRON_SCHEME,\n ELECTRON_CALLBACK_HOST_PATH,\n DEEPLINK_EVENT_NAME,\n BACKEND_EXCHANGE_URL,\n APP_MOUNTED_EVENT_NAME,\n CHALLENGE_NAME_IN_URL,\n TICKET_NAME_IN_URL,\n onDeepLinkSuccessFn,\n onDeepLinkFailedFn,\n lazySignalUIReadyForFn,\n // ELECTRON_APP_HOST,\n } = config\n if (typeof onDeepLinkSuccessFn === 'function') {\n onDeepLinkSuccessFnAtom.set(onDeepLinkSuccessFn)\n }\n if (typeof onDeepLinkFailedFn === 'function') {\n onDeepLinkFailedFnAtom.set(onDeepLinkFailedFn)\n }\n function sendAppMounted() {\n if (!isElectronWindow(window)) {\n return\n }\n window.electron.ipcRenderer.send(APP_MOUNTED_EVENT_NAME)\n }\n return {\n id: 'bigio-electron-renderer-plugin',\n $InferServerPlugin: {} as ReturnType<typeof electronServerPlugin>,\n\n getActions: function ($fetch, $store, options) {\n if (!isElectronWindow(window)) {\n return {\n bigio: {\n onDeepLinkSuccess: () => null,\n onDeepLinkFailed: () => null,\n },\n }\n }\n if (!(checkAndSetGlobalLock() || isPluginReadyAtom.get())) {\n consoleLog('[Better-Auth-Electron] Initializing IPC Listeners...')\n\n if (refetchSessionOnFocus) {\n const focusEventAbortSignal = ensureFreshSignal()\n window.addEventListener(\n 'focus',\n () => {\n $store.notify('$sessionSignal')\n // betterAuthClient.getSession()\n },\n { signal: focusEventAbortSignal },\n )\n }\n if (!ipcDeepLinkAtom.get()) {\n const dataFromMainZod = z.object({\n deepLinkURL: z.string().min(1),\n verifier: z.string().min(1),\n })\n\n window.electron.ipcRenderer.on(\n DEEPLINK_EVENT_NAME,\n async (_event, dataFromMain) => {\n console.log(dataFromMain)\n const { data: readyData, error: dataError } = await safeTry(\n async () => {\n const bigioErrorStack = [{ ctx: dataFromMain }]\n const safeEvent = dataFromMainZod.safeParse(dataFromMain)\n if (!safeEvent.success || safeEvent.data === undefined) {\n throw new BigIOError(\n 'Failed to parse dataFromMain with zod',\n {\n cause: safeEvent.error,\n bigioErrorStack: [{ ctx: safeEvent }],\n },\n )\n }\n\n const { deepLinkURL, verifier } = safeEvent.data\n const deepLink = new URL(deepLinkURL)\n\n if (deepLink.protocol !== `${ELECTRON_SCHEME}:`) {\n throw new BigIOError('Bad Electron Scheme', {\n bigioErrorStack: bigioErrorStack,\n })\n }\n\n const deepLinkHostName = deepLink.hostname.toLowerCase()\n\n if (deepLinkHostName !== ELECTRON_CALLBACK_HOST_PATH) {\n throw new BigIOError('Bad CallBackHostPath', {\n bigioErrorStack: bigioErrorStack,\n })\n }\n\n // Challenge Check\n const challenge =\n deepLink.searchParams.get(CHALLENGE_NAME_IN_URL)\n\n console.log(challenge)\n if (!challenge) {\n throw new BigIOError('Error Challenge', {\n bigioErrorStack: bigioErrorStack,\n })\n }\n console.log(challenge)\n await safeTry(async () => {\n const checkChallenge = await pkceGenerateChallenge(verifier)\n if (challenge !== checkChallenge) {\n throw new BigIOError('That is not my ticket', {\n bigioErrorStack: bigioErrorStack,\n })\n }\n return checkChallenge\n }, true)\n\n // Ticket Extraction\n const deepLinkTicket =\n deepLink.searchParams.get(TICKET_NAME_IN_URL)\n if (!deepLinkTicket) {\n throw new BigIOError('No Ticket', {\n bigioErrorStack: bigioErrorStack,\n })\n }\n return { ticket: deepLinkTicket, verifier: verifier }\n },\n )\n console.log(dataError)\n\n const onFailedFn = onDeepLinkFailedFnAtom.get()\n if (!readyData && dataError) {\n if (\n lazySignalUIReadyForFn &&\n (typeof onDeepLinkSuccessFn === 'function' ||\n typeof onDeepLinkFailedFn === 'function')\n ) {\n resultFromDeepLinkAtom.set(dataError)\n }\n if (onFailedFn) {\n // this is async fn,prevent fake async fn that return promise\n // fire and forget\n safeTry(\n () => onFailedFn(dataError),\n new BigIOError('Failed at onFailedFn', {\n bigioErrorStack: [\n {\n ctx: String(dataError),\n },\n ],\n }),\n )\n return\n }\n if (dataError instanceof BigIOError) {\n consoleError(dataError)\n } else {\n console.error(\n `[Better-auth-electron-plugin] Unknown Error: ${dataError instanceof Error ? dataError.message : String(dataError)}`,\n )\n }\n return\n }\n\n // Exchange Ticket\n const result = await $fetch<ExchangeResult>(\n `/${BACKEND_EXCHANGE_URL}`,\n {\n method: 'POST',\n body: {\n ticket: readyData.ticket,\n verifier: readyData.verifier,\n },\n },\n )\n if (result.error) {\n const bigIOError = new BigIOError('Failed to exchange the ticket', {\n bigioErrorStack: [\n {\n ctx: {\n deepLinkEvent: dataFromMain,\n fetchError: result.error,\n },\n },\n ],\n })\n if (\n lazySignalUIReadyForFn &&\n (typeof onDeepLinkSuccessFn === 'function' ||\n typeof onDeepLinkFailedFn === 'function')\n ) {\n resultFromDeepLinkAtom.set(bigIOError)\n }\n if (onFailedFn) {\n // this is async fn,prevent fake async fn that return promise\n // fire and forget\n safeTry(() => onFailedFn(result.error), bigIOError)\n return\n }\n consoleError(bigIOError)\n return\n }\n $store.notify('$sessionSignal')\n\n const originalSessionDate = result.data.session\n const hydratedSession = {\n createdAt: new Date(originalSessionDate.createdAt),\n updatedAt: new Date(originalSessionDate.updatedAt),\n expiresAt: new Date(originalSessionDate.expiresAt),\n }\n const userSession = { user: result.data.user, session: hydratedSession }\n if (\n lazySignalUIReadyForFn &&\n (typeof onDeepLinkSuccessFn === 'function' ||\n typeof onDeepLinkFailedFn === 'function')\n ) {\n resultFromDeepLinkAtom.set(userSession)\n }\n const onSuccessFn = onDeepLinkSuccessFnAtom.get()\n if (onSuccessFn) {\n // this is async fn,prevent fake async fn that return promise\n // fire and forget\n safeTry(\n () => onSuccessFn(userSession),\n new BigIOError('Failed at onSuccessFn', {\n bigioErrorStack: [\n {\n ctx: {\n deepLinkEvent: dataFromMain,\n },\n },\n ],\n }),\n )\n }\n return\n },\n )\n ipcDeepLinkAtom.set(true)\n }\n\n // Tell main app is ready handle the coldstart\n consoleLog('[Client] 發送 App Ready 信號...')\n if (\n !lazySignalUIReadyForFn ||\n typeof onDeepLinkSuccessFn === 'function' ||\n typeof onDeepLinkFailedFn === 'function'\n ) {\n appMountedAtom.set(true)\n sendAppMounted()\n }\n }\n\n // Lock it\n isPluginReadyAtom.set(true)\n return {\n bigio: {\n onDeepLinkSuccess: (\n fn: ElectronRendererPluginOptions['onDeepLinkSuccessFn'],\n ) => {\n if (!isElectronWindow(window)) {\n return\n }\n if (typeof fn === 'function') {\n onDeepLinkSuccessFnAtom.set(fn)\n }\n if (lazySignalUIReadyForFn) {\n if (!appMountedAtom.get()) {\n appMountedAtom.set(true)\n sendAppMounted()\n return\n }\n const result = resultFromDeepLinkAtom.get()\n if (!(result instanceof Error) && result && fn) {\n safeTry(\n async () => {\n await fn(result)\n resultFromDeepLinkAtom.set(null)\n },\n new BigIOError('Failed at lazy onSuccessFn', {\n bigioErrorStack: [\n {\n ctx: result,\n },\n ],\n }),\n )\n }\n return\n }\n },\n onDeepLinkFailed: (fn: ElectronRendererPluginOptions['onDeepLinkFailedFn']) => {\n if (!isElectronWindow(window)) {\n return\n }\n if (typeof fn === 'function') {\n onDeepLinkFailedFnAtom.set(fn)\n }\n if (lazySignalUIReadyForFn) {\n if (!appMountedAtom.get()) {\n appMountedAtom.set(true)\n sendAppMounted()\n return\n }\n const result = resultFromDeepLinkAtom.get()\n if (result instanceof Error && fn) {\n safeTry(\n async () => {\n await fn(result)\n resultFromDeepLinkAtom.set(null)\n },\n new BigIOError('Failed at lazy onFailedFn', {\n bigioErrorStack: [\n {\n ctx: String(result),\n },\n ],\n }),\n )\n }\n return\n }\n },\n },\n }\n },\n } satisfies BetterAuthClientPlugin\n}\n"]}