diff --git a/examples/local-did-host/package.json b/examples/local-did-host/package.json index ba576668..61632831 100644 --- a/examples/local-did-host/package.json +++ b/examples/local-did-host/package.json @@ -31,5 +31,8 @@ "@repo/api-utils": "workspace:*", "hono": "catalog:", "valibot": "catalog:" + }, + "devDependencies": { + "vite-tsconfig-paths": "6.1.1" } } diff --git a/examples/local-did-host/src/index.test.ts b/examples/local-did-host/src/index.test.ts new file mode 100644 index 00000000..0271e975 --- /dev/null +++ b/examples/local-did-host/src/index.test.ts @@ -0,0 +1,104 @@ +import { randomBytes } from "node:crypto" + +import { type DidDocument, getDidResolver } from "@agentcommercekit/did" +import { verifyJwt } from "@agentcommercekit/jwt" +import { beforeEach, describe, expect, it } from "vitest" + +import app from "./index" + +type Entity = "agent" | "controller" + +function randomHexPrivateKey(): `0x${string}` { + return `0x${randomBytes(32).toString("hex")}` +} + +async function getDidDocument(entity: Entity): Promise { + const res = await app.request(`/${entity}/.well-known/did.json`) + expect(res.status).toBe(200) + return res.json() +} + +async function signAs(entity: Entity): Promise { + const res = await app.request(`/${entity}/sign`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + subject: "did:web:subject.example.com", + payload: {}, + }), + }) + expect(res.status).toBe(200) + const body: { jwt: string } = await res.json() + return body.jwt +} + +describe("POST /:entity/sign", () => { + beforeEach(() => { + // Each identity needs its own distinct private key so that a bug which + // conflates the two entities is actually observable in the resulting + // JWT (same key material would make agent- and controller-signed JWTs + // indistinguishable). + process.env.HOSTNAME = "0.0.0.0" + process.env.PORT = "3458" + process.env.AGENT_PRIVATE_KEY = randomHexPrivateKey() + process.env.CONTROLLER_PRIVATE_KEY = randomHexPrivateKey() + }) + + it("issues a JWT from the agent identity when signing as agent", async () => { + const agentDidDocument = await getDidDocument("agent") + const controllerDidDocument = await getDidDocument("controller") + + const resolver = getDidResolver() + resolver.addToCache(agentDidDocument.id, agentDidDocument) + resolver.addToCache(controllerDidDocument.id, controllerDidDocument) + + const jwt = await signAs("agent") + const verified = await verifyJwt(jwt, { resolver }) + + expect(verified.payload.iss).toBe(agentDidDocument.id) + expect(verified.issuer).toBe(agentDidDocument.id) + }) + + it("issues a JWT from the controller identity when signing as controller", async () => { + const agentDidDocument = await getDidDocument("agent") + const controllerDidDocument = await getDidDocument("controller") + + // Sanity check: the two identities must actually be distinct, or this + // test can't tell agent-signed and controller-signed JWTs apart. + expect(controllerDidDocument.id).not.toBe(agentDidDocument.id) + + const resolver = getDidResolver() + resolver.addToCache(agentDidDocument.id, agentDidDocument) + resolver.addToCache(controllerDidDocument.id, controllerDidDocument) + + const jwt = await signAs("controller") + + // This is the core regression check: the JWT returned by + // POST /controller/sign must actually verify against the controller's + // key and carry the controller's DID as issuer, not the agent's. + const verified = await verifyJwt(jwt, { resolver }) + + expect(verified.payload.iss).toBe(controllerDidDocument.id) + expect(verified.issuer).toBe(controllerDidDocument.id) + + // Verifying against the agent's DID must fail: the signature was not + // produced by the agent's key, and the JWT's `iss` claim doesn't match + // the agent's DID either. + await expect( + verifyJwt(jwt, { resolver, issuer: agentDidDocument.id }), + ).rejects.toThrow("Expected issuer") + }) + + it("produces different signatures for agent and controller for the same payload", async () => { + const agentJwt = await signAs("agent") + const controllerJwt = await signAs("controller") + + // Compare the signature segment specifically, not the full JWT string, + // since the header and payload already differ (different `iss`) even + // if the signatures happened to collide. + const agentSignature = agentJwt.split(".")[2] + const controllerSignature = controllerJwt.split(".")[2] + + expect(agentSignature).not.toBe(controllerSignature) + }) +}) diff --git a/examples/local-did-host/src/index.ts b/examples/local-did-host/src/index.ts index 77e0ae6d..c7e00eff 100644 --- a/examples/local-did-host/src/index.ts +++ b/examples/local-did-host/src/index.ts @@ -50,7 +50,8 @@ app.post( }), ), async (c) => { - const { signer, did, alg } = c.get("identities").agent + const { entity } = c.req.valid("param") + const { signer, did, alg } = c.get("identities")[entity] const { subject, payload, audience, expiresIn } = c.req.valid("json") const jwt = await createJwt( @@ -60,12 +61,14 @@ app.post( aud: audience, }, { - alg, issuer: did, expiresIn, signer, canonicalize: true, }, + { + alg, + }, ) return c.json({ jwt }) diff --git a/examples/local-did-host/vitest.config.ts b/examples/local-did-host/vitest.config.ts index 7972f77b..5cef97d7 100644 --- a/examples/local-did-host/vitest.config.ts +++ b/examples/local-did-host/vitest.config.ts @@ -1,6 +1,8 @@ import { defineConfig } from "vitest/config" +import tsconfigPaths from "vite-tsconfig-paths" export default defineConfig({ + plugins: [tsconfigPaths()], test: { passWithNoTests: true, watch: false, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5170fb6e..1a2ce614 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -225,7 +225,7 @@ importers: devDependencies: mintlify: specifier: 4.2.824 - version: 4.2.824(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(typescript@7.0.2)(yauzl@2.10.0) + version: 4.2.824(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(typescript@7.0.2)(yauzl@2.10.0) examples/issuer: dependencies: @@ -287,6 +287,10 @@ importers: valibot: specifier: 'catalog:' version: 1.4.2(typescript@7.0.2) + devDependencies: + vite-tsconfig-paths: + specifier: 6.1.1 + version: 6.1.1(typescript@7.0.2)(vite@7.3.6(@types/node@26.3.0)(jiti@2.7.0)(tsx@4.23.12)(yaml@2.9.0)) examples/verifier: dependencies: @@ -5107,10 +5111,6 @@ packages: longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - lowercase-keys@3.0.0: resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -5814,10 +5814,10 @@ packages: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true - react-dom@18.3.1: - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + react-dom@19.2.8: + resolution: {integrity: sha512-rVprimfGBG3DR+Tq0IQG2DT5PxKth1WIGDmj5yPmlzr4YBe7uyE+Du4oVqTDXZSHGGGXRtTJEGSSePyQCMBglQ==} peerDependencies: - react: ^18.3.1 + react: ^19.2.8 react-reconciler@0.32.0: resolution: {integrity: sha512-2NPMOzgTlG0ZWdIf3qG+dcbLSoAc/uLfOwckc3ofy5sSK0pLJqnQLpUFxvGcN2rlXSjnVtGeeFLNimCQEj5gOQ==} @@ -6046,12 +6046,12 @@ packages: resolution: {integrity: sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==} engines: {node: '>=11.0.0'} - scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} - scheduler@0.26.0: resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} + scheduler@0.27.0: + resolution: {integrity: sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==} + semver@7.8.5: resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==} engines: {node: '>=10'} @@ -7044,24 +7044,24 @@ snapshots: '@babel/runtime@7.29.7': {} - '@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)': + '@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)': dependencies: '@babel/runtime': 7.29.7 - '@base-ui/utils': 0.3.2(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3) - '@floating-ui/react-dom': 2.1.9(react-dom@18.3.1(react@19.2.3))(react@19.2.3) + '@base-ui/utils': 0.3.2(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3) + '@floating-ui/react-dom': 2.1.9(react-dom@19.2.8(react@19.2.3))(react@19.2.3) '@floating-ui/utils': 0.2.12 react: 19.2.3 - react-dom: 18.3.1(react@19.2.3) + react-dom: 19.2.8(react@19.2.3) use-sync-external-store: 1.6.0(react@19.2.3) optionalDependencies: '@types/react': 19.2.17 - '@base-ui/utils@0.3.2(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)': + '@base-ui/utils@0.3.2(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)': dependencies: '@babel/runtime': 7.29.7 '@floating-ui/utils': 0.2.12 react: 19.2.3 - react-dom: 18.3.1(react@19.2.3) + react-dom: 19.2.8(react@19.2.3) reselect: 5.3.0 use-sync-external-store: 1.6.0(react@19.2.3) optionalDependencies: @@ -7392,11 +7392,11 @@ snapshots: '@floating-ui/core': 1.8.0 '@floating-ui/utils': 0.2.12 - '@floating-ui/react-dom@2.1.9(react-dom@18.3.1(react@19.2.3))(react@19.2.3)': + '@floating-ui/react-dom@2.1.9(react-dom@19.2.8(react@19.2.3))(react@19.2.3)': dependencies: '@floating-ui/dom': 1.8.0 react: 19.2.3 - react-dom: 18.3.1(react@19.2.3) + react-dom: 19.2.8(react@19.2.3) '@floating-ui/utils@0.2.12': {} @@ -7900,15 +7900,15 @@ snapshots: '@types/react': 19.2.17 react: 19.2.3 - '@mintlify/cli@4.0.1427(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(typescript@7.0.2)(yauzl@2.10.0)': + '@mintlify/cli@4.0.1427(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(typescript@7.0.2)(yauzl@2.10.0)': dependencies: '@inquirer/prompts': 7.9.0(@types/node@26.3.0) - '@mintlify/common': 1.0.1107(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@7.0.2) - '@mintlify/link-rot': 3.0.1309(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@7.0.2)(yauzl@2.10.0) - '@mintlify/models': 0.0.350 - '@mintlify/prebuild': 1.0.1261(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@7.0.2)(yauzl@2.10.0) - '@mintlify/previewing': 4.0.1333(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(typescript@7.0.2)(yauzl@2.10.0) - '@mintlify/validation': 0.1.839(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@7.0.2) + '@mintlify/common': 1.0.1107(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(typescript@7.0.2) + '@mintlify/link-rot': 3.0.1309(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(typescript@7.0.2)(yauzl@2.10.0) + '@mintlify/models': 0.0.350(debug@4.4.3) + '@mintlify/prebuild': 1.0.1261(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(typescript@7.0.2)(yauzl@2.10.0) + '@mintlify/previewing': 4.0.1333(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(typescript@7.0.2)(yauzl@2.10.0) + '@mintlify/validation': 0.1.839(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(typescript@7.0.2) adm-zip: 0.6.0 chalk: 5.2.0 color: 4.2.3 @@ -7953,13 +7953,13 @@ snapshots: - utf-8-validate - yauzl - '@mintlify/common@1.0.1107(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@7.0.2)': + '@mintlify/common@1.0.1107(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(typescript@7.0.2)': dependencies: '@asyncapi/parser': 3.4.0 - '@mintlify/mdx': 4.0.2(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@7.0.2) - '@mintlify/models': 0.0.350 + '@mintlify/mdx': 4.0.2(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(typescript@7.0.2) + '@mintlify/models': 0.0.350(debug@4.4.3) '@mintlify/openapi-parser': 0.0.8 - '@mintlify/validation': 0.1.839(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@7.0.2) + '@mintlify/validation': 0.1.839(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(typescript@7.0.2) '@sindresorhus/slugify': 2.2.0 '@types/mdast': 4.0.4 acorn: 8.11.2 @@ -8011,14 +8011,14 @@ snapshots: - ts-node - typescript - '@mintlify/link-rot@3.0.1309(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@7.0.2)(yauzl@2.10.0)': + '@mintlify/link-rot@3.0.1309(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(typescript@7.0.2)(yauzl@2.10.0)': dependencies: - '@mintlify/common': 1.0.1107(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@7.0.2) - '@mintlify/models': 0.0.350 - '@mintlify/prebuild': 1.0.1261(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@7.0.2)(yauzl@2.10.0) - '@mintlify/previewing': 4.0.1333(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(typescript@7.0.2)(yauzl@2.10.0) - '@mintlify/scraping': 4.0.975(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@7.0.2)(yauzl@2.10.0) - '@mintlify/validation': 0.1.839(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@7.0.2) + '@mintlify/common': 1.0.1107(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(typescript@7.0.2) + '@mintlify/models': 0.0.350(debug@4.4.3) + '@mintlify/prebuild': 1.0.1261(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(typescript@7.0.2)(yauzl@2.10.0) + '@mintlify/previewing': 4.0.1333(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(typescript@7.0.2)(yauzl@2.10.0) + '@mintlify/scraping': 4.0.975(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(typescript@7.0.2)(yauzl@2.10.0) + '@mintlify/validation': 0.1.839(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(typescript@7.0.2) fs-extra: 11.1.0 unist-util-visit: 4.1.2 transitivePeerDependencies: @@ -8038,9 +8038,9 @@ snapshots: - utf-8-validate - yauzl - '@mintlify/mdx@4.0.2(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@7.0.2)': + '@mintlify/mdx@4.0.2(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(typescript@7.0.2)': dependencies: - '@base-ui/react': 1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3) + '@base-ui/react': 1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3) '@shikijs/transformers': 3.23.0 '@shikijs/twoslash': 3.23.0(typescript@7.0.2) arktype: 2.2.3 @@ -8049,9 +8049,9 @@ snapshots: mdast-util-gfm: 3.1.0 mdast-util-mdx-jsx: 3.2.0 mdast-util-to-hast: 13.2.1 - next-mdx-remote-client: 2.1.12(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(unified@11.0.5) + next-mdx-remote-client: 2.1.12(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(unified@11.0.5) react: 19.2.3 - react-dom: 18.3.1(react@19.2.3) + react-dom: 19.2.8(react@19.2.3) rehype-katex: 7.0.1 remark-gfm: 4.0.1 remark-math: 6.0.0 @@ -8065,9 +8065,9 @@ snapshots: - supports-color - typescript - '@mintlify/models@0.0.350': + '@mintlify/models@0.0.350(debug@4.4.3)': dependencies: - axios: 1.18.0 + axios: 1.18.0(debug@4.4.3) openapi-types: 12.1.3 transitivePeerDependencies: - debug @@ -8082,11 +8082,11 @@ snapshots: leven: 4.1.0 yaml: 2.9.0 - '@mintlify/prebuild@1.0.1261(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@7.0.2)(yauzl@2.10.0)': + '@mintlify/prebuild@1.0.1261(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(typescript@7.0.2)(yauzl@2.10.0)': dependencies: - '@mintlify/common': 1.0.1107(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@7.0.2) - '@mintlify/scraping': 4.0.975(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@7.0.2)(yauzl@2.10.0) - '@mintlify/validation': 0.1.839(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@7.0.2) + '@mintlify/common': 1.0.1107(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(typescript@7.0.2) + '@mintlify/scraping': 4.0.975(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(typescript@7.0.2)(yauzl@2.10.0) + '@mintlify/validation': 0.1.839(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(typescript@7.0.2) chalk: 5.3.0 favicons: 7.2.0(@types/node@26.3.0) fflate: 0.8.3 @@ -8112,11 +8112,11 @@ snapshots: - utf-8-validate - yauzl - '@mintlify/previewing@4.0.1333(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(typescript@7.0.2)(yauzl@2.10.0)': + '@mintlify/previewing@4.0.1333(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(typescript@7.0.2)(yauzl@2.10.0)': dependencies: - '@mintlify/common': 1.0.1107(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@7.0.2) - '@mintlify/prebuild': 1.0.1261(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@7.0.2)(yauzl@2.10.0) - '@mintlify/validation': 0.1.839(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@7.0.2) + '@mintlify/common': 1.0.1107(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(typescript@7.0.2) + '@mintlify/prebuild': 1.0.1261(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(typescript@7.0.2)(yauzl@2.10.0) + '@mintlify/validation': 0.1.839(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(typescript@7.0.2) adm-zip: 0.6.0 better-opn: 3.0.2 chalk: 5.2.0 @@ -8148,9 +8148,9 @@ snapshots: - utf-8-validate - yauzl - '@mintlify/scraping@4.0.975(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@7.0.2)(yauzl@2.10.0)': + '@mintlify/scraping@4.0.975(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(typescript@7.0.2)(yauzl@2.10.0)': dependencies: - '@mintlify/common': 1.0.1107(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@7.0.2) + '@mintlify/common': 1.0.1107(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(typescript@7.0.2) fast-xml-parser: 5.7.3 fs-extra: 11.1.1 graphql: 16.11.0 @@ -8183,10 +8183,10 @@ snapshots: - utf-8-validate - yauzl - '@mintlify/validation@0.1.839(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@7.0.2)': + '@mintlify/validation@0.1.839(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(typescript@7.0.2)': dependencies: - '@mintlify/mdx': 4.0.2(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(typescript@7.0.2) - '@mintlify/models': 0.0.350 + '@mintlify/mdx': 4.0.2(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(typescript@7.0.2) + '@mintlify/models': 0.0.350(debug@4.4.3) fractional-indexing: 3.2.0 js-yaml: 4.3.1 lcm: 0.0.3 @@ -9850,9 +9850,9 @@ snapshots: avsc@5.7.9: {} - axios@1.18.0: + axios@1.18.0(debug@4.4.3): dependencies: - follow-redirects: 1.16.0 + follow-redirects: 1.16.0(debug@4.4.3) form-data: 4.0.6 https-proxy-agent: 5.0.1 proxy-from-env: 2.1.0 @@ -10750,7 +10750,9 @@ snapshots: transitivePeerDependencies: - supports-color - follow-redirects@1.16.0: {} + follow-redirects@1.16.0(debug@4.4.3): + optionalDependencies: + debug: 4.4.3 for-each@0.3.5: dependencies: @@ -11553,10 +11555,6 @@ snapshots: longest-streak@3.1.0: {} - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - lowercase-keys@3.0.0: {} magic-string@0.30.21: @@ -12131,9 +12129,9 @@ snapshots: dependencies: minipass: 7.1.3 - mintlify@4.2.824(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(typescript@7.0.2)(yauzl@2.10.0): + mintlify@4.2.824(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(typescript@7.0.2)(yauzl@2.10.0): dependencies: - '@mintlify/cli': 4.0.1427(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(typescript@7.0.2)(yauzl@2.10.0) + '@mintlify/cli': 4.0.1427(@base-ui/react@1.7.0(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3))(@types/node@26.3.0)(@types/react@19.2.17)(debug@4.4.3)(react-dom@19.2.8(react@19.2.3))(typescript@7.0.2)(yauzl@2.10.0) transitivePeerDependencies: - '@base-ui/react' - '@types/node' @@ -12194,14 +12192,14 @@ snapshots: neotraverse@0.6.18: {} - next-mdx-remote-client@2.1.12(@types/react@19.2.17)(react-dom@18.3.1(react@19.2.3))(react@19.2.3)(unified@11.0.5): + next-mdx-remote-client@2.1.12(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.3))(react@19.2.3)(unified@11.0.5): dependencies: '@babel/code-frame': 7.29.7 '@mdx-js/mdx': 3.1.1 '@mdx-js/react': 3.1.1(@types/react@19.2.17)(react@19.2.3) '@types/mdx': 2.0.14 react: 19.2.3 - react-dom: 18.3.1(react@19.2.3) + react-dom: 19.2.8(react@19.2.3) remark-mdx-remove-esm: 1.3.3(unified@11.0.5) serialize-error: 13.0.1 vfile: 6.0.3 @@ -12658,11 +12656,10 @@ snapshots: strip-json-comments: 2.0.1 optional: true - react-dom@18.3.1(react@19.2.3): + react-dom@19.2.8(react@19.2.3): dependencies: - loose-envify: 1.4.0 react: 19.2.3 - scheduler: 0.23.2 + scheduler: 0.27.0 react-reconciler@0.32.0(react@19.2.3): dependencies: @@ -13053,12 +13050,10 @@ snapshots: sax@1.6.1: {} - scheduler@0.23.2: - dependencies: - loose-envify: 1.4.0 - scheduler@0.26.0: {} + scheduler@0.27.0: {} + semver@7.8.5: {} send@0.19.2: