@everscribe/components-core 0.1.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api.ts","../src/jwt.ts","../src/claims.ts","../src/diff.ts","../src/columns.ts","../src/time.ts","../src/eventsStore.ts","../src/distinctValuesStore.ts"],"names":["i","j"],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n ChangeField,\n Event,\n GenerateNLPFiltersRequest,\n GenerateNLPFiltersResponse,\n MetadataKey,\n} from './types.js'\n\nexport type ApiErrorKind =\n | 'unauthorized'\n | 'not_found'\n | 'rate_limited'\n | 'bad_request'\n | 'server'\n | 'network'\n\nexport interface ApiErrorInfo {\n kind: ApiErrorKind\n status?: number\n retryAfterMs?: number\n message?: string\n cause?: unknown\n}\n\nexport class EmbedError extends Error {\n readonly kind: ApiErrorKind\n readonly status?: number\n readonly retryAfterMs?: number\n\n constructor(info: ApiErrorInfo) {\n super(info.message ?? info.kind)\n this.name = 'EmbedError'\n this.kind = info.kind\n this.status = info.status\n this.retryAfterMs = info.retryAfterMs\n }\n}\n\nexport interface ListEventsResponse {\n events: Event[]\n next_cursor?: string\n}\n\nexport interface GetEventResponse {\n event: Event\n}\n\nexport interface ListEventsParams {\n limit?: number\n cursor?: string\n since?: string\n before?: string\n action?: string\n actor?: string\n actorType?: string\n tenantId?: string\n targetType?: string\n targetId?: string\n resultStatus?: string\n originIP?: string\n /**\n * q is the Lucene-flavored DSL accepted by the embed events\n * endpoint. Server rejects it (claim_error) when the token\n * lacks allow_dsl_input.\n */\n q?: string\n}\n\nexport interface DistinctActionsResponse {\n actions: string[]\n}\n\nexport interface DistinctActorTypesResponse {\n actor_types: string[]\n}\n\nexport interface DistinctTargetTypesResponse {\n target_types: string[]\n}\n\nexport interface DistinctTenantsResponse {\n tenants: string[]\n}\n\nexport interface DistinctResultStatusesResponse {\n statuses: string[]\n}\n\nexport interface MetadataKeysResponse {\n keys: MetadataKey[]\n}\n\nexport interface ChangeFieldsResponse {\n fields: ChangeField[]\n}\n\nexport type ExportFormat = 'csv' | 'json'\n\nexport interface ExportEventsParams {\n format: ExportFormat\n since?: string\n before?: string\n action?: string\n actor?: string\n actorType?: string\n tenantId?: string\n targetType?: string\n targetId?: string\n resultStatus?: string\n originIP?: string\n q?: string\n}\n\nexport interface ExportEventsResult {\n blob: Blob\n filename: string\n}\n\nexport interface RequestOptions {\n apiBase: string\n token: string\n signal?: AbortSignal\n}\n\nexport async function listEvents(\n opts: RequestOptions & { params?: ListEventsParams },\n): Promise<ListEventsResponse> {\n const url = new URL(joinUrl(opts.apiBase, 'events'))\n applyListParams(url, opts.params)\n return request<ListEventsResponse>(url, opts)\n}\n\n// applyListParams writes the shared filter params onto a URL. Shared\n// between listEvents (GET /events) and exportEvents (GET /events/export)\n// so the two stay in sync as new filter dimensions are added.\nfunction applyListParams(url: URL, p: ListEventsParams | undefined): void {\n if (!p) return\n if (p.limit !== undefined) url.searchParams.set('limit', String(p.limit))\n if (p.cursor) url.searchParams.set('cursor', p.cursor)\n if (p.since) url.searchParams.set('since', p.since)\n if (p.before) url.searchParams.set('before', p.before)\n if (p.action) url.searchParams.set('action', p.action)\n if (p.actor) url.searchParams.set('actor', p.actor)\n if (p.actorType) url.searchParams.set('actor_type', p.actorType)\n if (p.tenantId) url.searchParams.set('tenant_id', p.tenantId)\n if (p.targetType) url.searchParams.set('target_type', p.targetType)\n if (p.targetId) url.searchParams.set('target_id', p.targetId)\n if (p.resultStatus) url.searchParams.set('result_status', p.resultStatus)\n if (p.originIP) url.searchParams.set('origin_ip', p.originIP)\n if (p.q) url.searchParams.set('q', p.q)\n}\n\nexport async function getEvent(\n opts: RequestOptions & { id: string },\n): Promise<GetEventResponse> {\n const url = new URL(joinUrl(opts.apiBase, `events/${encodeURIComponent(opts.id)}`))\n return request<GetEventResponse>(url, opts)\n}\n\nexport async function listDistinctActions(\n opts: RequestOptions,\n): Promise<DistinctActionsResponse> {\n const url = new URL(joinUrl(opts.apiBase, 'events/actions'))\n return request<DistinctActionsResponse>(url, opts)\n}\n\nexport async function listDistinctActorTypes(\n opts: RequestOptions,\n): Promise<DistinctActorTypesResponse> {\n const url = new URL(joinUrl(opts.apiBase, 'events/actor-types'))\n return request<DistinctActorTypesResponse>(url, opts)\n}\n\nexport async function listDistinctTargetTypes(\n opts: RequestOptions,\n): Promise<DistinctTargetTypesResponse> {\n const url = new URL(joinUrl(opts.apiBase, 'events/target-types'))\n return request<DistinctTargetTypesResponse>(url, opts)\n}\n\nexport async function listDistinctTenants(\n opts: RequestOptions,\n): Promise<DistinctTenantsResponse> {\n const url = new URL(joinUrl(opts.apiBase, 'events/tenants'))\n return request<DistinctTenantsResponse>(url, opts)\n}\n\nexport async function listDistinctResultStatuses(\n opts: RequestOptions,\n): Promise<DistinctResultStatusesResponse> {\n const url = new URL(joinUrl(opts.apiBase, 'events/result-statuses'))\n return request<DistinctResultStatusesResponse>(url, opts)\n}\n\nexport async function listMetadataKeys(\n opts: RequestOptions,\n): Promise<MetadataKeysResponse> {\n const url = new URL(joinUrl(opts.apiBase, 'events/metadata-keys'))\n return request<MetadataKeysResponse>(url, opts)\n}\n\nexport async function listChangeFields(\n opts: RequestOptions,\n): Promise<ChangeFieldsResponse> {\n const url = new URL(joinUrl(opts.apiBase, 'events/change-fields'))\n return request<ChangeFieldsResponse>(url, opts)\n}\n\n// generateNLPFilters posts a natural-language query to the embed NLP\n// endpoint. Server-side checks: AllowNLP claim required (403 when\n// missing); per-jti rate limited (429); query length ≤ 500 chars\n// (400). Returns the translated DSL plus the unsupported list when\n// the model couldn't express part of the request.\nexport async function generateNLPFilters(\n opts: RequestOptions & { query: string },\n): Promise<GenerateNLPFiltersResponse> {\n const url = new URL(joinUrl(opts.apiBase, 'events/nlp'))\n const body: GenerateNLPFiltersRequest = { q: opts.query }\n let res: Response\n try {\n res = await fetch(url, {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${opts.token}`,\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(body),\n signal: opts.signal,\n })\n } catch (err) {\n if (err instanceof DOMException && err.name === 'AbortError') throw err\n throw new EmbedError({ kind: 'network', cause: err, message: 'network error' })\n }\n if (res.ok) return (await res.json()) as GenerateNLPFiltersResponse\n // 403 (claim refused) shares the bad_request kind so the caller\n // surfaces a clear \"NLP not allowed on this token\" rather than a\n // bare 4xx. Other errors fall through to the standard mapper.\n if (res.status === 403) {\n const message = (await res.text()).trim() || 'nlp_not_allowed'\n throw new EmbedError({ kind: 'bad_request', status: 403, message })\n }\n throw await mapErrorResponse(res)\n}\n\n// exportEvents triggers the streaming export endpoint and returns the\n// response body as a Blob plus the server-suggested filename pulled\n// from Content-Disposition. The caller drives the actual download\n// (createObjectURL + anchor click) so this stays UI-agnostic.\nexport async function exportEvents(\n opts: RequestOptions & { params: ExportEventsParams },\n): Promise<ExportEventsResult> {\n const url = new URL(joinUrl(opts.apiBase, 'events/export'))\n const { format, ...rest } = opts.params\n url.searchParams.set('format', format)\n applyListParams(url, rest)\n\n let res: Response\n try {\n res = await fetch(url, {\n headers: { Authorization: `Bearer ${opts.token}` },\n signal: opts.signal,\n })\n } catch (err) {\n if (err instanceof DOMException && err.name === 'AbortError') throw err\n throw new EmbedError({ kind: 'network', cause: err, message: 'network error' })\n }\n\n if (!res.ok) throw await mapErrorResponse(res)\n\n const blob = await res.blob()\n const filename =\n parseFilenameFromContentDisposition(res.headers.get('Content-Disposition')) ??\n `events.${format}`\n return { blob, filename }\n}\n\nfunction parseFilenameFromContentDisposition(value: string | null): string | undefined {\n if (!value) return undefined\n // Server emits `attachment; filename=\"events-2026-05-07.csv\"`. Match the\n // quoted form first, then fall back to the unquoted form.\n const quoted = /filename=\"([^\"]+)\"/.exec(value)\n if (quoted?.[1]) return quoted[1]\n const unquoted = /filename=([^;]+)/.exec(value)\n if (unquoted?.[1]) return unquoted[1].trim()\n return undefined\n}\n\nasync function request<T>(url: URL, opts: RequestOptions): Promise<T> {\n let res: Response\n try {\n res = await fetch(url, {\n headers: { Authorization: `Bearer ${opts.token}` },\n signal: opts.signal,\n })\n } catch (err) {\n if (err instanceof DOMException && err.name === 'AbortError') throw err\n throw new EmbedError({ kind: 'network', cause: err, message: 'network error' })\n }\n\n if (res.ok) return (await res.json()) as T\n throw await mapErrorResponse(res)\n}\n\nasync function mapErrorResponse(res: Response): Promise<EmbedError> {\n switch (res.status) {\n case 401:\n return new EmbedError({ kind: 'unauthorized', status: 401 })\n case 404:\n return new EmbedError({ kind: 'not_found', status: 404 })\n case 429: {\n const retryAfterMs = parseRetryAfter(res.headers.get('Retry-After'))\n return new EmbedError({ kind: 'rate_limited', status: 429, retryAfterMs })\n }\n case 400: {\n const message = (await res.text()).trim() || 'bad request'\n return new EmbedError({ kind: 'bad_request', status: 400, message })\n }\n default:\n return new EmbedError({\n kind: 'server',\n status: res.status,\n message: `unexpected status ${res.status}`,\n })\n }\n}\n\nfunction parseRetryAfter(value: string | null): number | undefined {\n if (!value) return undefined\n const seconds = Number(value)\n if (Number.isFinite(seconds)) return Math.max(0, seconds * 1000)\n const t = Date.parse(value)\n if (!Number.isNaN(t)) return Math.max(0, t - Date.now())\n return undefined\n}\n\nfunction joinUrl(base: string, path: string): string {\n return `${base.replace(/\\/+$/, '')}/${path.replace(/^\\/+/, '')}`\n}\n\nexport interface TokenSourceOptions {\n tokenEndpoint?: string\n onTokenExpired?: () => Promise<string>\n}\n\nexport async function fetchTokenViaOpts(opts: TokenSourceOptions): Promise<string | null> {\n try {\n if (opts.onTokenExpired) return await opts.onTokenExpired()\n if (opts.tokenEndpoint) {\n // POST, not GET: a GET response is cacheable by default and\n // this one carries a per-user token, so a shared proxy could\n // serve it to another user. No body or custom headers, so it\n // stays a CORS simple request with no preflight.\n const res = await fetch(opts.tokenEndpoint, {\n method: 'POST',\n credentials: 'include',\n })\n if (!res.ok) return null\n const body = (await res.json()) as { token?: string }\n return body.token ?? null\n }\n return null\n } catch {\n return null\n }\n}\n","export function decodeJwtPayload<T = unknown>(token: string): T {\n const parts = token.trim().split('.')\n if (parts.length !== 3) {\n throw new Error('malformed token: expected three dot-separated segments')\n }\n const b64url = parts[1]\n if (!b64url) throw new Error('malformed token: empty payload segment')\n\n const b64 = b64url.replace(/-/g, '+').replace(/_/g, '/')\n const pad = (4 - (b64.length % 4)) % 4\n const padded = b64 + '='.repeat(pad)\n\n const binary = atob(padded)\n const bytes = Uint8Array.from(binary, (c) => c.charCodeAt(0))\n const json = new TextDecoder().decode(bytes)\n return JSON.parse(json) as T\n}\n","import { decodeJwtPayload } from './jwt.js'\nimport type { EmbedClaims } from './types.js'\n\nexport function parseClaims(token: string | null | undefined): EmbedClaims | null {\n if (!token) return null\n try {\n return decodeJwtPayload<EmbedClaims>(token)\n } catch {\n return null\n }\n}\n","// renderDiff turns an event's `change` payload ({before, after}) into a\n// side-by-side line diff for the Inspect Event modal. Mirrors the\n// upstream Go implementation (internal/ui/diff.go) so client and\n// server produce the same alignment.\n//\n// Strategy: pretty-print both sides as 2-space-indented JSON, split by\n// '\\n', and run an LCS-based line diff. Line-level granularity is\n// coarser than a structural JSON diff but works for the common\n// mutation patterns and stays dependency-free.\n\nexport type DiffKind = 'same' | 'removed' | 'added' | ''\n\nexport interface DiffLine {\n before: string\n after: string\n beforeKind: DiffKind\n afterKind: DiffKind\n}\n\nexport interface DiffView {\n lines: DiffLine[]\n}\n\nexport function renderDiff(change: unknown): DiffView {\n if (change == null || typeof change !== 'object') return { lines: [] }\n const c = change as { before?: unknown; after?: unknown }\n if (c.before === undefined && c.after === undefined) return { lines: [] }\n const beforeStr = prettyJSON(c.before)\n const afterStr = prettyJSON(c.after)\n return { lines: lineDiff(splitLines(beforeStr), splitLines(afterStr)) }\n}\n\n// hasParseableDiff is the cheap predicate for \"should we show the Diff\n// tab?\" - true when the change payload has at least one of {before,\n// after} present (matches renderDiff's early-out logic without paying\n// the LCS cost).\nexport function hasParseableDiff(change: unknown): boolean {\n if (change == null || typeof change !== 'object') return false\n const c = change as { before?: unknown; after?: unknown }\n return c.before !== undefined || c.after !== undefined\n}\n\nfunction prettyJSON(v: unknown): string {\n if (v === undefined || v === null) return 'null'\n try {\n return JSON.stringify(v, null, 2)\n } catch {\n return String(v)\n }\n}\n\nfunction splitLines(s: string): string[] {\n if (s === '') return []\n return s.split('\\n')\n}\n\nfunction lineDiff(before: string[], after: string[]): DiffLine[] {\n const n = before.length\n const m = after.length\n if (n === 0 && m === 0) return []\n\n // dp[i][j] = length of the longest common subsequence of\n // before[i:] and after[j:]. Filled bottom-up so the walk-back\n // below can read forward into a populated table.\n const dp: number[][] = Array.from({ length: n + 1 }, () =>\n new Array<number>(m + 1).fill(0),\n )\n for (let i = n - 1; i >= 0; i--) {\n const row = dp[i]!\n const next = dp[i + 1]!\n for (let j = m - 1; j >= 0; j--) {\n if (before[i] === after[j]) {\n row[j] = next[j + 1]! + 1\n } else if (next[j]! >= row[j + 1]!) {\n row[j] = next[j]!\n } else {\n row[j] = row[j + 1]!\n }\n }\n }\n\n const out: DiffLine[] = []\n let i = 0\n let j = 0\n while (i < n && j < m) {\n if (before[i] === after[j]) {\n out.push({\n before: before[i]!,\n after: after[j]!,\n beforeKind: 'same',\n afterKind: 'same',\n })\n i++\n j++\n } else if (dp[i + 1]![j]! >= dp[i]![j + 1]!) {\n out.push({ before: before[i]!, after: '', beforeKind: 'removed', afterKind: '' })\n i++\n } else {\n out.push({ before: '', after: after[j]!, beforeKind: '', afterKind: 'added' })\n j++\n }\n }\n while (i < n) {\n out.push({ before: before[i]!, after: '', beforeKind: 'removed', afterKind: '' })\n i++\n }\n while (j < m) {\n out.push({ before: '', after: after[j]!, beforeKind: '', afterKind: 'added' })\n j++\n }\n return out\n}\n","// COLUMN_LABELS includes every Event field the table knows how to\n// render. The picker only surfaces ALL_COLUMNS, but if a token's\n// `columns` claim opts in to one of the others (origin, metadata,\n// etc.) we still want a friendly label for it.\nexport const COLUMN_LABELS: Record<string, string> = {\n id: 'ID',\n tenant_id: 'Tenant',\n occurred_at: 'Time',\n actor: 'Actor',\n action: 'Action',\n target: 'Target',\n metadata: 'Metadata',\n origin: 'Origin',\n result: 'Result',\n change: 'Change',\n idempotency_key: 'Idempotency key',\n}\n\n// ALL_COLUMNS is the picker-visible set, mirroring the upstream\n// events UI. Tokens with a custom `columns` claim drive the picker\n// directly and can include columns outside this list.\nexport const ALL_COLUMNS = [\n 'occurred_at',\n 'action',\n 'actor',\n 'target',\n 'tenant_id',\n 'result',\n]\n","// Shared timestamp formatting for the audit trail UI. The table cell\n// shows \"Month Day, Year, HH:MM:SS (N ago)\" and the relative half is\n// re-rendered on a 30s interval so the user always sees a fresh delta\n// without losing the absolute reference.\n\nconst TIMESTAMP_FMT = new Intl.DateTimeFormat(undefined, {\n year: 'numeric',\n month: 'short',\n day: 'numeric',\n hour: 'numeric',\n minute: '2-digit',\n second: '2-digit',\n})\n\nexport function formatAbsolute(rfc3339: string): string {\n const d = new Date(rfc3339)\n if (Number.isNaN(d.getTime())) return rfc3339\n return TIMESTAMP_FMT.format(d)\n}\n\nexport function formatRelative(rfc3339: string, now: number): string {\n const d = new Date(rfc3339)\n if (Number.isNaN(d.getTime())) return ''\n const ms = now - d.getTime()\n // Clock-skew safety: events can't be in the future, but if the user's\n // clock disagrees with the server, render the closest \"just now\"\n // bucket rather than \"in 3s\".\n if (ms < 0) return 'just now'\n const seconds = Math.floor(ms / 1000)\n if (seconds < 30) return 'just now'\n if (seconds < 60) return `${seconds}s ago`\n const minutes = Math.floor(seconds / 60)\n if (minutes < 60) return `${minutes}m ago`\n const hours = Math.floor(minutes / 60)\n if (hours < 24) return `${hours}h ago`\n const days = Math.floor(hours / 24)\n if (days < 30) return `${days}d ago`\n const months = Math.floor(days / 30)\n if (months < 12) return `${months}mo ago`\n const years = Math.floor(days / 365)\n return `${years}y ago`\n}\n\n// formatTimeCell composes the table cell's \"absolute (relative)\" form.\n// `now` is injected so callers control re-render cadence: the element\n// passes Date.now() on each tick; React passes a state value that\n// updates every 30s via useRelativeTimeTick.\nexport function formatTimeCell(rfc3339: string, now: number): string {\n const absolute = formatAbsolute(rfc3339)\n const relative = formatRelative(rfc3339, now)\n if (!relative) return absolute\n return `${absolute} (${relative})`\n}\n\n// RELATIVE_TIME_TICK_MS is the polling cadence both adapters use. 30s\n// is fine-grained enough to feel responsive in the seconds/minutes\n// regime and coarse enough to avoid wasted updates further out.\nexport const RELATIVE_TIME_TICK_MS = 30000\n","import {\n EmbedError,\n fetchTokenViaOpts,\n listEvents,\n type ListEventsParams,\n type ListEventsResponse,\n} from './api.js'\nimport type { Event } from './types.js'\n\nconst MIN_POLL_INTERVAL_MS = 1000\n\nexport type EventsStatus = 'loading' | 'ok' | 'error' | 'expired'\n\nexport interface EventsStoreConfig {\n apiBase: string\n token: string | null\n pageSize: number\n pollInterval: number\n tokenEndpoint?: string\n onTokenExpired?: () => Promise<string>\n onError?: (err: Error) => void\n since?: string\n before?: string\n action?: string\n actor?: string\n actorType?: string\n tenantId?: string\n targetType?: string\n targetId?: string\n resultStatus?: string\n originIP?: string\n q?: string\n}\n\nexport interface EventsStoreState {\n events: Event[]\n nextCursor: string | null\n status: EventsStatus\n error: EmbedError | null\n}\n\nexport interface EventsStore {\n getSnapshot(): EventsStoreState\n subscribe(listener: () => void): () => void\n loadMore(): void\n refresh(): void\n dispose(): void\n}\n\ntype FetchKind = 'initial' | 'poll' | 'more'\n\nconst INITIAL_STATE: EventsStoreState = {\n events: [],\n nextCursor: null,\n status: 'loading',\n error: null,\n}\n\nexport function createEventsStore(config: EventsStoreConfig): EventsStore {\n let state: EventsStoreState = INITIAL_STATE\n const listeners = new Set<() => void>()\n let token: string | null = config.token\n let disposed = false\n let activeAbort: AbortController | null = null\n let pollTimer: ReturnType<typeof setTimeout> | null = null\n let visibilityHandler: (() => void) | null = null\n\n const setState = (next: EventsStoreState) => {\n state = next\n for (const l of listeners) l()\n }\n\n const fetchPage = async (kind: FetchKind, signal: AbortSignal) => {\n if (!token) return\n const params: ListEventsParams = { limit: config.pageSize }\n if (config.since) params.since = config.since\n if (config.before) params.before = config.before\n if (config.action) params.action = config.action\n if (config.actor) params.actor = config.actor\n if (config.actorType) params.actorType = config.actorType\n if (config.tenantId) params.tenantId = config.tenantId\n if (config.targetType) params.targetType = config.targetType\n if (config.targetId) params.targetId = config.targetId\n if (config.resultStatus) params.resultStatus = config.resultStatus\n if (config.originIP) params.originIP = config.originIP\n if (config.q) params.q = config.q\n\n if (kind === 'poll') {\n const newest = state.events[0]?.occurred_at\n if (newest) params.since = newest\n } else if (kind === 'more') {\n if (!state.nextCursor) return\n params.cursor = state.nextCursor\n }\n\n const doFetch = async (\n t: string,\n allowRefresh: boolean,\n ): Promise<ListEventsResponse> => {\n try {\n return await listEvents({ apiBase: config.apiBase, token: t, signal, params })\n } catch (err) {\n if (err instanceof DOMException && err.name === 'AbortError') throw err\n if (allowRefresh && err instanceof EmbedError && err.kind === 'unauthorized') {\n const newTok = await fetchTokenViaOpts({\n tokenEndpoint: config.tokenEndpoint,\n onTokenExpired: config.onTokenExpired,\n })\n if (!newTok) throw err\n token = newTok\n return doFetch(newTok, false)\n }\n throw err\n }\n }\n\n let response: ListEventsResponse\n try {\n response = await doFetch(token, true)\n } catch (err) {\n if (err instanceof DOMException && err.name === 'AbortError') return\n const e =\n err instanceof EmbedError\n ? err\n : new EmbedError({ kind: 'network', cause: err, message: 'network error' })\n setState({\n ...state,\n status: e.kind === 'unauthorized' ? 'expired' : 'error',\n error: e,\n })\n config.onError?.(e)\n return\n }\n\n if (kind === 'initial') {\n setState({\n events: response.events,\n nextCursor: response.next_cursor ?? null,\n status: 'ok',\n error: null,\n })\n } else if (kind === 'poll') {\n const events =\n response.events.length > 0 ? mergeNewer(response.events, state.events) : state.events\n setState({ ...state, events, status: 'ok', error: null })\n } else {\n setState({\n events: mergeOlder(state.events, response.events),\n nextCursor: response.next_cursor ?? null,\n status: 'ok',\n error: null,\n })\n }\n }\n\n const startPolling = () => {\n if (config.pollInterval <= 0) return\n if (config.before) return\n\n let interval = config.pollInterval\n if (interval < MIN_POLL_INTERVAL_MS) {\n console.warn(\n `[everscribe] pollInterval=${interval}ms is below minimum ${MIN_POLL_INTERVAL_MS}ms; clamping to ${MIN_POLL_INTERVAL_MS}ms`,\n )\n interval = MIN_POLL_INTERVAL_MS\n }\n\n const schedule = () => {\n if (disposed) return\n pollTimer = setTimeout(tick, interval)\n }\n\n const tick = async () => {\n if (disposed) return\n if (typeof document !== 'undefined' && document.visibilityState === 'hidden') {\n schedule()\n return\n }\n const ctrl = new AbortController()\n activeAbort = ctrl\n try {\n await fetchPage('poll', ctrl.signal)\n } finally {\n if (activeAbort === ctrl) activeAbort = null\n schedule()\n }\n }\n\n schedule()\n\n if (typeof document !== 'undefined') {\n visibilityHandler = () => {\n if (disposed) return\n if (document.visibilityState === 'visible') {\n if (pollTimer) {\n clearTimeout(pollTimer)\n pollTimer = null\n }\n void tick()\n }\n }\n document.addEventListener('visibilitychange', visibilityHandler)\n }\n }\n\n const stopPolling = () => {\n if (pollTimer) {\n clearTimeout(pollTimer)\n pollTimer = null\n }\n if (visibilityHandler && typeof document !== 'undefined') {\n document.removeEventListener('visibilitychange', visibilityHandler)\n visibilityHandler = null\n }\n }\n\n const runInitialFetch = () => {\n if (!token) return\n const ctrl = new AbortController()\n activeAbort = ctrl\n void fetchPage('initial', ctrl.signal).finally(() => {\n if (activeAbort === ctrl) activeAbort = null\n })\n }\n\n runInitialFetch()\n startPolling()\n\n return {\n getSnapshot: () => state,\n subscribe(listener) {\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n },\n loadMore() {\n if (disposed) return\n if (!state.nextCursor) return\n const ctrl = new AbortController()\n void fetchPage('more', ctrl.signal)\n },\n refresh() {\n if (disposed) return\n stopPolling()\n if (activeAbort) activeAbort.abort()\n setState(INITIAL_STATE)\n runInitialFetch()\n startPolling()\n },\n dispose() {\n if (disposed) return\n disposed = true\n stopPolling()\n if (activeAbort) activeAbort.abort()\n listeners.clear()\n },\n }\n}\n\nfunction mergeNewer(incoming: Event[], existing: Event[]): Event[] {\n const seen = new Set(existing.map((e) => e.id))\n const fresh = incoming.filter((e) => !seen.has(e.id))\n if (fresh.length === 0) return existing\n return [...fresh, ...existing]\n}\n\nfunction mergeOlder(existing: Event[], incoming: Event[]): Event[] {\n const seen = new Set(existing.map((e) => e.id))\n const fresh = incoming.filter((e) => !seen.has(e.id))\n return [...existing, ...fresh]\n}\n","import {\n EmbedError,\n fetchTokenViaOpts,\n listChangeFields,\n listDistinctActions,\n listDistinctActorTypes,\n listDistinctResultStatuses,\n listDistinctTargetTypes,\n listDistinctTenants,\n listMetadataKeys,\n} from './api.js'\nimport type { ChangeField, MetadataKey } from './types.js'\n\nexport interface DistinctValues {\n actions: string[]\n actorTypes: string[]\n targetTypes: string[]\n tenants: string[]\n resultStatuses: string[]\n metadataKeys: MetadataKey[]\n changeFields: ChangeField[]\n}\n\nexport interface DistinctValuesStoreConfig {\n apiBase: string\n token: string | null\n tokenEndpoint?: string\n onTokenExpired?: () => Promise<string>\n}\n\nexport interface DistinctValuesStore {\n getSnapshot(): DistinctValues\n subscribe(listener: () => void): () => void\n dispose(): void\n}\n\nexport const EMPTY_DISTINCT_VALUES: DistinctValues = {\n actions: [],\n actorTypes: [],\n targetTypes: [],\n tenants: [],\n resultStatuses: [],\n metadataKeys: [],\n changeFields: [],\n}\n\nexport function createDistinctValuesStore(\n config: DistinctValuesStoreConfig,\n): DistinctValuesStore {\n let state: DistinctValues = EMPTY_DISTINCT_VALUES\n const listeners = new Set<() => void>()\n const ctrl = new AbortController()\n let disposed = false\n\n const setState = (next: DistinctValues) => {\n state = next\n for (const l of listeners) l()\n }\n\n const fetchOnce = async (token: string) => {\n const base = { apiBase: config.apiBase, token, signal: ctrl.signal }\n const [actions, actorTypes, targetTypes, tenants, statuses, mdk, cf] =\n await Promise.all([\n listDistinctActions(base).catch(() => ({ actions: [] })),\n listDistinctActorTypes(base).catch(() => ({ actor_types: [] })),\n listDistinctTargetTypes(base).catch(() => ({ target_types: [] })),\n // The server returns an empty list when the token is tenant-\n // scoped, so the UI hides the tenant dropdown for those tokens\n // automatically.\n listDistinctTenants(base).catch(() => ({ tenants: [] })),\n listDistinctResultStatuses(base).catch(() => ({ statuses: [] })),\n listMetadataKeys(base).catch(() => ({ keys: [] })),\n listChangeFields(base).catch(() => ({ fields: [] })),\n ])\n if (disposed) return\n // Coerce nullable response fields to empty arrays - the Go server\n // serializes a nil slice as `null`, not `[]`, when a project has\n // no rows. Without this guard, `distinct.metadataKeys.map(...)`\n // crashes on a fresh project.\n setState({\n actions: actions.actions ?? [],\n actorTypes: actorTypes.actor_types ?? [],\n targetTypes: targetTypes.target_types ?? [],\n tenants: tenants.tenants ?? [],\n resultStatuses: statuses.statuses ?? [],\n metadataKeys: mdk.keys ?? [],\n changeFields: cf.fields ?? [],\n })\n }\n\n if (config.token) {\n void (async () => {\n try {\n await fetchOnce(config.token!)\n } catch (err) {\n if (err instanceof DOMException && err.name === 'AbortError') return\n if (err instanceof EmbedError && err.kind === 'unauthorized') {\n const refreshed = await fetchTokenViaOpts({\n tokenEndpoint: config.tokenEndpoint,\n onTokenExpired: config.onTokenExpired,\n })\n if (refreshed && !disposed) {\n try {\n await fetchOnce(refreshed)\n } catch {\n // Distinct dropdowns are non-critical; swallow.\n }\n }\n }\n }\n })()\n }\n\n return {\n getSnapshot: () => state,\n subscribe(listener) {\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n },\n dispose() {\n if (disposed) return\n disposed = true\n ctrl.abort()\n listeners.clear()\n },\n }\n}\n"]}
@@ -0,0 +1,286 @@
1
+ interface Event {
2
+ id: string;
3
+ tenant_id?: string;
4
+ occurred_at: string;
5
+ actor?: Record<string, unknown>;
6
+ action: string;
7
+ target?: Record<string, unknown>;
8
+ metadata?: Record<string, unknown>;
9
+ origin?: Record<string, unknown>;
10
+ result?: Record<string, unknown>;
11
+ change?: Record<string, unknown>;
12
+ idempotency_key?: string;
13
+ }
14
+ interface EmbedClaims {
15
+ v: number;
16
+ iss: string;
17
+ sub: string;
18
+ aud: string;
19
+ exp: number;
20
+ iat: number;
21
+ jti: string;
22
+ tenant_id?: string;
23
+ columns?: string[];
24
+ actions?: string[];
25
+ /**
26
+ * actions_prefix is a list of action prefixes the token can read
27
+ * (e.g. ["user.", "billing."]). Server-enforced; the component
28
+ * uses it only when filtering the action dropdown.
29
+ */
30
+ actions_prefix?: string[];
31
+ /**
32
+ * allowed_fields restricts which catalog fields the token can
33
+ * use in DSL filters (and the NLP endpoint). When set, the
34
+ * Query and AI tabs constrain what the user can ask for; the
35
+ * server rejects out-of-scope fields independently.
36
+ */
37
+ allowed_fields?: string[];
38
+ /**
39
+ * allow_dsl_input toggles the Query (advanced DSL) tab. When
40
+ * false, the embed API also rejects ?q=... requests.
41
+ */
42
+ allow_dsl_input?: boolean;
43
+ /**
44
+ * allow_nlp toggles the AI ("Ask in plain English") tab. When
45
+ * false, POST /v1/embed/events/nlp returns 403.
46
+ */
47
+ allow_nlp?: boolean;
48
+ }
49
+ /**
50
+ * MetadataKey describes one entry in the project's metadata
51
+ * vocabulary side table - surfaced for the inline metadata-filter
52
+ * builder's autocomplete and the NLP context.
53
+ */
54
+ interface MetadataKey {
55
+ key: string;
56
+ observed_type: string;
57
+ sample_value?: string;
58
+ event_count: number;
59
+ }
60
+ /**
61
+ * ChangeField names a field that's been observed changing on
62
+ * mutation events. Drives the change-field picker autocomplete.
63
+ */
64
+ interface ChangeField {
65
+ field: string;
66
+ event_count: number;
67
+ }
68
+ /**
69
+ * GenerateNLPFiltersRequest is the JSON body for
70
+ * POST /v1/embed/events/nlp. Mirrors the server's NLP response shape.
71
+ */
72
+ interface GenerateNLPFiltersRequest {
73
+ q: string;
74
+ }
75
+ /**
76
+ * GenerateNLPFiltersResponse is the JSON shape returned by
77
+ * POST /v1/embed/events/nlp. DSL is empty when the model couldn't
78
+ * translate anything; the caller falls back to rendering the
79
+ * unsupported list.
80
+ */
81
+ interface GenerateNLPFiltersResponse {
82
+ dsl: string;
83
+ unsupported?: string[];
84
+ explanation?: string;
85
+ model?: string;
86
+ input_tokens?: number;
87
+ output_tokens?: number;
88
+ cache_hit_tokens?: number;
89
+ }
90
+
91
+ type ApiErrorKind = 'unauthorized' | 'not_found' | 'rate_limited' | 'bad_request' | 'server' | 'network';
92
+ interface ApiErrorInfo {
93
+ kind: ApiErrorKind;
94
+ status?: number;
95
+ retryAfterMs?: number;
96
+ message?: string;
97
+ cause?: unknown;
98
+ }
99
+ declare class EmbedError extends Error {
100
+ readonly kind: ApiErrorKind;
101
+ readonly status?: number;
102
+ readonly retryAfterMs?: number;
103
+ constructor(info: ApiErrorInfo);
104
+ }
105
+ interface ListEventsResponse {
106
+ events: Event[];
107
+ next_cursor?: string;
108
+ }
109
+ interface GetEventResponse {
110
+ event: Event;
111
+ }
112
+ interface ListEventsParams {
113
+ limit?: number;
114
+ cursor?: string;
115
+ since?: string;
116
+ before?: string;
117
+ action?: string;
118
+ actor?: string;
119
+ actorType?: string;
120
+ tenantId?: string;
121
+ targetType?: string;
122
+ targetId?: string;
123
+ resultStatus?: string;
124
+ originIP?: string;
125
+ /**
126
+ * q is the Lucene-flavored DSL accepted by the embed events
127
+ * endpoint. Server rejects it (claim_error) when the token
128
+ * lacks allow_dsl_input.
129
+ */
130
+ q?: string;
131
+ }
132
+ interface DistinctActionsResponse {
133
+ actions: string[];
134
+ }
135
+ interface DistinctActorTypesResponse {
136
+ actor_types: string[];
137
+ }
138
+ interface DistinctTargetTypesResponse {
139
+ target_types: string[];
140
+ }
141
+ interface DistinctTenantsResponse {
142
+ tenants: string[];
143
+ }
144
+ interface DistinctResultStatusesResponse {
145
+ statuses: string[];
146
+ }
147
+ interface MetadataKeysResponse {
148
+ keys: MetadataKey[];
149
+ }
150
+ interface ChangeFieldsResponse {
151
+ fields: ChangeField[];
152
+ }
153
+ type ExportFormat = 'csv' | 'json';
154
+ interface ExportEventsParams {
155
+ format: ExportFormat;
156
+ since?: string;
157
+ before?: string;
158
+ action?: string;
159
+ actor?: string;
160
+ actorType?: string;
161
+ tenantId?: string;
162
+ targetType?: string;
163
+ targetId?: string;
164
+ resultStatus?: string;
165
+ originIP?: string;
166
+ q?: string;
167
+ }
168
+ interface ExportEventsResult {
169
+ blob: Blob;
170
+ filename: string;
171
+ }
172
+ interface RequestOptions {
173
+ apiBase: string;
174
+ token: string;
175
+ signal?: AbortSignal;
176
+ }
177
+ declare function listEvents(opts: RequestOptions & {
178
+ params?: ListEventsParams;
179
+ }): Promise<ListEventsResponse>;
180
+ declare function getEvent(opts: RequestOptions & {
181
+ id: string;
182
+ }): Promise<GetEventResponse>;
183
+ declare function listDistinctActions(opts: RequestOptions): Promise<DistinctActionsResponse>;
184
+ declare function listDistinctActorTypes(opts: RequestOptions): Promise<DistinctActorTypesResponse>;
185
+ declare function listDistinctTargetTypes(opts: RequestOptions): Promise<DistinctTargetTypesResponse>;
186
+ declare function listDistinctTenants(opts: RequestOptions): Promise<DistinctTenantsResponse>;
187
+ declare function listDistinctResultStatuses(opts: RequestOptions): Promise<DistinctResultStatusesResponse>;
188
+ declare function listMetadataKeys(opts: RequestOptions): Promise<MetadataKeysResponse>;
189
+ declare function listChangeFields(opts: RequestOptions): Promise<ChangeFieldsResponse>;
190
+ declare function generateNLPFilters(opts: RequestOptions & {
191
+ query: string;
192
+ }): Promise<GenerateNLPFiltersResponse>;
193
+ declare function exportEvents(opts: RequestOptions & {
194
+ params: ExportEventsParams;
195
+ }): Promise<ExportEventsResult>;
196
+ interface TokenSourceOptions {
197
+ tokenEndpoint?: string;
198
+ onTokenExpired?: () => Promise<string>;
199
+ }
200
+ declare function fetchTokenViaOpts(opts: TokenSourceOptions): Promise<string | null>;
201
+
202
+ declare function decodeJwtPayload<T = unknown>(token: string): T;
203
+
204
+ declare function parseClaims(token: string | null | undefined): EmbedClaims | null;
205
+
206
+ type DiffKind = 'same' | 'removed' | 'added' | '';
207
+ interface DiffLine {
208
+ before: string;
209
+ after: string;
210
+ beforeKind: DiffKind;
211
+ afterKind: DiffKind;
212
+ }
213
+ interface DiffView {
214
+ lines: DiffLine[];
215
+ }
216
+ declare function renderDiff(change: unknown): DiffView;
217
+ declare function hasParseableDiff(change: unknown): boolean;
218
+
219
+ declare const COLUMN_LABELS: Record<string, string>;
220
+ declare const ALL_COLUMNS: string[];
221
+
222
+ declare function formatAbsolute(rfc3339: string): string;
223
+ declare function formatRelative(rfc3339: string, now: number): string;
224
+ declare function formatTimeCell(rfc3339: string, now: number): string;
225
+ declare const RELATIVE_TIME_TICK_MS = 30000;
226
+
227
+ type EventsStatus = 'loading' | 'ok' | 'error' | 'expired';
228
+ interface EventsStoreConfig {
229
+ apiBase: string;
230
+ token: string | null;
231
+ pageSize: number;
232
+ pollInterval: number;
233
+ tokenEndpoint?: string;
234
+ onTokenExpired?: () => Promise<string>;
235
+ onError?: (err: Error) => void;
236
+ since?: string;
237
+ before?: string;
238
+ action?: string;
239
+ actor?: string;
240
+ actorType?: string;
241
+ tenantId?: string;
242
+ targetType?: string;
243
+ targetId?: string;
244
+ resultStatus?: string;
245
+ originIP?: string;
246
+ q?: string;
247
+ }
248
+ interface EventsStoreState {
249
+ events: Event[];
250
+ nextCursor: string | null;
251
+ status: EventsStatus;
252
+ error: EmbedError | null;
253
+ }
254
+ interface EventsStore {
255
+ getSnapshot(): EventsStoreState;
256
+ subscribe(listener: () => void): () => void;
257
+ loadMore(): void;
258
+ refresh(): void;
259
+ dispose(): void;
260
+ }
261
+ declare function createEventsStore(config: EventsStoreConfig): EventsStore;
262
+
263
+ interface DistinctValues {
264
+ actions: string[];
265
+ actorTypes: string[];
266
+ targetTypes: string[];
267
+ tenants: string[];
268
+ resultStatuses: string[];
269
+ metadataKeys: MetadataKey[];
270
+ changeFields: ChangeField[];
271
+ }
272
+ interface DistinctValuesStoreConfig {
273
+ apiBase: string;
274
+ token: string | null;
275
+ tokenEndpoint?: string;
276
+ onTokenExpired?: () => Promise<string>;
277
+ }
278
+ interface DistinctValuesStore {
279
+ getSnapshot(): DistinctValues;
280
+ subscribe(listener: () => void): () => void;
281
+ dispose(): void;
282
+ }
283
+ declare const EMPTY_DISTINCT_VALUES: DistinctValues;
284
+ declare function createDistinctValuesStore(config: DistinctValuesStoreConfig): DistinctValuesStore;
285
+
286
+ export { ALL_COLUMNS, type ApiErrorInfo, type ApiErrorKind, COLUMN_LABELS, type ChangeField, type ChangeFieldsResponse, type DiffKind, type DiffLine, type DiffView, type DistinctActionsResponse, type DistinctActorTypesResponse, type DistinctResultStatusesResponse, type DistinctTargetTypesResponse, type DistinctTenantsResponse, type DistinctValues, type DistinctValuesStore, type DistinctValuesStoreConfig, EMPTY_DISTINCT_VALUES, type EmbedClaims, EmbedError, type Event, type EventsStatus, type EventsStore, type EventsStoreConfig, type EventsStoreState, type ExportEventsParams, type ExportEventsResult, type ExportFormat, type GenerateNLPFiltersRequest, type GenerateNLPFiltersResponse, type GetEventResponse, type ListEventsParams, type ListEventsResponse, type MetadataKey, type MetadataKeysResponse, RELATIVE_TIME_TICK_MS, type RequestOptions, type TokenSourceOptions, createDistinctValuesStore, createEventsStore, decodeJwtPayload, exportEvents, fetchTokenViaOpts, formatAbsolute, formatRelative, formatTimeCell, generateNLPFilters, getEvent, hasParseableDiff, listChangeFields, listDistinctActions, listDistinctActorTypes, listDistinctResultStatuses, listDistinctTargetTypes, listDistinctTenants, listEvents, listMetadataKeys, parseClaims, renderDiff };