/** * Type definitions for the WAB browser client (wab.min.js). * Reference in tsconfig: "types": ["./node_modules/web-agent-bridge/public/script/wab.d.ts"] * Or copy this file next to your app and /// */ export interface WABActionParamSpec { name: string; type: 'string' | 'number' | 'boolean' | 'object' | 'array' | 'any' | string; description?: string; defaultValue?: unknown; required?: boolean; } export type WABActionParams = Record; export interface WABActionConfig { description?: string; params?: WABActionParamSpec[]; run: (params: TParams) => TResult | Promise; handler?: (params: TParams) => TResult | Promise; } export type WABActionsMap = Record< string, WABActionConfig | ((params: WABActionParams) => unknown | Promise) >; export interface WABInitConfig { name?: string; actions?: WABActionsMap; /** When set, discover() and execute() can proxy to this origin */ serverUrl?: string; } export interface WABDiscoveryAction { name: string; description: string; params?: WABActionParamSpec[]; } export interface WABDiscoverResult { wab_version: string; protocol?: string; name: string; actions: WABDiscoveryAction[]; transport?: string[]; timestamp?: string; error?: string; } export interface WABExecuteResult { success: boolean; error?: string; action?: string; status?: number; data?: unknown; [key: string]: unknown; } export type WABEventName = 'ready' | 'refresh' | 'execute' | 'action:before' | 'action:after' | string; export interface WABInstance { name: string; serverUrl: string; discover(): Promise; execute(actionName: string, params?: WABActionParams): Promise; getActions(): string[]; getAuditLog(): unknown[]; on(event: WABEventName, fn: (data?: unknown) => void): WABInstance; } export interface WABStatic { version: string; init(config?: WABInitConfig): WABInstance; connect(serverUrl: string): WABInstance; discover(): Promise; execute(actionName: string, params?: WABActionParams): Promise; _instance: WABInstance | null; } declare global { interface Window { WAB: WABStatic; __wab_protocol?: { version: string; protocol: string; name: string; actions: WABDiscoveryAction[]; transport: string[]; ready: boolean; discover(): Promise; execute(name: string, params?: WABActionParams): Promise; }; WABConsent?: { showBanner: (options: Record) => void; hasConsent: () => boolean; clear: () => void; }; WABSchema?: { scanJsonLd: () => unknown[]; suggestActions: (products: unknown[]) => unknown[]; mergeWithManual: (manual: WABActionsMap, suggestions: unknown[]) => WABInitConfig; }; } } export {};