| /** | ||
| * Web Perception Browser SDK | ||
| * | ||
| * 6-sensor browser SDK for AI agents: audio, visuals, performance, | ||
| * network, security, and logs over a remote MCP relay. | ||
| * | ||
| * SECURITY NOTE: EventSource does not support custom headers. The API key is | ||
| * sent as a URL query parameter, which means it appears in server access logs, | ||
| * browser history, and proxy logs. Use per-user revocable keys (`wbr_` prefix) | ||
| * and enable rate limiting on the relay server. | ||
| */ | ||
| export type WebPerceptionSensor = 'ear' | 'eye' | 'sense' | 'nerve' | 'shield' | 'log'; | ||
| export type SensorConnectionState = 'idle' | 'initializing' | 'connected' | 'disconnected' | 'capturing' | 'error'; | ||
| export interface SensorStatus { | ||
| state: SensorConnectionState; | ||
| message: string; | ||
| updatedAt: number; | ||
| } | ||
| export interface SensorHandle { | ||
| startCapture: (durationMs?: number, selector?: string) => Promise<string>; | ||
| getLastCaptureId: () => string | null; | ||
| status: () => SensorConnectionState; | ||
| connect: () => Promise<void>; | ||
| disconnect: () => void; | ||
| getStatus: () => SensorStatus; | ||
| } | ||
| export interface WebPerceptionOptions { | ||
| apiKey: string | (() => string | Promise<string>); | ||
| relayUrl?: string; | ||
| apiBasePath?: string; | ||
| sensors?: WebPerceptionSensor[]; | ||
| autoConnect?: boolean; | ||
| debug?: boolean; | ||
| exposeGlobals?: boolean; | ||
| reconnect?: boolean; | ||
| reconnectInitialDelayMs?: number; | ||
| reconnectMaxDelayMs?: number; | ||
| ear?: WebEarOptions; | ||
| eye?: WebEyeOptions; | ||
| sense?: WebSenseOptions; | ||
| nerve?: WebNerveOptions; | ||
| shield?: WebShieldOptions; | ||
| log?: WebLogOptions; | ||
| } | ||
| export interface WebEarOptions { | ||
| audioStream?: MediaStream | (() => MediaStream | Promise<MediaStream | null> | null); | ||
| audioNode?: AudioNode; | ||
| audioContext?: BaseAudioContext | (() => BaseAudioContext | null); | ||
| connectAudioSource?: (destination: MediaStreamAudioDestinationNode) => void | Promise<void>; | ||
| disconnectAudioSource?: (destination: MediaStreamAudioDestinationNode) => void | Promise<void>; | ||
| captureDisplayAudio?: boolean; | ||
| mimeType?: string; | ||
| } | ||
| export interface WebEyeOptions { | ||
| selector?: string; | ||
| preferDisplayMedia?: boolean; | ||
| displayMediaOptions?: DisplayMediaStreamOptions; | ||
| mimeType?: string; | ||
| } | ||
| export interface WebSenseOptions { | ||
| audioContext?: BaseAudioContext | (() => BaseAudioContext | null); | ||
| } | ||
| export interface WebNerveOptions { | ||
| includeResourcePattern?: RegExp; | ||
| } | ||
| export interface WebShieldOptions { | ||
| sensitiveStoragePattern?: RegExp; | ||
| } | ||
| export interface WebLogOptions { | ||
| maxLogs?: number; | ||
| patchConsole?: boolean; | ||
| getStateSnapshot?: () => unknown; | ||
| } | ||
| export interface WebPerceptionController { | ||
| sensors: Partial<Record<WebPerceptionSensor, SensorHandle>>; | ||
| connect: () => Promise<void>; | ||
| disconnect: () => void; | ||
| getStatus: () => Partial<Record<WebPerceptionSensor, SensorStatus>>; | ||
| } | ||
| declare global { | ||
| interface Window { | ||
| __webPerception?: WebPerceptionController; | ||
| __webEar?: SensorHandle; | ||
| __webEye?: SensorHandle; | ||
| __webSense?: SensorHandle; | ||
| __webNerve?: SensorHandle; | ||
| __webShield?: SensorHandle; | ||
| __webLog?: SensorHandle & { | ||
| getLogs?: () => ConsoleLogEntry[]; | ||
| }; | ||
| __webearStatus?: SensorStatus; | ||
| __webeyeStatus?: SensorStatus; | ||
| __websenseStatus?: SensorStatus; | ||
| __webnerveStatus?: SensorStatus; | ||
| __webshieldStatus?: SensorStatus; | ||
| __weblogStatus?: SensorStatus; | ||
| __audioDebug?: unknown; | ||
| Tone?: { | ||
| Transport?: { | ||
| state?: string; | ||
| bpm?: { | ||
| value?: number; | ||
| }; | ||
| }; | ||
| getContext?: () => { | ||
| rawContext?: BaseAudioContext; | ||
| context?: BaseAudioContext; | ||
| }; | ||
| }; | ||
| } | ||
| interface Performance { | ||
| memory?: { | ||
| jsHeapSizeLimit: number; | ||
| totalJSHeapSize: number; | ||
| usedJSHeapSize: number; | ||
| }; | ||
| } | ||
| interface Navigator { | ||
| connection?: { | ||
| effectiveType?: string; | ||
| rtt?: number; | ||
| downlink?: number; | ||
| saveData?: boolean; | ||
| }; | ||
| } | ||
| } | ||
| interface ConsoleLogEntry { | ||
| type: 'log' | 'warn' | 'error' | 'exception'; | ||
| message: string; | ||
| timestamp: number; | ||
| } | ||
| export declare function initWebPerception(options: WebPerceptionOptions): WebPerceptionController; | ||
| export declare const WebPerception: { | ||
| init: typeof initWebPerception; | ||
| }; | ||
| export declare const WebEar: { | ||
| init: (options: Omit<WebPerceptionOptions, "sensors">) => SensorHandle | undefined; | ||
| }; | ||
| export declare const WebEye: { | ||
| init: (options: Omit<WebPerceptionOptions, "sensors">) => SensorHandle | undefined; | ||
| }; | ||
| export declare const WebSense: { | ||
| init: (options: Omit<WebPerceptionOptions, "sensors">) => SensorHandle | undefined; | ||
| }; | ||
| export declare const WebNerve: { | ||
| init: (options: Omit<WebPerceptionOptions, "sensors">) => SensorHandle | undefined; | ||
| }; | ||
| export declare const WebShield: { | ||
| init: (options: Omit<WebPerceptionOptions, "sensors">) => SensorHandle | undefined; | ||
| }; | ||
| export declare const WebLog: { | ||
| init: (options: Omit<WebPerceptionOptions, "sensors">) => SensorHandle | undefined; | ||
| }; | ||
| export {}; | ||
| //# sourceMappingURL=perception.d.ts.map |
| {"version":3,"file":"perception.d.ts","sourceRoot":"","sources":["../src/perception.ts"],"names":[],"mappings":"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"} |
| /** | ||
| * Web Perception Browser SDK | ||
| * | ||
| * 6-sensor browser SDK for AI agents: audio, visuals, performance, | ||
| * network, security, and logs over a remote MCP relay. | ||
| * | ||
| * SECURITY NOTE: EventSource does not support custom headers. The API key is | ||
| * sent as a URL query parameter, which means it appears in server access logs, | ||
| * browser history, and proxy logs. Use per-user revocable keys (`wbr_` prefix) | ||
| * and enable rate limiting on the relay server. | ||
| */ | ||
| const SENSOR_ENDPOINTS = { | ||
| ear: 'webear', | ||
| eye: 'webeye', | ||
| sense: 'websense', | ||
| nerve: 'webnerve', | ||
| shield: 'webshield', | ||
| log: 'weblog', | ||
| }; | ||
| const SENSOR_GLOBALS = { | ||
| ear: '__webEar', | ||
| eye: '__webEye', | ||
| sense: '__webSense', | ||
| nerve: '__webNerve', | ||
| shield: '__webShield', | ||
| log: '__webLog', | ||
| }; | ||
| const STATUS_GLOBALS = { | ||
| ear: '__webearStatus', | ||
| eye: '__webeyeStatus', | ||
| sense: '__websenseStatus', | ||
| nerve: '__webnerveStatus', | ||
| shield: '__webshieldStatus', | ||
| log: '__weblogStatus', | ||
| }; | ||
| function normalizeRelayUrl(relayUrl) { | ||
| const fallback = typeof window !== 'undefined' ? window.location.origin : ''; | ||
| return (relayUrl ?? fallback).replace(/\/+$/, ''); | ||
| } | ||
| function normalizeBasePath(path) { | ||
| const raw = path ?? '/api'; | ||
| if (!raw) | ||
| return ''; | ||
| return raw.startsWith('/') ? raw.replace(/\/+$/, '') : `/${raw.replace(/\/+$/, '')}`; | ||
| } | ||
| function createId() { | ||
| if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') { | ||
| return crypto.randomUUID(); | ||
| } | ||
| return Math.random().toString(36).slice(2, 12); | ||
| } | ||
| function chooseMime(candidates, fallback) { | ||
| if (typeof MediaRecorder === 'undefined') | ||
| return fallback; | ||
| return candidates.find((candidate) => MediaRecorder.isTypeSupported(candidate)) ?? fallback; | ||
| } | ||
| function isAudioContext(context) { | ||
| return Boolean(context && 'createMediaStreamDestination' in context); | ||
| } | ||
| function sleep(ms) { | ||
| return new Promise((resolve) => window.setTimeout(resolve, ms)); | ||
| } | ||
| function toMessage(args) { | ||
| return args.map((arg) => { | ||
| if (typeof arg === 'string') | ||
| return arg; | ||
| try { | ||
| return JSON.stringify(arg); | ||
| } | ||
| catch { | ||
| return String(arg); | ||
| } | ||
| }).join(' '); | ||
| } | ||
| async function resolveMaybe(value) { | ||
| return typeof value === 'function' ? await value() : value; | ||
| } | ||
| async function recordStream(stream, durationMs, mimeType) { | ||
| return new Promise((resolve, reject) => { | ||
| const chunks = []; | ||
| const recorder = new MediaRecorder(stream, { mimeType }); | ||
| const stopTimer = window.setTimeout(() => { | ||
| if (recorder.state !== 'inactive') | ||
| recorder.stop(); | ||
| }, durationMs); | ||
| recorder.ondataavailable = (event) => { | ||
| if (event.data.size > 0) | ||
| chunks.push(event.data); | ||
| }; | ||
| recorder.onerror = (event) => { | ||
| window.clearTimeout(stopTimer); | ||
| reject(event instanceof ErrorEvent ? event.error : new Error('MediaRecorder failed')); | ||
| }; | ||
| recorder.onstop = () => { | ||
| window.clearTimeout(stopTimer); | ||
| resolve(new Blob(chunks, { type: mimeType })); | ||
| }; | ||
| recorder.start(); | ||
| }); | ||
| } | ||
| class BaseSensorBridge { | ||
| sensor; | ||
| runtime; | ||
| sseSource = null; | ||
| isCapturing = false; | ||
| isConnected = false; | ||
| lastCaptureId = null; | ||
| reconnectTimer = null; | ||
| reconnectDelayMs; | ||
| statusValue; | ||
| constructor(sensor, runtime) { | ||
| this.sensor = sensor; | ||
| this.runtime = runtime; | ||
| this.reconnectDelayMs = runtime.reconnectInitialDelayMs; | ||
| this.statusValue = { | ||
| state: 'idle', | ||
| message: `${this.label} bridge idle`, | ||
| updatedAt: Date.now(), | ||
| }; | ||
| } | ||
| get endpoint() { | ||
| return SENSOR_ENDPOINTS[this.sensor]; | ||
| } | ||
| get label() { | ||
| return `Web${this.sensor[0].toUpperCase()}${this.sensor.slice(1)}`; | ||
| } | ||
| status() { | ||
| if (this.isCapturing) | ||
| return 'capturing'; | ||
| return this.statusValue.state; | ||
| } | ||
| getStatus() { | ||
| return this.statusValue; | ||
| } | ||
| getLastCaptureId() { | ||
| return this.lastCaptureId; | ||
| } | ||
| async startCapture(durationMs = 3000, selector) { | ||
| const captureId = createId(); | ||
| await this.capture({ captureId, durationMs, selector }); | ||
| return captureId; | ||
| } | ||
| async connect() { | ||
| if (this.sseSource || this.isCapturing) | ||
| return; | ||
| const apiKey = await this.runtime.apiKey(); | ||
| if (!apiKey) { | ||
| this.setStatus('error', `${this.label} API key is required`); | ||
| this.scheduleReconnect(); | ||
| return; | ||
| } | ||
| this.setStatus('initializing', `Connecting ${this.label} relay`); | ||
| this.sseSource = new EventSource(this.url(`/${this.endpoint}/connect?key=${encodeURIComponent(apiKey)}`)); | ||
| this.sseSource.addEventListener('connected', () => { | ||
| this.isConnected = true; | ||
| this.reconnectDelayMs = this.runtime.reconnectInitialDelayMs; | ||
| this.setStatus('connected', `${this.label} is connected`); | ||
| this.debug('connected'); | ||
| }); | ||
| this.sseSource.addEventListener('capture', (event) => { | ||
| const command = JSON.parse(event.data); | ||
| void this.capture(command).catch((error) => { | ||
| this.setStatus('error', error instanceof Error ? error.message : String(error)); | ||
| }); | ||
| }); | ||
| this.sseSource.onerror = () => { | ||
| this.isConnected = false; | ||
| this.setStatus('disconnected', `${this.label} relay disconnected`); | ||
| this.sseSource?.close(); | ||
| this.sseSource = null; | ||
| this.scheduleReconnect(); | ||
| }; | ||
| } | ||
| disconnect() { | ||
| if (this.reconnectTimer !== null) { | ||
| window.clearTimeout(this.reconnectTimer); | ||
| this.reconnectTimer = null; | ||
| } | ||
| this.sseSource?.close(); | ||
| this.sseSource = null; | ||
| this.isConnected = false; | ||
| this.setStatus('disconnected', `${this.label} disconnected`); | ||
| } | ||
| async upload(captureId, body, contentType) { | ||
| // Client-side upload size cap (5MB) — a 30s WebM/Opus clip is ~1.5MB | ||
| const MAX_UPLOAD_BYTES = 5 * 1024 * 1024; | ||
| if (body instanceof Blob && body.size > MAX_UPLOAD_BYTES) { | ||
| throw new Error(`${this.label} capture too large (${(body.size / 1024 / 1024).toFixed(1)}MB) — max 5MB`); | ||
| } | ||
| if (typeof body === 'string' && body.length > MAX_UPLOAD_BYTES) { | ||
| throw new Error(`${this.label} capture too large (${(body.length / 1024 / 1024).toFixed(1)}MB) — max 5MB`); | ||
| } | ||
| const apiKey = await this.runtime.apiKey(); | ||
| const response = await fetch(this.url(`/${this.endpoint}/blob/${captureId}`), { | ||
| method: 'POST', | ||
| headers: { | ||
| Authorization: `Bearer ${apiKey}`, | ||
| 'Content-Type': contentType, | ||
| }, | ||
| body, | ||
| }); | ||
| if (!response.ok) | ||
| throw new Error(`${this.label} upload failed with ${response.status}`); | ||
| } | ||
| url(path) { | ||
| return `${this.runtime.relayUrl}${this.runtime.apiBasePath}${path}`; | ||
| } | ||
| setStatus(state, message) { | ||
| this.statusValue = { state, message, updatedAt: Date.now() }; | ||
| if (typeof window !== 'undefined' && this.runtime.exposeGlobals) { | ||
| window[STATUS_GLOBALS[this.sensor]] = this.statusValue; | ||
| window.dispatchEvent(new CustomEvent(`${this.endpoint}:status`, { detail: this.statusValue })); | ||
| } | ||
| } | ||
| debug(message) { | ||
| if (this.runtime.debug) { | ||
| // Never log the full API key | ||
| console.debug(`[${this.endpoint}-bridge] ${message}`); | ||
| } | ||
| } | ||
| scheduleReconnect() { | ||
| if (!this.runtime.reconnect || this.reconnectTimer !== null || typeof window === 'undefined') | ||
| return; | ||
| this.reconnectTimer = window.setTimeout(() => { | ||
| this.reconnectTimer = null; | ||
| void this.connect(); | ||
| }, this.reconnectDelayMs); | ||
| this.reconnectDelayMs = Math.min(this.runtime.reconnectMaxDelayMs, Math.round(this.reconnectDelayMs * 1.5)); | ||
| } | ||
| } | ||
| class WebEarBridge extends BaseSensorBridge { | ||
| options; | ||
| constructor(runtime, options = {}) { | ||
| super('ear', runtime); | ||
| this.options = options; | ||
| } | ||
| get label() { | ||
| return 'WebEar'; | ||
| } | ||
| async capture(command) { | ||
| if (this.isCapturing) | ||
| return; | ||
| this.isCapturing = true; | ||
| this.lastCaptureId = command.captureId; | ||
| this.setStatus('capturing', `WebEar capturing ${command.durationMs ?? 3000}ms`); | ||
| let stream = null; | ||
| let destination = null; | ||
| let disconnect = null; | ||
| try { | ||
| const durationMs = Math.min(30000, Math.max(500, command.durationMs ?? 3000)); | ||
| const sourceStream = this.options.audioStream | ||
| ? await resolveMaybe(this.options.audioStream) | ||
| : null; | ||
| if (sourceStream) { | ||
| stream = sourceStream; | ||
| } | ||
| else if (this.options.connectAudioSource) { | ||
| const context = this.resolveAudioContext(); | ||
| if (!isAudioContext(context)) { | ||
| throw new Error('WebEar requires an AudioContext when using connectAudioSource'); | ||
| } | ||
| const tapDestination = context.createMediaStreamDestination(); | ||
| destination = tapDestination; | ||
| await this.options.connectAudioSource(tapDestination); | ||
| disconnect = async () => { | ||
| await this.options.disconnectAudioSource?.(tapDestination); | ||
| }; | ||
| stream = tapDestination.stream; | ||
| } | ||
| else if (this.options.audioNode) { | ||
| const context = this.resolveAudioContext() ?? this.options.audioNode.context; | ||
| if (!isAudioContext(context)) { | ||
| throw new Error('WebEar requires an AudioContext for audioNode capture'); | ||
| } | ||
| const tapDestination = context.createMediaStreamDestination(); | ||
| destination = tapDestination; | ||
| this.options.audioNode.connect(tapDestination); | ||
| disconnect = async () => { | ||
| this.options.audioNode?.disconnect(tapDestination); | ||
| }; | ||
| stream = tapDestination.stream; | ||
| } | ||
| else if (this.options.captureDisplayAudio) { | ||
| stream = await navigator.mediaDevices.getDisplayMedia({ audio: true, video: true }); | ||
| } | ||
| else { | ||
| throw new Error('WebEar needs audioStream, audioNode, connectAudioSource, or captureDisplayAudio'); | ||
| } | ||
| const mimeType = this.options.mimeType ?? chooseMime(['audio/webm;codecs=opus', 'audio/webm', 'video/webm;codecs=opus', 'video/webm'], 'audio/webm'); | ||
| const blob = await recordStream(stream, durationMs, mimeType); | ||
| await this.upload(command.captureId, blob, blob.type || mimeType); | ||
| this.setStatus(this.isConnected ? 'connected' : 'idle', 'WebEar capture uploaded'); | ||
| } | ||
| finally { | ||
| await disconnect?.(); | ||
| if (this.options.captureDisplayAudio && stream) { | ||
| for (const track of stream.getTracks()) | ||
| track.stop(); | ||
| } | ||
| this.isCapturing = false; | ||
| } | ||
| } | ||
| resolveAudioContext() { | ||
| if (typeof this.options.audioContext === 'function') | ||
| return this.options.audioContext(); | ||
| if (this.options.audioContext) | ||
| return this.options.audioContext; | ||
| return window.Tone?.getContext?.().rawContext ?? window.Tone?.getContext?.().context ?? null; | ||
| } | ||
| } | ||
| class WebEyeBridge extends BaseSensorBridge { | ||
| options; | ||
| constructor(runtime, options = {}) { | ||
| super('eye', runtime); | ||
| this.options = options; | ||
| } | ||
| get label() { | ||
| return 'WebEye'; | ||
| } | ||
| async capture(command) { | ||
| if (this.isCapturing) | ||
| return; | ||
| this.isCapturing = true; | ||
| this.lastCaptureId = command.captureId; | ||
| this.setStatus('capturing', `WebEye capturing ${command.durationMs ?? 3000}ms`); | ||
| let stream = null; | ||
| let shouldStopTracks = false; | ||
| try { | ||
| const durationMs = Math.min(30000, Math.max(500, command.durationMs ?? 3000)); | ||
| const selector = command.selector ?? this.options.selector; | ||
| const element = selector ? document.querySelector(selector) : null; | ||
| const captureStream = element?.captureStream; | ||
| if (captureStream && !this.options.preferDisplayMedia) { | ||
| stream = captureStream.call(element); | ||
| } | ||
| else { | ||
| stream = await navigator.mediaDevices.getDisplayMedia(this.options.displayMediaOptions ?? { video: true, audio: false }); | ||
| shouldStopTracks = true; | ||
| } | ||
| const mimeType = this.options.mimeType ?? chooseMime(['video/webm;codecs=vp9,opus', 'video/webm;codecs=vp8,opus', 'video/webm'], 'video/webm'); | ||
| const blob = await recordStream(stream, durationMs, mimeType); | ||
| await this.upload(command.captureId, blob, blob.type || mimeType); | ||
| this.setStatus(this.isConnected ? 'connected' : 'idle', 'WebEye capture uploaded'); | ||
| } | ||
| finally { | ||
| if (shouldStopTracks && stream) { | ||
| for (const track of stream.getTracks()) | ||
| track.stop(); | ||
| } | ||
| this.isCapturing = false; | ||
| } | ||
| } | ||
| } | ||
| class WebSenseBridge extends BaseSensorBridge { | ||
| options; | ||
| constructor(runtime, options = {}) { | ||
| super('sense', runtime); | ||
| this.options = options; | ||
| } | ||
| get label() { | ||
| return 'WebSense'; | ||
| } | ||
| async capture(command) { | ||
| if (this.isCapturing) | ||
| return; | ||
| this.isCapturing = true; | ||
| this.lastCaptureId = command.captureId; | ||
| this.setStatus('capturing', `WebSense sampling ${command.durationMs ?? 3000}ms`); | ||
| try { | ||
| const durationMs = Math.min(30000, Math.max(500, command.durationMs ?? 3000)); | ||
| const report = await this.collectTelemetry(durationMs); | ||
| await this.upload(command.captureId, JSON.stringify(report), 'application/json'); | ||
| this.setStatus(this.isConnected ? 'connected' : 'idle', 'WebSense telemetry uploaded'); | ||
| } | ||
| finally { | ||
| this.isCapturing = false; | ||
| } | ||
| } | ||
| async collectTelemetry(durationMs) { | ||
| const startTime = performance.now(); | ||
| const frameTimes = []; | ||
| let lastFrameTime = performance.now(); | ||
| let frameId = 0; | ||
| let clicks = 0; | ||
| let keypresses = 0; | ||
| let scrolls = 0; | ||
| let cumulativeLayoutShift = 0; | ||
| let firstInputDelayMs = null; | ||
| const trackFrame = () => { | ||
| const now = performance.now(); | ||
| frameTimes.push(now - lastFrameTime); | ||
| lastFrameTime = now; | ||
| frameId = requestAnimationFrame(trackFrame); | ||
| }; | ||
| const clickHandler = () => { clicks += 1; }; | ||
| const keyHandler = () => { keypresses += 1; }; | ||
| const scrollHandler = () => { scrolls += 1; }; | ||
| let observer = null; | ||
| try { | ||
| observer = new PerformanceObserver((entryList) => { | ||
| for (const entry of entryList.getEntries()) { | ||
| if (entry.entryType === 'layout-shift' && !entry.hadRecentInput) { | ||
| cumulativeLayoutShift += entry.value ?? 0; | ||
| } | ||
| if (entry.entryType === 'first-input') | ||
| firstInputDelayMs = entry.duration; | ||
| } | ||
| }); | ||
| observer.observe({ entryTypes: ['layout-shift', 'first-input'] }); | ||
| } | ||
| catch { | ||
| observer = null; | ||
| } | ||
| frameId = requestAnimationFrame(trackFrame); | ||
| window.addEventListener('click', clickHandler); | ||
| window.addEventListener('keydown', keyHandler); | ||
| window.addEventListener('scroll', scrollHandler); | ||
| await sleep(durationMs); | ||
| cancelAnimationFrame(frameId); | ||
| window.removeEventListener('click', clickHandler); | ||
| window.removeEventListener('keydown', keyHandler); | ||
| window.removeEventListener('scroll', scrollHandler); | ||
| observer?.disconnect(); | ||
| const deltas = frameTimes.slice(1); | ||
| const avgDelta = deltas.length ? deltas.reduce((sum, value) => sum + value, 0) / deltas.length : 16.67; | ||
| const fpsValues = deltas.length ? deltas.map((delta) => 1000 / delta) : [60]; | ||
| const jitterMs = deltas.length | ||
| ? Math.sqrt(deltas.reduce((sum, value) => sum + (value - avgDelta) ** 2, 0) / deltas.length) | ||
| : 0; | ||
| const memory = performance.memory; | ||
| const audioContext = this.resolveAudioContext(); | ||
| return { | ||
| timestamp: Date.now(), | ||
| windowMs: durationMs, | ||
| actualWindowMs: performance.now() - startTime, | ||
| fps: { | ||
| average: 1000 / avgDelta, | ||
| min: Math.min(...fpsValues), | ||
| max: Math.max(...fpsValues), | ||
| jitterMs, | ||
| }, | ||
| memory: { | ||
| supported: Boolean(memory), | ||
| usedHeapMb: memory ? memory.usedJSHeapSize / 1048576 : 0, | ||
| totalHeapMb: memory ? memory.totalJSHeapSize / 1048576 : 0, | ||
| limitMb: memory ? memory.jsHeapSizeLimit / 1048576 : 0, | ||
| heapUsagePercent: memory ? (memory.usedJSHeapSize / memory.jsHeapSizeLimit) * 100 : 0, | ||
| }, | ||
| vitals: { | ||
| cumulativeLayoutShift, | ||
| firstInputDelayMs, | ||
| }, | ||
| interaction: { | ||
| clicks, | ||
| keypresses, | ||
| scrolls, | ||
| }, | ||
| audioState: { | ||
| state: audioContext?.state ?? 'no-context', | ||
| sampleRate: audioContext?.sampleRate ?? 0, | ||
| latencySeconds: 'baseLatency' in (audioContext ?? {}) ? audioContext.baseLatency : 0, | ||
| }, | ||
| }; | ||
| } | ||
| resolveAudioContext() { | ||
| if (typeof this.options.audioContext === 'function') | ||
| return this.options.audioContext(); | ||
| if (this.options.audioContext) | ||
| return this.options.audioContext; | ||
| return window.Tone?.getContext?.().rawContext ?? window.Tone?.getContext?.().context ?? null; | ||
| } | ||
| } | ||
| class WebNerveBridge extends BaseSensorBridge { | ||
| options; | ||
| constructor(runtime, options = {}) { | ||
| super('nerve', runtime); | ||
| this.options = options; | ||
| } | ||
| get label() { | ||
| return 'WebNerve'; | ||
| } | ||
| async capture(command) { | ||
| if (this.isCapturing) | ||
| return; | ||
| this.isCapturing = true; | ||
| this.lastCaptureId = command.captureId; | ||
| this.setStatus('capturing', `WebNerve sampling ${command.durationMs ?? 3000}ms`); | ||
| const startTime = Date.now(); | ||
| try { | ||
| const durationMs = Math.min(30000, Math.max(500, command.durationMs ?? 3000)); | ||
| performance.clearResourceTimings?.(); | ||
| await sleep(durationMs); | ||
| const includePattern = this.options.includeResourcePattern ?? /\/api\//; | ||
| const resourceTimings = performance.getEntriesByType('resource'); | ||
| const apiRequests = resourceTimings | ||
| .filter((entry) => includePattern.test(entry.name)) | ||
| .map((entry) => ({ | ||
| name: entry.name, | ||
| durationMs: entry.duration, | ||
| transferSize: entry.transferSize, | ||
| decodedBodySize: entry.decodedBodySize, | ||
| initiatorType: entry.initiatorType, | ||
| })); | ||
| const report = { | ||
| captureId: command.captureId, | ||
| timestamp: Date.now(), | ||
| windowMs: durationMs, | ||
| actualWindowMs: Date.now() - startTime, | ||
| metrics: { | ||
| totalResources: resourceTimings.length, | ||
| apiRequestsCount: apiRequests.length, | ||
| apiRequests, | ||
| storage: { | ||
| localStorageBytes: this.storageBytes(localStorage), | ||
| sessionStorageBytes: this.storageBytes(sessionStorage), | ||
| }, | ||
| connection: navigator.connection | ||
| ? { | ||
| effectiveType: navigator.connection.effectiveType ?? 'unknown', | ||
| rttMs: navigator.connection.rtt ?? 0, | ||
| downlinkMb: navigator.connection.downlink ?? 0, | ||
| saveData: navigator.connection.saveData ?? false, | ||
| } | ||
| : null, | ||
| }, | ||
| }; | ||
| await this.upload(command.captureId, JSON.stringify(report), 'application/json'); | ||
| this.setStatus(this.isConnected ? 'connected' : 'idle', 'WebNerve report uploaded'); | ||
| } | ||
| finally { | ||
| this.isCapturing = false; | ||
| } | ||
| } | ||
| storageBytes(storage) { | ||
| let bytes = 0; | ||
| for (let index = 0; index < storage.length; index += 1) { | ||
| const key = storage.key(index); | ||
| if (key) | ||
| bytes += key.length + (storage.getItem(key)?.length ?? 0); | ||
| } | ||
| return bytes; | ||
| } | ||
| } | ||
| class WebShieldBridge extends BaseSensorBridge { | ||
| options; | ||
| constructor(runtime, options = {}) { | ||
| super('shield', runtime); | ||
| this.options = options; | ||
| } | ||
| get label() { | ||
| return 'WebShield'; | ||
| } | ||
| async capture(command) { | ||
| if (this.isCapturing) | ||
| return; | ||
| this.isCapturing = true; | ||
| this.lastCaptureId = command.captureId; | ||
| this.setStatus('capturing', 'WebShield scanning browser exposure'); | ||
| try { | ||
| const sensitivePattern = this.options.sensitiveStoragePattern ?? /token|jwt|auth|key|secret|password|private|credential/i; | ||
| const storageRisks = []; | ||
| this.collectStorageRisks(localStorage, 'localStorage', sensitivePattern, storageRisks); | ||
| this.collectStorageRisks(sessionStorage, 'sessionStorage', sensitivePattern, storageRisks); | ||
| const report = { | ||
| captureId: command.captureId, | ||
| timestamp: Date.now(), | ||
| protocol: window.location.protocol, | ||
| origin: window.location.origin, | ||
| isHttps: window.location.protocol === 'https:', | ||
| security: { | ||
| isFramed: window.self !== window.top, | ||
| metaCsps: Array.from(document.querySelectorAll('meta[http-equiv="Content-Security-Policy"]')) | ||
| .map((element) => element.getAttribute('content') ?? ''), | ||
| readableCookies: document.cookie | ||
| ? document.cookie.split(';').map((cookie) => cookie.split('=')[0]?.trim()).filter(Boolean) | ||
| : [], | ||
| storageRisks, | ||
| }, | ||
| }; | ||
| await this.upload(command.captureId, JSON.stringify(report), 'application/json'); | ||
| this.setStatus(this.isConnected ? 'connected' : 'idle', 'WebShield report uploaded'); | ||
| } | ||
| finally { | ||
| this.isCapturing = false; | ||
| } | ||
| } | ||
| collectStorageRisks(storage, label, pattern, out) { | ||
| for (let index = 0; index < storage.length; index += 1) { | ||
| const key = storage.key(index); | ||
| if (key && pattern.test(key)) | ||
| out.push(`${label}: ${key}`); | ||
| } | ||
| } | ||
| } | ||
| class WebLogBridge extends BaseSensorBridge { | ||
| options; | ||
| logBuffer = []; | ||
| maxLogs; | ||
| constructor(runtime, options = {}) { | ||
| super('log', runtime); | ||
| this.options = options; | ||
| this.maxLogs = options.maxLogs ?? 100; | ||
| if (options.patchConsole !== false) | ||
| this.patchConsole(); | ||
| } | ||
| get label() { | ||
| return 'WebLog'; | ||
| } | ||
| getLogs() { | ||
| return [...this.logBuffer]; | ||
| } | ||
| async capture(command) { | ||
| if (this.isCapturing) | ||
| return; | ||
| this.isCapturing = true; | ||
| this.lastCaptureId = command.captureId; | ||
| this.setStatus('capturing', `WebLog sampling ${command.durationMs ?? 3000}ms`); | ||
| const captureStartTime = Date.now(); | ||
| try { | ||
| const durationMs = Math.min(30000, Math.max(500, command.durationMs ?? 3000)); | ||
| await sleep(durationMs); | ||
| const recentLogs = this.logBuffer.filter((entry) => entry.timestamp >= captureStartTime - 30000); | ||
| const report = { | ||
| captureId: command.captureId, | ||
| timestamp: Date.now(), | ||
| durationMs, | ||
| logs: recentLogs, | ||
| stateSnapshot: this.options.getStateSnapshot?.() ?? { | ||
| audioState: window.__audioDebug?.status?.() ?? 'unknown', | ||
| isPlaying: window.Tone?.Transport?.state === 'started', | ||
| activeBpm: window.Tone?.Transport?.bpm?.value ?? 120, | ||
| }, | ||
| }; | ||
| await this.upload(command.captureId, JSON.stringify(report), 'application/json'); | ||
| this.setStatus(this.isConnected ? 'connected' : 'idle', 'WebLog report uploaded'); | ||
| } | ||
| finally { | ||
| this.isCapturing = false; | ||
| } | ||
| } | ||
| patchConsole() { | ||
| const marker = '__webPerceptionConsolePatched'; | ||
| const consoleRecord = console; | ||
| if (consoleRecord[marker]) | ||
| return; | ||
| consoleRecord[marker] = true; | ||
| const originalLog = console.log.bind(console); | ||
| const originalWarn = console.warn.bind(console); | ||
| const originalError = console.error.bind(console); | ||
| console.log = (...args) => { | ||
| originalLog(...args); | ||
| this.pushLog('log', args); | ||
| }; | ||
| console.warn = (...args) => { | ||
| originalWarn(...args); | ||
| this.pushLog('warn', args); | ||
| }; | ||
| console.error = (...args) => { | ||
| originalError(...args); | ||
| this.pushLog('error', args); | ||
| }; | ||
| window.addEventListener('error', (event) => { | ||
| this.pushLog('exception', [`Uncaught Exception: ${event.message} at ${event.filename}:${event.lineno}:${event.colno}`]); | ||
| }); | ||
| window.addEventListener('unhandledrejection', (event) => { | ||
| this.pushLog('exception', [`Unhandled Rejection: ${String(event.reason)}`]); | ||
| }); | ||
| } | ||
| pushLog(type, args) { | ||
| this.logBuffer.push({ type, message: toMessage(args), timestamp: Date.now() }); | ||
| while (this.logBuffer.length > this.maxLogs) | ||
| this.logBuffer.shift(); | ||
| } | ||
| } | ||
| export function initWebPerception(options) { | ||
| if (typeof window === 'undefined') { | ||
| throw new Error('Web Perception browser SDK must run in a browser'); | ||
| } | ||
| const runtime = { | ||
| apiKey: async () => String(await resolveMaybe(options.apiKey)), | ||
| relayUrl: normalizeRelayUrl(options.relayUrl), | ||
| apiBasePath: normalizeBasePath(options.apiBasePath), | ||
| debug: options.debug ?? false, | ||
| exposeGlobals: options.exposeGlobals ?? true, | ||
| reconnect: options.reconnect ?? true, | ||
| reconnectInitialDelayMs: options.reconnectInitialDelayMs ?? 3000, | ||
| reconnectMaxDelayMs: options.reconnectMaxDelayMs ?? 30000, | ||
| }; | ||
| const selectedSensors = options.sensors ?? ['ear', 'eye', 'sense', 'nerve', 'shield', 'log']; | ||
| const sensors = {}; | ||
| for (const sensor of selectedSensors) { | ||
| if (sensor === 'ear') | ||
| sensors.ear = new WebEarBridge(runtime, options.ear); | ||
| if (sensor === 'eye') | ||
| sensors.eye = new WebEyeBridge(runtime, options.eye); | ||
| if (sensor === 'sense') | ||
| sensors.sense = new WebSenseBridge(runtime, options.sense); | ||
| if (sensor === 'nerve') | ||
| sensors.nerve = new WebNerveBridge(runtime, options.nerve); | ||
| if (sensor === 'shield') | ||
| sensors.shield = new WebShieldBridge(runtime, options.shield); | ||
| if (sensor === 'log') | ||
| sensors.log = new WebLogBridge(runtime, options.log); | ||
| } | ||
| const controller = { | ||
| sensors, | ||
| connect: async () => { | ||
| await Promise.all(Object.values(sensors).map((sensor) => sensor?.connect())); | ||
| }, | ||
| disconnect: () => { | ||
| for (const sensor of Object.values(sensors)) | ||
| sensor?.disconnect(); | ||
| }, | ||
| getStatus: () => { | ||
| const result = {}; | ||
| for (const [sensor, handle] of Object.entries(sensors)) { | ||
| result[sensor] = handle.getStatus(); | ||
| } | ||
| return result; | ||
| }, | ||
| }; | ||
| if (runtime.exposeGlobals) { | ||
| window.__webPerception = controller; | ||
| for (const [sensor, handle] of Object.entries(sensors)) { | ||
| window[SENSOR_GLOBALS[sensor]] = handle; | ||
| } | ||
| } | ||
| if (options.autoConnect !== false) { | ||
| const connect = () => { void controller.connect(); }; | ||
| if (document.readyState === 'loading') { | ||
| document.addEventListener('DOMContentLoaded', connect, { once: true }); | ||
| } | ||
| else { | ||
| connect(); | ||
| } | ||
| } | ||
| return controller; | ||
| } | ||
| export const WebPerception = { | ||
| init: initWebPerception, | ||
| }; | ||
| export const WebEar = { | ||
| init: (options) => initWebPerception({ ...options, sensors: ['ear'] }).sensors.ear, | ||
| }; | ||
| export const WebEye = { | ||
| init: (options) => initWebPerception({ ...options, sensors: ['eye'] }).sensors.eye, | ||
| }; | ||
| export const WebSense = { | ||
| init: (options) => initWebPerception({ ...options, sensors: ['sense'] }).sensors.sense, | ||
| }; | ||
| export const WebNerve = { | ||
| init: (options) => initWebPerception({ ...options, sensors: ['nerve'] }).sensors.nerve, | ||
| }; | ||
| export const WebShield = { | ||
| init: (options) => initWebPerception({ ...options, sensors: ['shield'] }).sensors.shield, | ||
| }; | ||
| export const WebLog = { | ||
| init: (options) => initWebPerception({ ...options, sensors: ['log'] }).sensors.log, | ||
| }; | ||
| //# sourceMappingURL=perception.js.map |
| {"version":3,"file":"perception.js","sourceRoot":"","sources":["../src/perception.ts"],"names":[],"mappings":"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"} |
@@ -166,2 +166,5 @@ /** | ||
| // Cap duration to prevent runaway recordings (500ms – 30s) | ||
| durationMs = Math.min(30000, Math.max(500, durationMs || 3000)); | ||
| var tap = ensureTap(); | ||
@@ -279,5 +282,8 @@ if (!tap) { | ||
| if (options.devOnly !== false) { | ||
| var isDev = (typeof import !== 'undefined' && typeof import.meta !== 'undefined' && import.meta.env && import.meta.env.DEV) || | ||
| (typeof process !== 'undefined' && process.env && process.env.NODE_ENV !== 'production') || | ||
| (typeof location !== 'undefined' && (location.hostname === 'localhost' || location.hostname === '127.0.0.1')); | ||
| var isDev = false; | ||
| try { | ||
| // Check common development indicators | ||
| if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV !== 'production') isDev = true; | ||
| if (typeof location !== 'undefined' && (location.hostname === 'localhost' || location.hostname === '127.0.0.1')) isDev = true; | ||
| } catch (e) { /* ignore */ } | ||
| if (!isDev) { | ||
@@ -284,0 +290,0 @@ log('Skipping init — not in dev mode. Set devOnly: false to override.'); |
+10
-0
| /** | ||
| * WebEar browser client — v1.1.0 | ||
| * | ||
| * @deprecated Use `webear/perception` instead. This legacy SDK monkey-patches | ||
| * AudioNode.prototype.connect which can interfere with third-party libraries. | ||
| * The perception SDK requires explicit audioNode/connectAudioSource options | ||
| * and does not modify browser prototypes. | ||
| * | ||
| * SECURITY NOTE: EventSource does not support custom headers. The API key is | ||
| * sent as a URL query parameter, which means it appears in server access logs, | ||
| * browser history, and proxy logs. Use per-user revocable keys (`wbr_` prefix) | ||
| * and enable rate limiting on the relay server. | ||
| * | ||
| * Captures live audio from the browser tab and relays it to the cloud. | ||
@@ -5,0 +15,0 @@ * No local server required — everything routes through codedswitch.com. |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAA;IACd,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AA4KD,eAAO,MAAM,MAAM;IACjB;;;;OAIG;kBACW,aAAa,GAAG,IAAI;IAalC,8EAA8E;kBAChE,IAAI;CAKnB,CAAA;AAED,eAAe,MAAM,CAAA"} | ||
| {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAA;IACd,qEAAqE;IACrE,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAsLD,eAAO,MAAM,MAAM;IACjB;;;;OAIG;kBACW,aAAa,GAAG,IAAI;IAkBlC,8EAA8E;kBAChE,IAAI;CAKnB,CAAA;AAED,eAAe,MAAM,CAAA"} |
+22
-1
| /** | ||
| * WebEar browser client — v1.1.0 | ||
| * | ||
| * @deprecated Use `webear/perception` instead. This legacy SDK monkey-patches | ||
| * AudioNode.prototype.connect which can interfere with third-party libraries. | ||
| * The perception SDK requires explicit audioNode/connectAudioSource options | ||
| * and does not modify browser prototypes. | ||
| * | ||
| * SECURITY NOTE: EventSource does not support custom headers. The API key is | ||
| * sent as a URL query parameter, which means it appears in server access logs, | ||
| * browser history, and proxy logs. Use per-user revocable keys (`wbr_` prefix) | ||
| * and enable rate limiting on the relay server. | ||
| * | ||
| * Captures live audio from the browser tab and relays it to the cloud. | ||
@@ -87,2 +97,4 @@ * No local server required — everything routes through codedswitch.com. | ||
| async function record(durationMs) { | ||
| // Cap duration to prevent runaway recordings | ||
| const safeDuration = Math.min(30000, Math.max(500, durationMs)); | ||
| // Try Tone.js tap if not already tapped | ||
@@ -110,3 +122,3 @@ if (!_tapped) { | ||
| setTimeout(() => { if (recorder.state === 'recording') | ||
| recorder.stop(); }, durationMs); | ||
| recorder.stop(); }, safeDuration); | ||
| }); | ||
@@ -141,2 +153,8 @@ } | ||
| const buffer = await blob.arrayBuffer(); | ||
| // Cap upload size to 5MB — a 30s WebM/Opus clip is ~1.5MB | ||
| const MAX_UPLOAD_BYTES = 5 * 1024 * 1024; | ||
| if (buffer.byteLength > MAX_UPLOAD_BYTES) { | ||
| console.error(`[WebEar] Capture too large (${(buffer.byteLength / 1024 / 1024).toFixed(1)}MB) — skipping upload`); | ||
| return; | ||
| } | ||
| const res = await fetch(`${_serverUrl}/api/webear/blob/${captureId}`, { | ||
@@ -179,2 +197,5 @@ method: 'POST', | ||
| } | ||
| console.warn('[WebEar] webear/browser is deprecated — use webear/perception instead. See https://github.com/asume21/webear#web-perception'); | ||
| const maskedKey = _apiKey.length > 8 ? _apiKey.slice(0, 8) + '••••' : '••••'; | ||
| console.log(`[WebEar] Initializing with key ${maskedKey}`); | ||
| patchAudioContext(); | ||
@@ -181,0 +202,0 @@ connect(); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"} |
@@ -25,6 +25,12 @@ /** | ||
| maxAgeMins?: number; | ||
| /** Max upload size in bytes (default: 50MB) */ | ||
| /** Max upload size in bytes (default: 5MB) */ | ||
| maxUploadBytes?: number; | ||
| /** Only enable in development mode (default: true) */ | ||
| devOnly?: boolean; | ||
| /** Optional auth token — if set, all requests must include `Authorization: Bearer <token>` */ | ||
| authToken?: string; | ||
| /** Maximum concurrent SSE connections (default: 10) */ | ||
| maxSseClients?: number; | ||
| /** Allowed origins for SSE and uploads. If empty, all origins are accepted. */ | ||
| allowedOrigins?: string[]; | ||
| } | ||
@@ -31,0 +37,0 @@ export declare function webearMiddleware(options?: WebEarMiddlewareOptions): Router; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,MAAM,EAA+B,MAAM,SAAS,CAAA;AAG7D,MAAM,WAAW,uBAAuB;IACtC,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAiBD,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,uBAA4B,GAAG,MAAM,CAsN9E;AA8DD,eAAe,gBAAgB,CAAA"} | ||
| {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,MAAM,EAA+B,MAAM,SAAS,CAAA;AAG7D,MAAM,WAAW,uBAAuB;IACtC,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,sDAAsD;IACtD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,8FAA8F;IAC9F,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,+EAA+E;IAC/E,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;CAC1B;AAiBD,wBAAgB,gBAAgB,CAAC,OAAO,GAAE,uBAA4B,GAAG,MAAM,CAsP9E;AA8DD,eAAe,gBAAgB,CAAA"} |
+27
-1
@@ -22,3 +22,3 @@ /** | ||
| export function webearMiddleware(options = {}) { | ||
| const { maxCaptures = 50, maxAgeMins = 10, maxUploadBytes = 50 * 1024 * 1024, devOnly = true, } = options; | ||
| const { maxCaptures = 50, maxAgeMins = 10, maxUploadBytes = 5 * 1024 * 1024, devOnly = true, authToken, maxSseClients = 10, allowedOrigins = [], } = options; | ||
| const router = Router(); | ||
@@ -31,2 +31,25 @@ if (devOnly && process.env.NODE_ENV === 'production') { | ||
| } | ||
| // ── Auth guard — if authToken is configured, require it on all requests ── | ||
| if (authToken) { | ||
| router.use((req, res, next) => { | ||
| const header = req.headers['authorization']; | ||
| const token = typeof header === 'string' | ||
| ? header.replace(/^Bearer\s+/i, '').trim() | ||
| : ''; | ||
| if (token !== authToken) { | ||
| return void res.status(401).json({ error: 'Unauthorized — invalid or missing auth token' }); | ||
| } | ||
| next(); | ||
| }); | ||
| } | ||
| // ── Origin guard — if allowedOrigins is configured, reject unknown origins ── | ||
| if (allowedOrigins.length > 0) { | ||
| router.use((req, res, next) => { | ||
| const origin = req.headers['origin'] || req.headers['referer']?.replace(/\/[^/]*$/, '') || ''; | ||
| if (origin && !allowedOrigins.some(o => origin.startsWith(o))) { | ||
| return void res.status(403).json({ error: 'Forbidden — origin not allowed' }); | ||
| } | ||
| next(); | ||
| }); | ||
| } | ||
| // ── In-memory state ──────────────────────────────────────────────── | ||
@@ -63,2 +86,5 @@ const captures = new Map(); | ||
| router.get('/events', (req, res) => { | ||
| if (sseClients.size >= maxSseClients) { | ||
| return void res.status(503).json({ error: 'Too many SSE connections — try again later' }); | ||
| } | ||
| res.setHeader('Content-Type', 'text/event-stream'); | ||
@@ -65,0 +91,0 @@ res.setHeader('Cache-Control', 'no-cache'); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"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"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"analyzeAudio.d.ts","sourceRoot":"","sources":["../../src/tools/analyzeAudio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,kBAAkB;;CAE9B,CAAC;AAOF,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE;;;;;GAuFrE"} | ||
| {"version":3,"file":"analyzeAudio.d.ts","sourceRoot":"","sources":["../../src/tools/analyzeAudio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,kBAAkB;;CAI9B,CAAC;AAOF,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE;;;;;GAuFrE"} |
| import { z } from 'zod'; | ||
| import { waitForCapture } from '../client.js'; | ||
| export const analyzeAudioSchema = { | ||
| capture_id: z.string().describe('The capture ID returned by capture_audio'), | ||
| capture_id: z.string() | ||
| .regex(/^[a-zA-Z0-9_-]{4,64}$/, 'capture_id must be 4–64 alphanumeric characters') | ||
| .describe('The capture ID returned by capture_audio'), | ||
| }; | ||
@@ -6,0 +8,0 @@ const API_BASE = process.env.MCP_API_URL || 'https://www.codedswitch.com'; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"analyzeAudio.js","sourceRoot":"","sources":["../../src/tools/analyzeAudio.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"analyzeAudio.js","sourceRoot":"","sources":["../../src/tools/analyzeAudio.ts"],"names":[],"mappings":"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"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"describeAudio.d.ts","sourceRoot":"","sources":["../../src/tools/describeAudio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,mBAAmB;;CAE/B,CAAC;AAKF,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE;;;;;GAwDtE"} | ||
| {"version":3,"file":"describeAudio.d.ts","sourceRoot":"","sources":["../../src/tools/describeAudio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,mBAAmB;;CAI/B,CAAC;AAKF,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAAE,UAAU,EAAE,MAAM,CAAA;CAAE;;;;;GAwDtE"} |
| import { z } from 'zod'; | ||
| import { waitForCapture } from '../client.js'; | ||
| export const describeAudioSchema = { | ||
| capture_id: z.string().describe('The capture ID returned by capture_audio to describe'), | ||
| capture_id: z.string() | ||
| .regex(/^[a-zA-Z0-9_-]{4,64}$/, 'capture_id must be 4–64 alphanumeric characters') | ||
| .describe('The capture ID returned by capture_audio to describe'), | ||
| }; | ||
@@ -6,0 +8,0 @@ const API_BASE = process.env.MCP_API_URL || 'https://www.codedswitch.com'; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"describeAudio.js","sourceRoot":"","sources":["../../src/tools/describeAudio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;CACxF,CAAC;AAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,6BAA6B,CAAC;AAC1E,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAA4B;IACrE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,4HAA4H;iBACnI,CAAC;SACH,CAAC;IACJ,CAAC;IAED,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,YAAY,IAAI,CAAC,UAAU,uCAAuC;iBACzE,CAAC;SACH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,mEAAmE;QACnE,MAAM,QAAQ,GAAG,aAAa,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,KAAK,QAAQ,+GAA+G,CAAC;QAC5I,MAAM,MAAM,GAAG,SAAS,QAAQ,QAAQ,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAE/E,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,mBAAmB,EAAE;YACtD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,OAAO,EAAE;gBACpC,cAAc,EAAE,iCAAiC,QAAQ,EAAE;aAC5D;YACD,IAAI;SACL,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,EAAS,CAAC;QAEhD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;SACxD,CAAC;IACJ,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,0BAA0B,GAAG,CAAC,OAAO,6CAA6C;iBACzF,CAAC;SACH,CAAC;IACJ,CAAC;AACH,CAAC"} | ||
| {"version":3,"file":"describeAudio.js","sourceRoot":"","sources":["../../src/tools/describeAudio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;SACnB,KAAK,CAAC,uBAAuB,EAAE,iDAAiD,CAAC;SACjF,QAAQ,CAAC,sDAAsD,CAAC;CACpE,CAAC;AAEF,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,6BAA6B,CAAC;AAC1E,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAA4B;IACrE,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,4HAA4H;iBACnI,CAAC;SACH,CAAC;IACJ,CAAC;IAED,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,YAAY,IAAI,CAAC,UAAU,uCAAuC;iBACzE,CAAC;SACH,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,mEAAmE;QACnE,MAAM,QAAQ,GAAG,aAAa,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,KAAK,QAAQ,+GAA+G,CAAC;QAC5I,MAAM,MAAM,GAAG,SAAS,QAAQ,QAAQ,CAAC;QACzC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAE/E,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,mBAAmB,EAAE;YACtD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,eAAe,EAAE,UAAU,OAAO,EAAE;gBACpC,cAAc,EAAE,iCAAiC,QAAQ,EAAE;aAC5D;YACD,IAAI;SACL,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,mBAAmB,GAAG,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,EAAS,CAAC;QAEhD,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;SACxD,CAAC;IACJ,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,0BAA0B,GAAG,CAAC,OAAO,6CAA6C;iBACzF,CAAC;SACH,CAAC;IACJ,CAAC;AACH,CAAC"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"diffAudio.d.ts","sourceRoot":"","sources":["../../src/tools/diffAudio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,eAAO,MAAM,eAAe;;;CAG3B,CAAA;AA8BD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE;;;;;GA0D1F"} | ||
| {"version":3,"file":"diffAudio.d.ts","sourceRoot":"","sources":["../../src/tools/diffAudio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAKvB,eAAO,MAAM,eAAe;;;CAO3B,CAAA;AA8BD,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAA;CAAE;;;;;GA0D1F"} |
@@ -6,4 +6,8 @@ import { z } from 'zod'; | ||
| export const diffAudioSchema = { | ||
| capture_id_a: z.string().describe('First capture ID (the "before")'), | ||
| capture_id_b: z.string().describe('Second capture ID (the "after")'), | ||
| capture_id_a: z.string() | ||
| .regex(/^[a-zA-Z0-9_-]{4,64}$/, 'capture_id must be 4\u201364 alphanumeric characters') | ||
| .describe('First capture ID (the "before")'), | ||
| capture_id_b: z.string() | ||
| .regex(/^[a-zA-Z0-9_-]{4,64}$/, 'capture_id must be 4\u201364 alphanumeric characters') | ||
| .describe('Second capture ID (the "after")'), | ||
| }; | ||
@@ -10,0 +14,0 @@ async function decodeWebmToPcm(webmBuffer) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"diffAudio.js","sourceRoot":"","sources":["../../src/tools/diffAudio.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"diffAudio.js","sourceRoot":"","sources":["../../src/tools/diffAudio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,UAAU,EAA4B,MAAM,4BAA4B,CAAA;AAEjF,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;SACrB,KAAK,CAAC,uBAAuB,EAAE,sDAAsD,CAAC;SACtF,QAAQ,CAAC,iCAAiC,CAAC;IAC9C,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;SACrB,KAAK,CAAC,uBAAuB,EAAE,sDAAsD,CAAC;SACtF,QAAQ,CAAC,iCAAiC,CAAC;CAC/C,CAAA;AAED,KAAK,UAAU,eAAe,CAAC,UAAkB;IAC/C,MAAM,WAAW,GAAG,KAAK,CAAA;IACzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAA;QAC7G,MAAM,MAAM,GAAa,EAAE,CAAA;QAC3B,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;QACnD,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAC9B,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YACvB,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;YACtC,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC,CAAA;QACxJ,CAAC,CAAC,CAAA;QACF,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;QACtB,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,UAAU,CAAC,CAAA;QAC1B,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAA;IAChB,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,KAAK,CAAC,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,IAAI,GAAG,EAAE;IAC3D,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,GAAG,KAAK,KAAK,CAAC,MAAM,CAAC,EAAE,CAAA;IAChE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACf,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;IAC7B,OAAO,GAAG,KAAK,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,CAAA;AACrG,CAAC;AAED,SAAS,OAAO,CAAC,OAAgB,EAAE,GAAW;IAC5C,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE,CAAA;AAC1C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,IAAoD;IACzF,IAAI,IAAY,EAAE,IAAY,CAAA;IAC9B,IAAI,CAAC;QACH,CAAC;QAAA,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAChC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC;YACvC,cAAc,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC;SACxC,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,sBAAsB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAA;IACjI,CAAC;IAED,IAAI,EAAuB,EAAE,EAAuB,CAAA;IACpD,IAAI,CAAC;QACH,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAClF,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,CAAA;QAC1C,EAAE,GAAG,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,CAAA;IAC5C,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,kBAAkB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAA;IAC7H,CAAC;IAED,MAAM,SAAS,GAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,CAAA;IACnD,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,kBAAkB,GAAG,EAAE,CAAC,kBAAkB,CAAC,CAAA;IAC9E,MAAM,SAAS,GAAO,EAAE,CAAC,YAAY,IAAI,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IAC7G,MAAM,YAAY,GAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,mBAAmB,GAAG,EAAE,CAAC,mBAAmB,CAAC,CAAA;IAC/E,MAAM,WAAW,GAAK,CAAC,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,WAAW,CAAA;IACvD,MAAM,aAAa,GAAI,EAAE,CAAC,WAAW,IAAI,CAAC,EAAE,CAAC,WAAW,CAAA;IAExD,MAAM,KAAK,GAAG;QACZ,kBAAkB,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM;QACzF,EAAE;QACF,wDAAwD;QACxD,OAAO,CAAC,SAAS,GAAG,CAAC,EAAM,KAAK,CAAC,EAAE,CAAC,KAAK,EAAG,EAAE,CAAC,KAAK,EAAG,KAAK,EAAE,OAAO,CAAC,CAAC;QACvE,OAAO,CAAC,WAAW,EAAQ,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACxE,WAAW,CAAG,CAAC,CAAC,iDAAiD,CAAC,CAAC,CAAC,EAAE;QACtE,aAAa,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE;QAC1C,EAAE;QACF,wDAAwD;QACxD,OAAO,CAAC,cAAc,GAAG,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,EAAE,EAAE,CAAC,kBAAkB,EAAE,mBAAmB,EAAE,KAAK,CAAC,CAAC;QAC9G,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,KAAK,EAAE,cAAc,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;QACxH,EAAE;QACF,wDAAwD;QACxD,SAAS,KAAK,IAAI;YAChB,CAAC,CAAC,OAAO,CAAC,SAAS,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,YAAY,MAAM,EAAE,CAAC,YAAY,MAAM,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;YAC/H,CAAC,CAAC,UAAU,EAAE,CAAC,YAAY,IAAI,KAAK,MAAM,EAAE,CAAC,YAAY,IAAI,KAAK,EAAE;QACtE,OAAO,CAAC,YAAY,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,EAAE,EAAE,CAAC,mBAAmB,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;QACxG,EAAE;QACF,wDAAwD;QACxD,GAAG,CAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;YACrE,MAAM,IAAI,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAA;YAC9D,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;YAChC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QACrF,CAAC,CAAC,CAAC;QACH,EAAE;QACF,wDAAwD;QACxD,sBAAsB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,cAAc,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC;KACxG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAElC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAA;AAC9D,CAAC;AAED,SAAS,sBAAsB,CAC7B,GAAwB,EACxB,GAAwB,EACxB,KAMC;IAED,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,KAAK,CAAC,WAAW;QAAW,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAA;IAC7F,IAAI,KAAK,CAAC,aAAa;QAAS,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAA;IAC3E,IAAI,KAAK,CAAC,SAAS,GAAG,CAAC;QAAS,KAAK,CAAC,IAAI,CAAC,gCAAgC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAA;IAClI,IAAI,KAAK,CAAC,cAAc,GAAG,GAAG;QAAE,KAAK,CAAC,IAAI,CAAC,+EAA+E,CAAC,CAAA;IAC3H,IAAI,KAAK,CAAC,YAAY,GAAG,EAAE;QAAK,KAAK,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAA;IACzG,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,2DAA2D,CAAA;AACrG,CAAC"} |
+7
-2
| { | ||
| "name": "webear", | ||
| "version": "1.2.4", | ||
| "version": "2.0.0", | ||
| "mcpName": "io.github.asume21/webear", | ||
| "description": "Give your AI coding assistant ears — capture, analyze, and describe live audio from any web app. Works with Windsurf, Cursor, Claude Code, and any MCP-compatible IDE.", | ||
| "description": "Give your AI real senses — hear, see, and feel any web app in real time. Audio, visuals, performance, network, security, and console capture via MCP. Works with Windsurf, Cursor, Claude Code, and any MCP-compatible IDE.", | ||
| "type": "module", | ||
@@ -15,2 +15,3 @@ "main": "dist/index.js", | ||
| "./middleware": "./dist/middleware.js", | ||
| "./perception": "./dist/perception.js", | ||
| "./client": "./client-snippet.js" | ||
@@ -39,2 +40,6 @@ }, | ||
| "analysis", | ||
| "perception", | ||
| "browser-sensors", | ||
| "web-vitals", | ||
| "telemetry", | ||
| "windsurf", | ||
@@ -41,0 +46,0 @@ "cursor", |
+83
-9
@@ -8,5 +8,5 @@ # webear | ||
| **Give your AI coding assistant ears.** | ||
| **Give your AI real senses — hear, see, and feel any web app.** | ||
| An [MCP](https://modelcontextprotocol.io) server that lets AI coding assistants capture, analyze, and describe **live audio from a running web application** — not a file on disk, not the physical microphone. The actual `AudioContext` output your app is rendering right now. | ||
| An [MCP](https://modelcontextprotocol.io) server + browser SDK that gives AI coding assistants **direct sensory access** to a live web application. Audio, visuals, performance, network, security, and console — captured from the browser, analyzed in real time, delivered via MCP. | ||
@@ -17,9 +17,3 @@ > *"The beat sounds muddy"* → your AI captures 3 seconds, measures the spectral centroid at 580 Hz with 45% energy below 250 Hz, and tells you exactly why. | ||
| <!-- DEMO GIF — record a 15-second clip showing: | ||
| 1. Dev app playing audio in browser | ||
| 2. Asking Claude/Cursor: "capture 3s and tell me why the bass sounds muddy" | ||
| 3. Claude calls capture_audio then analyze_audio | ||
| 4. Claude explains: bass band is 42%, spectral centroid 620Hz, no clipping | ||
| Replace this comment with:  | ||
| --> | ||
|  | ||
@@ -298,2 +292,82 @@ --- | ||
| ## Web Perception — Full Sensor Suite | ||
| WebEar started as audio-only. **Web Perception** expands it to 6 senses: | ||
| | Sensor | What it perceives | | ||
| |---|---| | ||
| | **WebEar** | Audio — mix quality, rhythm, instruments, clipping | | ||
| | **WebEye** | Visual — canvas, UI layout, animations, screenshots | | ||
| | **WebSense** | Performance — frame rate, memory, audio latency | | ||
| | **WebNerve** | Network — API latencies, connection quality, storage | | ||
| | **WebShield** | Security — cookies, storage exposure, CSP, framing | | ||
| | **WebLog** | Console — logs, warnings, errors, uncaught exceptions | | ||
| ### Install the full browser SDK | ||
| ```js | ||
| import { WebPerception } from 'webear/perception' | ||
| WebPerception.init({ | ||
| apiKey: 'wbr_YOUR_API_KEY', | ||
| relayUrl: 'https://www.codedswitch.com', | ||
| sensors: ['ear', 'eye', 'sense', 'nerve', 'shield', 'log'], | ||
| }) | ||
| ``` | ||
| Or use a single sensor: | ||
| ```js | ||
| import { WebEar } from 'webear/perception' | ||
| WebEar.init({ | ||
| apiKey: 'wbr_YOUR_API_KEY', | ||
| ear: { audioContext: myCtx, audioNode: masterGain }, | ||
| }) | ||
| ``` | ||
| ### Connect via MCP (hosted relay — no local server required) | ||
| ```json | ||
| { | ||
| "mcpServers": { | ||
| "webear": { | ||
| "url": "https://www.codedswitch.com/api/webear/mcp/sse", | ||
| "headers": { | ||
| "Authorization": "Bearer wbr_YOUR_API_KEY" | ||
| } | ||
| } | ||
| } | ||
| } | ||
| ``` | ||
| ### Available MCP Tools | ||
| | Sensor | Tool | Credits | Description | | ||
| |---|---|---|---| | ||
| | **Ear** | `capture_audio` | Free | Record live tab audio | | ||
| | **Ear** | `analyze_audio` | 1 | BPM, loudness, frequency bands, clipping, dynamic range | | ||
| | **Ear** | `describe_audio` | 2 | AI plain-English description — instruments, genre, mood, mix notes | | ||
| | **Ear** | `diff_audio` | 1 | Compare two captures — loudness, tone, timing deltas | | ||
| | **Ear** | `groove_score` | 2 | Grid alignment, swing factor, consistency (0–100%) | | ||
| | **Ear** | `capture_and_analyze` | 1 | Capture + analysis in one call | | ||
| | **Ear** | `mix_coach` | 3 | Structured mixing feedback | | ||
| | **Eye** | `capture_video` | Free | Record canvas/video from the tab | | ||
| | **Eye** | `describe_video` | 2 | AI visual description — layout, colors, bugs | | ||
| | **Eye** | `diff_visuals` | 2 | Compare two visual captures | | ||
| | **Sense** | `capture_telemetry` | Free | FPS, memory, layout shifts, audio latency | | ||
| | **Sense** | `analyze_telemetry` | 1 | Frame drops, memory pressure, audio underruns | | ||
| | **Nerve** | `capture_nerve` | Free | API timings, connection quality, storage size | | ||
| | **Nerve** | `analyze_nerve` | 1 | Slow APIs, connection quality, storage bloat | | ||
| | **Shield** | `capture_shield` | Free | Cookies, CSP, storage exposure, framing | | ||
| | **Shield** | `analyze_shield` | 1 | CORS issues, non-HttpOnly cookies, missing CSP | | ||
| | **Log** | `capture_logs` | Free | Console output + uncaught exceptions | | ||
| | **Log** | `analyze_logs` | 1 | Error patterns, stack traces, repeated warnings | | ||
| ### Get an API Key | ||
| Sign up at **[codedswitch.com](https://www.codedswitch.com)** → Settings → WebEar. Keys start with `wbr_`. | ||
| --- | ||
| ## Contributing | ||
@@ -300,0 +374,0 @@ |
AI-detected potential malware
Supply chain riskAI has identified this package as malware. This is a strong signal that the package may be malicious.
AI-detected potential code anomaly
Supply chain riskAI has identified unusual behaviors that may pose a security risk.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
AI-detected potential malware
Supply chain riskAI has identified this package as malware. This is a strong signal that the package may be malicious.
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
198536
64.49%44
10%2544
63.6%381
24.1%10
11.11%10
11.11%