diff --git a/.changeset/preserve-log-source-fields.md b/.changeset/preserve-log-source-fields.md new file mode 100644 index 00000000..84b9ded9 --- /dev/null +++ b/.changeset/preserve-log-source-fields.md @@ -0,0 +1,5 @@ +--- +"@repo/mcp-common": patch +--- + +Preserve Workers log source fields when normalizing log payloads. diff --git a/packages/mcp-common/src/types/workers-logs.types.spec.ts b/packages/mcp-common/src/types/workers-logs.types.spec.ts new file mode 100644 index 00000000..13c36f9e --- /dev/null +++ b/packages/mcp-common/src/types/workers-logs.types.spec.ts @@ -0,0 +1,28 @@ +import { describe, expect, it } from 'vitest' + +import { zReturnedTelemetryEvent } from './workers-logs.types' + +describe('zReturnedTelemetryEvent', () => { + it('preserves custom Workers log source fields', () => { + const event = zReturnedTelemetryEvent.parse({ + dataset: 'cloudflare-workers', + timestamp: 1775208144119, + source: { + event: 'sync_complete', + userId: 'abc-123', + synced: 10, + durationMs: 1307, + }, + $metadata: { + id: 'log-event-id', + }, + }) + + expect(event.source).toEqual({ + event: 'sync_complete', + userId: 'abc-123', + synced: 10, + durationMs: 1307, + }) + }) +}) diff --git a/packages/mcp-common/src/types/workers-logs.types.ts b/packages/mcp-common/src/types/workers-logs.types.ts index 55b9a1e3..7a5fade2 100644 --- a/packages/mcp-common/src/types/workers-logs.types.ts +++ b/packages/mcp-common/src/types/workers-logs.types.ts @@ -292,16 +292,18 @@ export const zCloudflareEvent = zCloudflareMiniEvent.extend({ cpuTimeMs: z.number().optional(), }) -const zSourceSchema = z.object({ - exception: z - .object({ - stack: z.string().optional(), - name: z.string().optional(), - message: z.string().optional(), - timestamp: z.number().optional(), - }) - .optional(), -}) +const zSourceSchema = z + .object({ + exception: z + .object({ + stack: z.string().optional(), + name: z.string().optional(), + message: z.string().optional(), + timestamp: z.number().optional(), + }) + .optional(), + }) + .passthrough() export const zReturnedTelemetryEvent = z.object({ dataset: z.string(),