🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

webear

Package Overview
Dependencies
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

webear - npm Package Compare versions

Comparing version
1.2.4
to
2.0.0
+155
dist/perception.d.ts
/**
* 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":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,MAAM,mBAAmB,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEvF,MAAM,MAAM,qBAAqB,GAC7B,MAAM,GACN,cAAc,GACd,WAAW,GACX,cAAc,GACd,WAAW,GACX,OAAO,CAAC;AAEZ,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,qBAAqB,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1E,gBAAgB,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACtC,MAAM,EAAE,MAAM,qBAAqB,CAAC;IACpC,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,YAAY,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,GAAG,CAAC,EAAE,aAAa,CAAC;IACpB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,KAAK,CAAC,EAAE,eAAe,CAAC;IACxB,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,GAAG,CAAC,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,WAAW,GAAG,CAAC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACrF,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,YAAY,CAAC,EAAE,gBAAgB,GAAG,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC;IAClE,kBAAkB,CAAC,EAAE,CAAC,WAAW,EAAE,+BAA+B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5F,qBAAqB,CAAC,EAAE,CAAC,WAAW,EAAE,+BAA+B,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/F,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,mBAAmB,CAAC,EAAE,yBAAyB,CAAC;IAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY,CAAC,EAAE,gBAAgB,GAAG,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC;CACnE;AAED,MAAM,WAAW,eAAe;IAC9B,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC/B,uBAAuB,CAAC,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC;CAClC;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC,CAAC;IAC5D,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,YAAY,CAAC,CAAC,CAAC;CACrE;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,eAAe,CAAC,EAAE,uBAAuB,CAAC;QAC1C,QAAQ,CAAC,EAAE,YAAY,CAAC;QACxB,QAAQ,CAAC,EAAE,YAAY,CAAC;QACxB,UAAU,CAAC,EAAE,YAAY,CAAC;QAC1B,UAAU,CAAC,EAAE,YAAY,CAAC;QAC1B,WAAW,CAAC,EAAE,YAAY,CAAC;QAC3B,QAAQ,CAAC,EAAE,YAAY,GAAG;YAAE,OAAO,CAAC,EAAE,MAAM,eAAe,EAAE,CAAA;SAAE,CAAC;QAChE,cAAc,CAAC,EAAE,YAAY,CAAC;QAC9B,cAAc,CAAC,EAAE,YAAY,CAAC;QAC9B,gBAAgB,CAAC,EAAE,YAAY,CAAC;QAChC,gBAAgB,CAAC,EAAE,YAAY,CAAC;QAChC,iBAAiB,CAAC,EAAE,YAAY,CAAC;QACjC,cAAc,CAAC,EAAE,YAAY,CAAC;QAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,IAAI,CAAC,EAAE;YACL,SAAS,CAAC,EAAE;gBACV,KAAK,CAAC,EAAE,MAAM,CAAC;gBACf,GAAG,CAAC,EAAE;oBAAE,KAAK,CAAC,EAAE,MAAM,CAAA;iBAAE,CAAC;aAC1B,CAAC;YACF,UAAU,CAAC,EAAE,MAAM;gBAAE,UAAU,CAAC,EAAE,gBAAgB,CAAC;gBAAC,OAAO,CAAC,EAAE,gBAAgB,CAAA;aAAE,CAAC;SAClF,CAAC;KACH;IAED,UAAU,WAAW;QACnB,MAAM,CAAC,EAAE;YACP,eAAe,EAAE,MAAM,CAAC;YACxB,eAAe,EAAE,MAAM,CAAC;YACxB,cAAc,EAAE,MAAM,CAAC;SACxB,CAAC;KACH;IAED,UAAU,SAAS;QACjB,UAAU,CAAC,EAAE;YACX,aAAa,CAAC,EAAE,MAAM,CAAC;YACvB,GAAG,CAAC,EAAE,MAAM,CAAC;YACb,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;SACpB,CAAC;KACH;CACF;AAmBD,UAAU,eAAe;IACvB,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,WAAW,CAAC;IAC7C,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAmsBD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,uBAAuB,CA8DxF;AAED,eAAO,MAAM,aAAa;;CAEzB,CAAC;AAEF,eAAO,MAAM,MAAM;oBACD,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC;CACtD,CAAC;AAEF,eAAO,MAAM,MAAM;oBACD,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC;CACtD,CAAC;AAEF,eAAO,MAAM,QAAQ;oBACH,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC;CACtD,CAAC;AAEF,eAAO,MAAM,QAAQ;oBACH,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC;CACtD,CAAC;AAEF,eAAO,MAAM,SAAS;oBACJ,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC;CACtD,CAAC;AAEF,eAAO,MAAM,MAAM;oBACD,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC;CACtD,CAAC"}
/**
* 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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"}
+9
-3

@@ -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.');

/**
* 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"}
/**
* 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"}

@@ -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":"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"}
{
"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",

@@ -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: ![demo](./demo.gif)
-->
![AI Web Perception Demo](./assets/demo.gif)

@@ -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 @@