@offscript/sdk 0.1.1 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +32 -119
- package/dist/adapters/nuxt.cjs +3 -3
- package/dist/adapters/nuxt.js +2 -2
- package/dist/adapters/vanilla.cjs +5 -5
- package/dist/adapters/vanilla.d.ts +2 -3
- package/dist/adapters/vanilla.js +3 -3
- package/dist/adapters/vue.cjs +3 -3
- package/dist/adapters/vue.js +2 -2
- package/dist/chunk-2MY2FWIA.cjs +20 -0
- package/dist/chunk-2MY2FWIA.cjs.map +1 -0
- package/dist/{chunk-LFXHB4PN.js → chunk-6ROP37WI.js} +5 -6
- package/dist/chunk-6ROP37WI.js.map +1 -0
- package/dist/{chunk-B6GO5FE5.cjs → chunk-HPDLEAAL.cjs} +5 -6
- package/dist/chunk-HPDLEAAL.cjs.map +1 -0
- package/dist/{chunk-MBYNQSKA.js → chunk-V2YYWGIA.js} +5 -5
- package/dist/chunk-V2YYWGIA.js.map +1 -0
- package/dist/{chunk-3NX2AGXM.cjs → chunk-VYCDQLP7.cjs} +1084 -1170
- package/dist/chunk-VYCDQLP7.cjs.map +1 -0
- package/dist/{chunk-3OSCH7J2.js → chunk-XBXFGCUT.js} +1081 -1162
- package/dist/chunk-XBXFGCUT.js.map +1 -0
- package/dist/core/LifecycleManager.d.ts +1 -0
- package/dist/core/OffscriptSDK.d.ts +34 -52
- package/dist/core/RecordingStore.d.ts +26 -0
- package/dist/index.cjs +20 -40
- package/dist/index.d.ts +2 -2
- package/dist/index.js +3 -3
- package/dist/playwright/PlaywrightDataContract.d.ts +0 -7
- package/dist/playwright.cjs +13 -13
- package/dist/playwright.js +1 -1
- package/dist/privacy/DataSanitizer.d.ts +1 -0
- package/dist/recorders/ActionRecorder.d.ts +1 -1
- package/dist/recorders/ContextRecorder.d.ts +2 -8
- package/dist/recorders/HTTPRecorder.d.ts +7 -2
- package/dist/types/config.d.ts +13 -41
- package/dist/types/events.d.ts +4 -23
- package/dist/types/recording.d.ts +20 -0
- package/dist/ui/RecordingControls.d.ts +62 -0
- package/dist/utils/errors.d.ts +1 -18
- package/docs/api-contract.md +4 -53
- package/docs/architecture.md +5 -34
- package/docs/event-contract.md +3 -24
- package/docs/playwright-contract.md +3 -37
- package/package.json +2 -2
- package/dist/chunk-3NX2AGXM.cjs.map +0 -1
- package/dist/chunk-3OSCH7J2.js.map +0 -1
- package/dist/chunk-B6GO5FE5.cjs.map +0 -1
- package/dist/chunk-HAPNSHFG.cjs +0 -20
- package/dist/chunk-HAPNSHFG.cjs.map +0 -1
- package/dist/chunk-LFXHB4PN.js.map +0 -1
- package/dist/chunk-MBYNQSKA.js.map +0 -1
- package/dist/core/ApiClient.d.ts +0 -24
- package/dist/core/SessionManager.d.ts +0 -44
- package/dist/transport/EventQueue.d.ts +0 -28
- package/dist/transport/EventTransport.d.ts +0 -84
- package/dist/transport/PersistentBuffer.d.ts +0 -60
- package/dist/transport/RetryManager.d.ts +0 -9
- package/dist/types/session.d.ts +0 -77
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/types/config.ts","../src/utils/misc.ts","../src/privacy/PrivacyConfig.ts","../src/privacy/DataSanitizer.ts","../src/utils/errors.ts","../src/recorders/types.ts","../src/recorders/ActionRecorder.ts","../src/recorders/ContextRecorder.ts","../src/recorders/ErrorRecorder.ts","../src/utils/id.ts","../src/recorders/HTTPRecorder.ts","../src/recorders/IframeRecorder.ts","../src/recorders/RRWebRecorder.ts","../src/core/LifecycleManager.ts","../src/core/RecordingStore.ts","../src/core/config.ts","../src/ui/RecordingControls.ts","../src/core/OffscriptSDK.ts"],"names":["SelectorGenerator","ACTION_SCHEMA_VERSION","last","SDK_VERSION","buildPlaywrightContract"],"mappings":"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","file":"chunk-VYCDQLP7.cjs","sourcesContent":["export type Priority = \"critical\" | \"normal\" | \"low\";\n\nexport interface RecordingConfig {\n /** Gravação visual (rrweb). */\n rrweb: boolean;\n /** Ações semânticas (clique, input, teclado...). */\n actions: boolean;\n /** Instrumentação de fetch/XMLHttpRequest. */\n http: boolean;\n /** console.* */\n console: boolean;\n /** window.onerror / unhandledrejection */\n errors: boolean;\n /** Metadados de contexto (navegador, viewport...). */\n context: boolean;\n /** Detecção de iframes de terceiros (ex.: seats.io). */\n iframes: boolean;\n /** Eventos de mousemove no Action Recorder (rrweb já captura o movimento visual). */\n mouseMove: boolean;\n /** Níveis de console capturados. */\n consoleLevels: Array<\"log\" | \"info\" | \"warn\" | \"error\">;\n /** Intervalo mínimo entre amostras de mousemove/scroll (ms). */\n throttleMs: number;\n /** Snapshot completo periódico do rrweb (ms). 0 = desligado. */\n rrwebCheckoutEveryMs: number;\n /** Captura de canvas pelo rrweb (custoso). */\n rrwebRecordCanvas: boolean;\n /** Atributos considerados identificadores de teste, em ordem de prioridade. */\n testIdAttributes: string[];\n /** Atributos estáveis adicionais usados na geração de seletores. */\n stableAttributes: string[];\n}\n\nexport interface PrivacyConfig {\n /** Mascara valores de <input>/<textarea>/<select> no replay. Padrão: true. */\n maskSensitiveInputs: boolean;\n /** Mascara todo texto da página no replay. Padrão: false. */\n maskAllText: boolean;\n captureRequestBodies: boolean;\n captureResponseBodies: boolean;\n /**\n * Valores digitados só são gravados nas ações para elementos que casem com estes seletores.\n * Os demais viram uma referência opaca. Senhas nunca são gravadas.\n */\n allowedInputSelectors: string[];\n /** Grava o valor selecionado/estado de select, checkbox e radio. Padrão: true. */\n captureChoiceValues: boolean;\n /** Elementos que não aparecem no replay nem nas ações. */\n blockSelectors: string[];\n /** Elementos cujo texto é mascarado no replay. */\n maskTextSelectors: string[];\n /** Elementos ignorados pelo Action Recorder. */\n ignoreSelectors: string[];\n /** URLs cujas requisições não são capturadas (string = prefixo/substring, RegExp). */\n ignoreUrls: Array<string | RegExp>;\n /** Cabeçalhos adicionais a remover. */\n redactHeaders: string[];\n /** Chaves adicionais (query/body/json) a redigir. */\n redactKeys: string[];\n /**\n * Guarda os valores sensíveis por completo: senha, token, cookie, CPF, cartão.\n * Padrão: false. Quando true, nada vira [REDACTED].\n */\n captureSensitiveValues: boolean;\n /** Tamanho máximo (bytes) de cada body capturado. */\n maxBodyBytes: number;\n /** Content-types capturáveis como texto. */\n textContentTypes: RegExp[];\n}\n\nexport interface OffscriptConfig {\n recording?: Partial<RecordingConfig>;\n privacy?: Partial<PrivacyConfig>;\n correlationWindowMs?: number;\n controls?: boolean;\n /** Opaque per-tab key supplied by the host to preserve a local draft across documents. */\n persistenceKey?: string;\n /** Called by the overlay when the user finishes. The host supplies endpoint and token here. */\n onComplete?: () => Promise<unknown>;\n}\n\nexport interface ResolvedConfig {\n recording: RecordingConfig;\n privacy: PrivacyConfig;\n correlationWindowMs: number;\n controls: boolean;\n persistenceKey?: string;\n onComplete?: () => Promise<unknown>;\n}\n\nexport const DEFAULT_RECORDING: RecordingConfig = {\n rrweb: true,\n actions: true,\n http: true,\n console: true,\n errors: true,\n context: true,\n iframes: true,\n mouseMove: false,\n consoleLevels: [\"log\", \"info\", \"warn\", \"error\"],\n throttleMs: 100,\n rrwebCheckoutEveryMs: 5 * 60_000,\n rrwebRecordCanvas: false,\n testIdAttributes: [\"data-testid\", \"data-test\", \"data-cy\", \"data-qa\"],\n stableAttributes: [\"name\", \"data-id\", \"aria-label\"],\n};\n\nexport const DEFAULT_PRIVACY: PrivacyConfig = {\n maskSensitiveInputs: false,\n maskAllText: false,\n captureRequestBodies: false,\n captureResponseBodies: false,\n allowedInputSelectors: [\"[data-offscript-allow]\"],\n captureChoiceValues: true,\n blockSelectors: [\"[data-offscript-block]\", \".offscript-block\"],\n maskTextSelectors: [\"[data-offscript-mask]\", \".offscript-mask\"],\n ignoreSelectors: [\"[data-offscript-ignore]\", \".offscript-ignore\"],\n ignoreUrls: [],\n redactHeaders: [],\n redactKeys: [],\n captureSensitiveValues: false,\n maxBodyBytes: 16 * 1024,\n textContentTypes: [/^text\\//i, /json/i, /xml/i, /x-www-form-urlencoded/i, /javascript/i],\n\n};\n","export const now = (): number => Date.now();\n\nexport function safe<T>(fn: () => T, fallback?: T): T | undefined {\n try {\n return fn();\n } catch {\n return fallback;\n }\n}\n\nexport function throttle<A extends unknown[]>(fn: (...a: A) => void, ms: number): ((...a: A) => void) & { cancel(): void } {\n let last = 0;\n let timer: ReturnType<typeof setTimeout> | undefined;\n let pending: A | undefined;\n const run = (a: A) => {\n last = Date.now();\n fn(...a);\n };\n const t = ((...a: A) => {\n const elapsed = Date.now() - last;\n if (elapsed >= ms) run(a);\n else {\n pending = a;\n if (!timer)\n timer = setTimeout(() => {\n timer = undefined;\n if (pending) run(pending);\n pending = undefined;\n }, ms - elapsed);\n }\n }) as ((...a: A) => void) & { cancel(): void };\n t.cancel = () => {\n if (timer) clearTimeout(timer);\n timer = undefined;\n pending = undefined;\n };\n return t;\n}\n\nexport function debounce<A extends unknown[]>(fn: (...a: A) => void, ms: number): ((...a: A) => void) & { cancel(): void; flush(): void } {\n let timer: ReturnType<typeof setTimeout> | undefined;\n let args: A | undefined;\n const d = ((...a: A) => {\n args = a;\n if (timer) clearTimeout(timer);\n timer = setTimeout(() => {\n timer = undefined;\n const x = args;\n args = undefined;\n if (x) fn(...x);\n }, ms);\n }) as ((...a: A) => void) & { cancel(): void; flush(): void };\n d.cancel = () => {\n if (timer) clearTimeout(timer);\n timer = undefined;\n args = undefined;\n };\n d.flush = () => {\n if (!timer) return;\n clearTimeout(timer);\n timer = undefined;\n const x = args;\n args = undefined;\n if (x) fn(...x);\n };\n return d;\n}\n\n/** Estimativa barata do tamanho serializado (bytes ≈ chars). */\nexport function approxSize(value: unknown): number {\n try {\n return JSON.stringify(value)?.length ?? 0;\n } catch {\n return 0;\n }\n}\n\nexport function deepMerge<T extends object>(base: T, patch?: Partial<T>): T {\n const out: Record<string, unknown> = { ...(base as Record<string, unknown>) };\n if (!patch) return out as T;\n for (const [k, v] of Object.entries(patch)) if (v !== undefined) out[k] = v;\n return out as T;\n}\n\nexport type Listener = () => void;\n\n/** Registro de listeners com remoção em lote. */\nexport class Disposer {\n private fns: Listener[] = [];\n add(fn: Listener): void {\n this.fns.push(fn);\n }\n listen(target: EventTarget, type: string, handler: (e: any) => void, opts?: boolean | AddEventListenerOptions): void {\n target.addEventListener(type, handler, opts);\n this.fns.push(() => target.removeEventListener(type, handler, opts));\n }\n dispose(): void {\n const fns = this.fns;\n this.fns = [];\n for (const fn of fns.reverse()) safe(fn);\n }\n}\n","import { DEFAULT_PRIVACY, type PrivacyConfig } from \"../types/config\";\nimport { deepMerge } from \"../utils/misc\";\n\nexport function resolvePrivacy(user?: Partial<PrivacyConfig>): PrivacyConfig {\n return deepMerge(DEFAULT_PRIVACY, user);\n}\n\nexport const BASE_SENSITIVE_HEADERS = [\n \"authorization\",\n \"proxy-authorization\",\n \"cookie\",\n \"set-cookie\",\n \"x-api-key\",\n \"x-auth-token\",\n \"x-csrf-token\",\n \"x-xsrf-token\",\n \"x-session-token\",\n];\n\nexport const BASE_SENSITIVE_KEY_PATTERN =\n /pass(word|wd)?|senha|secret|token|auth|bearer|api[-_]?key|apikey|credential|session|cookie|jwt|signature|private|cvv|cvc|card[-_]?(number|num)|cartao|cpf|cnpj|ssn|otp|pin$/i;\n","import type { CapturedBody, SelectorCandidate } from \"../types/events\";\nimport type { PrivacyConfig } from \"../types/config\";\nimport { BASE_SENSITIVE_HEADERS, BASE_SENSITIVE_KEY_PATTERN } from \"./PrivacyConfig\";\n\nexport const REDACTED = \"[REDACTED]\";\n\nconst JWT = /\\beyJ[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]{8,}\\.[A-Za-z0-9_-]*\\b/g;\nconst BEARER = /\\b(Bearer|Basic)\\s+[A-Za-z0-9._~+/=-]{8,}/gi;\nconst CPF = /\\b\\d{3}\\.\\d{3}\\.\\d{3}-\\d{2}\\b/g;\nconst CNPJ = /\\b\\d{2}\\.\\d{3}\\.\\d{3}\\/\\d{4}-\\d{2}\\b/g;\nconst CARD = /\\b(?:\\d[ -]?){13,19}\\b/g;\n\nfunction luhn(digits: string): boolean {\n let sum = 0;\n let alt = false;\n for (let i = digits.length - 1; i >= 0; i--) {\n let n = digits.charCodeAt(i) - 48;\n if (alt) {\n n *= 2;\n if (n > 9) n -= 9;\n }\n sum += n;\n alt = !alt;\n }\n return sum % 10 === 0;\n}\n\n/**\n * Sanitização feita ANTES de qualquer persistência ou envio.\n * Todas as funções são puras e nunca lançam.\n */\nexport class DataSanitizer {\n private readonly headerSet: Set<string>;\n private readonly extraKeys: Set<string>;\n private readonly open: boolean;\n\n constructor(private readonly cfg: PrivacyConfig) {\n this.headerSet = new Set([...BASE_SENSITIVE_HEADERS, ...cfg.redactHeaders.map((h) => h.toLowerCase())]);\n this.extraKeys = new Set(cfg.redactKeys.map((k) => k.toLowerCase()));\n this.open = cfg.captureSensitiveValues === true;\n }\n\n isSensitiveKey(key: string): boolean {\n if (this.open) return false;\n return BASE_SENSITIVE_KEY_PATTERN.test(key) || this.extraKeys.has(key.toLowerCase());\n }\n\n /** Mascara padrões sensíveis em texto livre (JWT, Bearer, CPF, CNPJ, cartões). */\n scrubString(input: string): string {\n if (this.open || !input) return input;\n let s = input.replace(JWT, REDACTED).replace(BEARER, (_m, scheme: string) => `${scheme} ${REDACTED}`);\n s = s.replace(CNPJ, REDACTED).replace(CPF, REDACTED);\n s = s.replace(CARD, (m) => {\n const digits = m.replace(/[ -]/g, \"\");\n return digits.length >= 13 && digits.length <= 19 && luhn(digits) ? REDACTED : m;\n });\n return s;\n }\n\n sanitizeHeaders(headers: Record<string, string>): Record<string, string> {\n if (this.open) return { ...headers };\n const out: Record<string, string> = {};\n for (const [k, v] of Object.entries(headers)) {\n out[k] = this.headerSet.has(k.toLowerCase()) || this.isSensitiveKey(k) ? REDACTED : this.scrubString(v);\n }\n return out;\n }\n\n /** Redige query params sensíveis e credenciais embutidas (user:pass@). */\n sanitizeUrl(raw: string, base?: string): string {\n if (this.open) return raw;\n try {\n const u = new URL(raw, base ?? (typeof location !== \"undefined\" ? location.href : undefined));\n if (u.username || u.password) {\n u.username = \"\";\n u.password = \"\";\n }\n for (const key of Array.from(new Set(u.searchParams.keys()))) {\n if (this.isSensitiveKey(key)) u.searchParams.set(key, REDACTED);\n else u.searchParams.set(key, this.scrubString(u.searchParams.get(key) ?? \"\"));\n }\n if (u.hash && /(access_token|id_token|token|code)=/i.test(u.hash)) u.hash = `#${REDACTED}`;\n return u.toString();\n } catch {\n return this.scrubString(raw);\n }\n }\n\n /** Redige query/fragmento de um valor de atributo de URL preservando a forma original (relativa ou absoluta). */\n redactUrlAttribute(value: string): string {\n if (this.open || typeof value !== \"string\" || !/[?#@]/.test(value)) return value;\n const hashAt = value.indexOf(\"#\");\n const hash = hashAt >= 0 ? value.slice(hashAt) : \"\";\n const noHash = hashAt >= 0 ? value.slice(0, hashAt) : value;\n const q = noHash.indexOf(\"?\");\n let base = q >= 0 ? noHash.slice(0, q) : noHash;\n base = base.replace(/^([a-z][a-z0-9+.-]*:\\/\\/)[^/@]*@/i, \"$1\");\n let query = \"\";\n if (q >= 0) {\n const params = new URLSearchParams(noHash.slice(q + 1));\n for (const k of Array.from(new Set(params.keys()))) {\n if (this.isSensitiveKey(k)) params.set(k, REDACTED);\n else params.set(k, this.scrubString(params.get(k) ?? \"\"));\n }\n query = `?${params.toString()}`;\n }\n return base + query + (hash && /(access_token|id_token|token|code)=/i.test(hash) ? `#${REDACTED}` : hash);\n }\n\n parseQuery(raw: string): Record<string, string | string[]> | undefined {\n try {\n const u = new URL(raw, typeof location !== \"undefined\" ? location.href : undefined);\n const out: Record<string, string | string[]> = {};\n u.searchParams.forEach((v, k) => {\n const val = this.isSensitiveKey(k) ? REDACTED : this.scrubString(v);\n const prev = out[k];\n out[k] = prev === undefined ? val : Array.isArray(prev) ? [...prev, val] : [prev, val];\n });\n return Object.keys(out).length ? out : undefined;\n } catch {\n return undefined;\n }\n }\n\n /** Redação profunda de objetos (chaves sensíveis + padrões em strings). */\n sanitizeValue(value: unknown, depth = 0): unknown {\n if (depth > 8) return \"[Truncated]\";\n if (typeof value === \"string\") return this.scrubString(value);\n if (value === null || typeof value !== \"object\") return value;\n if (Array.isArray(value)) return value.slice(0, 200).map((v) => this.sanitizeValue(v, depth + 1));\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value as Record<string, unknown>)) {\n out[k] = this.isSensitiveKey(k) ? REDACTED : this.sanitizeValue(v, depth + 1);\n }\n return out;\n }\n\n /** Converte um corpo textual em CapturedBody sanitizado, respeitando o limite. */\n sanitizeTextBody(text: string, contentType: string, size = text.length): CapturedBody {\n const max = this.cfg.maxBodyBytes;\n const truncated = text.length > max;\n const slice = truncated ? text.slice(0, max) : text;\n if (/json/i.test(contentType) && !truncated) {\n try {\n return { kind: \"json\", value: this.sanitizeValue(JSON.parse(slice)), size };\n } catch {\n /* cai para texto */\n }\n }\n if (/x-www-form-urlencoded/i.test(contentType)) {\n const params = new URLSearchParams(slice);\n const form: Record<string, string> = {};\n params.forEach((v, k) => (form[k] = this.isSensitiveKey(k) ? REDACTED : this.scrubString(v)));\n return { kind: \"form\", value: form, size, truncated };\n }\n return { kind: \"text\", value: this.scrubString(slice), size, truncated };\n }\n\n isTextual(contentType: string): boolean {\n return this.cfg.textContentTypes.some((re) => re.test(contentType));\n }\n\n isIgnoredUrl(url: string): boolean {\n return this.cfg.ignoreUrls.some((p) => (typeof p === \"string\" ? url.includes(p) : p.test(url)));\n }\n\n /** Referência opaca para valores não autorizados. */\n redactedRef(value: string, salt: string): string {\n let h = 2166136261;\n const s = salt + value;\n for (let i = 0; i < s.length; i++) {\n h ^= s.charCodeAt(i);\n h = Math.imul(h, 16777619);\n }\n return `ref_${(h >>> 0).toString(16).padStart(8, \"0\")}`;\n }\n\n /** Remove valores de atributos de seletor que podem conter dados sensíveis. */\n sanitizeSelectorCandidates(list: SelectorCandidate[]): SelectorCandidate[] {\n return list.map((c) => ({ ...c, selector: this.scrubString(c.selector) }));\n }\n}\n","export type OffscriptErrorCode =\n | \"CONFIG_INVALID\"\n | \"INVALID_STATE\"\n | \"TRANSPORT_FAILED\"\n | \"PAYLOAD_TOO_LARGE\"\n | \"NOT_SUPPORTED\"\n | \"INTERNAL\";\n\nexport class OffscriptError extends Error {\n readonly code: OffscriptErrorCode;\n readonly status?: number;\n readonly cause?: unknown;\n constructor(code: OffscriptErrorCode, message: string, opts: { status?: number; cause?: unknown } = {}) {\n super(message);\n this.name = \"OffscriptError\";\n this.code = code;\n this.status = opts.status;\n this.cause = opts.cause;\n }\n}\n\nexport class ConfigError extends OffscriptError {\n constructor(message: string) {\n super(\"CONFIG_INVALID\", message);\n this.name = \"ConfigError\";\n }\n}\nexport class InvalidStateError extends OffscriptError {\n constructor(message: string) {\n super(\"INVALID_STATE\", message);\n this.name = \"InvalidStateError\";\n }\n}\n/** Emissor tipado mínimo. */\nexport class Emitter<M extends Record<string, unknown>> {\n private handlers = new Map<keyof M, Set<(p: any) => void>>();\n on<K extends keyof M>(type: K, fn: (payload: M[K]) => void): () => void {\n let s = this.handlers.get(type);\n if (!s) this.handlers.set(type, (s = new Set()));\n s.add(fn);\n return () => this.off(type, fn);\n }\n off<K extends keyof M>(type: K, fn: (payload: M[K]) => void): void {\n this.handlers.get(type)?.delete(fn);\n }\n emit<K extends keyof M>(type: K, payload: M[K]): void {\n for (const fn of Array.from(this.handlers.get(type) ?? [])) {\n try {\n fn(payload);\n } catch {\n /* listener do usuário não pode quebrar o SDK */\n }\n }\n }\n clear(): void {\n this.handlers.clear();\n }\n}\n","import type { Priority, ResolvedConfig } from \"../types/config\";\nimport type { EventKind, OffscriptEvent } from \"../types/events\";\nimport type { DataSanitizer } from \"../privacy/DataSanitizer\";\n\nexport interface EmitOptions {\n priority?: Priority;\n /** Momento em que o fato ocorreu, se diferente de agora. */\n at?: number;\n}\n\n/** Contrato entre os recorders e o núcleo. Recorders nunca falam com o transporte diretamente. */\nexport interface EventSink {\n readonly config: ResolvedConfig;\n readonly sanitizer: DataSanitizer;\n emit<T>(kind: EventKind, data: T, opts?: EmitOptions): OffscriptEvent<T> | null;\n}\n\nexport interface Recorder {\n readonly name: string;\n start(): void | Promise<void>;\n stop(): void;\n pause?(): void;\n resume?(): void | Promise<void>;\n}\n\n/** Executa um trecho sem nunca propagar erro para a aplicação hospedeira. */\nexport function guard(sink: { emit: EventSink[\"emit\"] } | null, name: string, fn: () => void): void {\n try {\n fn();\n } catch (e) {\n try {\n sink?.emit(\"lifecycle\", { type: \"recorder-error\", detail: { recorder: name, message: String((e as Error)?.message ?? e) } }, { priority: \"low\" });\n } catch {\n /* nada */\n }\n }\n}\n","import { ACTION_SCHEMA_VERSION, type ActionType, type RecordedAction } from \"../types/events\";\nimport { SelectorGenerator } from \"../playwright/SelectorGenerator\";\nimport { Disposer, debounce, safe } from \"../utils/misc\";\nimport { guard, type EventSink, type Recorder } from \"./types\";\n\nexport type ActionDraft = Omit<RecordedAction, \"id\" | \"sequence\" | \"timestamp\">;\n\nconst KEYS = new Set([\"Enter\", \"Escape\", \"Tab\", \"Backspace\", \"Delete\", \"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\", \"PageUp\", \"PageDown\"]);\nconst MODIFIERS = new Set([\"Control\", \"Shift\", \"Alt\", \"Meta\"]);\nconst INTERACTIVE = \"a,button,input,select,textarea,summary,[role=button],[role=link],[role=menuitem],[role=tab],[role=option],[data-testid],[data-test],[data-cy]\";\nconst INPUT_IDLE_MS = 700;\nconst DRAG_MIN_PX = 8;\n\ninterface PendingInput {\n el: Element;\n inputType: string;\n startedAt: number;\n}\n\n/** Ações semânticas do usuário. Eventos brutos → rascunhos de ação; a normalização é feita fora (ActionNormalizer). */\nexport class ActionRecorder implements Recorder {\n readonly name = \"actions\";\n private d = new Disposer();\n private gen: SelectorGenerator;\n private paused = false;\n private pendingInput?: PendingInput;\n private inputTimer?: ReturnType<typeof setTimeout>;\n private salt = Math.random().toString(36).slice(2);\n private lastClick?: { el: Element; t: number };\n private scrollState = new Map<EventTarget, { x: number; y: number; flush: ReturnType<typeof debounce> }>();\n private hover?: { el: Element; timer?: ReturnType<typeof setTimeout>; entered: boolean };\n private drag?: { el: Element; x: number; y: number; t: number; points: Array<{ x: number; y: number; t: number }>; html5: boolean };\n private move: Array<{ x: number; y: number; t: number }> = [];\n private moveFlush?: ReturnType<typeof debounce>;\n\n constructor(private readonly sink: EventSink) {\n const r = sink.config.recording;\n this.gen = new SelectorGenerator({ testIdAttributes: r.testIdAttributes, stableAttributes: r.stableAttributes });\n }\n\n start(): void {\n const d = this.d;\n const cap = { capture: true, passive: true } as const;\n const on = (type: string, fn: (e: any) => void, target: EventTarget = document) =>\n d.listen(target, type, (e) => guard(this.sink, this.name, () => !this.paused && fn(e)), cap);\n\n on(\"click\", (e: MouseEvent) => this.onClick(e));\n on(\"dblclick\", (e: MouseEvent) => this.onDblClick(e));\n on(\"input\", (e: Event) => this.onInput(e));\n on(\"change\", (e: Event) => this.onChange(e));\n on(\"keydown\", (e: KeyboardEvent) => this.onKey(e));\n on(\"focusin\", (e: FocusEvent) => this.onFocus(\"focus\", e));\n on(\"focusout\", (e: FocusEvent) => this.onFocus(\"blur\", e));\n on(\"scroll\", (e: Event) => this.onScroll(e));\n on(\"mouseover\", (e: MouseEvent) => this.onOver(e));\n on(\"mouseout\", (e: MouseEvent) => this.onOut(e));\n on(\"mousedown\", (e: MouseEvent) => this.onDown(e));\n on(\"mouseup\", (e: MouseEvent) => this.onUp(e));\n on(\"mousemove\", (e: MouseEvent) => this.onMove(e));\n on(\"dragstart\", () => this.drag && (this.drag.html5 = true));\n this.moveFlush = debounce(() => this.flushMove(), 500);\n d.add(() => this.moveFlush?.cancel());\n }\n\n pause(): void {\n this.flushAll();\n this.paused = true;\n }\n resume(): void {\n this.paused = false;\n }\n stop(): void {\n guard(this.sink, this.name, () => this.flushAll());\n this.d.dispose();\n for (const s of this.scrollState.values()) s.flush.cancel();\n this.scrollState.clear();\n if (this.hover?.timer) clearTimeout(this.hover.timer);\n }\n\n /** Descarrega estados pendentes (input em edição, scroll, trajetória do mouse). */\n flushAll(): void {\n this.flushInput();\n for (const s of this.scrollState.values()) s.flush.flush();\n this.flushMove();\n }\n\n // ---- API usada pelo núcleo ----------------------------------------------\n recordNavigation(from: string, to: string, kind: string): void {\n guard(this.sink, this.name, () => {\n if (this.paused) return;\n this.flushAll();\n const s = this.sink.sanitizer;\n this.emit({ type: \"navigate\", payload: { from: s.sanitizeUrl(from), to: s.sanitizeUrl(to), kind } });\n });\n }\n\n recordPageLoad(navType: string | undefined, referrer: string): void {\n guard(this.sink, this.name, () => {\n const s = this.sink.sanitizer;\n if (navType === \"reload\") this.emit({ type: \"reload\", payload: { url: s.sanitizeUrl(location.href) } });\n else if (navType === \"back_forward\" || navType === \"navigate\")\n this.emit({ type: \"navigate\", payload: { from: referrer ? s.sanitizeUrl(referrer) : undefined, to: s.sanitizeUrl(location.href), kind: navType === \"back_forward\" ? \"history\" : \"document\" } });\n });\n }\n\n // ---- helpers --------------------------------------------------------------\n private emit(draft: Partial<ActionDraft> & { type: ActionType }, el?: Element | null, extra?: { x?: number; y?: number }): void {\n const s = this.sink.sanitizer;\n const data: ActionDraft = {\n schemaVersion: ACTION_SCHEMA_VERSION,\n type: draft.type,\n url: s.sanitizeUrl(location.href),\n viewport: { width: window.innerWidth, height: window.innerHeight },\n payload: draft.payload,\n metadata: draft.metadata,\n };\n if (extra?.x !== undefined && extra.y !== undefined) data.coordinates = { x: Math.round(extra.x), y: Math.round(extra.y) };\n if (el) {\n const r = this.gen.generate(el);\n data.selector = s.scrubString(r.selector);\n data.selectorUnique = r.unique;\n data.selectorCandidates = s.sanitizeSelectorCandidates(r.candidates);\n data.element = this.gen.describe(el);\n if (data.element.text) data.element.text = s.scrubString(data.element.text);\n if (data.element.name) data.element.name = s.scrubString(data.element.name);\n }\n this.sink.emit(\"action\", data, { priority: \"normal\" });\n }\n\n private target(e: Event): Element | null {\n const t = e.target;\n const el = t instanceof Element ? t : t instanceof Node ? t.parentElement : null;\n if (!el) return null;\n const { ignoreSelectors, blockSelectors } = this.sink.config.privacy;\n const sel = [...ignoreSelectors, ...blockSelectors].join(\",\");\n if (sel && safe(() => el.closest(sel))) return null;\n return el;\n }\n\n // ---- handlers -------------------------------------------------------------\n private onClick(e: MouseEvent): void {\n const el = this.target(e);\n if (!el) return;\n this.flushInput();\n // Clique sintético disparado pelo browser no <input> ao clicar no <label>: já registrado no label.\n const last = this.lastClick;\n if (last && el instanceof HTMLInputElement && (last.el as HTMLLabelElement).control === el && e.timeStamp - last.t < 100) return;\n this.lastClick = { el, t: e.timeStamp };\n const clickable = (el.closest(INTERACTIVE) as Element | null) ?? el;\n this.emit({ type: \"click\", payload: { button: e.button, detail: e.detail, modifiers: mods(e), trusted: e.isTrusted } }, clickable, { x: e.clientX, y: e.clientY });\n }\n\n private onDblClick(e: MouseEvent): void {\n const el = this.target(e);\n if (!el) return;\n const interval = this.lastClick ? Math.round(e.timeStamp - this.lastClick.t) : undefined;\n this.emit({ type: \"dblclick\", payload: { intervalMs: interval, modifiers: mods(e) } }, (el.closest(INTERACTIVE) as Element | null) ?? el, { x: e.clientX, y: e.clientY });\n }\n\n private onInput(e: Event): void {\n const el = this.target(e);\n if (!el || !(el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement)) return;\n if (el instanceof HTMLInputElement && [\"checkbox\", \"radio\", \"file\"].includes(el.type)) return;\n if (this.pendingInput && this.pendingInput.el !== el) this.flushInput();\n this.pendingInput ??= { el, inputType: (e as InputEvent).inputType ?? \"input\", startedAt: Date.now() };\n if (this.inputTimer) clearTimeout(this.inputTimer);\n this.inputTimer = setTimeout(() => guard(this.sink, this.name, () => this.flushInput()), INPUT_IDLE_MS);\n }\n\n private flushInput(): void {\n if (this.inputTimer) clearTimeout(this.inputTimer);\n this.inputTimer = undefined;\n const p = this.pendingInput;\n this.pendingInput = undefined;\n if (!p || !p.el.isConnected) return;\n const el = p.el as HTMLInputElement | HTMLTextAreaElement;\n const value = el.value ?? \"\";\n const payload: Record<string, unknown> = { inputType: p.inputType, length: value.length, typingMs: Date.now() - p.startedAt, fieldType: el instanceof HTMLInputElement ? el.type : \"textarea\" };\n const policy = this.sink.config.privacy;\n const allowed = policy.allowedInputSelectors.join(\",\");\n const isPassword = el instanceof HTMLInputElement && el.type === \"password\";\n const listed = Boolean(allowed) && safe(() => el.matches(allowed));\n if (policy.captureSensitiveValues || (!isPassword && (!policy.maskSensitiveInputs || listed))) {\n payload.value = policy.captureSensitiveValues ? value : this.sink.sanitizer.scrubString(value);\n payload.valueCaptured = true;\n } else {\n payload.valueCaptured = false;\n payload.valueRef = this.sink.sanitizer.redactedRef(value, this.salt);\n }\n this.emit({ type: \"input\", payload }, el);\n }\n\n private onChange(e: Event): void {\n const el = this.target(e);\n if (!el) return;\n if (el instanceof HTMLInputElement && (el.type === \"checkbox\" || el.type === \"radio\")) {\n this.flushInput();\n const capture = this.sink.config.privacy.captureChoiceValues;\n this.emit({ type: \"check\", payload: { checked: el.checked, inputType: el.type, value: capture ? el.value : undefined } }, el);\n } else if (el instanceof HTMLSelectElement) {\n this.flushInput();\n const capture = this.sink.config.privacy.captureChoiceValues;\n const opts = Array.from(el.selectedOptions);\n this.emit(\n { type: \"select\", payload: capture ? { values: opts.map((o) => o.value), labels: opts.map((o) => o.label), multiple: el.multiple } : { count: opts.length, multiple: el.multiple } },\n el,\n );\n } else if (el instanceof HTMLInputElement || el instanceof HTMLTextAreaElement) {\n this.flushInput();\n }\n }\n\n private onKey(e: KeyboardEvent): void {\n const el = this.target(e) ?? document.body;\n if (!el) return;\n const modified = e.ctrlKey || e.metaKey || e.altKey;\n const isModifier = MODIFIERS.has(e.key);\n const relevant = KEYS.has(e.key) || isModifier || /^F\\d{1,2}$/.test(e.key) || (modified && e.key.length === 1);\n if (!relevant || (isModifier && e.repeat)) return;\n if (e.key === \"Enter\" || e.key === \"Tab\") this.flushInput();\n // A própria tecla Control já é o evento. Não entra de novo como modificador, senão vira Control+Control.\n const modifiers = mods(e).filter((name) => name !== e.key);\n this.emit({ type: \"keydown\", payload: { key: e.key, code: e.code, modifiers, repeat: e.repeat } }, el);\n }\n\n private onFocus(type: \"focus\" | \"blur\", e: FocusEvent): void {\n const el = this.target(e);\n if (!el || el === document.body || el === document.documentElement) return;\n if (type === \"blur\") this.flushInput();\n this.emit({ type }, el);\n }\n\n private onScroll(e: Event): void {\n const t = e.target;\n const isDoc = t === document || t === document.documentElement || t === document.body;\n const el = isDoc ? null : t instanceof Element ? t : null;\n if (!isDoc && (!el || this.target(e) === null)) return;\n const pos = () => (isDoc ? { x: Math.round(window.scrollX), y: Math.round(window.scrollY) } : { x: Math.round(el!.scrollLeft), y: Math.round(el!.scrollTop) });\n const key = (isDoc ? document : t) as EventTarget;\n let st = this.scrollState.get(key);\n if (!st) {\n const start = pos();\n st = {\n ...start,\n flush: debounce(() => {\n const s = this.scrollState.get(key);\n if (!s) return;\n this.scrollState.delete(key);\n const end = pos();\n if (end.x === s.x && end.y === s.y) return;\n guard(this.sink, this.name, () => this.emit({ type: \"scroll\", payload: { from: { x: s.x, y: s.y }, to: end, target: isDoc ? \"window\" : \"element\" } }, el));\n }, 200),\n };\n this.scrollState.set(key, st);\n }\n st.flush();\n }\n\n private onOver(e: MouseEvent): void {\n const el = this.target(e);\n const hit = el?.closest(INTERACTIVE) as Element | null;\n if (!hit || this.hover?.el === hit) return;\n this.endHover();\n const h = { el: hit, entered: false } as NonNullable<ActionRecorder[\"hover\"]>;\n h.timer = setTimeout(() => {\n h.entered = true;\n guard(this.sink, this.name, () => this.emit({ type: \"hover\", payload: { phase: \"enter\" } }, hit, { x: e.clientX, y: e.clientY }));\n }, 200);\n this.hover = h;\n }\n\n private onOut(e: MouseEvent): void {\n const h = this.hover;\n if (!h) return;\n const to = e.relatedTarget as Node | null;\n if (to && h.el.contains(to)) return;\n this.endHover();\n }\n\n private endHover(): void {\n const h = this.hover;\n if (!h) return;\n if (h.timer) clearTimeout(h.timer);\n this.hover = undefined;\n if (h.entered) this.emit({ type: \"hover\", payload: { phase: \"leave\" } }, h.el);\n }\n\n private onDown(e: MouseEvent): void {\n const el = this.target(e);\n if (!el || e.button !== 0) return;\n this.drag = { el, x: e.clientX, y: e.clientY, t: Date.now(), points: [{ x: e.clientX, y: e.clientY, t: 0 }], html5: false };\n }\n\n private onUp(e: MouseEvent): void {\n const d = this.drag;\n this.drag = undefined;\n if (!d) return;\n const dist = Math.hypot(e.clientX - d.x, e.clientY - d.y);\n if (dist < DRAG_MIN_PX) return;\n const dropEl = safe(() => document.elementFromPoint(e.clientX, e.clientY));\n const traj = d.points.length > 50 ? d.points.filter((_, i) => i % Math.ceil(d.points.length / 50) === 0) : d.points;\n const to = dropEl && !(dropEl === d.el) ? this.gen.generate(dropEl) : undefined;\n this.emit(\n {\n type: \"drag\",\n payload: {\n from: { x: Math.round(d.x), y: Math.round(d.y) },\n to: { x: Math.round(e.clientX), y: Math.round(e.clientY) },\n trajectory: traj,\n durationMs: Date.now() - d.t,\n html5: d.html5,\n target: to ? { selector: this.sink.sanitizer.scrubString(to.selector), unique: to.unique, element: dropEl ? this.gen.describe(dropEl) : undefined } : undefined,\n },\n },\n d.el,\n { x: d.x, y: d.y },\n );\n }\n\n private onMove(e: MouseEvent): void {\n const t = Date.now();\n if (this.drag) {\n const last = this.drag.points[this.drag.points.length - 1];\n if (t - this.drag.t - last.t >= 30) this.drag.points.push({ x: Math.round(e.clientX), y: Math.round(e.clientY), t: t - this.drag.t });\n }\n if (!this.sink.config.recording.mouseMove) return;\n const last = this.move[this.move.length - 1];\n if (last && t - last.t < this.sink.config.recording.throttleMs) return;\n this.move.push({ x: Math.round(e.clientX), y: Math.round(e.clientY), t });\n if (this.move.length >= 40) this.flushMove();\n else this.moveFlush?.(); // descarrega quando o mouse para\n }\n\n private flushMove(): void {\n if (!this.move.length) return;\n const points = this.move;\n this.move = [];\n this.emit({ type: \"mousemove\", payload: { points } }, null, { x: points[points.length - 1].x, y: points[points.length - 1].y });\n }\n}\n\nfunction mods(e: MouseEvent | KeyboardEvent): string[] {\n const m: string[] = [];\n if (e.ctrlKey) m.push(\"Control\");\n if (e.metaKey) m.push(\"Meta\");\n if (e.altKey) m.push(\"Alt\");\n if (e.shiftKey) m.push(\"Shift\");\n return m;\n}\n","import { SDK_VERSION, type ContextEventData } from \"../types/events\";\nimport { Disposer, debounce, safe } from \"../utils/misc\";\nimport { guard, type EventSink, type Recorder } from \"./types\";\n\nexport function parseBrowser(ua: string): { name?: string; version?: string } {\n const rules: Array<[string, RegExp]> = [\n [\"Edge\", /Edg(?:e|A|iOS)?\\/([\\d.]+)/],\n [\"Opera\", /OPR\\/([\\d.]+)/],\n [\"Firefox\", /Firefox\\/([\\d.]+)/],\n [\"Chrome\", /(?:Chrome|CriOS)\\/([\\d.]+)/],\n [\"Safari\", /Version\\/([\\d.]+).*Safari/],\n ];\n for (const [name, re] of rules) {\n const m = ua.match(re);\n if (m) return { name, version: m[1] };\n }\n return {};\n}\n\nexport function collectContext(\n reason: ContextEventData[\"reason\"],\n captureSensitiveValues = false,\n): ContextEventData {\n const nav = navigator as Navigator & { userAgentData?: { platform?: string; brands?: Array<{ brand: string; version: string }> } };\n const ua = nav.userAgent ?? \"\";\n let browser = parseBrowser(ua);\n const brands = nav.userAgentData?.brands?.filter((b) => !/not.?a.?brand/i.test(b.brand));\n const preferred = brands?.find((b) => /chrom|edge|opera/i.test(b.brand)) ?? brands?.[0];\n if (preferred && !browser.name) browser = { name: preferred.brand, version: preferred.version };\n const navEntry = safe(() => performance.getEntriesByType(\"navigation\")[0] as PerformanceNavigationTiming | undefined);\n return {\n reason,\n url: location.href,\n referrer: document.referrer || undefined,\n title: document.title || undefined,\n navigationType: navEntry?.type,\n browser,\n os: nav.userAgentData?.platform ?? nav.platform,\n userAgent: ua,\n screen: { width: screen?.width ?? 0, height: screen?.height ?? 0 },\n viewport: { width: window.innerWidth, height: window.innerHeight },\n devicePixelRatio: window.devicePixelRatio ?? 1,\n language: nav.language,\n timezone: safe(() => Intl.DateTimeFormat().resolvedOptions().timeZone),\n online: nav.onLine,\n visibility: document.visibilityState,\n sdkVersion: SDK_VERSION,\n captureSensitiveValues,\n };\n}\n\n/** Metadados de investigação. Sem fingerprinting: apenas dados já expostos e úteis ao QA. */\nexport class ContextRecorder implements Recorder {\n readonly name = \"context\";\n private d = new Disposer();\n\n constructor(\n private readonly sink: EventSink,\n ) {}\n\n start(): void {\n this.record(\"page-load\");\n const onResize = debounce(() => this.record(\"viewport\"), 500);\n this.d.listen(window, \"resize\", onResize);\n this.d.listen(window, \"orientationchange\", onResize);\n this.d.add(() => onResize.cancel());\n }\n\n record(reason: ContextEventData[\"reason\"]): void {\n guard(this.sink, this.name, () => {\n const data = collectContext(reason, this.sink.config.privacy.captureSensitiveValues);\n data.url = this.sink.sanitizer.sanitizeUrl(data.url);\n if (data.referrer) data.referrer = this.sink.sanitizer.sanitizeUrl(data.referrer);\n this.sink.emit(\"context\", data, { priority: \"normal\" });\n });\n }\n\n stop(): void {\n this.d.dispose();\n }\n}\n","import type { ConsoleEventData, ErrorEventData } from \"../types/events\";\nimport { Disposer, safe } from \"../utils/misc\";\nimport { guard, type EventSink, type Recorder } from \"./types\";\n\ntype Level = ConsoleEventData[\"level\"];\nconst MAX_ARG_DEPTH = 3;\nconst MAX_STR = 2000;\n\nexport function serializeArg(v: unknown, depth = 0, seen = new WeakSet<object>()): unknown {\n if (v === null || v === undefined) return v;\n const t = typeof v;\n if (t === \"string\") return (v as string).length > MAX_STR ? `${(v as string).slice(0, MAX_STR)}…` : v;\n if (t === \"number\" || t === \"boolean\") return v;\n if (t === \"bigint\") return `${String(v)}n`;\n if (t === \"function\") return `[Function ${(v as Function).name || \"anonymous\"}]`;\n if (t === \"symbol\") return String(v);\n if (v instanceof Error) return { name: v.name, message: v.message, stack: v.stack };\n if (typeof Node !== \"undefined\" && v instanceof Node) return `[${(v as Node).nodeName}]`;\n if (depth >= MAX_ARG_DEPTH) return \"[Object]\";\n const obj = v as object;\n if (seen.has(obj)) return \"[Circular]\";\n seen.add(obj);\n if (Array.isArray(obj)) return obj.slice(0, 20).map((x) => serializeArg(x, depth + 1, seen));\n const out: Record<string, unknown> = {};\n for (const k of Object.keys(obj).slice(0, 30)) out[k] = safe(() => serializeArg((obj as Record<string, unknown>)[k], depth + 1, seen));\n return out;\n}\n\nconst FRAME = /(?:at\\s+.*?\\(|at\\s+|@)(.+?):(\\d+):(\\d+)\\)?$/;\nexport function firstFrame(stack?: string): { file?: string; line?: number; column?: number } {\n if (!stack) return {};\n for (const line of stack.split(\"\\n\")) {\n const m = line.trim().match(FRAME);\n if (m && !/offscript/i.test(m[1])) return { file: m[1], line: Number(m[2]), column: Number(m[3]) };\n }\n return {};\n}\n\nconst originals = new Map<Level, { orig: (...a: unknown[]) => void; wrapped: (...a: unknown[]) => void }>();\n\n/** Console + erros globais. Nunca altera argumentos, nem suprime saída, nem lança. */\nexport class ErrorRecorder implements Recorder {\n readonly name = \"errors\";\n private d = new Disposer();\n private busy = false;\n\n constructor(private readonly sink: EventSink) {}\n\n start(): void {\n const { console: wantConsole, errors, consoleLevels } = this.sink.config.recording;\n if (wantConsole) for (const level of consoleLevels) this.wrapConsole(level);\n if (errors) {\n this.d.listen(\n window,\n \"error\",\n (e: ErrorEvent) => {\n // Erros de carregamento de recursos não têm `message`, mas chegam com target.\n const target = e.target as (HTMLElement & { src?: string; href?: string }) | null;\n if (target && target !== (window as unknown) && (target as HTMLElement).tagName) {\n this.report({ source: \"resource\", message: `Falha ao carregar <${target.tagName.toLowerCase()}>`, file: target.src || target.href });\n return;\n }\n const err = e.error as Error | undefined;\n const frame = err?.stack ? firstFrame(err.stack) : {};\n this.report({\n source: \"window.onerror\",\n message: e.message || String(err),\n name: err?.name,\n stack: err?.stack,\n file: e.filename || frame.file,\n line: e.lineno || frame.line,\n column: e.colno || frame.column,\n });\n },\n true,\n );\n this.d.listen(window, \"unhandledrejection\", (e: PromiseRejectionEvent) => {\n const r = e.reason as Error | unknown;\n const isErr = r instanceof Error;\n const stack = isErr ? r.stack : undefined;\n this.report({\n source: \"unhandledrejection\",\n message: isErr ? r.message : String(safe(() => JSON.stringify(r)) ?? r),\n name: isErr ? r.name : undefined,\n stack,\n ...firstFrame(stack),\n });\n });\n }\n }\n\n private report(partial: Omit<ErrorEventData, \"url\">): void {\n guard(this.sink, this.name, () => {\n const s = this.sink.sanitizer;\n this.sink.emit<ErrorEventData>(\n \"error\",\n {\n ...partial,\n message: s.scrubString(partial.message ?? \"\"),\n stack: partial.stack ? s.scrubString(partial.stack) : undefined,\n file: partial.file ? s.sanitizeUrl(partial.file) : undefined,\n url: s.sanitizeUrl(location.href),\n },\n { priority: \"critical\" },\n );\n });\n }\n\n private wrapConsole(level: Level): void {\n const current = console[level] as (...a: unknown[]) => void;\n if (!current || originals.has(level)) return;\n const self = this;\n const wrapped = function (this: unknown, ...args: unknown[]) {\n // Chama primeiro o original: o comportamento da aplicação nunca depende do SDK.\n const result = current.apply(this === undefined ? console : this, args);\n if (!self.busy) {\n self.busy = true; // evita recursão se o SDK ou rrweb escreverem no console\n try {\n self.captureConsole(level, args);\n } catch {\n /* silencioso */\n } finally {\n self.busy = false;\n }\n }\n return result;\n };\n originals.set(level, { orig: current, wrapped });\n console[level] = wrapped as typeof console.log;\n this.d.add(() => {\n const entry = originals.get(level);\n if (entry && console[level] === entry.wrapped) console[level] = entry.orig as typeof console.log;\n originals.delete(level);\n });\n }\n\n private captureConsole(level: Level, args: unknown[]): void {\n const s = this.sink.sanitizer;\n const serial = args.map((a) => s.sanitizeValue(serializeArg(a)));\n const message = serial.map((a) => (typeof a === \"string\" ? a : safe(() => JSON.stringify(a)) ?? String(a))).join(\" \");\n const stack = level === \"error\" || level === \"warn\" ? s.scrubString(new Error().stack?.split(\"\\n\").slice(3).join(\"\\n\") ?? \"\") : undefined;\n this.sink.emit<ConsoleEventData>(\n \"console\",\n { level, args: serial, message: message.slice(0, 4000), stack, url: s.sanitizeUrl(location.href) },\n { priority: level === \"error\" ? \"normal\" : \"low\" },\n );\n }\n\n stop(): void {\n this.d.dispose();\n }\n}\n","export function uid(prefix = \"\"): string {\n const c = (globalThis as { crypto?: Crypto }).crypto;\n if (c?.randomUUID) return prefix + c.randomUUID();\n const bytes = new Uint8Array(16);\n if (c?.getRandomValues) c.getRandomValues(bytes);\n else for (let i = 0; i < 16; i++) bytes[i] = Math.floor(Math.random() * 256);\n return prefix + Array.from(bytes, (b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n}\n","import type { CapturedBody, HttpEventData } from \"../types/events\";\nimport { uid } from \"../utils/id\";\nimport { guard, type EventSink, type Recorder } from \"./types\";\n\n\ninterface Ctx {\n requestId: string;\n transport: \"fetch\" | \"xhr\";\n url: string;\n method: string;\n startedAt: number;\n concurrent: number;\n requestHeaders?: Record<string, string>;\n requestBody?: CapturedBody;\n}\n\ninterface XhrMeta {\n method: string;\n url: string;\n headers: Record<string, string>;\n ctx?: Ctx;\n aborted?: boolean;\n timedOut?: boolean;\n}\n\n/**\n * Instrumentação de fetch e XMLHttpRequest. Não altera assinatura, retorno, headers, credenciais,\n * AbortController nem consome streams do usuário (usa clone/leitura limitada e apenas quando habilitado).\n */\nexport class HTTPRecorder implements Recorder {\n readonly name = \"http\";\n private inflight = 0;\n private active = false;\n private delivering = false;\n private pending = new Set<Promise<unknown>>();\n private restore: Array<() => void> = [];\n\n constructor(\n private readonly sink: EventSink,\n ) {}\n\n start(): void {\n if (this.active) return;\n this.active = true;\n this.delivering = true;\n this.patchFetch();\n this.patchXhr();\n }\n\n stop(): void {\n this.delivering = false;\n this.detach();\n }\n\n private detach(): void {\n this.active = false; // mesmo se outra lib envolver nosso wrapper, ele vira no-op\n for (const r of this.restore.splice(0).reverse()) {\n try {\n r();\n } catch {\n /* nada */\n }\n }\n }\n\n /** Stops new capture and allows up to two seconds for pending HTTP/body capture. */\n async drain(): Promise<void> {\n this.detach();\n let timer: ReturnType<typeof setTimeout> | undefined;\n const timeout = new Promise<void>(resolve => { timer = setTimeout(resolve, 2000); });\n const settle = async (): Promise<void> => {\n while (this.delivering && this.pending.size) {\n await Promise.allSettled([...this.pending]);\n }\n };\n try {\n await Promise.race([settle(), timeout]);\n } finally {\n clearTimeout(timer);\n this.delivering = false;\n }\n }\n\n private track(promise: Promise<unknown>): void {\n const tracked = promise.catch(() => undefined).finally(() => this.pending.delete(tracked));\n this.pending.add(tracked);\n }\n\n private isIgnored(url: string): boolean {\n return this.sink.sanitizer.isIgnoredUrl(url);\n }\n\n // ---------------------------------------------------------------- fetch\n private patchFetch(): void {\n if (typeof globalThis.fetch !== \"function\") return;\n const orig = globalThis.fetch;\n const self = this;\n const patched = function (this: unknown, input: RequestInfo | URL, init?: RequestInit) {\n let ctx: Ctx | null = null;\n if (self.active) {\n try {\n ctx = self.beginFetch(input, init);\n } catch {\n ctx = null;\n }\n }\n let p: Promise<Response>;\n try {\n p = orig.apply(this, arguments as unknown as [RequestInfo | URL, RequestInit?]);\n } catch (e) {\n if (ctx) self.inflight--;\n throw e;\n }\n if (ctx) {\n const c = ctx;\n // Ramo lateral: nunca rejeita e não altera a promise devolvida ao chamador.\n self.track(p.then(\n (res) => self.endFetch(c, res),\n (err) => self.failFetch(c, err),\n ));\n }\n return p;\n };\n globalThis.fetch = patched;\n this.restore.push(() => {\n if (globalThis.fetch === patched) globalThis.fetch = orig;\n });\n }\n\n private beginFetch(input: RequestInfo | URL, init?: RequestInit): Ctx | null {\n const rawUrl = typeof input === \"string\" ? input : input instanceof URL ? input.href : input.url;\n const abs = new URL(rawUrl, location.href).href;\n if (this.isIgnored(abs)) return null;\n const isReq = typeof Request !== \"undefined\" && input instanceof Request;\n const method = (init?.method ?? (isReq ? input.method : \"GET\")).toUpperCase();\n const ctx: Ctx = { requestId: uid(\"req_\"), transport: \"fetch\", url: abs, method, startedAt: Date.now(), concurrent: this.inflight };\n const s = this.sink.sanitizer;\n const hdrs: Record<string, string> = {};\n new Headers(init?.headers ?? (isReq ? input.headers : undefined)).forEach((v, k) => (hdrs[k] = v));\n ctx.requestHeaders = s.sanitizeHeaders(hdrs);\n if (this.sink.config.privacy.captureRequestBodies) {\n const ct = hdrs[\"content-type\"] ?? \"\";\n if (init?.body != null) ctx.requestBody = this.describeBody(init.body, ct);\n else ctx.requestBody = { kind: \"omitted\", reason: isReq ? \"request-object\" : \"no-body\" };\n }\n this.inflight++;\n return ctx;\n }\n\n private endFetch(ctx: Ctx, res: Response): void {\n this.inflight = Math.max(0, this.inflight - 1);\n guard(this.sink, this.name, () => {\n const endedAt = Date.now();\n const headers: Record<string, string> = {};\n res.headers.forEach((v, k) => (headers[k] = v));\n const base = this.base(ctx, endedAt);\n base.status = res.status;\n base.statusText = res.statusText;\n base.responseHeaders = this.sink.sanitizer.sanitizeHeaders(headers);\n const ct = headers[\"content-type\"] ?? \"\";\n if (!this.sink.config.privacy.captureResponseBodies) return void this.emit(base);\n if (!this.sink.sanitizer.isTextual(ct) || /event-stream/i.test(ct) || !res.body) {\n base.responseBody = { kind: \"omitted\", reason: !res.body ? \"no-body\" : /event-stream/i.test(ct) ? \"stream\" : \"binary\" };\n return void this.emit(base);\n }\n // Leitura limitada de um clone; o corpo original permanece intacto para a aplicação.\n let clone: Response;\n try {\n clone = res.clone();\n } catch {\n base.responseBody = { kind: \"omitted\", reason: \"body-used\" };\n return void this.emit(base);\n }\n this.track(this.readBounded(clone)\n .then(({ text, size, truncated }) => {\n const b = this.sink.sanitizer.sanitizeTextBody(text, ct, size);\n b.truncated = truncated || b.truncated;\n base.responseBody = b;\n })\n .catch(() => {\n base.responseBody = { kind: \"omitted\", reason: \"read-failed\" };\n })\n .finally(() => guard(this.sink, this.name, () => this.emit(base))));\n });\n }\n\n private async readBounded(res: Response): Promise<{ text: string; size: number; truncated: boolean }> {\n const max = this.sink.config.privacy.maxBodyBytes;\n const reader = res.body!.getReader();\n const dec = new TextDecoder();\n let text = \"\";\n let size = 0;\n let truncated = false;\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n size += value.byteLength;\n if (text.length < max) text += dec.decode(value, { stream: true });\n if (size > max * 4) {\n truncated = true;\n await reader.cancel().catch(() => undefined); // cancela só o ramo clonado\n break;\n }\n }\n if (text.length > max) {\n text = text.slice(0, max);\n truncated = true;\n }\n return { text, size, truncated };\n }\n\n private failFetch(ctx: Ctx, err: unknown): void {\n this.inflight = Math.max(0, this.inflight - 1);\n guard(this.sink, this.name, () => {\n const e = err as Error;\n const base = this.base(ctx, Date.now());\n base.aborted = e?.name === \"AbortError\";\n base.error = { name: e?.name ?? \"Error\", message: this.sink.sanitizer.scrubString(String(e?.message ?? e)) };\n this.emit(base);\n });\n }\n\n // ---------------------------------------------------------------- XHR\n private patchXhr(): void {\n if (typeof XMLHttpRequest === \"undefined\") return;\n const proto = XMLHttpRequest.prototype;\n const self = this;\n const metas = new WeakMap<XMLHttpRequest, XhrMeta>();\n const origOpen = proto.open;\n const origSend = proto.send;\n const origSet = proto.setRequestHeader;\n\n const open = function (this: XMLHttpRequest, ...args: unknown[]) {\n try {\n if (self.active) metas.set(this, { method: String(args[0]).toUpperCase(), url: String(args[1]), headers: {} });\n } catch {\n /* nada */\n }\n return (origOpen as (...a: unknown[]) => void).apply(this, args);\n } as typeof proto.open;\n const setHeader = function (this: XMLHttpRequest, name: string, value: string) {\n try {\n const m = metas.get(this);\n if (m) m.headers[name.toLowerCase()] = value;\n } catch {\n /* nada */\n }\n return origSet.call(this, name, value);\n };\n const send = function (this: XMLHttpRequest, body?: Document | XMLHttpRequestBodyInit | null) {\n try {\n const m = metas.get(this);\n if (m && self.active) self.beginXhr(this, m, body);\n } catch {\n /* nada */\n }\n return origSend.call(this, body);\n };\n proto.open = open;\n proto.setRequestHeader = setHeader;\n proto.send = send;\n this.restore.push(() => {\n if (proto.open === open) proto.open = origOpen;\n if (proto.setRequestHeader === setHeader) proto.setRequestHeader = origSet;\n if (proto.send === send) proto.send = origSend;\n });\n }\n\n private beginXhr(xhr: XMLHttpRequest, m: XhrMeta, body?: Document | XMLHttpRequestBodyInit | null): void {\n const abs = new URL(m.url, location.href).href;\n if (this.isIgnored(abs)) return;\n const ctx: Ctx = { requestId: uid(\"req_\"), transport: \"xhr\", url: abs, method: m.method, startedAt: Date.now(), concurrent: this.inflight };\n ctx.requestHeaders = this.sink.sanitizer.sanitizeHeaders(m.headers);\n if (this.sink.config.privacy.captureRequestBodies) {\n ctx.requestBody = body == null ? { kind: \"omitted\", reason: \"no-body\" } : this.describeBody(body as BodyInit, m.headers[\"content-type\"] ?? \"\");\n }\n m.ctx = ctx;\n this.inflight++;\n xhr.addEventListener(\"abort\", () => (m.aborted = true));\n xhr.addEventListener(\"timeout\", () => (m.timedOut = true));\n let finishCapture!: () => void;\n this.track(new Promise<void>(resolve => { finishCapture = resolve; }));\n xhr.addEventListener(\"loadend\", () => {\n this.inflight = Math.max(0, this.inflight - 1);\n guard(this.sink, this.name, () => this.endXhr(xhr, m, ctx));\n finishCapture();\n });\n }\n\n private endXhr(xhr: XMLHttpRequest, m: XhrMeta, ctx: Ctx): void {\n const base = this.base(ctx, Date.now());\n const failed = xhr.status === 0;\n if (!failed) {\n base.status = xhr.status;\n base.statusText = xhr.statusText;\n }\n const headers: Record<string, string> = {};\n xhr.getAllResponseHeaders().trim().split(/\\r?\\n/).forEach((line) => {\n const i = line.indexOf(\":\");\n if (i > 0) headers[line.slice(0, i).trim().toLowerCase()] = line.slice(i + 1).trim();\n });\n base.responseHeaders = this.sink.sanitizer.sanitizeHeaders(headers);\n if (m.aborted) base.aborted = true;\n if (failed) base.error = { name: m.aborted ? \"AbortError\" : m.timedOut ? \"TimeoutError\" : \"NetworkError\", message: m.aborted ? \"aborted\" : m.timedOut ? \"timeout\" : \"network error\" };\n if (!failed && this.sink.config.privacy.captureResponseBodies) {\n const ct = headers[\"content-type\"] ?? \"\";\n if (this.sink.sanitizer.isTextual(ct) && (xhr.responseType === \"\" || xhr.responseType === \"text\")) base.responseBody = this.sink.sanitizer.sanitizeTextBody(xhr.responseText, ct);\n else if (xhr.responseType === \"json\") base.responseBody = this.sink.sanitizer.sanitizeTextBody(JSON.stringify(xhr.response ?? null), \"application/json\");\n else base.responseBody = { kind: \"omitted\", reason: \"binary\" };\n }\n this.emit(base);\n }\n\n // ---------------------------------------------------------------- comum\n private base(ctx: Ctx, endedAt: number): HttpEventData {\n const s = this.sink.sanitizer;\n return {\n requestId: ctx.requestId,\n transport: ctx.transport,\n url: s.sanitizeUrl(ctx.url),\n method: ctx.method,\n query: s.parseQuery(ctx.url),\n requestHeaders: ctx.requestHeaders,\n requestBody: ctx.requestBody,\n startedAt: ctx.startedAt,\n endedAt,\n durationMs: endedAt - ctx.startedAt,\n concurrent: ctx.concurrent,\n };\n }\n\n private emit(data: HttpEventData): void {\n if (!this.delivering) return;\n // Timestamp = início da requisição, para correlação temporal com a ação que a originou.\n this.sink.emit(\"http\", data, { priority: \"normal\", at: data.startedAt });\n }\n\n private describeBody(body: unknown, contentType: string): CapturedBody {\n const s = this.sink.sanitizer;\n const max = this.sink.config.privacy.maxBodyBytes;\n if (typeof body === \"string\") return s.sanitizeTextBody(body, contentType || \"text/plain\", body.length);\n if (typeof URLSearchParams !== \"undefined\" && body instanceof URLSearchParams) return s.sanitizeTextBody(body.toString(), \"application/x-www-form-urlencoded\");\n if (typeof FormData !== \"undefined\" && body instanceof FormData) {\n const form: Record<string, unknown> = {};\n body.forEach((v, k) => {\n form[k] = s.isSensitiveKey(k) ? \"[REDACTED]\" : typeof v === \"string\" ? s.scrubString(v.slice(0, max)) : `[File ${(v as File).name}, ${(v as File).size}B]`;\n });\n return { kind: \"form\", value: form };\n }\n if (typeof Blob !== \"undefined\" && body instanceof Blob) return { kind: \"binary\", size: body.size, reason: \"blob\" };\n if (body instanceof ArrayBuffer || ArrayBuffer.isView(body)) return { kind: \"binary\", size: (body as ArrayBuffer).byteLength };\n return { kind: \"omitted\", reason: \"unsupported-body\" };\n }\n}\n","import type { IframeEventData } from \"../types/events\";\nimport { Disposer, debounce, safe } from \"../utils/misc\";\nimport { guard, type EventSink, type Recorder } from \"./types\";\n\nconst SEATSIO = /(^|\\.)seatsio\\.net$|(^|\\.)seats\\.io$/i;\nconst LIMITATION =\n \"Conteúdo interno de iframes cross-origin não é acessível ao SDK nem ao rrweb; apenas presença, geometria, foco e interações observáveis na página principal são registrados.\";\n\n/**\n * Detecta iframes (ex.: seats.io) e registra metadados observáveis.\n * Nunca tenta acessar o DOM interno do iframe.\n */\nexport class IframeRecorder implements Recorder {\n readonly name = \"iframes\";\n private d = new Disposer();\n private known = new WeakMap<HTMLIFrameElement, number>();\n private counter = 0;\n private mo?: MutationObserver;\n\n constructor(private readonly sink: EventSink) {}\n\n start(): void {\n document.querySelectorAll(\"iframe\").forEach((f) => this.add(f));\n this.mo = new MutationObserver((records) =>\n guard(this.sink, this.name, () => {\n for (const r of records) {\n r.addedNodes.forEach((n) => this.scan(n, true));\n r.removedNodes.forEach((n) => this.scan(n, false));\n }\n }),\n );\n this.mo.observe(document.documentElement, { childList: true, subtree: true });\n this.d.add(() => this.mo?.disconnect());\n\n // Foco que entra em iframe: document.activeElement passa a ser o <iframe> e a janela perde foco.\n let focused: HTMLIFrameElement | null = null;\n this.d.listen(window, \"blur\", () =>\n setTimeout(() => {\n guard(this.sink, this.name, () => {\n const a = document.activeElement;\n if (a instanceof HTMLIFrameElement) {\n focused = a;\n this.event(\"focus\", a);\n }\n });\n }, 0),\n );\n this.d.listen(window, \"focus\", () =>\n guard(this.sink, this.name, () => {\n if (focused) {\n this.event(\"blur\", focused);\n focused = null;\n }\n }),\n );\n const onResize = debounce(() => document.querySelectorAll(\"iframe\").forEach((f) => this.known.has(f) && this.event(\"resized\", f)), 500);\n this.d.listen(window, \"resize\", onResize);\n this.d.add(() => onResize.cancel());\n }\n\n private scan(n: Node, added: boolean): void {\n if (!(n instanceof Element)) return;\n const frames = n instanceof HTMLIFrameElement ? [n] : Array.from(n.querySelectorAll(\"iframe\"));\n for (const f of frames) {\n if (added) this.add(f);\n else if (this.known.has(f)) this.event(\"removed\", f);\n }\n }\n\n private add(f: HTMLIFrameElement): void {\n if (this.known.has(f)) return;\n this.known.set(f, ++this.counter);\n this.event(\"present\", f);\n // src pode ser definido depois (componentes dinâmicos)\n f.addEventListener(\"load\", () => guard(this.sink, this.name, () => this.event(\"resized\", f)), { once: true });\n }\n\n private event(phase: IframeEventData[\"phase\"], f: HTMLIFrameElement): void {\n const src = f.getAttribute(\"src\") ?? \"\";\n let origin: string | undefined;\n let path: string | undefined;\n let host = \"\";\n try {\n const u = new URL(src, location.href);\n origin = u.origin;\n path = u.pathname; // query/hash descartados: podem carregar tokens\n host = u.hostname;\n } catch {\n /* src vazio / about:blank */\n }\n const crossOrigin = origin !== undefined && origin !== location.origin && origin !== \"null\";\n const r = safe(() => f.getBoundingClientRect());\n const idx = this.known.get(f) ?? 0;\n this.sink.emit<IframeEventData>(\n \"iframe\",\n {\n phase,\n provider: SEATSIO.test(host) ? \"seatsio\" : \"unknown\",\n origin,\n path,\n crossOrigin,\n rect: { x: Math.round(r?.x ?? 0), y: Math.round(r?.y ?? 0), width: Math.round(r?.width ?? 0), height: Math.round(r?.height ?? 0) },\n index: idx,\n limitation: crossOrigin ? LIMITATION : \"same-origin\",\n },\n { priority: \"normal\" },\n );\n }\n\n stop(): void {\n this.d.dispose();\n }\n}\n","import type { Priority } from \"../types/config\";\nimport { safe } from \"../utils/misc\";\nimport { guard, type EventSink, type Recorder } from \"./types\";\n\ntype RRWebModule = typeof import(\"rrweb\");\ntype RRWebEvent = { type: number; data?: any; timestamp: number };\n\n/** Tipos de evento rrweb: 0 DomContentLoaded, 1 Load, 2 FullSnapshot, 3 Incremental, 4 Meta, 5 Custom, 6 Plugin. */\nconst PRIORITY: Record<number, Priority> = { 2: \"critical\", 4: \"critical\", 5: \"critical\", 0: \"normal\", 1: \"normal\", 3: \"normal\", 6: \"normal\" };\n// IncrementalSource: 1 MouseMove, 6 TouchMove, 12 Drag, 3 Scroll\nconst URL_ATTRS = [\"src\", \"href\", \"action\", \"poster\", \"data-src\", \"data\", \"formaction\", \"srcset\", \"cite\", \"rr_src\"];\nconst LOW_SOURCES = new Set([1, 6, 12, 3]);\n\n/**\n * Captura visual (DOM + mutações + interações) usando rrweb. Carregado sob demanda.\n * Não produz ações semânticas: isso é responsabilidade do ActionRecorder.\n */\nexport class RRWebRecorder implements Recorder {\n readonly name = \"rrweb\";\n private stopFn?: () => void;\n private mod?: RRWebModule;\n private paused = false;\n private stopped = true;\n needsSnapshot = false;\n private snapshotsTaken = 0;\n\n constructor(private readonly sink: EventSink) {}\n\n async start(): Promise<void> {\n this.stopped = false;\n const { recording, privacy } = this.sink.config;\n const mod = (this.mod ??= (await import(\"rrweb\")) as RRWebModule);\n if (this.stopped) return;\n const allowed = privacy.allowedInputSelectors.join(\",\");\n const block = privacy.blockSelectors.join(\",\");\n const maskText = privacy.maskAllText ? \"*\" : privacy.maskTextSelectors.join(\",\");\n const options: Record<string, unknown> = {\n emit: (event: RRWebEvent) => this.onEvent(event),\n blockSelector: block || undefined,\n maskTextSelector: maskText || undefined,\n maskAllInputs: privacy.maskSensitiveInputs && !privacy.captureSensitiveValues,\n maskInputOptions: privacy.captureSensitiveValues\n ? { password: false }\n : privacy.maskSensitiveInputs\n ? { password: true, email: true, tel: true, text: true, textarea: true, search: true, url: true, number: true, select: true, date: true, \"datetime-local\": true, month: true, time: true, week: true }\n : { password: true },\n maskInputFn: (text: string, el: HTMLElement) => {\n if (privacy.captureSensitiveValues) return text;\n // Senhas nunca são liberadas, mesmo que o elemento esteja na allowlist.\n if ((el as HTMLInputElement)?.type === \"password\") return \"*\".repeat(text.length);\n if (allowed && safe(() => el.matches(allowed))) return text;\n return \"*\".repeat(text.length);\n },\n recordCanvas: recording.rrwebRecordCanvas,\n collectFonts: false,\n inlineStylesheet: true,\n sampling: { mousemove: Math.max(50, recording.throttleMs), scroll: 150, input: \"last\", media: 800 },\n slimDOMOptions: { script: true, comment: true, headFavicon: true, headWhitespace: true },\n checkoutEveryNms: recording.rrwebCheckoutEveryMs > 0 ? recording.rrwebCheckoutEveryMs : undefined,\n errorHandler: () => true, // erros internos do rrweb não propagam\n };\n this.stopFn = (mod.record as unknown as (o: Record<string, unknown>) => (() => void) | undefined)(options) ?? undefined;\n }\n\n private onEvent(event: RRWebEvent): void {\n if (this.paused) return;\n guard(this.sink, this.name, () => {\n this.sanitizeEvent(event);\n let priority = PRIORITY[event.type] ?? \"normal\";\n if (event.type === 3 && LOW_SOURCES.has(event.data?.source)) priority = \"low\";\n if (event.type === 2) this.snapshotsTaken++;\n const emitted = this.sink.emit(\"rrweb\", event, { priority, at: event.timestamp });\n // Se descartamos eventos incrementais, o replay perde consistência: força novo snapshot.\n if (!emitted && event.type === 3) this.needsSnapshot = true;\n });\n }\n\n /** Sanitiza URLs em atributos e padrões sensíveis em textos ANTES de persistir/enviar. */\n private sanitizeEvent(event: RRWebEvent): void {\n const s = this.sink.sanitizer;\n const clean = (k: string, v: string) =>\n k === \"srcset\" ? v.split(\",\").map((part) => { const [u, ...rest] = part.trim().split(/\\s+/); return [s.redactUrlAttribute(u), ...rest].join(\" \"); }).join(\", \") : s.redactUrlAttribute(v);\n const node = (n: any): void => {\n if (!n || typeof n !== \"object\") return;\n if (n.type === 2 && n.attributes) {\n for (const k of URL_ATTRS) if (typeof n.attributes[k] === \"string\") n.attributes[k] = clean(k, n.attributes[k]);\n } else if (n.type === 3 && typeof n.textContent === \"string\") {\n n.textContent = s.scrubString(n.textContent);\n }\n if (Array.isArray(n.childNodes)) for (const c of n.childNodes) node(c);\n };\n if (event.type === 4 && event.data?.href) event.data.href = s.sanitizeUrl(event.data.href);\n else if (event.type === 2) node(event.data?.node);\n else if (event.type === 3 && event.data?.source === 0) {\n for (const a of event.data.adds ?? []) node(a.node);\n for (const t of event.data.texts ?? []) if (typeof t.value === \"string\") t.value = s.scrubString(t.value);\n for (const a of event.data.attributes ?? []) {\n for (const k of URL_ATTRS) if (typeof a.attributes?.[k] === \"string\") a.attributes[k] = clean(k, a.attributes[k]);\n }\n }\n }\n\n /** Chamado pelo núcleo quando há folga novamente após descartes. */\n recoverIfNeeded(): void {\n if (this.needsSnapshot && !this.paused) {\n this.needsSnapshot = false;\n this.takeFullSnapshot();\n }\n }\n\n takeFullSnapshot(): void {\n if (this.stopped) return;\n guard(this.sink, this.name, () => this.mod?.record.takeFullSnapshot(true));\n }\n\n addCustomEvent(tag: string, payload: unknown): void {\n if (this.stopped) return;\n guard(this.sink, this.name, () => this.mod?.record.addCustomEvent(tag, payload));\n }\n\n get snapshots(): number {\n return this.snapshotsTaken;\n }\n\n pause(): void {\n this.paused = true;\n }\n\n /** Ao retomar, as mutações perdidas durante a pausa exigem um snapshot completo. */\n resume(): void {\n this.paused = false;\n this.takeFullSnapshot();\n }\n\n stop(): void {\n this.stopped = true;\n safe(() => this.stopFn?.());\n this.stopFn = undefined;\n }\n}\n","import { Disposer, safe } from \"../utils/misc\";\n\nexport type NavigationKind = \"pushState\" | \"replaceState\" | \"popstate\" | \"hashchange\";\n\nexport interface LifecycleHandlers {\n onPageHide(): void;\n onPageShow?(): void;\n onVisibility(hidden: boolean): void;\n onConnectivity(online: boolean): void;\n onNavigation(info: { from: string; to: string; kind: NavigationKind }): void;\n}\n\nconst PATCHED = \"__offscriptHistoryPatched\";\n\n/**\n * Eventos de ciclo de vida da página e instrumentação controlada da History API\n * (SPA: Vue Router, Inertia, React Router, etc.).\n */\nexport class LifecycleManager {\n private d = new Disposer();\n private lastUrl = \"\";\n private installed = false;\n\n constructor(private readonly h: LifecycleHandlers) {}\n\n install(): void {\n if (this.installed || typeof window === \"undefined\") return;\n this.installed = true;\n this.lastUrl = location.href;\n const d = this.d;\n // pagehide é o evento confiável (inclusive bfcache); beforeunload como reforço.\n d.listen(window, \"pagehide\", () => safe(() => this.h.onPageHide()), { capture: true });\n d.listen(window, \"pageshow\", (event) => {\n if ((event as PageTransitionEvent).persisted) safe(() => this.h.onPageShow?.());\n });\n d.listen(document, \"visibilitychange\", () => {\n const hidden = document.visibilityState === \"hidden\";\n safe(() => this.h.onVisibility(hidden));\n });\n d.listen(window, \"online\", () => safe(() => this.h.onConnectivity(true)));\n d.listen(window, \"offline\", () => safe(() => this.h.onConnectivity(false)));\n d.listen(window, \"popstate\", () => this.notify(\"popstate\"));\n d.listen(window, \"hashchange\", () => this.notify(\"hashchange\"));\n this.patchHistory(\"pushState\");\n this.patchHistory(\"replaceState\");\n }\n\n private notify(kind: NavigationKind): void {\n const to = location.href;\n if (to === this.lastUrl) return;\n const from = this.lastUrl;\n this.lastUrl = to;\n safe(() => this.h.onNavigation({ from, to, kind }));\n }\n\n private patchHistory(method: \"pushState\" | \"replaceState\"): void {\n const original = history[method] as History[\"pushState\"] & { [PATCHED]?: unknown };\n if (original[PATCHED]) return;\n const self = this;\n const patched = function (this: History, ...args: Parameters<History[\"pushState\"]>) {\n const result = original.apply(this, args);\n self.notify(method);\n return result;\n } as History[\"pushState\"] & { [PATCHED]?: unknown };\n patched[PATCHED] = original;\n history[method] = patched;\n this.d.add(() => {\n if (history[method] === patched) history[method] = original;\n });\n }\n\n uninstall(): void {\n this.d.dispose();\n this.installed = false;\n }\n}\n","import type { OffscriptEvent } from \"../types/events\";\n\nexport type SavedStatus = \"recording\" | \"paused\" | \"stopped\";\nexport interface SavedRecording { status: SavedStatus; events: OffscriptEvent[]; }\n\n/** Local draft only. No destination, credentials or backend protocol. */\nexport class RecordingStore {\n private pending = new Set<Promise<void>>();\n private failure?: Error;\n private uncommitted = new Map<number, OffscriptEvent>();\n private status?: SavedStatus;\n private constructor(private readonly database: IDBDatabase) {}\n\n static async open(key: string): Promise<RecordingStore> {\n const database = await new Promise<IDBDatabase>((resolve, reject) => {\n const request = indexedDB.open(`offscript-recording-${key}`, 1);\n request.onupgradeneeded = () => {\n request.result.createObjectStore(\"events\", { keyPath: \"sequence\" });\n request.result.createObjectStore(\"state\");\n };\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error);\n });\n return new RecordingStore(database);\n }\n\n async load(): Promise<SavedRecording | null> {\n await this.flush();\n const checkpoint = sessionStorage.getItem(this.checkpointKey);\n if (checkpoint) {\n const saved = JSON.parse(checkpoint) as SavedRecording;\n await this.write([\"events\", \"state\"], transaction => {\n for (const event of saved.events) transaction.objectStore(\"events\").put(event);\n transaction.objectStore(\"state\").put(saved.status, \"status\");\n });\n sessionStorage.removeItem(this.checkpointKey);\n }\n return new Promise((resolve, reject) => {\n const transaction = this.database.transaction([\"events\", \"state\"], \"readonly\");\n const events = transaction.objectStore(\"events\").getAll();\n const state = transaction.objectStore(\"state\").get(\"status\");\n transaction.oncomplete = () => {\n this.status = state.result;\n resolve(state.result ? { status: state.result, events: events.result } : null);\n };\n transaction.onabort = () => reject(transaction.error);\n });\n }\n\n append(event: OffscriptEvent): Promise<void> {\n this.uncommitted.set(event.sequence, event);\n return this.write([\"events\"], transaction => { transaction.objectStore(\"events\").put(event); })\n .then(() => { this.uncommitted.delete(event.sequence); });\n }\n setStatus(status: SavedStatus): Promise<void> {\n this.status = status;\n return this.write([\"state\"], transaction => { transaction.objectStore(\"state\").put(status, \"status\"); });\n }\n async clear(): Promise<void> {\n await this.write([\"events\", \"state\"], transaction => {\n transaction.objectStore(\"events\").clear();\n transaction.objectStore(\"state\").clear();\n });\n this.failure = undefined;\n this.status = undefined;\n this.uncommitted.clear();\n sessionStorage.removeItem(this.checkpointKey);\n }\n /** Synchronous handoff of the last uncommitted events before document unload. */\n checkpoint(): void {\n if (!this.status) return;\n sessionStorage.setItem(this.checkpointKey, JSON.stringify({ status: this.status, events: [...this.uncommitted.values()] }));\n }\n private get checkpointKey(): string { return `${this.database.name}-handoff`; }\n async flush(): Promise<void> {\n await Promise.allSettled([...this.pending]);\n if (this.failure) throw this.failure;\n }\n async close(): Promise<void> {\n try { await this.flush(); } finally { this.database.close(); }\n }\n private write(stores: string[], apply: (transaction: IDBTransaction) => void): Promise<void> {\n const operation = new Promise<void>((resolve, reject) => {\n const transaction = this.database.transaction(stores, \"readwrite\");\n transaction.oncomplete = () => resolve();\n transaction.onabort = () => reject(transaction.error ?? new Error(\"Falha ao salvar gravação local\"));\n try { apply(transaction); } catch (error) { transaction.abort(); reject(error); }\n });\n this.pending.add(operation);\n void operation.catch(error => { this.failure = error instanceof Error ? error : new Error(String(error)); }).finally(() => this.pending.delete(operation));\n return operation;\n }\n}\n","import { DEFAULT_RECORDING, type OffscriptConfig, type ResolvedConfig } from \"../types/config\";\nimport { resolvePrivacy } from \"../privacy/PrivacyConfig\";\nimport { deepMerge } from \"../utils/misc\";\n\nexport function resolveConfig(input: OffscriptConfig): ResolvedConfig {\n return {\n recording: deepMerge(DEFAULT_RECORDING, input.recording),\n privacy: resolvePrivacy(input.privacy),\n correlationWindowMs: input.correlationWindowMs ?? 3000,\n controls: input.controls ?? true,\n persistenceKey: input.persistenceKey,\n onComplete: input.onComplete,\n };\n}\n","import type { OffscriptState, RecordingStatus } from \"../types/recording\";\n\n/**\n * Alvo mínimo para o overlay não importar a classe do SDK.\n */\nexport interface RecordingControlTarget {\n getState(): OffscriptState;\n on(type: \"statusChange\", fn: (payload: { from: RecordingStatus; to: RecordingStatus }) => void): () => void;\n pauseRecording(): Promise<void>;\n resumeRecording(): Promise<void>;\n finishRecording(): Promise<unknown>;\n startRecording(): Promise<void>;\n discardRecording(): Promise<void>;\n capturesSensitiveValues(): boolean;\n}\n\nconst HOST_ATTR = \"data-offscript-console\";\n\nconst EYE_SEQUENCE = [\n { pose: \"open\", duration: 2600 },\n { pose: \"blink\", duration: 160 },\n { pose: \"open\", duration: 1800 },\n { pose: \"left\", duration: 700 },\n { pose: \"open\", duration: 1500 },\n { pose: \"wink\", duration: 480 },\n { pose: \"open\", duration: 1900 },\n { pose: \"right\", duration: 700 },\n { pose: \"open\", duration: 1600 },\n { pose: \"up\", duration: 640 },\n { pose: \"happy\", duration: 720 },\n] as const;\n\nconst EYE_PATHS: Record<string, [string, string]> = {\n open: [\"M59.5 79.5v15\", \"M93 79.5v15\"],\n blink: [\"M52 89q7.5 5 15 0\", \"M85.5 89q7.5 5 15 0\"],\n wink: [\"M52 89q7.5 5 15 0\", \"M93 79.5v15\"],\n happy: [\"M52 91q7.5-12 15 0\", \"M85.5 91q7.5-12 15 0\"],\n};\n\n/**\n * Controles da gravação. Fechado, só a marca; aberto, a logo e os ícones.\n * O host fica com tamanho zero e a interface mora num shadow fechado.\n */\nexport class RecordingControls {\n private host?: HTMLElement;\n private shadow?: ShadowRoot;\n private note?: HTMLElement;\n private observer?: MutationObserver;\n private dockWatch?: ResizeObserver;\n private unsubscribe?: () => void;\n private eyeTimer = 0;\n private placeFrame = 0;\n private eyeIndex = 0;\n private busy = false;\n private expanded = true;\n private privacyOpen = true;\n private failure = \"\";\n private readonly onVisibility = (): void => {\n window.clearTimeout(this.eyeTimer);\n if (!document.hidden) this.scheduleEye();\n };\n private readonly onViewport = (): void => {\n this.placeConfirm();\n this.schedulePlacePrivacy();\n };\n\n constructor(private readonly sdk: RecordingControlTarget) {}\n\n mount(): void {\n if (this.host || typeof document === \"undefined\") return;\n const host = document.createElement(\"div\");\n host.setAttribute(HOST_ATTR, \"\");\n host.setAttribute(\"data-offscript-ignore\", \"\");\n host.className = \"offscript-ignore\";\n host.style.cssText = \"position:fixed;left:0;top:0;width:0;height:0;margin:0;padding:0;border:0;overflow:visible;z-index:2147483646;pointer-events:none;\";\n const shadow = host.attachShadow({ mode: \"closed\" });\n shadow.innerHTML = TEMPLATE;\n this.bind(shadow);\n this.host = host;\n this.shadow = shadow;\n this.note = shadow.querySelector(\"[data-note]\") ?? undefined;\n this.place();\n this.watchDom();\n this.unsubscribe = this.sdk.on(\"statusChange\", () => this.render());\n window.addEventListener(\"resize\", this.onViewport);\n window.visualViewport?.addEventListener(\"resize\", this.onViewport);\n document.fonts?.ready.then(() => {\n if (this.host) this.onViewport();\n });\n this.watchDock();\n this.render();\n this.startEyes();\n }\n\n /** Independent notice so the host may destroy the controls after successful upload. */\n showSuccess(): void {\n const notice = document.createElement(\"div\");\n notice.setAttribute(\"data-offscript-success\", \"\");\n notice.setAttribute(\"data-offscript-ignore\", \"\");\n notice.className = \"offscript-ignore\";\n notice.style.cssText = \"position:fixed;right:16px;bottom:16px;max-width:calc(100vw - 32px);z-index:2147483647;\";\n const shadow = notice.attachShadow({ mode: \"closed\" });\n shadow.innerHTML = SUCCESS_TEMPLATE;\n document.body.appendChild(notice);\n const timer = window.setTimeout(() => notice.remove(), 8000);\n shadow.querySelector(\"button\")!.addEventListener(\"click\", () => {\n window.clearTimeout(timer);\n notice.remove();\n });\n }\n\n unmount(): void {\n this.unsubscribe?.();\n this.unsubscribe = undefined;\n this.observer?.disconnect();\n this.observer = undefined;\n this.dockWatch?.disconnect();\n this.dockWatch = undefined;\n window.cancelAnimationFrame(this.placeFrame);\n this.placeFrame = 0;\n window.clearTimeout(this.eyeTimer);\n window.removeEventListener(\"resize\", this.onViewport);\n window.visualViewport?.removeEventListener(\"resize\", this.onViewport);\n document.removeEventListener(\"visibilitychange\", this.onVisibility);\n this.host?.remove();\n this.host = undefined;\n this.shadow = undefined;\n }\n\n private place(): void {\n const host = this.host;\n const parent = document.body ?? document.documentElement;\n if (!host || !parent || host.parentNode === parent) return;\n parent.appendChild(host);\n }\n\n private watchDom(): void {\n if (typeof MutationObserver === \"undefined\") return;\n this.observer?.disconnect();\n this.observer = new MutationObserver(() => {\n this.place();\n if (document.body) this.observer?.observe(document.body, { childList: true });\n });\n this.observer.observe(document.documentElement, { childList: true });\n if (document.body) this.observer.observe(document.body, { childList: true });\n }\n\n private watchDock(): void {\n const dock = this.shadow?.querySelector(\".dock\");\n if (!(dock instanceof HTMLElement) || typeof ResizeObserver === \"undefined\") return;\n this.dockWatch?.disconnect();\n this.dockWatch = new ResizeObserver(() => this.placePrivacy());\n this.dockWatch.observe(dock);\n }\n\n private bind(shadow: ShadowRoot): void {\n const stop = (event: Event) => event.stopPropagation();\n shadow.addEventListener(\"click\", (event) => {\n const actionNode = event.composedPath().find((node) => node instanceof Element && node.hasAttribute(\"data-action\"));\n const action = actionNode instanceof Element ? actionNode.getAttribute(\"data-action\") : null;\n if (action === \"open\") {\n this.expanded = true;\n this.render();\n } else if (action === \"close\") {\n this.expanded = false;\n this.render();\n } else if (action === \"record\") void this.run(() => this.sdk.startRecording());\n else if (action === \"pause\") void this.run(() => this.sdk.pauseRecording());\n else if (action === \"resume\") void this.run(() => this.sdk.resumeRecording());\n else if (action === \"stop\") void this.run(() => this.sdk.finishRecording());\n else if (action === \"new\") this.openConfirm();\n else if (action === \"cancel\") this.closeConfirm();\n else if (action === \"confirm\") {\n this.closeConfirm();\n void this.run(() => this.sdk.discardRecording());\n } else if (action === \"privacy-show\") {\n this.privacyOpen = true;\n this.render();\n } else if (action === \"privacy-hide\") {\n this.privacyOpen = false;\n this.render();\n }\n }, true);\n for (const type of [\"click\", \"dblclick\", \"auxclick\", \"contextmenu\", \"pointerdown\", \"pointerup\", \"mousedown\", \"mouseup\", \"keydown\", \"keyup\", \"keypress\", \"input\", \"change\", \"mouseover\", \"mouseout\"]) {\n shadow.addEventListener(type, stop);\n }\n shadow.querySelector(\"[data-confirm]\")?.addEventListener(\"keydown\", (event) => {\n if (event instanceof KeyboardEvent && event.key === \"Escape\") this.closeConfirm();\n });\n shadow.querySelector(\"[data-privacy]\")?.addEventListener(\"keydown\", (event) => {\n if (event instanceof KeyboardEvent && event.key === \"Escape\") {\n this.privacyOpen = false;\n this.render();\n }\n });\n }\n\n private openConfirm(): void {\n const bubble = this.shadow?.querySelector(\"[data-confirm]\");\n if (!(bubble instanceof HTMLElement) || this.busy || !bubble.hidden) return;\n bubble.hidden = false;\n this.placeConfirm();\n this.paintPrivacy();\n const cancel = bubble.querySelector(\"[data-action='cancel']\");\n if (cancel instanceof HTMLElement) cancel.focus();\n }\n\n private placeConfirm(): void {\n const bubble = this.shadow?.querySelector(\"[data-confirm]\");\n const card = bubble?.querySelector(\".bubble\");\n const button = this.shadow?.querySelector(\"[data-action='new']\");\n if (!(bubble instanceof HTMLElement) || !(card instanceof HTMLElement) || !(button instanceof HTMLElement)) return;\n const buttonBox = button.getBoundingClientRect();\n const buttonCenter = buttonBox.left + buttonBox.width / 2;\n const tailHalf = 4.5;\n const margin = 12;\n const viewport = document.documentElement.clientWidth;\n let rightEdge = buttonCenter + 22 + tailHalf;\n rightEdge = Math.min(viewport - margin, Math.max(margin + card.offsetWidth, rightEdge));\n bubble.style.right = `${Math.round(viewport - rightEdge)}px`;\n const tail = Math.min(Math.max(12, rightEdge - buttonCenter - tailHalf), Math.max(12, card.offsetWidth - 18));\n card.style.setProperty(\"--tail\", `${Math.round(tail)}px`);\n }\n\n private closeConfirm(): void {\n const bubble = this.shadow?.querySelector(\"[data-confirm]\");\n if (bubble instanceof HTMLElement) bubble.hidden = true;\n this.paintPrivacy();\n }\n\n private async run(task: () => Promise<unknown>): Promise<void> {\n if (this.busy) return;\n this.busy = true;\n this.failure = \"\";\n this.render();\n try {\n await task();\n } catch {\n this.failure = \"Não foi possível concluir\";\n } finally {\n this.busy = false;\n this.render();\n }\n }\n\n private render(): void {\n this.place();\n const { status, pending } = this.sdk.getState();\n const shell = this.shadow?.querySelector(\"[data-shell]\");\n shell?.setAttribute(\"data-open\", this.expanded ? \"true\" : \"false\");\n shell?.setAttribute(\"data-state\", status);\n if (this.note) this.note.textContent = this.failure;\n const live = status === \"recording\" || status === \"paused\";\n const canFinish = live || (status === \"stopped\" && pending > 0);\n if (!live) this.closeConfirm();\n this.paintPrivacy();\n this.setHidden(\"record\", live || status === \"initializing\" || status === \"stopping\");\n this.setHidden(\"pause\", status !== \"recording\");\n this.setHidden(\"resume\", status !== \"paused\");\n this.setHidden(\"new\", !live);\n this.setHidden(\"stop\", !canFinish);\n this.setEnabled(\"record\", !this.busy && !live && status !== \"initializing\" && status !== \"stopping\");\n this.setEnabled(\"pause\", !this.busy && status === \"recording\");\n this.setEnabled(\"resume\", !this.busy && status === \"paused\");\n this.setEnabled(\"stop\", !this.busy && canFinish);\n this.setEnabled(\"new\", !this.busy && live);\n }\n\n private paintPrivacy(): void {\n const flag = this.sdk.capturesSensitiveValues();\n const confirm = this.shadow?.querySelector(\"[data-confirm]\");\n const confirmOpen = confirm instanceof HTMLElement && !confirm.hidden;\n const bubble = this.shadow?.querySelector(\"[data-privacy]\");\n const show = flag && this.privacyOpen && this.expanded && !confirmOpen;\n if (bubble instanceof HTMLElement) {\n bubble.hidden = !show;\n if (!show) this.clearPrivacyPlace(bubble);\n }\n if (show) this.schedulePlacePrivacy();\n this.setHidden(\"privacy-show\", !flag || this.privacyOpen || !this.expanded);\n }\n\n private schedulePlacePrivacy(): void {\n this.placePrivacy();\n window.cancelAnimationFrame(this.placeFrame);\n this.placeFrame = window.requestAnimationFrame(() => {\n this.placePrivacy();\n this.placeFrame = window.requestAnimationFrame(() => {\n this.placeFrame = 0;\n this.placePrivacy();\n });\n });\n }\n\n private clearPrivacyPlace(wrap: HTMLElement): void {\n wrap.style.position = \"\";\n wrap.style.transform = \"\";\n wrap.style.width = \"\";\n wrap.style.maxWidth = \"\";\n wrap.style.left = \"\";\n wrap.style.right = \"\";\n wrap.style.top = \"\";\n wrap.style.bottom = \"\";\n }\n\n private placePrivacy(): void {\n const wrap = this.shadow?.querySelector(\"[data-privacy]\");\n const card = wrap?.querySelector(\".bubble\");\n const face = this.shadow?.querySelector(\".face\");\n if (!(wrap instanceof HTMLElement) || !(card instanceof HTMLElement) || !(face instanceof HTMLElement) || wrap.hidden) return;\n const box = face.getBoundingClientRect();\n if (box.width < 8 || box.height < 8 || (box.top < 1 && box.left < 1)) return;\n const margin = 12;\n const viewport = document.documentElement.clientWidth;\n const maxWidth = Math.min(264, viewport - margin * 2);\n wrap.style.position = \"fixed\";\n wrap.style.transform = \"none\";\n wrap.style.width = `${maxWidth}px`;\n wrap.style.maxWidth = `${maxWidth}px`;\n wrap.style.left = \"auto\";\n wrap.style.bottom = \"auto\";\n const faceCenter = box.left + box.width / 2;\n const tailHalf = 5;\n let rightEdge = faceCenter + 12 + tailHalf;\n rightEdge = Math.min(viewport - margin, Math.max(margin + maxWidth, rightEdge));\n wrap.style.right = `${Math.round(viewport - rightEdge)}px`;\n wrap.style.top = `${Math.round(Math.max(margin, box.top - 10 - wrap.offsetHeight))}px`;\n const tail = Math.min(Math.max(12, rightEdge - faceCenter - tailHalf), Math.max(12, maxWidth - 18));\n card.style.setProperty(\"--tail\", `${Math.round(tail)}px`);\n }\n\n private setEnabled(action: string, enabled: boolean): void {\n const button = this.shadow?.querySelector(`[data-action='${action}']`);\n if (button instanceof HTMLButtonElement) button.disabled = !enabled;\n }\n\n private setHidden(action: string, hidden: boolean): void {\n const button = this.shadow?.querySelector(`[data-action='${action}']`);\n if (button instanceof HTMLButtonElement) button.hidden = hidden;\n }\n\n private startEyes(): void {\n const media = window.matchMedia?.(\"(prefers-reduced-motion: reduce)\");\n if (!media || media.matches) return;\n document.addEventListener(\"visibilitychange\", this.onVisibility);\n this.scheduleEye();\n }\n\n private scheduleEye(): void {\n const beat = EYE_SEQUENCE[this.eyeIndex % EYE_SEQUENCE.length];\n this.applyPose(beat.pose);\n this.eyeIndex = (this.eyeIndex + 1) % EYE_SEQUENCE.length;\n this.eyeTimer = window.setTimeout(() => this.scheduleEye(), beat.duration);\n }\n\n private applyPose(pose: string): void {\n const [left, right] = EYE_PATHS[pose] ?? EYE_PATHS.open;\n this.shadow?.querySelectorAll(\"[data-eye='left']\").forEach((node) => node.setAttribute(\"d\", left));\n this.shadow?.querySelectorAll(\"[data-eye='right']\").forEach((node) => node.setAttribute(\"d\", right));\n this.shadow?.querySelectorAll(\"[data-eyes]\").forEach((node) => node.setAttribute(\"data-pose\", pose));\n }\n}\n\nconst ICON = {\n pause: `<svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M5 3.5v9M11 3.5v9\"/></svg>`,\n play: `<svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M6 3.8 12.2 8 6 12.2z\" fill=\"currentColor\" stroke=\"none\"/></svg>`,\n close: `<svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M4 4l8 8M12 4 4 12\"/></svg>`,\n speak: `<svg viewBox=\"0 0 16 16\" aria-hidden=\"true\"><path d=\"M3.5 3.5h9a1.5 1.5 0 0 1 1.5 1.5v5a1.5 1.5 0 0 1-1.5 1.5H7.2L4.5 13.5v-2H3.5A1.5 1.5 0 0 1 2 10V5a1.5 1.5 0 0 1 1.5-1.5Z\"/></svg>`,\n};\n\nfunction mark(gradientId: string): string {\n return `<svg class=\"mark\" viewBox=\"14 9 138 126\" fill=\"none\" aria-hidden=\"true\">\n <defs>\n <linearGradient id=\"${gradientId}\" x1=\"112\" y1=\"41\" x2=\"143\" y2=\"17\" gradientUnits=\"userSpaceOnUse\">\n <stop offset=\"0\" stop-color=\"#753eff\"></stop>\n <stop offset=\"1\" stop-color=\"#1772ff\"></stop>\n </linearGradient>\n </defs>\n <path d=\"M72 23C88 23 101 26 109 32L112 40C122 50 128 64 128 80C128 109 104 131 72 131C41 131 16 108 16 80C16 46 40 23 72 23Z\" fill=\"#eeeef7\"></path>\n <path d=\"M112 41C119 37 123 27 131 22C135 19 139 18 143 17\" stroke=\"url(#${gradientId})\" stroke-width=\"8\" stroke-linecap=\"round\"></path>\n <g class=\"eyes\" data-eyes data-pose=\"open\" stroke=\"#10182e\" stroke-width=\"7\" stroke-linecap=\"round\">\n <path data-eye=\"left\" d=\"M59.5 79.5v15\"></path>\n <path data-eye=\"right\" d=\"M93 79.5v15\"></path>\n </g>\n </svg>`;\n}\n\nconst TEMPLATE = `\n<style>\n :host { color-scheme: dark; }\n button {\n display: grid;\n place-items: center;\n width: 32px;\n height: 32px;\n margin: 0;\n padding: 0;\n border: 1px solid #3a4458;\n border-radius: 999px;\n background: transparent;\n color: #f4f3fc;\n cursor: pointer;\n }\n button svg {\n width: 15px;\n height: 15px;\n fill: none;\n stroke: currentColor;\n stroke-width: 1.7;\n stroke-linecap: round;\n stroke-linejoin: round;\n }\n button:hover:not(:disabled) { border-color: #a596ff; color: #d0c8ff; }\n button:focus-visible { outline: 2px solid #a596ff; outline-offset: 2px; }\n button:disabled { cursor: not-allowed; opacity: 0.4; }\n button[hidden] { display: none; }\n button.text {\n width: auto;\n padding: 0 12px;\n font: 600 12px/1 \"Plus Jakarta Sans\", ui-sans-serif, system-ui, sans-serif;\n }\n button.record {\n border: 0;\n background: linear-gradient(100deg, #6847ff, #1673ff);\n color: #fff;\n }\n button.finish {\n border: 0;\n background: #e5485f;\n color: #fff;\n }\n button.record:hover:not(:disabled),\n button.finish:hover:not(:disabled) { color: #fff; filter: brightness(1.08); }\n button.primary {\n border: 0;\n background: linear-gradient(100deg, #6847ff, #1673ff);\n color: #fff;\n }\n button.primary:hover:not(:disabled) { color: #fff; filter: brightness(1.08); }\n .launcher, .dock {\n position: fixed;\n right: 16px;\n bottom: 16px;\n z-index: 1;\n border: 1px solid #232b3b;\n background: #151b27;\n box-shadow: 0 18px 40px rgba(3, 5, 12, 0.5);\n pointer-events: auto;\n font-family: \"Plus Jakarta Sans\", ui-sans-serif, system-ui, sans-serif;\n }\n .launcher {\n width: 56px;\n height: 56px;\n padding: 8px;\n border-radius: 999px;\n cursor: pointer;\n }\n .launcher .mark { width: 100%; height: 100%; }\n .launcher::after {\n content: \"\";\n position: absolute;\n right: 1px;\n bottom: 1px;\n width: 10px;\n height: 10px;\n border-radius: 999px;\n background: #929bb1;\n box-shadow: 0 0 0 2px #151b27;\n }\n [data-state=\"recording\"] .launcher::after { background: #1673ff; }\n [data-state=\"paused\"] .launcher::after { background: #d0c8ff; }\n [data-state=\"error\"] .launcher::after { background: #e5485f; }\n .dock {\n display: flex;\n align-items: center;\n gap: 10px;\n max-width: calc(100vw - 32px);\n padding: 6px 6px 6px 12px;\n border-radius: 999px;\n color: #f4f3fc;\n overflow: visible;\n }\n [data-open=\"false\"] .dock, [data-open=\"true\"] .launcher { display: none; }\n .brand { display: flex; align-items: center; gap: 8px; min-width: 0; overflow: visible; }\n .face { position: relative; flex: none; width: 28px; height: 28px; overflow: visible; }\n .dock .mark { width: 28px; height: 28px; }\n .word {\n color: #f4f3fc;\n font-size: 14px;\n font-weight: 600;\n letter-spacing: -0.03em;\n line-height: 1;\n }\n .actions { display: flex; align-items: center; gap: 6px; }\n .note {\n position: fixed;\n right: 16px;\n bottom: 78px;\n z-index: 1;\n margin: 0;\n padding: 4px 10px;\n border-radius: 999px;\n background: #151b27;\n color: #ff9aa8;\n font: 600 11px/1.3 \"Plus Jakarta Sans\", ui-sans-serif, system-ui, sans-serif;\n pointer-events: none;\n }\n .note:empty { display: none; }\n [data-shell]:has(.note:not(:empty)) .privacy { bottom: calc(100% + 48px); }\n .eyes {\n transform-box: view-box;\n transform-origin: 0 0;\n transition: transform 280ms cubic-bezier(0.22, 1, 0.36, 1);\n }\n .eyes[data-pose=\"left\"] { transform: translate(-4.5%, 0.8%); }\n .eyes[data-pose=\"right\"] { transform: translate(4.5%, 0.8%); }\n .eyes[data-pose=\"up\"] { transform: translate(0, -3.5%); }\n @media (prefers-reduced-motion: reduce) {\n .eyes { transition: none; }\n .eyes[data-pose] { transform: none; }\n .speak:not([hidden]) .bubble { animation: none; }\n }\n .speak {\n position: fixed;\n right: 16px;\n bottom: 76px;\n z-index: 2;\n width: max-content;\n max-width: min(16rem, calc(100vw - 32px));\n pointer-events: auto;\n font-family: \"Plus Jakarta Sans\", ui-sans-serif, system-ui, sans-serif;\n }\n .speak[hidden] { display: none; }\n .bubble {\n position: relative;\n padding: 0.6rem 0.7rem 0.55rem;\n border: 1px solid #3d3590;\n border-radius: 1rem;\n background: #1b1a3f;\n color: #c7cadc;\n box-shadow: 0 16px 40px rgba(3, 5, 12, 0.45);\n animation: bubble-in 320ms cubic-bezier(0.22, 1, 0.36, 1);\n }\n .bubble::after {\n content: \"\";\n position: absolute;\n right: var(--tail, 22px);\n bottom: -5px;\n width: 9px;\n height: 9px;\n border-right: 1px solid #3d3590;\n border-bottom: 1px solid #3d3590;\n background: #1b1a3f;\n transform: rotate(45deg);\n }\n .bubble .mark {\n display: block;\n width: 22px;\n height: 22px;\n margin: 0 0 0.35rem;\n }\n @keyframes bubble-in {\n from { opacity: 0; transform: translateY(8px) scale(0.96); }\n to { opacity: 1; transform: none; }\n }\n .bubble p {\n margin: 0;\n color: #c7cadc;\n font-size: 0.8125rem;\n font-weight: 400;\n line-height: 1.45;\n }\n .privacy {\n position: absolute;\n left: auto;\n right: 50%;\n bottom: calc(100% + 18px);\n z-index: 3;\n width: min(16.5rem, calc(100vw - 24px));\n max-width: min(16.5rem, calc(100vw - 24px));\n pointer-events: auto;\n font-family: \"Plus Jakarta Sans\", ui-sans-serif, system-ui, sans-serif;\n transform: translateX(20px);\n }\n .privacy[hidden] { display: none; }\n .privacy .bubble {\n padding: 0.75rem 2.15rem 0.75rem 0.9rem;\n border-radius: 16px;\n }\n .privacy .bubble::after {\n right: var(--tail, 12px);\n bottom: -5px;\n width: 10px;\n height: 10px;\n }\n @media (max-width: 560px) {\n .word { display: none; }\n .privacy {\n position: fixed;\n left: 12px;\n right: 12px;\n bottom: 76px;\n width: auto;\n max-width: none;\n transform: none;\n }\n .privacy .bubble {\n padding: 0.65rem 1.85rem 0.6rem 0.75rem;\n }\n .privacy .bubble p { font-size: 0.75rem; }\n }\n .privacy button.hide {\n position: absolute;\n top: 0.4rem;\n right: 0.4rem;\n width: 24px;\n height: 24px;\n border: 0;\n background: transparent;\n color: #c7cadc;\n }\n .privacy button.hide:hover:not(:disabled) { color: #f4f3fc; }\n .choices { display: flex; gap: 6px; margin-top: 0.7rem; }\n .speak button.choice {\n width: auto;\n height: auto;\n min-height: 1.75rem;\n padding: 0 0.7rem;\n border-radius: 999px;\n font: 600 0.75rem/1 \"Plus Jakarta Sans\", ui-sans-serif, system-ui, sans-serif;\n }\n .speak button.secondary {\n border: 1px solid #3a4458;\n background: transparent;\n color: #f4f3fc;\n }\n .speak button.secondary:hover:not(:disabled) { border-color: #a596ff; color: #d0c8ff; }\n .speak button.danger {\n border: 0;\n background: #e5485f;\n color: #fff;\n }\n .speak button.danger:hover:not(:disabled) { color: #fff; background: color-mix(in srgb, #e5485f 88%, #fff); }\n</style>\n<div data-shell data-open=\"true\" data-state=\"recording\">\n <button type=\"button\" class=\"launcher\" data-action=\"open\" aria-label=\"Abrir controles da gravação\">\n ${mark(\"offscript-trail-launcher\")}\n </button>\n <div class=\"dock\" role=\"toolbar\" aria-label=\"Controles da gravação\">\n <div class=\"brand\">\n <span class=\"face\">\n ${mark(\"offscript-trail-dock\")}\n <div class=\"privacy\" data-privacy hidden>\n <div class=\"bubble\" role=\"status\">\n <button type=\"button\" class=\"hide\" data-action=\"privacy-hide\" aria-label=\"Fechar aviso\">${ICON.close}</button>\n <p>Tudo visível na tela será gravado, inclusive o que for digitado — senha e dado sensível também.</p>\n </div>\n </div>\n </span>\n <span class=\"word\">Offscript</span>\n </div>\n <div class=\"actions\">\n <button type=\"button\" data-action=\"privacy-show\" aria-label=\"Abrir aviso\" title=\"Tudo visível na tela será gravado, inclusive o que for digitado\" hidden>${ICON.speak}</button>\n <button type=\"button\" class=\"text record\" data-action=\"record\">Iniciar</button>\n <button type=\"button\" data-action=\"pause\" aria-label=\"Pausar\" title=\"Pausar\">${ICON.pause}</button>\n <button type=\"button\" data-action=\"resume\" aria-label=\"Retomar\" title=\"Retomar\">${ICON.play}</button>\n <button type=\"button\" class=\"text\" data-action=\"new\" title=\"Descarta o que foi gravado e volta ao início\">Nova gravação</button>\n <button type=\"button\" class=\"text finish\" data-action=\"stop\" title=\"Encerra a coleta e envia o que foi gravado\">Finalizar</button>\n <button type=\"button\" data-action=\"close\" aria-label=\"Fechar\" title=\"Fechar\">${ICON.close}</button>\n </div>\n </div>\n <div class=\"speak\" data-confirm hidden>\n <div class=\"bubble\" role=\"dialog\" aria-labelledby=\"offscript-confirm-title\">\n ${mark(\"offscript-trail-speak\")}\n <p id=\"offscript-confirm-title\">Descartar esta gravação? O que foi gravado será ignorado.</p>\n <div class=\"choices\">\n <button type=\"button\" class=\"choice secondary\" data-action=\"cancel\">Cancelar</button>\n <button type=\"button\" class=\"choice danger\" data-action=\"confirm\">Descartar</button>\n </div>\n </div>\n </div>\n <p class=\"note\" data-note></p>\n</div>\n`;\n\nconst SUCCESS_TEMPLATE = `\n<style>\n :host { color-scheme: dark; }\n .success {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 12px 14px;\n border: 1px solid #377c65;\n border-radius: 16px;\n background: #152c25;\n color: #dcfce7;\n box-shadow: 0 12px 32px rgba(3, 5, 12, 0.35);\n font: 500 13px/1.5 \"Plus Jakarta Sans\", ui-sans-serif, system-ui, sans-serif;\n }\n p { margin: 0; }\n button {\n flex: none;\n display: grid;\n place-items: center;\n width: 28px;\n height: 28px;\n padding: 0;\n border: 0;\n border-radius: 999px;\n background: transparent;\n color: inherit;\n font: 20px/1 ui-sans-serif, system-ui, sans-serif;\n cursor: pointer;\n }\n button:hover { background: #244a3c; }\n button:focus-visible { outline: 2px solid #86efac; outline-offset: 2px; }\n</style>\n<div class=\"success\">\n <p role=\"status\">Gravação enviada com sucesso!</p>\n <button type=\"button\" aria-label=\"Fechar confirmação\">×</button>\n</div>\n`;\n","import type { OffscriptConfig, Priority, ResolvedConfig } from \"../types/config\";\nimport { SDK_VERSION, type ContextEventData, type EventKind, type LifecycleEventData, type OffscriptEvent, type RecordedAction } from \"../types/events\";\nimport type { CompleteOptions, OffscriptState, RecordingPayload, RecordingStatus } from \"../types/recording\";\nimport { DataSanitizer } from \"../privacy/DataSanitizer\";\nimport { ActionRecorder } from \"../recorders/ActionRecorder\";\nimport { ContextRecorder } from \"../recorders/ContextRecorder\";\nimport { ErrorRecorder } from \"../recorders/ErrorRecorder\";\nimport { HTTPRecorder } from \"../recorders/HTTPRecorder\";\nimport { IframeRecorder } from \"../recorders/IframeRecorder\";\nimport { RRWebRecorder } from \"../recorders/RRWebRecorder\";\nimport type { EmitOptions, EventSink, Recorder } from \"../recorders/types\";\nimport { ConfigError, Emitter, InvalidStateError, OffscriptError } from \"../utils/errors\";\nimport { safe } from \"../utils/misc\";\nimport { uid } from \"../utils/id\";\nimport { LifecycleManager } from \"./LifecycleManager\";\nimport { RecordingStore } from \"./RecordingStore\";\nimport { resolveConfig } from \"./config\";\nimport { buildPlaywrightContract, type PlaywrightRecording } from \"../playwright/PlaywrightDataContract\";\nimport { RecordingControls } from \"../ui/RecordingControls\";\n\nexport type OffscriptEventMap = {\n statusChange: { from: RecordingStatus; to: RecordingStatus };\n error: Error;\n recordingStart: undefined;\n recordingEnd: RecordingPayload;\n};\ninterface RecentAction { id: string; t: number; }\n\nexport class Offscript implements EventSink {\n static readonly version = SDK_VERSION;\n readonly config: ResolvedConfig;\n readonly sanitizer: DataSanitizer;\n private readonly bus = new Emitter<OffscriptEventMap>();\n private status: RecordingStatus = \"idle\";\n private lastError?: { code: string; message: string };\n private recorders: Recorder[] = [];\n private rrweb?: RRWebRecorder;\n private actions?: ActionRecorder;\n private context?: ContextRecorder;\n private lifecycle?: LifecycleManager;\n private controls?: RecordingControls;\n private accepting = false;\n private destroyed = false;\n private initPromise?: Promise<void>;\n private store?: RecordingStore;\n private suspended = false;\n private restorePromise?: Promise<void>;\n private startPromise?: Promise<void>;\n private stopPromise?: Promise<RecordingPayload>;\n private completePromise?: Promise<unknown>;\n private events: OffscriptEvent[] = [];\n private recent: RecentAction[] = [];\n private actionLog: RecordedAction[] = [];\n private contextLog: ContextEventData[] = [];\n private sequence = 0;\n private pageId = uid(\"page_\");\n private payload?: RecordingPayload;\n private submitted = false;\n private response: unknown;\n\n constructor(config: OffscriptConfig = {}) {\n this.config = resolveConfig(config);\n this.sanitizer = new DataSanitizer(this.config.privacy);\n }\n getState(): OffscriptState {\n return { status: this.status, pending: this.submitted ? 0 : this.events.length, lastError: this.lastError };\n }\n capturesSensitiveValues(): boolean { return this.config.privacy.captureSensitiveValues; }\n async init(): Promise<void> {\n this.assertAlive();\n if (typeof window === \"undefined\") throw new OffscriptError(\"NOT_SUPPORTED\", \"O SDK requer um navegador\");\n this.initPromise ??= this.initializeDraft();\n await this.initPromise;\n if (this.restorePromise) await this.restorePromise;\n if (this.config.controls && !this.controls) {\n this.controls = new RecordingControls(this);\n this.controls.mount();\n }\n }\n private async initializeDraft(): Promise<void> {\n if (!this.config.persistenceKey) return;\n this.store = await RecordingStore.open(this.config.persistenceKey);\n await this.restoreDraft();\n }\n private async restoreDraft(): Promise<void> {\n const saved = await this.store!.load();\n if (this.suspended) return;\n this.clearRecording();\n if (!saved) { this.setStatus(\"idle\"); return; }\n this.events = saved.events;\n this.sequence = saved.events[saved.events.length - 1]?.sequence ?? 0;\n this.actionLog = saved.events.filter(event => event.kind === \"action\").map(event => event.data as RecordedAction);\n this.contextLog = saved.events.filter(event => event.kind === \"context\").map(event => event.data as ContextEventData);\n this.setStatus(saved.status);\n if (saved.status === \"stopped\") {\n this.payload = this.buildPayload();\n return;\n }\n this.accepting = saved.status === \"recording\";\n this.attach();\n await this.startRecorders();\n if (saved.status === \"paused\") this.recorders.forEach(recorder => recorder.pause?.());\n }\n private save(operation: Promise<void>): void {\n void operation.catch(error => {\n const err = error instanceof Error ? error : new Error(String(error));\n this.lastError = { code: \"LOCAL_STORAGE_FAILED\", message: err.message };\n this.bus.emit(\"error\", err);\n });\n }\n startRecording(): Promise<void> {\n if (this.startPromise) return this.startPromise;\n this.startPromise = this.doStart().finally(() => { this.startPromise = undefined; });\n return this.startPromise;\n }\n private async doStart(): Promise<void> {\n await this.init();\n if (this.status === \"recording\" || this.status === \"paused\") return;\n if (this.completePromise || this.stopPromise) throw new InvalidStateError(\"Finalização em andamento\");\n await this.store?.clear();\n this.clearRecording();\n this.setStatus(\"initializing\");\n await this.store?.setStatus(\"recording\");\n this.accepting = true;\n this.attach();\n this.emitLifecycle(\"recording-start\");\n await this.startRecorders();\n this.setStatus(\"recording\");\n await this.store?.flush();\n this.bus.emit(\"recordingStart\", undefined);\n }\n async pauseRecording(): Promise<void> {\n this.assertAlive();\n if (this.restorePromise) await this.restorePromise;\n if (this.status === \"paused\") return;\n if (this.status !== \"recording\") throw new InvalidStateError(\"Sem gravação ativa\");\n this.actions?.flushAll();\n this.emitLifecycle(\"pause\");\n this.accepting = false;\n this.recorders.forEach(r => safe(() => r.pause?.()));\n this.setStatus(\"paused\");\n await this.store?.flush();\n }\n async resumeRecording(): Promise<void> {\n this.assertAlive();\n if (this.restorePromise) await this.restorePromise;\n if (this.status === \"recording\") return;\n if (this.status !== \"paused\") throw new InvalidStateError(\"Gravação não está pausada\");\n this.accepting = true;\n this.emitLifecycle(\"resume\");\n for (const r of this.recorders) await r.resume?.();\n this.setStatus(\"recording\");\n await this.store?.flush();\n }\n stopRecording(): Promise<RecordingPayload> {\n if (this.stopPromise) return this.stopPromise;\n this.stopPromise = this.doStop().finally(() => { this.stopPromise = undefined; });\n return this.stopPromise;\n }\n private async doStop(): Promise<RecordingPayload> {\n this.assertAlive();\n if (this.restorePromise) await this.restorePromise;\n if (this.startPromise) await this.startPromise;\n if (this.payload) return this.payload;\n if (this.status !== \"recording\" && this.status !== \"paused\") throw new InvalidStateError(\"Sem gravação ativa\");\n this.setStatus(\"stopping\");\n this.actions?.flushAll();\n this.emitLifecycle(\"stop\");\n const recorders = this.recorders.splice(0).reverse();\n this.lifecycle?.uninstall();\n for (const recorder of recorders) {\n if (!(recorder instanceof HTTPRecorder)) safe(() => recorder.stop());\n }\n for (const recorder of recorders) {\n if (recorder instanceof HTTPRecorder) await recorder.drain();\n }\n this.accepting = false;\n this.rrweb = this.actions = this.context = undefined;\n this.payload = this.buildPayload();\n this.setStatus(\"stopped\");\n await this.store?.flush();\n this.bus.emit(\"recordingEnd\", this.payload);\n return this.payload;\n }\n complete(options: CompleteOptions): Promise<unknown> {\n this.assertAlive();\n if (this.completePromise) return this.completePromise;\n if (this.submitted) return Promise.resolve(this.response);\n this.completePromise = this.doComplete(options).finally(() => { this.completePromise = undefined; });\n return this.completePromise;\n }\n private async doComplete({ endpoint, token }: CompleteOptions): Promise<unknown> {\n const url = new URL(endpoint, location.href);\n if (![\"https:\", \"http:\"].includes(url.protocol)) throw new ConfigError(\"Endpoint HTTP inválido\");\n if (!token?.trim()) throw new ConfigError(\"Token obrigatório para envio\");\n const payload = await this.stopRecording();\n try {\n const response = await fetch(url.href, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\", Accept: \"application/json\", Authorization: `Bearer ${token.trim()}` },\n body: JSON.stringify(payload),\n });\n if (!response.ok) throw new OffscriptError(\"TRANSPORT_FAILED\", `Falha ao enviar gravação: HTTP ${response.status}`, { status: response.status });\n this.submitted = true;\n await this.store?.clear();\n const text = await response.text();\n try {\n this.response = text ? JSON.parse(text) : null;\n } catch {\n this.response = text;\n }\n this.lastError = undefined;\n this.controls?.showSuccess();\n return this.response;\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n this.lastError = { code: err instanceof OffscriptError ? err.code : \"INTERNAL\", message: err.message };\n this.bus.emit(\"error\", err);\n throw err;\n }\n }\n async finishRecording(): Promise<unknown> {\n if (this.config.onComplete) return this.config.onComplete();\n return this.stopRecording();\n }\n async discardRecording(): Promise<void> {\n this.assertAlive();\n if (this.restorePromise) await this.restorePromise;\n if (this.startPromise) await this.startPromise;\n if (this.stopPromise) await this.stopPromise;\n if (this.completePromise) throw new InvalidStateError(\"Envio em andamento\");\n this.accepting = false;\n this.stopRecorders();\n this.lifecycle?.uninstall();\n await this.store?.clear();\n this.clearRecording();\n this.setStatus(\"idle\");\n }\n async destroy(): Promise<void> {\n if (this.destroyed) return;\n if (this.restorePromise) await this.restorePromise;\n if (this.startPromise) await this.startPromise;\n if (this.completePromise) await this.completePromise.catch(() => undefined);\n if (this.stopPromise) await this.stopPromise;\n this.accepting = false;\n this.stopRecorders();\n this.lifecycle?.uninstall();\n this.controls?.unmount();\n await this.store?.close();\n this.bus.clear();\n this.clearRecording();\n this.destroyed = true;\n }\n exportPlaywrightData(): PlaywrightRecording {\n return buildPlaywrightContract({ actions: this.actionLog, contexts: this.contextLog });\n }\n getRecordedActions(): readonly RecordedAction[] { return this.actionLog; }\n on<K extends keyof OffscriptEventMap>(type: K, fn: (payload: OffscriptEventMap[K]) => void): () => void { return this.bus.on(type, fn); }\n off<K extends keyof OffscriptEventMap>(type: K, fn: (payload: OffscriptEventMap[K]) => void): void { this.bus.off(type, fn); }\n emit<T>(kind: EventKind, data: T, opts: EmitOptions = {}): OffscriptEvent<T> | null { return this.record(kind, data, opts); }\n private record<T>(kind: EventKind, data: T, opts: EmitOptions): OffscriptEvent<T> | null {\n if (!this.accepting) return null;\n this.rrweb?.recoverIfNeeded();\n const sequence = ++this.sequence;\n const timestamp = opts.at ?? Date.now();\n const id = `${this.pageId}:${sequence}`;\n let payload: unknown = data;\n if (kind === \"action\") {\n const action = { ...(data as object), id, sequence, timestamp } as RecordedAction;\n payload = action;\n this.actionLog.push(action);\n this.recent.push({ id, t: timestamp });\n if (this.recent.length > 50) this.recent.shift();\n }\n const related = [\"http\", \"console\", \"error\", \"iframe\"].includes(kind) ? this.correlate(timestamp) : undefined;\n const event: OffscriptEvent<T> = {\n id, kind, tabId: this.pageId, pageId: this.pageId, sequence, timestamp,\n relatedActionId: related?.id,\n relatedActionDeltaMs: related ? timestamp - related.t : undefined,\n data: payload as T,\n };\n if (kind === \"context\") this.contextLog.push(data as ContextEventData);\n this.events.push(event);\n if (this.store) this.save(this.store.append(event));\n return event;\n }\n private correlate(at: number): RecentAction | undefined {\n for (let i = this.recent.length - 1; i >= 0; i--) {\n const a = this.recent[i];\n if (a.t <= at) return at - a.t <= this.config.correlationWindowMs ? a : undefined;\n }\n return undefined;\n }\n\n // ------------------------------------------------------------------ internos\n private emitLifecycle(type: LifecycleEventData[\"type\"], detail: Record<string, unknown> = {}, priority: Priority = \"normal\"): void {\n this.record<LifecycleEventData>(\"lifecycle\", { type, detail }, { priority });\n }\n\n private attach(): void {\n this.lifecycle ??= new LifecycleManager({\n onPageHide: () => {\n this.actions?.flushAll();\n if (!this.store) return;\n this.accepting = false;\n this.stopRecorders();\n this.suspended = true;\n if (!this.restorePromise) this.store.checkpoint();\n },\n onPageShow: () => {\n if (!this.suspended) return;\n this.suspended = false;\n this.setStatus(\"initializing\");\n this.restorePromise = this.restoreDraft().finally(() => { this.restorePromise = undefined; });\n this.save(this.restorePromise);\n },\n onVisibility: (hidden) => { if (hidden) this.actions?.flushAll(); },\n onConnectivity: () => {},\n onNavigation: ({ from, to, kind }) => {\n if (!this.accepting) return;\n this.actions?.recordNavigation(from, to, kind);\n this.emitLifecycle(\"navigation\", { from: this.sanitizer.sanitizeUrl(from), to: this.sanitizer.sanitizeUrl(to), kind }, \"critical\");\n this.context?.record(\"navigation\");\n },\n });\n this.lifecycle.install();\n }\n\n private async startRecorders(): Promise<void> {\n const r = this.config.recording;\n const list: Recorder[] = [];\n // rrweb primeiro: o FullSnapshot precisa abrir a página no replay.\n if (r.rrweb) list.push((this.rrweb = new RRWebRecorder(this)));\n if (r.context) list.push((this.context = new ContextRecorder(this)));\n if (r.actions) list.push((this.actions = new ActionRecorder(this)));\n if (r.http) list.push(new HTTPRecorder(this));\n if (r.console || r.errors) list.push(new ErrorRecorder(this));\n if (r.iframes) list.push(new IframeRecorder(this));\n this.recorders = list;\n for (const rec of list) {\n try {\n await rec.start();\n } catch (e) {\n // Falha de um recorder nunca derruba a sessão nem a aplicação hospedeira.\n this.emitLifecycle(\"recorder-error\", { recorder: rec.name, message: String((e as Error)?.message ?? e) });\n this.bus.emit(\"error\", e as Error);\n }\n }\n }\n\n\n private buildPayload(): RecordingPayload {\n return {\n recording: this.events.filter(event => event.kind !== \"http\"),\n request: this.events.filter(event => event.kind === \"http\"),\n regression: this.exportPlaywrightData(),\n };\n }\n private stopRecorders(): void {\n for (const r of this.recorders.splice(0).reverse()) safe(() => r.stop());\n this.rrweb = this.actions = this.context = undefined;\n }\n private clearRecording(): void {\n this.events = [];\n this.actionLog = [];\n this.contextLog = [];\n this.recent = [];\n this.sequence = 0;\n this.pageId = uid(\"page_\");\n this.payload = undefined;\n this.submitted = false;\n this.response = undefined;\n this.lastError = undefined;\n }\n private assertAlive(): void {\n if (this.destroyed) throw new InvalidStateError(\"SDK destruído\");\n }\n private setStatus(to: RecordingStatus): void {\n const from = this.status;\n if (from === to) return;\n this.status = to;\n if (this.store && (to === \"recording\" || to === \"paused\" || to === \"stopped\")) this.save(this.store.setStatus(to));\n this.bus.emit(\"statusChange\", { from, to });\n }\n}\n"]}
|