@offscript/sdk 0.1.9 → 0.1.10
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/dist/adapters/nuxt.cjs +3 -3
- package/dist/adapters/nuxt.js +2 -2
- package/dist/adapters/vanilla.cjs +5 -5
- package/dist/adapters/vanilla.js +3 -3
- package/dist/adapters/vue.cjs +3 -3
- package/dist/adapters/vue.js +2 -2
- package/dist/{chunk-KKEYBVTX.js → chunk-3AUFYXCH.js} +3 -3
- package/dist/chunk-3AUFYXCH.js.map +1 -0
- package/dist/{chunk-U232L3JD.js → chunk-4F52C3KC.js} +3 -3
- package/dist/{chunk-U232L3JD.js.map → chunk-4F52C3KC.js.map} +1 -1
- package/dist/{chunk-M2E6CWGK.cjs → chunk-7JIK7MZN.cjs} +3 -3
- package/dist/chunk-7JIK7MZN.cjs.map +1 -0
- package/dist/{chunk-YPGRVKY4.cjs → chunk-AX3BKPZJ.cjs} +22 -15
- package/dist/chunk-AX3BKPZJ.cjs.map +1 -0
- package/dist/{chunk-WK242AJ2.cjs → chunk-FMMJ3ZE4.cjs} +4 -4
- package/dist/{chunk-WK242AJ2.cjs.map → chunk-FMMJ3ZE4.cjs.map} +1 -1
- package/dist/{chunk-5F637PDG.js → chunk-GWBQSYQQ.js} +17 -10
- package/dist/chunk-GWBQSYQQ.js.map +1 -0
- package/dist/core/OffscriptSDK.d.ts +1 -1
- package/dist/index.cjs +20 -20
- package/dist/index.js +3 -3
- package/dist/playwright.cjs +13 -13
- package/dist/playwright.js +1 -1
- package/dist/recorders/RRWebRecorder.d.ts +1 -0
- package/dist/types/events.d.ts +1 -1
- package/package.json +1 -1
- package/dist/chunk-5F637PDG.js.map +0 -1
- package/dist/chunk-KKEYBVTX.js.map +0 -1
- package/dist/chunk-M2E6CWGK.cjs.map +0 -1
- package/dist/chunk-YPGRVKY4.cjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
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":["last"],"mappings":"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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,EAmQX,IAAA,CAAK,0BAA0B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,EAK5B,IAAA,CAAK,sBAAsB,CAAC;A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","file":"chunk-5F637PDG.js","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 /** Endpoint that receives completed recordings. */\n endpoint?: string;\n /** Optional opaque key for a local draft; the SDK creates and stores one for tokenized sessions by default. */\n persistenceKey?: string;\n /** Optional custom handler called by the overlay when the user finishes. */\n onComplete?: () => Promise<unknown>;\n}\n\nexport interface ResolvedConfig {\n recording: RecordingConfig;\n privacy: PrivacyConfig;\n correlationWindowMs: number;\n controls: boolean;\n endpoint?: string;\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]);\nconst SNAPSHOT_DEBOUNCE_MS = 200;\nconst SNAPSHOT_SETTLE_TIMEOUT_MS = 5000;\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 private scheduledSnapshotFrame?: number;\n private scheduledSnapshotTimer?: number;\n private settleTimeout?: number;\n private settleObserver?: MutationObserver;\n private settling = false;\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 /** Captura o DOM depois do ciclo de renderização atual (Vue, React, etc.). */\n scheduleSnapshot(): void {\n this.cancelScheduledSnapshot();\n\n if (typeof window === \"undefined\") return;\n\n this.settling = true;\n if (typeof MutationObserver !== \"undefined\" && document.documentElement) {\n this.settleObserver = new MutationObserver(() => this.notifySnapshotActivity());\n this.settleObserver.observe(document.documentElement, {\n attributes: true,\n characterData: true,\n childList: true,\n subtree: true,\n });\n }\n this.settleTimeout = window.setTimeout(() => this.captureSettledSnapshot(), SNAPSHOT_SETTLE_TIMEOUT_MS);\n }\n\n notifySnapshotActivity(): void {\n if (!this.settling || typeof window === \"undefined\") return;\n if (this.scheduledSnapshotTimer !== undefined) window.clearTimeout(this.scheduledSnapshotTimer);\n this.scheduledSnapshotTimer = window.setTimeout(() => this.captureSettledSnapshot(), SNAPSHOT_DEBOUNCE_MS);\n }\n\n private captureSettledSnapshot(): void {\n if (!this.settling || typeof window === \"undefined\") return;\n this.settling = false;\n this.cancelScheduledSnapshot();\n\n const capture = () => {\n if (!this.stopped && !this.paused) this.takeFullSnapshot();\n };\n if (typeof window.requestAnimationFrame !== \"function\") {\n capture();\n return;\n }\n\n this.scheduledSnapshotFrame = window.requestAnimationFrame(() => {\n this.scheduledSnapshotFrame = window.requestAnimationFrame(() => {\n this.scheduledSnapshotFrame = undefined;\n capture();\n });\n });\n }\n\n private cancelScheduledSnapshot(): void {\n if (typeof window === \"undefined\") return;\n\n this.settling = false;\n if (this.scheduledSnapshotFrame !== undefined) {\n window.cancelAnimationFrame(this.scheduledSnapshotFrame);\n this.scheduledSnapshotFrame = undefined;\n }\n if (this.scheduledSnapshotTimer !== undefined) {\n window.clearTimeout(this.scheduledSnapshotTimer);\n this.scheduledSnapshotTimer = undefined;\n }\n if (this.settleTimeout !== undefined) {\n window.clearTimeout(this.settleTimeout);\n this.settleTimeout = undefined;\n }\n this.settleObserver?.disconnect();\n this.settleObserver = 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 const emitted = this.sink.emit(\"rrweb\", event, { priority, at: event.timestamp });\n if (event.type === 2) {\n this.needsSnapshot = !emitted;\n if (emitted) {\n this.snapshotsTaken++;\n }\n }\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.takeFullSnapshot();\n }\n }\n\n takeFullSnapshot(): void {\n if (this.stopped) return;\n guard(this.sink, this.name, () => {\n if (!this.mod?.record) return;\n this.mod.record.takeFullSnapshot(true);\n });\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 this.cancelScheduledSnapshot();\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 const snapshotPending = this.settling || this.scheduledSnapshotFrame !== undefined;\n if (!this.stopped && !this.paused && snapshotPending) this.takeFullSnapshot();\n this.stopped = true;\n this.cancelScheduledSnapshot();\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 endpoint: input.endpoint,\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\nconst TOKEN_STORAGE_KEY = \"offscript-session-token\";\nconst DRAFT_STORAGE_KEY = \"offscript-draft-key\";\nconst COMPLETED_TOKEN_STORAGE_KEY = \"offscript-completed-token\";\nconst NAVIGATION_SETTLE_WINDOW_MS = 5000;\n\ninterface CompressionStreamLike {\n readable: ReadableStream<Uint8Array>;\n writable: WritableStream<Uint8Array>;\n}\n\ntype CompressionStreamConstructor = new (format: \"gzip\") => CompressionStreamLike;\n\ninterface OffscriptRunnerBridge {\n enabled?: boolean;\n endpoint?: string;\n ready?: boolean;\n startRecording?: () => Promise<void>;\n complete?: () => Promise<unknown>;\n}\n\ndeclare global {\n interface Window {\n __offscriptRunner?: OffscriptRunnerBridge;\n }\n}\n\nfunction tokenFingerprint(token: string): string {\n let first = 2166136261;\n let second = 0x9e3779b9;\n for (let index = 0; index < token.length; index++) {\n const character = token.charCodeAt(index);\n first = Math.imul(first ^ character, 16777619);\n second = Math.imul(second ^ character, 2246822519);\n }\n return `${first >>> 0}.${second >>> 0}`;\n}\n\nasync function encodeRecordingPayload(payload: RecordingPayload): Promise<{ body: BodyInit; contentEncoding?: \"gzip\" }> {\n const json = JSON.stringify(payload);\n const CompressionStreamCtor = (globalThis as typeof globalThis & {\n CompressionStream?: CompressionStreamConstructor;\n }).CompressionStream;\n\n if (!CompressionStreamCtor) return { body: json };\n\n try {\n const stream = new CompressionStreamCtor(\"gzip\");\n const writer = stream.writable.getWriter();\n await writer.write(new TextEncoder().encode(json));\n await writer.close();\n\n return {\n body: await new Response(stream.readable).blob(),\n contentEncoding: \"gzip\",\n };\n } catch {\n return { body: json };\n }\n}\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 private launchToken?: string;\n private launchTokenChanged = false;\n private snapshotAfterNavigationUntil = 0;\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.initialize();\n await this.initPromise;\n if (this.restorePromise) await this.restorePromise;\n this.exposeRunnerBridge();\n if (this.config.controls && this.launchToken && !this.controls && !window.__offscriptRunner?.enabled) {\n this.controls = new RecordingControls(this);\n this.controls.mount();\n }\n }\n private exposeRunnerBridge(): void {\n const bridge = window.__offscriptRunner;\n if (!bridge?.enabled || !bridge.endpoint) return;\n bridge.startRecording = () => this.startRecording();\n bridge.complete = () => this.complete({ endpoint: bridge.endpoint });\n bridge.ready = true;\n }\n private async initialize(): Promise<void> {\n this.resolveLaunchToken();\n if (this.launchToken && !this.config.persistenceKey) {\n this.config.persistenceKey = this.getOrCreateDraftKey();\n }\n await this.initializeDraft();\n }\n private resolveLaunchToken(): void {\n const incomingToken = new URLSearchParams(window.location.search).get(\"offscript_token\")?.trim();\n const previousToken = this.readSessionValue(TOKEN_STORAGE_KEY);\n const completedToken = this.readSessionValue(COMPLETED_TOKEN_STORAGE_KEY);\n const legacyCompletion = completedToken === \"1\" && Boolean(previousToken);\n const completedFingerprint = legacyCompletion && previousToken ? tokenFingerprint(previousToken) : completedToken;\n const candidateToken = incomingToken || previousToken || undefined;\n this.launchTokenChanged = Boolean(incomingToken && previousToken && incomingToken !== previousToken)\n || Boolean(incomingToken && completedFingerprint && completedFingerprint !== \"1\" && tokenFingerprint(incomingToken) !== completedFingerprint);\n if (this.launchTokenChanged) {\n this.removeSessionValue(COMPLETED_TOKEN_STORAGE_KEY);\n }\n if (legacyCompletion && previousToken && !this.launchTokenChanged) {\n this.writeSessionValue(COMPLETED_TOKEN_STORAGE_KEY, tokenFingerprint(previousToken));\n this.removeSessionValue(TOKEN_STORAGE_KEY);\n }\n const isCompleted = Boolean(candidateToken && completedFingerprint === tokenFingerprint(candidateToken));\n this.launchToken = isCompleted ? undefined : candidateToken;\n if (incomingToken && !isCompleted) this.writeSessionValue(TOKEN_STORAGE_KEY, incomingToken);\n }\n private getOrCreateDraftKey(): string | undefined {\n const saved = this.readSessionValue(DRAFT_STORAGE_KEY);\n if (saved) return saved;\n const key = uid(\"draft_\");\n this.writeSessionValue(DRAFT_STORAGE_KEY, key);\n return key;\n }\n private readSessionValue(key: string): string | null {\n try {\n return window.sessionStorage.getItem(key);\n } catch {\n return null;\n }\n }\n private writeSessionValue(key: string, value: string): void {\n try {\n window.sessionStorage.setItem(key, value);\n } catch {\n // Storage may be unavailable in restricted browser contexts.\n }\n }\n private removeSessionValue(key: string): void {\n try {\n window.sessionStorage.removeItem(key);\n } catch {\n // Storage may be unavailable in restricted browser contexts.\n }\n }\n private async initializeDraft(): Promise<void> {\n if (!this.config.persistenceKey) return;\n this.store = await RecordingStore.open(this.config.persistenceKey);\n if (this.launchTokenChanged) await this.store.clear();\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 await this.startFreshRecording();\n }\n private async startFreshRecording(): Promise<void> {\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(options: CompleteOptions): Promise<unknown> {\n const endpoint = options.endpoint ?? this.config.endpoint;\n const token = options.token?.trim() || this.launchToken;\n if (!endpoint) throw new ConfigError(\"Endpoint HTTP obrigatório para envio\");\n if (!token) throw new ConfigError(\"Token obrigatório para envio\");\n const url = new URL(endpoint, location.href);\n if (![\"https:\", \"http:\"].includes(url.protocol)) throw new ConfigError(\"Endpoint HTTP inválido\");\n const payload = await this.stopRecording();\n try {\n const encodedPayload = await encodeRecordingPayload(payload);\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n Accept: \"application/json\",\n Authorization: `Bearer ${token}`,\n };\n if (encodedPayload.contentEncoding) headers[\"Content-Encoding\"] = encodedPayload.contentEncoding;\n\n const response = await fetch(url.href, {\n method: \"POST\",\n headers,\n body: encodedPayload.body,\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 const completedToken = this.launchToken ?? token;\n this.writeSessionValue(COMPLETED_TOKEN_STORAGE_KEY, tokenFingerprint(completedToken));\n this.removeSessionValue(TOKEN_STORAGE_KEY);\n this.removeSessionValue(DRAFT_STORAGE_KEY);\n this.launchToken = undefined;\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 this.controls?.unmount();\n this.controls = undefined;\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 if (this.launchToken) return this.complete();\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 if (kind === \"http\" && timestamp <= this.snapshotAfterNavigationUntil) this.rrweb?.notifySnapshotActivity();\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 this.snapshotAfterNavigationUntil = Date.now() + NAVIGATION_SETTLE_WINDOW_MS;\n this.rrweb?.scheduleSnapshot();\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"]}
|