@djangocfg/monitor 2.1.217 → 2.1.218

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":["../src/client/capture/fingerprint.ts","../src/client/capture/session.ts","../src/client/store/index.ts","../src/_api/generated/cfg_monitor/monitor/client.ts","../src/_api/generated/cfg_monitor/http.ts","../src/_api/generated/cfg_monitor/errors.ts","../src/_api/generated/cfg_monitor/logger.ts","../src/_api/generated/cfg_monitor/retry.ts","../src/_api/generated/cfg_monitor/client.ts","../src/_api/generated/cfg_monitor/storage.ts","../src/_api/generated/cfg_monitor/enums.ts","../src/_api/generated/cfg_monitor/_utils/schemas/FrontendEventIngestRequest.schema.ts","../src/_api/generated/cfg_monitor/_utils/schemas/IngestBatchRequest.schema.ts","../src/_api/generated/cfg_monitor/index.ts","../src/_api/BaseClient.ts","../src/client/transport/ingest.ts","../src/client/capture/js-errors.ts","../src/client/capture/console.ts","../src/client/capture/validation.ts","../src/client/capture/network.ts","../src/client/MonitorProvider.tsx","../src/client/index.ts"],"sourcesContent":["function simpleHash(str: string): string {\n let hash = 0\n for (let i = 0; i < str.length; i++) {\n hash = (hash << 5) - hash + str.charCodeAt(i)\n hash = hash & hash\n }\n return Math.abs(hash).toString(16).padStart(8, '0')\n}\n\nexport async function computeFingerprint(\n message: string,\n stack: string,\n url: string,\n): Promise<string> {\n const raw = `${message}|${stack}|${url}`\n if (typeof crypto !== 'undefined' && crypto.subtle) {\n try {\n const data = new TextEncoder().encode(raw)\n const buf = await crypto.subtle.digest('SHA-256', data)\n return Array.from(new Uint8Array(buf))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n .slice(0, 64)\n } catch { /* fall through */ }\n }\n return simpleHash(raw)\n}\n","const SESSION_KEY = 'fm_session_id'\nconst COOKIE_MAX_AGE = 60 * 60 * 24 * 365\n\nfunction generateUUID(): string {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID()\n }\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0\n return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16)\n })\n}\n\nfunction setCookie(name: string, value: string): void {\n if (typeof document === 'undefined') return\n document.cookie = `${name}=${value}; path=/; SameSite=Lax; max-age=${COOKIE_MAX_AGE}`\n}\n\nexport function getSessionId(): string {\n if (typeof localStorage === 'undefined') return ''\n let id = localStorage.getItem(SESSION_KEY)\n if (!id) {\n id = generateUUID()\n localStorage.setItem(SESSION_KEY, id)\n setCookie(SESSION_KEY, id)\n }\n return id\n}\n\nexport function ensureSessionCookie(): void {\n const id = getSessionId()\n if (id) setCookie(SESSION_KEY, id)\n}\n","import { createStore } from 'zustand/vanilla'\nimport type { MonitorEvent, MonitorConfig } from '../../types'\nimport { sendBatch } from '../transport/ingest'\n\ninterface MonitorState {\n config: MonitorConfig\n buffer: MonitorEvent[]\n initialized: boolean\n push: (event: MonitorEvent) => void\n flush: (useBeacon?: boolean) => void\n setConfig: (config: MonitorConfig) => void\n}\n\nexport const monitorStore = createStore<MonitorState>((set, get) => ({\n config: {},\n buffer: [],\n initialized: false,\n\n push(event) {\n const { config, buffer } = get()\n const maxSize = config.maxBufferSize ?? 20\n const next = [...buffer, event]\n set({ buffer: next })\n\n if (next.length >= maxSize || event.level === 'error') {\n get().flush()\n }\n },\n\n flush(useBeacon = false) {\n const { buffer } = get()\n if (buffer.length === 0) return\n const batch = buffer.slice(0, 50)\n set({ buffer: buffer.slice(50) })\n sendBatch({ events: batch }, useBeacon)\n },\n\n setConfig(config) {\n set({ config, initialized: true })\n },\n}))\n","// @ts-nocheck\nimport * as Models from \"./models\";\n\n\n/**\n * API endpoints for Monitor.\n */\nexport class Monitor {\n private client: any;\n\n constructor(client: any) {\n this.client = client;\n }\n\n /**\n * Ingest browser events\n * \n * Accepts a batch of up to 50 frontend events. No authentication required.\n */\n async ingestCreate(data: Models.IngestBatchRequest): Promise<any> {\n const response = await this.client.request('POST', \"/cfg/monitor/ingest/\", { body: data });\n return response;\n }\n\n}","// @ts-nocheck\n// Auto-generated by DjangoCFG - see CLAUDE.md\n/**\n * HTTP Client Adapter Pattern\n *\n * Allows switching between fetch/axios/httpx without changing generated code.\n * Provides unified interface for making HTTP requests.\n */\n\nexport interface HttpRequest {\n method: string;\n url: string;\n headers?: Record<string, string>;\n body?: any;\n params?: Record<string, any>;\n /** FormData for file uploads (multipart/form-data) */\n formData?: FormData;\n /** Binary data for octet-stream uploads */\n binaryBody?: Blob | ArrayBuffer;\n}\n\nexport interface HttpResponse<T = any> {\n data: T;\n status: number;\n statusText: string;\n headers: Record<string, string>;\n}\n\n/**\n * HTTP Client Adapter Interface.\n * Implement this to use custom HTTP clients (axios, httpx, etc.)\n */\nexport interface HttpClientAdapter {\n request<T = any>(request: HttpRequest): Promise<HttpResponse<T>>;\n}\n\n/**\n * Default Fetch API adapter.\n * Uses native browser fetch() with proper error handling.\n */\nexport class FetchAdapter implements HttpClientAdapter {\n async request<T = any>(request: HttpRequest): Promise<HttpResponse<T>> {\n const { method, url, headers, body, params, formData, binaryBody } = request;\n\n // Build URL with query params\n let finalUrl = url;\n if (params) {\n const searchParams = new URLSearchParams();\n Object.entries(params).forEach(([key, value]) => {\n if (value !== null && value !== undefined) {\n searchParams.append(key, String(value));\n }\n });\n const queryString = searchParams.toString();\n if (queryString) {\n finalUrl = url.includes('?') ? `${url}&${queryString}` : `${url}?${queryString}`;\n }\n }\n\n // Build headers\n const finalHeaders: Record<string, string> = { ...headers };\n\n // Determine body and content-type\n let requestBody: string | FormData | Blob | ArrayBuffer | undefined;\n\n if (formData) {\n // For multipart/form-data, let browser set Content-Type with boundary\n requestBody = formData;\n // Don't set Content-Type - browser will set it with boundary\n } else if (binaryBody) {\n // Binary upload (application/octet-stream)\n finalHeaders['Content-Type'] = 'application/octet-stream';\n requestBody = binaryBody;\n } else if (body) {\n // JSON request\n finalHeaders['Content-Type'] = 'application/json';\n requestBody = JSON.stringify(body);\n }\n\n // Make request\n const response = await fetch(finalUrl, {\n method,\n headers: finalHeaders,\n body: requestBody,\n credentials: 'include', // Include Django session cookies\n });\n\n // Parse response\n let data: any = null;\n const contentType = response.headers.get('content-type');\n\n if (response.status !== 204 && contentType?.includes('application/json')) {\n data = await response.json();\n } else if (response.status !== 204) {\n data = await response.text();\n }\n\n // Convert Headers to plain object\n const responseHeaders: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n responseHeaders[key] = value;\n });\n\n return {\n data,\n status: response.status,\n statusText: response.statusText,\n headers: responseHeaders,\n };\n }\n}\n\n/**\n * FetchAdapter with keepalive:true.\n *\n * Use this adapter when you need requests to survive page unload\n * (visibilitychange / beforeunload) — the browser will complete the request\n * even after the page is navigated away. Typical use: monitor / analytics flush.\n *\n * @example\n * ```typescript\n * import { APIClient, KeepAliveFetchAdapter } from './client';\n * const client = new APIClient(baseUrl, { httpClient: new KeepAliveFetchAdapter() });\n * ```\n */\nexport class KeepAliveFetchAdapter extends FetchAdapter {\n async request<T = any>(request: HttpRequest): Promise<HttpResponse<T>> {\n const origFetch = globalThis.fetch;\n globalThis.fetch = (input: RequestInfo | URL, init?: RequestInit) =>\n origFetch(input, { ...init, keepalive: true });\n try {\n return await super.request<T>(request);\n } finally {\n globalThis.fetch = origFetch;\n }\n }\n}","// @ts-nocheck\n// Auto-generated by DjangoCFG - see CLAUDE.md\n/**\n * API Error Classes\n *\n * Typed error classes with Django REST Framework support.\n */\n\n/**\n * HTTP API Error with DRF field-specific validation errors.\n *\n * Usage:\n * ```typescript\n * try {\n * await api.users.create(userData);\n * } catch (error) {\n * if (error instanceof APIError) {\n * if (error.isValidationError) {\n * console.log('Field errors:', error.fieldErrors);\n * // { \"email\": [\"Email already exists\"], \"username\": [\"Required\"] }\n * }\n * }\n * }\n * ```\n */\nexport class APIError extends Error {\n constructor(\n public statusCode: number,\n public statusText: string,\n public response: any,\n public url: string,\n message?: string\n ) {\n super(message || `HTTP ${statusCode}: ${statusText}`);\n this.name = 'APIError';\n }\n\n /**\n * Get error details from response.\n * DRF typically returns: { \"detail\": \"Error message\" } or { \"field\": [\"error1\", \"error2\"] }\n */\n get details(): Record<string, any> | null {\n if (typeof this.response === 'object' && this.response !== null) {\n return this.response;\n }\n return null;\n }\n\n /**\n * Get field-specific validation errors from DRF.\n * Returns: { \"field_name\": [\"error1\", \"error2\"], ... }\n */\n get fieldErrors(): Record<string, string[]> | null {\n const details = this.details;\n if (!details) return null;\n\n // DRF typically returns: { \"field\": [\"error1\", \"error2\"] }\n const fieldErrors: Record<string, string[]> = {};\n for (const [key, value] of Object.entries(details)) {\n if (Array.isArray(value)) {\n fieldErrors[key] = value;\n }\n }\n\n return Object.keys(fieldErrors).length > 0 ? fieldErrors : null;\n }\n\n /**\n * Get single error message from DRF.\n * Checks for \"detail\", \"message\", or first field error.\n */\n get errorMessage(): string {\n const details = this.details;\n if (!details) return this.message;\n\n // Check for \"detail\" field (common in DRF)\n if (details.detail) {\n return Array.isArray(details.detail) ? details.detail.join(', ') : String(details.detail);\n }\n\n // Check for \"message\" field\n if (details.message) {\n return String(details.message);\n }\n\n // Return first field error\n const fieldErrors = this.fieldErrors;\n if (fieldErrors) {\n const firstField = Object.keys(fieldErrors)[0];\n if (firstField) {\n return `${firstField}: ${fieldErrors[firstField]?.join(', ')}`;\n }\n }\n\n return this.message;\n }\n\n // Helper methods for common HTTP status codes\n get isValidationError(): boolean { return this.statusCode === 400; }\n get isAuthError(): boolean { return this.statusCode === 401; }\n get isPermissionError(): boolean { return this.statusCode === 403; }\n get isNotFoundError(): boolean { return this.statusCode === 404; }\n get isServerError(): boolean { return this.statusCode >= 500 && this.statusCode < 600; }\n}\n\n/**\n * Network Error (connection failed, timeout, etc.)\n */\nexport class NetworkError extends Error {\n constructor(\n message: string,\n public url: string,\n public originalError?: Error\n ) {\n super(message);\n this.name = 'NetworkError';\n }\n}","// @ts-nocheck\n// Auto-generated by DjangoCFG - see CLAUDE.md\n/**\n * API Logger with Consola\n * Beautiful console logging for API requests and responses\n *\n * Installation:\n * npm install consola\n */\n\nimport { type ConsolaInstance, createConsola } from 'consola';\n\n/**\n * Request log data\n */\nexport interface RequestLog {\n method: string;\n url: string;\n headers?: Record<string, string>;\n body?: any;\n timestamp: number;\n}\n\n/**\n * Response log data\n */\nexport interface ResponseLog {\n status: number;\n statusText: string;\n data?: any;\n duration: number;\n timestamp: number;\n}\n\n/**\n * Error log data\n */\nexport interface ErrorLog {\n message: string;\n statusCode?: number;\n fieldErrors?: Record<string, string[]>;\n duration: number;\n timestamp: number;\n}\n\n/**\n * Logger configuration\n */\nexport interface LoggerConfig {\n /** Enable logging */\n enabled: boolean;\n /** Log requests */\n logRequests: boolean;\n /** Log responses */\n logResponses: boolean;\n /** Log errors */\n logErrors: boolean;\n /** Log request/response bodies */\n logBodies: boolean;\n /** Log headers (excluding sensitive ones) */\n logHeaders: boolean;\n /** Custom consola instance */\n consola?: ConsolaInstance;\n}\n\n/**\n * Default logger configuration\n */\nconst DEFAULT_CONFIG: LoggerConfig = {\n enabled: process.env.NODE_ENV !== 'production',\n logRequests: true,\n logResponses: true,\n logErrors: true,\n logBodies: true,\n logHeaders: false,\n};\n\n/**\n * Sensitive header names to filter out\n */\nconst SENSITIVE_HEADERS = [\n 'authorization',\n 'cookie',\n 'set-cookie',\n 'x-api-key',\n 'x-csrf-token',\n];\n\n/**\n * API Logger class\n */\nexport class APILogger {\n private config: LoggerConfig;\n private consola: ConsolaInstance;\n\n constructor(config: Partial<LoggerConfig> = {}) {\n this.config = { ...DEFAULT_CONFIG, ...config };\n this.consola = config.consola || createConsola({\n level: this.config.enabled ? 4 : 0,\n });\n }\n\n /**\n * Enable logging\n */\n enable(): void {\n this.config.enabled = true;\n }\n\n /**\n * Disable logging\n */\n disable(): void {\n this.config.enabled = false;\n }\n\n /**\n * Update configuration\n */\n setConfig(config: Partial<LoggerConfig>): void {\n this.config = { ...this.config, ...config };\n }\n\n /**\n * Filter sensitive headers\n */\n private filterHeaders(headers?: Record<string, string>): Record<string, string> {\n if (!headers) return {};\n\n const filtered: Record<string, string> = {};\n Object.keys(headers).forEach((key) => {\n const lowerKey = key.toLowerCase();\n if (SENSITIVE_HEADERS.includes(lowerKey)) {\n filtered[key] = '***';\n } else {\n filtered[key] = headers[key] || '';\n }\n });\n\n return filtered;\n }\n\n /**\n * Log request\n */\n logRequest(request: RequestLog): void {\n if (!this.config.enabled || !this.config.logRequests) return;\n\n const { method, url, headers, body } = request;\n\n this.consola.start(`${method} ${url}`);\n\n if (this.config.logHeaders && headers) {\n this.consola.debug('Headers:', this.filterHeaders(headers));\n }\n\n if (this.config.logBodies && body) {\n this.consola.debug('Body:', body);\n }\n }\n\n /**\n * Log response\n */\n logResponse(request: RequestLog, response: ResponseLog): void {\n if (!this.config.enabled || !this.config.logResponses) return;\n\n const { method, url } = request;\n const { status, statusText, data, duration } = response;\n\n const statusColor = status >= 500 ? 'red'\n : status >= 400 ? 'yellow'\n : status >= 300 ? 'cyan'\n : 'green';\n\n this.consola.success(\n `${method} ${url} ${status} ${statusText} (${duration}ms)`\n );\n\n if (this.config.logBodies && data) {\n this.consola.debug('Response:', data);\n }\n }\n\n /**\n * Log error\n */\n logError(request: RequestLog, error: ErrorLog): void {\n if (!this.config.enabled || !this.config.logErrors) return;\n\n const { method, url } = request;\n const { message, statusCode, fieldErrors, duration } = error;\n\n this.consola.error(\n `${method} ${url} ${statusCode || 'Network'} Error (${duration}ms)`\n );\n\n this.consola.error('Message:', message);\n\n if (fieldErrors && Object.keys(fieldErrors).length > 0) {\n this.consola.error('Field Errors:');\n Object.entries(fieldErrors).forEach(([field, errors]) => {\n errors.forEach((err) => {\n this.consola.error(` • ${field}: ${err}`);\n });\n });\n }\n }\n\n /**\n * Log general info\n */\n info(message: string, ...args: any[]): void {\n if (!this.config.enabled) return;\n this.consola.info(message, ...args);\n }\n\n /**\n * Log warning\n */\n warn(message: string, ...args: any[]): void {\n if (!this.config.enabled) return;\n this.consola.warn(message, ...args);\n }\n\n /**\n * Log error\n */\n error(message: string, ...args: any[]): void {\n if (!this.config.enabled) return;\n this.consola.error(message, ...args);\n }\n\n /**\n * Log debug\n */\n debug(message: string, ...args: any[]): void {\n if (!this.config.enabled) return;\n this.consola.debug(message, ...args);\n }\n\n /**\n * Log success\n */\n success(message: string, ...args: any[]): void {\n if (!this.config.enabled) return;\n this.consola.success(message, ...args);\n }\n\n /**\n * Create a sub-logger with prefix\n */\n withTag(tag: string): ConsolaInstance {\n return this.consola.withTag(tag);\n }\n}\n\n/**\n * Default logger instance\n */\nexport const defaultLogger = new APILogger();","// @ts-nocheck\n// Auto-generated by DjangoCFG - see CLAUDE.md\n/**\n * Retry Configuration and Utilities\n *\n * Provides automatic retry logic for failed HTTP requests using p-retry.\n * Retries only on network errors and server errors (5xx), not client errors (4xx).\n */\n\nimport pRetry, { AbortError } from 'p-retry';\nimport { APIError, NetworkError } from './errors';\n\n/**\n * Information about a failed retry attempt.\n */\nexport interface FailedAttemptInfo {\n /** The error that caused the failure */\n error: Error;\n /** The attempt number (1-indexed) */\n attemptNumber: number;\n /** Number of retries left */\n retriesLeft: number;\n}\n\n/**\n * Retry configuration options.\n *\n * Uses exponential backoff with jitter by default to avoid thundering herd.\n */\nexport interface RetryConfig {\n /**\n * Maximum number of retry attempts.\n * @default 3\n */\n retries?: number;\n\n /**\n * Exponential backoff factor.\n * @default 2\n */\n factor?: number;\n\n /**\n * Minimum wait time between retries (ms).\n * @default 1000\n */\n minTimeout?: number;\n\n /**\n * Maximum wait time between retries (ms).\n * @default 60000\n */\n maxTimeout?: number;\n\n /**\n * Add randomness to wait times (jitter).\n * Helps avoid thundering herd problem.\n * @default true\n */\n randomize?: boolean;\n\n /**\n * Callback called on each failed attempt.\n */\n onFailedAttempt?: (info: FailedAttemptInfo) => void;\n}\n\n/**\n * Default retry configuration.\n */\nexport const DEFAULT_RETRY_CONFIG: Required<RetryConfig> = {\n retries: 3,\n factor: 2,\n minTimeout: 1000,\n maxTimeout: 60000,\n randomize: true,\n onFailedAttempt: () => {},\n};\n\n/**\n * Determine if an error should trigger a retry.\n *\n * Retries on:\n * - Network errors (connection refused, timeout, etc.)\n * - Server errors (5xx status codes)\n * - Rate limiting (429 status code)\n *\n * Does NOT retry on:\n * - Client errors (4xx except 429)\n * - Authentication errors (401, 403)\n * - Not found (404)\n *\n * @param error - The error to check\n * @returns true if should retry, false otherwise\n */\nexport function shouldRetry(error: any): boolean {\n // Always retry network errors\n if (error instanceof NetworkError) {\n return true;\n }\n\n // For API errors, check status code\n if (error instanceof APIError) {\n const status = error.statusCode;\n\n // Retry on 5xx server errors\n if (status >= 500 && status < 600) {\n return true;\n }\n\n // Retry on 429 (rate limit)\n if (status === 429) {\n return true;\n }\n\n // Do NOT retry on 4xx client errors\n return false;\n }\n\n // Retry on unknown errors (might be network issues)\n return true;\n}\n\n/**\n * Wrap a function with retry logic.\n *\n * @param fn - Async function to retry\n * @param config - Retry configuration\n * @returns Result of the function\n *\n * @example\n * ```typescript\n * const result = await withRetry(\n * async () => fetch('https://api.example.com/users'),\n * { retries: 5, minTimeout: 2000 }\n * );\n * ```\n */\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n config?: RetryConfig\n): Promise<T> {\n const finalConfig = { ...DEFAULT_RETRY_CONFIG, ...config };\n\n return pRetry(\n async () => {\n try {\n return await fn();\n } catch (error) {\n // Check if we should retry this error\n if (!shouldRetry(error)) {\n // Abort retry immediately for non-retryable errors\n throw new AbortError(error as Error);\n }\n\n // Re-throw error to trigger retry\n throw error;\n }\n },\n {\n retries: finalConfig.retries,\n factor: finalConfig.factor,\n minTimeout: finalConfig.minTimeout,\n maxTimeout: finalConfig.maxTimeout,\n randomize: finalConfig.randomize,\n onFailedAttempt: finalConfig.onFailedAttempt ? (error) => {\n // Adapt p-retry's FailedAttemptError to our FailedAttemptInfo\n const pRetryError = error as any; // p-retry's internal type\n finalConfig.onFailedAttempt!({\n error: pRetryError as Error,\n attemptNumber: pRetryError.attemptNumber,\n retriesLeft: pRetryError.retriesLeft,\n });\n } : undefined,\n }\n );\n}","import { Monitor } from \"./monitor\";\nimport { HttpClientAdapter, FetchAdapter } from \"./http\";\nimport { APIError, NetworkError } from \"./errors\";\nimport { APILogger, type LoggerConfig } from \"./logger\";\nimport { withRetry, type RetryConfig } from \"./retry\";\n\n\n/**\n * Async API client for Django CFG API.\n *\n * Usage:\n * ```typescript\n * const client = new APIClient('https://api.example.com');\n * const users = await client.users.list();\n * const post = await client.posts.create(newPost);\n *\n * // Custom HTTP adapter (e.g., Axios)\n * const client = new APIClient('https://api.example.com', {\n * httpClient: new AxiosAdapter()\n * });\n * ```\n */\nexport class APIClient {\n private baseUrl: string;\n private httpClient: HttpClientAdapter;\n private logger: APILogger | null = null;\n private retryConfig: RetryConfig | null = null;\n private tokenGetter: (() => string | null) | null = null;\n\n // Sub-clients\n public monitor: Monitor;\n\n constructor(\n baseUrl: string,\n options?: {\n httpClient?: HttpClientAdapter;\n loggerConfig?: Partial<LoggerConfig>;\n retryConfig?: RetryConfig;\n tokenGetter?: () => string | null;\n }\n ) {\n this.baseUrl = baseUrl.replace(/\\/$/, '');\n this.httpClient = options?.httpClient || new FetchAdapter();\n this.tokenGetter = options?.tokenGetter || null;\n\n // Initialize logger if config provided\n if (options?.loggerConfig !== undefined) {\n this.logger = new APILogger(options.loggerConfig);\n }\n\n // Store retry configuration\n if (options?.retryConfig !== undefined) {\n this.retryConfig = options.retryConfig;\n }\n\n // Initialize sub-clients\n this.monitor = new Monitor(this);\n }\n\n /**\n * Get CSRF token from cookies (for SessionAuthentication).\n *\n * Returns null if cookie doesn't exist (JWT-only auth).\n */\n getCsrfToken(): string | null {\n const name = 'csrftoken';\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n if (parts.length === 2) {\n return parts.pop()?.split(';').shift() || null;\n }\n return null;\n }\n\n /**\n * Get the base URL for building streaming/download URLs.\n */\n getBaseUrl(): string {\n return this.baseUrl;\n }\n\n /**\n * Get JWT token for URL authentication (used in streaming endpoints).\n * Returns null if no token getter is configured or no token is available.\n */\n getToken(): string | null {\n return this.tokenGetter ? this.tokenGetter() : null;\n }\n\n /**\n * Make HTTP request with Django CSRF and session handling.\n * Automatically retries on network errors and 5xx server errors.\n */\n async request<T>(\n method: string,\n path: string,\n options?: {\n params?: Record<string, any>;\n body?: any;\n formData?: FormData;\n binaryBody?: Blob | ArrayBuffer;\n headers?: Record<string, string>;\n }\n ): Promise<T> {\n // Wrap request in retry logic if configured\n if (this.retryConfig) {\n return withRetry(() => this._makeRequest<T>(method, path, options), {\n ...this.retryConfig,\n onFailedAttempt: (info) => {\n // Log retry attempts\n if (this.logger) {\n this.logger.warn(\n `Retry attempt ${info.attemptNumber}/${info.retriesLeft + info.attemptNumber} ` +\n `for ${method} ${path}: ${info.error.message}`\n );\n }\n // Call user's onFailedAttempt if provided\n this.retryConfig?.onFailedAttempt?.(info);\n },\n });\n }\n\n // No retry configured, make request directly\n return this._makeRequest<T>(method, path, options);\n }\n\n /**\n * Internal request method (without retry wrapper).\n * Used by request() method with optional retry logic.\n */\n private async _makeRequest<T>(\n method: string,\n path: string,\n options?: {\n params?: Record<string, any>;\n body?: any;\n formData?: FormData;\n binaryBody?: Blob | ArrayBuffer;\n headers?: Record<string, string>;\n }\n ): Promise<T> {\n // Build URL - handle both absolute and relative paths\n // When baseUrl is empty (static builds), path is used as-is (relative to current origin)\n const url = this.baseUrl ? `${this.baseUrl}${path}` : path;\n const startTime = Date.now();\n\n // Build headers - start with custom headers from options\n const headers: Record<string, string> = {\n ...(options?.headers || {})\n };\n\n // Don't set Content-Type for FormData/binaryBody (browser will set it with boundary)\n if (!options?.formData && !options?.binaryBody && !headers['Content-Type']) {\n headers['Content-Type'] = 'application/json';\n }\n\n // CSRF not needed - SessionAuthentication not enabled in DRF config\n // Your API uses JWT/Token authentication (no CSRF required)\n\n // Log request\n if (this.logger) {\n this.logger.logRequest({\n method,\n url: url,\n headers,\n body: options?.formData || options?.body,\n timestamp: startTime,\n });\n }\n\n try {\n // Make request via HTTP adapter\n const response = await this.httpClient.request<T>({\n method,\n url: url,\n headers,\n params: options?.params,\n body: options?.body,\n formData: options?.formData,\n binaryBody: options?.binaryBody,\n });\n\n const duration = Date.now() - startTime;\n\n // Check for HTTP errors\n if (response.status >= 400) {\n const error = new APIError(\n response.status,\n response.statusText,\n response.data,\n url\n );\n\n // Log error\n if (this.logger) {\n this.logger.logError(\n {\n method,\n url: url,\n headers,\n body: options?.formData || options?.body,\n timestamp: startTime,\n },\n {\n message: error.message,\n statusCode: response.status,\n duration,\n timestamp: Date.now(),\n }\n );\n }\n\n throw error;\n }\n\n // Log successful response\n if (this.logger) {\n this.logger.logResponse(\n {\n method,\n url: url,\n headers,\n body: options?.formData || options?.body,\n timestamp: startTime,\n },\n {\n status: response.status,\n statusText: response.statusText,\n data: response.data,\n duration,\n timestamp: Date.now(),\n }\n );\n }\n\n return response.data as T;\n } catch (error) {\n const duration = Date.now() - startTime;\n\n // Re-throw APIError as-is\n if (error instanceof APIError) {\n throw error;\n }\n\n // Detect CORS errors and dispatch event\n const isCORSError = error instanceof TypeError &&\n (error.message.toLowerCase().includes('cors') ||\n error.message.toLowerCase().includes('failed to fetch') ||\n error.message.toLowerCase().includes('network request failed'));\n\n // Log specific error type first\n if (this.logger) {\n if (isCORSError) {\n this.logger.error(`🚫 CORS Error: ${method} ${url}`);\n this.logger.error(` → ${error instanceof Error ? error.message : String(error)}`);\n this.logger.error(` → Configure security_domains parameter on the server`);\n } else {\n this.logger.error(`⚠️ Network Error: ${method} ${url}`);\n this.logger.error(` → ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n // Dispatch browser events\n if (typeof window !== 'undefined') {\n try {\n if (isCORSError) {\n // Dispatch CORS-specific error event\n window.dispatchEvent(new CustomEvent('cors-error', {\n detail: {\n url: url,\n method: method,\n error: error instanceof Error ? error.message : String(error),\n timestamp: new Date(),\n },\n bubbles: true,\n cancelable: false,\n }));\n } else {\n // Dispatch generic network error event\n window.dispatchEvent(new CustomEvent('network-error', {\n detail: {\n url: url,\n method: method,\n error: error instanceof Error ? error.message : String(error),\n timestamp: new Date(),\n },\n bubbles: true,\n cancelable: false,\n }));\n }\n } catch (eventError) {\n // Silently fail - event dispatch should never crash the app\n }\n }\n\n // Wrap other errors as NetworkError\n const networkError = error instanceof Error\n ? new NetworkError(error.message, url, error)\n : new NetworkError('Unknown error', url);\n\n // Detailed logging via logger.logError\n if (this.logger) {\n this.logger.logError(\n {\n method,\n url: url,\n headers,\n body: options?.formData || options?.body,\n timestamp: startTime,\n },\n {\n message: networkError.message,\n duration,\n timestamp: Date.now(),\n }\n );\n }\n\n throw networkError;\n }\n }\n}\n","// @ts-nocheck\n// Auto-generated by DjangoCFG - see CLAUDE.md\n/**\n * Storage adapters for cross-platform token storage.\n *\n * Supports:\n * - LocalStorage (browser)\n * - Cookies (SSR/browser)\n * - Memory (Node.js/Electron/testing)\n */\n\nimport type { APILogger } from './logger';\n\n/**\n * Storage adapter interface for cross-platform token storage.\n */\nexport interface StorageAdapter {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n removeItem(key: string): void;\n}\n\n/**\n * LocalStorage adapter with safe try-catch for browser environments.\n * Works in modern browsers with localStorage support.\n * \n * Note: This adapter uses window.localStorage and should only be used in browser/client environments.\n * For server-side usage, use MemoryStorageAdapter or CookieStorageAdapter instead.\n */\nexport class LocalStorageAdapter implements StorageAdapter {\n private logger?: APILogger;\n\n constructor(logger?: APILogger) {\n this.logger = logger;\n }\n\n getItem(key: string): string | null {\n try {\n if (typeof window !== 'undefined' && window.localStorage) {\n const value = localStorage.getItem(key);\n this.logger?.debug(`LocalStorage.getItem(\"${key}\"): ${value ? 'found' : 'not found'}`);\n return value;\n }\n this.logger?.warn('LocalStorage not available: window.localStorage is undefined');\n } catch (error) {\n this.logger?.error('LocalStorage.getItem failed:', error);\n }\n return null;\n }\n\n setItem(key: string, value: string): void {\n try {\n if (typeof window !== 'undefined' && window.localStorage) {\n localStorage.setItem(key, value);\n this.logger?.debug(`LocalStorage.setItem(\"${key}\"): success`);\n } else {\n this.logger?.warn('LocalStorage not available: window.localStorage is undefined');\n }\n } catch (error) {\n this.logger?.error('LocalStorage.setItem failed:', error);\n }\n }\n\n removeItem(key: string): void {\n try {\n if (typeof window !== 'undefined' && window.localStorage) {\n localStorage.removeItem(key);\n this.logger?.debug(`LocalStorage.removeItem(\"${key}\"): success`);\n } else {\n this.logger?.warn('LocalStorage not available: window.localStorage is undefined');\n }\n } catch (error) {\n this.logger?.error('LocalStorage.removeItem failed:', error);\n }\n }\n}\n\n/**\n * Cookie-based storage adapter for SSR and browser environments.\n * Useful for Next.js, Nuxt.js, and other SSR frameworks.\n */\nexport class CookieStorageAdapter implements StorageAdapter {\n private logger?: APILogger;\n\n constructor(logger?: APILogger) {\n this.logger = logger;\n }\n\n getItem(key: string): string | null {\n try {\n if (typeof document === 'undefined') {\n this.logger?.warn('Cookies not available: document is undefined (SSR context?)');\n return null;\n }\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${key}=`);\n if (parts.length === 2) {\n const result = parts.pop()?.split(';').shift() || null;\n this.logger?.debug(`CookieStorage.getItem(\"${key}\"): ${result ? 'found' : 'not found'}`);\n return result;\n }\n this.logger?.debug(`CookieStorage.getItem(\"${key}\"): not found`);\n } catch (error) {\n this.logger?.error('CookieStorage.getItem failed:', error);\n }\n return null;\n }\n\n setItem(key: string, value: string): void {\n try {\n if (typeof document !== 'undefined') {\n document.cookie = `${key}=${value}; path=/; max-age=31536000`;\n this.logger?.debug(`CookieStorage.setItem(\"${key}\"): success`);\n } else {\n this.logger?.warn('Cookies not available: document is undefined (SSR context?)');\n }\n } catch (error) {\n this.logger?.error('CookieStorage.setItem failed:', error);\n }\n }\n\n removeItem(key: string): void {\n try {\n if (typeof document !== 'undefined') {\n document.cookie = `${key}=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT`;\n this.logger?.debug(`CookieStorage.removeItem(\"${key}\"): success`);\n } else {\n this.logger?.warn('Cookies not available: document is undefined (SSR context?)');\n }\n } catch (error) {\n this.logger?.error('CookieStorage.removeItem failed:', error);\n }\n }\n}\n\n/**\n * In-memory storage adapter for Node.js, Electron, and testing environments.\n * Data is stored in RAM and cleared when process exits.\n */\nexport class MemoryStorageAdapter implements StorageAdapter {\n private storage: Map<string, string> = new Map();\n private logger?: APILogger;\n\n constructor(logger?: APILogger) {\n this.logger = logger;\n }\n\n getItem(key: string): string | null {\n const value = this.storage.get(key) || null;\n this.logger?.debug(`MemoryStorage.getItem(\"${key}\"): ${value ? 'found' : 'not found'}`);\n return value;\n }\n\n setItem(key: string, value: string): void {\n this.storage.set(key, value);\n this.logger?.debug(`MemoryStorage.setItem(\"${key}\"): success`);\n }\n\n removeItem(key: string): void {\n this.storage.delete(key);\n this.logger?.debug(`MemoryStorage.removeItem(\"${key}\"): success`);\n }\n}","// @ts-nocheck\n// Auto-generated by DjangoCFG - see CLAUDE.md\n/**\n * * `ERROR` - Error\n * * `WARNING` - Warning\n * * `INFO` - Info\n * * `PAGE_VIEW` - Page View\n * * `PERFORMANCE` - Performance\n * * `NETWORK_ERROR` - Network Error\n * * `JS_ERROR` - JS Error\n * * `CONSOLE` - Console\n */\nexport enum FrontendEventIngestRequestEventType {\n ERROR = \"ERROR\",\n WARNING = \"WARNING\",\n INFO = \"INFO\",\n PAGE_VIEW = \"PAGE_VIEW\",\n PERFORMANCE = \"PERFORMANCE\",\n NETWORK_ERROR = \"NETWORK_ERROR\",\n JS_ERROR = \"JS_ERROR\",\n CONSOLE = \"CONSOLE\",\n}\n\n/**\n * * `error` - Error\n * * `warn` - Warning\n * * `info` - Info\n * * `debug` - Debug\n */\nexport enum FrontendEventIngestRequestLevel {\n ERROR = \"error\",\n WARN = \"warn\",\n INFO = \"info\",\n DEBUG = \"debug\",\n}\n\n","/**\n * Zod schema for FrontendEventIngestRequest\n *\n * This schema provides runtime validation and type inference.\n * * Validates a single event from the browser.\n * */\nimport { z } from 'zod'\nimport * as Enums from '../../enums'\n\n/**\n * Validates a single event from the browser.\n */\nexport const FrontendEventIngestRequestSchema = z.object({\n event_type: z.nativeEnum(Enums.FrontendEventIngestRequestEventType),\n message: z.string().min(1).max(5000),\n level: z.nativeEnum(Enums.FrontendEventIngestRequestLevel).optional(),\n stack_trace: z.string().max(20000).optional(),\n url: z.string().max(2000).optional(),\n fingerprint: z.string().max(64).optional(),\n http_status: z.number().int().nullable().optional(),\n http_method: z.string().max(10).optional(),\n http_url: z.string().max(2000).optional(),\n user_agent: z.string().max(500).optional(),\n session_id: z.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i).nullable().optional(),\n browser_fingerprint: z.string().max(64).optional(),\n extra: z.record(z.string(), z.any()).optional(),\n project_name: z.string().max(100).optional(),\n environment: z.string().max(20).optional(),\n})\n\n/**\n * Infer TypeScript type from Zod schema\n */\nexport type FrontendEventIngestRequest = z.infer<typeof FrontendEventIngestRequestSchema>","/**\n * Zod schema for IngestBatchRequest\n *\n * This schema provides runtime validation and type inference.\n * * Wraps a list of events. Enforces max batch size.\n * */\nimport { z } from 'zod'\nimport { FrontendEventIngestRequestSchema } from './FrontendEventIngestRequest.schema'\n\n/**\n * Wraps a list of events. Enforces max batch size.\n */\nexport const IngestBatchRequestSchema = z.object({\n events: z.array(FrontendEventIngestRequestSchema),\n})\n\n/**\n * Infer TypeScript type from Zod schema\n */\nexport type IngestBatchRequest = z.infer<typeof IngestBatchRequestSchema>","// @ts-nocheck\n// Auto-generated by DjangoCFG - see CLAUDE.md\n/**\n * Django CFG API - API Client with JWT Management\n *\n * Usage:\n * ```typescript\n * import { API } from './api';\n *\n * const api = new API('https://api.example.com');\n *\n * // Set JWT token\n * api.setToken('your-jwt-token', 'refresh-token');\n *\n * // Use API\n * const posts = await api.posts.list();\n * const user = await api.users.retrieve(1);\n *\n * // Check authentication\n * if (api.isAuthenticated()) {\n * // ...\n * }\n *\n * // Custom storage with logging (for Electron/Node.js)\n * import { MemoryStorageAdapter, APILogger } from './storage';\n * const logger = new APILogger({ enabled: true, logLevel: 'debug' });\n * const api = new API('https://api.example.com', {\n * storage: new MemoryStorageAdapter(logger),\n * loggerConfig: { enabled: true, logLevel: 'debug' }\n * });\n *\n * // Get OpenAPI schema\n * const schema = api.getSchema();\n * ```\n */\n\nimport { APIClient } from \"./client\";\nimport {\n StorageAdapter,\n LocalStorageAdapter,\n CookieStorageAdapter,\n MemoryStorageAdapter\n} from \"./storage\";\nimport type { RetryConfig } from \"./retry\";\nimport type { LoggerConfig } from \"./logger\";\nimport { APILogger } from \"./logger\";\nimport { Monitor } from \"./monitor/client\";\nexport * as MonitorTypes from \"./monitor/models\";\n// Note: Direct exports (export * from) are removed to avoid duplicate type conflicts\n// Use namespace exports like CfgAccountsTypes.User or import from specific modules\nexport * as Enums from \"./enums\";\n\n// Re-export Zod schemas for runtime validation\nexport * as Schemas from \"./_utils/schemas\";\n// Also export all schemas directly for convenience\nexport * from \"./_utils/schemas\";\n\n// Re-export Zod validation events for browser integration\nexport type { ValidationErrorDetail, ValidationErrorEvent } from \"./validation-events\";\nexport { dispatchValidationError, onValidationError, formatZodError } from \"./validation-events\";\n\n// Re-export typed fetchers for universal usage\nexport * as Fetchers from \"./_utils/fetchers\";\nexport * from \"./_utils/fetchers\";\n\n// Re-export API instance configuration functions\nexport {\n configureAPI,\n getAPIInstance,\n reconfigureAPI,\n clearAPITokens,\n resetAPI,\n isAPIConfigured\n} from \"./api-instance\";\n// NOTE: SWR hooks are generated in ./_utils/hooks/ but NOT exported here to keep\n// the main bundle server-safe. Import hooks directly from the hooks directory:\n// import { useUsers } from './_utils/hooks';\n// Or use a separate entry point like '@djangocfg/api/hooks' for client components.\n\n// Re-export core client\nexport { APIClient };\n\n// Re-export storage adapters for convenience\nexport type { StorageAdapter };\nexport { LocalStorageAdapter, CookieStorageAdapter, MemoryStorageAdapter };\n\n// Re-export error classes for convenience\nexport { APIError, NetworkError } from \"./errors\";\n\n// Re-export HTTP adapters for custom implementations\nexport type { HttpClientAdapter, HttpRequest, HttpResponse } from \"./http\";\nexport { FetchAdapter, KeepAliveFetchAdapter } from \"./http\";\n\n// Re-export logger types and classes\nexport type { LoggerConfig, RequestLog, ResponseLog, ErrorLog } from \"./logger\";\nexport { APILogger } from \"./logger\";\n\n// Re-export retry configuration and utilities\nexport type { RetryConfig, FailedAttemptInfo } from \"./retry\";\nexport { withRetry, shouldRetry, DEFAULT_RETRY_CONFIG } from \"./retry\";\n\nexport const TOKEN_KEY = \"auth_token\";\nexport const REFRESH_TOKEN_KEY = \"refresh_token\";\n\n/** Auto-detect locale from cookie NEXT_LOCALE or navigator.language */\nfunction detectLocale(): string | null {\n try {\n if (typeof document !== 'undefined') {\n const match = document.cookie.match(/(?:^|;\\s*)NEXT_LOCALE=([^;]*)/);\n if (match) return match[1];\n }\n if (typeof navigator !== 'undefined' && navigator.language) {\n return navigator.language;\n }\n } catch {}\n return null;\n}\n\nexport interface APIOptions {\n /** Custom storage adapter (defaults to LocalStorageAdapter) */\n storage?: StorageAdapter;\n /** Custom HTTP client adapter (defaults to FetchAdapter) */\n httpClient?: HttpClientAdapter;\n /** Retry configuration for failed requests */\n retryConfig?: RetryConfig;\n /** Logger configuration */\n loggerConfig?: Partial<LoggerConfig>;\n /** Locale for Accept-Language header (e.g. 'en', 'ko', 'ru') */\n locale?: string;\n}\n\nexport class API {\n private baseUrl: string;\n private _client: APIClient;\n private _token: string | null = null;\n private _refreshToken: string | null = null;\n private _locale: string | null = null;\n private storage: StorageAdapter;\n private options?: APIOptions;\n\n // Sub-clients\n public monitor!: Monitor;\n\n constructor(baseUrl: string, options?: APIOptions) {\n this.baseUrl = baseUrl;\n this.options = options;\n\n // Create logger if config provided\n const logger = options?.loggerConfig ? new APILogger(options.loggerConfig) : undefined;\n\n // Initialize storage with logger\n this.storage = options?.storage || new LocalStorageAdapter(logger);\n\n this._locale = options?.locale || null;\n\n this._loadTokensFromStorage();\n\n // Initialize APIClient with token getter for URL authentication\n this._client = new APIClient(this.baseUrl, {\n httpClient: this.options?.httpClient,\n retryConfig: this.options?.retryConfig,\n loggerConfig: this.options?.loggerConfig,\n tokenGetter: () => this.getToken(),\n });\n\n // Always inject auth header wrapper (reads token dynamically from storage)\n this._injectAuthHeader();\n\n // Initialize sub-clients from APIClient\n this.monitor = this._client.monitor;\n }\n\n private _loadTokensFromStorage(): void {\n this._token = this.storage.getItem(TOKEN_KEY);\n this._refreshToken = this.storage.getItem(REFRESH_TOKEN_KEY);\n }\n\n private _reinitClients(): void {\n this._client = new APIClient(this.baseUrl, {\n httpClient: this.options?.httpClient,\n retryConfig: this.options?.retryConfig,\n loggerConfig: this.options?.loggerConfig,\n tokenGetter: () => this.getToken(),\n });\n\n // Always inject auth header wrapper (reads token dynamically from storage)\n this._injectAuthHeader();\n\n // Reinitialize sub-clients\n this.monitor = this._client.monitor;\n }\n\n private _injectAuthHeader(): void {\n // Override request method to inject auth header\n const originalRequest = this._client.request.bind(this._client);\n this._client.request = async <T>(\n method: string,\n path: string,\n options?: { params?: Record<string, any>; body?: any; formData?: FormData; headers?: Record<string, string> }\n ): Promise<T> => {\n // Read token from storage dynamically (supports JWT injection after instantiation)\n const token = this.getToken();\n const locale = this._locale || detectLocale();\n const mergedOptions = {\n ...options,\n headers: {\n ...(options?.headers || {}),\n ...(token ? { 'Authorization': `Bearer ${token}` } : {}),\n ...(locale ? { 'Accept-Language': locale } : {}),\n },\n };\n\n return originalRequest(method, path, mergedOptions);\n };\n }\n\n /**\n * Get current JWT token\n */\n getToken(): string | null {\n return this.storage.getItem(TOKEN_KEY);\n }\n\n /**\n * Get current refresh token\n */\n getRefreshToken(): string | null {\n return this.storage.getItem(REFRESH_TOKEN_KEY);\n }\n\n /**\n * Set JWT token and refresh token\n * @param token - JWT access token\n * @param refreshToken - JWT refresh token (optional)\n */\n setToken(token: string, refreshToken?: string): void {\n this._token = token;\n this.storage.setItem(TOKEN_KEY, token);\n\n if (refreshToken) {\n this._refreshToken = refreshToken;\n this.storage.setItem(REFRESH_TOKEN_KEY, refreshToken);\n }\n\n // Reinitialize clients with new token\n this._reinitClients();\n }\n\n /**\n * Clear all tokens\n */\n clearTokens(): void {\n this._token = null;\n this._refreshToken = null;\n this.storage.removeItem(TOKEN_KEY);\n this.storage.removeItem(REFRESH_TOKEN_KEY);\n\n // Reinitialize clients without token\n this._reinitClients();\n }\n\n /**\n * Check if user is authenticated\n */\n isAuthenticated(): boolean {\n return !!this.getToken();\n }\n\n /**\n * Update base URL and reinitialize clients\n * @param url - New base URL\n */\n setBaseUrl(url: string): void {\n this.baseUrl = url;\n this._reinitClients();\n }\n\n /**\n * Get current base URL\n */\n getBaseUrl(): string {\n return this.baseUrl;\n }\n\n /**\n * Set locale for Accept-Language header\n * @param locale - Locale string (e.g. 'en', 'ko', 'ru') or null to clear\n */\n setLocale(locale: string | null): void {\n this._locale = locale;\n }\n\n /**\n * Get current locale\n */\n getLocale(): string | null {\n return this._locale;\n }\n\n /**\n * Get OpenAPI schema path\n * @returns Path to the OpenAPI schema JSON file\n *\n * Note: The OpenAPI schema is available in the schema.json file.\n * You can load it dynamically using:\n * ```typescript\n * const schema = await fetch('./schema.json').then(r => r.json());\n * // or using fs in Node.js:\n * // const schema = JSON.parse(fs.readFileSync('./schema.json', 'utf-8'));\n * ```\n */\n getSchemaPath(): string {\n return './schema.json';\n }\n}\n\nexport default API;","/**\n * BaseClient for @djangocfg/monitor\n *\n * Singleton monitorApi instance for the frontend monitor ingest endpoint.\n * Uses MemoryStorageAdapter — ingest is public (no auth tokens needed).\n */\n\nimport { API, MemoryStorageAdapter } from './generated/cfg_monitor'\n\nexport const monitorApi = new API('', { storage: new MemoryStorageAdapter() })\n\nexport function configureMonitorApi(baseUrl: string): void {\n monitorApi.setBaseUrl(baseUrl)\n}\n\nexport class BaseClient {\n protected static monitorApi = monitorApi\n}\n","import { monitorApi } from '../../_api'\nimport { API, MemoryStorageAdapter, KeepAliveFetchAdapter } from '../../_api/generated/cfg_monitor'\nimport type { IngestBatchRequest } from '../../_api'\n\n/** Separate API instance with KeepAliveFetchAdapter — survives page unload */\nconst monitorApiBeacon = new API('', {\n storage: new MemoryStorageAdapter(),\n httpClient: new KeepAliveFetchAdapter(),\n})\n\nexport function syncBeaconBaseUrl(): void {\n monitorApiBeacon.setBaseUrl(monitorApi.getBaseUrl())\n}\n\nexport async function sendBatch(\n batch: IngestBatchRequest,\n useBeacon = false,\n): Promise<void> {\n if (batch.events.length === 0) return\n\n try {\n if (useBeacon) {\n syncBeaconBaseUrl()\n await monitorApiBeacon.monitor.ingestCreate(batch)\n } else {\n await monitorApi.monitor.ingestCreate(batch)\n }\n } catch {\n // Transport errors silently ignored — monitoring must never crash the app\n }\n}\n","import { computeFingerprint } from './fingerprint'\nimport { getSessionId } from './session'\nimport { monitorStore } from '../store'\nimport { EventType, EventLevel } from '../../_api'\n\nexport function installJsErrorCapture(): () => void {\n if (typeof window === 'undefined') return () => {}\n\n const onError = async (\n message: string | Event,\n source?: string,\n lineno?: number,\n colno?: number,\n error?: Error,\n ) => {\n try {\n const msg = typeof message === 'string' ? message : String(message)\n const stack = error?.stack ?? `at ${source}:${lineno}:${colno}`\n const url = window.location.href\n const fingerprint = await computeFingerprint(msg, stack, url)\n const { config } = monitorStore.getState()\n monitorStore.getState().push({\n event_type: EventType.JS_ERROR,\n level: EventLevel.ERROR,\n message: msg,\n stack_trace: stack,\n url,\n fingerprint,\n session_id: getSessionId(),\n user_agent: navigator.userAgent,\n project_name: config.project,\n environment: config.environment,\n })\n } catch { /* never crash */ }\n }\n\n const onUnhandledRejection = async (e: PromiseRejectionEvent) => {\n try {\n const reason = e.reason\n const msg = reason instanceof Error ? reason.message\n : typeof reason === 'string' ? reason\n : 'Unhandled promise rejection'\n const stack = reason instanceof Error ? (reason.stack ?? '') : ''\n const url = window.location.href\n const fingerprint = await computeFingerprint(msg, stack, url)\n const { config } = monitorStore.getState()\n monitorStore.getState().push({\n event_type: EventType.JS_ERROR,\n level: EventLevel.ERROR,\n message: msg,\n stack_trace: stack,\n url,\n fingerprint,\n session_id: getSessionId(),\n user_agent: navigator.userAgent,\n project_name: config.project,\n environment: config.environment,\n })\n } catch { /* never crash */ }\n }\n\n const errHandler = (e: ErrorEvent) => onError(e.message, e.filename, e.lineno, e.colno, e.error)\n window.addEventListener('error', errHandler)\n window.addEventListener('unhandledrejection', onUnhandledRejection)\n\n return () => {\n window.removeEventListener('error', errHandler)\n window.removeEventListener('unhandledrejection', onUnhandledRejection)\n }\n}\n","import { computeFingerprint } from './fingerprint'\nimport { getSessionId } from './session'\nimport { monitorStore } from '../store'\nimport { EventType, EventLevel } from '../../_api'\nimport type { FrontendEventIngestRequestEventType, FrontendEventIngestRequestLevel } from '../../_api/generated/cfg_monitor/enums'\n\ntype ConsoleLevel = 'warn' | 'error'\n\nconst levelMap: Record<ConsoleLevel, FrontendEventIngestRequestLevel> = {\n warn: EventLevel.WARN,\n error: EventLevel.ERROR,\n}\nconst typeMap: Record<ConsoleLevel, FrontendEventIngestRequestEventType> = {\n warn: EventType.WARNING,\n error: EventType.ERROR,\n}\n\nfunction stringify(args: unknown[]): string {\n return args.map((a) => {\n if (typeof a === 'string') return a\n if (a instanceof Error) return a.message\n try { return JSON.stringify(a) } catch { return String(a) }\n }).join(' ')\n}\n\nasync function captureConsoleEvent(level: ConsoleLevel, args: unknown[]) {\n try {\n const message = stringify(args)\n const url = typeof window !== 'undefined' ? window.location.href : ''\n const fingerprint = await computeFingerprint(message, '', url)\n const { config } = monitorStore.getState()\n monitorStore.getState().push({\n event_type: typeMap[level],\n level: levelMap[level],\n message,\n url,\n fingerprint,\n session_id: getSessionId(),\n user_agent: typeof navigator !== 'undefined' ? navigator.userAgent : '',\n project_name: config.project,\n environment: config.environment,\n })\n } catch { /* never crash */ }\n}\n\nexport function installConsoleCapture(): () => void {\n if (typeof window === 'undefined') return () => {}\n\n try {\n const g = globalThis as Record<string, unknown>\n if (g.consola && typeof (g.consola as { addReporter?: unknown }).addReporter === 'function') {\n const consolaInst = g.consola as {\n addReporter: (r: unknown) => void\n removeReporter: (r: unknown) => void\n }\n const reporter = {\n log(logObj: { level: number; args: unknown[] }) {\n if (logObj.level === 1) captureConsoleEvent('error', logObj.args)\n else if (logObj.level === 2) captureConsoleEvent('warn', logObj.args)\n },\n }\n consolaInst.addReporter(reporter)\n return () => consolaInst.removeReporter(reporter)\n }\n } catch { /* consola not available */ }\n\n const origWarn = console.warn.bind(console)\n const origError = console.error.bind(console)\n console.warn = (...args: unknown[]) => { origWarn(...args); captureConsoleEvent('warn', args) }\n console.error = (...args: unknown[]) => { origError(...args); captureConsoleEvent('error', args) }\n return () => { console.warn = origWarn; console.error = origError }\n}\n","import { getSessionId } from './session'\nimport { monitorStore } from '../store'\nimport { EventType, EventLevel } from '../../_api'\n\ninterface ValidationErrorDetail {\n operation: string\n path: string\n method: string\n error: { message: string }\n}\n\nexport function installValidationCapture(): () => void {\n if (typeof window === 'undefined') return () => {}\n\n const handler = (event: Event) => {\n if (!(event instanceof CustomEvent)) return\n try {\n const detail = event.detail as ValidationErrorDetail\n const { config } = monitorStore.getState()\n monitorStore.getState().push({\n event_type: EventType.WARNING,\n level: EventLevel.WARN,\n message: `Zod validation error in ${detail.operation}: ${detail.error?.message ?? 'unknown'}`,\n url: window.location.href,\n http_method: detail.method,\n http_url: detail.path,\n session_id: getSessionId(),\n user_agent: navigator.userAgent,\n project_name: config.project,\n environment: config.environment,\n extra: { operation: detail.operation, path: detail.path, method: detail.method },\n })\n } catch { /* never crash */ }\n }\n\n window.addEventListener('zod-validation-error', handler)\n return () => window.removeEventListener('zod-validation-error', handler)\n}\n","import { getSessionId } from './session'\nimport { monitorStore } from '../store'\nimport { EventType, EventLevel } from '../../_api'\n\nexport async function monitoredFetch(\n input: RequestInfo | URL,\n init?: RequestInit,\n): Promise<Response> {\n const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url\n const method = (init?.method ?? 'GET').toUpperCase()\n\n try {\n const response = await fetch(input, init)\n if (!response.ok) {\n const { config } = monitorStore.getState()\n monitorStore.getState().push({\n event_type: EventType.NETWORK_ERROR,\n level: response.status >= 500 ? EventLevel.ERROR : EventLevel.WARN,\n message: `HTTP ${response.status} ${response.statusText} — ${method} ${url}`,\n url: typeof window !== 'undefined' ? window.location.href : '',\n http_status: response.status,\n http_method: method,\n http_url: url,\n session_id: getSessionId(),\n user_agent: typeof navigator !== 'undefined' ? navigator.userAgent : '',\n project_name: config.project,\n environment: config.environment,\n })\n }\n return response\n } catch (err) {\n const { config } = monitorStore.getState()\n monitorStore.getState().push({\n event_type: EventType.NETWORK_ERROR,\n level: EventLevel.ERROR,\n message: err instanceof Error ? err.message : `Network error — ${method} ${url}`,\n url: typeof window !== 'undefined' ? window.location.href : '',\n http_method: method,\n http_url: url,\n session_id: getSessionId(),\n user_agent: typeof navigator !== 'undefined' ? navigator.userAgent : '',\n project_name: config.project,\n environment: config.environment,\n })\n throw err\n }\n}\n","'use client'\n\n/**\n * MonitorProvider\n *\n * Initialises FrontendMonitor on mount and tears it down on unmount.\n * Drop it once into your root layout — no other setup needed.\n *\n * @example\n * // app/layout.tsx\n * import { MonitorProvider } from '@djangocfg/monitor/client'\n *\n * export default function RootLayout({ children }) {\n * return (\n * <html>\n * <body>\n * <MonitorProvider project=\"my-app\" environment={process.env.NODE_ENV} />\n * {children}\n * </body>\n * </html>\n * )\n * }\n */\n\nimport { useEffect } from 'react'\nimport { FrontendMonitor } from './index'\nimport type { MonitorConfig } from '../types'\n\nexport interface MonitorProviderProps extends MonitorConfig {\n /** Optional: render children inside the provider (or use as a standalone leaf) */\n children?: React.ReactNode\n}\n\nexport function MonitorProvider({ children, ...config }: MonitorProviderProps) {\n useEffect(() => {\n FrontendMonitor.init(config)\n return () => FrontendMonitor.destroy()\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return children ?? null\n}\n","/**\n * @djangocfg/monitor/client\n *\n * Browser-side monitor. Use in 'use client' components only.\n *\n * @example\n * ```tsx\n * 'use client'\n * import { useEffect } from 'react'\n * import { FrontendMonitor } from '@djangocfg/monitor/client'\n *\n * export function MonitorProvider() {\n * useEffect(() => {\n * FrontendMonitor.init({ project: 'my-app', environment: process.env.NODE_ENV })\n * return () => FrontendMonitor.destroy()\n * }, [])\n * return null\n * }\n * ```\n */\n\nimport { installJsErrorCapture } from './capture/js-errors'\nimport { installConsoleCapture } from './capture/console'\nimport { installValidationCapture } from './capture/validation'\nimport { ensureSessionCookie } from './capture/session'\nimport { monitorStore } from './store'\nimport { configureMonitorApi } from '../_api'\nimport type { MonitorConfig, MonitorEvent } from '../types'\n\nexport type { MonitorConfig, MonitorEvent, EventType, EventLevel } from '../types'\nexport { monitoredFetch } from './capture/network'\nexport { getSessionId } from './capture/session'\nexport { MonitorProvider } from './MonitorProvider'\nexport type { MonitorProviderProps } from './MonitorProvider'\n\nlet flushInterval: ReturnType<typeof setInterval> | null = null\nconst cleanupFns: Array<() => void> = []\n\nexport const FrontendMonitor = {\n init(config: MonitorConfig = {}): void {\n if (typeof window === 'undefined') return\n\n if (config.baseUrl) configureMonitorApi(config.baseUrl)\n monitorStore.getState().setConfig(config)\n ensureSessionCookie()\n\n if (config.captureJsErrors !== false) cleanupFns.push(installJsErrorCapture())\n if (config.captureConsole !== false) cleanupFns.push(installConsoleCapture())\n cleanupFns.push(installValidationCapture())\n\n const interval = config.flushInterval ?? 5000\n flushInterval = setInterval(() => monitorStore.getState().flush(), interval)\n\n const onHide = () => { if (document.visibilityState === 'hidden') monitorStore.getState().flush(true) }\n window.addEventListener('visibilitychange', onHide)\n window.addEventListener('beforeunload', () => monitorStore.getState().flush(true))\n\n if (config.debug) console.info('[FrontendMonitor] initialized', config)\n },\n\n capture(event: MonitorEvent): void {\n monitorStore.getState().push(event)\n },\n\n flush(): void {\n monitorStore.getState().flush()\n },\n\n destroy(): void {\n if (flushInterval !== null) { clearInterval(flushInterval); flushInterval = null }\n cleanupFns.forEach((fn) => fn())\n cleanupFns.length = 0\n },\n}\n"],"mappings":"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","names":["FrontendEventIngestRequestEventType","FrontendEventIngestRequestLevel","z","z"]}
1
+ {"version":3,"sources":["../../../node_modules/.pnpm/retry@0.13.1/node_modules/retry/lib/retry_operation.js","../../../node_modules/.pnpm/retry@0.13.1/node_modules/retry/lib/retry.js","../../../node_modules/.pnpm/retry@0.13.1/node_modules/retry/index.js","../src/client/capture/fingerprint.ts","../src/client/capture/session.ts","../src/client/store/index.ts","../src/_api/generated/cfg_monitor/monitor/client.ts","../src/_api/generated/cfg_monitor/http.ts","../src/_api/generated/cfg_monitor/errors.ts","../src/_api/generated/cfg_monitor/logger.ts","../../../node_modules/.pnpm/p-retry@6.2.1/node_modules/p-retry/index.js","../../../node_modules/.pnpm/is-network-error@1.3.0/node_modules/is-network-error/index.js","../src/_api/generated/cfg_monitor/retry.ts","../src/_api/generated/cfg_monitor/client.ts","../src/_api/generated/cfg_monitor/storage.ts","../src/_api/generated/cfg_monitor/enums.ts","../src/_api/generated/cfg_monitor/_utils/schemas/FrontendEventIngestRequest.schema.ts","../src/_api/generated/cfg_monitor/_utils/schemas/IngestBatchRequest.schema.ts","../src/_api/generated/cfg_monitor/index.ts","../src/_api/BaseClient.ts","../src/client/transport/ingest.ts","../src/client/capture/js-errors.ts","../src/client/capture/console.ts","../src/client/capture/validation.ts","../src/client/capture/network.ts","../src/client/MonitorProvider.tsx","../src/client/window.ts","../src/client/index.ts"],"sourcesContent":["function RetryOperation(timeouts, options) {\n // Compatibility for the old (timeouts, retryForever) signature\n if (typeof options === 'boolean') {\n options = { forever: options };\n }\n\n this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));\n this._timeouts = timeouts;\n this._options = options || {};\n this._maxRetryTime = options && options.maxRetryTime || Infinity;\n this._fn = null;\n this._errors = [];\n this._attempts = 1;\n this._operationTimeout = null;\n this._operationTimeoutCb = null;\n this._timeout = null;\n this._operationStart = null;\n this._timer = null;\n\n if (this._options.forever) {\n this._cachedTimeouts = this._timeouts.slice(0);\n }\n}\nmodule.exports = RetryOperation;\n\nRetryOperation.prototype.reset = function() {\n this._attempts = 1;\n this._timeouts = this._originalTimeouts.slice(0);\n}\n\nRetryOperation.prototype.stop = function() {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n if (this._timer) {\n clearTimeout(this._timer);\n }\n\n this._timeouts = [];\n this._cachedTimeouts = null;\n};\n\nRetryOperation.prototype.retry = function(err) {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n\n if (!err) {\n return false;\n }\n var currentTime = new Date().getTime();\n if (err && currentTime - this._operationStart >= this._maxRetryTime) {\n this._errors.push(err);\n this._errors.unshift(new Error('RetryOperation timeout occurred'));\n return false;\n }\n\n this._errors.push(err);\n\n var timeout = this._timeouts.shift();\n if (timeout === undefined) {\n if (this._cachedTimeouts) {\n // retry forever, only keep last error\n this._errors.splice(0, this._errors.length - 1);\n timeout = this._cachedTimeouts.slice(-1);\n } else {\n return false;\n }\n }\n\n var self = this;\n this._timer = setTimeout(function() {\n self._attempts++;\n\n if (self._operationTimeoutCb) {\n self._timeout = setTimeout(function() {\n self._operationTimeoutCb(self._attempts);\n }, self._operationTimeout);\n\n if (self._options.unref) {\n self._timeout.unref();\n }\n }\n\n self._fn(self._attempts);\n }, timeout);\n\n if (this._options.unref) {\n this._timer.unref();\n }\n\n return true;\n};\n\nRetryOperation.prototype.attempt = function(fn, timeoutOps) {\n this._fn = fn;\n\n if (timeoutOps) {\n if (timeoutOps.timeout) {\n this._operationTimeout = timeoutOps.timeout;\n }\n if (timeoutOps.cb) {\n this._operationTimeoutCb = timeoutOps.cb;\n }\n }\n\n var self = this;\n if (this._operationTimeoutCb) {\n this._timeout = setTimeout(function() {\n self._operationTimeoutCb();\n }, self._operationTimeout);\n }\n\n this._operationStart = new Date().getTime();\n\n this._fn(this._attempts);\n};\n\nRetryOperation.prototype.try = function(fn) {\n console.log('Using RetryOperation.try() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = function(fn) {\n console.log('Using RetryOperation.start() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = RetryOperation.prototype.try;\n\nRetryOperation.prototype.errors = function() {\n return this._errors;\n};\n\nRetryOperation.prototype.attempts = function() {\n return this._attempts;\n};\n\nRetryOperation.prototype.mainError = function() {\n if (this._errors.length === 0) {\n return null;\n }\n\n var counts = {};\n var mainError = null;\n var mainErrorCount = 0;\n\n for (var i = 0; i < this._errors.length; i++) {\n var error = this._errors[i];\n var message = error.message;\n var count = (counts[message] || 0) + 1;\n\n counts[message] = count;\n\n if (count >= mainErrorCount) {\n mainError = error;\n mainErrorCount = count;\n }\n }\n\n return mainError;\n};\n","var RetryOperation = require('./retry_operation');\n\nexports.operation = function(options) {\n var timeouts = exports.timeouts(options);\n return new RetryOperation(timeouts, {\n forever: options && (options.forever || options.retries === Infinity),\n unref: options && options.unref,\n maxRetryTime: options && options.maxRetryTime\n });\n};\n\nexports.timeouts = function(options) {\n if (options instanceof Array) {\n return [].concat(options);\n }\n\n var opts = {\n retries: 10,\n factor: 2,\n minTimeout: 1 * 1000,\n maxTimeout: Infinity,\n randomize: false\n };\n for (var key in options) {\n opts[key] = options[key];\n }\n\n if (opts.minTimeout > opts.maxTimeout) {\n throw new Error('minTimeout is greater than maxTimeout');\n }\n\n var timeouts = [];\n for (var i = 0; i < opts.retries; i++) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n if (options && options.forever && !timeouts.length) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n // sort the array numerically ascending\n timeouts.sort(function(a,b) {\n return a - b;\n });\n\n return timeouts;\n};\n\nexports.createTimeout = function(attempt, opts) {\n var random = (opts.randomize)\n ? (Math.random() + 1)\n : 1;\n\n var timeout = Math.round(random * Math.max(opts.minTimeout, 1) * Math.pow(opts.factor, attempt));\n timeout = Math.min(timeout, opts.maxTimeout);\n\n return timeout;\n};\n\nexports.wrap = function(obj, options, methods) {\n if (options instanceof Array) {\n methods = options;\n options = null;\n }\n\n if (!methods) {\n methods = [];\n for (var key in obj) {\n if (typeof obj[key] === 'function') {\n methods.push(key);\n }\n }\n }\n\n for (var i = 0; i < methods.length; i++) {\n var method = methods[i];\n var original = obj[method];\n\n obj[method] = function retryWrapper(original) {\n var op = exports.operation(options);\n var args = Array.prototype.slice.call(arguments, 1);\n var callback = args.pop();\n\n args.push(function(err) {\n if (op.retry(err)) {\n return;\n }\n if (err) {\n arguments[0] = op.mainError();\n }\n callback.apply(this, arguments);\n });\n\n op.attempt(function() {\n original.apply(obj, args);\n });\n }.bind(obj, original);\n obj[method].options = options;\n }\n};\n","module.exports = require('./lib/retry');","function simpleHash(str: string): string {\n let hash = 0\n for (let i = 0; i < str.length; i++) {\n hash = (hash << 5) - hash + str.charCodeAt(i)\n hash = hash & hash\n }\n return Math.abs(hash).toString(16).padStart(8, '0')\n}\n\nexport async function computeFingerprint(\n message: string,\n stack: string,\n url: string,\n): Promise<string> {\n const raw = `${message}|${stack}|${url}`\n if (typeof crypto !== 'undefined' && crypto.subtle) {\n try {\n const data = new TextEncoder().encode(raw)\n const buf = await crypto.subtle.digest('SHA-256', data)\n return Array.from(new Uint8Array(buf))\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')\n .slice(0, 64)\n } catch { /* fall through */ }\n }\n return simpleHash(raw)\n}\n","const SESSION_KEY = 'fm_session_id'\nconst COOKIE_MAX_AGE = 60 * 60 * 24 * 365\n\nfunction generateUUID(): string {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID()\n }\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0\n return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16)\n })\n}\n\nfunction setCookie(name: string, value: string): void {\n if (typeof document === 'undefined') return\n document.cookie = `${name}=${value}; path=/; SameSite=Lax; max-age=${COOKIE_MAX_AGE}`\n}\n\nexport function getSessionId(): string {\n if (typeof localStorage === 'undefined') return ''\n let id = localStorage.getItem(SESSION_KEY)\n if (!id) {\n id = generateUUID()\n localStorage.setItem(SESSION_KEY, id)\n setCookie(SESSION_KEY, id)\n }\n return id\n}\n\nexport function ensureSessionCookie(): void {\n const id = getSessionId()\n if (id) setCookie(SESSION_KEY, id)\n}\n","import { createStore } from 'zustand/vanilla'\nimport type { MonitorEvent, MonitorConfig } from '../../types'\nimport { sendBatch } from '../transport/ingest'\n\ninterface MonitorState {\n config: MonitorConfig\n buffer: MonitorEvent[]\n initialized: boolean\n push: (event: MonitorEvent) => void\n flush: (useBeacon?: boolean) => void\n setConfig: (config: MonitorConfig) => void\n}\n\nexport const monitorStore = createStore<MonitorState>((set, get) => ({\n config: {},\n buffer: [],\n initialized: false,\n\n push(event) {\n const { config, buffer } = get()\n const maxSize = config.maxBufferSize ?? 20\n const next = [...buffer, event]\n set({ buffer: next })\n\n if (next.length >= maxSize || event.level === 'error') {\n get().flush()\n }\n },\n\n flush(useBeacon = false) {\n const { buffer } = get()\n if (buffer.length === 0) return\n const batch = buffer.slice(0, 50)\n set({ buffer: buffer.slice(50) })\n sendBatch({ events: batch }, useBeacon)\n },\n\n setConfig(config) {\n set({ config, initialized: true })\n },\n}))\n","// @ts-nocheck\nimport * as Models from \"./models\";\n\n\n/**\n * API endpoints for Monitor.\n */\nexport class Monitor {\n private client: any;\n\n constructor(client: any) {\n this.client = client;\n }\n\n /**\n * Ingest browser events\n * \n * Accepts a batch of up to 50 frontend events. No authentication required.\n */\n async ingestCreate(data: Models.IngestBatchRequest): Promise<any> {\n const response = await this.client.request('POST', \"/cfg/monitor/ingest/\", { body: data });\n return response;\n }\n\n}","// @ts-nocheck\n// Auto-generated by DjangoCFG - see CLAUDE.md\n/**\n * HTTP Client Adapter Pattern\n *\n * Allows switching between fetch/axios/httpx without changing generated code.\n * Provides unified interface for making HTTP requests.\n */\n\nexport interface HttpRequest {\n method: string;\n url: string;\n headers?: Record<string, string>;\n body?: any;\n params?: Record<string, any>;\n /** FormData for file uploads (multipart/form-data) */\n formData?: FormData;\n /** Binary data for octet-stream uploads */\n binaryBody?: Blob | ArrayBuffer;\n}\n\nexport interface HttpResponse<T = any> {\n data: T;\n status: number;\n statusText: string;\n headers: Record<string, string>;\n}\n\n/**\n * HTTP Client Adapter Interface.\n * Implement this to use custom HTTP clients (axios, httpx, etc.)\n */\nexport interface HttpClientAdapter {\n request<T = any>(request: HttpRequest): Promise<HttpResponse<T>>;\n}\n\n/**\n * Default Fetch API adapter.\n * Uses native browser fetch() with proper error handling.\n */\nexport class FetchAdapter implements HttpClientAdapter {\n async request<T = any>(request: HttpRequest): Promise<HttpResponse<T>> {\n const { method, url, headers, body, params, formData, binaryBody } = request;\n\n // Build URL with query params\n let finalUrl = url;\n if (params) {\n const searchParams = new URLSearchParams();\n Object.entries(params).forEach(([key, value]) => {\n if (value !== null && value !== undefined) {\n searchParams.append(key, String(value));\n }\n });\n const queryString = searchParams.toString();\n if (queryString) {\n finalUrl = url.includes('?') ? `${url}&${queryString}` : `${url}?${queryString}`;\n }\n }\n\n // Build headers\n const finalHeaders: Record<string, string> = { ...headers };\n\n // Determine body and content-type\n let requestBody: string | FormData | Blob | ArrayBuffer | undefined;\n\n if (formData) {\n // For multipart/form-data, let browser set Content-Type with boundary\n requestBody = formData;\n // Don't set Content-Type - browser will set it with boundary\n } else if (binaryBody) {\n // Binary upload (application/octet-stream)\n finalHeaders['Content-Type'] = 'application/octet-stream';\n requestBody = binaryBody;\n } else if (body) {\n // JSON request\n finalHeaders['Content-Type'] = 'application/json';\n requestBody = JSON.stringify(body);\n }\n\n // Make request\n const response = await fetch(finalUrl, {\n method,\n headers: finalHeaders,\n body: requestBody,\n credentials: 'include', // Include Django session cookies\n });\n\n // Parse response\n let data: any = null;\n const contentType = response.headers.get('content-type');\n\n if (response.status !== 204 && contentType?.includes('application/json')) {\n data = await response.json();\n } else if (response.status !== 204) {\n data = await response.text();\n }\n\n // Convert Headers to plain object\n const responseHeaders: Record<string, string> = {};\n response.headers.forEach((value, key) => {\n responseHeaders[key] = value;\n });\n\n return {\n data,\n status: response.status,\n statusText: response.statusText,\n headers: responseHeaders,\n };\n }\n}\n\n/**\n * FetchAdapter with keepalive:true.\n *\n * Use this adapter when you need requests to survive page unload\n * (visibilitychange / beforeunload) — the browser will complete the request\n * even after the page is navigated away. Typical use: monitor / analytics flush.\n *\n * @example\n * ```typescript\n * import { APIClient, KeepAliveFetchAdapter } from './client';\n * const client = new APIClient(baseUrl, { httpClient: new KeepAliveFetchAdapter() });\n * ```\n */\nexport class KeepAliveFetchAdapter extends FetchAdapter {\n async request<T = any>(request: HttpRequest): Promise<HttpResponse<T>> {\n const origFetch = globalThis.fetch;\n globalThis.fetch = (input: RequestInfo | URL, init?: RequestInit) =>\n origFetch(input, { ...init, keepalive: true });\n try {\n return await super.request<T>(request);\n } finally {\n globalThis.fetch = origFetch;\n }\n }\n}","// @ts-nocheck\n// Auto-generated by DjangoCFG - see CLAUDE.md\n/**\n * API Error Classes\n *\n * Typed error classes with Django REST Framework support.\n */\n\n/**\n * HTTP API Error with DRF field-specific validation errors.\n *\n * Usage:\n * ```typescript\n * try {\n * await api.users.create(userData);\n * } catch (error) {\n * if (error instanceof APIError) {\n * if (error.isValidationError) {\n * console.log('Field errors:', error.fieldErrors);\n * // { \"email\": [\"Email already exists\"], \"username\": [\"Required\"] }\n * }\n * }\n * }\n * ```\n */\nexport class APIError extends Error {\n constructor(\n public statusCode: number,\n public statusText: string,\n public response: any,\n public url: string,\n message?: string\n ) {\n super(message || `HTTP ${statusCode}: ${statusText}`);\n this.name = 'APIError';\n }\n\n /**\n * Get error details from response.\n * DRF typically returns: { \"detail\": \"Error message\" } or { \"field\": [\"error1\", \"error2\"] }\n */\n get details(): Record<string, any> | null {\n if (typeof this.response === 'object' && this.response !== null) {\n return this.response;\n }\n return null;\n }\n\n /**\n * Get field-specific validation errors from DRF.\n * Returns: { \"field_name\": [\"error1\", \"error2\"], ... }\n */\n get fieldErrors(): Record<string, string[]> | null {\n const details = this.details;\n if (!details) return null;\n\n // DRF typically returns: { \"field\": [\"error1\", \"error2\"] }\n const fieldErrors: Record<string, string[]> = {};\n for (const [key, value] of Object.entries(details)) {\n if (Array.isArray(value)) {\n fieldErrors[key] = value;\n }\n }\n\n return Object.keys(fieldErrors).length > 0 ? fieldErrors : null;\n }\n\n /**\n * Get single error message from DRF.\n * Checks for \"detail\", \"message\", or first field error.\n */\n get errorMessage(): string {\n const details = this.details;\n if (!details) return this.message;\n\n // Check for \"detail\" field (common in DRF)\n if (details.detail) {\n return Array.isArray(details.detail) ? details.detail.join(', ') : String(details.detail);\n }\n\n // Check for \"message\" field\n if (details.message) {\n return String(details.message);\n }\n\n // Return first field error\n const fieldErrors = this.fieldErrors;\n if (fieldErrors) {\n const firstField = Object.keys(fieldErrors)[0];\n if (firstField) {\n return `${firstField}: ${fieldErrors[firstField]?.join(', ')}`;\n }\n }\n\n return this.message;\n }\n\n // Helper methods for common HTTP status codes\n get isValidationError(): boolean { return this.statusCode === 400; }\n get isAuthError(): boolean { return this.statusCode === 401; }\n get isPermissionError(): boolean { return this.statusCode === 403; }\n get isNotFoundError(): boolean { return this.statusCode === 404; }\n get isServerError(): boolean { return this.statusCode >= 500 && this.statusCode < 600; }\n}\n\n/**\n * Network Error (connection failed, timeout, etc.)\n */\nexport class NetworkError extends Error {\n constructor(\n message: string,\n public url: string,\n public originalError?: Error\n ) {\n super(message);\n this.name = 'NetworkError';\n }\n}","// @ts-nocheck\n// Auto-generated by DjangoCFG - see CLAUDE.md\n/**\n * API Logger with Consola\n * Beautiful console logging for API requests and responses\n *\n * Installation:\n * npm install consola\n */\n\nimport { type ConsolaInstance, createConsola } from 'consola';\n\n/**\n * Request log data\n */\nexport interface RequestLog {\n method: string;\n url: string;\n headers?: Record<string, string>;\n body?: any;\n timestamp: number;\n}\n\n/**\n * Response log data\n */\nexport interface ResponseLog {\n status: number;\n statusText: string;\n data?: any;\n duration: number;\n timestamp: number;\n}\n\n/**\n * Error log data\n */\nexport interface ErrorLog {\n message: string;\n statusCode?: number;\n fieldErrors?: Record<string, string[]>;\n duration: number;\n timestamp: number;\n}\n\n/**\n * Logger configuration\n */\nexport interface LoggerConfig {\n /** Enable logging */\n enabled: boolean;\n /** Log requests */\n logRequests: boolean;\n /** Log responses */\n logResponses: boolean;\n /** Log errors */\n logErrors: boolean;\n /** Log request/response bodies */\n logBodies: boolean;\n /** Log headers (excluding sensitive ones) */\n logHeaders: boolean;\n /** Custom consola instance */\n consola?: ConsolaInstance;\n}\n\n/**\n * Default logger configuration\n */\nconst DEFAULT_CONFIG: LoggerConfig = {\n enabled: process.env.NODE_ENV !== 'production',\n logRequests: true,\n logResponses: true,\n logErrors: true,\n logBodies: true,\n logHeaders: false,\n};\n\n/**\n * Sensitive header names to filter out\n */\nconst SENSITIVE_HEADERS = [\n 'authorization',\n 'cookie',\n 'set-cookie',\n 'x-api-key',\n 'x-csrf-token',\n];\n\n/**\n * API Logger class\n */\nexport class APILogger {\n private config: LoggerConfig;\n private consola: ConsolaInstance;\n\n constructor(config: Partial<LoggerConfig> = {}) {\n this.config = { ...DEFAULT_CONFIG, ...config };\n this.consola = config.consola || createConsola({\n level: this.config.enabled ? 4 : 0,\n });\n }\n\n /**\n * Enable logging\n */\n enable(): void {\n this.config.enabled = true;\n }\n\n /**\n * Disable logging\n */\n disable(): void {\n this.config.enabled = false;\n }\n\n /**\n * Update configuration\n */\n setConfig(config: Partial<LoggerConfig>): void {\n this.config = { ...this.config, ...config };\n }\n\n /**\n * Filter sensitive headers\n */\n private filterHeaders(headers?: Record<string, string>): Record<string, string> {\n if (!headers) return {};\n\n const filtered: Record<string, string> = {};\n Object.keys(headers).forEach((key) => {\n const lowerKey = key.toLowerCase();\n if (SENSITIVE_HEADERS.includes(lowerKey)) {\n filtered[key] = '***';\n } else {\n filtered[key] = headers[key] || '';\n }\n });\n\n return filtered;\n }\n\n /**\n * Log request\n */\n logRequest(request: RequestLog): void {\n if (!this.config.enabled || !this.config.logRequests) return;\n\n const { method, url, headers, body } = request;\n\n this.consola.start(`${method} ${url}`);\n\n if (this.config.logHeaders && headers) {\n this.consola.debug('Headers:', this.filterHeaders(headers));\n }\n\n if (this.config.logBodies && body) {\n this.consola.debug('Body:', body);\n }\n }\n\n /**\n * Log response\n */\n logResponse(request: RequestLog, response: ResponseLog): void {\n if (!this.config.enabled || !this.config.logResponses) return;\n\n const { method, url } = request;\n const { status, statusText, data, duration } = response;\n\n const statusColor = status >= 500 ? 'red'\n : status >= 400 ? 'yellow'\n : status >= 300 ? 'cyan'\n : 'green';\n\n this.consola.success(\n `${method} ${url} ${status} ${statusText} (${duration}ms)`\n );\n\n if (this.config.logBodies && data) {\n this.consola.debug('Response:', data);\n }\n }\n\n /**\n * Log error\n */\n logError(request: RequestLog, error: ErrorLog): void {\n if (!this.config.enabled || !this.config.logErrors) return;\n\n const { method, url } = request;\n const { message, statusCode, fieldErrors, duration } = error;\n\n this.consola.error(\n `${method} ${url} ${statusCode || 'Network'} Error (${duration}ms)`\n );\n\n this.consola.error('Message:', message);\n\n if (fieldErrors && Object.keys(fieldErrors).length > 0) {\n this.consola.error('Field Errors:');\n Object.entries(fieldErrors).forEach(([field, errors]) => {\n errors.forEach((err) => {\n this.consola.error(` • ${field}: ${err}`);\n });\n });\n }\n }\n\n /**\n * Log general info\n */\n info(message: string, ...args: any[]): void {\n if (!this.config.enabled) return;\n this.consola.info(message, ...args);\n }\n\n /**\n * Log warning\n */\n warn(message: string, ...args: any[]): void {\n if (!this.config.enabled) return;\n this.consola.warn(message, ...args);\n }\n\n /**\n * Log error\n */\n error(message: string, ...args: any[]): void {\n if (!this.config.enabled) return;\n this.consola.error(message, ...args);\n }\n\n /**\n * Log debug\n */\n debug(message: string, ...args: any[]): void {\n if (!this.config.enabled) return;\n this.consola.debug(message, ...args);\n }\n\n /**\n * Log success\n */\n success(message: string, ...args: any[]): void {\n if (!this.config.enabled) return;\n this.consola.success(message, ...args);\n }\n\n /**\n * Create a sub-logger with prefix\n */\n withTag(tag: string): ConsolaInstance {\n return this.consola.withTag(tag);\n }\n}\n\n/**\n * Default logger instance\n */\nexport const defaultLogger = new APILogger();","import retry from 'retry';\nimport isNetworkError from 'is-network-error';\n\nexport class AbortError extends Error {\n\tconstructor(message) {\n\t\tsuper();\n\n\t\tif (message instanceof Error) {\n\t\t\tthis.originalError = message;\n\t\t\t({message} = message);\n\t\t} else {\n\t\t\tthis.originalError = new Error(message);\n\t\t\tthis.originalError.stack = this.stack;\n\t\t}\n\n\t\tthis.name = 'AbortError';\n\t\tthis.message = message;\n\t}\n}\n\nconst decorateErrorWithCounts = (error, attemptNumber, options) => {\n\t// Minus 1 from attemptNumber because the first attempt does not count as a retry\n\tconst retriesLeft = options.retries - (attemptNumber - 1);\n\n\terror.attemptNumber = attemptNumber;\n\terror.retriesLeft = retriesLeft;\n\treturn error;\n};\n\nexport default async function pRetry(input, options) {\n\treturn new Promise((resolve, reject) => {\n\t\toptions = {...options};\n\t\toptions.onFailedAttempt ??= () => {};\n\t\toptions.shouldRetry ??= () => true;\n\t\toptions.retries ??= 10;\n\n\t\tconst operation = retry.operation(options);\n\n\t\tconst abortHandler = () => {\n\t\t\toperation.stop();\n\t\t\treject(options.signal?.reason);\n\t\t};\n\n\t\tif (options.signal && !options.signal.aborted) {\n\t\t\toptions.signal.addEventListener('abort', abortHandler, {once: true});\n\t\t}\n\n\t\tconst cleanUp = () => {\n\t\t\toptions.signal?.removeEventListener('abort', abortHandler);\n\t\t\toperation.stop();\n\t\t};\n\n\t\toperation.attempt(async attemptNumber => {\n\t\t\ttry {\n\t\t\t\tconst result = await input(attemptNumber);\n\t\t\t\tcleanUp();\n\t\t\t\tresolve(result);\n\t\t\t} catch (error) {\n\t\t\t\ttry {\n\t\t\t\t\tif (!(error instanceof Error)) {\n\t\t\t\t\t\tthrow new TypeError(`Non-error was thrown: \"${error}\". You should only throw errors.`);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (error instanceof AbortError) {\n\t\t\t\t\t\tthrow error.originalError;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (error instanceof TypeError && !isNetworkError(error)) {\n\t\t\t\t\t\tthrow error;\n\t\t\t\t\t}\n\n\t\t\t\t\tdecorateErrorWithCounts(error, attemptNumber, options);\n\n\t\t\t\t\tif (!(await options.shouldRetry(error))) {\n\t\t\t\t\t\toperation.stop();\n\t\t\t\t\t\treject(error);\n\t\t\t\t\t}\n\n\t\t\t\t\tawait options.onFailedAttempt(error);\n\n\t\t\t\t\tif (!operation.retry(error)) {\n\t\t\t\t\t\tthrow operation.mainError();\n\t\t\t\t\t}\n\t\t\t\t} catch (finalError) {\n\t\t\t\t\tdecorateErrorWithCounts(finalError, attemptNumber, options);\n\t\t\t\t\tcleanUp();\n\t\t\t\t\treject(finalError);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n","const objectToString = Object.prototype.toString;\n\nconst isError = value => objectToString.call(value) === '[object Error]';\n\nconst errorMessages = new Set([\n\t'network error', // Chrome\n\t'Failed to fetch', // Chrome\n\t'NetworkError when attempting to fetch resource.', // Firefox\n\t'The Internet connection appears to be offline.', // Safari 16\n\t'Network request failed', // `cross-fetch`\n\t'fetch failed', // Undici (Node.js)\n\t'terminated', // Undici (Node.js)\n\t' A network error occurred.', // Bun (WebKit)\n\t'Network connection lost', // Cloudflare Workers (fetch)\n]);\n\nexport default function isNetworkError(error) {\n\tconst isValid = error\n\t\t&& isError(error)\n\t\t&& error.name === 'TypeError'\n\t\t&& typeof error.message === 'string';\n\n\tif (!isValid) {\n\t\treturn false;\n\t}\n\n\tconst {message, stack} = error;\n\n\t// Safari 17+ has generic message but no stack for network errors\n\tif (message === 'Load failed') {\n\t\treturn stack === undefined\n\t\t\t// Sentry adds its own stack trace to the fetch error, so also check for that\n\t\t\t|| '__sentry_captured__' in error;\n\t}\n\n\t// Deno network errors start with specific text\n\tif (message.startsWith('error sending request for url')) {\n\t\treturn true;\n\t}\n\n\t// Standard network error messages\n\treturn errorMessages.has(message);\n}\n","// @ts-nocheck\n// Auto-generated by DjangoCFG - see CLAUDE.md\n/**\n * Retry Configuration and Utilities\n *\n * Provides automatic retry logic for failed HTTP requests using p-retry.\n * Retries only on network errors and server errors (5xx), not client errors (4xx).\n */\n\nimport pRetry, { AbortError } from 'p-retry';\nimport { APIError, NetworkError } from './errors';\n\n/**\n * Information about a failed retry attempt.\n */\nexport interface FailedAttemptInfo {\n /** The error that caused the failure */\n error: Error;\n /** The attempt number (1-indexed) */\n attemptNumber: number;\n /** Number of retries left */\n retriesLeft: number;\n}\n\n/**\n * Retry configuration options.\n *\n * Uses exponential backoff with jitter by default to avoid thundering herd.\n */\nexport interface RetryConfig {\n /**\n * Maximum number of retry attempts.\n * @default 3\n */\n retries?: number;\n\n /**\n * Exponential backoff factor.\n * @default 2\n */\n factor?: number;\n\n /**\n * Minimum wait time between retries (ms).\n * @default 1000\n */\n minTimeout?: number;\n\n /**\n * Maximum wait time between retries (ms).\n * @default 60000\n */\n maxTimeout?: number;\n\n /**\n * Add randomness to wait times (jitter).\n * Helps avoid thundering herd problem.\n * @default true\n */\n randomize?: boolean;\n\n /**\n * Callback called on each failed attempt.\n */\n onFailedAttempt?: (info: FailedAttemptInfo) => void;\n}\n\n/**\n * Default retry configuration.\n */\nexport const DEFAULT_RETRY_CONFIG: Required<RetryConfig> = {\n retries: 3,\n factor: 2,\n minTimeout: 1000,\n maxTimeout: 60000,\n randomize: true,\n onFailedAttempt: () => {},\n};\n\n/**\n * Determine if an error should trigger a retry.\n *\n * Retries on:\n * - Network errors (connection refused, timeout, etc.)\n * - Server errors (5xx status codes)\n * - Rate limiting (429 status code)\n *\n * Does NOT retry on:\n * - Client errors (4xx except 429)\n * - Authentication errors (401, 403)\n * - Not found (404)\n *\n * @param error - The error to check\n * @returns true if should retry, false otherwise\n */\nexport function shouldRetry(error: any): boolean {\n // Always retry network errors\n if (error instanceof NetworkError) {\n return true;\n }\n\n // For API errors, check status code\n if (error instanceof APIError) {\n const status = error.statusCode;\n\n // Retry on 5xx server errors\n if (status >= 500 && status < 600) {\n return true;\n }\n\n // Retry on 429 (rate limit)\n if (status === 429) {\n return true;\n }\n\n // Do NOT retry on 4xx client errors\n return false;\n }\n\n // Retry on unknown errors (might be network issues)\n return true;\n}\n\n/**\n * Wrap a function with retry logic.\n *\n * @param fn - Async function to retry\n * @param config - Retry configuration\n * @returns Result of the function\n *\n * @example\n * ```typescript\n * const result = await withRetry(\n * async () => fetch('https://api.example.com/users'),\n * { retries: 5, minTimeout: 2000 }\n * );\n * ```\n */\nexport async function withRetry<T>(\n fn: () => Promise<T>,\n config?: RetryConfig\n): Promise<T> {\n const finalConfig = { ...DEFAULT_RETRY_CONFIG, ...config };\n\n return pRetry(\n async () => {\n try {\n return await fn();\n } catch (error) {\n // Check if we should retry this error\n if (!shouldRetry(error)) {\n // Abort retry immediately for non-retryable errors\n throw new AbortError(error as Error);\n }\n\n // Re-throw error to trigger retry\n throw error;\n }\n },\n {\n retries: finalConfig.retries,\n factor: finalConfig.factor,\n minTimeout: finalConfig.minTimeout,\n maxTimeout: finalConfig.maxTimeout,\n randomize: finalConfig.randomize,\n onFailedAttempt: finalConfig.onFailedAttempt ? (error) => {\n // Adapt p-retry's FailedAttemptError to our FailedAttemptInfo\n const pRetryError = error as any; // p-retry's internal type\n finalConfig.onFailedAttempt!({\n error: pRetryError as Error,\n attemptNumber: pRetryError.attemptNumber,\n retriesLeft: pRetryError.retriesLeft,\n });\n } : undefined,\n }\n );\n}","import { Monitor } from \"./monitor\";\nimport { HttpClientAdapter, FetchAdapter } from \"./http\";\nimport { APIError, NetworkError } from \"./errors\";\nimport { APILogger, type LoggerConfig } from \"./logger\";\nimport { withRetry, type RetryConfig } from \"./retry\";\n\n\n/**\n * Async API client for Django CFG API.\n *\n * Usage:\n * ```typescript\n * const client = new APIClient('https://api.example.com');\n * const users = await client.users.list();\n * const post = await client.posts.create(newPost);\n *\n * // Custom HTTP adapter (e.g., Axios)\n * const client = new APIClient('https://api.example.com', {\n * httpClient: new AxiosAdapter()\n * });\n * ```\n */\nexport class APIClient {\n private baseUrl: string;\n private httpClient: HttpClientAdapter;\n private logger: APILogger | null = null;\n private retryConfig: RetryConfig | null = null;\n private tokenGetter: (() => string | null) | null = null;\n\n // Sub-clients\n public monitor: Monitor;\n\n constructor(\n baseUrl: string,\n options?: {\n httpClient?: HttpClientAdapter;\n loggerConfig?: Partial<LoggerConfig>;\n retryConfig?: RetryConfig;\n tokenGetter?: () => string | null;\n }\n ) {\n this.baseUrl = baseUrl.replace(/\\/$/, '');\n this.httpClient = options?.httpClient || new FetchAdapter();\n this.tokenGetter = options?.tokenGetter || null;\n\n // Initialize logger if config provided\n if (options?.loggerConfig !== undefined) {\n this.logger = new APILogger(options.loggerConfig);\n }\n\n // Store retry configuration\n if (options?.retryConfig !== undefined) {\n this.retryConfig = options.retryConfig;\n }\n\n // Initialize sub-clients\n this.monitor = new Monitor(this);\n }\n\n /**\n * Get CSRF token from cookies (for SessionAuthentication).\n *\n * Returns null if cookie doesn't exist (JWT-only auth).\n */\n getCsrfToken(): string | null {\n const name = 'csrftoken';\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${name}=`);\n if (parts.length === 2) {\n return parts.pop()?.split(';').shift() || null;\n }\n return null;\n }\n\n /**\n * Get the base URL for building streaming/download URLs.\n */\n getBaseUrl(): string {\n return this.baseUrl;\n }\n\n /**\n * Get JWT token for URL authentication (used in streaming endpoints).\n * Returns null if no token getter is configured or no token is available.\n */\n getToken(): string | null {\n return this.tokenGetter ? this.tokenGetter() : null;\n }\n\n /**\n * Make HTTP request with Django CSRF and session handling.\n * Automatically retries on network errors and 5xx server errors.\n */\n async request<T>(\n method: string,\n path: string,\n options?: {\n params?: Record<string, any>;\n body?: any;\n formData?: FormData;\n binaryBody?: Blob | ArrayBuffer;\n headers?: Record<string, string>;\n }\n ): Promise<T> {\n // Wrap request in retry logic if configured\n if (this.retryConfig) {\n return withRetry(() => this._makeRequest<T>(method, path, options), {\n ...this.retryConfig,\n onFailedAttempt: (info) => {\n // Log retry attempts\n if (this.logger) {\n this.logger.warn(\n `Retry attempt ${info.attemptNumber}/${info.retriesLeft + info.attemptNumber} ` +\n `for ${method} ${path}: ${info.error.message}`\n );\n }\n // Call user's onFailedAttempt if provided\n this.retryConfig?.onFailedAttempt?.(info);\n },\n });\n }\n\n // No retry configured, make request directly\n return this._makeRequest<T>(method, path, options);\n }\n\n /**\n * Internal request method (without retry wrapper).\n * Used by request() method with optional retry logic.\n */\n private async _makeRequest<T>(\n method: string,\n path: string,\n options?: {\n params?: Record<string, any>;\n body?: any;\n formData?: FormData;\n binaryBody?: Blob | ArrayBuffer;\n headers?: Record<string, string>;\n }\n ): Promise<T> {\n // Build URL - handle both absolute and relative paths\n // When baseUrl is empty (static builds), path is used as-is (relative to current origin)\n const url = this.baseUrl ? `${this.baseUrl}${path}` : path;\n const startTime = Date.now();\n\n // Build headers - start with custom headers from options\n const headers: Record<string, string> = {\n ...(options?.headers || {})\n };\n\n // Don't set Content-Type for FormData/binaryBody (browser will set it with boundary)\n if (!options?.formData && !options?.binaryBody && !headers['Content-Type']) {\n headers['Content-Type'] = 'application/json';\n }\n\n // CSRF not needed - SessionAuthentication not enabled in DRF config\n // Your API uses JWT/Token authentication (no CSRF required)\n\n // Log request\n if (this.logger) {\n this.logger.logRequest({\n method,\n url: url,\n headers,\n body: options?.formData || options?.body,\n timestamp: startTime,\n });\n }\n\n try {\n // Make request via HTTP adapter\n const response = await this.httpClient.request<T>({\n method,\n url: url,\n headers,\n params: options?.params,\n body: options?.body,\n formData: options?.formData,\n binaryBody: options?.binaryBody,\n });\n\n const duration = Date.now() - startTime;\n\n // Check for HTTP errors\n if (response.status >= 400) {\n const error = new APIError(\n response.status,\n response.statusText,\n response.data,\n url\n );\n\n // Log error\n if (this.logger) {\n this.logger.logError(\n {\n method,\n url: url,\n headers,\n body: options?.formData || options?.body,\n timestamp: startTime,\n },\n {\n message: error.message,\n statusCode: response.status,\n duration,\n timestamp: Date.now(),\n }\n );\n }\n\n throw error;\n }\n\n // Log successful response\n if (this.logger) {\n this.logger.logResponse(\n {\n method,\n url: url,\n headers,\n body: options?.formData || options?.body,\n timestamp: startTime,\n },\n {\n status: response.status,\n statusText: response.statusText,\n data: response.data,\n duration,\n timestamp: Date.now(),\n }\n );\n }\n\n return response.data as T;\n } catch (error) {\n const duration = Date.now() - startTime;\n\n // Re-throw APIError as-is\n if (error instanceof APIError) {\n throw error;\n }\n\n // Detect CORS errors and dispatch event\n const isCORSError = error instanceof TypeError &&\n (error.message.toLowerCase().includes('cors') ||\n error.message.toLowerCase().includes('failed to fetch') ||\n error.message.toLowerCase().includes('network request failed'));\n\n // Log specific error type first\n if (this.logger) {\n if (isCORSError) {\n this.logger.error(`🚫 CORS Error: ${method} ${url}`);\n this.logger.error(` → ${error instanceof Error ? error.message : String(error)}`);\n this.logger.error(` → Configure security_domains parameter on the server`);\n } else {\n this.logger.error(`⚠️ Network Error: ${method} ${url}`);\n this.logger.error(` → ${error instanceof Error ? error.message : String(error)}`);\n }\n }\n\n // Dispatch browser events\n if (typeof window !== 'undefined') {\n try {\n if (isCORSError) {\n // Dispatch CORS-specific error event\n window.dispatchEvent(new CustomEvent('cors-error', {\n detail: {\n url: url,\n method: method,\n error: error instanceof Error ? error.message : String(error),\n timestamp: new Date(),\n },\n bubbles: true,\n cancelable: false,\n }));\n } else {\n // Dispatch generic network error event\n window.dispatchEvent(new CustomEvent('network-error', {\n detail: {\n url: url,\n method: method,\n error: error instanceof Error ? error.message : String(error),\n timestamp: new Date(),\n },\n bubbles: true,\n cancelable: false,\n }));\n }\n } catch (eventError) {\n // Silently fail - event dispatch should never crash the app\n }\n }\n\n // Wrap other errors as NetworkError\n const networkError = error instanceof Error\n ? new NetworkError(error.message, url, error)\n : new NetworkError('Unknown error', url);\n\n // Detailed logging via logger.logError\n if (this.logger) {\n this.logger.logError(\n {\n method,\n url: url,\n headers,\n body: options?.formData || options?.body,\n timestamp: startTime,\n },\n {\n message: networkError.message,\n duration,\n timestamp: Date.now(),\n }\n );\n }\n\n throw networkError;\n }\n }\n}\n","// @ts-nocheck\n// Auto-generated by DjangoCFG - see CLAUDE.md\n/**\n * Storage adapters for cross-platform token storage.\n *\n * Supports:\n * - LocalStorage (browser)\n * - Cookies (SSR/browser)\n * - Memory (Node.js/Electron/testing)\n */\n\nimport type { APILogger } from './logger';\n\n/**\n * Storage adapter interface for cross-platform token storage.\n */\nexport interface StorageAdapter {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n removeItem(key: string): void;\n}\n\n/**\n * LocalStorage adapter with safe try-catch for browser environments.\n * Works in modern browsers with localStorage support.\n * \n * Note: This adapter uses window.localStorage and should only be used in browser/client environments.\n * For server-side usage, use MemoryStorageAdapter or CookieStorageAdapter instead.\n */\nexport class LocalStorageAdapter implements StorageAdapter {\n private logger?: APILogger;\n\n constructor(logger?: APILogger) {\n this.logger = logger;\n }\n\n getItem(key: string): string | null {\n try {\n if (typeof window !== 'undefined' && window.localStorage) {\n const value = localStorage.getItem(key);\n this.logger?.debug(`LocalStorage.getItem(\"${key}\"): ${value ? 'found' : 'not found'}`);\n return value;\n }\n this.logger?.warn('LocalStorage not available: window.localStorage is undefined');\n } catch (error) {\n this.logger?.error('LocalStorage.getItem failed:', error);\n }\n return null;\n }\n\n setItem(key: string, value: string): void {\n try {\n if (typeof window !== 'undefined' && window.localStorage) {\n localStorage.setItem(key, value);\n this.logger?.debug(`LocalStorage.setItem(\"${key}\"): success`);\n } else {\n this.logger?.warn('LocalStorage not available: window.localStorage is undefined');\n }\n } catch (error) {\n this.logger?.error('LocalStorage.setItem failed:', error);\n }\n }\n\n removeItem(key: string): void {\n try {\n if (typeof window !== 'undefined' && window.localStorage) {\n localStorage.removeItem(key);\n this.logger?.debug(`LocalStorage.removeItem(\"${key}\"): success`);\n } else {\n this.logger?.warn('LocalStorage not available: window.localStorage is undefined');\n }\n } catch (error) {\n this.logger?.error('LocalStorage.removeItem failed:', error);\n }\n }\n}\n\n/**\n * Cookie-based storage adapter for SSR and browser environments.\n * Useful for Next.js, Nuxt.js, and other SSR frameworks.\n */\nexport class CookieStorageAdapter implements StorageAdapter {\n private logger?: APILogger;\n\n constructor(logger?: APILogger) {\n this.logger = logger;\n }\n\n getItem(key: string): string | null {\n try {\n if (typeof document === 'undefined') {\n this.logger?.warn('Cookies not available: document is undefined (SSR context?)');\n return null;\n }\n const value = `; ${document.cookie}`;\n const parts = value.split(`; ${key}=`);\n if (parts.length === 2) {\n const result = parts.pop()?.split(';').shift() || null;\n this.logger?.debug(`CookieStorage.getItem(\"${key}\"): ${result ? 'found' : 'not found'}`);\n return result;\n }\n this.logger?.debug(`CookieStorage.getItem(\"${key}\"): not found`);\n } catch (error) {\n this.logger?.error('CookieStorage.getItem failed:', error);\n }\n return null;\n }\n\n setItem(key: string, value: string): void {\n try {\n if (typeof document !== 'undefined') {\n document.cookie = `${key}=${value}; path=/; max-age=31536000`;\n this.logger?.debug(`CookieStorage.setItem(\"${key}\"): success`);\n } else {\n this.logger?.warn('Cookies not available: document is undefined (SSR context?)');\n }\n } catch (error) {\n this.logger?.error('CookieStorage.setItem failed:', error);\n }\n }\n\n removeItem(key: string): void {\n try {\n if (typeof document !== 'undefined') {\n document.cookie = `${key}=; path=/; expires=Thu, 01 Jan 1970 00:00:00 GMT`;\n this.logger?.debug(`CookieStorage.removeItem(\"${key}\"): success`);\n } else {\n this.logger?.warn('Cookies not available: document is undefined (SSR context?)');\n }\n } catch (error) {\n this.logger?.error('CookieStorage.removeItem failed:', error);\n }\n }\n}\n\n/**\n * In-memory storage adapter for Node.js, Electron, and testing environments.\n * Data is stored in RAM and cleared when process exits.\n */\nexport class MemoryStorageAdapter implements StorageAdapter {\n private storage: Map<string, string> = new Map();\n private logger?: APILogger;\n\n constructor(logger?: APILogger) {\n this.logger = logger;\n }\n\n getItem(key: string): string | null {\n const value = this.storage.get(key) || null;\n this.logger?.debug(`MemoryStorage.getItem(\"${key}\"): ${value ? 'found' : 'not found'}`);\n return value;\n }\n\n setItem(key: string, value: string): void {\n this.storage.set(key, value);\n this.logger?.debug(`MemoryStorage.setItem(\"${key}\"): success`);\n }\n\n removeItem(key: string): void {\n this.storage.delete(key);\n this.logger?.debug(`MemoryStorage.removeItem(\"${key}\"): success`);\n }\n}","// @ts-nocheck\n// Auto-generated by DjangoCFG - see CLAUDE.md\n/**\n * * `ERROR` - Error\n * * `WARNING` - Warning\n * * `INFO` - Info\n * * `PAGE_VIEW` - Page View\n * * `PERFORMANCE` - Performance\n * * `NETWORK_ERROR` - Network Error\n * * `JS_ERROR` - JS Error\n * * `CONSOLE` - Console\n */\nexport enum FrontendEventIngestRequestEventType {\n ERROR = \"ERROR\",\n WARNING = \"WARNING\",\n INFO = \"INFO\",\n PAGE_VIEW = \"PAGE_VIEW\",\n PERFORMANCE = \"PERFORMANCE\",\n NETWORK_ERROR = \"NETWORK_ERROR\",\n JS_ERROR = \"JS_ERROR\",\n CONSOLE = \"CONSOLE\",\n}\n\n/**\n * * `error` - Error\n * * `warn` - Warning\n * * `info` - Info\n * * `debug` - Debug\n */\nexport enum FrontendEventIngestRequestLevel {\n ERROR = \"error\",\n WARN = \"warn\",\n INFO = \"info\",\n DEBUG = \"debug\",\n}\n\n","/**\n * Zod schema for FrontendEventIngestRequest\n *\n * This schema provides runtime validation and type inference.\n * * Validates a single event from the browser.\n * */\nimport { z } from 'zod'\nimport * as Enums from '../../enums'\n\n/**\n * Validates a single event from the browser.\n */\nexport const FrontendEventIngestRequestSchema = z.object({\n event_type: z.nativeEnum(Enums.FrontendEventIngestRequestEventType),\n message: z.string().min(1).max(5000),\n level: z.nativeEnum(Enums.FrontendEventIngestRequestLevel).optional(),\n stack_trace: z.string().max(20000).optional(),\n url: z.string().max(2000).optional(),\n fingerprint: z.string().max(64).optional(),\n http_status: z.number().int().nullable().optional(),\n http_method: z.string().max(10).optional(),\n http_url: z.string().max(2000).optional(),\n user_agent: z.string().max(500).optional(),\n session_id: z.string().regex(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i).nullable().optional(),\n browser_fingerprint: z.string().max(64).optional(),\n extra: z.record(z.string(), z.any()).optional(),\n project_name: z.string().max(100).optional(),\n environment: z.string().max(20).optional(),\n})\n\n/**\n * Infer TypeScript type from Zod schema\n */\nexport type FrontendEventIngestRequest = z.infer<typeof FrontendEventIngestRequestSchema>","/**\n * Zod schema for IngestBatchRequest\n *\n * This schema provides runtime validation and type inference.\n * * Wraps a list of events. Enforces max batch size.\n * */\nimport { z } from 'zod'\nimport { FrontendEventIngestRequestSchema } from './FrontendEventIngestRequest.schema'\n\n/**\n * Wraps a list of events. Enforces max batch size.\n */\nexport const IngestBatchRequestSchema = z.object({\n events: z.array(FrontendEventIngestRequestSchema),\n})\n\n/**\n * Infer TypeScript type from Zod schema\n */\nexport type IngestBatchRequest = z.infer<typeof IngestBatchRequestSchema>","// @ts-nocheck\n// Auto-generated by DjangoCFG - see CLAUDE.md\n/**\n * Django CFG API - API Client with JWT Management\n *\n * Usage:\n * ```typescript\n * import { API } from './api';\n *\n * const api = new API('https://api.example.com');\n *\n * // Set JWT token\n * api.setToken('your-jwt-token', 'refresh-token');\n *\n * // Use API\n * const posts = await api.posts.list();\n * const user = await api.users.retrieve(1);\n *\n * // Check authentication\n * if (api.isAuthenticated()) {\n * // ...\n * }\n *\n * // Custom storage with logging (for Electron/Node.js)\n * import { MemoryStorageAdapter, APILogger } from './storage';\n * const logger = new APILogger({ enabled: true, logLevel: 'debug' });\n * const api = new API('https://api.example.com', {\n * storage: new MemoryStorageAdapter(logger),\n * loggerConfig: { enabled: true, logLevel: 'debug' }\n * });\n *\n * // Get OpenAPI schema\n * const schema = api.getSchema();\n * ```\n */\n\nimport { APIClient } from \"./client\";\nimport {\n StorageAdapter,\n LocalStorageAdapter,\n CookieStorageAdapter,\n MemoryStorageAdapter\n} from \"./storage\";\nimport type { RetryConfig } from \"./retry\";\nimport type { LoggerConfig } from \"./logger\";\nimport { APILogger } from \"./logger\";\nimport { Monitor } from \"./monitor/client\";\nexport * as MonitorTypes from \"./monitor/models\";\n// Note: Direct exports (export * from) are removed to avoid duplicate type conflicts\n// Use namespace exports like CfgAccountsTypes.User or import from specific modules\nexport * as Enums from \"./enums\";\n\n// Re-export Zod schemas for runtime validation\nexport * as Schemas from \"./_utils/schemas\";\n// Also export all schemas directly for convenience\nexport * from \"./_utils/schemas\";\n\n// Re-export Zod validation events for browser integration\nexport type { ValidationErrorDetail, ValidationErrorEvent } from \"./validation-events\";\nexport { dispatchValidationError, onValidationError, formatZodError } from \"./validation-events\";\n\n// Re-export typed fetchers for universal usage\nexport * as Fetchers from \"./_utils/fetchers\";\nexport * from \"./_utils/fetchers\";\n\n// Re-export API instance configuration functions\nexport {\n configureAPI,\n getAPIInstance,\n reconfigureAPI,\n clearAPITokens,\n resetAPI,\n isAPIConfigured\n} from \"./api-instance\";\n// NOTE: SWR hooks are generated in ./_utils/hooks/ but NOT exported here to keep\n// the main bundle server-safe. Import hooks directly from the hooks directory:\n// import { useUsers } from './_utils/hooks';\n// Or use a separate entry point like '@djangocfg/api/hooks' for client components.\n\n// Re-export core client\nexport { APIClient };\n\n// Re-export storage adapters for convenience\nexport type { StorageAdapter };\nexport { LocalStorageAdapter, CookieStorageAdapter, MemoryStorageAdapter };\n\n// Re-export error classes for convenience\nexport { APIError, NetworkError } from \"./errors\";\n\n// Re-export HTTP adapters for custom implementations\nexport type { HttpClientAdapter, HttpRequest, HttpResponse } from \"./http\";\nexport { FetchAdapter, KeepAliveFetchAdapter } from \"./http\";\n\n// Re-export logger types and classes\nexport type { LoggerConfig, RequestLog, ResponseLog, ErrorLog } from \"./logger\";\nexport { APILogger } from \"./logger\";\n\n// Re-export retry configuration and utilities\nexport type { RetryConfig, FailedAttemptInfo } from \"./retry\";\nexport { withRetry, shouldRetry, DEFAULT_RETRY_CONFIG } from \"./retry\";\n\nexport const TOKEN_KEY = \"auth_token\";\nexport const REFRESH_TOKEN_KEY = \"refresh_token\";\n\n/** Auto-detect locale from cookie NEXT_LOCALE or navigator.language */\nfunction detectLocale(): string | null {\n try {\n if (typeof document !== 'undefined') {\n const match = document.cookie.match(/(?:^|;\\s*)NEXT_LOCALE=([^;]*)/);\n if (match) return match[1];\n }\n if (typeof navigator !== 'undefined' && navigator.language) {\n return navigator.language;\n }\n } catch {}\n return null;\n}\n\nexport interface APIOptions {\n /** Custom storage adapter (defaults to LocalStorageAdapter) */\n storage?: StorageAdapter;\n /** Custom HTTP client adapter (defaults to FetchAdapter) */\n httpClient?: HttpClientAdapter;\n /** Retry configuration for failed requests */\n retryConfig?: RetryConfig;\n /** Logger configuration */\n loggerConfig?: Partial<LoggerConfig>;\n /** Locale for Accept-Language header (e.g. 'en', 'ko', 'ru') */\n locale?: string;\n}\n\nexport class API {\n private baseUrl: string;\n private _client: APIClient;\n private _token: string | null = null;\n private _refreshToken: string | null = null;\n private _locale: string | null = null;\n private storage: StorageAdapter;\n private options?: APIOptions;\n\n // Sub-clients\n public monitor!: Monitor;\n\n constructor(baseUrl: string, options?: APIOptions) {\n this.baseUrl = baseUrl;\n this.options = options;\n\n // Create logger if config provided\n const logger = options?.loggerConfig ? new APILogger(options.loggerConfig) : undefined;\n\n // Initialize storage with logger\n this.storage = options?.storage || new LocalStorageAdapter(logger);\n\n this._locale = options?.locale || null;\n\n this._loadTokensFromStorage();\n\n // Initialize APIClient with token getter for URL authentication\n this._client = new APIClient(this.baseUrl, {\n httpClient: this.options?.httpClient,\n retryConfig: this.options?.retryConfig,\n loggerConfig: this.options?.loggerConfig,\n tokenGetter: () => this.getToken(),\n });\n\n // Always inject auth header wrapper (reads token dynamically from storage)\n this._injectAuthHeader();\n\n // Initialize sub-clients from APIClient\n this.monitor = this._client.monitor;\n }\n\n private _loadTokensFromStorage(): void {\n this._token = this.storage.getItem(TOKEN_KEY);\n this._refreshToken = this.storage.getItem(REFRESH_TOKEN_KEY);\n }\n\n private _reinitClients(): void {\n this._client = new APIClient(this.baseUrl, {\n httpClient: this.options?.httpClient,\n retryConfig: this.options?.retryConfig,\n loggerConfig: this.options?.loggerConfig,\n tokenGetter: () => this.getToken(),\n });\n\n // Always inject auth header wrapper (reads token dynamically from storage)\n this._injectAuthHeader();\n\n // Reinitialize sub-clients\n this.monitor = this._client.monitor;\n }\n\n private _injectAuthHeader(): void {\n // Override request method to inject auth header\n const originalRequest = this._client.request.bind(this._client);\n this._client.request = async <T>(\n method: string,\n path: string,\n options?: { params?: Record<string, any>; body?: any; formData?: FormData; headers?: Record<string, string> }\n ): Promise<T> => {\n // Read token from storage dynamically (supports JWT injection after instantiation)\n const token = this.getToken();\n const locale = this._locale || detectLocale();\n const mergedOptions = {\n ...options,\n headers: {\n ...(options?.headers || {}),\n ...(token ? { 'Authorization': `Bearer ${token}` } : {}),\n ...(locale ? { 'Accept-Language': locale } : {}),\n },\n };\n\n return originalRequest(method, path, mergedOptions);\n };\n }\n\n /**\n * Get current JWT token\n */\n getToken(): string | null {\n return this.storage.getItem(TOKEN_KEY);\n }\n\n /**\n * Get current refresh token\n */\n getRefreshToken(): string | null {\n return this.storage.getItem(REFRESH_TOKEN_KEY);\n }\n\n /**\n * Set JWT token and refresh token\n * @param token - JWT access token\n * @param refreshToken - JWT refresh token (optional)\n */\n setToken(token: string, refreshToken?: string): void {\n this._token = token;\n this.storage.setItem(TOKEN_KEY, token);\n\n if (refreshToken) {\n this._refreshToken = refreshToken;\n this.storage.setItem(REFRESH_TOKEN_KEY, refreshToken);\n }\n\n // Reinitialize clients with new token\n this._reinitClients();\n }\n\n /**\n * Clear all tokens\n */\n clearTokens(): void {\n this._token = null;\n this._refreshToken = null;\n this.storage.removeItem(TOKEN_KEY);\n this.storage.removeItem(REFRESH_TOKEN_KEY);\n\n // Reinitialize clients without token\n this._reinitClients();\n }\n\n /**\n * Check if user is authenticated\n */\n isAuthenticated(): boolean {\n return !!this.getToken();\n }\n\n /**\n * Update base URL and reinitialize clients\n * @param url - New base URL\n */\n setBaseUrl(url: string): void {\n this.baseUrl = url;\n this._reinitClients();\n }\n\n /**\n * Get current base URL\n */\n getBaseUrl(): string {\n return this.baseUrl;\n }\n\n /**\n * Set locale for Accept-Language header\n * @param locale - Locale string (e.g. 'en', 'ko', 'ru') or null to clear\n */\n setLocale(locale: string | null): void {\n this._locale = locale;\n }\n\n /**\n * Get current locale\n */\n getLocale(): string | null {\n return this._locale;\n }\n\n /**\n * Get OpenAPI schema path\n * @returns Path to the OpenAPI schema JSON file\n *\n * Note: The OpenAPI schema is available in the schema.json file.\n * You can load it dynamically using:\n * ```typescript\n * const schema = await fetch('./schema.json').then(r => r.json());\n * // or using fs in Node.js:\n * // const schema = JSON.parse(fs.readFileSync('./schema.json', 'utf-8'));\n * ```\n */\n getSchemaPath(): string {\n return './schema.json';\n }\n}\n\nexport default API;","/**\n * BaseClient for @djangocfg/monitor\n *\n * Singleton monitorApi instance for the frontend monitor ingest endpoint.\n * Uses MemoryStorageAdapter — ingest is public (no auth tokens needed).\n */\n\nimport { API, MemoryStorageAdapter } from './generated/cfg_monitor'\n\nexport const monitorApi = new API('', { storage: new MemoryStorageAdapter() })\n\nexport function configureMonitorApi(baseUrl: string): void {\n monitorApi.setBaseUrl(baseUrl)\n}\n\nexport class BaseClient {\n protected static monitorApi = monitorApi\n}\n","import { monitorApi } from '../../_api'\nimport { API, MemoryStorageAdapter, KeepAliveFetchAdapter } from '../../_api/generated/cfg_monitor'\nimport type { IngestBatchRequest } from '../../_api'\n\n/** Separate API instance with KeepAliveFetchAdapter — survives page unload */\nconst monitorApiBeacon = new API('', {\n storage: new MemoryStorageAdapter(),\n httpClient: new KeepAliveFetchAdapter(),\n})\n\nexport function syncBeaconBaseUrl(): void {\n monitorApiBeacon.setBaseUrl(monitorApi.getBaseUrl())\n}\n\nexport async function sendBatch(\n batch: IngestBatchRequest,\n useBeacon = false,\n): Promise<void> {\n if (batch.events.length === 0) return\n\n try {\n if (useBeacon) {\n syncBeaconBaseUrl()\n await monitorApiBeacon.monitor.ingestCreate(batch)\n } else {\n await monitorApi.monitor.ingestCreate(batch)\n }\n } catch {\n // Transport errors silently ignored — monitoring must never crash the app\n }\n}\n","import { computeFingerprint } from './fingerprint'\nimport { getSessionId } from './session'\nimport { monitorStore } from '../store'\nimport { EventType, EventLevel } from '../../_api'\n\nexport function installJsErrorCapture(): () => void {\n if (typeof window === 'undefined') return () => {}\n\n const onError = async (\n message: string | Event,\n source?: string,\n lineno?: number,\n colno?: number,\n error?: Error,\n ) => {\n try {\n const msg = typeof message === 'string' ? message : String(message)\n const stack = error?.stack ?? `at ${source}:${lineno}:${colno}`\n const url = window.location.href\n const fingerprint = await computeFingerprint(msg, stack, url)\n const { config } = monitorStore.getState()\n monitorStore.getState().push({\n event_type: EventType.JS_ERROR,\n level: EventLevel.ERROR,\n message: msg,\n stack_trace: stack,\n url,\n fingerprint,\n session_id: getSessionId(),\n user_agent: navigator.userAgent,\n project_name: config.project,\n environment: config.environment,\n })\n } catch { /* never crash */ }\n }\n\n const onUnhandledRejection = async (e: PromiseRejectionEvent) => {\n try {\n const reason = e.reason\n const msg = reason instanceof Error ? reason.message\n : typeof reason === 'string' ? reason\n : 'Unhandled promise rejection'\n const stack = reason instanceof Error ? (reason.stack ?? '') : ''\n const url = window.location.href\n const fingerprint = await computeFingerprint(msg, stack, url)\n const { config } = monitorStore.getState()\n monitorStore.getState().push({\n event_type: EventType.JS_ERROR,\n level: EventLevel.ERROR,\n message: msg,\n stack_trace: stack,\n url,\n fingerprint,\n session_id: getSessionId(),\n user_agent: navigator.userAgent,\n project_name: config.project,\n environment: config.environment,\n })\n } catch { /* never crash */ }\n }\n\n const errHandler = (e: ErrorEvent) => onError(e.message, e.filename, e.lineno, e.colno, e.error)\n window.addEventListener('error', errHandler)\n window.addEventListener('unhandledrejection', onUnhandledRejection)\n\n return () => {\n window.removeEventListener('error', errHandler)\n window.removeEventListener('unhandledrejection', onUnhandledRejection)\n }\n}\n","import { computeFingerprint } from './fingerprint'\nimport { getSessionId } from './session'\nimport { monitorStore } from '../store'\nimport { EventType, EventLevel } from '../../_api'\nimport type { FrontendEventIngestRequestEventType, FrontendEventIngestRequestLevel } from '../../_api/generated/cfg_monitor/enums'\n\ntype ConsoleLevel = 'warn' | 'error'\n\nconst levelMap: Record<ConsoleLevel, FrontendEventIngestRequestLevel> = {\n warn: EventLevel.WARN,\n error: EventLevel.ERROR,\n}\nconst typeMap: Record<ConsoleLevel, FrontendEventIngestRequestEventType> = {\n warn: EventType.WARNING,\n error: EventType.ERROR,\n}\n\nfunction stringify(args: unknown[]): string {\n return args.map((a) => {\n if (typeof a === 'string') return a\n if (a instanceof Error) return a.message\n try { return JSON.stringify(a) } catch { return String(a) }\n }).join(' ')\n}\n\nasync function captureConsoleEvent(level: ConsoleLevel, args: unknown[]) {\n try {\n const message = stringify(args)\n const url = typeof window !== 'undefined' ? window.location.href : ''\n const fingerprint = await computeFingerprint(message, '', url)\n const { config } = monitorStore.getState()\n monitorStore.getState().push({\n event_type: typeMap[level],\n level: levelMap[level],\n message,\n url,\n fingerprint,\n session_id: getSessionId(),\n user_agent: typeof navigator !== 'undefined' ? navigator.userAgent : '',\n project_name: config.project,\n environment: config.environment,\n })\n } catch { /* never crash */ }\n}\n\nexport function installConsoleCapture(): () => void {\n if (typeof window === 'undefined') return () => {}\n\n try {\n const g = globalThis as Record<string, unknown>\n if (g.consola && typeof (g.consola as { addReporter?: unknown }).addReporter === 'function') {\n const consolaInst = g.consola as {\n addReporter: (r: unknown) => void\n removeReporter: (r: unknown) => void\n }\n const reporter = {\n log(logObj: { level: number; args: unknown[] }) {\n if (logObj.level === 1) captureConsoleEvent('error', logObj.args)\n else if (logObj.level === 2) captureConsoleEvent('warn', logObj.args)\n },\n }\n consolaInst.addReporter(reporter)\n return () => consolaInst.removeReporter(reporter)\n }\n } catch { /* consola not available */ }\n\n const origWarn = console.warn.bind(console)\n const origError = console.error.bind(console)\n console.warn = (...args: unknown[]) => { origWarn(...args); captureConsoleEvent('warn', args) }\n console.error = (...args: unknown[]) => { origError(...args); captureConsoleEvent('error', args) }\n return () => { console.warn = origWarn; console.error = origError }\n}\n","import { getSessionId } from './session'\nimport { monitorStore } from '../store'\nimport { EventType, EventLevel } from '../../_api'\n\ninterface ValidationErrorDetail {\n operation: string\n path: string\n method: string\n error: { message: string }\n}\n\nexport function installValidationCapture(): () => void {\n if (typeof window === 'undefined') return () => {}\n\n const handler = (event: Event) => {\n if (!(event instanceof CustomEvent)) return\n try {\n const detail = event.detail as ValidationErrorDetail\n const { config } = monitorStore.getState()\n monitorStore.getState().push({\n event_type: EventType.WARNING,\n level: EventLevel.WARN,\n message: `Zod validation error in ${detail.operation}: ${detail.error?.message ?? 'unknown'}`,\n url: window.location.href,\n http_method: detail.method,\n http_url: detail.path,\n session_id: getSessionId(),\n user_agent: navigator.userAgent,\n project_name: config.project,\n environment: config.environment,\n extra: { operation: detail.operation, path: detail.path, method: detail.method },\n })\n } catch { /* never crash */ }\n }\n\n window.addEventListener('zod-validation-error', handler)\n return () => window.removeEventListener('zod-validation-error', handler)\n}\n","import { getSessionId } from './session'\nimport { monitorStore } from '../store'\nimport { EventType, EventLevel } from '../../_api'\n\nexport async function monitoredFetch(\n input: RequestInfo | URL,\n init?: RequestInit,\n): Promise<Response> {\n const url = typeof input === 'string' ? input : input instanceof URL ? input.href : input.url\n const method = (init?.method ?? 'GET').toUpperCase()\n\n try {\n const response = await fetch(input, init)\n if (!response.ok) {\n const { config } = monitorStore.getState()\n monitorStore.getState().push({\n event_type: EventType.NETWORK_ERROR,\n level: response.status >= 500 ? EventLevel.ERROR : EventLevel.WARN,\n message: `HTTP ${response.status} ${response.statusText} — ${method} ${url}`,\n url: typeof window !== 'undefined' ? window.location.href : '',\n http_status: response.status,\n http_method: method,\n http_url: url,\n session_id: getSessionId(),\n user_agent: typeof navigator !== 'undefined' ? navigator.userAgent : '',\n project_name: config.project,\n environment: config.environment,\n })\n }\n return response\n } catch (err) {\n const { config } = monitorStore.getState()\n monitorStore.getState().push({\n event_type: EventType.NETWORK_ERROR,\n level: EventLevel.ERROR,\n message: err instanceof Error ? err.message : `Network error — ${method} ${url}`,\n url: typeof window !== 'undefined' ? window.location.href : '',\n http_method: method,\n http_url: url,\n session_id: getSessionId(),\n user_agent: typeof navigator !== 'undefined' ? navigator.userAgent : '',\n project_name: config.project,\n environment: config.environment,\n })\n throw err\n }\n}\n","'use client'\n\n/**\n * MonitorProvider\n *\n * Initialises FrontendMonitor on mount and tears it down on unmount.\n * Drop it once into your root layout — no other setup needed.\n *\n * @example\n * // app/layout.tsx\n * import { MonitorProvider } from '@djangocfg/monitor/client'\n *\n * export default function RootLayout({ children }) {\n * return (\n * <html>\n * <body>\n * <MonitorProvider project=\"my-app\" environment={process.env.NODE_ENV} />\n * {children}\n * </body>\n * </html>\n * )\n * }\n */\n\nimport { useEffect } from 'react'\nimport { FrontendMonitor } from './index'\nimport { initWindowMonitor } from './window'\nimport type { MonitorConfig } from '../types'\n\nexport interface MonitorProviderProps extends MonitorConfig {\n /** Optional: render children inside the provider (or use as a standalone leaf) */\n children?: React.ReactNode\n}\n\nexport function MonitorProvider({ children, ...config }: MonitorProviderProps) {\n useEffect(() => {\n FrontendMonitor.init(config)\n initWindowMonitor()\n return () => FrontendMonitor.destroy()\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n return children ?? null\n}\n","/**\n * window.monitor — global debug API for browser console testing.\n *\n * Automatically installed by MonitorProvider after FrontendMonitor.init().\n * Allows manual event firing from DevTools without importing the module.\n *\n * @example\n * // In browser DevTools console:\n * window.monitor.error('Something broke')\n * window.monitor.warn('Low disk space', { extra: 'context' })\n * window.monitor.network(404, 'GET', '/api/users/')\n * window.monitor.flush()\n * window.monitor.status()\n */\n\nimport { monitorStore } from './store'\nimport { EventType, EventLevel } from '../_api'\nimport { getSessionId } from './capture/session'\nimport type { MonitorEvent } from '../types'\n\nexport interface WindowMonitorAPI {\n /** Capture a custom error event */\n error(message: string, extra?: Record<string, unknown>): void\n /** Capture a custom warning event */\n warn(message: string, extra?: Record<string, unknown>): void\n /** Capture a custom info event */\n info(message: string, extra?: Record<string, unknown>): void\n /** Capture a network error event */\n network(status: number, method: string, url: string, extra?: Record<string, unknown>): void\n /** Capture a raw event (full control) */\n capture(event: MonitorEvent): void\n /** Force-flush the event buffer to backend */\n flush(): void\n /** Show current monitor state (config + buffer size) */\n status(): void\n}\n\ndeclare global {\n interface Window {\n monitor?: WindowMonitorAPI\n }\n}\n\nfunction makeEvent(\n type: MonitorEvent['event_type'],\n level: MonitorEvent['level'],\n message: string,\n extra?: Record<string, unknown>,\n): MonitorEvent {\n const state = monitorStore.getState()\n const cfg = state.config\n return {\n event_type: type,\n level,\n message,\n session_id: getSessionId(),\n url: window.location.href,\n user_agent: navigator.userAgent,\n project_name: cfg.project ?? '',\n environment: cfg.environment ?? '',\n ...(extra ? { extra } : {}),\n }\n}\n\nexport function initWindowMonitor(): void {\n if (typeof window === 'undefined') return\n\n const api: WindowMonitorAPI = {\n error(message, extra) {\n monitorStore.getState().push(makeEvent(EventType.JS_ERROR, EventLevel.ERROR, message, extra))\n console.log('[monitor] error captured →', message)\n },\n\n warn(message, extra) {\n monitorStore.getState().push(makeEvent(EventType.WARNING, EventLevel.WARN, message, extra))\n console.log('[monitor] warn captured →', message)\n },\n\n info(message, extra) {\n monitorStore.getState().push(makeEvent(EventType.INFO, EventLevel.INFO, message, extra))\n console.log('[monitor] info captured →', message)\n },\n\n network(status, method, url, extra) {\n const event = makeEvent(\n EventType.NETWORK_ERROR,\n status >= 500 ? EventLevel.ERROR : EventLevel.WARN,\n `${method} ${url} → ${status}`,\n extra,\n )\n monitorStore.getState().push({ ...event, http_status: status, http_method: method, http_url: url })\n console.log('[monitor] network captured →', method, url, status)\n },\n\n capture(event) {\n monitorStore.getState().push(event)\n console.log('[monitor] event captured →', event)\n },\n\n flush() {\n monitorStore.getState().flush()\n console.log('[monitor] flushed')\n },\n\n status() {\n const state = monitorStore.getState()\n console.group('[monitor] status')\n console.log('config:', state.config)\n console.log('buffer size:', state.buffer.length)\n console.log('initialized:', state.initialized)\n console.log('session_id:', getSessionId())\n console.groupEnd()\n },\n }\n\n window.monitor = api\n}\n","/**\n * @djangocfg/monitor/client\n *\n * Browser-side monitor. Use in 'use client' components only.\n *\n * @example\n * ```tsx\n * 'use client'\n * import { useEffect } from 'react'\n * import { FrontendMonitor } from '@djangocfg/monitor/client'\n *\n * export function MonitorProvider() {\n * useEffect(() => {\n * FrontendMonitor.init({ project: 'my-app', environment: process.env.NODE_ENV })\n * return () => FrontendMonitor.destroy()\n * }, [])\n * return null\n * }\n * ```\n */\n\nimport { installJsErrorCapture } from './capture/js-errors'\nimport { installConsoleCapture } from './capture/console'\nimport { installValidationCapture } from './capture/validation'\nimport { ensureSessionCookie } from './capture/session'\nimport { monitorStore } from './store'\nimport { configureMonitorApi } from '../_api'\nimport type { MonitorConfig, MonitorEvent } from '../types'\n\nexport type { MonitorConfig, MonitorEvent, EventType, EventLevel } from '../types'\nexport { monitoredFetch } from './capture/network'\nexport { getSessionId } from './capture/session'\nexport { MonitorProvider } from './MonitorProvider'\nexport type { MonitorProviderProps } from './MonitorProvider'\nexport { initWindowMonitor } from './window'\nexport type { WindowMonitorAPI } from './window'\nexport { monitorStore } from './store'\n\nlet flushInterval: ReturnType<typeof setInterval> | null = null\nconst cleanupFns: Array<() => void> = []\n\nexport const FrontendMonitor = {\n init(config: MonitorConfig = {}): void {\n if (typeof window === 'undefined') return\n\n const baseUrl = config.baseUrl ?? process.env.NEXT_PUBLIC_API_URL ?? ''\n if (baseUrl) configureMonitorApi(baseUrl)\n monitorStore.getState().setConfig(config)\n ensureSessionCookie()\n\n if (config.captureJsErrors !== false) cleanupFns.push(installJsErrorCapture())\n if (config.captureConsole !== false) cleanupFns.push(installConsoleCapture())\n cleanupFns.push(installValidationCapture())\n\n const interval = config.flushInterval ?? 5000\n flushInterval = setInterval(() => monitorStore.getState().flush(), interval)\n\n const onHide = () => { if (document.visibilityState === 'hidden') monitorStore.getState().flush(true) }\n window.addEventListener('visibilitychange', onHide)\n window.addEventListener('beforeunload', () => monitorStore.getState().flush(true))\n\n if (config.debug) console.info('[FrontendMonitor] initialized', config)\n },\n\n capture(event: MonitorEvent): void {\n monitorStore.getState().push(event)\n },\n\n flush(): void {\n monitorStore.getState().flush()\n },\n\n destroy(): void {\n if (flushInterval !== null) { clearInterval(flushInterval); flushInterval = null }\n cleanupFns.forEach((fn) => fn())\n cleanupFns.length = 0\n },\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,aAAS,eAAe,UAAU,SAAS;AAEzC,UAAI,OAAO,YAAY,WAAW;AAChC,kBAAU,EAAE,SAAS,QAAQ;AAAA,MAC/B;AAEA,WAAK,oBAAoB,KAAK,MAAM,KAAK,UAAU,QAAQ,CAAC;AAC5D,WAAK,YAAY;AACjB,WAAK,WAAW,WAAW,CAAC;AAC5B,WAAK,gBAAgB,WAAW,QAAQ,gBAAgB;AACxD,WAAK,MAAM;AACX,WAAK,UAAU,CAAC;AAChB,WAAK,YAAY;AACjB,WAAK,oBAAoB;AACzB,WAAK,sBAAsB;AAC3B,WAAK,WAAW;AAChB,WAAK,kBAAkB;AACvB,WAAK,SAAS;AAEd,UAAI,KAAK,SAAS,SAAS;AACzB,aAAK,kBAAkB,KAAK,UAAU,MAAM,CAAC;AAAA,MAC/C;AAAA,IACF;AAtBS;AAuBT,WAAO,UAAU;AAEjB,mBAAe,UAAU,QAAQ,WAAW;AAC1C,WAAK,YAAY;AACjB,WAAK,YAAY,KAAK,kBAAkB,MAAM,CAAC;AAAA,IACjD;AAEA,mBAAe,UAAU,OAAO,WAAW;AACzC,UAAI,KAAK,UAAU;AACjB,qBAAa,KAAK,QAAQ;AAAA,MAC5B;AACA,UAAI,KAAK,QAAQ;AACf,qBAAa,KAAK,MAAM;AAAA,MAC1B;AAEA,WAAK,YAAkB,CAAC;AACxB,WAAK,kBAAkB;AAAA,IACzB;AAEA,mBAAe,UAAU,QAAQ,SAAS,KAAK;AAC7C,UAAI,KAAK,UAAU;AACjB,qBAAa,KAAK,QAAQ;AAAA,MAC5B;AAEA,UAAI,CAAC,KAAK;AACR,eAAO;AAAA,MACT;AACA,UAAI,eAAc,oBAAI,KAAK,GAAE,QAAQ;AACrC,UAAI,OAAO,cAAc,KAAK,mBAAmB,KAAK,eAAe;AACnE,aAAK,QAAQ,KAAK,GAAG;AACrB,aAAK,QAAQ,QAAQ,IAAI,MAAM,iCAAiC,CAAC;AACjE,eAAO;AAAA,MACT;AAEA,WAAK,QAAQ,KAAK,GAAG;AAErB,UAAI,UAAU,KAAK,UAAU,MAAM;AACnC,UAAI,YAAY,QAAW;AACzB,YAAI,KAAK,iBAAiB;AAExB,eAAK,QAAQ,OAAO,GAAG,KAAK,QAAQ,SAAS,CAAC;AAC9C,oBAAU,KAAK,gBAAgB,MAAM,EAAE;AAAA,QACzC,OAAO;AACL,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,UAAI,OAAO;AACX,WAAK,SAAS,WAAW,WAAW;AAClC,aAAK;AAEL,YAAI,KAAK,qBAAqB;AAC5B,eAAK,WAAW,WAAW,WAAW;AACpC,iBAAK,oBAAoB,KAAK,SAAS;AAAA,UACzC,GAAG,KAAK,iBAAiB;AAEzB,cAAI,KAAK,SAAS,OAAO;AACrB,iBAAK,SAAS,MAAM;AAAA,UACxB;AAAA,QACF;AAEA,aAAK,IAAI,KAAK,SAAS;AAAA,MACzB,GAAG,OAAO;AAEV,UAAI,KAAK,SAAS,OAAO;AACrB,aAAK,OAAO,MAAM;AAAA,MACtB;AAEA,aAAO;AAAA,IACT;AAEA,mBAAe,UAAU,UAAU,SAAS,IAAI,YAAY;AAC1D,WAAK,MAAM;AAEX,UAAI,YAAY;AACd,YAAI,WAAW,SAAS;AACtB,eAAK,oBAAoB,WAAW;AAAA,QACtC;AACA,YAAI,WAAW,IAAI;AACjB,eAAK,sBAAsB,WAAW;AAAA,QACxC;AAAA,MACF;AAEA,UAAI,OAAO;AACX,UAAI,KAAK,qBAAqB;AAC5B,aAAK,WAAW,WAAW,WAAW;AACpC,eAAK,oBAAoB;AAAA,QAC3B,GAAG,KAAK,iBAAiB;AAAA,MAC3B;AAEA,WAAK,mBAAkB,oBAAI,KAAK,GAAE,QAAQ;AAE1C,WAAK,IAAI,KAAK,SAAS;AAAA,IACzB;AAEA,mBAAe,UAAU,MAAM,SAAS,IAAI;AAC1C,cAAQ,IAAI,0CAA0C;AACtD,WAAK,QAAQ,EAAE;AAAA,IACjB;AAEA,mBAAe,UAAU,QAAQ,SAAS,IAAI;AAC5C,cAAQ,IAAI,4CAA4C;AACxD,WAAK,QAAQ,EAAE;AAAA,IACjB;AAEA,mBAAe,UAAU,QAAQ,eAAe,UAAU;AAE1D,mBAAe,UAAU,SAAS,WAAW;AAC3C,aAAO,KAAK;AAAA,IACd;AAEA,mBAAe,UAAU,WAAW,WAAW;AAC7C,aAAO,KAAK;AAAA,IACd;AAEA,mBAAe,UAAU,YAAY,WAAW;AAC9C,UAAI,KAAK,QAAQ,WAAW,GAAG;AAC7B,eAAO;AAAA,MACT;AAEA,UAAI,SAAS,CAAC;AACd,UAAI,YAAY;AAChB,UAAI,iBAAiB;AAErB,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,QAAQ,KAAK;AAC5C,YAAI,QAAQ,KAAK,QAAQ,CAAC;AAC1B,YAAI,UAAU,MAAM;AACpB,YAAI,SAAS,OAAO,OAAO,KAAK,KAAK;AAErC,eAAO,OAAO,IAAI;AAElB,YAAI,SAAS,gBAAgB;AAC3B,sBAAY;AACZ,2BAAiB;AAAA,QACnB;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;;;ACjKA;AAAA;AAAA,QAAI,iBAAiB;AAErB,YAAQ,YAAY,SAAS,SAAS;AACpC,UAAI,WAAW,QAAQ,SAAS,OAAO;AACvC,aAAO,IAAI,eAAe,UAAU;AAAA,QAChC,SAAS,YAAY,QAAQ,WAAW,QAAQ,YAAY;AAAA,QAC5D,OAAO,WAAW,QAAQ;AAAA,QAC1B,cAAc,WAAW,QAAQ;AAAA,MACrC,CAAC;AAAA,IACH;AAEA,YAAQ,WAAW,SAAS,SAAS;AACnC,UAAI,mBAAmB,OAAO;AAC5B,eAAO,CAAC,EAAE,OAAO,OAAO;AAAA,MAC1B;AAEA,UAAI,OAAO;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,YAAY,IAAI;AAAA,QAChB,YAAY;AAAA,QACZ,WAAW;AAAA,MACb;AACA,eAAS,OAAO,SAAS;AACvB,aAAK,GAAG,IAAI,QAAQ,GAAG;AAAA,MACzB;AAEA,UAAI,KAAK,aAAa,KAAK,YAAY;AACrC,cAAM,IAAI,MAAM,uCAAuC;AAAA,MACzD;AAEA,UAAI,WAAW,CAAC;AAChB,eAAS,IAAI,GAAG,IAAI,KAAK,SAAS,KAAK;AACrC,iBAAS,KAAK,KAAK,cAAc,GAAG,IAAI,CAAC;AAAA,MAC3C;AAEA,UAAI,WAAW,QAAQ,WAAW,CAAC,SAAS,QAAQ;AAClD,iBAAS,KAAK,KAAK,cAAc,GAAG,IAAI,CAAC;AAAA,MAC3C;AAGA,eAAS,KAAK,SAAS,GAAE,GAAG;AAC1B,eAAO,IAAI;AAAA,MACb,CAAC;AAED,aAAO;AAAA,IACT;AAEA,YAAQ,gBAAgB,SAAS,SAAS,MAAM;AAC9C,UAAI,SAAU,KAAK,YACd,KAAK,OAAO,IAAI,IACjB;AAEJ,UAAI,UAAU,KAAK,MAAM,SAAS,KAAK,IAAI,KAAK,YAAY,CAAC,IAAI,KAAK,IAAI,KAAK,QAAQ,OAAO,CAAC;AAC/F,gBAAU,KAAK,IAAI,SAAS,KAAK,UAAU;AAE3C,aAAO;AAAA,IACT;AAEA,YAAQ,OAAO,SAAS,KAAK,SAAS,SAAS;AAC7C,UAAI,mBAAmB,OAAO;AAC5B,kBAAU;AACV,kBAAU;AAAA,MACZ;AAEA,UAAI,CAAC,SAAS;AACZ,kBAAU,CAAC;AACX,iBAAS,OAAO,KAAK;AACnB,cAAI,OAAO,IAAI,GAAG,MAAM,YAAY;AAClC,oBAAQ,KAAK,GAAG;AAAA,UAClB;AAAA,QACF;AAAA,MACF;AAEA,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,YAAI,SAAW,QAAQ,CAAC;AACxB,YAAI,WAAW,IAAI,MAAM;AAEzB,YAAI,MAAM,KAAI,gCAAS,aAAaA,WAAU;AAC5C,cAAI,KAAW,QAAQ,UAAU,OAAO;AACxC,cAAI,OAAW,MAAM,UAAU,MAAM,KAAK,WAAW,CAAC;AACtD,cAAI,WAAW,KAAK,IAAI;AAExB,eAAK,KAAK,SAAS,KAAK;AACtB,gBAAI,GAAG,MAAM,GAAG,GAAG;AACjB;AAAA,YACF;AACA,gBAAI,KAAK;AACP,wBAAU,CAAC,IAAI,GAAG,UAAU;AAAA,YAC9B;AACA,qBAAS,MAAM,MAAM,SAAS;AAAA,UAChC,CAAC;AAED,aAAG,QAAQ,WAAW;AACpB,YAAAA,UAAS,MAAM,KAAK,IAAI;AAAA,UAC1B,CAAC;AAAA,QACH,GAlBc,iBAkBZ,KAAK,KAAK,QAAQ;AACpB,YAAI,MAAM,EAAE,UAAU;AAAA,MACxB;AAAA,IACF;AAAA;AAAA;;;ACnGA,IAAAC,iBAAA;AAAA;AAAA,WAAO,UAAU;AAAA;AAAA;;;ACAjB,SAAS,WAAW,KAAqB;AACvC,MAAI,OAAO;AACX,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,YAAQ,QAAQ,KAAK,OAAO,IAAI,WAAW,CAAC;AAC5C,WAAO,OAAO;AAAA,EAChB;AACA,SAAO,KAAK,IAAI,IAAI,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG;AACpD;AAPS;AAST,eAAsB,mBACpB,SACA,OACA,KACiB;AACjB,QAAM,MAAM,GAAG,OAAO,IAAI,KAAK,IAAI,GAAG;AACtC,MAAI,OAAO,WAAW,eAAe,OAAO,QAAQ;AAClD,QAAI;AACF,YAAM,OAAO,IAAI,YAAY,EAAE,OAAO,GAAG;AACzC,YAAM,MAAM,MAAM,OAAO,OAAO,OAAO,WAAW,IAAI;AACtD,aAAO,MAAM,KAAK,IAAI,WAAW,GAAG,CAAC,EAClC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC,EAC1C,KAAK,EAAE,EACP,MAAM,GAAG,EAAE;AAAA,IAChB,QAAQ;AAAA,IAAqB;AAAA,EAC/B;AACA,SAAO,WAAW,GAAG;AACvB;AAjBsB;;;ACTtB,IAAM,cAAc;AACpB,IAAM,iBAAiB,KAAK,KAAK,KAAK;AAEtC,SAAS,eAAuB;AAC9B,MAAI,OAAO,WAAW,eAAe,OAAO,YAAY;AACtD,WAAO,OAAO,WAAW;AAAA,EAC3B;AACA,SAAO,uCAAuC,QAAQ,SAAS,CAAC,MAAM;AACpE,UAAM,IAAK,KAAK,OAAO,IAAI,KAAM;AACjC,YAAQ,MAAM,MAAM,IAAK,IAAI,IAAO,GAAK,SAAS,EAAE;AAAA,EACtD,CAAC;AACH;AARS;AAUT,SAAS,UAAU,MAAc,OAAqB;AACpD,MAAI,OAAO,aAAa,YAAa;AACrC,WAAS,SAAS,GAAG,IAAI,IAAI,KAAK,mCAAmC,cAAc;AACrF;AAHS;AAKF,SAAS,eAAuB;AACrC,MAAI,OAAO,iBAAiB,YAAa,QAAO;AAChD,MAAI,KAAK,aAAa,QAAQ,WAAW;AACzC,MAAI,CAAC,IAAI;AACP,SAAK,aAAa;AAClB,iBAAa,QAAQ,aAAa,EAAE;AACpC,cAAU,aAAa,EAAE;AAAA,EAC3B;AACA,SAAO;AACT;AATgB;AAWT,SAAS,sBAA4B;AAC1C,QAAM,KAAK,aAAa;AACxB,MAAI,GAAI,WAAU,aAAa,EAAE;AACnC;AAHgB;;;AC7BhB,SAAS,mBAAmB;;;ACOrB,IAAM,WAAN,MAAM,SAAQ;AAAA,EAGnB,YAAY,QAAa;AACvB,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,aAAa,MAA+C;AAChE,UAAM,WAAW,MAAM,KAAK,OAAO,QAAQ,QAAQ,wBAAwB,EAAE,MAAM,KAAK,CAAC;AACzF,WAAO;AAAA,EACT;AAEF;AAjBqB;AAAd,IAAM,UAAN;;;ACiCA,IAAM,gBAAN,MAAM,cAA0C;AAAA,EACrD,MAAM,QAAiB,SAAgD;AACrE,UAAM,EAAE,QAAQ,KAAK,SAAS,MAAM,QAAQ,UAAU,WAAW,IAAI;AAGrE,QAAI,WAAW;AACf,QAAI,QAAQ;AACV,YAAM,eAAe,IAAI,gBAAgB;AACzC,aAAO,QAAQ,MAAM,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC/C,YAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,uBAAa,OAAO,KAAK,OAAO,KAAK,CAAC;AAAA,QACxC;AAAA,MACF,CAAC;AACD,YAAM,cAAc,aAAa,SAAS;AAC1C,UAAI,aAAa;AACf,mBAAW,IAAI,SAAS,GAAG,IAAI,GAAG,GAAG,IAAI,WAAW,KAAK,GAAG,GAAG,IAAI,WAAW;AAAA,MAChF;AAAA,IACF;AAGA,UAAM,eAAuC,EAAE,GAAG,QAAQ;AAG1D,QAAI;AAEJ,QAAI,UAAU;AAEZ,oBAAc;AAAA,IAEhB,WAAW,YAAY;AAErB,mBAAa,cAAc,IAAI;AAC/B,oBAAc;AAAA,IAChB,WAAW,MAAM;AAEf,mBAAa,cAAc,IAAI;AAC/B,oBAAc,KAAK,UAAU,IAAI;AAAA,IACnC;AAGA,UAAM,WAAW,MAAM,MAAM,UAAU;AAAA,MACrC;AAAA,MACA,SAAS;AAAA,MACT,MAAM;AAAA,MACN,aAAa;AAAA;AAAA,IACf,CAAC;AAGD,QAAI,OAAY;AAChB,UAAM,cAAc,SAAS,QAAQ,IAAI,cAAc;AAEvD,QAAI,SAAS,WAAW,OAAO,aAAa,SAAS,kBAAkB,GAAG;AACxE,aAAO,MAAM,SAAS,KAAK;AAAA,IAC7B,WAAW,SAAS,WAAW,KAAK;AAClC,aAAO,MAAM,SAAS,KAAK;AAAA,IAC7B;AAGA,UAAM,kBAA0C,CAAC;AACjD,aAAS,QAAQ,QAAQ,CAAC,OAAO,QAAQ;AACvC,sBAAgB,GAAG,IAAI;AAAA,IACzB,CAAC;AAED,WAAO;AAAA,MACL;AAAA,MACA,QAAQ,SAAS;AAAA,MACjB,YAAY,SAAS;AAAA,MACrB,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAtEuD;AAAhD,IAAM,eAAN;AAqFA,IAAM,yBAAN,MAAM,+BAA8B,aAAa;AAAA,EACtD,MAAM,QAAiB,SAAgD;AACrE,UAAM,YAAY,WAAW;AAC7B,eAAW,QAAQ,CAAC,OAA0B,SAC5C,UAAU,OAAO,EAAE,GAAG,MAAM,WAAW,KAAK,CAAC;AAC/C,QAAI;AACF,aAAO,MAAM,MAAM,QAAW,OAAO;AAAA,IACvC,UAAE;AACA,iBAAW,QAAQ;AAAA,IACrB;AAAA,EACF;AACF;AAXwD;AAAjD,IAAM,wBAAN;;;ACpGA,IAAM,YAAN,MAAM,kBAAiB,MAAM;AAAA,EAClC,YACS,YACA,YACA,UACA,KACP,SACA;AACA,UAAM,WAAW,QAAQ,UAAU,KAAK,UAAU,EAAE;AAN7C;AACA;AACA;AACA;AAIP,SAAK,OAAO;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,UAAsC;AACxC,QAAI,OAAO,KAAK,aAAa,YAAY,KAAK,aAAa,MAAM;AAC/D,aAAO,KAAK;AAAA,IACd;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,cAA+C;AACjD,UAAM,UAAU,KAAK;AACrB,QAAI,CAAC,QAAS,QAAO;AAGrB,UAAM,cAAwC,CAAC;AAC/C,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAClD,UAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,oBAAY,GAAG,IAAI;AAAA,MACrB;AAAA,IACF;AAEA,WAAO,OAAO,KAAK,WAAW,EAAE,SAAS,IAAI,cAAc;AAAA,EAC7D;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,eAAuB;AACzB,UAAM,UAAU,KAAK;AACrB,QAAI,CAAC,QAAS,QAAO,KAAK;AAG1B,QAAI,QAAQ,QAAQ;AAClB,aAAO,MAAM,QAAQ,QAAQ,MAAM,IAAI,QAAQ,OAAO,KAAK,IAAI,IAAI,OAAO,QAAQ,MAAM;AAAA,IAC1F;AAGA,QAAI,QAAQ,SAAS;AACnB,aAAO,OAAO,QAAQ,OAAO;AAAA,IAC/B;AAGA,UAAM,cAAc,KAAK;AACzB,QAAI,aAAa;AACf,YAAM,aAAa,OAAO,KAAK,WAAW,EAAE,CAAC;AAC7C,UAAI,YAAY;AACd,eAAO,GAAG,UAAU,KAAK,YAAY,UAAU,GAAG,KAAK,IAAI,CAAC;AAAA,MAC9D;AAAA,IACF;AAEA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA,EAGA,IAAI,oBAA6B;AAAE,WAAO,KAAK,eAAe;AAAA,EAAK;AAAA,EACnE,IAAI,cAAuB;AAAE,WAAO,KAAK,eAAe;AAAA,EAAK;AAAA,EAC7D,IAAI,oBAA6B;AAAE,WAAO,KAAK,eAAe;AAAA,EAAK;AAAA,EACnE,IAAI,kBAA2B;AAAE,WAAO,KAAK,eAAe;AAAA,EAAK;AAAA,EACjE,IAAI,gBAAyB;AAAE,WAAO,KAAK,cAAc,OAAO,KAAK,aAAa;AAAA,EAAK;AACzF;AA9EoC;AAA7B,IAAM,WAAN;AAmFA,IAAM,gBAAN,MAAM,sBAAqB,MAAM;AAAA,EACtC,YACE,SACO,KACA,eACP;AACA,UAAM,OAAO;AAHN;AACA;AAGP,SAAK,OAAO;AAAA,EACd;AACF;AATwC;AAAjC,IAAM,eAAN;;;AClGP,SAA+B,qBAAqB;AA0DpD,IAAM,iBAA+B;AAAA,EACnC,SAAS;AAAA,EACT,aAAa;AAAA,EACb,cAAc;AAAA,EACd,WAAW;AAAA,EACX,WAAW;AAAA,EACX,YAAY;AACd;AAKA,IAAM,oBAAoB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAKO,IAAM,aAAN,MAAM,WAAU;AAAA,EAIrB,YAAY,SAAgC,CAAC,GAAG;AAC9C,SAAK,SAAS,EAAE,GAAG,gBAAgB,GAAG,OAAO;AAC7C,SAAK,UAAU,OAAO,WAAW,cAAc;AAAA,MAC7C,OAAO,KAAK,OAAO,UAAU,IAAI;AAAA,IACnC,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,SAAe;AACb,SAAK,OAAO,UAAU;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,UAAgB;AACd,SAAK,OAAO,UAAU;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,QAAqC;AAC7C,SAAK,SAAS,EAAE,GAAG,KAAK,QAAQ,GAAG,OAAO;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA,EAKQ,cAAc,SAA0D;AAC9E,QAAI,CAAC,QAAS,QAAO,CAAC;AAEtB,UAAM,WAAmC,CAAC;AAC1C,WAAO,KAAK,OAAO,EAAE,QAAQ,CAAC,QAAQ;AACpC,YAAM,WAAW,IAAI,YAAY;AACjC,UAAI,kBAAkB,SAAS,QAAQ,GAAG;AACxC,iBAAS,GAAG,IAAI;AAAA,MAClB,OAAO;AACL,iBAAS,GAAG,IAAI,QAAQ,GAAG,KAAK;AAAA,MAClC;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,SAA2B;AACpC,QAAI,CAAC,KAAK,OAAO,WAAW,CAAC,KAAK,OAAO,YAAa;AAEtD,UAAM,EAAE,QAAQ,KAAK,SAAS,KAAK,IAAI;AAEvC,SAAK,QAAQ,MAAM,GAAG,MAAM,IAAI,GAAG,EAAE;AAErC,QAAI,KAAK,OAAO,cAAc,SAAS;AACrC,WAAK,QAAQ,MAAM,YAAY,KAAK,cAAc,OAAO,CAAC;AAAA,IAC5D;AAEA,QAAI,KAAK,OAAO,aAAa,MAAM;AACjC,WAAK,QAAQ,MAAM,SAAS,IAAI;AAAA,IAClC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,YAAY,SAAqB,UAA6B;AAC5D,QAAI,CAAC,KAAK,OAAO,WAAW,CAAC,KAAK,OAAO,aAAc;AAEvD,UAAM,EAAE,QAAQ,IAAI,IAAI;AACxB,UAAM,EAAE,QAAQ,YAAY,MAAM,SAAS,IAAI;AAE/C,UAAM,cAAc,UAAU,MAAM,QAChC,UAAU,MAAM,WAChB,UAAU,MAAM,SAChB;AAEJ,SAAK,QAAQ;AAAA,MACX,GAAG,MAAM,IAAI,GAAG,IAAI,MAAM,IAAI,UAAU,KAAK,QAAQ;AAAA,IACvD;AAEA,QAAI,KAAK,OAAO,aAAa,MAAM;AACjC,WAAK,QAAQ,MAAM,aAAa,IAAI;AAAA,IACtC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,SAAqB,OAAuB;AACnD,QAAI,CAAC,KAAK,OAAO,WAAW,CAAC,KAAK,OAAO,UAAW;AAEpD,UAAM,EAAE,QAAQ,IAAI,IAAI;AACxB,UAAM,EAAE,SAAS,YAAY,aAAa,SAAS,IAAI;AAEvD,SAAK,QAAQ;AAAA,MACX,GAAG,MAAM,IAAI,GAAG,IAAI,cAAc,SAAS,WAAW,QAAQ;AAAA,IAChE;AAEA,SAAK,QAAQ,MAAM,YAAY,OAAO;AAEtC,QAAI,eAAe,OAAO,KAAK,WAAW,EAAE,SAAS,GAAG;AACtD,WAAK,QAAQ,MAAM,eAAe;AAClC,aAAO,QAAQ,WAAW,EAAE,QAAQ,CAAC,CAAC,OAAO,MAAM,MAAM;AACvD,eAAO,QAAQ,CAAC,QAAQ;AACtB,eAAK,QAAQ,MAAM,YAAO,KAAK,KAAK,GAAG,EAAE;AAAA,QAC3C,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,YAAoB,MAAmB;AAC1C,QAAI,CAAC,KAAK,OAAO,QAAS;AAC1B,SAAK,QAAQ,KAAK,SAAS,GAAG,IAAI;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,YAAoB,MAAmB;AAC1C,QAAI,CAAC,KAAK,OAAO,QAAS;AAC1B,SAAK,QAAQ,KAAK,SAAS,GAAG,IAAI;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAoB,MAAmB;AAC3C,QAAI,CAAC,KAAK,OAAO,QAAS;AAC1B,SAAK,QAAQ,MAAM,SAAS,GAAG,IAAI;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAoB,MAAmB;AAC3C,QAAI,CAAC,KAAK,OAAO,QAAS;AAC1B,SAAK,QAAQ,MAAM,SAAS,GAAG,IAAI;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,YAAoB,MAAmB;AAC7C,QAAI,CAAC,KAAK,OAAO,QAAS;AAC1B,SAAK,QAAQ,QAAQ,SAAS,GAAG,IAAI;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,KAA8B;AACpC,WAAO,KAAK,QAAQ,QAAQ,GAAG;AAAA,EACjC;AACF;AApKuB;AAAhB,IAAM,YAAN;AAyKA,IAAM,gBAAgB,IAAI,UAAU;;;ACpQ3C,mBAAkB;;;ACAlB,IAAM,iBAAiB,OAAO,UAAU;AAExC,IAAM,UAAU,kCAAS,eAAe,KAAK,KAAK,MAAM,kBAAxC;AAEhB,IAAM,gBAAgB,oBAAI,IAAI;AAAA,EAC7B;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AACD,CAAC;AAEc,SAAR,eAAgC,OAAO;AAC7C,QAAM,UAAU,SACZ,QAAQ,KAAK,KACb,MAAM,SAAS,eACf,OAAO,MAAM,YAAY;AAE7B,MAAI,CAAC,SAAS;AACb,WAAO;AAAA,EACR;AAEA,QAAM,EAAC,SAAS,MAAK,IAAI;AAGzB,MAAI,YAAY,eAAe;AAC9B,WAAO,UAAU,UAEb,yBAAyB;AAAA,EAC9B;AAGA,MAAI,QAAQ,WAAW,+BAA+B,GAAG;AACxD,WAAO;AAAA,EACR;AAGA,SAAO,cAAc,IAAI,OAAO;AACjC;AA1BwB;;;ADbjB,IAAM,cAAN,MAAM,oBAAmB,MAAM;AAAA,EACrC,YAAY,SAAS;AACpB,UAAM;AAEN,QAAI,mBAAmB,OAAO;AAC7B,WAAK,gBAAgB;AACrB,OAAC,EAAC,QAAO,IAAI;AAAA,IACd,OAAO;AACN,WAAK,gBAAgB,IAAI,MAAM,OAAO;AACtC,WAAK,cAAc,QAAQ,KAAK;AAAA,IACjC;AAEA,SAAK,OAAO;AACZ,SAAK,UAAU;AAAA,EAChB;AACD;AAfsC;AAA/B,IAAM,aAAN;AAiBP,IAAM,0BAA0B,wBAAC,OAAO,eAAe,YAAY;AAElE,QAAM,cAAc,QAAQ,WAAW,gBAAgB;AAEvD,QAAM,gBAAgB;AACtB,QAAM,cAAc;AACpB,SAAO;AACR,GAPgC;AAShC,eAAO,OAA8B,OAAO,SAAS;AACpD,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACvC,cAAU,EAAC,GAAG,QAAO;AACrB,YAAQ,oBAAR,QAAQ,kBAAoB,MAAM;AAAA,IAAC;AACnC,YAAQ,gBAAR,QAAQ,cAAgB,MAAM;AAC9B,YAAQ,YAAR,QAAQ,UAAY;AAEpB,UAAM,YAAY,aAAAC,QAAM,UAAU,OAAO;AAEzC,UAAM,eAAe,6BAAM;AAC1B,gBAAU,KAAK;AACf,aAAO,QAAQ,QAAQ,MAAM;AAAA,IAC9B,GAHqB;AAKrB,QAAI,QAAQ,UAAU,CAAC,QAAQ,OAAO,SAAS;AAC9C,cAAQ,OAAO,iBAAiB,SAAS,cAAc,EAAC,MAAM,KAAI,CAAC;AAAA,IACpE;AAEA,UAAM,UAAU,6BAAM;AACrB,cAAQ,QAAQ,oBAAoB,SAAS,YAAY;AACzD,gBAAU,KAAK;AAAA,IAChB,GAHgB;AAKhB,cAAU,QAAQ,OAAM,kBAAiB;AACxC,UAAI;AACH,cAAM,SAAS,MAAM,MAAM,aAAa;AACxC,gBAAQ;AACR,gBAAQ,MAAM;AAAA,MACf,SAAS,OAAO;AACf,YAAI;AACH,cAAI,EAAE,iBAAiB,QAAQ;AAC9B,kBAAM,IAAI,UAAU,0BAA0B,KAAK,kCAAkC;AAAA,UACtF;AAEA,cAAI,iBAAiB,YAAY;AAChC,kBAAM,MAAM;AAAA,UACb;AAEA,cAAI,iBAAiB,aAAa,CAAC,eAAe,KAAK,GAAG;AACzD,kBAAM;AAAA,UACP;AAEA,kCAAwB,OAAO,eAAe,OAAO;AAErD,cAAI,CAAE,MAAM,QAAQ,YAAY,KAAK,GAAI;AACxC,sBAAU,KAAK;AACf,mBAAO,KAAK;AAAA,UACb;AAEA,gBAAM,QAAQ,gBAAgB,KAAK;AAEnC,cAAI,CAAC,UAAU,MAAM,KAAK,GAAG;AAC5B,kBAAM,UAAU,UAAU;AAAA,UAC3B;AAAA,QACD,SAAS,YAAY;AACpB,kCAAwB,YAAY,eAAe,OAAO;AAC1D,kBAAQ;AACR,iBAAO,UAAU;AAAA,QAClB;AAAA,MACD;AAAA,IACD,CAAC;AAAA,EACF,CAAC;AACF;AA9D8B;;;AEyCvB,IAAM,uBAA8C;AAAA,EACzD,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,iBAAiB,6BAAM;AAAA,EAAC,GAAP;AACnB;AAkBO,SAAS,YAAY,OAAqB;AAE/C,MAAI,iBAAiB,cAAc;AACjC,WAAO;AAAA,EACT;AAGA,MAAI,iBAAiB,UAAU;AAC7B,UAAM,SAAS,MAAM;AAGrB,QAAI,UAAU,OAAO,SAAS,KAAK;AACjC,aAAO;AAAA,IACT;AAGA,QAAI,WAAW,KAAK;AAClB,aAAO;AAAA,IACT;AAGA,WAAO;AAAA,EACT;AAGA,SAAO;AACT;AA1BgB;AA2ChB,eAAsB,UACpB,IACA,QACY;AACZ,QAAM,cAAc,EAAE,GAAG,sBAAsB,GAAG,OAAO;AAEzD,SAAO;AAAA,IACL,YAAY;AACV,UAAI;AACF,eAAO,MAAM,GAAG;AAAA,MAClB,SAAS,OAAO;AAEd,YAAI,CAAC,YAAY,KAAK,GAAG;AAEvB,gBAAM,IAAI,WAAW,KAAc;AAAA,QACrC;AAGA,cAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA;AAAA,MACE,SAAS,YAAY;AAAA,MACrB,QAAQ,YAAY;AAAA,MACpB,YAAY,YAAY;AAAA,MACxB,YAAY,YAAY;AAAA,MACxB,WAAW,YAAY;AAAA,MACvB,iBAAiB,YAAY,kBAAkB,CAAC,UAAU;AAExD,cAAM,cAAc;AACpB,oBAAY,gBAAiB;AAAA,UAC3B,OAAO;AAAA,UACP,eAAe,YAAY;AAAA,UAC3B,aAAa,YAAY;AAAA,QAC3B,CAAC;AAAA,MACH,IAAI;AAAA,IACN;AAAA,EACF;AACF;AAtCsB;;;ACpHf,IAAM,aAAN,MAAM,WAAU;AAAA,EAUrB,YACE,SACA,SAMA;AAfF,SAAQ,SAA2B;AACnC,SAAQ,cAAkC;AAC1C,SAAQ,cAA4C;AAclD,SAAK,UAAU,QAAQ,QAAQ,OAAO,EAAE;AACxC,SAAK,aAAa,SAAS,cAAc,IAAI,aAAa;AAC1D,SAAK,cAAc,SAAS,eAAe;AAG3C,QAAI,SAAS,iBAAiB,QAAW;AACvC,WAAK,SAAS,IAAI,UAAU,QAAQ,YAAY;AAAA,IAClD;AAGA,QAAI,SAAS,gBAAgB,QAAW;AACtC,WAAK,cAAc,QAAQ;AAAA,IAC7B;AAGA,SAAK,UAAU,IAAI,QAAQ,IAAI;AAAA,EACjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,eAA8B;AAC5B,UAAM,OAAO;AACb,UAAM,QAAQ,KAAK,SAAS,MAAM;AAClC,UAAM,QAAQ,MAAM,MAAM,KAAK,IAAI,GAAG;AACtC,QAAI,MAAM,WAAW,GAAG;AACtB,aAAO,MAAM,IAAI,GAAG,MAAM,GAAG,EAAE,MAAM,KAAK;AAAA,IAC5C;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,aAAqB;AACnB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAA0B;AACxB,WAAO,KAAK,cAAc,KAAK,YAAY,IAAI;AAAA,EACjD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,QACJ,QACA,MACA,SAOY;AAEZ,QAAI,KAAK,aAAa;AACpB,aAAO,UAAU,MAAM,KAAK,aAAgB,QAAQ,MAAM,OAAO,GAAG;AAAA,QAClE,GAAG,KAAK;AAAA,QACR,iBAAiB,wBAAC,SAAS;AAEzB,cAAI,KAAK,QAAQ;AACf,iBAAK,OAAO;AAAA,cACV,iBAAiB,KAAK,aAAa,IAAI,KAAK,cAAc,KAAK,aAAa,QACrE,MAAM,IAAI,IAAI,KAAK,KAAK,MAAM,OAAO;AAAA,YAC9C;AAAA,UACF;AAEA,eAAK,aAAa,kBAAkB,IAAI;AAAA,QAC1C,GAViB;AAAA,MAWnB,CAAC;AAAA,IACH;AAGA,WAAO,KAAK,aAAgB,QAAQ,MAAM,OAAO;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAc,aACZ,QACA,MACA,SAOY;AAGZ,UAAM,MAAM,KAAK,UAAU,GAAG,KAAK,OAAO,GAAG,IAAI,KAAK;AACtD,UAAM,YAAY,KAAK,IAAI;AAG3B,UAAM,UAAkC;AAAA,MACtC,GAAI,SAAS,WAAW,CAAC;AAAA,IAC3B;AAGA,QAAI,CAAC,SAAS,YAAY,CAAC,SAAS,cAAc,CAAC,QAAQ,cAAc,GAAG;AAC1E,cAAQ,cAAc,IAAI;AAAA,IAC5B;AAMA,QAAI,KAAK,QAAQ;AACf,WAAK,OAAO,WAAW;AAAA,QACrB;AAAA,QACA;AAAA,QACA;AAAA,QACA,MAAM,SAAS,YAAY,SAAS;AAAA,QACpC,WAAW;AAAA,MACb,CAAC;AAAA,IACH;AAEA,QAAI;AAEF,YAAM,WAAW,MAAM,KAAK,WAAW,QAAW;AAAA,QAChD;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ,SAAS;AAAA,QACjB,MAAM,SAAS;AAAA,QACf,UAAU,SAAS;AAAA,QACnB,YAAY,SAAS;AAAA,MACvB,CAAC;AAED,YAAM,WAAW,KAAK,IAAI,IAAI;AAG9B,UAAI,SAAS,UAAU,KAAK;AAC1B,cAAM,QAAQ,IAAI;AAAA,UAChB,SAAS;AAAA,UACT,SAAS;AAAA,UACT,SAAS;AAAA,UACT;AAAA,QACF;AAGA,YAAI,KAAK,QAAQ;AACf,eAAK,OAAO;AAAA,YACV;AAAA,cACE;AAAA,cACA;AAAA,cACA;AAAA,cACA,MAAM,SAAS,YAAY,SAAS;AAAA,cACpC,WAAW;AAAA,YACb;AAAA,YACA;AAAA,cACE,SAAS,MAAM;AAAA,cACf,YAAY,SAAS;AAAA,cACrB;AAAA,cACA,WAAW,KAAK,IAAI;AAAA,YACtB;AAAA,UACF;AAAA,QACF;AAEA,cAAM;AAAA,MACR;AAGA,UAAI,KAAK,QAAQ;AACf,aAAK,OAAO;AAAA,UACV;AAAA,YACE;AAAA,YACA;AAAA,YACA;AAAA,YACA,MAAM,SAAS,YAAY,SAAS;AAAA,YACpC,WAAW;AAAA,UACb;AAAA,UACA;AAAA,YACE,QAAQ,SAAS;AAAA,YACjB,YAAY,SAAS;AAAA,YACrB,MAAM,SAAS;AAAA,YACf;AAAA,YACA,WAAW,KAAK,IAAI;AAAA,UACtB;AAAA,QACF;AAAA,MACF;AAEA,aAAO,SAAS;AAAA,IAClB,SAAS,OAAO;AACd,YAAM,WAAW,KAAK,IAAI,IAAI;AAG9B,UAAI,iBAAiB,UAAU;AAC7B,cAAM;AAAA,MACR;AAGA,YAAM,cAAc,iBAAiB,cAClC,MAAM,QAAQ,YAAY,EAAE,SAAS,MAAM,KAC3C,MAAM,QAAQ,YAAY,EAAE,SAAS,iBAAiB,KACtD,MAAM,QAAQ,YAAY,EAAE,SAAS,wBAAwB;AAGhE,UAAI,KAAK,QAAQ;AACf,YAAI,aAAa;AACf,eAAK,OAAO,MAAM,yBAAkB,MAAM,IAAI,GAAG,EAAE;AACnD,eAAK,OAAO,MAAM,YAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AACjF,eAAK,OAAO,MAAM,6DAAwD;AAAA,QAC5E,OAAO;AACL,eAAK,OAAO,MAAM,gCAAsB,MAAM,IAAI,GAAG,EAAE;AACvD,eAAK,OAAO,MAAM,YAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AAAA,QACnF;AAAA,MACF;AAGA,UAAI,OAAO,WAAW,aAAa;AACjC,YAAI;AACF,cAAI,aAAa;AAEf,mBAAO,cAAc,IAAI,YAAY,cAAc;AAAA,cACjD,QAAQ;AAAA,gBACN;AAAA,gBACA;AAAA,gBACA,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,gBAC5D,WAAW,oBAAI,KAAK;AAAA,cACtB;AAAA,cACA,SAAS;AAAA,cACT,YAAY;AAAA,YACd,CAAC,CAAC;AAAA,UACJ,OAAO;AAEL,mBAAO,cAAc,IAAI,YAAY,iBAAiB;AAAA,cACpD,QAAQ;AAAA,gBACN;AAAA,gBACA;AAAA,gBACA,OAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAAA,gBAC5D,WAAW,oBAAI,KAAK;AAAA,cACtB;AAAA,cACA,SAAS;AAAA,cACT,YAAY;AAAA,YACd,CAAC,CAAC;AAAA,UACJ;AAAA,QACF,SAAS,YAAY;AAAA,QAErB;AAAA,MACF;AAGA,YAAM,eAAe,iBAAiB,QAClC,IAAI,aAAa,MAAM,SAAS,KAAK,KAAK,IAC1C,IAAI,aAAa,iBAAiB,GAAG;AAGzC,UAAI,KAAK,QAAQ;AACf,aAAK,OAAO;AAAA,UACV;AAAA,YACE;AAAA,YACA;AAAA,YACA;AAAA,YACA,MAAM,SAAS,YAAY,SAAS;AAAA,YACpC,WAAW;AAAA,UACb;AAAA,UACA;AAAA,YACE,SAAS,aAAa;AAAA,YACtB;AAAA,YACA,WAAW,KAAK,IAAI;AAAA,UACtB;AAAA,QACF;AAAA,MACF;AAEA,YAAM;AAAA,IACR;AAAA,EACF;AACF;AA3SuB;AAAhB,IAAM,YAAN;;;ACOA,IAAM,uBAAN,MAAM,qBAA8C;AAAA,EAGzD,YAAY,QAAoB;AAC9B,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,QAAQ,KAA4B;AAClC,QAAI;AACF,UAAI,OAAO,WAAW,eAAe,OAAO,cAAc;AACxD,cAAM,QAAQ,aAAa,QAAQ,GAAG;AACtC,aAAK,QAAQ,MAAM,yBAAyB,GAAG,OAAO,QAAQ,UAAU,WAAW,EAAE;AACrF,eAAO;AAAA,MACT;AACA,WAAK,QAAQ,KAAK,8DAA8D;AAAA,IAClF,SAAS,OAAO;AACd,WAAK,QAAQ,MAAM,gCAAgC,KAAK;AAAA,IAC1D;AACA,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,KAAa,OAAqB;AACxC,QAAI;AACF,UAAI,OAAO,WAAW,eAAe,OAAO,cAAc;AACxD,qBAAa,QAAQ,KAAK,KAAK;AAC/B,aAAK,QAAQ,MAAM,yBAAyB,GAAG,aAAa;AAAA,MAC9D,OAAO;AACL,aAAK,QAAQ,KAAK,8DAA8D;AAAA,MAClF;AAAA,IACF,SAAS,OAAO;AACd,WAAK,QAAQ,MAAM,gCAAgC,KAAK;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,WAAW,KAAmB;AAC5B,QAAI;AACF,UAAI,OAAO,WAAW,eAAe,OAAO,cAAc;AACxD,qBAAa,WAAW,GAAG;AAC3B,aAAK,QAAQ,MAAM,4BAA4B,GAAG,aAAa;AAAA,MACjE,OAAO;AACL,aAAK,QAAQ,KAAK,8DAA8D;AAAA,MAClF;AAAA,IACF,SAAS,OAAO;AACd,WAAK,QAAQ,MAAM,mCAAmC,KAAK;AAAA,IAC7D;AAAA,EACF;AACF;AA9C2D;AAApD,IAAM,sBAAN;AA8GA,IAAM,wBAAN,MAAM,sBAA+C;AAAA,EAI1D,YAAY,QAAoB;AAHhC,SAAQ,UAA+B,oBAAI,IAAI;AAI7C,SAAK,SAAS;AAAA,EAChB;AAAA,EAEA,QAAQ,KAA4B;AAClC,UAAM,QAAQ,KAAK,QAAQ,IAAI,GAAG,KAAK;AACvC,SAAK,QAAQ,MAAM,0BAA0B,GAAG,OAAO,QAAQ,UAAU,WAAW,EAAE;AACtF,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,KAAa,OAAqB;AACxC,SAAK,QAAQ,IAAI,KAAK,KAAK;AAC3B,SAAK,QAAQ,MAAM,0BAA0B,GAAG,aAAa;AAAA,EAC/D;AAAA,EAEA,WAAW,KAAmB;AAC5B,SAAK,QAAQ,OAAO,GAAG;AACvB,SAAK,QAAQ,MAAM,6BAA6B,GAAG,aAAa;AAAA,EAClE;AACF;AAvB4D;AAArD,IAAM,uBAAN;;;AC/HA,IAAK,sCAAL,kBAAKC,yCAAL;AACL,EAAAA,qCAAA,WAAQ;AACR,EAAAA,qCAAA,aAAU;AACV,EAAAA,qCAAA,UAAO;AACP,EAAAA,qCAAA,eAAY;AACZ,EAAAA,qCAAA,iBAAc;AACd,EAAAA,qCAAA,mBAAgB;AAChB,EAAAA,qCAAA,cAAW;AACX,EAAAA,qCAAA,aAAU;AARA,SAAAA;AAAA,GAAA;AAiBL,IAAK,kCAAL,kBAAKC,qCAAL;AACL,EAAAA,iCAAA,WAAQ;AACR,EAAAA,iCAAA,UAAO;AACP,EAAAA,iCAAA,UAAO;AACP,EAAAA,iCAAA,WAAQ;AAJE,SAAAA;AAAA,GAAA;;;ACvBZ,SAAS,SAAS;AAMX,IAAM,mCAAmC,EAAE,OAAO;AAAA,EACvD,YAAY,EAAE,WAAiB,mCAAmC;AAAA,EAClE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,IAAI,GAAI;AAAA,EACnC,OAAO,EAAE,WAAiB,+BAA+B,EAAE,SAAS;AAAA,EACpE,aAAa,EAAE,OAAO,EAAE,IAAI,GAAK,EAAE,SAAS;AAAA,EAC5C,KAAK,EAAE,OAAO,EAAE,IAAI,GAAI,EAAE,SAAS;AAAA,EACnC,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS;AAAA,EACzC,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS;AAAA,EAClD,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS;AAAA,EACzC,UAAU,EAAE,OAAO,EAAE,IAAI,GAAI,EAAE,SAAS;AAAA,EACxC,YAAY,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EACzC,YAAY,EAAE,OAAO,EAAE,MAAM,iEAAiE,EAAE,SAAS,EAAE,SAAS;AAAA,EACpH,qBAAqB,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS;AAAA,EACjD,OAAO,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,IAAI,CAAC,EAAE,SAAS;AAAA,EAC9C,cAAc,EAAE,OAAO,EAAE,IAAI,GAAG,EAAE,SAAS;AAAA,EAC3C,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,SAAS;AAC3C,CAAC;;;ACtBD,SAAS,KAAAC,UAAS;AAMX,IAAM,2BAA2BC,GAAE,OAAO;AAAA,EAC/C,QAAQA,GAAE,MAAM,gCAAgC;AAClD,CAAC;;;ACuFM,IAAM,YAAY;AAClB,IAAM,oBAAoB;AAGjC,SAAS,eAA8B;AACrC,MAAI;AACF,QAAI,OAAO,aAAa,aAAa;AACnC,YAAM,QAAQ,SAAS,OAAO,MAAM,+BAA+B;AACnE,UAAI,MAAO,QAAO,MAAM,CAAC;AAAA,IAC3B;AACA,QAAI,OAAO,cAAc,eAAe,UAAU,UAAU;AAC1D,aAAO,UAAU;AAAA,IACnB;AAAA,EACF,QAAQ;AAAA,EAAC;AACT,SAAO;AACT;AAXS;AA0BF,IAAM,OAAN,MAAM,KAAI;AAAA,EAYf,YAAY,SAAiB,SAAsB;AATnD,SAAQ,SAAwB;AAChC,SAAQ,gBAA+B;AACvC,SAAQ,UAAyB;AAQ/B,SAAK,UAAU;AACf,SAAK,UAAU;AAGf,UAAM,SAAS,SAAS,eAAe,IAAI,UAAU,QAAQ,YAAY,IAAI;AAG7E,SAAK,UAAU,SAAS,WAAW,IAAI,oBAAoB,MAAM;AAEjE,SAAK,UAAU,SAAS,UAAU;AAElC,SAAK,uBAAuB;AAG5B,SAAK,UAAU,IAAI,UAAU,KAAK,SAAS;AAAA,MACzC,YAAY,KAAK,SAAS;AAAA,MAC1B,aAAa,KAAK,SAAS;AAAA,MAC3B,cAAc,KAAK,SAAS;AAAA,MAC5B,aAAa,6BAAM,KAAK,SAAS,GAApB;AAAA,IACf,CAAC;AAGD,SAAK,kBAAkB;AAGvB,SAAK,UAAU,KAAK,QAAQ;AAAA,EAC9B;AAAA,EAEQ,yBAA+B;AACrC,SAAK,SAAS,KAAK,QAAQ,QAAQ,SAAS;AAC5C,SAAK,gBAAgB,KAAK,QAAQ,QAAQ,iBAAiB;AAAA,EAC7D;AAAA,EAEQ,iBAAuB;AAC7B,SAAK,UAAU,IAAI,UAAU,KAAK,SAAS;AAAA,MACzC,YAAY,KAAK,SAAS;AAAA,MAC1B,aAAa,KAAK,SAAS;AAAA,MAC3B,cAAc,KAAK,SAAS;AAAA,MAC5B,aAAa,6BAAM,KAAK,SAAS,GAApB;AAAA,IACf,CAAC;AAGD,SAAK,kBAAkB;AAGvB,SAAK,UAAU,KAAK,QAAQ;AAAA,EAC9B;AAAA,EAEQ,oBAA0B;AAEhC,UAAM,kBAAkB,KAAK,QAAQ,QAAQ,KAAK,KAAK,OAAO;AAC9D,SAAK,QAAQ,UAAU,OACrB,QACA,MACA,YACe;AAEf,YAAM,QAAQ,KAAK,SAAS;AAC5B,YAAM,SAAS,KAAK,WAAW,aAAa;AAC5C,YAAM,gBAAgB;AAAA,QACpB,GAAG;AAAA,QACH,SAAS;AAAA,UACP,GAAI,SAAS,WAAW,CAAC;AAAA,UACzB,GAAI,QAAQ,EAAE,iBAAiB,UAAU,KAAK,GAAG,IAAI,CAAC;AAAA,UACtD,GAAI,SAAS,EAAE,mBAAmB,OAAO,IAAI,CAAC;AAAA,QAChD;AAAA,MACF;AAEA,aAAO,gBAAgB,QAAQ,MAAM,aAAa;AAAA,IACpD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,WAA0B;AACxB,WAAO,KAAK,QAAQ,QAAQ,SAAS;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,kBAAiC;AAC/B,WAAO,KAAK,QAAQ,QAAQ,iBAAiB;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,OAAe,cAA6B;AACnD,SAAK,SAAS;AACd,SAAK,QAAQ,QAAQ,WAAW,KAAK;AAErC,QAAI,cAAc;AAChB,WAAK,gBAAgB;AACrB,WAAK,QAAQ,QAAQ,mBAAmB,YAAY;AAAA,IACtD;AAGA,SAAK,eAAe;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKA,cAAoB;AAClB,SAAK,SAAS;AACd,SAAK,gBAAgB;AACrB,SAAK,QAAQ,WAAW,SAAS;AACjC,SAAK,QAAQ,WAAW,iBAAiB;AAGzC,SAAK,eAAe;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKA,kBAA2B;AACzB,WAAO,CAAC,CAAC,KAAK,SAAS;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,WAAW,KAAmB;AAC5B,SAAK,UAAU;AACf,SAAK,eAAe;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKA,aAAqB;AACnB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,UAAU,QAA6B;AACrC,SAAK,UAAU;AAAA,EACjB;AAAA;AAAA;AAAA;AAAA,EAKA,YAA2B;AACzB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,gBAAwB;AACtB,WAAO;AAAA,EACT;AACF;AAvLiB;AAAV,IAAM,MAAN;;;AC1HA,IAAM,aAAa,IAAI,IAAI,IAAI,EAAE,SAAS,IAAI,qBAAqB,EAAE,CAAC;AAEtE,SAAS,oBAAoB,SAAuB;AACzD,aAAW,WAAW,OAAO;AAC/B;AAFgB;AAIT,IAAM,cAAN,MAAM,YAAW;AAExB;AAFwB;AAAX,YACM,aAAa;AADzB,IAAM,aAAN;;;ACVP,IAAM,mBAAmB,IAAI,IAAI,IAAI;AAAA,EACnC,SAAS,IAAI,qBAAqB;AAAA,EAClC,YAAY,IAAI,sBAAsB;AACxC,CAAC;AAEM,SAAS,oBAA0B;AACxC,mBAAiB,WAAW,WAAW,WAAW,CAAC;AACrD;AAFgB;AAIhB,eAAsB,UACpB,OACA,YAAY,OACG;AACf,MAAI,MAAM,OAAO,WAAW,EAAG;AAE/B,MAAI;AACF,QAAI,WAAW;AACb,wBAAkB;AAClB,YAAM,iBAAiB,QAAQ,aAAa,KAAK;AAAA,IACnD,OAAO;AACL,YAAM,WAAW,QAAQ,aAAa,KAAK;AAAA,IAC7C;AAAA,EACF,QAAQ;AAAA,EAER;AACF;AAhBsB;;;AfDf,IAAM,eAAe,YAA0B,CAAC,KAAK,SAAS;AAAA,EACnE,QAAQ,CAAC;AAAA,EACT,QAAQ,CAAC;AAAA,EACT,aAAa;AAAA,EAEb,KAAK,OAAO;AACV,UAAM,EAAE,QAAQ,OAAO,IAAI,IAAI;AAC/B,UAAM,UAAU,OAAO,iBAAiB;AACxC,UAAM,OAAO,CAAC,GAAG,QAAQ,KAAK;AAC9B,QAAI,EAAE,QAAQ,KAAK,CAAC;AAEpB,QAAI,KAAK,UAAU,WAAW,MAAM,UAAU,SAAS;AACrD,UAAI,EAAE,MAAM;AAAA,IACd;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,OAAO;AACvB,UAAM,EAAE,OAAO,IAAI,IAAI;AACvB,QAAI,OAAO,WAAW,EAAG;AACzB,UAAM,QAAQ,OAAO,MAAM,GAAG,EAAE;AAChC,QAAI,EAAE,QAAQ,OAAO,MAAM,EAAE,EAAE,CAAC;AAChC,cAAU,EAAE,QAAQ,MAAM,GAAG,SAAS;AAAA,EACxC;AAAA,EAEA,UAAU,QAAQ;AAChB,QAAI,EAAE,QAAQ,aAAa,KAAK,CAAC;AAAA,EACnC;AACF,EAAE;;;AgBnCK,SAAS,wBAAoC;AAClD,MAAI,OAAO,WAAW,YAAa,QAAO,MAAM;AAAA,EAAC;AAEjD,QAAM,UAAU,8BACd,SACA,QACA,QACA,OACA,UACG;AACH,QAAI;AACF,YAAM,MAAM,OAAO,YAAY,WAAW,UAAU,OAAO,OAAO;AAClE,YAAM,QAAQ,OAAO,SAAS,MAAM,MAAM,IAAI,MAAM,IAAI,KAAK;AAC7D,YAAM,MAAM,OAAO,SAAS;AAC5B,YAAM,cAAc,MAAM,mBAAmB,KAAK,OAAO,GAAG;AAC5D,YAAM,EAAE,OAAO,IAAI,aAAa,SAAS;AACzC,mBAAa,SAAS,EAAE,KAAK;AAAA,QAC3B;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT,aAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA,YAAY,aAAa;AAAA,QACzB,YAAY,UAAU;AAAA,QACtB,cAAc,OAAO;AAAA,QACrB,aAAa,OAAO;AAAA,MACtB,CAAC;AAAA,IACH,QAAQ;AAAA,IAAoB;AAAA,EAC9B,GA1BgB;AA4BhB,QAAM,uBAAuB,8BAAO,MAA6B;AAC/D,QAAI;AACF,YAAM,SAAS,EAAE;AACjB,YAAM,MAAM,kBAAkB,QAAQ,OAAO,UACzC,OAAO,WAAW,WAAW,SAC7B;AACJ,YAAM,QAAQ,kBAAkB,QAAS,OAAO,SAAS,KAAM;AAC/D,YAAM,MAAM,OAAO,SAAS;AAC5B,YAAM,cAAc,MAAM,mBAAmB,KAAK,OAAO,GAAG;AAC5D,YAAM,EAAE,OAAO,IAAI,aAAa,SAAS;AACzC,mBAAa,SAAS,EAAE,KAAK;AAAA,QAC3B;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT,aAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA,YAAY,aAAa;AAAA,QACzB,YAAY,UAAU;AAAA,QACtB,cAAc,OAAO;AAAA,QACrB,aAAa,OAAO;AAAA,MACtB,CAAC;AAAA,IACH,QAAQ;AAAA,IAAoB;AAAA,EAC9B,GAvB6B;AAyB7B,QAAM,aAAa,wBAAC,MAAkB,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,GAA5E;AACnB,SAAO,iBAAiB,SAAS,UAAU;AAC3C,SAAO,iBAAiB,sBAAsB,oBAAoB;AAElE,SAAO,MAAM;AACX,WAAO,oBAAoB,SAAS,UAAU;AAC9C,WAAO,oBAAoB,sBAAsB,oBAAoB;AAAA,EACvE;AACF;AAhEgB;;;ACGhB,IAAM,WAAkE;AAAA,EACtE;AAAA,EACA;AACF;AACA,IAAM,UAAqE;AAAA,EACzE;AAAA,EACA;AACF;AAEA,SAAS,UAAU,MAAyB;AAC1C,SAAO,KAAK,IAAI,CAAC,MAAM;AACrB,QAAI,OAAO,MAAM,SAAU,QAAO;AAClC,QAAI,aAAa,MAAO,QAAO,EAAE;AACjC,QAAI;AAAE,aAAO,KAAK,UAAU,CAAC;AAAA,IAAE,QAAQ;AAAE,aAAO,OAAO,CAAC;AAAA,IAAE;AAAA,EAC5D,CAAC,EAAE,KAAK,GAAG;AACb;AANS;AAQT,eAAe,oBAAoB,OAAqB,MAAiB;AACvE,MAAI;AACF,UAAM,UAAU,UAAU,IAAI;AAC9B,UAAM,MAAM,OAAO,WAAW,cAAc,OAAO,SAAS,OAAO;AACnE,UAAM,cAAc,MAAM,mBAAmB,SAAS,IAAI,GAAG;AAC7D,UAAM,EAAE,OAAO,IAAI,aAAa,SAAS;AACzC,iBAAa,SAAS,EAAE,KAAK;AAAA,MAC3B,YAAY,QAAQ,KAAK;AAAA,MACzB,OAAO,SAAS,KAAK;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,MACA,YAAY,aAAa;AAAA,MACzB,YAAY,OAAO,cAAc,cAAc,UAAU,YAAY;AAAA,MACrE,cAAc,OAAO;AAAA,MACrB,aAAa,OAAO;AAAA,IACtB,CAAC;AAAA,EACH,QAAQ;AAAA,EAAoB;AAC9B;AAlBe;AAoBR,SAAS,wBAAoC;AAClD,MAAI,OAAO,WAAW,YAAa,QAAO,MAAM;AAAA,EAAC;AAEjD,MAAI;AACF,UAAM,IAAI;AACV,QAAI,EAAE,WAAW,OAAQ,EAAE,QAAsC,gBAAgB,YAAY;AAC3F,YAAM,cAAc,EAAE;AAItB,YAAM,WAAW;AAAA,QACf,IAAI,QAA4C;AAC9C,cAAI,OAAO,UAAU,EAAG,qBAAoB,SAAS,OAAO,IAAI;AAAA,mBACvD,OAAO,UAAU,EAAG,qBAAoB,QAAQ,OAAO,IAAI;AAAA,QACtE;AAAA,MACF;AACA,kBAAY,YAAY,QAAQ;AAChC,aAAO,MAAM,YAAY,eAAe,QAAQ;AAAA,IAClD;AAAA,EACF,QAAQ;AAAA,EAA8B;AAEtC,QAAM,WAAW,QAAQ,KAAK,KAAK,OAAO;AAC1C,QAAM,YAAY,QAAQ,MAAM,KAAK,OAAO;AAC5C,UAAQ,OAAO,IAAI,SAAoB;AAAE,aAAS,GAAG,IAAI;AAAG,wBAAoB,QAAQ,IAAI;AAAA,EAAE;AAC9F,UAAQ,QAAQ,IAAI,SAAoB;AAAE,cAAU,GAAG,IAAI;AAAG,wBAAoB,SAAS,IAAI;AAAA,EAAE;AACjG,SAAO,MAAM;AAAE,YAAQ,OAAO;AAAU,YAAQ,QAAQ;AAAA,EAAU;AACpE;AA1BgB;;;AClCT,SAAS,2BAAuC;AACrD,MAAI,OAAO,WAAW,YAAa,QAAO,MAAM;AAAA,EAAC;AAEjD,QAAM,UAAU,wBAAC,UAAiB;AAChC,QAAI,EAAE,iBAAiB,aAAc;AACrC,QAAI;AACF,YAAM,SAAS,MAAM;AACrB,YAAM,EAAE,OAAO,IAAI,aAAa,SAAS;AACzC,mBAAa,SAAS,EAAE,KAAK;AAAA,QAC3B;AAAA,QACA;AAAA,QACA,SAAS,2BAA2B,OAAO,SAAS,KAAK,OAAO,OAAO,WAAW,SAAS;AAAA,QAC3F,KAAK,OAAO,SAAS;AAAA,QACrB,aAAa,OAAO;AAAA,QACpB,UAAU,OAAO;AAAA,QACjB,YAAY,aAAa;AAAA,QACzB,YAAY,UAAU;AAAA,QACtB,cAAc,OAAO;AAAA,QACrB,aAAa,OAAO;AAAA,QACpB,OAAO,EAAE,WAAW,OAAO,WAAW,MAAM,OAAO,MAAM,QAAQ,OAAO,OAAO;AAAA,MACjF,CAAC;AAAA,IACH,QAAQ;AAAA,IAAoB;AAAA,EAC9B,GAnBgB;AAqBhB,SAAO,iBAAiB,wBAAwB,OAAO;AACvD,SAAO,MAAM,OAAO,oBAAoB,wBAAwB,OAAO;AACzE;AA1BgB;;;ACPhB,eAAsB,eACpB,OACA,MACmB;AACnB,QAAM,MAAM,OAAO,UAAU,WAAW,QAAQ,iBAAiB,MAAM,MAAM,OAAO,MAAM;AAC1F,QAAM,UAAU,MAAM,UAAU,OAAO,YAAY;AAEnD,MAAI;AACF,UAAM,WAAW,MAAM,MAAM,OAAO,IAAI;AACxC,QAAI,CAAC,SAAS,IAAI;AAChB,YAAM,EAAE,OAAO,IAAI,aAAa,SAAS;AACzC,mBAAa,SAAS,EAAE,KAAK;AAAA,QAC3B;AAAA,QACA,OAAO,SAAS,UAAU;AAAA,QAC1B,SAAS,QAAQ,SAAS,MAAM,IAAI,SAAS,UAAU,WAAM,MAAM,IAAI,GAAG;AAAA,QAC1E,KAAK,OAAO,WAAW,cAAc,OAAO,SAAS,OAAO;AAAA,QAC5D,aAAa,SAAS;AAAA,QACtB,aAAa;AAAA,QACb,UAAU;AAAA,QACV,YAAY,aAAa;AAAA,QACzB,YAAY,OAAO,cAAc,cAAc,UAAU,YAAY;AAAA,QACrE,cAAc,OAAO;AAAA,QACrB,aAAa,OAAO;AAAA,MACtB,CAAC;AAAA,IACH;AACA,WAAO;AAAA,EACT,SAAS,KAAK;AACZ,UAAM,EAAE,OAAO,IAAI,aAAa,SAAS;AACzC,iBAAa,SAAS,EAAE,KAAK;AAAA,MAC3B;AAAA,MACA;AAAA,MACA,SAAS,eAAe,QAAQ,IAAI,UAAU,wBAAmB,MAAM,IAAI,GAAG;AAAA,MAC9E,KAAK,OAAO,WAAW,cAAc,OAAO,SAAS,OAAO;AAAA,MAC5D,aAAa;AAAA,MACb,UAAU;AAAA,MACV,YAAY,aAAa;AAAA,MACzB,YAAY,OAAO,cAAc,cAAc,UAAU,YAAY;AAAA,MACrE,cAAc,OAAO;AAAA,MACrB,aAAa,OAAO;AAAA,IACtB,CAAC;AACD,UAAM;AAAA,EACR;AACF;AA1CsB;;;ACoBtB,SAAS,iBAAiB;;;ACmB1B,SAAS,UACP,MACA,OACA,SACA,OACc;AACd,QAAM,QAAQ,aAAa,SAAS;AACpC,QAAM,MAAM,MAAM;AAClB,SAAO;AAAA,IACL,YAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA,YAAY,aAAa;AAAA,IACzB,KAAK,OAAO,SAAS;AAAA,IACrB,YAAY,UAAU;AAAA,IACtB,cAAc,IAAI,WAAW;AAAA,IAC7B,aAAa,IAAI,eAAe;AAAA,IAChC,GAAI,QAAQ,EAAE,MAAM,IAAI,CAAC;AAAA,EAC3B;AACF;AAnBS;AAqBF,SAAS,oBAA0B;AACxC,MAAI,OAAO,WAAW,YAAa;AAEnC,QAAM,MAAwB;AAAA,IAC5B,MAAM,SAAS,OAAO;AACpB,mBAAa,SAAS,EAAE,KAAK,0DAAgD,SAAS,KAAK,CAAC;AAC5F,cAAQ,IAAI,mCAA8B,OAAO;AAAA,IACnD;AAAA,IAEA,KAAK,SAAS,OAAO;AACnB,mBAAa,SAAS,EAAE,KAAK,sDAA8C,SAAS,KAAK,CAAC;AAC1F,cAAQ,IAAI,kCAA6B,OAAO;AAAA,IAClD;AAAA,IAEA,KAAK,SAAS,OAAO;AACnB,mBAAa,SAAS,EAAE,KAAK,gDAA2C,SAAS,KAAK,CAAC;AACvF,cAAQ,IAAI,kCAA6B,OAAO;AAAA,IAClD;AAAA,IAEA,QAAQ,QAAQ,QAAQ,KAAK,OAAO;AAClC,YAAM,QAAQ;AAAA;AAAA,QAEZ,UAAU;AAAA,QACV,GAAG,MAAM,IAAI,GAAG,WAAM,MAAM;AAAA,QAC5B;AAAA,MACF;AACA,mBAAa,SAAS,EAAE,KAAK,EAAE,GAAG,OAAO,aAAa,QAAQ,aAAa,QAAQ,UAAU,IAAI,CAAC;AAClG,cAAQ,IAAI,qCAAgC,QAAQ,KAAK,MAAM;AAAA,IACjE;AAAA,IAEA,QAAQ,OAAO;AACb,mBAAa,SAAS,EAAE,KAAK,KAAK;AAClC,cAAQ,IAAI,mCAA8B,KAAK;AAAA,IACjD;AAAA,IAEA,QAAQ;AACN,mBAAa,SAAS,EAAE,MAAM;AAC9B,cAAQ,IAAI,mBAAmB;AAAA,IACjC;AAAA,IAEA,SAAS;AACP,YAAM,QAAQ,aAAa,SAAS;AACpC,cAAQ,MAAM,kBAAkB;AAChC,cAAQ,IAAI,WAAW,MAAM,MAAM;AACnC,cAAQ,IAAI,gBAAgB,MAAM,OAAO,MAAM;AAC/C,cAAQ,IAAI,gBAAgB,MAAM,WAAW;AAC7C,cAAQ,IAAI,eAAe,aAAa,CAAC;AACzC,cAAQ,SAAS;AAAA,IACnB;AAAA,EACF;AAEA,SAAO,UAAU;AACnB;AApDgB;;;AD9BT,SAAS,gBAAgB,EAAE,UAAU,GAAG,OAAO,GAAyB;AAC7E,YAAU,MAAM;AACd,oBAAgB,KAAK,MAAM;AAC3B,sBAAkB;AAClB,WAAO,MAAM,gBAAgB,QAAQ;AAAA,EACvC,GAAG,CAAC,CAAC;AAEL,SAAO,YAAY;AACrB;AARgB;;;AEIhB,IAAI,gBAAuD;AAC3D,IAAM,aAAgC,CAAC;AAEhC,IAAM,kBAAkB;AAAA,EAC7B,KAAK,SAAwB,CAAC,GAAS;AACrC,QAAI,OAAO,WAAW,YAAa;AAEnC,UAAM,UAAU,OAAO,WAAW,QAAQ,IAAI,uBAAuB;AACrE,QAAI,QAAS,qBAAoB,OAAO;AACxC,iBAAa,SAAS,EAAE,UAAU,MAAM;AACxC,wBAAoB;AAEpB,QAAI,OAAO,oBAAoB,MAAO,YAAW,KAAK,sBAAsB,CAAC;AAC7E,QAAI,OAAO,mBAAmB,MAAO,YAAW,KAAK,sBAAsB,CAAC;AAC5E,eAAW,KAAK,yBAAyB,CAAC;AAE1C,UAAM,WAAW,OAAO,iBAAiB;AACzC,oBAAgB,YAAY,MAAM,aAAa,SAAS,EAAE,MAAM,GAAG,QAAQ;AAE3E,UAAM,SAAS,6BAAM;AAAE,UAAI,SAAS,oBAAoB,SAAU,cAAa,SAAS,EAAE,MAAM,IAAI;AAAA,IAAE,GAAvF;AACf,WAAO,iBAAiB,oBAAoB,MAAM;AAClD,WAAO,iBAAiB,gBAAgB,MAAM,aAAa,SAAS,EAAE,MAAM,IAAI,CAAC;AAEjF,QAAI,OAAO,MAAO,SAAQ,KAAK,iCAAiC,MAAM;AAAA,EACxE;AAAA,EAEA,QAAQ,OAA2B;AACjC,iBAAa,SAAS,EAAE,KAAK,KAAK;AAAA,EACpC;AAAA,EAEA,QAAc;AACZ,iBAAa,SAAS,EAAE,MAAM;AAAA,EAChC;AAAA,EAEA,UAAgB;AACd,QAAI,kBAAkB,MAAM;AAAE,oBAAc,aAAa;AAAG,sBAAgB;AAAA,IAAK;AACjF,eAAW,QAAQ,CAAC,OAAO,GAAG,CAAC;AAC/B,eAAW,SAAS;AAAA,EACtB;AACF;","names":["original","require_retry","retry","FrontendEventIngestRequestEventType","FrontendEventIngestRequestLevel","z","z"]}