From 5846c299ce5f6777c96e66de69d5f99c192127ed Mon Sep 17 00:00:00 2001 From: esdrasrenan Date: Sat, 6 Dec 2025 23:00:16 -0300 Subject: [PATCH] Fix Convex validator to accept null for optional string fields MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Rust serializes Option::None as null, not undefined. Updated reportUsbPolicyStatus mutation to accept both null and undefined for error and currentPolicy fields. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- convex/usbPolicy.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/convex/usbPolicy.ts b/convex/usbPolicy.ts index 8bfefb8..e14d9b0 100644 --- a/convex/usbPolicy.ts +++ b/convex/usbPolicy.ts @@ -70,10 +70,14 @@ export const reportUsbPolicyStatus = mutation({ args: { machineToken: v.string(), status: v.string(), - error: v.optional(v.string()), - currentPolicy: v.optional(v.string()), + // Rust envia null para Option::None, entao precisamos aceitar null tambem + error: v.optional(v.union(v.string(), v.null())), + currentPolicy: v.optional(v.union(v.string(), v.null())), }, handler: async (ctx, args) => { + // Converte null para undefined para uso interno + const errorValue = args.error ?? undefined + const currentPolicyValue = args.currentPolicy ?? undefined const tokenHash = hashToken(args.machineToken) const tokenRecord = await ctx.db @@ -102,7 +106,7 @@ export const reportUsbPolicyStatus = mutation({ await ctx.db.patch(machine._id, { usbPolicyStatus: args.status, - usbPolicyError: args.error, + usbPolicyError: errorValue, usbPolicyReportedAt: now, updatedAt: now, }) @@ -116,7 +120,7 @@ export const reportUsbPolicyStatus = mutation({ if (latestEvent && latestEvent.status === "PENDING") { await ctx.db.patch(latestEvent._id, { status: args.status, - error: args.error, + error: errorValue, appliedAt: args.status === "APPLIED" ? now : undefined, }) }