From ccfb9824c022d9995093b2b08de70afeea2cb5c3 Mon Sep 17 00:00:00 2001 From: Dominic Bosco Date: Tue, 24 Feb 2026 11:01:25 -0500 Subject: [PATCH 1/2] Fix type errors for Node 24 compatibility --- .github/actions/setup/action.yaml | 2 +- packages/did/src/did-resolvers/get-did-resolver.ts | 5 ++++- packages/did/src/did-resolvers/web-did-resolver.test.ts | 8 ++++++-- packages/did/src/did-resolvers/web-did-resolver.ts | 8 ++++---- packages/did/src/types.ts | 5 +++++ .../api-utils/src/middleware/signed-payload-validator.ts | 8 ++++++-- 6 files changed, 26 insertions(+), 10 deletions(-) diff --git a/.github/actions/setup/action.yaml b/.github/actions/setup/action.yaml index 8a501e9..49d0336 100644 --- a/.github/actions/setup/action.yaml +++ b/.github/actions/setup/action.yaml @@ -8,7 +8,7 @@ runs: - uses: actions/setup-node@v4 with: - node-version: "22" + node-version: "24" cache: "pnpm" - run: pnpm install --frozen-lockfile diff --git a/packages/did/src/did-resolvers/get-did-resolver.ts b/packages/did/src/did-resolvers/get-did-resolver.ts index 2a6f631..bdda664 100644 --- a/packages/did/src/did-resolvers/get-did-resolver.ts +++ b/packages/did/src/did-resolvers/get-did-resolver.ts @@ -31,7 +31,10 @@ export function getDidResolver({ }: GetDidResolverOptions = {}): DidResolver { const keyResolver = getKeyDidResolver() const webResolver = getWebDidResolver(webOptions) - const jwksResolver = getJwksDidResolver(webOptions) + const jwksResolver = getJwksDidResolver({ + ...webOptions, + fetch: webOptions.fetch as typeof globalThis.fetch, + }) const pkhResolver = getPkhDidResolver() const didResolver = new DidResolver( diff --git a/packages/did/src/did-resolvers/web-did-resolver.test.ts b/packages/did/src/did-resolvers/web-did-resolver.test.ts index ce1af9d..a124a87 100644 --- a/packages/did/src/did-resolvers/web-did-resolver.test.ts +++ b/packages/did/src/did-resolvers/web-did-resolver.test.ts @@ -1,6 +1,6 @@ import type { ParsedDID } from "did-resolver" -import { beforeEach, describe, expect, it, vi } from "vitest" +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest" import { getResolver } from "./web-did-resolver" @@ -14,7 +14,11 @@ describe("web-did-resolver", () => { beforeEach(() => { mockFetch.mockReset() - global.fetch = mockFetch + vi.stubGlobal("fetch", mockFetch) + }) + + afterEach(() => { + vi.unstubAllGlobals() }) describe("getResolver", () => { diff --git a/packages/did/src/did-resolvers/web-did-resolver.ts b/packages/did/src/did-resolvers/web-did-resolver.ts index dddbd32..aeda5e9 100644 --- a/packages/did/src/did-resolvers/web-did-resolver.ts +++ b/packages/did/src/did-resolvers/web-did-resolver.ts @@ -16,6 +16,8 @@ import type { ParsedDID, } from "did-resolver" +import type { FetchLike } from "../types" + import { isDidDocument, isDidDocumentForDid, @@ -23,8 +25,6 @@ import { } from "../did-document" import { isDidWebUri } from "../methods/did-web" -type Fetch = typeof globalThis.fetch - export interface DidWebResolverOptions { /** * The path to the did.json file. @@ -37,7 +37,7 @@ export interface DidWebResolverOptions { * * @default globalThis.fetch */ - fetch?: Fetch + fetch?: FetchLike /** * The hosts that are allowed to be used via `http`. All other hosts will * require `https`. @@ -58,7 +58,7 @@ const DEFAULT_DOC_PATH = "/.well-known/did.json" */ async function fetchDidDocumentAtUrl( url: string | URL, - { fetch = globalThis.fetch }: { fetch?: Fetch } = {}, + { fetch = globalThis.fetch }: { fetch?: FetchLike } = {}, ): Promise { const res = await fetch(url, { mode: "cors" }) diff --git a/packages/did/src/types.ts b/packages/did/src/types.ts index 69ff5da..bd27551 100644 --- a/packages/did/src/types.ts +++ b/packages/did/src/types.ts @@ -1,6 +1,11 @@ import type { DidDocument } from "./did-document" import type { DidUri } from "./did-uri" +export type FetchLike = ( + input: string | URL | Request, + init?: RequestInit, +) => Promise + export interface DidUriWithDocument { did: T didDocument: DidDocument diff --git a/tools/api-utils/src/middleware/signed-payload-validator.ts b/tools/api-utils/src/middleware/signed-payload-validator.ts index 82588a1..6dda1a2 100644 --- a/tools/api-utils/src/middleware/signed-payload-validator.ts +++ b/tools/api-utils/src/middleware/signed-payload-validator.ts @@ -1,4 +1,4 @@ -import type { ValidationTargets } from "hono" +import type { Env, MiddlewareHandler, ValidationTargets } from "hono" import { isDidUri, type DidUri, type Resolvable } from "@agentcommercekit/did" import { isJwtString, type JwtString } from "@agentcommercekit/jwt" @@ -38,7 +38,11 @@ const signedPayloadSchema = v.object({ export const signedPayloadValidator = ( target: keyof ValidationTargets, schema: v.GenericSchema, -) => +): MiddlewareHandler< + Env, + string, + { out: { json: ValidatedSignedPayload } } +> => validator(target, async (value, c): Promise> => { const didResolver = c.get("resolver") as Resolvable | undefined From 7019a276f21f326d8fc06841c8c953263b86c938 Mon Sep 17 00:00:00 2001 From: Dominic Bosco Date: Tue, 24 Feb 2026 11:10:46 -0500 Subject: [PATCH 2/2] fix env type --- .../src/middleware/signed-payload-validator.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/tools/api-utils/src/middleware/signed-payload-validator.ts b/tools/api-utils/src/middleware/signed-payload-validator.ts index 6dda1a2..f975282 100644 --- a/tools/api-utils/src/middleware/signed-payload-validator.ts +++ b/tools/api-utils/src/middleware/signed-payload-validator.ts @@ -1,4 +1,4 @@ -import type { Env, MiddlewareHandler, ValidationTargets } from "hono" +import type { MiddlewareHandler, ValidationTargets } from "hono" import { isDidUri, type DidUri, type Resolvable } from "@agentcommercekit/did" import { isJwtString, type JwtString } from "@agentcommercekit/jwt" @@ -8,6 +8,12 @@ import * as v from "valibot" import { validatePayload } from "../validate-payload" +interface SignedPayloadEnv { + Variables: { + resolver: Resolvable + } +} + interface ValidatedSignedPayload { issuer: DidUri body: T @@ -39,12 +45,12 @@ export const signedPayloadValidator = ( target: keyof ValidationTargets, schema: v.GenericSchema, ): MiddlewareHandler< - Env, + SignedPayloadEnv, string, { out: { json: ValidatedSignedPayload } } > => validator(target, async (value, c): Promise> => { - const didResolver = c.get("resolver") as Resolvable | undefined + const didResolver = c.get("resolver") try { const data = v.parse(signedPayloadSchema, value)