import type { TypedMessageBatch } from "./bindings"; import type { JsonValue } from "./json"; // --- Core handler types --- /** A Workers fetch handler, parameterized by env type */ export type WorkerFetchHandler = ( request: Request, env: E, ctx: ExecutionContext, ) => Response | Promise; /** A Workers scheduled handler */ export type WorkerScheduledHandler = ( event: ScheduledEvent, env: E, ctx: ExecutionContext, ) => void | Promise; /** A Workers queue handler */ export type WorkerQueueHandler = ( batch: TypedMessageBatch, env: E, ctx: ExecutionContext, ) => void | Promise; /** A Workers email handler */ export type WorkerEmailHandler = ( message: EmailMessage, env: E, ctx: ExecutionContext, ) => void | Promise; /** Complete Workers module export */ export interface WorkerModule { fetch?: WorkerFetchHandler; scheduled?: WorkerScheduledHandler; queue?: WorkerQueueHandler; email?: WorkerEmailHandler; tail?: (events: TraceItem[], env: E, ctx: ExecutionContext) => void | Promise; trace?: (traces: TraceItem[], env: E, ctx: ExecutionContext) => void | Promise; } // --- Execution context --- export interface ExecutionContext { waitUntil(promise: Promise): void; passThroughOnException(): void; abort(reason?: any): void; } // --- Scheduled event --- export interface ScheduledEvent { scheduledTime: number; cron: string; noRetry(): void; } // --- Email message (minimal — full type in @cloudflare/workers-types) --- export interface EmailMessage { readonly from: string; readonly to: string; readonly headers: Headers; readonly raw: ReadableStream; readonly rawSize: number; setReject(reason: string): void; forward(rcptTo: string, headers?: Headers): Promise; } // --- Trace item (minimal) --- export interface TraceItem { readonly event: TraceEvent | null; readonly eventTimestamp: number | null; readonly logs: TraceLog[]; readonly exceptions: TraceException[]; readonly scriptName: string | null; readonly scriptVersion?: string; readonly dispatchNamespace?: string; readonly scriptTags?: string[]; readonly outcome: string; } export interface TraceEvent { [key: string]: unknown; } export interface TraceLog { timestamp: number; level: string; message: JsonValue; } export interface TraceException { timestamp: number; name: string; message: string; }