feat(api): accept bounded Linux CUPS capture diagnostics
Some checks failed
CI / verify (push) Has been cancelled
CI / print-rust (push) Has been cancelled

This commit is contained in:
Admin 2026-09-26 22:55:56 +00:00
parent 15007a4893
commit e22fe58138

View File

@ -1,9 +1,10 @@
export const streamFormats = ['zpl', 'pdf', 'postscript', 'pjl', 'pcl', 'zip', 'unknown'] as const export const streamFormats = ['zpl', 'pdf', 'postscript', 'pjl', 'pcl', 'zip', 'unknown'] as const
export const failureKinds = ['capture', 'forward', 'parser'] as const export const failureKinds = ['capture', 'forward', 'parser'] as const
export const captureSources = ['raw-proxy', 'spool-folder', 'cups-original', 'cups-test'] as const
export type PrintTelemetry = { export type PrintTelemetry = {
id: string id: string
source: 'raw-proxy' source: (typeof captureSources)[number]
streamFormat: (typeof streamFormats)[number] streamFormat: (typeof streamFormats)[number]
byteCount: number byteCount: number
barcodeCount: number barcodeCount: number
@ -21,7 +22,7 @@ export function parsePrintTelemetry(payload: unknown): PrintTelemetry | null {
const allowed = ['id', 'source', 'streamFormat', 'byteCount', 'barcodeCount', 'forwarded', 'failureKind', 'appVersion', 'capturedAt'] const allowed = ['id', 'source', 'streamFormat', 'byteCount', 'barcodeCount', 'forwarded', 'failureKind', 'appVersion', 'capturedAt']
if (Object.keys(value).some((key) => !allowed.includes(key))) return null if (Object.keys(value).some((key) => !allowed.includes(key))) return null
if (typeof value.id !== 'string' || !uuid.test(value.id)) return null if (typeof value.id !== 'string' || !uuid.test(value.id)) return null
if (value.source !== 'raw-proxy') return null if (!captureSources.includes(value.source as PrintTelemetry['source'])) return null
if (!streamFormats.includes(value.streamFormat as PrintTelemetry['streamFormat'])) return null if (!streamFormats.includes(value.streamFormat as PrintTelemetry['streamFormat'])) return null
if (!Number.isSafeInteger(value.byteCount) || (value.byteCount as number) < 0) return null if (!Number.isSafeInteger(value.byteCount) || (value.byteCount as number) < 0) return null
if (!Number.isSafeInteger(value.barcodeCount) || (value.barcodeCount as number) < 0) return null if (!Number.isSafeInteger(value.barcodeCount) || (value.barcodeCount as number) < 0) return null