From fe97a2b850a579157b432fe6fb5f639cd0e312ca Mon Sep 17 00:00:00 2001 From: Joey Eamigh <55670930+JoeyEamigh@users.noreply.github.com> Date: Fri, 19 Sep 2025 20:25:38 -0400 Subject: [PATCH] fix: allow top-level unions to be validated properly --- src/index.ts | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/src/index.ts b/src/index.ts index 566a6a4..04706f9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -206,22 +206,27 @@ JWTOption) => { const key = typeof secret === 'string' ? new TextEncoder().encode(secret) : secret + const jwtStandardClaims = t.Object({ + iss: t.Optional(t.String()), + sub: t.Optional(t.String()), + aud: t.Optional( + t.Union([t.String(), t.Array(t.String())]) + ), + jti: t.Optional(t.String()), + nbf: t.Optional(t.Number()), + exp: t.Optional(t.Number()), + iat: t.Optional(t.Number()) + }) + const validator = schema ? getSchemaValidator( - t.Intersect([ - schema, - t.Object({ - iss: t.Optional(t.String()), - sub: t.Optional(t.String()), - aud: t.Optional( - t.Union([t.String(), t.Array(t.String())]) - ), - jti: t.Optional(t.String()), - nbf: t.Optional(t.Number()), - exp: t.Optional(t.Number()), - iat: t.Optional(t.Number()) - }) - ]), + schema.anyOf + ? t.Union( + schema.anyOf.map((memberSchema: TSchema) => + t.Intersect([memberSchema, jwtStandardClaims]) + ) + ) + : t.Intersect([schema, jwtStandardClaims]), { modules: t.Module({}) }