From 323f2d685e0a8277c8ce12907cefb5854cd9df97 Mon Sep 17 00:00:00 2001 From: Matt Venables Date: Wed, 29 Oct 2025 03:54:40 -0400 Subject: [PATCH 1/6] Add AGENTS.md, source it from CLAUDE.md --- .cursor/rules/project-overview.mdc | 2 +- AGENTS.md | 96 +++++++++++++++++++++++++++++ CLAUDE.md | 99 +----------------------------- 3 files changed, 98 insertions(+), 99 deletions(-) create mode 100644 AGENTS.md diff --git a/.cursor/rules/project-overview.mdc b/.cursor/rules/project-overview.mdc index 6100270..b7e6491 120000 --- a/.cursor/rules/project-overview.mdc +++ b/.cursor/rules/project-overview.mdc @@ -1 +1 @@ -../../CLAUDE.md \ No newline at end of file +../../AGENTS.md \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..d636b41 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,96 @@ +# Agent Commerce Kit (ACK) + +## Project Overview + +**Agent Commerce Kit (ACK)** is an open-source TypeScript framework enabling AI agents to participate in commerce through two core protocols: + +1. **ACK-ID**: Verifiable AI identities with compliance controls using W3C DIDs and Verifiable Credentials +2. **ACK-Pay**: Secure, automated payment processing with auditable receipt verification + +The project is structured as a **pnpm monorepo** with Turbo build orchestration, requiring Node.js 22+ and pnpm 10+. + +## Essential Commands + +### Setup & Development + +```bash +pnpm run setup # Initialize repository (install deps, build packages) +pnpm run build # Build all packages +pnpm run dev:examples # Run all example services +pnpm run dev:docs # Run documentation site locally +``` + +### Quality Assurance + +```bash +pnpm run check # Run comprehensive checks (format, types, lint, test) +pnpm run test # Run all tests +pnpm run lint # Run ESLint +pnpm run check:types # TypeScript type checking +pnpm run format # Format code with Prettier +``` + +### Demos + +```bash +pnpm demo:identity # ACK-ID protocol demonstration +pnpm demo:identity-a2a # ACK-ID with Google A2A protocol +pnpm demo:payments # ACK-Pay protocol demonstration +pnpm demo:e2e # End-to-end demo (ACK-ID + ACK-Pay) +pnpm demo:skyfire-kya # Skyfire KYA token demonstration +``` + +### Testing + +- Run individual package tests: `pnpm --filter ./packages/[package-name] test` +- All tests use **Vitest** framework and use assertive testing (`it('requires...')`, not `it('should require...')`) +- Test configuration: individual `vitest.config.ts` files per package + +## Architecture + +### Core Packages (`/packages/` - Published to NPM) + +- **`agentcommercekit/`** - Main SDK package (exports everything) +- **`ack-id/`** - Identity protocol implementation +- **`ack-pay/`** - Payment protocol implementation +- **`did/`** - Decentralized Identifier utilities +- **`jwt/`** - JWT creation/verification utilities +- **`keys/`** - Cryptographic key management (Ed25519, secp256k1, secp256r1) +- **`vc/`** - Verifiable Credentials utilities + +### Demonstrations (`/demos/`) + +Interactive demos showcasing protocol functionality - each can be run independently. + +### Example Services (`/examples/`) + +Standalone service implementations including credential issuer, verifier, and local DID host. + +### Build System + +- **Turbo**: Orchestrates builds across packages with dependency graph +- **tsdown**: TypeScript compiler/bundler +- **Output**: `dist/` directories with ESM and TypeScript definitions +- **Dependency Management**: Packages have proper dependency relationships + +### Key Technical Patterns + +- **ESM-only**: All packages use `"type": "module"` +- **Multi-curve Cryptography**: Ed25519, secp256k1, secp256r1 support +- **Dual Validation**: Both Valibot (primary) and Zod (peer dependency) support +- **Standards Compliance**: W3C DIDs and Verifiable Credentials +- **Modular Design**: Protocols can be used independently + +### Development Workflow + +1. Changes to core packages require rebuilding: `pnpm run build` +2. Use `pnpm --filter ./packages/[name]` to work on specific packages +3. Run comprehensive checks before commits: `pnpm run check` +4. Demos and examples depend on built packages + +### Key Dependencies + +- **@noble/curves**: Elliptic curve cryptography +- **multiformats**: Multiformat encoding/decoding +- **valibot**: Runtime validation (primary choice) +- **zod**: Alternative validation (peer dependency) diff --git a/CLAUDE.md b/CLAUDE.md index d5fc8c8..43c994c 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,98 +1 @@ -# CLAUDE.md - -This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. - -## Project Overview - -**Agent Commerce Kit (ACK)** is an open-source TypeScript framework enabling AI agents to participate in commerce through two core protocols: - -1. **ACK-ID**: Verifiable AI identities with compliance controls using W3C DIDs and Verifiable Credentials -2. **ACK-Pay**: Secure, automated payment processing with auditable receipt verification - -The project is structured as a **pnpm monorepo** with Turbo build orchestration, requiring Node.js 22+ and pnpm 10+. - -## Essential Commands - -### Setup & Development - -```bash -pnpm run setup # Initialize repository (install deps, build packages) -pnpm run build # Build all packages -pnpm run dev:examples # Run all example services -pnpm run dev:docs # Run documentation site locally -``` - -### Quality Assurance - -```bash -pnpm run check # Run comprehensive checks (format, types, lint, test) -pnpm run test # Run all tests -pnpm run lint # Run ESLint -pnpm run check:types # TypeScript type checking -pnpm run format # Format code with Prettier -``` - -### Demos - -```bash -pnpm demo:identity # ACK-ID protocol demonstration -pnpm demo:identity-a2a # ACK-ID with Google A2A protocol -pnpm demo:payments # ACK-Pay protocol demonstration -pnpm demo:e2e # End-to-end demo (ACK-ID + ACK-Pay) -pnpm demo:skyfire-kya # Skyfire KYA token demonstration -``` - -### Testing - -- Run individual package tests: `pnpm --filter ./packages/[package-name] test` -- All tests use **Vitest** framework and use assertive testing (`it('requires...')`, not `it('should require...')`) -- Test configuration: individual `vitest.config.ts` files per package - -## Architecture - -### Core Packages (`/packages/` - Published to NPM) - -- **`agentcommercekit/`** - Main SDK package (exports everything) -- **`ack-id/`** - Identity protocol implementation -- **`ack-pay/`** - Payment protocol implementation -- **`did/`** - Decentralized Identifier utilities -- **`jwt/`** - JWT creation/verification utilities -- **`keys/`** - Cryptographic key management (Ed25519, secp256k1, secp256r1) -- **`vc/`** - Verifiable Credentials utilities - -### Demonstrations (`/demos/`) - -Interactive demos showcasing protocol functionality - each can be run independently. - -### Example Services (`/examples/`) - -Standalone service implementations including credential issuer, verifier, and local DID host. - -### Build System - -- **Turbo**: Orchestrates builds across packages with dependency graph -- **tsdown**: TypeScript compiler/bundler -- **Output**: `dist/` directories with ESM and TypeScript definitions -- **Dependency Management**: Packages have proper dependency relationships - -### Key Technical Patterns - -- **ESM-only**: All packages use `"type": "module"` -- **Multi-curve Cryptography**: Ed25519, secp256k1, secp256r1 support -- **Dual Validation**: Both Valibot (primary) and Zod (peer dependency) support -- **Standards Compliance**: W3C DIDs and Verifiable Credentials -- **Modular Design**: Protocols can be used independently - -### Development Workflow - -1. Changes to core packages require rebuilding: `pnpm run build` -2. Use `pnpm --filter ./packages/[name]` to work on specific packages -3. Run comprehensive checks before commits: `pnpm run check` -4. Demos and examples depend on built packages - -### Key Dependencies - -- **@noble/curves**: Elliptic curve cryptography -- **multiformats**: Multiformat encoding/decoding -- **valibot**: Runtime validation (primary choice) -- **zod**: Alternative validation (peer dependency) +@AGENTS.md From 3801810832a5ff8b041d5fba499af26eba6e90b7 Mon Sep 17 00:00:00 2001 From: Matt Venables Date: Wed, 29 Oct 2025 04:30:41 -0400 Subject: [PATCH 2/6] Use exact package versioning --- .npmrc | 1 + demos/e2e/package.json | 12 +- demos/identity-a2a/package.json | 22 +- demos/identity/package.json | 28 +- demos/payments/package.json | 20 +- demos/skyfire-kya/package.json | 12 +- docs/package.json | 2 +- examples/issuer/package.json | 30 +- examples/local-did-host/package.json | 18 +- examples/verifier/package.json | 18 +- package.json | 12 +- packages/ack-id/package.json | 18 +- packages/ack-pay/package.json | 12 +- packages/agentcommercekit/package.json | 14 +- packages/caip/package.json | 14 +- packages/did/package.json | 24 +- packages/jwt/package.json | 14 +- packages/keys/package.json | 16 +- packages/vc/package.json | 16 +- pnpm-lock.yaml | 4600 ++++++++++++------------ tools/api-utils/package.json | 10 +- tools/cli-tools/package.json | 20 +- tools/eslint-config/package.json | 22 +- 23 files changed, 2421 insertions(+), 2534 deletions(-) create mode 100644 .npmrc diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..cffe8cd --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +save-exact=true diff --git a/demos/e2e/package.json b/demos/e2e/package.json index bc480e6..cafb831 100644 --- a/demos/e2e/package.json +++ b/demos/e2e/package.json @@ -27,15 +27,15 @@ "dependencies": { "@repo/cli-tools": "workspace:*", "agentcommercekit": "workspace:*", - "valibot": "^1.1.0", - "viem": "^2.29.4" + "valibot": "1.1.0", + "viem": "2.29.4" }, "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "eslint": "^9.27.0", - "tsx": "^4.19.4", - "typescript": "^5", - "vitest": "^3.2.4" + "eslint": "9.27.0", + "tsx": "4.19.4", + "typescript": "5.7.3", + "vitest": "3.2.4" } } diff --git a/demos/identity-a2a/package.json b/demos/identity-a2a/package.json index 06b8b1b..f3b32f2 100644 --- a/demos/identity-a2a/package.json +++ b/demos/identity-a2a/package.json @@ -24,23 +24,23 @@ "test": "vitest" }, "dependencies": { - "@a2a-js/sdk": "^0.2.2", + "@a2a-js/sdk": "0.2.2", "@repo/cli-tools": "workspace:*", "agentcommercekit": "workspace:*", - "express": "^4.21.2", - "jose": "^6.0.11", - "safe-stable-stringify": "^2.5.0", - "uuid": "^11.1.0", - "valibot": "^1.1.0" + "express": "4.21.2", + "jose": "6.0.11", + "safe-stable-stringify": "2.5.0", + "uuid": "11.1.0", + "valibot": "1.1.0" }, "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", "@types/express": "5.0.3", - "@types/node": "^22", - "eslint": "^9.27.0", - "tsx": "^4.19.4", - "typescript": "^5", - "vitest": "^3.2.4" + "@types/node": "22.18.13", + "eslint": "9.27.0", + "tsx": "4.19.4", + "typescript": "5.7.3", + "vitest": "3.2.4" } } diff --git a/demos/identity/package.json b/demos/identity/package.json index 4eafb2c..f0bd95a 100644 --- a/demos/identity/package.json +++ b/demos/identity/package.json @@ -26,26 +26,26 @@ "test": "vitest" }, "dependencies": { - "@ai-sdk/anthropic": "^1.2.11", - "@ai-sdk/openai": "^1.3.22", - "@ai-sdk/valibot": "^0.1.28", - "@hono/node-server": "^1.14.2", - "@hono/valibot-validator": "^0.5.2", + "@ai-sdk/anthropic": "1.2.11", + "@ai-sdk/openai": "1.3.22", + "@ai-sdk/valibot": "0.1.28", + "@hono/node-server": "1.14.2", + "@hono/valibot-validator": "0.5.2", "@repo/api-utils": "workspace:*", "@repo/cli-tools": "workspace:*", "agentcommercekit": "workspace:*", - "ai": "^4.3.16", - "hono": "^4.7.10", - "valibot": "^1.1.0" + "ai": "4.3.16", + "hono": "4.7.10", + "valibot": "1.1.0" }, "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "@types/node": "^22", - "dotenv-cli": "^8.0.0", - "eslint": "^9.27.0", - "tsx": "^4.19.4", - "typescript": "^5", - "vitest": "^3.2.4" + "@types/node": "22.18.13", + "dotenv-cli": "8.0.0", + "eslint": "9.27.0", + "tsx": "4.19.4", + "typescript": "5.7.3", + "vitest": "3.2.4" } } diff --git a/demos/payments/package.json b/demos/payments/package.json index 55340b7..c9b8a92 100644 --- a/demos/payments/package.json +++ b/demos/payments/package.json @@ -26,22 +26,22 @@ "test": "vitest" }, "dependencies": { - "@hono/node-server": "^1.14.2", + "@hono/node-server": "1.14.2", "@repo/api-utils": "workspace:*", "@repo/cli-tools": "workspace:*", "agentcommercekit": "workspace:*", - "hono": "^4.7.10", - "valibot": "^1.1.0", - "viem": "^2.29.4" + "hono": "4.7.10", + "valibot": "1.1.0", + "viem": "2.29.4" }, "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "@types/node": "^22", - "dotenv-cli": "^8.0.0", - "eslint": "^9.27.0", - "tsx": "^4.19.4", - "typescript": "^5", - "vitest": "^3.2.4" + "@types/node": "22.18.13", + "dotenv-cli": "8.0.0", + "eslint": "9.27.0", + "tsx": "4.19.4", + "typescript": "5.7.3", + "vitest": "3.2.4" } } diff --git a/demos/skyfire-kya/package.json b/demos/skyfire-kya/package.json index f0b98dd..55c2538 100644 --- a/demos/skyfire-kya/package.json +++ b/demos/skyfire-kya/package.json @@ -26,15 +26,15 @@ "dependencies": { "@repo/cli-tools": "workspace:*", "agentcommercekit": "workspace:*", - "jose": "^6.0.11", - "zod": "^3.25.0" + "jose": "6.0.11", + "zod": "3.25.4" }, "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "eslint": "^9.27.0", - "tsx": "^4.19.4", - "typescript": "^5", - "vitest": "^3.2.4" + "eslint": "9.27.0", + "tsx": "4.19.4", + "typescript": "5.7.3", + "vitest": "3.2.4" } } diff --git a/docs/package.json b/docs/package.json index 5052dc8..7a2e7b7 100644 --- a/docs/package.json +++ b/docs/package.json @@ -19,7 +19,7 @@ "docs": "mintlify dev" }, "devDependencies": { - "mintlify": "^4.0.538" + "mintlify": "4.0.538" }, "packageManager": "pnpm@10.11.0" } diff --git a/examples/issuer/package.json b/examples/issuer/package.json index d603d1d..eaf67c8 100644 --- a/examples/issuer/package.json +++ b/examples/issuer/package.json @@ -27,25 +27,25 @@ "test": "vitest" }, "dependencies": { - "@hono/node-server": "^1.14.2", + "@hono/node-server": "1.14.2", "@repo/api-utils": "workspace:*", "agentcommercekit": "workspace:*", - "better-sqlite3": "^11.10.0", - "bit-buffers": "^1.0.2", - "drizzle-orm": "^0.43.1", - "hono": "^4.7.10", - "valibot": "^1.1.0" + "better-sqlite3": "11.10.0", + "bit-buffers": "1.0.2", + "drizzle-orm": "0.43.1", + "hono": "4.7.10", + "valibot": "1.1.0" }, "devDependencies": { - "@repo/eslint-config": "workspace:^", + "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "@types/better-sqlite3": "^7.6.13", - "@types/node": "^22", - "dotenv-cli": "^8.0.0", - "drizzle-kit": "^0.31.1", - "eslint": "^9.27.0", - "tsx": "^4.19.4", - "vite-tsconfig-paths": "^5.1.4", - "vitest": "^3.2.4" + "@types/better-sqlite3": "7.6.13", + "@types/node": "22.18.13", + "dotenv-cli": "8.0.0", + "drizzle-kit": "0.31.1", + "eslint": "9.27.0", + "tsx": "4.19.4", + "vite-tsconfig-paths": "5.1.4", + "vitest": "3.2.4" } } diff --git a/examples/local-did-host/package.json b/examples/local-did-host/package.json index 3a5e761..d554fae 100644 --- a/examples/local-did-host/package.json +++ b/examples/local-did-host/package.json @@ -29,18 +29,18 @@ "@agentcommercekit/did": "workspace:*", "@agentcommercekit/jwt": "workspace:*", "@agentcommercekit/keys": "workspace:*", - "@hono/node-server": "^1.14.2", - "@hono/valibot-validator": "^0.5.2", + "@hono/node-server": "1.14.2", + "@hono/valibot-validator": "0.5.2", "@repo/api-utils": "workspace:*", - "hono": "^4.7.10", - "valibot": "^1.1.0" + "hono": "4.7.10", + "valibot": "1.1.0" }, "devDependencies": { - "@repo/eslint-config": "workspace:^", + "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "dotenv-cli": "^8.0.0", - "eslint": "^9.27.0", - "tsx": "^4.19.4", - "vitest": "^3.2.4" + "dotenv-cli": "8.0.0", + "eslint": "9.27.0", + "tsx": "4.19.4", + "vitest": "3.2.4" } } diff --git a/examples/verifier/package.json b/examples/verifier/package.json index dbd5430..b7b350d 100644 --- a/examples/verifier/package.json +++ b/examples/verifier/package.json @@ -26,19 +26,19 @@ "test": "vitest" }, "dependencies": { - "@hono/node-server": "^1.14.2", - "@hono/valibot-validator": "^0.5.2", + "@hono/node-server": "1.14.2", + "@hono/valibot-validator": "0.5.2", "@repo/api-utils": "workspace:*", "agentcommercekit": "workspace:*", - "hono": "^4.7.10", - "valibot": "^1.1.0" + "hono": "4.7.10", + "valibot": "1.1.0" }, "devDependencies": { - "@repo/eslint-config": "workspace:^", + "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "dotenv-cli": "^8.0.0", - "eslint": "^9.27.0", - "tsx": "^4.19.4", - "vitest": "^3.2.4" + "dotenv-cli": "8.0.0", + "eslint": "9.27.0", + "tsx": "4.19.4", + "vitest": "3.2.4" } } diff --git a/package.json b/package.json index f180cec..170839d 100644 --- a/package.json +++ b/package.json @@ -40,13 +40,13 @@ "test": "turbo test --env-mode=loose" }, "devDependencies": { - "@changesets/changelog-github": "^0.5.1", - "@changesets/cli": "^2.29.4", + "@changesets/changelog-github": "0.5.1", + "@changesets/cli": "2.29.4", "@repo/typescript-config": "workspace:*", - "prettier": "^3.5.3", - "prettier-plugin-packagejson": "^2.5.14", - "turbo": "^2.5.3", - "typescript": "^5" + "prettier": "3.5.3", + "prettier-plugin-packagejson": "2.5.14", + "turbo": "2.5.3", + "typescript": "5.7.3" }, "packageManager": "pnpm@10.11.0", "engines": { diff --git a/packages/ack-id/package.json b/packages/ack-id/package.json index 73954e7..c180415 100644 --- a/packages/ack-id/package.json +++ b/packages/ack-id/package.json @@ -79,19 +79,19 @@ "@agentcommercekit/jwt": "workspace:*", "@agentcommercekit/keys": "workspace:*", "@agentcommercekit/vc": "workspace:*", - "safe-stable-stringify": "^2.5.0", - "uuid": "^11.1.0", - "valibot": "^1.1.0" + "safe-stable-stringify": "2.5.0", + "uuid": "11.1.0", + "valibot": "1.1.0" }, "devDependencies": { - "@a2a-js/sdk": "^0.2.2", + "@a2a-js/sdk": "0.2.2", "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "eslint": "^9.27.0", - "tsdown": "^0.11.12", - "typescript": "^5", - "vitest": "^3.2.4", - "zod": "^3.25.0" + "eslint": "9.27.0", + "tsdown": "0.11.12", + "typescript": "5.7.3", + "vitest": "3.2.4", + "zod": "3.25.4" }, "peerDependencies": { "@a2a-js/sdk": "^0.2.2", diff --git a/packages/ack-pay/package.json b/packages/ack-pay/package.json index 65368a8..3370f4c 100644 --- a/packages/ack-pay/package.json +++ b/packages/ack-pay/package.json @@ -59,16 +59,16 @@ "@agentcommercekit/jwt": "workspace:*", "@agentcommercekit/keys": "workspace:*", "@agentcommercekit/vc": "workspace:*", - "valibot": "^1.1.0" + "valibot": "1.1.0" }, "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "eslint": "^9.27.0", - "tsdown": "^0.11.12", - "typescript": "^5", - "vitest": "^3.2.4", - "zod": "^3.25.0" + "eslint": "9.27.0", + "tsdown": "0.11.12", + "typescript": "5.7.3", + "vitest": "3.2.4", + "zod": "3.25.4" }, "peerDependencies": { "zod": "^3.25.0" diff --git a/packages/agentcommercekit/package.json b/packages/agentcommercekit/package.json index cd6f109..fb4b1c0 100644 --- a/packages/agentcommercekit/package.json +++ b/packages/agentcommercekit/package.json @@ -84,15 +84,15 @@ "@agentcommercekit/vc": "workspace:*" }, "devDependencies": { - "@a2a-js/sdk": "^0.2.2", + "@a2a-js/sdk": "0.2.2", "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "eslint": "^9.27.0", - "tsdown": "^0.11.12", - "typescript": "^5", - "valibot": "^1.1.0", - "vitest": "^3.2.4", - "zod": "^3.25.0" + "eslint": "9.27.0", + "tsdown": "0.11.12", + "typescript": "5.7.3", + "valibot": "1.1.0", + "vitest": "3.2.4", + "zod": "3.25.4" }, "peerDependencies": { "@a2a-js/sdk": "^0.2.2", diff --git a/packages/caip/package.json b/packages/caip/package.json index cc38abd..07e6a80 100644 --- a/packages/caip/package.json +++ b/packages/caip/package.json @@ -54,13 +54,13 @@ "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "eslint": "^9.27.0", - "standard-parse": "^0.3.0", - "tsdown": "^0.11.12", - "typescript": "^5", - "valibot": "^1.1.0", - "vitest": "^3.2.4", - "zod": "^3.25.0" + "eslint": "9.27.0", + "standard-parse": "0.3.0", + "tsdown": "0.11.12", + "typescript": "5.7.3", + "valibot": "1.1.0", + "vitest": "3.2.4", + "zod": "3.25.4" }, "peerDependencies": { "valibot": "^1.1.0", diff --git a/packages/did/package.json b/packages/did/package.json index 518e02b..d3cc8ac 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -57,22 +57,22 @@ "dependencies": { "@agentcommercekit/caip": "workspace:*", "@agentcommercekit/keys": "workspace:*", - "did-resolver": "^4.1.0", - "jwks-did-resolver": "^0.3.0", - "key-did-resolver": "^4.0.0", - "valibot": "^1.1.0", - "varint": "^6.0.0" + "did-resolver": "4.1.0", + "jwks-did-resolver": "0.3.0", + "key-did-resolver": "4.0.0", + "valibot": "1.1.0", + "varint": "6.0.0" }, "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "@types/varint": "^6.0.3", - "eslint": "^9.27.0", - "standard-parse": "^0.3.0", - "tsdown": "^0.11.12", - "typescript": "^5", - "vitest": "^3.2.4", - "zod": "^3.25.0" + "@types/varint": "6.0.3", + "eslint": "9.27.0", + "standard-parse": "0.3.0", + "tsdown": "0.11.12", + "typescript": "5.7.3", + "vitest": "3.2.4", + "zod": "3.25.4" }, "peerDependencies": { "zod": "^3.25.0" diff --git a/packages/jwt/package.json b/packages/jwt/package.json index 899ad84..d1078aa 100644 --- a/packages/jwt/package.json +++ b/packages/jwt/package.json @@ -56,17 +56,17 @@ }, "dependencies": { "@agentcommercekit/keys": "workspace:*", - "did-jwt": "^8.0.15" + "did-jwt": "8.0.15" }, "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "eslint": "^9.27.0", - "tsdown": "^0.11.12", - "typescript": "^5", - "valibot": "^1.1.0", - "vitest": "^3.2.4", - "zod": "^3.25.0" + "eslint": "9.27.0", + "tsdown": "0.11.12", + "typescript": "5.7.3", + "valibot": "1.1.0", + "vitest": "3.2.4", + "zod": "3.25.4" }, "peerDependencies": { "valibot": "^1.0.0", diff --git a/packages/keys/package.json b/packages/keys/package.json index a1e7886..39266cc 100644 --- a/packages/keys/package.json +++ b/packages/keys/package.json @@ -55,18 +55,18 @@ "test": "vitest" }, "dependencies": { - "@noble/curves": "^1.9.1", - "@solana/codecs-strings": "^2.1.1", - "multiformats": "^13.3.4", - "uint8arrays": "^5.1.0" + "@noble/curves": "1.9.1", + "@solana/codecs-strings": "2.1.1", + "multiformats": "13.3.4", + "uint8arrays": "5.1.0" }, "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "eslint": "^9.27.0", - "tsdown": "^0.11.12", - "typescript": "^5", - "vitest": "^3.2.4" + "eslint": "9.27.0", + "tsdown": "0.11.12", + "typescript": "5.7.3", + "vitest": "3.2.4" }, "publishConfig": { "access": "public" diff --git a/packages/vc/package.json b/packages/vc/package.json index a53db52..0e17f54 100644 --- a/packages/vc/package.json +++ b/packages/vc/package.json @@ -58,18 +58,18 @@ "@agentcommercekit/did": "workspace:*", "@agentcommercekit/jwt": "workspace:*", "@agentcommercekit/keys": "workspace:*", - "bit-buffers": "^1.0.2", - "did-jwt-vc": "^4.0.13", - "valibot": "^1.1.0" + "bit-buffers": "1.0.2", + "did-jwt-vc": "4.0.13", + "valibot": "1.1.0" }, "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "eslint": "^9.27.0", - "tsdown": "^0.11.12", - "typescript": "^5", - "vitest": "^3.2.4", - "zod": "^3.25.0" + "eslint": "9.27.0", + "tsdown": "0.11.12", + "typescript": "5.7.3", + "vitest": "3.2.4", + "zod": "3.25.4" }, "peerDependencies": { "zod": "^3.25.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bcc1f3c..4097e78 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,26 +9,26 @@ importers: .: devDependencies: '@changesets/changelog-github': - specifier: ^0.5.1 + specifier: 0.5.1 version: 0.5.1 '@changesets/cli': - specifier: ^2.29.4 + specifier: 2.29.4 version: 2.29.4 '@repo/typescript-config': specifier: workspace:* version: link:tools/typescript-config prettier: - specifier: ^3.5.3 + specifier: 3.5.3 version: 3.5.3 prettier-plugin-packagejson: - specifier: ^2.5.14 + specifier: 2.5.14 version: 2.5.14(prettier@3.5.3) turbo: - specifier: ^2.5.3 + specifier: 2.5.3 version: 2.5.3 typescript: - specifier: ^5 - version: 5.8.3 + specifier: 5.7.3 + version: 5.7.3 demos/e2e: dependencies: @@ -39,11 +39,11 @@ importers: specifier: workspace:* version: link:../../packages/agentcommercekit valibot: - specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + specifier: 1.1.0 + version: 1.1.0(typescript@5.7.3) viem: - specifier: ^2.29.4 - version: 2.29.4(typescript@5.8.3)(zod@3.25.4) + specifier: 2.29.4 + version: 2.29.4(typescript@5.7.3)(zod@3.25.4) devDependencies: '@repo/eslint-config': specifier: workspace:* @@ -52,35 +52,35 @@ importers: specifier: workspace:* version: link:../../tools/typescript-config eslint: - specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + specifier: 9.27.0 + version: 9.27.0(jiti@2.6.1) tsx: - specifier: ^4.19.4 - version: 4.20.3 + specifier: 4.19.4 + version: 4.19.4 typescript: - specifier: ^5 - version: 5.8.3 + specifier: 5.7.3 + version: 5.7.3 vitest: - specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + specifier: 3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) demos/identity: dependencies: '@ai-sdk/anthropic': - specifier: ^1.2.11 + specifier: 1.2.11 version: 1.2.11(zod@3.25.4) '@ai-sdk/openai': - specifier: ^1.3.22 + specifier: 1.3.22 version: 1.3.22(zod@3.25.4) '@ai-sdk/valibot': - specifier: ^0.1.28 - version: 0.1.28(@valibot/to-json-schema@1.0.0(valibot@1.1.0(typescript@5.8.3)))(react@19.1.0)(valibot@1.1.0(typescript@5.8.3))(zod@3.25.4) + specifier: 0.1.28 + version: 0.1.28(@valibot/to-json-schema@1.3.0(valibot@1.1.0(typescript@5.7.3)))(react@19.2.0)(valibot@1.1.0(typescript@5.7.3))(zod@3.25.4) '@hono/node-server': - specifier: ^1.14.2 + specifier: 1.14.2 version: 1.14.2(hono@4.7.10) '@hono/valibot-validator': - specifier: ^0.5.2 - version: 0.5.2(hono@4.7.10)(valibot@1.1.0(typescript@5.8.3)) + specifier: 0.5.2 + version: 0.5.2(hono@4.7.10)(valibot@1.1.0(typescript@5.7.3)) '@repo/api-utils': specifier: workspace:* version: link:../../tools/api-utils @@ -91,14 +91,14 @@ importers: specifier: workspace:* version: link:../../packages/agentcommercekit ai: - specifier: ^4.3.16 - version: 4.3.16(react@19.1.0)(zod@3.25.4) + specifier: 4.3.16 + version: 4.3.16(react@19.2.0)(zod@3.25.4) hono: - specifier: ^4.7.10 + specifier: 4.7.10 version: 4.7.10 valibot: - specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + specifier: 1.1.0 + version: 1.1.0(typescript@5.7.3) devDependencies: '@repo/eslint-config': specifier: workspace:* @@ -107,28 +107,28 @@ importers: specifier: workspace:* version: link:../../tools/typescript-config '@types/node': - specifier: ^22 - version: 22.15.19 + specifier: 22.18.13 + version: 22.18.13 dotenv-cli: - specifier: ^8.0.0 + specifier: 8.0.0 version: 8.0.0 eslint: - specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + specifier: 9.27.0 + version: 9.27.0(jiti@2.6.1) tsx: - specifier: ^4.19.4 - version: 4.20.3 + specifier: 4.19.4 + version: 4.19.4 typescript: - specifier: ^5 - version: 5.8.3 + specifier: 5.7.3 + version: 5.7.3 vitest: - specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + specifier: 3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) demos/identity-a2a: dependencies: '@a2a-js/sdk': - specifier: ^0.2.2 + specifier: 0.2.2 version: 0.2.2 '@repo/cli-tools': specifier: workspace:* @@ -137,20 +137,20 @@ importers: specifier: workspace:* version: link:../../packages/agentcommercekit express: - specifier: ^4.21.2 + specifier: 4.21.2 version: 4.21.2 jose: - specifier: ^6.0.11 + specifier: 6.0.11 version: 6.0.11 safe-stable-stringify: - specifier: ^2.5.0 + specifier: 2.5.0 version: 2.5.0 uuid: - specifier: ^11.1.0 + specifier: 11.1.0 version: 11.1.0 valibot: - specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + specifier: 1.1.0 + version: 1.1.0(typescript@5.7.3) devDependencies: '@repo/eslint-config': specifier: workspace:* @@ -162,25 +162,25 @@ importers: specifier: 5.0.3 version: 5.0.3 '@types/node': - specifier: ^22 - version: 22.15.19 + specifier: 22.18.13 + version: 22.18.13 eslint: - specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + specifier: 9.27.0 + version: 9.27.0(jiti@2.6.1) tsx: - specifier: ^4.19.4 - version: 4.20.3 + specifier: 4.19.4 + version: 4.19.4 typescript: - specifier: ^5 - version: 5.8.3 + specifier: 5.7.3 + version: 5.7.3 vitest: - specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + specifier: 3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) demos/payments: dependencies: '@hono/node-server': - specifier: ^1.14.2 + specifier: 1.14.2 version: 1.14.2(hono@4.7.10) '@repo/api-utils': specifier: workspace:* @@ -192,14 +192,14 @@ importers: specifier: workspace:* version: link:../../packages/agentcommercekit hono: - specifier: ^4.7.10 + specifier: 4.7.10 version: 4.7.10 valibot: - specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + specifier: 1.1.0 + version: 1.1.0(typescript@5.7.3) viem: - specifier: ^2.29.4 - version: 2.29.4(typescript@5.8.3)(zod@3.25.4) + specifier: 2.29.4 + version: 2.29.4(typescript@5.7.3)(zod@3.25.4) devDependencies: '@repo/eslint-config': specifier: workspace:* @@ -208,23 +208,23 @@ importers: specifier: workspace:* version: link:../../tools/typescript-config '@types/node': - specifier: ^22 - version: 22.15.19 + specifier: 22.18.13 + version: 22.18.13 dotenv-cli: - specifier: ^8.0.0 + specifier: 8.0.0 version: 8.0.0 eslint: - specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + specifier: 9.27.0 + version: 9.27.0(jiti@2.6.1) tsx: - specifier: ^4.19.4 - version: 4.20.3 + specifier: 4.19.4 + version: 4.19.4 typescript: - specifier: ^5 - version: 5.8.3 + specifier: 5.7.3 + version: 5.7.3 vitest: - specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + specifier: 3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) demos/skyfire-kya: dependencies: @@ -235,10 +235,10 @@ importers: specifier: workspace:* version: link:../../packages/agentcommercekit jose: - specifier: ^6.0.11 + specifier: 6.0.11 version: 6.0.11 zod: - specifier: ^3.25.0 + specifier: 3.25.4 version: 3.25.4 devDependencies: '@repo/eslint-config': @@ -248,28 +248,28 @@ importers: specifier: workspace:* version: link:../../tools/typescript-config eslint: - specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + specifier: 9.27.0 + version: 9.27.0(jiti@2.6.1) tsx: - specifier: ^4.19.4 - version: 4.20.3 + specifier: 4.19.4 + version: 4.19.4 typescript: - specifier: ^5 - version: 5.8.3 + specifier: 5.7.3 + version: 5.7.3 vitest: - specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + specifier: 3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) docs: devDependencies: mintlify: - specifier: ^4.0.538 - version: 4.0.538(@types/node@22.15.19)(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + specifier: 4.0.538 + version: 4.0.538(@types/node@22.18.13)(@types/react@19.2.2)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.7.3) examples/issuer: dependencies: '@hono/node-server': - specifier: ^1.14.2 + specifier: 1.14.2 version: 1.14.2(hono@4.7.10) '@repo/api-utils': specifier: workspace:* @@ -278,51 +278,51 @@ importers: specifier: workspace:* version: link:../../packages/agentcommercekit better-sqlite3: - specifier: ^11.10.0 + specifier: 11.10.0 version: 11.10.0 bit-buffers: - specifier: ^1.0.2 + specifier: 1.0.2 version: 1.0.2 drizzle-orm: - specifier: ^0.43.1 - version: 0.43.1(@cloudflare/workers-types@4.20250505.0)(@neondatabase/serverless@1.0.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.11.6)(better-sqlite3@11.10.0)(gel@2.0.2)(pg@8.16.0) + specifier: 0.43.1 + version: 0.43.1(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@11.10.0) hono: - specifier: ^4.7.10 + specifier: 4.7.10 version: 4.7.10 valibot: - specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + specifier: 1.1.0 + version: 1.1.0(typescript@5.7.3) devDependencies: '@repo/eslint-config': - specifier: workspace:^ + specifier: workspace:* version: link:../../tools/eslint-config '@repo/typescript-config': specifier: workspace:* version: link:../../tools/typescript-config '@types/better-sqlite3': - specifier: ^7.6.13 + specifier: 7.6.13 version: 7.6.13 '@types/node': - specifier: ^22 - version: 22.15.19 + specifier: 22.18.13 + version: 22.18.13 dotenv-cli: - specifier: ^8.0.0 + specifier: 8.0.0 version: 8.0.0 drizzle-kit: - specifier: ^0.31.1 + specifier: 0.31.1 version: 0.31.1 eslint: - specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + specifier: 9.27.0 + version: 9.27.0(jiti@2.6.1) tsx: - specifier: ^4.19.4 - version: 4.20.3 + specifier: 4.19.4 + version: 4.19.4 vite-tsconfig-paths: - specifier: ^5.1.4 - version: 5.1.4(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0)) + specifier: 5.1.4 + version: 5.1.4(typescript@5.7.3)(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1)) vitest: - specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + specifier: 3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) examples/local-did-host: dependencies: @@ -336,48 +336,48 @@ importers: specifier: workspace:* version: link:../../packages/keys '@hono/node-server': - specifier: ^1.14.2 + specifier: 1.14.2 version: 1.14.2(hono@4.7.10) '@hono/valibot-validator': - specifier: ^0.5.2 - version: 0.5.2(hono@4.7.10)(valibot@1.1.0(typescript@5.8.3)) + specifier: 0.5.2 + version: 0.5.2(hono@4.7.10)(valibot@1.1.0(typescript@5.7.3)) '@repo/api-utils': specifier: workspace:* version: link:../../tools/api-utils hono: - specifier: ^4.7.10 + specifier: 4.7.10 version: 4.7.10 valibot: - specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + specifier: 1.1.0 + version: 1.1.0(typescript@5.7.3) devDependencies: '@repo/eslint-config': - specifier: workspace:^ + specifier: workspace:* version: link:../../tools/eslint-config '@repo/typescript-config': specifier: workspace:* version: link:../../tools/typescript-config dotenv-cli: - specifier: ^8.0.0 + specifier: 8.0.0 version: 8.0.0 eslint: - specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + specifier: 9.27.0 + version: 9.27.0(jiti@2.6.1) tsx: - specifier: ^4.19.4 - version: 4.20.3 + specifier: 4.19.4 + version: 4.19.4 vitest: - specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + specifier: 3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) examples/verifier: dependencies: '@hono/node-server': - specifier: ^1.14.2 + specifier: 1.14.2 version: 1.14.2(hono@4.7.10) '@hono/valibot-validator': - specifier: ^0.5.2 - version: 0.5.2(hono@4.7.10)(valibot@1.1.0(typescript@5.8.3)) + specifier: 0.5.2 + version: 0.5.2(hono@4.7.10)(valibot@1.1.0(typescript@5.7.3)) '@repo/api-utils': specifier: workspace:* version: link:../../tools/api-utils @@ -385,30 +385,30 @@ importers: specifier: workspace:* version: link:../../packages/agentcommercekit hono: - specifier: ^4.7.10 + specifier: 4.7.10 version: 4.7.10 valibot: - specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + specifier: 1.1.0 + version: 1.1.0(typescript@5.7.3) devDependencies: '@repo/eslint-config': - specifier: workspace:^ + specifier: workspace:* version: link:../../tools/eslint-config '@repo/typescript-config': specifier: workspace:* version: link:../../tools/typescript-config dotenv-cli: - specifier: ^8.0.0 + specifier: 8.0.0 version: 8.0.0 eslint: - specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + specifier: 9.27.0 + version: 9.27.0(jiti@2.6.1) tsx: - specifier: ^4.19.4 - version: 4.20.3 + specifier: 4.19.4 + version: 4.19.4 vitest: - specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + specifier: 3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) packages/ack-id: dependencies: @@ -425,17 +425,17 @@ importers: specifier: workspace:* version: link:../vc safe-stable-stringify: - specifier: ^2.5.0 + specifier: 2.5.0 version: 2.5.0 uuid: - specifier: ^11.1.0 + specifier: 11.1.0 version: 11.1.0 valibot: - specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + specifier: 1.1.0 + version: 1.1.0(typescript@5.7.3) devDependencies: '@a2a-js/sdk': - specifier: ^0.2.2 + specifier: 0.2.2 version: 0.2.2 '@repo/eslint-config': specifier: workspace:* @@ -444,19 +444,19 @@ importers: specifier: workspace:* version: link:../../tools/typescript-config eslint: - specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + specifier: 9.27.0 + version: 9.27.0(jiti@2.6.1) tsdown: - specifier: ^0.11.12 - version: 0.11.12(typescript@5.8.3) + specifier: 0.11.12 + version: 0.11.12(typescript@5.7.3) typescript: - specifier: ^5 - version: 5.8.3 + specifier: 5.7.3 + version: 5.7.3 vitest: - specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + specifier: 3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) zod: - specifier: ^3.25.0 + specifier: 3.25.4 version: 3.25.4 packages/ack-pay: @@ -474,8 +474,8 @@ importers: specifier: workspace:* version: link:../vc valibot: - specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + specifier: 1.1.0 + version: 1.1.0(typescript@5.7.3) devDependencies: '@repo/eslint-config': specifier: workspace:* @@ -484,19 +484,19 @@ importers: specifier: workspace:* version: link:../../tools/typescript-config eslint: - specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + specifier: 9.27.0 + version: 9.27.0(jiti@2.6.1) tsdown: - specifier: ^0.11.12 - version: 0.11.12(typescript@5.8.3) + specifier: 0.11.12 + version: 0.11.12(typescript@5.7.3) typescript: - specifier: ^5 - version: 5.8.3 + specifier: 5.7.3 + version: 5.7.3 vitest: - specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + specifier: 3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) zod: - specifier: ^3.25.0 + specifier: 3.25.4 version: 3.25.4 packages/agentcommercekit: @@ -524,7 +524,7 @@ importers: version: link:../vc devDependencies: '@a2a-js/sdk': - specifier: ^0.2.2 + specifier: 0.2.2 version: 0.2.2 '@repo/eslint-config': specifier: workspace:* @@ -533,22 +533,22 @@ importers: specifier: workspace:* version: link:../../tools/typescript-config eslint: - specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + specifier: 9.27.0 + version: 9.27.0(jiti@2.6.1) tsdown: - specifier: ^0.11.12 - version: 0.11.12(typescript@5.8.3) + specifier: 0.11.12 + version: 0.11.12(typescript@5.7.3) typescript: - specifier: ^5 - version: 5.8.3 + specifier: 5.7.3 + version: 5.7.3 valibot: - specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + specifier: 1.1.0 + version: 1.1.0(typescript@5.7.3) vitest: - specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + specifier: 3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) zod: - specifier: ^3.25.0 + specifier: 3.25.4 version: 3.25.4 packages/caip: @@ -560,25 +560,25 @@ importers: specifier: workspace:* version: link:../../tools/typescript-config eslint: - specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + specifier: 9.27.0 + version: 9.27.0(jiti@2.6.1) standard-parse: - specifier: ^0.3.0 - version: 0.3.0(valibot@1.1.0(typescript@5.8.3))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0))(zod@3.25.4) + specifier: 0.3.0 + version: 0.3.0(valibot@1.1.0(typescript@5.7.3))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1))(zod@3.25.4) tsdown: - specifier: ^0.11.12 - version: 0.11.12(typescript@5.8.3) + specifier: 0.11.12 + version: 0.11.12(typescript@5.7.3) typescript: - specifier: ^5 - version: 5.8.3 + specifier: 5.7.3 + version: 5.7.3 valibot: - specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + specifier: 1.1.0 + version: 1.1.0(typescript@5.7.3) vitest: - specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + specifier: 3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) zod: - specifier: ^3.25.0 + specifier: 3.25.4 version: 3.25.4 packages/did: @@ -590,19 +590,19 @@ importers: specifier: workspace:* version: link:../keys did-resolver: - specifier: ^4.1.0 + specifier: 4.1.0 version: 4.1.0 jwks-did-resolver: - specifier: ^0.3.0 - version: 0.3.0(typescript@5.8.3)(zod@3.25.4) + specifier: 0.3.0 + version: 0.3.0(typescript@5.7.3)(zod@3.25.4) key-did-resolver: - specifier: ^4.0.0 + specifier: 4.0.0 version: 4.0.0 valibot: - specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + specifier: 1.1.0 + version: 1.1.0(typescript@5.7.3) varint: - specifier: ^6.0.0 + specifier: 6.0.0 version: 6.0.0 devDependencies: '@repo/eslint-config': @@ -612,25 +612,25 @@ importers: specifier: workspace:* version: link:../../tools/typescript-config '@types/varint': - specifier: ^6.0.3 + specifier: 6.0.3 version: 6.0.3 eslint: - specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + specifier: 9.27.0 + version: 9.27.0(jiti@2.6.1) standard-parse: - specifier: ^0.3.0 - version: 0.3.0(valibot@1.1.0(typescript@5.8.3))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0))(zod@3.25.4) + specifier: 0.3.0 + version: 0.3.0(valibot@1.1.0(typescript@5.7.3))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1))(zod@3.25.4) tsdown: - specifier: ^0.11.12 - version: 0.11.12(typescript@5.8.3) + specifier: 0.11.12 + version: 0.11.12(typescript@5.7.3) typescript: - specifier: ^5 - version: 5.8.3 + specifier: 5.7.3 + version: 5.7.3 vitest: - specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + specifier: 3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) zod: - specifier: ^3.25.0 + specifier: 3.25.4 version: 3.25.4 packages/jwt: @@ -639,7 +639,7 @@ importers: specifier: workspace:* version: link:../keys did-jwt: - specifier: ^8.0.15 + specifier: 8.0.15 version: 8.0.15 devDependencies: '@repo/eslint-config': @@ -649,37 +649,37 @@ importers: specifier: workspace:* version: link:../../tools/typescript-config eslint: - specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + specifier: 9.27.0 + version: 9.27.0(jiti@2.6.1) tsdown: - specifier: ^0.11.12 - version: 0.11.12(typescript@5.8.3) + specifier: 0.11.12 + version: 0.11.12(typescript@5.7.3) typescript: - specifier: ^5 - version: 5.8.3 + specifier: 5.7.3 + version: 5.7.3 valibot: - specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + specifier: 1.1.0 + version: 1.1.0(typescript@5.7.3) vitest: - specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + specifier: 3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) zod: - specifier: ^3.25.0 + specifier: 3.25.4 version: 3.25.4 packages/keys: dependencies: '@noble/curves': - specifier: ^1.9.1 + specifier: 1.9.1 version: 1.9.1 '@solana/codecs-strings': - specifier: ^2.1.1 - version: 2.1.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + specifier: 2.1.1 + version: 2.1.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3) multiformats: - specifier: ^13.3.4 + specifier: 13.3.4 version: 13.3.4 uint8arrays: - specifier: ^5.1.0 + specifier: 5.1.0 version: 5.1.0 devDependencies: '@repo/eslint-config': @@ -689,17 +689,17 @@ importers: specifier: workspace:* version: link:../../tools/typescript-config eslint: - specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + specifier: 9.27.0 + version: 9.27.0(jiti@2.6.1) tsdown: - specifier: ^0.11.12 - version: 0.11.12(typescript@5.8.3) + specifier: 0.11.12 + version: 0.11.12(typescript@5.7.3) typescript: - specifier: ^5 - version: 5.8.3 + specifier: 5.7.3 + version: 5.7.3 vitest: - specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + specifier: 3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) packages/vc: dependencies: @@ -713,14 +713,14 @@ importers: specifier: workspace:* version: link:../keys bit-buffers: - specifier: ^1.0.2 + specifier: 1.0.2 version: 1.0.2 did-jwt-vc: - specifier: ^4.0.13 + specifier: 4.0.13 version: 4.0.13 valibot: - specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + specifier: 1.1.0 + version: 1.1.0(typescript@5.7.3) devDependencies: '@repo/eslint-config': specifier: workspace:* @@ -729,19 +729,19 @@ importers: specifier: workspace:* version: link:../../tools/typescript-config eslint: - specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + specifier: 9.27.0 + version: 9.27.0(jiti@2.6.1) tsdown: - specifier: ^0.11.12 - version: 0.11.12(typescript@5.8.3) + specifier: 0.11.12 + version: 0.11.12(typescript@5.7.3) typescript: - specifier: ^5 - version: 5.8.3 + specifier: 5.7.3 + version: 5.7.3 vitest: - specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + specifier: 3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) zod: - specifier: ^3.25.0 + specifier: 3.25.4 version: 3.25.4 tools/api-utils: @@ -762,11 +762,11 @@ importers: specifier: workspace:* version: link:../../packages/vc hono: - specifier: ^4.7.10 + specifier: 4.7.10 version: 4.7.10 valibot: - specifier: ^1.1.0 - version: 1.1.0(typescript@5.8.3) + specifier: 1.1.0 + version: 1.1.0(typescript@5.7.3) devDependencies: '@repo/eslint-config': specifier: workspace:* @@ -775,31 +775,31 @@ importers: specifier: workspace:* version: link:../typescript-config eslint: - specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + specifier: 9.27.0 + version: 9.27.0(jiti@2.6.1) typescript: - specifier: ^5 - version: 5.8.3 + specifier: 5.7.3 + version: 5.7.3 vitest: - specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + specifier: 3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) tools/cli-tools: dependencies: '@inquirer/prompts': - specifier: ^7.5.1 - version: 7.5.1(@types/node@22.15.19) + specifier: 7.5.1 + version: 7.5.1(@types/node@22.18.13) figlet: - specifier: ^1.8.1 + specifier: 1.8.1 version: 1.8.1 strip-ansi: - specifier: ^7.1.0 + specifier: 7.1.0 version: 7.1.0 wrap-ansi: - specifier: ^9.0.0 + specifier: 9.0.0 version: 9.0.0 yoctocolors: - specifier: ^2.1.1 + specifier: 2.1.1 version: 2.1.1 devDependencies: '@repo/eslint-config': @@ -809,56 +809,56 @@ importers: specifier: workspace:* version: link:../typescript-config '@types/figlet': - specifier: ^1.7.0 + specifier: 1.7.0 version: 1.7.0 '@types/node': - specifier: ^22 - version: 22.15.19 + specifier: 22.18.13 + version: 22.18.13 eslint: - specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + specifier: 9.27.0 + version: 9.27.0(jiti@2.6.1) typescript: - specifier: ^5 - version: 5.8.3 + specifier: 5.7.3 + version: 5.7.3 vitest: - specifier: ^3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + specifier: 3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) tools/eslint-config: devDependencies: '@cspell/eslint-plugin': - specifier: ^9.0.1 - version: 9.0.1(eslint@9.27.0(jiti@2.4.2)) + specifier: 9.0.1 + version: 9.0.1(eslint@9.27.0(jiti@2.6.1)) '@eslint/js': - specifier: ^9.27.0 + specifier: 9.27.0 version: 9.27.0 '@eslint/json': - specifier: ^0.12.0 + specifier: 0.12.0 version: 0.12.0 '@eslint/markdown': - specifier: ^6.4.0 + specifier: 6.4.0 version: 6.4.0 eslint: - specifier: ^9.27.0 - version: 9.27.0(jiti@2.4.2) + specifier: 9.27.0 + version: 9.27.0(jiti@2.6.1) eslint-config-prettier: - specifier: ^10.1.5 - version: 10.1.5(eslint@9.27.0(jiti@2.4.2)) + specifier: 10.1.5 + version: 10.1.5(eslint@9.27.0(jiti@2.6.1)) eslint-import-resolver-typescript: - specifier: ^4.3.5 - version: 4.3.5(eslint-plugin-import-x@4.12.2(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2)) + specifier: 4.3.5 + version: 4.3.5(eslint-plugin-import-x@4.12.2(eslint@9.27.0(jiti@2.6.1))(typescript@5.7.3))(eslint@9.27.0(jiti@2.6.1)) eslint-plugin-import-x: - specifier: ^4.12.2 - version: 4.12.2(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + specifier: 4.12.2 + version: 4.12.2(eslint@9.27.0(jiti@2.6.1))(typescript@5.7.3) eslint-plugin-turbo: - specifier: ^2.5.3 - version: 2.5.3(eslint@9.27.0(jiti@2.4.2))(turbo@2.5.3) + specifier: 2.5.3 + version: 2.5.3(eslint@9.27.0(jiti@2.6.1))(turbo@2.5.3) typescript: - specifier: ^5 - version: 5.8.3 + specifier: 5.7.3 + version: 5.7.3 typescript-eslint: - specifier: ^8.32.1 - version: 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + specifier: 8.32.1 + version: 8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.7.3) tools/typescript-config: {} @@ -868,8 +868,8 @@ packages: resolution: {integrity: sha512-T0iFXgU1Z7MQWmFKLALaAnfWCvwDm8TVuCXolYymOHBh7lEawM30b06wOLc/u4wOWujuGQyCEtdVVFFF80Azbw==} engines: {node: '>=18'} - '@adraffy/ens-normalize@1.11.0': - resolution: {integrity: sha512-/3DDPKHqqIqxUULp8yP4zODUY1i+2xvVWsv8A79xGWdCAG+8sb0hRh0Rk2QyOJUnnbyPUAZYcpBuRe3nS2OIUg==} + '@adraffy/ens-normalize@1.11.1': + resolution: {integrity: sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==} '@ai-sdk/anthropic@1.2.11': resolution: {integrity: sha512-lZLcEMh8MXY4NVSrN/7DyI2rnid8k7cn/30nMmd3bwJrnIsOuIuuFvY8f0nj+pFcTi6AYK7ujLdqW5dQVz1YQw==} @@ -919,43 +919,43 @@ packages: '@asyncapi/parser@3.4.0': resolution: {integrity: sha512-Sxn74oHiZSU6+cVeZy62iPZMFMvKp4jupMFHelSICCMw1qELmUHPvuZSr+ZHDmNGgHcEpzJM5HN02kR7T4g+PQ==} - '@asyncapi/specs@6.8.1': - resolution: {integrity: sha512-czHoAk3PeXTLR+X8IUaD+IpT+g+zUvkcgMDJVothBsan+oHN3jfcFcFUNdOPAAFoUCQN1hXF1dWuphWy05THlA==} + '@asyncapi/specs@6.10.0': + resolution: {integrity: sha512-vB5oKLsdrLUORIZ5BXortZTlVyGWWMC1Nud/0LtgxQ3Yn2738HigAD6EVqScvpPsDUI/bcLVsYEXN4dtXQHVng==} '@babel/code-frame@7.27.1': resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/generator@7.27.1': - resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==} + '@babel/generator@7.28.5': + resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} engines: {node: '>=6.9.0'} '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.27.1': - resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + '@babel/helper-validator-identifier@7.28.5': + resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} engines: {node: '>=6.9.0'} - '@babel/parser@7.27.2': - resolution: {integrity: sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==} + '@babel/parser@7.28.5': + resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/runtime@7.27.1': - resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==} + '@babel/runtime@7.28.4': + resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.27.1': - resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==} + '@babel/types@7.28.5': + resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} - '@changesets/apply-release-plan@7.0.12': - resolution: {integrity: sha512-EaET7As5CeuhTzvXTQCRZeBUcisoYPDDcXvgTE/2jmmypKp0RC7LxKj/yzqeh/1qFTZI7oDGFcL1PHRuQuketQ==} + '@changesets/apply-release-plan@7.0.13': + resolution: {integrity: sha512-BIW7bofD2yAWoE8H4V40FikC+1nNFEKBisMECccS16W1rt6qqhNTBDmIw5HaqmMgtLNz9e7oiALiEUuKrQ4oHg==} - '@changesets/assemble-release-plan@6.0.8': - resolution: {integrity: sha512-y8+8LvZCkKJdbUlpXFuqcavpzJR80PN0OIfn8HZdwK7Sh6MgLXm4hKY5vu6/NDoKp8lAlM4ERZCqRMLxP4m+MQ==} + '@changesets/assemble-release-plan@6.0.9': + resolution: {integrity: sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==} '@changesets/changelog-git@0.2.1': resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} @@ -979,8 +979,8 @@ packages: '@changesets/get-github-info@0.6.0': resolution: {integrity: sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==} - '@changesets/get-release-plan@4.0.12': - resolution: {integrity: sha512-KukdEgaafnyGryUwpHG2kZ7xJquOmWWWk5mmoeQaSvZTWH1DC5D/Sw6ClgGFYtQnOMSQhgoEbDxAbpIIayKH1g==} + '@changesets/get-release-plan@4.0.13': + resolution: {integrity: sha512-DWG1pus72FcNeXkM12tx+xtExyH/c9I1z+2aXlObH3i9YA7+WZEVaiHzHl03thpvAgWTRaH64MpfHxozfF7Dvg==} '@changesets/get-version-range-type@0.4.0': resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} @@ -1012,9 +1012,6 @@ packages: '@changesets/write@0.4.0': resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} - '@cloudflare/workers-types@4.20250505.0': - resolution: {integrity: sha512-pLQ/UaCupEy3fTTfy7yCR7FuAbawvCohYAdadGHPUfzssksA9MhkqBLlzYWRwIoC34R8grVn4XOCknEg+NMr0Q==} - '@cspell/cspell-bundled-dicts@9.0.1': resolution: {integrity: sha512-h7gTqg0VF4N8VhOPk66XewuSsT56OP2ujgxtAyYQ4H+NuYd3HMfS0h/I3/y9uBhllwOEamaeAzYhc5JF/qIrsQ==} engines: {node: '>=20'} @@ -1035,184 +1032,184 @@ packages: resolution: {integrity: sha512-8FRmvyV1AYEepJB3J7jji1ZYG9yOK0eYr4WuUVPfUJa6N3HyeZjWKhxbVvqedmEI74f5Ls3cQKHY1T2Yvqk/ag==} engines: {node: '>=20'} - '@cspell/dict-ada@4.1.0': - resolution: {integrity: sha512-7SvmhmX170gyPd+uHXrfmqJBY5qLcCX8kTGURPVeGxmt8XNXT75uu9rnZO+jwrfuU2EimNoArdVy5GZRGljGNg==} + '@cspell/dict-ada@4.1.1': + resolution: {integrity: sha512-E+0YW9RhZod/9Qy2gxfNZiHJjCYFlCdI69br1eviQQWB8yOTJX0JHXLs79kOYhSW0kINPVUdvddEBe6Lu6CjGQ==} - '@cspell/dict-al@1.1.0': - resolution: {integrity: sha512-PtNI1KLmYkELYltbzuoztBxfi11jcE9HXBHCpID2lou/J4VMYKJPNqe4ZjVzSI9NYbMnMnyG3gkbhIdx66VSXg==} + '@cspell/dict-al@1.1.1': + resolution: {integrity: sha512-sD8GCaZetgQL4+MaJLXqbzWcRjfKVp8x+px3HuCaaiATAAtvjwUQ5/Iubiqwfd1boIh2Y1/3EgM3TLQ7Q8e0wQ==} - '@cspell/dict-aws@4.0.10': - resolution: {integrity: sha512-0qW4sI0GX8haELdhfakQNuw7a2pnWXz3VYQA2MpydH2xT2e6EN9DWFpKAi8DfcChm8MgDAogKkoHtIo075iYng==} + '@cspell/dict-aws@4.0.15': + resolution: {integrity: sha512-aPY7VVR5Os4rz36EaqXBAEy14wR4Rqv+leCJ2Ug/Gd0IglJpM30LalF3e2eJChnjje3vWoEC0Rz3+e5gpZG+Kg==} - '@cspell/dict-bash@4.2.0': - resolution: {integrity: sha512-HOyOS+4AbCArZHs/wMxX/apRkjxg6NDWdt0jF9i9XkvJQUltMwEhyA2TWYjQ0kssBsnof+9amax2lhiZnh3kCg==} + '@cspell/dict-bash@4.2.2': + resolution: {integrity: sha512-kyWbwtX3TsCf5l49gGQIZkRLaB/P8g73GDRm41Zu8Mv51kjl2H7Au0TsEvHv7jzcsRLS6aUYaZv6Zsvk1fOz+Q==} - '@cspell/dict-companies@3.2.1': - resolution: {integrity: sha512-ryaeJ1KhTTKL4mtinMtKn8wxk6/tqD4vX5tFP+Hg89SiIXmbMk5vZZwVf+eyGUWJOyw5A1CVj9EIWecgoi+jYQ==} + '@cspell/dict-companies@3.2.7': + resolution: {integrity: sha512-fEyr3LmpFKTaD0LcRhB4lfW1AmULYBqzg4gWAV0dQCv06l+TsA+JQ+3pZJbUcoaZirtgsgT3dL3RUjmGPhUH0A==} - '@cspell/dict-cpp@6.0.8': - resolution: {integrity: sha512-BzurRZilWqaJt32Gif6/yCCPi+FtrchjmnehVEIFzbWyeBd/VOUw77IwrEzehZsu5cRU91yPWuWp5fUsKfDAXA==} + '@cspell/dict-cpp@6.0.13': + resolution: {integrity: sha512-EFrhN/91tPwadI9m8Rxe65//9gqv+lpZoKtrngzF4DTnw4YAfMLTpykendHps0bz46NZW84/zoY1cxeW2TEPQQ==} - '@cspell/dict-cryptocurrencies@5.0.4': - resolution: {integrity: sha512-6iFu7Abu+4Mgqq08YhTKHfH59mpMpGTwdzDB2Y8bbgiwnGFCeoiSkVkgLn1Kel2++hYcZ8vsAW/MJS9oXxuMag==} + '@cspell/dict-cryptocurrencies@5.0.5': + resolution: {integrity: sha512-R68hYYF/rtlE6T/dsObStzN5QZw+0aQBinAXuWCVqwdS7YZo0X33vGMfChkHaiCo3Z2+bkegqHlqxZF4TD3rUA==} - '@cspell/dict-csharp@4.0.6': - resolution: {integrity: sha512-w/+YsqOknjQXmIlWDRmkW+BHBPJZ/XDrfJhZRQnp0wzpPOGml7W0q1iae65P2AFRtTdPKYmvSz7AL5ZRkCnSIw==} + '@cspell/dict-csharp@4.0.7': + resolution: {integrity: sha512-H16Hpu8O/1/lgijFt2lOk4/nnldFtQ4t8QHbyqphqZZVE5aS4J/zD/WvduqnLY21aKhZS6jo/xF5PX9jyqPKUA==} - '@cspell/dict-css@4.0.17': - resolution: {integrity: sha512-2EisRLHk6X/PdicybwlajLGKF5aJf4xnX2uuG5lexuYKt05xV/J/OiBADmi8q9obhxf1nesrMQbqAt+6CsHo/w==} + '@cspell/dict-css@4.0.18': + resolution: {integrity: sha512-EF77RqROHL+4LhMGW5NTeKqfUd/e4OOv6EDFQ/UQQiFyWuqkEKyEz0NDILxOFxWUEVdjT2GQ2cC7t12B6pESwg==} - '@cspell/dict-dart@2.3.0': - resolution: {integrity: sha512-1aY90lAicek8vYczGPDKr70pQSTQHwMFLbmWKTAI6iavmb1fisJBS1oTmMOKE4ximDf86MvVN6Ucwx3u/8HqLg==} + '@cspell/dict-dart@2.3.1': + resolution: {integrity: sha512-xoiGnULEcWdodXI6EwVyqpZmpOoh8RA2Xk9BNdR7DLamV/QMvEYn8KJ7NlRiTSauJKPNkHHQ5EVHRM6sTS7jdg==} - '@cspell/dict-data-science@2.0.8': - resolution: {integrity: sha512-uyAtT+32PfM29wRBeAkUSbkytqI8bNszNfAz2sGPtZBRmsZTYugKMEO9eDjAIE/pnT9CmbjNuoiXhk+Ss4fCOg==} + '@cspell/dict-data-science@2.0.11': + resolution: {integrity: sha512-Dt+83nVCcF+dQyvFSaZjCKt1H5KbsVJFtH2X7VUfmIzQu8xCnV1fUmkhBzGJ+NiFs99Oy9JA6I9EjeqExzXk7g==} - '@cspell/dict-django@4.1.4': - resolution: {integrity: sha512-fX38eUoPvytZ/2GA+g4bbdUtCMGNFSLbdJJPKX2vbewIQGfgSFJKY56vvcHJKAvw7FopjvgyS/98Ta9WN1gckg==} + '@cspell/dict-django@4.1.5': + resolution: {integrity: sha512-AvTWu99doU3T8ifoMYOMLW2CXKvyKLukPh1auOPwFGHzueWYvBBN+OxF8wF7XwjTBMMeRleVdLh3aWCDEX/ZWg==} - '@cspell/dict-docker@1.1.14': - resolution: {integrity: sha512-p6Qz5mokvcosTpDlgSUREdSbZ10mBL3ndgCdEKMqjCSZJFdfxRdNdjrGER3lQ6LMq5jGr1r7nGXA0gvUJK80nw==} + '@cspell/dict-docker@1.1.16': + resolution: {integrity: sha512-UiVQ5RmCg6j0qGIxrBnai3pIB+aYKL3zaJGvXk1O/ertTKJif9RZikKXCEgqhaCYMweM4fuLqWSVmw3hU164Iw==} - '@cspell/dict-dotnet@5.0.9': - resolution: {integrity: sha512-JGD6RJW5sHtO5lfiJl11a5DpPN6eKSz5M1YBa1I76j4dDOIqgZB6rQexlDlK1DH9B06X4GdDQwdBfnpAB0r2uQ==} + '@cspell/dict-dotnet@5.0.10': + resolution: {integrity: sha512-ooar8BP/RBNP1gzYfJPStKEmpWy4uv/7JCq6FOnJLeD1yyfG3d/LFMVMwiJo+XWz025cxtkM3wuaikBWzCqkmg==} - '@cspell/dict-elixir@4.0.7': - resolution: {integrity: sha512-MAUqlMw73mgtSdxvbAvyRlvc3bYnrDqXQrx5K9SwW8F7fRYf9V4vWYFULh+UWwwkqkhX9w03ZqFYRTdkFku6uA==} + '@cspell/dict-elixir@4.0.8': + resolution: {integrity: sha512-CyfphrbMyl4Ms55Vzuj+mNmd693HjBFr9hvU+B2YbFEZprE5AG+EXLYTMRWrXbpds4AuZcvN3deM2XVB80BN/Q==} - '@cspell/dict-en-common-misspellings@2.0.11': - resolution: {integrity: sha512-xFQjeg0wFHh9sFhshpJ+5BzWR1m9Vu8pD0CGPkwZLK9oii8AD8RXNchabLKy/O5VTLwyqPOi9qpyp1cxm3US4Q==} + '@cspell/dict-en-common-misspellings@2.1.7': + resolution: {integrity: sha512-HAWSOoQ+lxdzLaTALhPofKNJdxZ7HAcTZWQNwb7cvGBiKEy182cb96U35602yBPrBsKY/vLxVs6f0E1JTeQjRQ==} - '@cspell/dict-en-gb-mit@3.0.6': - resolution: {integrity: sha512-QYDwuXi9Yh+AvU1omhz8sWX+A1SxWI3zeK1HdGfTrICZavhp8xxcQGTa5zxTTFRCcQc483YzUH2Dl+6Zd50tJg==} + '@cspell/dict-en-gb-mit@3.1.12': + resolution: {integrity: sha512-KJaJPsTRMXN4sgKHQRMNqqxc7WWZaR5h7+WarIoLUfbEWIQM1FCJiGn2pZX9OLQVBtSnLYo1JVXK1K/Tz3HWEQ==} - '@cspell/dict-en_us@4.4.8': - resolution: {integrity: sha512-OkNUVuU9Q+Sf827/61YPkk6ya6dSsllzeYniBFqNW9TkoqQXT3vggkgmtCE1aEhSvVctMwxpPYoC8pZgn1TeSA==} + '@cspell/dict-en_us@4.4.22': + resolution: {integrity: sha512-i9AJ6z5kyZU5L/b+UOOp/7dfa7RxhibLXWaexSJclf7V7R+TzwCTLoOZd1wf/5PBnNGkP8xOSaflkpUbtVijFA==} - '@cspell/dict-filetypes@3.0.12': - resolution: {integrity: sha512-+ds5wgNdlUxuJvhg8A1TjuSpalDFGCh7SkANCWvIplg6QZPXL4j83lqxP7PgjHpx7PsBUS7vw0aiHPjZy9BItw==} + '@cspell/dict-filetypes@3.0.14': + resolution: {integrity: sha512-KSXaSMYYNMLLdHEnju1DyRRH3eQWPRYRnOXpuHUdOh2jC44VgQoxyMU7oB3NAhDhZKBPCihabzECsAGFbdKfEA==} - '@cspell/dict-flutter@1.1.0': - resolution: {integrity: sha512-3zDeS7zc2p8tr9YH9tfbOEYfopKY/srNsAa+kE3rfBTtQERAZeOhe5yxrnTPoufctXLyuUtcGMUTpxr3dO0iaA==} + '@cspell/dict-flutter@1.1.1': + resolution: {integrity: sha512-UlOzRcH2tNbFhZmHJN48Za/2/MEdRHl2BMkCWZBYs+30b91mWvBfzaN4IJQU7dUZtowKayVIF9FzvLZtZokc5A==} - '@cspell/dict-fonts@4.0.4': - resolution: {integrity: sha512-cHFho4hjojBcHl6qxidl9CvUb492IuSk7xIf2G2wJzcHwGaCFa2o3gRcxmIg1j62guetAeDDFELizDaJlVRIOg==} + '@cspell/dict-fonts@4.0.5': + resolution: {integrity: sha512-BbpkX10DUX/xzHs6lb7yzDf/LPjwYIBJHJlUXSBXDtK/1HaeS+Wqol4Mlm2+NAgZ7ikIE5DQMViTgBUY3ezNoQ==} - '@cspell/dict-fsharp@1.1.0': - resolution: {integrity: sha512-oguWmHhGzgbgbEIBKtgKPrFSVAFtvGHaQS0oj+vacZqMObwkapcTGu7iwf4V3Bc2T3caf0QE6f6rQfIJFIAVsw==} + '@cspell/dict-fsharp@1.1.1': + resolution: {integrity: sha512-imhs0u87wEA4/cYjgzS0tAyaJpwG7vwtC8UyMFbwpmtw+/bgss+osNfyqhYRyS/ehVCWL17Ewx2UPkexjKyaBA==} - '@cspell/dict-fullstack@3.2.6': - resolution: {integrity: sha512-cSaq9rz5RIU9j+0jcF2vnKPTQjxGXclntmoNp4XB7yFX2621PxJcekGjwf/lN5heJwVxGLL9toR0CBlGKwQBgA==} + '@cspell/dict-fullstack@3.2.7': + resolution: {integrity: sha512-IxEk2YAwAJKYCUEgEeOg3QvTL4XLlyArJElFuMQevU1dPgHgzWElFevN5lsTFnvMFA1riYsVinqJJX0BanCFEg==} - '@cspell/dict-gaming-terms@1.1.1': - resolution: {integrity: sha512-tb8GFxjTLDQstkJcJ90lDqF4rKKlMUKs5/ewePN9P+PYRSehqDpLI5S5meOfPit8LGszeOrjUdBQ4zXo7NpMyQ==} + '@cspell/dict-gaming-terms@1.1.2': + resolution: {integrity: sha512-9XnOvaoTBscq0xuD6KTEIkk9hhdfBkkvJAIsvw3JMcnp1214OCGW8+kako5RqQ2vTZR3Tnf3pc57o7VgkM0q1Q==} - '@cspell/dict-git@3.0.5': - resolution: {integrity: sha512-I7l86J2nOcpBY0OcwXLTGMbcXbEE7nxZme9DmYKrNgmt35fcLu+WKaiXW7P29V+lIXjJo/wKrEDY+wUEwVuABQ==} + '@cspell/dict-git@3.0.7': + resolution: {integrity: sha512-odOwVKgfxCQfiSb+nblQZc4ErXmnWEnv8XwkaI4sNJ7cNmojnvogYVeMqkXPjvfrgEcizEEA4URRD2Ms5PDk1w==} - '@cspell/dict-golang@6.0.21': - resolution: {integrity: sha512-D3wG1MWhFx54ySFJ00CS1MVjR4UiBVsOWGIjJ5Av+HamnguqEshxbF9mvy+BX0KqzdLVzwFkoLBs8QeOID56HA==} + '@cspell/dict-golang@6.0.24': + resolution: {integrity: sha512-rY7PlC3MsHozmjrZWi0HQPUl0BVCV0+mwK0rnMT7pOIXqOe4tWCYMULDIsEk4F0gbIxb5badd2dkCPDYjLnDgA==} - '@cspell/dict-google@1.0.8': - resolution: {integrity: sha512-BnMHgcEeaLyloPmBs8phCqprI+4r2Jb8rni011A8hE+7FNk7FmLE3kiwxLFrcZnnb7eqM0agW4zUaNoB0P+z8A==} + '@cspell/dict-google@1.0.9': + resolution: {integrity: sha512-biL65POqialY0i4g6crj7pR6JnBkbsPovB2WDYkj3H4TuC/QXv7Pu5pdPxeUJA6TSCHI7T5twsO4VSVyRxD9CA==} - '@cspell/dict-haskell@4.0.5': - resolution: {integrity: sha512-s4BG/4tlj2pPM9Ha7IZYMhUujXDnI0Eq1+38UTTCpatYLbQqDwRFf2KNPLRqkroU+a44yTUAe0rkkKbwy4yRtQ==} + '@cspell/dict-haskell@4.0.6': + resolution: {integrity: sha512-ib8SA5qgftExpYNjWhpYIgvDsZ/0wvKKxSP+kuSkkak520iPvTJumEpIE+qPcmJQo4NzdKMN8nEfaeci4OcFAQ==} - '@cspell/dict-html-symbol-entities@4.0.3': - resolution: {integrity: sha512-aABXX7dMLNFdSE8aY844X4+hvfK7977sOWgZXo4MTGAmOzR8524fjbJPswIBK7GaD3+SgFZ2yP2o0CFvXDGF+A==} + '@cspell/dict-html-symbol-entities@4.0.4': + resolution: {integrity: sha512-afea+0rGPDeOV9gdO06UW183Qg6wRhWVkgCFwiO3bDupAoyXRuvupbb5nUyqSTsLXIKL8u8uXQlJ9pkz07oVXw==} - '@cspell/dict-html@4.0.11': - resolution: {integrity: sha512-QR3b/PB972SRQ2xICR1Nw/M44IJ6rjypwzA4jn+GH8ydjAX9acFNfc+hLZVyNe0FqsE90Gw3evLCOIF0vy1vQw==} + '@cspell/dict-html@4.0.12': + resolution: {integrity: sha512-JFffQ1dDVEyJq6tCDWv0r/RqkdSnV43P2F/3jJ9rwLgdsOIXwQbXrz6QDlvQLVvNSnORH9KjDtenFTGDyzfCaA==} - '@cspell/dict-java@5.0.11': - resolution: {integrity: sha512-T4t/1JqeH33Raa/QK/eQe26FE17eUCtWu+JsYcTLkQTci2dk1DfcIKo8YVHvZXBnuM43ATns9Xs0s+AlqDeH7w==} + '@cspell/dict-java@5.0.12': + resolution: {integrity: sha512-qPSNhTcl7LGJ5Qp6VN71H8zqvRQK04S08T67knMq9hTA8U7G1sTKzLmBaDOFhq17vNX/+rT+rbRYp+B5Nwza1A==} - '@cspell/dict-julia@1.1.0': - resolution: {integrity: sha512-CPUiesiXwy3HRoBR3joUseTZ9giFPCydSKu2rkh6I2nVjXnl5vFHzOMLXpbF4HQ1tH2CNfnDbUndxD+I+7eL9w==} + '@cspell/dict-julia@1.1.1': + resolution: {integrity: sha512-WylJR9TQ2cgwd5BWEOfdO3zvDB+L7kYFm0I9u0s9jKHWQ6yKmfKeMjU9oXxTBxIufhCXm92SKwwVNAC7gjv+yA==} - '@cspell/dict-k8s@1.0.10': - resolution: {integrity: sha512-313haTrX9prep1yWO7N6Xw4D6tvUJ0Xsx+YhCP+5YrrcIKoEw5Rtlg8R4PPzLqe6zibw6aJ+Eqq+y76Vx5BZkw==} + '@cspell/dict-k8s@1.0.12': + resolution: {integrity: sha512-2LcllTWgaTfYC7DmkMPOn9GsBWsA4DZdlun4po8s2ysTP7CPEnZc1ZfK6pZ2eI4TsZemlUQQ+NZxMe9/QutQxg==} - '@cspell/dict-kotlin@1.1.0': - resolution: {integrity: sha512-vySaVw6atY7LdwvstQowSbdxjXG6jDhjkWVWSjg1XsUckyzH1JRHXe9VahZz1i7dpoFEUOWQrhIe5B9482UyJQ==} + '@cspell/dict-kotlin@1.1.1': + resolution: {integrity: sha512-J3NzzfgmxRvEeOe3qUXnSJQCd38i/dpF9/t3quuWh6gXM+krsAXP75dY1CzDmS8mrJAlBdVBeAW5eAZTD8g86Q==} - '@cspell/dict-latex@4.0.3': - resolution: {integrity: sha512-2KXBt9fSpymYHxHfvhUpjUFyzrmN4c4P8mwIzweLyvqntBT3k0YGZJSriOdjfUjwSygrfEwiuPI1EMrvgrOMJw==} + '@cspell/dict-latex@4.0.4': + resolution: {integrity: sha512-YdTQhnTINEEm/LZgTzr9Voz4mzdOXH7YX+bSFs3hnkUHCUUtX/mhKgf1CFvZ0YNM2afjhQcmLaR9bDQVyYBvpA==} - '@cspell/dict-lorem-ipsum@4.0.4': - resolution: {integrity: sha512-+4f7vtY4dp2b9N5fn0za/UR0kwFq2zDtA62JCbWHbpjvO9wukkbl4rZg4YudHbBgkl73HRnXFgCiwNhdIA1JPw==} + '@cspell/dict-lorem-ipsum@4.0.5': + resolution: {integrity: sha512-9a4TJYRcPWPBKkQAJ/whCu4uCAEgv/O2xAaZEI0n4y1/l18Yyx8pBKoIX5QuVXjjmKEkK7hi5SxyIsH7pFEK9Q==} - '@cspell/dict-lua@4.0.7': - resolution: {integrity: sha512-Wbr7YSQw+cLHhTYTKV6cAljgMgcY+EUAxVIZW3ljKswEe4OLxnVJ7lPqZF5JKjlXdgCjbPSimsHqyAbC5pQN/Q==} + '@cspell/dict-lua@4.0.8': + resolution: {integrity: sha512-N4PkgNDMu9JVsRu7JBS/3E/dvfItRgk9w5ga2dKq+JupP2Y3lojNaAVFhXISh4Y0a6qXDn2clA6nvnavQ/jjLA==} - '@cspell/dict-makefile@1.0.4': - resolution: {integrity: sha512-E4hG/c0ekPqUBvlkrVvzSoAA+SsDA9bLi4xSV3AXHTVru7Y2bVVGMPtpfF+fI3zTkww/jwinprcU1LSohI3ylw==} + '@cspell/dict-makefile@1.0.5': + resolution: {integrity: sha512-4vrVt7bGiK8Rx98tfRbYo42Xo2IstJkAF4tLLDMNQLkQ86msDlYSKG1ZCk8Abg+EdNcFAjNhXIiNO+w4KflGAQ==} - '@cspell/dict-markdown@2.0.10': - resolution: {integrity: sha512-vtVa6L/84F9sTjclTYDkWJF/Vx2c5xzxBKkQp+CEFlxOF2SYgm+RSoEvAvg5vj4N5kuqR4350ZlY3zl2eA3MXw==} + '@cspell/dict-markdown@2.0.12': + resolution: {integrity: sha512-ufwoliPijAgWkD/ivAMC+A9QD895xKiJRF/fwwknQb7kt7NozTLKFAOBtXGPJAB4UjhGBpYEJVo2elQ0FCAH9A==} peerDependencies: - '@cspell/dict-css': ^4.0.17 - '@cspell/dict-html': ^4.0.11 - '@cspell/dict-html-symbol-entities': ^4.0.3 - '@cspell/dict-typescript': ^3.2.1 + '@cspell/dict-css': ^4.0.18 + '@cspell/dict-html': ^4.0.12 + '@cspell/dict-html-symbol-entities': ^4.0.4 + '@cspell/dict-typescript': ^3.2.3 - '@cspell/dict-monkeyc@1.0.10': - resolution: {integrity: sha512-7RTGyKsTIIVqzbvOtAu6Z/lwwxjGRtY5RkKPlXKHEoEAgIXwfDxb5EkVwzGQwQr8hF/D3HrdYbRT8MFBfsueZw==} + '@cspell/dict-monkeyc@1.0.11': + resolution: {integrity: sha512-7Q1Ncu0urALI6dPTrEbSTd//UK0qjRBeaxhnm8uY5fgYNFYAG+u4gtnTIo59S6Bw5P++4H3DiIDYoQdY/lha8w==} - '@cspell/dict-node@5.0.7': - resolution: {integrity: sha512-ZaPpBsHGQCqUyFPKLyCNUH2qzolDRm1/901IO8e7btk7bEDF56DN82VD43gPvD4HWz3yLs/WkcLa01KYAJpnOw==} + '@cspell/dict-node@5.0.8': + resolution: {integrity: sha512-AirZcN2i84ynev3p2/1NCPEhnNsHKMz9zciTngGoqpdItUb2bDt1nJBjwlsrFI78GZRph/VaqTVFwYikmncpXg==} - '@cspell/dict-npm@5.2.3': - resolution: {integrity: sha512-EdGkCpAq66Mhi9Qldgsr+NvPVL4TdtmdlqDe4VBp0P3n6J0B7b0jT1MlVDIiLR+F1eqBfL0qjfHf0ey1CafeNw==} + '@cspell/dict-npm@5.2.19': + resolution: {integrity: sha512-fg23oFvKTsGjGB6DkwCUzZrLZPwp+ItSV0UXS+n6JbcH5dj3CP6MDmdwNX6s6oaAovIFKmwFBP73GUqnjMmnpQ==} - '@cspell/dict-php@4.0.14': - resolution: {integrity: sha512-7zur8pyncYZglxNmqsRycOZ6inpDoVd4yFfz1pQRe5xaRWMiK3Km4n0/X/1YMWhh3e3Sl/fQg5Axb2hlN68t1g==} + '@cspell/dict-php@4.1.0': + resolution: {integrity: sha512-dTDeabyOj7eFvn2Q4Za3uVXM2+SzeFMqX8ly2P0XTo4AzbCmI2hulFD/QIADwWmwiRrInbbf8cxwFHNIYrXl4w==} - '@cspell/dict-powershell@5.0.14': - resolution: {integrity: sha512-ktjjvtkIUIYmj/SoGBYbr3/+CsRGNXGpvVANrY0wlm/IoGlGywhoTUDYN0IsGwI2b8Vktx3DZmQkfb3Wo38jBA==} + '@cspell/dict-powershell@5.0.15': + resolution: {integrity: sha512-l4S5PAcvCFcVDMJShrYD0X6Huv9dcsQPlsVsBGbH38wvuN7gS7+GxZFAjTNxDmTY1wrNi1cCatSg6Pu2BW4rgg==} - '@cspell/dict-public-licenses@2.0.13': - resolution: {integrity: sha512-1Wdp/XH1ieim7CadXYE7YLnUlW0pULEjVl9WEeziZw3EKCAw8ZI8Ih44m4bEa5VNBLnuP5TfqC4iDautAleQzQ==} + '@cspell/dict-public-licenses@2.0.15': + resolution: {integrity: sha512-cJEOs901H13Pfy0fl4dCD1U+xpWIMaEPq8MeYU83FfDZvellAuSo4GqWCripfIqlhns/L6+UZEIJSOZnjgy7Wg==} - '@cspell/dict-python@4.2.18': - resolution: {integrity: sha512-hYczHVqZBsck7DzO5LumBLJM119a3F17aj8a7lApnPIS7cmEwnPc2eACNscAHDk7qAo2127oI7axUoFMe9/g1g==} + '@cspell/dict-python@4.2.21': + resolution: {integrity: sha512-M9OgwXWhpZqEZqKU2psB2DFsT8q5SwEahkQeIpNIRWIErjwG7I9yYhhfvPz6s5gMCMhhb3hqcPJTnmdgqGrQyg==} - '@cspell/dict-r@2.1.0': - resolution: {integrity: sha512-k2512wgGG0lTpTYH9w5Wwco+lAMf3Vz7mhqV8+OnalIE7muA0RSuD9tWBjiqLcX8zPvEJr4LdgxVju8Gk3OKyA==} + '@cspell/dict-r@2.1.1': + resolution: {integrity: sha512-71Ka+yKfG4ZHEMEmDxc6+blFkeTTvgKbKAbwiwQAuKl3zpqs1Y0vUtwW2N4b3LgmSPhV3ODVY0y4m5ofqDuKMw==} - '@cspell/dict-ruby@5.0.8': - resolution: {integrity: sha512-ixuTneU0aH1cPQRbWJvtvOntMFfeQR2KxT8LuAv5jBKqQWIHSxzGlp+zX3SVyoeR0kOWiu64/O5Yn836A5yMcQ==} + '@cspell/dict-ruby@5.0.9': + resolution: {integrity: sha512-H2vMcERMcANvQshAdrVx0XoWaNX8zmmiQN11dZZTQAZaNJ0xatdJoSqY8C8uhEMW89bfgpN+NQgGuDXW2vmXEw==} - '@cspell/dict-rust@4.0.11': - resolution: {integrity: sha512-OGWDEEzm8HlkSmtD8fV3pEcO2XBpzG2XYjgMCJCRwb2gRKvR+XIm6Dlhs04N/K2kU+iH8bvrqNpM8fS/BFl0uw==} + '@cspell/dict-rust@4.0.12': + resolution: {integrity: sha512-z2QiH+q9UlNhobBJArvILRxV8Jz0pKIK7gqu4TgmEYyjiu1TvnGZ1tbYHeu9w3I/wOP6UMDoCBTty5AlYfW0mw==} - '@cspell/dict-scala@5.0.7': - resolution: {integrity: sha512-yatpSDW/GwulzO3t7hB5peoWwzo+Y3qTc0pO24Jf6f88jsEeKmDeKkfgPbYuCgbE4jisGR4vs4+jfQZDIYmXPA==} + '@cspell/dict-scala@5.0.8': + resolution: {integrity: sha512-YdftVmumv8IZq9zu1gn2U7A4bfM2yj9Vaupydotyjuc+EEZZSqAafTpvW/jKLWji2TgybM1L2IhmV0s/Iv9BTw==} - '@cspell/dict-shell@1.1.0': - resolution: {integrity: sha512-D/xHXX7T37BJxNRf5JJHsvziFDvh23IF/KvkZXNSh8VqcRdod3BAz9VGHZf6VDqcZXr1VRqIYR3mQ8DSvs3AVQ==} + '@cspell/dict-shell@1.1.2': + resolution: {integrity: sha512-WqOUvnwcHK1X61wAfwyXq04cn7KYyskg90j4lLg3sGGKMW9Sq13hs91pqrjC44Q+lQLgCobrTkMDw9Wyl9nRFA==} - '@cspell/dict-software-terms@5.0.9': - resolution: {integrity: sha512-Zcm7PMxLSmgJNeICsj1jfhOIS8sOFGgmV1EsTo+EALXWU5pcD6u/P+B9sY0f/9M8V82VaYmTeNVwSlZNh5h94w==} + '@cspell/dict-software-terms@5.1.10': + resolution: {integrity: sha512-ffnsKiDL5acUerJ/lDiIT0y/tfO9Jk1yp8RpAl0diOUj5iQuT4hXVfgQSx7ppseXWAGN+UgTRYWiKDb1zM3lqg==} - '@cspell/dict-sql@2.2.0': - resolution: {integrity: sha512-MUop+d1AHSzXpBvQgQkCiok8Ejzb+nrzyG16E8TvKL2MQeDwnIvMe3bv90eukP6E1HWb+V/MA/4pnq0pcJWKqQ==} + '@cspell/dict-sql@2.2.1': + resolution: {integrity: sha512-qDHF8MpAYCf4pWU8NKbnVGzkoxMNrFqBHyG/dgrlic5EQiKANCLELYtGlX5auIMDLmTf1inA0eNtv74tyRJ/vg==} - '@cspell/dict-svelte@1.0.6': - resolution: {integrity: sha512-8LAJHSBdwHCoKCSy72PXXzz7ulGROD0rP1CQ0StOqXOOlTUeSFaJJlxNYjlONgd2c62XBQiN2wgLhtPN+1Zv7Q==} + '@cspell/dict-svelte@1.0.7': + resolution: {integrity: sha512-hGZsGqP0WdzKkdpeVLBivRuSNzOTvN036EBmpOwxH+FTY2DuUH7ecW+cSaMwOgmq5JFSdTcbTNFlNC8HN8lhaQ==} - '@cspell/dict-swift@2.0.5': - resolution: {integrity: sha512-3lGzDCwUmnrfckv3Q4eVSW3sK3cHqqHlPprFJZD4nAqt23ot7fic5ALR7J4joHpvDz36nHX34TgcbZNNZOC/JA==} + '@cspell/dict-swift@2.0.6': + resolution: {integrity: sha512-PnpNbrIbex2aqU1kMgwEKvCzgbkHtj3dlFLPMqW1vSniop7YxaDTtvTUO4zA++ugYAEL+UK8vYrBwDPTjjvSnA==} - '@cspell/dict-terraform@1.1.1': - resolution: {integrity: sha512-07KFDwCU7EnKl4hOZLsLKlj6Zceq/IsQ3LRWUyIjvGFfZHdoGtFdCp3ZPVgnFaAcd/DKv+WVkrOzUBSYqHopQQ==} + '@cspell/dict-terraform@1.1.3': + resolution: {integrity: sha512-gr6wxCydwSFyyBKhBA2xkENXtVFToheqYYGFvlMZXWjviynXmh+NK/JTvTCk/VHk3+lzbO9EEQKee6VjrAUSbA==} - '@cspell/dict-typescript@3.2.1': - resolution: {integrity: sha512-jdnKg4rBl75GUBTsUD6nTJl7FGvaIt5wWcWP7TZSC3rV1LfkwvbUiY3PiGpfJlAIdnLYSeFWIpYU9gyVgz206w==} + '@cspell/dict-typescript@3.2.3': + resolution: {integrity: sha512-zXh1wYsNljQZfWWdSPYwQhpwiuW0KPW1dSd8idjMRvSD0aSvWWHoWlrMsmZeRl4qM4QCEAjua8+cjflm41cQBg==} - '@cspell/dict-vue@3.0.4': - resolution: {integrity: sha512-0dPtI0lwHcAgSiQFx8CzvqjdoXROcH+1LyqgROCpBgppommWpVhbQ0eubnKotFEXgpUCONVkeZJ6Ql8NbTEu+w==} + '@cspell/dict-vue@3.0.5': + resolution: {integrity: sha512-Mqutb8jbM+kIcywuPQCCaK5qQHTdaByoEO2J9LKFy3sqAdiBogNkrplqUK0HyyRFgCfbJUgjz3N85iCMcWH0JA==} '@cspell/dynamic-import@9.0.1': resolution: {integrity: sha512-BoWzHwkufo90ubMZUN8Jy4HQYYWFW7psVCdG/4RUgfvVnazkPfLxWBbsPQsLrlIP0utaqei7D9FU0K7r7mpl4A==} @@ -1239,14 +1236,14 @@ packages: '@drizzle-team/brocli@0.10.2': resolution: {integrity: sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==} - '@emnapi/core@1.4.0': - resolution: {integrity: sha512-H+N/FqT07NmLmt6OFFtDfwe8PNygprzBikrEMyQfgqSmT0vzE515Pz7R8izwB9q/zsH/MA64AKoul3sA6/CzVg==} + '@emnapi/core@1.6.0': + resolution: {integrity: sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg==} - '@emnapi/runtime@1.4.3': - resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} + '@emnapi/runtime@1.6.0': + resolution: {integrity: sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==} - '@emnapi/wasi-threads@1.0.1': - resolution: {integrity: sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==} + '@emnapi/wasi-threads@1.1.0': + resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} '@esbuild-kit/core-utils@3.3.2': resolution: {integrity: sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==} @@ -1256,8 +1253,8 @@ packages: resolution: {integrity: sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==} deprecated: 'Merged into tsx: https://tsx.is' - '@esbuild/aix-ppc64@0.25.2': - resolution: {integrity: sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==} + '@esbuild/aix-ppc64@0.25.11': + resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] @@ -1268,8 +1265,8 @@ packages: cpu: [arm64] os: [android] - '@esbuild/android-arm64@0.25.2': - resolution: {integrity: sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==} + '@esbuild/android-arm64@0.25.11': + resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} engines: {node: '>=18'} cpu: [arm64] os: [android] @@ -1280,8 +1277,8 @@ packages: cpu: [arm] os: [android] - '@esbuild/android-arm@0.25.2': - resolution: {integrity: sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==} + '@esbuild/android-arm@0.25.11': + resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} engines: {node: '>=18'} cpu: [arm] os: [android] @@ -1292,8 +1289,8 @@ packages: cpu: [x64] os: [android] - '@esbuild/android-x64@0.25.2': - resolution: {integrity: sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==} + '@esbuild/android-x64@0.25.11': + resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==} engines: {node: '>=18'} cpu: [x64] os: [android] @@ -1304,8 +1301,8 @@ packages: cpu: [arm64] os: [darwin] - '@esbuild/darwin-arm64@0.25.2': - resolution: {integrity: sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==} + '@esbuild/darwin-arm64@0.25.11': + resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] @@ -1316,8 +1313,8 @@ packages: cpu: [x64] os: [darwin] - '@esbuild/darwin-x64@0.25.2': - resolution: {integrity: sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==} + '@esbuild/darwin-x64@0.25.11': + resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] @@ -1328,8 +1325,8 @@ packages: cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-arm64@0.25.2': - resolution: {integrity: sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==} + '@esbuild/freebsd-arm64@0.25.11': + resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] @@ -1340,8 +1337,8 @@ packages: cpu: [x64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.2': - resolution: {integrity: sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==} + '@esbuild/freebsd-x64@0.25.11': + resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] @@ -1352,8 +1349,8 @@ packages: cpu: [arm64] os: [linux] - '@esbuild/linux-arm64@0.25.2': - resolution: {integrity: sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==} + '@esbuild/linux-arm64@0.25.11': + resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} engines: {node: '>=18'} cpu: [arm64] os: [linux] @@ -1364,8 +1361,8 @@ packages: cpu: [arm] os: [linux] - '@esbuild/linux-arm@0.25.2': - resolution: {integrity: sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==} + '@esbuild/linux-arm@0.25.11': + resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} engines: {node: '>=18'} cpu: [arm] os: [linux] @@ -1376,8 +1373,8 @@ packages: cpu: [ia32] os: [linux] - '@esbuild/linux-ia32@0.25.2': - resolution: {integrity: sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==} + '@esbuild/linux-ia32@0.25.11': + resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} engines: {node: '>=18'} cpu: [ia32] os: [linux] @@ -1388,8 +1385,8 @@ packages: cpu: [loong64] os: [linux] - '@esbuild/linux-loong64@0.25.2': - resolution: {integrity: sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==} + '@esbuild/linux-loong64@0.25.11': + resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} engines: {node: '>=18'} cpu: [loong64] os: [linux] @@ -1400,8 +1397,8 @@ packages: cpu: [mips64el] os: [linux] - '@esbuild/linux-mips64el@0.25.2': - resolution: {integrity: sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==} + '@esbuild/linux-mips64el@0.25.11': + resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] @@ -1412,8 +1409,8 @@ packages: cpu: [ppc64] os: [linux] - '@esbuild/linux-ppc64@0.25.2': - resolution: {integrity: sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==} + '@esbuild/linux-ppc64@0.25.11': + resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] @@ -1424,8 +1421,8 @@ packages: cpu: [riscv64] os: [linux] - '@esbuild/linux-riscv64@0.25.2': - resolution: {integrity: sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==} + '@esbuild/linux-riscv64@0.25.11': + resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] @@ -1436,8 +1433,8 @@ packages: cpu: [s390x] os: [linux] - '@esbuild/linux-s390x@0.25.2': - resolution: {integrity: sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==} + '@esbuild/linux-s390x@0.25.11': + resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} engines: {node: '>=18'} cpu: [s390x] os: [linux] @@ -1448,14 +1445,14 @@ packages: cpu: [x64] os: [linux] - '@esbuild/linux-x64@0.25.2': - resolution: {integrity: sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==} + '@esbuild/linux-x64@0.25.11': + resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.2': - resolution: {integrity: sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==} + '@esbuild/netbsd-arm64@0.25.11': + resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] @@ -1466,14 +1463,14 @@ packages: cpu: [x64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.2': - resolution: {integrity: sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==} + '@esbuild/netbsd-x64@0.25.11': + resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.2': - resolution: {integrity: sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==} + '@esbuild/openbsd-arm64@0.25.11': + resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] @@ -1484,20 +1481,26 @@ packages: cpu: [x64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.2': - resolution: {integrity: sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==} + '@esbuild/openbsd-x64@0.25.11': + resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] + '@esbuild/openharmony-arm64@0.25.11': + resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + '@esbuild/sunos-x64@0.18.20': resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} cpu: [x64] os: [sunos] - '@esbuild/sunos-x64@0.25.2': - resolution: {integrity: sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==} + '@esbuild/sunos-x64@0.25.11': + resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==} engines: {node: '>=18'} cpu: [x64] os: [sunos] @@ -1508,8 +1511,8 @@ packages: cpu: [arm64] os: [win32] - '@esbuild/win32-arm64@0.25.2': - resolution: {integrity: sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==} + '@esbuild/win32-arm64@0.25.11': + resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} engines: {node: '>=18'} cpu: [arm64] os: [win32] @@ -1520,8 +1523,8 @@ packages: cpu: [ia32] os: [win32] - '@esbuild/win32-ia32@0.25.2': - resolution: {integrity: sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==} + '@esbuild/win32-ia32@0.25.11': + resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} engines: {node: '>=18'} cpu: [ia32] os: [win32] @@ -1532,28 +1535,28 @@ packages: cpu: [x64] os: [win32] - '@esbuild/win32-x64@0.25.2': - resolution: {integrity: sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==} + '@esbuild/win32-x64@0.25.11': + resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.7.0': - resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.12.1': - resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.20.0': - resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} + '@eslint/config-array@0.20.1': + resolution: {integrity: sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.2.1': - resolution: {integrity: sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==} + '@eslint/config-helpers@0.2.3': + resolution: {integrity: sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/core@0.10.0': @@ -1572,6 +1575,10 @@ packages: resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/core@0.15.2': + resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1588,16 +1595,16 @@ packages: resolution: {integrity: sha512-J07rR8uBSNFJ9iliNINrchilpkmCihPmTVotpThUeKEn5G8aBBZnkjNBy/zovhJA5LBk1vWU9UDlhqKSc/dViQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/object-schema@2.1.6': - resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + '@eslint/object-schema@2.1.7': + resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/plugin-kit@0.2.8': resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.3.1': - resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==} + '@eslint/plugin-kit@0.3.5': + resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@hono/node-server@1.14.2': @@ -1616,24 +1623,20 @@ packages: resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/momoa@3.3.8': - resolution: {integrity: sha512-/3PZzor2imi/RLLcnHztkwA79txiVvW145Ve2cp5dxRcH5qOUNJPToasqLFHniTfw4B4lT7jGDdBOPXbXYlIMQ==} + '@humanwhocodes/momoa@3.3.10': + resolution: {integrity: sha512-KWiFQpSAqEIyrTXko3hFNLeQvSK8zXlJQzhhxsyVn58WFRYXST99b3Nqnu+ttOtjds2Pl2grUHGpe2NzhPynuQ==} engines: {node: '>=18'} - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} - - '@humanwhocodes/retry@0.4.2': - resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} '@img/sharp-darwin-arm64@0.33.5': @@ -1741,8 +1744,21 @@ packages: cpu: [x64] os: [win32] - '@inquirer/checkbox@4.1.6': - resolution: {integrity: sha512-62u896rWCtKKE43soodq5e/QcRsA22I+7/4Ov7LESWnKRO6BVo2A1DFLDmXL9e28TB0CfHc3YtkbPm7iwajqkg==} + '@inquirer/ansi@1.0.1': + resolution: {integrity: sha512-yqq0aJW/5XPhi5xOAL1xRCpe1eh8UFVgYFpFsjEqmIR8rKLyP+HINvFXwUaxYICflJrVlxnp7lLN6As735kVpw==} + engines: {node: '>=18'} + + '@inquirer/checkbox@4.3.0': + resolution: {integrity: sha512-5+Q3PKH35YsnoPTh75LucALdAxom6xh5D1oeY561x4cqBuH24ZFVyFREPe14xgnrtmGu3EEt1dIi60wRVSnGCw==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@inquirer/confirm@5.1.19': + resolution: {integrity: sha512-wQNz9cfcxrtEnUyG5PndC8g3gZ7lGDBzmWiXZkX8ot3vfZ+/BLjR8EvyGX4YzQLeVqtAlY/YScZpW7CW8qMoDQ==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1750,8 +1766,8 @@ packages: '@types/node': optional: true - '@inquirer/confirm@5.1.10': - resolution: {integrity: sha512-FxbQ9giWxUWKUk2O5XZ6PduVnH2CZ/fmMKMBkH71MHJvWr7WL5AHKevhzF1L5uYWB2P548o1RzVxrNd3dpmk6g==} + '@inquirer/core@10.3.0': + resolution: {integrity: sha512-Uv2aPPPSK5jeCplQmQ9xadnFx2Zhj9b5Dj7bU6ZeCdDNNY11nhYy4btcSdtDguHqCT2h5oNeQTcUNSGGLA7NTA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1759,8 +1775,8 @@ packages: '@types/node': optional: true - '@inquirer/core@10.1.11': - resolution: {integrity: sha512-BXwI/MCqdtAhzNQlBEFE7CEflhPkl/BqvAuV/aK6lW3DClIfYVDWPP/kXuXHtBWC7/EEbNqd/1BGq2BGBBnuxw==} + '@inquirer/editor@4.2.21': + resolution: {integrity: sha512-MjtjOGjr0Kh4BciaFShYpZ1s9400idOdvQ5D7u7lE6VztPFoyLcVNE5dXBmEEIQq5zi4B9h2kU+q7AVBxJMAkQ==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1768,8 +1784,8 @@ packages: '@types/node': optional: true - '@inquirer/editor@4.2.11': - resolution: {integrity: sha512-YoZr0lBnnLFPpfPSNsQ8IZyKxU47zPyVi9NLjCWtna52//M/xuL0PGPAxHxxYhdOhnvY2oBafoM+BI5w/JK7jw==} + '@inquirer/expand@4.0.21': + resolution: {integrity: sha512-+mScLhIcbPFmuvU3tAGBed78XvYHSvCl6dBiYMlzCLhpr0bzGzd8tfivMMeqND6XZiaZ1tgusbUHJEfc6YzOdA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1777,8 +1793,8 @@ packages: '@types/node': optional: true - '@inquirer/expand@4.0.13': - resolution: {integrity: sha512-HgYNWuZLHX6q5y4hqKhwyytqAghmx35xikOGY3TcgNiElqXGPas24+UzNPOwGUZa5Dn32y25xJqVeUcGlTv+QQ==} + '@inquirer/external-editor@1.0.2': + resolution: {integrity: sha512-yy9cOoBnx58TlsPrIxauKIFQTiyH+0MK4e97y4sV9ERbI+zDxw7i2hxHLCIEGIE/8PPvDxGhgzIOTSOWcs6/MQ==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1786,12 +1802,12 @@ packages: '@types/node': optional: true - '@inquirer/figures@1.0.11': - resolution: {integrity: sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==} + '@inquirer/figures@1.0.14': + resolution: {integrity: sha512-DbFgdt+9/OZYFM+19dbpXOSeAstPy884FPy1KjDu4anWwymZeOYhMY1mdFri172htv6mvc/uvIAAi7b7tvjJBQ==} engines: {node: '>=18'} - '@inquirer/input@4.1.10': - resolution: {integrity: sha512-kV3BVne3wJ+j6reYQUZi/UN9NZGZLxgc/tfyjeK3mrx1QI7RXPxGp21IUTv+iVHcbP4ytZALF8vCHoxyNSC6qg==} + '@inquirer/input@4.2.5': + resolution: {integrity: sha512-7GoWev7P6s7t0oJbenH0eQ0ThNdDJbEAEtVt9vsrYZ9FulIokvd823yLyhQlWHJPGce1wzP53ttfdCZmonMHyA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1799,8 +1815,8 @@ packages: '@types/node': optional: true - '@inquirer/number@3.0.13': - resolution: {integrity: sha512-IrLezcg/GWKS8zpKDvnJ/YTflNJdG0qSFlUM/zNFsdi4UKW/CO+gaJpbMgQ20Q58vNKDJbEzC6IebdkprwL6ew==} + '@inquirer/number@3.0.21': + resolution: {integrity: sha512-5QWs0KGaNMlhbdhOSCFfKsW+/dcAVC2g4wT/z2MCiZM47uLgatC5N20kpkDQf7dHx+XFct/MJvvNGy6aYJn4Pw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1808,8 +1824,8 @@ packages: '@types/node': optional: true - '@inquirer/password@4.0.13': - resolution: {integrity: sha512-NN0S/SmdhakqOTJhDwOpeBEEr8VdcYsjmZHDb0rblSh2FcbXQOr+2IApP7JG4WE3sxIdKytDn4ed3XYwtHxmJQ==} + '@inquirer/password@4.0.21': + resolution: {integrity: sha512-xxeW1V5SbNFNig2pLfetsDb0svWlKuhmr7MPJZMYuDnCTkpVBI+X/doudg4pznc1/U+yYmWFFOi4hNvGgUo7EA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1826,8 +1842,8 @@ packages: '@types/node': optional: true - '@inquirer/rawlist@4.1.1': - resolution: {integrity: sha512-VBUC0jPN2oaOq8+krwpo/mf3n/UryDUkKog3zi+oIi8/e5hykvdntgHUB9nhDM78RubiyR1ldIOfm5ue+2DeaQ==} + '@inquirer/prompts@7.9.0': + resolution: {integrity: sha512-X7/+dG9SLpSzRkwgG5/xiIzW0oMrV3C0HOa7YHG1WnrLK+vCQHfte4k/T80059YBdei29RBC3s+pSMvPJDU9/A==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1835,8 +1851,8 @@ packages: '@types/node': optional: true - '@inquirer/search@3.0.13': - resolution: {integrity: sha512-9g89d2c5Izok/Gw/U7KPC3f9kfe5rA1AJ24xxNZG0st+vWekSk7tB9oE+dJv5JXd0ZSijomvW0KPMoBd8qbN4g==} + '@inquirer/rawlist@4.1.9': + resolution: {integrity: sha512-AWpxB7MuJrRiSfTKGJ7Y68imYt8P9N3Gaa7ySdkFj1iWjr6WfbGAhdZvw/UnhFXTHITJzxGUI9k8IX7akAEBCg==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1844,8 +1860,8 @@ packages: '@types/node': optional: true - '@inquirer/select@4.2.1': - resolution: {integrity: sha512-gt1Kd5XZm+/ddemcT3m23IP8aD8rC9drRckWoP/1f7OL46Yy2FGi8DSmNjEjQKtPl6SV96Kmjbl6p713KXJ/Jg==} + '@inquirer/search@3.2.0': + resolution: {integrity: sha512-a5SzB/qrXafDX1Z4AZW3CsVoiNxcIYCzYP7r9RzrfMpaLpB+yWi5U8BWagZyLmwR0pKbbL5umnGRd0RzGVI8bQ==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1853,8 +1869,8 @@ packages: '@types/node': optional: true - '@inquirer/type@3.0.6': - resolution: {integrity: sha512-/mKVCtVpyBu3IDarv0G+59KC4stsD5mDsGpYh+GKs1NZT88Jh52+cuoA1AtLk2Q0r/quNl+1cSUyLRHBFeD0XA==} + '@inquirer/select@4.4.0': + resolution: {integrity: sha512-kaC3FHsJZvVyIjYBs5Ih8y8Bj4P/QItQWrZW22WJax7zTN+ZPXVGuOM55vzbdCP9zKUiBd9iEJVdesujfF+cAA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -1862,23 +1878,35 @@ packages: '@types/node': optional: true - '@jridgewell/gen-mapping@0.3.8': - resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} - engines: {node: '>=6.0.0'} + '@inquirer/type@3.0.9': + resolution: {integrity: sha512-QPaNt/nmE2bLGQa9b7wwyRJoLZ7pN6rcyXvzU0YCmivmJyq1BVo94G98tStRWkoD1RgDX5C+dPlhhHzNdu/W/w==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + + '@isaacs/balanced-match@4.0.1': + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} + engines: {node: 20 || >=22} + + '@isaacs/brace-expansion@5.0.0': + resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} + engines: {node: 20 || >=22} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/set-array@1.2.1': - resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} - engines: {node: '>=6.0.0'} - - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/trace-mapping@0.3.25': - resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} '@jsep-plugin/assignment@1.3.0': resolution: {integrity: sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==} @@ -1907,11 +1935,11 @@ packages: '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} - '@mdx-js/mdx@3.1.0': - resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==} + '@mdx-js/mdx@3.1.1': + resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} - '@mdx-js/react@3.1.0': - resolution: {integrity: sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==} + '@mdx-js/react@3.1.1': + resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} peerDependencies: '@types/react': '>=16' react: '>=16' @@ -1928,8 +1956,8 @@ packages: resolution: {integrity: sha512-5lBfLPL2vfMQlU9o9cGWSep0sWFO4omW/hCoT7gV9Hehbyq915KRmvuXJ2kFksnByLKcT3RSh5WpnTgHnkGwew==} engines: {node: '>=18.0.0'} - '@mintlify/mdx@1.0.1': - resolution: {integrity: sha512-zrzt8nxoIgJeSUeuJaC8pbd5EHKjCq30qV2HMoqIHLjeE0l7hkMgjBPNWNde7CYDPig1ODS1kPuE5Bnt+/+PIg==} + '@mintlify/mdx@1.1.0': + resolution: {integrity: sha512-Jkefouzft4opHtEdWqzHUMqrJ3IQ6Zp2f1afXL22yAPshPGzifo1yG1v7/yIS2VPjM1Tk23hekJFaGsSQscF+A==} peerDependencies: react: ^18.3.1 react-dom: ^18.3.1 @@ -1960,15 +1988,11 @@ packages: '@multiformats/base-x@4.0.1': resolution: {integrity: sha512-eMk0b9ReBbV23xXU693TAIrLyeO5iTgBZGSJfpqriG8UkYvr/hC9u9pyMlAakDNHWmbhMZCDs6KQO0jzKD8OTw==} - '@napi-rs/wasm-runtime@0.2.9': - resolution: {integrity: sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg==} + '@napi-rs/wasm-runtime@0.2.12': + resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} - '@neondatabase/serverless@1.0.0': - resolution: {integrity: sha512-XWmEeWpBXIoksZSDN74kftfTnXFEGZ3iX8jbANWBc+ag6dsiQuvuR4LgB0WdCOKMb5AQgjqgufc0TgAsZubUYw==} - engines: {node: '>=19.0.0'} - - '@noble/ciphers@1.2.1': - resolution: {integrity: sha512-rONPWMC7PeExE077uLE4oqWrZ1IvAfz3oH9LibVAcVCopJiA9R62uavnbEzdkVmJYI6M6Zgkbeb07+tWjlq2XA==} + '@noble/ciphers@1.3.0': + resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} engines: {node: ^14.21.3 || >=16} '@noble/curves@1.8.2': @@ -2009,11 +2033,8 @@ packages: '@oxc-project/types@0.70.0': resolution: {integrity: sha512-ngyLUpUjO3dpqygSRQDx7nMx8+BmXbWOU4oIwTJFV2MVIDG7knIZwgdwXlQWLg3C3oxg1lS7ppMtPKqKFb7wzw==} - '@petamoriken/float16@3.9.2': - resolution: {integrity: sha512-VgffxawQde93xKxT3qap3OH+meZf7VaSB5Sqd4Rqc+FP5alWbpOyan/7tRbOAvynjpG3GpdtAuGU/NdhQpmrog==} - - '@pkgr/core@0.2.4': - resolution: {integrity: sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw==} + '@pkgr/core@0.2.9': + resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} '@puppeteer/browsers@2.3.0': @@ -2021,9 +2042,8 @@ packages: engines: {node: '>=18'} hasBin: true - '@quansync/fs@0.1.2': - resolution: {integrity: sha512-ezIadUb1aFhwJLd++WVqVpi9rnlX8vnd4ju7saPhwLHJN1mJgOv0puePTGV+FbtSnWtwoHDT8lAm4kagDZmpCg==} - engines: {node: '>=20.0.0'} + '@quansync/fs@0.1.5': + resolution: {integrity: sha512-lNS9hL2aS2NZgNW7BBj+6EBl4rOf8l+tQ0eRY6JWCI8jI2kc53gSoqbjojU0OnAWhzoXiOjFyGsHcDGePB3lhA==} '@rolldown/binding-darwin-arm64@1.0.0-beta.9': resolution: {integrity: sha512-geUG/FUpm+membLC0NQBb39vVyOfguYZ2oyXc7emr6UjH6TeEECT4b0CPZXKFnELareTiU/Jfl70/eEgNxyQeA==} @@ -2088,108 +2108,118 @@ packages: '@rolldown/pluginutils@1.0.0-beta.9': resolution: {integrity: sha512-e9MeMtVWo186sgvFFJOPGy7/d2j2mZhLJIdVW0C/xDluuOvymEATqz6zKsP0ZmXGzQtqlyjz5sC1sYQUoJG98w==} - '@rollup/rollup-android-arm-eabi@4.39.0': - resolution: {integrity: sha512-lGVys55Qb00Wvh8DMAocp5kIcaNzEFTmGhfFd88LfaogYTRKrdxgtlO5H6S49v2Nd8R2C6wLOal0qv6/kCkOwA==} + '@rollup/rollup-android-arm-eabi@4.52.5': + resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.39.0': - resolution: {integrity: sha512-It9+M1zE31KWfqh/0cJLrrsCPiF72PoJjIChLX+rEcujVRCb4NLQ5QzFkzIZW8Kn8FTbvGQBY5TkKBau3S8cCQ==} + '@rollup/rollup-android-arm64@4.52.5': + resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.39.0': - resolution: {integrity: sha512-lXQnhpFDOKDXiGxsU9/l8UEGGM65comrQuZ+lDcGUx+9YQ9dKpF3rSEGepyeR5AHZ0b5RgiligsBhWZfSSQh8Q==} + '@rollup/rollup-darwin-arm64@4.52.5': + resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.39.0': - resolution: {integrity: sha512-mKXpNZLvtEbgu6WCkNij7CGycdw9cJi2k9v0noMb++Vab12GZjFgUXD69ilAbBh034Zwn95c2PNSz9xM7KYEAQ==} + '@rollup/rollup-darwin-x64@4.52.5': + resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.39.0': - resolution: {integrity: sha512-jivRRlh2Lod/KvDZx2zUR+I4iBfHcu2V/BA2vasUtdtTN2Uk3jfcZczLa81ESHZHPHy4ih3T/W5rPFZ/hX7RtQ==} + '@rollup/rollup-freebsd-arm64@4.52.5': + resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.39.0': - resolution: {integrity: sha512-8RXIWvYIRK9nO+bhVz8DwLBepcptw633gv/QT4015CpJ0Ht8punmoHU/DuEd3iw9Hr8UwUV+t+VNNuZIWYeY7Q==} + '@rollup/rollup-freebsd-x64@4.52.5': + resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.39.0': - resolution: {integrity: sha512-mz5POx5Zu58f2xAG5RaRRhp3IZDK7zXGk5sdEDj4o96HeaXhlUwmLFzNlc4hCQi5sGdR12VDgEUqVSHer0lI9g==} + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': + resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.39.0': - resolution: {integrity: sha512-+YDwhM6gUAyakl0CD+bMFpdmwIoRDzZYaTWV3SDRBGkMU/VpIBYXXEvkEcTagw/7VVkL2vA29zU4UVy1mP0/Yw==} + '@rollup/rollup-linux-arm-musleabihf@4.52.5': + resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.39.0': - resolution: {integrity: sha512-EKf7iF7aK36eEChvlgxGnk7pdJfzfQbNvGV/+l98iiMwU23MwvmV0Ty3pJ0p5WQfm3JRHOytSIqD9LB7Bq7xdQ==} + '@rollup/rollup-linux-arm64-gnu@4.52.5': + resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.39.0': - resolution: {integrity: sha512-vYanR6MtqC7Z2SNr8gzVnzUul09Wi1kZqJaek3KcIlI/wq5Xtq4ZPIZ0Mr/st/sv/NnaPwy/D4yXg5x0B3aUUA==} + '@rollup/rollup-linux-arm64-musl@4.52.5': + resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.39.0': - resolution: {integrity: sha512-NMRUT40+h0FBa5fb+cpxtZoGAggRem16ocVKIv5gDB5uLDgBIwrIsXlGqYbLwW8YyO3WVTk1FkFDjMETYlDqiw==} + '@rollup/rollup-linux-loong64-gnu@4.52.5': + resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.39.0': - resolution: {integrity: sha512-0pCNnmxgduJ3YRt+D+kJ6Ai/r+TaePu9ZLENl+ZDV/CdVczXl95CbIiwwswu4L+K7uOIGf6tMo2vm8uadRaICQ==} + '@rollup/rollup-linux-ppc64-gnu@4.52.5': + resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.39.0': - resolution: {integrity: sha512-t7j5Zhr7S4bBtksT73bO6c3Qa2AV/HqiGlj9+KB3gNF5upcVkx+HLgxTm8DK4OkzsOYqbdqbLKwvGMhylJCPhQ==} + '@rollup/rollup-linux-riscv64-gnu@4.52.5': + resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.39.0': - resolution: {integrity: sha512-m6cwI86IvQ7M93MQ2RF5SP8tUjD39Y7rjb1qjHgYh28uAPVU8+k/xYWvxRO3/tBN2pZkSMa5RjnPuUIbrwVxeA==} + '@rollup/rollup-linux-riscv64-musl@4.52.5': + resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.39.0': - resolution: {integrity: sha512-iRDJd2ebMunnk2rsSBYlsptCyuINvxUfGwOUldjv5M4tpa93K8tFMeYGpNk2+Nxl+OBJnBzy2/JCscGeO507kA==} + '@rollup/rollup-linux-s390x-gnu@4.52.5': + resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.39.0': - resolution: {integrity: sha512-t9jqYw27R6Lx0XKfEFe5vUeEJ5pF3SGIM6gTfONSMb7DuG6z6wfj2yjcoZxHg129veTqU7+wOhY6GX8wmf90dA==} + '@rollup/rollup-linux-x64-gnu@4.52.5': + resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.39.0': - resolution: {integrity: sha512-ThFdkrFDP55AIsIZDKSBWEt/JcWlCzydbZHinZ0F/r1h83qbGeenCt/G/wG2O0reuENDD2tawfAj2s8VK7Bugg==} + '@rollup/rollup-linux-x64-musl@4.52.5': + resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.39.0': - resolution: {integrity: sha512-jDrLm6yUtbOg2TYB3sBF3acUnAwsIksEYjLeHL+TJv9jg+TmTwdyjnDex27jqEMakNKf3RwwPahDIt7QXCSqRQ==} + '@rollup/rollup-openharmony-arm64@4.52.5': + resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.52.5': + resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.39.0': - resolution: {integrity: sha512-6w9uMuza+LbLCVoNKL5FSLE7yvYkq9laSd09bwS0tMjkwXrmib/4KmoJcrKhLWHvw19mwU+33ndC69T7weNNjQ==} + '@rollup/rollup-win32-ia32-msvc@4.52.5': + resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.39.0': - resolution: {integrity: sha512-yAkUOkIKZlK5dl7u6dg897doBgLXmUHhIINM2c+sND3DZwnrdQkkSiDh7N75Ll4mM4dxSkYfXqU9fW3lLkMFug==} + '@rollup/rollup-win32-x64-gnu@4.52.5': + resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==} cpu: [x64] os: [win32] - '@scure/base@1.2.4': - resolution: {integrity: sha512-5Yy9czTO47mqz+/J8GM6GIId4umdCk1wc1q8rKERQulIoc8VP9pzDcghv10Tl2E7R96ZUx/PhND3ESYUQX8NuQ==} + '@rollup/rollup-win32-x64-msvc@4.52.5': + resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==} + cpu: [x64] + os: [win32] + + '@scure/base@1.2.6': + resolution: {integrity: sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==} '@scure/bip32@1.6.2': resolution: {integrity: sha512-t96EPDMbtGgtb7onKKqxRLfE5g05k7uHnHRM2xdE6BP/ZmxaLtPek4J4KfVn/90IQNrU1IOAqMgiDtUdtbe3nw==} @@ -2197,6 +2227,27 @@ packages: '@scure/bip39@1.5.4': resolution: {integrity: sha512-TFM4ni0vKvCfBpohoh+/lY05i9gRbSwXWngAsF4CABQxoaOHijxuaZ2R6cStDQ5CHtHO9aGJTr4ksVJASRRyMA==} + '@shikijs/core@3.14.0': + resolution: {integrity: sha512-qRSeuP5vlYHCNUIrpEBQFO7vSkR7jn7Kv+5X3FO/zBKVDGQbcnlScD3XhkrHi/R8Ltz0kEjvFR9Szp/XMRbFMw==} + + '@shikijs/engine-javascript@3.14.0': + resolution: {integrity: sha512-3v1kAXI2TsWQuwv86cREH/+FK9Pjw3dorVEykzQDhwrZj0lwsHYlfyARaKmn6vr5Gasf8aeVpb8JkzeWspxOLQ==} + + '@shikijs/engine-oniguruma@3.14.0': + resolution: {integrity: sha512-TNcYTYMbJyy+ZjzWtt0bG5y4YyMIWC2nyePz+CFMWqm+HnZZyy9SWMgo8Z6KBJVIZnx8XUXS8U2afO6Y0g1Oug==} + + '@shikijs/langs@3.14.0': + resolution: {integrity: sha512-DIB2EQY7yPX1/ZH7lMcwrK5pl+ZkP/xoSpUzg9YC8R+evRCCiSQ7yyrvEyBsMnfZq4eBzLzBlugMyTAf13+pzg==} + + '@shikijs/themes@3.14.0': + resolution: {integrity: sha512-fAo/OnfWckNmv4uBoUu6dSlkcBc+SA1xzj5oUSaz5z3KqHtEbUypg/9xxgJARtM6+7RVm0Q6Xnty41xA1ma1IA==} + + '@shikijs/types@3.14.0': + resolution: {integrity: sha512-bQGgC6vrY8U/9ObG1Z/vTro+uclbjjD/uG58RvfxKZVD5p9Yc1ka3tVyEFy7BNJLzxuWyHH5NWynP9zZZS59eQ==} + + '@shikijs/vscode-textmate@10.0.2': + resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} + '@sindresorhus/is@5.6.0': resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} engines: {node: '>=14.16'} @@ -2317,8 +2368,8 @@ packages: '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - '@tybys/wasm-util@0.9.0': - resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} '@types/better-sqlite3@7.6.13': resolution: {integrity: sha512-NMv9ASNARoKksWtsq/SHakpYAYnhBrQgGD8zkLYk/jaK8jUGn08CfEdTRgYhMypUQAfzSP8W6gNLe0q19/t4VA==} @@ -2326,14 +2377,14 @@ packages: '@types/body-parser@1.19.6': resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} - '@types/chai@5.2.2': - resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} + '@types/chai@5.2.3': + resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==} '@types/connect@3.4.38': resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - '@types/cors@2.8.18': - resolution: {integrity: sha512-nX3d0sxJW41CqQvfOzVG1NCTXfFDrDWIghCZncpHeWlVFd81zxB/DLhg7avFg6eHLCRX7ckBmoIIcqa++upvJA==} + '@types/cors@2.8.19': + resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==} '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} @@ -2350,11 +2401,11 @@ packages: '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - '@types/estree@1.0.7': - resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/express-serve-static-core@5.0.6': - resolution: {integrity: sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==} + '@types/express-serve-static-core@5.1.0': + resolution: {integrity: sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==} '@types/express@5.0.3': resolution: {integrity: sha512-wGA0NX93b19/dZC1J18tKWVIYWyyF2ZjT9vin/NRu0qzzvfVzWjs04iq2rQ3H65vCTQYlRqs3YHfY7zjdV+9Kw==} @@ -2362,9 +2413,6 @@ packages: '@types/figlet@1.7.0': resolution: {integrity: sha512-KwrT7p/8Eo3Op/HBSIwGXOsTZKYiM9NpWRBJ5sVjWP/SmlS+oxxRvJht/FNAtliJvja44N3ul1yATgohnVBV0Q==} - '@types/hast@2.3.10': - resolution: {integrity: sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==} - '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} @@ -2386,9 +2434,6 @@ packages: '@types/mdx@2.0.13': resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} - '@types/mime@1.3.5': - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} @@ -2398,14 +2443,8 @@ packages: '@types/node@12.20.55': resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==} - '@types/node@22.15.19': - resolution: {integrity: sha512-3vMNr4TzNQyjHcRZadojpRaD9Ofr6LsonZAoQ+HMUa/9ORTPoxVIw0e0mpqWpdjj8xybyCM+oKOUH2vwFu/oEw==} - - '@types/pg@8.11.6': - resolution: {integrity: sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==} - - '@types/prismjs@1.26.5': - resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==} + '@types/node@22.18.13': + resolution: {integrity: sha512-Bo45YKIjnmFtv6I1TuC8AaHBbqXtIo+Om5fE4QiU1Tj8QR/qt+8O3BAtOimG5IFmwaWiPmB3Mv3jtYzBA4Us2A==} '@types/qs@6.14.0': resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} @@ -2413,14 +2452,14 @@ packages: '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - '@types/react@19.1.4': - resolution: {integrity: sha512-EB1yiiYdvySuIITtD5lhW4yPyJ31RkJkkDw794LaQYrxCSaQV/47y5o1FMC4zF9ZyjUjzJMZwbovEnT5yHTW6g==} + '@types/react@19.2.2': + resolution: {integrity: sha512-6mDvHUFSjyT2B2yeNx2nUgMxh9LtOWvkhIU3uePn2I2oyNymUAX1NIsdgviM4CH+JSrp2D2hsMvJOkxY+0wNRA==} - '@types/send@0.17.5': - resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==} + '@types/send@1.2.1': + resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==} - '@types/serve-static@1.15.8': - resolution: {integrity: sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==} + '@types/serve-static@2.2.0': + resolution: {integrity: sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==} '@types/unist@2.0.11': resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} @@ -2428,8 +2467,8 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@types/urijs@1.19.25': - resolution: {integrity: sha512-XOfUup9r3Y06nFAZh3WvO0rBU4OtlfPB/vgxpjg+NRdGU6CN6djdc6OEiH+PcqHCY6eFLo9Ista73uarf4gnBg==} + '@types/urijs@1.19.26': + resolution: {integrity: sha512-wkXrVzX5yoqLnndOwFsieJA7oKM8cNkOKJtf/3vVGSUFkWDKZvFHpIl9Pvqb/T9UsawBBFMTTD8xu7sK5MWuvg==} '@types/varint@6.0.3': resolution: {integrity: sha512-DHukoGWdJ2aYkveZJTB2rN2lp6m7APzVsoJQ7j/qy1fQxyamJTPD5xQzCMoJ2Qtgn0mE3wWeNOpbTyBFvF+dyA==} @@ -2452,10 +2491,26 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/project-service@8.46.2': + resolution: {integrity: sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/scope-manager@8.32.1': resolution: {integrity: sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.46.2': + resolution: {integrity: sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.46.2': + resolution: {integrity: sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/type-utils@8.32.1': resolution: {integrity: sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2467,12 +2522,22 @@ packages: resolution: {integrity: sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.46.2': + resolution: {integrity: sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.32.1': resolution: {integrity: sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/typescript-estree@8.46.2': + resolution: {integrity: sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@8.32.1': resolution: {integrity: sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -2480,102 +2545,123 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' + '@typescript-eslint/utils@8.46.2': + resolution: {integrity: sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/visitor-keys@8.32.1': resolution: {integrity: sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.46.2': + resolution: {integrity: sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - '@unrs/resolver-binding-darwin-arm64@1.7.2': - resolution: {integrity: sha512-vxtBno4xvowwNmO/ASL0Y45TpHqmNkAaDtz4Jqb+clmcVSSl8XCG/PNFFkGsXXXS6AMjP+ja/TtNCFFa1QwLRg==} + '@unrs/resolver-binding-android-arm-eabi@1.11.1': + resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==} + cpu: [arm] + os: [android] + + '@unrs/resolver-binding-android-arm64@1.11.1': + resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==} + cpu: [arm64] + os: [android] + + '@unrs/resolver-binding-darwin-arm64@1.11.1': + resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==} cpu: [arm64] os: [darwin] - '@unrs/resolver-binding-darwin-x64@1.7.2': - resolution: {integrity: sha512-qhVa8ozu92C23Hsmv0BF4+5Dyyd5STT1FolV4whNgbY6mj3kA0qsrGPe35zNR3wAN7eFict3s4Rc2dDTPBTuFQ==} + '@unrs/resolver-binding-darwin-x64@1.11.1': + resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==} cpu: [x64] os: [darwin] - '@unrs/resolver-binding-freebsd-x64@1.7.2': - resolution: {integrity: sha512-zKKdm2uMXqLFX6Ac7K5ElnnG5VIXbDlFWzg4WJ8CGUedJryM5A3cTgHuGMw1+P5ziV8CRhnSEgOnurTI4vpHpg==} + '@unrs/resolver-binding-freebsd-x64@1.11.1': + resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==} cpu: [x64] os: [freebsd] - '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.2': - resolution: {integrity: sha512-8N1z1TbPnHH+iDS/42GJ0bMPLiGK+cUqOhNbMKtWJ4oFGzqSJk/zoXFzcQkgtI63qMcUI7wW1tq2usZQSb2jxw==} + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': + resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm-musleabihf@1.7.2': - resolution: {integrity: sha512-tjYzI9LcAXR9MYd9rO45m1s0B/6bJNuZ6jeOxo1pq1K6OBuRMMmfyvJYval3s9FPPGmrldYA3mi4gWDlWuTFGA==} + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': + resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==} cpu: [arm] os: [linux] - '@unrs/resolver-binding-linux-arm64-gnu@1.7.2': - resolution: {integrity: sha512-jon9M7DKRLGZ9VYSkFMflvNqu9hDtOCEnO2QAryFWgT6o6AXU8du56V7YqnaLKr6rAbZBWYsYpikF226v423QA==} + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': + resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==} cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-arm64-musl@1.7.2': - resolution: {integrity: sha512-c8Cg4/h+kQ63pL43wBNaVMmOjXI/X62wQmru51qjfTvI7kmCy5uHTJvK/9LrF0G8Jdx8r34d019P1DVJmhXQpA==} + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': + resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==} cpu: [arm64] os: [linux] - '@unrs/resolver-binding-linux-ppc64-gnu@1.7.2': - resolution: {integrity: sha512-A+lcwRFyrjeJmv3JJvhz5NbcCkLQL6Mk16kHTNm6/aGNc4FwPHPE4DR9DwuCvCnVHvF5IAd9U4VIs/VvVir5lg==} + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': + resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==} cpu: [ppc64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-gnu@1.7.2': - resolution: {integrity: sha512-hQQ4TJQrSQW8JlPm7tRpXN8OCNP9ez7PajJNjRD1ZTHQAy685OYqPrKjfaMw/8LiHCt8AZ74rfUVHP9vn0N69Q==} + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': + resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==} cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-riscv64-musl@1.7.2': - resolution: {integrity: sha512-NoAGbiqrxtY8kVooZ24i70CjLDlUFI7nDj3I9y54U94p+3kPxwd2L692YsdLa+cqQ0VoqMWoehDFp21PKRUoIQ==} + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': + resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==} cpu: [riscv64] os: [linux] - '@unrs/resolver-binding-linux-s390x-gnu@1.7.2': - resolution: {integrity: sha512-KaZByo8xuQZbUhhreBTW+yUnOIHUsv04P8lKjQ5otiGoSJ17ISGYArc+4vKdLEpGaLbemGzr4ZeUbYQQsLWFjA==} + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': + resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==} cpu: [s390x] os: [linux] - '@unrs/resolver-binding-linux-x64-gnu@1.7.2': - resolution: {integrity: sha512-dEidzJDubxxhUCBJ/SHSMJD/9q7JkyfBMT77Px1npl4xpg9t0POLvnWywSk66BgZS/b2Hy9Y1yFaoMTFJUe9yg==} + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': + resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==} cpu: [x64] os: [linux] - '@unrs/resolver-binding-linux-x64-musl@1.7.2': - resolution: {integrity: sha512-RvP+Ux3wDjmnZDT4XWFfNBRVG0fMsc+yVzNFUqOflnDfZ9OYujv6nkh+GOr+watwrW4wdp6ASfG/e7bkDradsw==} + '@unrs/resolver-binding-linux-x64-musl@1.11.1': + resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==} cpu: [x64] os: [linux] - '@unrs/resolver-binding-wasm32-wasi@1.7.2': - resolution: {integrity: sha512-y797JBmO9IsvXVRCKDXOxjyAE4+CcZpla2GSoBQ33TVb3ILXuFnMrbR/QQZoauBYeOFuu4w3ifWLw52sdHGz6g==} + '@unrs/resolver-binding-wasm32-wasi@1.11.1': + resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@unrs/resolver-binding-win32-arm64-msvc@1.7.2': - resolution: {integrity: sha512-gtYTh4/VREVSLA+gHrfbWxaMO/00y+34htY7XpioBTy56YN2eBjkPrY1ML1Zys89X3RJDKVaogzwxlM1qU7egg==} + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': + resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==} cpu: [arm64] os: [win32] - '@unrs/resolver-binding-win32-ia32-msvc@1.7.2': - resolution: {integrity: sha512-Ywv20XHvHTDRQs12jd3MY8X5C8KLjDbg/jyaal/QLKx3fAShhJyD4blEANInsjxW3P7isHx1Blt56iUDDJO3jg==} + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': + resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==} cpu: [ia32] os: [win32] - '@unrs/resolver-binding-win32-x64-msvc@1.7.2': - resolution: {integrity: sha512-friS8NEQfHaDbkThxopGk+LuE5v3iY0StruifjQEt7SLbA46OnfgMO15sOTkbpJkol6RB+1l1TYPXh0sCddpvA==} + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': + resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==} cpu: [x64] os: [win32] - '@valibot/to-json-schema@1.0.0': - resolution: {integrity: sha512-/9crJgPptVsGCL6X+JPDQyaJwkalSZ/52WuF8DiRUxJgcmpNdzYRfZ+gqMEP8W3CTVfuMWPqqvIgfwJ97f9Etw==} + '@valibot/to-json-schema@1.3.0': + resolution: {integrity: sha512-82Vv6x7sOYhv5YmTRgSppSqj1nn2pMCk5BqCMGWYp0V/fq+qirrbGncqZAtZ09/lrO40ne/7z8ejwE728aVreg==} peerDependencies: - valibot: ^1.0.0 + valibot: ^1.1.0 '@vitest/expect@3.2.4': resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} @@ -2630,8 +2716,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.14.1: - resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} engines: {node: '>=0.4.0'} hasBin: true @@ -2639,8 +2725,8 @@ packages: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} engines: {node: '>= 10.0.0'} - agent-base@7.1.3: - resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} aggregate-error@4.0.1: @@ -2696,28 +2782,24 @@ packages: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} - ansi-escapes@4.3.2: - resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} - engines: {node: '>=8'} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} engines: {node: '>=12'} ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} engines: {node: '>=12'} - ansis@4.0.0: - resolution: {integrity: sha512-P8nrHI1EyW9OfBt1X7hMSwGN2vwRuqHSKJAT1gbLWZRzDa24oHjYwGHvEgHeBepupzk878yS/HBZ0NMPYtbolw==} + ansis@4.2.0: + resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==} engines: {node: '>=14'} anymatch@3.1.3: @@ -2755,9 +2837,9 @@ packages: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} - ast-kit@2.0.0: - resolution: {integrity: sha512-P63jzlYNz96MF9mCcprU+a7I5/ZQ5QAn3y+mZcPWEcGV3CHF/GWnkFPj3oCrWLUjL47+PD9PNiCUdXxw0cWdsg==} - engines: {node: '>=20.18.0'} + ast-kit@2.1.3: + resolution: {integrity: sha512-TH+b3Lv6pUjy/Nu0m6A2JULtdzLpmqF9x1Dhj00ZoEiML8qvVA9j1flkzTKNYgdEhWrjDwtWNpyyCUbfQe514g==} + engines: {node: '>=20.19.0'} ast-types@0.13.4: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} @@ -2778,15 +2860,20 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - avsc@5.7.7: - resolution: {integrity: sha512-9cYNccliXZDByFsFliVwk5GvTq058Fj513CiR4E60ndDwmuXzTJEp/Bp8FyuRmGyYupLjHLs+JA9/CBoVS4/NQ==} + avsc@5.7.9: + resolution: {integrity: sha512-yOA4wFeI7ET3v32Di/sUybQ+ttP20JHSW3mxLuNGeO0uD6PPcvLrIQXSvy/rhJOWU5JrYh7U4OHplWMmtAtjMg==} engines: {node: '>=0.11'} - axios@1.9.0: - resolution: {integrity: sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==} + axios@1.13.1: + resolution: {integrity: sha512-hU4EGxxt+j7TQijx1oYdAjw4xuIp1wRQSsbMFwSthCWeBQur1eF+qJ5iQ5sN3Tw8YRzQNKb8jszgBdMDVqwJcw==} - b4a@1.6.7: - resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + b4a@1.7.3: + resolution: {integrity: sha512-5Q2mfq2WfGuFp3uS//0s6baOJLMoVduPYVeNmDYxu5OUA1/cBfvr2RIS7vi62LdNj/urk1hfmj867I3qt6uZ7Q==} + peerDependencies: + react-native-b4a: '*' + peerDependenciesMeta: + react-native-b4a: + optional: true bail@2.0.2: resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} @@ -2794,11 +2881,16 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - bare-events@2.5.4: - resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} + bare-events@2.8.1: + resolution: {integrity: sha512-oxSAxTS1hRfnyit2CL5QpAOS5ixfBjj6ex3yTNvXyY/kE719jQ/IjuESJBK2w5v4wwQRAHGseVJXx9QBYOtFGQ==} + peerDependencies: + bare-abort-controller: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true - bare-fs@4.1.5: - resolution: {integrity: sha512-1zccWBMypln0jEE05LzZt+V/8y8AQsQQqxtklqaIyg5nu6OAYFhZxPXinJTSG+kU5qyNmeLgcn9AW7eHiCHVLA==} + bare-fs@4.5.0: + resolution: {integrity: sha512-GljgCjeupKZJNetTqxKaQArLK10vpmK28or0+RwWjEl5Rk+/xG3wkpmkv+WrcBm3q1BwHKlnhXzR8O37kcvkXQ==} engines: {bare: '>=1.16.0'} peerDependencies: bare-buffer: '*' @@ -2806,15 +2898,15 @@ packages: bare-buffer: optional: true - bare-os@3.6.1: - resolution: {integrity: sha512-uaIjxokhFidJP+bmmvKSgiMzj2sV5GPHaZVAIktcxcpCyBFFWO+YlikVAdhmUo2vYFvFhOXIAlldqV29L8126g==} + bare-os@3.6.2: + resolution: {integrity: sha512-T+V1+1srU2qYNBmJCXZkUY5vQ0B4FSlL3QDROnKQYOqeiQR8UbjNHlPa+TIbM4cuidiN9GaTaOZgSEgsvPbh5A==} engines: {bare: '>=1.14.0'} bare-path@3.0.0: resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==} - bare-stream@2.6.5: - resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==} + bare-stream@2.7.0: + resolution: {integrity: sha512-oyXQNicV1y8nc2aKffH+BUHFRXmx6VrPzlnaEvMhram0nPBrKcEdcyBg5r08D0i8VxngHFAiVyn1QKXpSG0B8A==} peerDependencies: bare-buffer: '*' bare-events: '*' @@ -2824,6 +2916,9 @@ packages: bare-events: optional: true + bare-url@2.3.1: + resolution: {integrity: sha512-v2yl0TnaZTdEnelkKtXZGnotiV6qATBlnNuUMrHl6v9Lmmrh9mw9RYyImPU7/4RahumSwQS1k2oKXcRfXcbjJw==} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -2853,8 +2948,8 @@ packages: bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} - birpc@2.3.0: - resolution: {integrity: sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==} + birpc@2.6.1: + resolution: {integrity: sha512-LPnFhlDpdSH6FJhJyn4M0kFO7vtQ5iPw24FnG0y21q09xC7e8+1LeR31S1MAIrDAHp4m7aas4bEkTDTvMAtebQ==} bit-buffers@1.0.2: resolution: {integrity: sha512-yOK3e4MM2sis7NqecDlomBESCNjQooxCoEzHDhiEY/lrUCaivNzvYkiC/Lnx8TwcYe4tozXoV1AfQHrzflSIDw==} @@ -2873,11 +2968,11 @@ packages: resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} engines: {node: '>=18'} - brace-expansion@1.1.11: - resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} - brace-expansion@2.0.1: - resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} braces@3.0.3: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} @@ -2934,16 +3029,16 @@ packages: ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chai@5.2.0: - resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} - engines: {node: '>=12'} + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} + engines: {node: '>=18'} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.4.1: - resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + chalk@5.6.2: + resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} character-entities-html4@2.1.0: @@ -2961,6 +3056,9 @@ packages: chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + chardet@2.1.0: + resolution: {integrity: sha512-bNFETTG/pM5ryzQ9Ad0lJOTa6HWD/YsScAR3EnCPZRPlQh77JocYktSHOUHelyhm8IARL+o4c4F1bP5KVOjiRA==} + check-error@2.1.1: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} @@ -3049,8 +3147,8 @@ packages: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} - comment-json@4.2.5: - resolution: {integrity: sha512-bKw/r35jR3HGt5PEPm1ljsQQGyCrR8sFGNiN5L+ykDHdpO8Smxkrkla9Yi6NkQyUrb8V54PGhfMs6NrIwtxtdw==} + comment-json@4.4.1: + resolution: {integrity: sha512-r1To31BQD5060QdkC+Iheai7gHwoSZobzunqkf2/kQ6xIAfJyrKNAFUwdKvkK7Qgu7pVTKQEa7ok7Ed3ycAJgg==} engines: {node: '>= 6'} comment-parser@1.4.1: @@ -3175,8 +3273,8 @@ packages: supports-color: optional: true - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + debug@4.4.3: + resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -3184,17 +3282,8 @@ packages: supports-color: optional: true - debug@4.4.1: - resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decode-named-character-reference@1.1.0: - resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==} + decode-named-character-reference@1.2.0: + resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==} decompress-response@6.0.0: resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} @@ -3261,16 +3350,12 @@ packages: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} - detect-indent@7.0.1: - resolution: {integrity: sha512-Mc7QhQ8s+cLrnUfU/Ji94vG/r8M26m8f++vyres4ZoojaRDpZ1eSIh/EpzLNwlWuvzSZ3UbDFspjFvTDXe6e/g==} + detect-indent@7.0.2: + resolution: {integrity: sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==} engines: {node: '>=12.20'} - detect-libc@2.0.3: - resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} - engines: {node: '>=8'} - - detect-libc@2.0.4: - resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} detect-newline@4.0.1: @@ -3305,8 +3390,8 @@ packages: diff-match-patch@1.0.5: resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} - diff@8.0.1: - resolution: {integrity: sha512-rEaM3KmVm78zE3dFZaop3aCQa2MTm+T4kcigUFLVU/KbOYdiY6JnL2g2puOYnct3QFw9pjZadaCbCZ1O8ArMlQ==} + diff@8.0.2: + resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} engines: {node: '>=0.3.1'} dir-glob@3.0.1: @@ -3333,8 +3418,8 @@ packages: resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} engines: {node: '>=12'} - dotenv@16.5.0: - resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==} + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} engines: {node: '>=12'} dotenv@8.6.0: @@ -3434,11 +3519,11 @@ packages: sqlite3: optional: true - dts-resolver@2.0.1: - resolution: {integrity: sha512-Pe2kqaQTNVxleYpt9Q9658fn6rEpoZbMbDpEBbcU6pnuGM3Q0IdM+Rv67kN6qcyp8Bv2Uv9NYy5Y1rG1LSgfoQ==} + dts-resolver@2.1.2: + resolution: {integrity: sha512-xeXHBQkn2ISSXxbJWD828PFjtyg+/UrMDo7W4Ffcs7+YWCquxU8YjV1KoxuiL+eJ5pg3ll+bC6flVv61L3LKZg==} engines: {node: '>=20.18.0'} peerDependencies: - oxc-resolver: ^9.0.2 + oxc-resolver: '>=11.0.0' peerDependenciesMeta: oxc-resolver: optional: true @@ -3450,8 +3535,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - emoji-regex@10.4.0: - resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} + emoji-regex@10.6.0: + resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -3468,8 +3553,8 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} - end-of-stream@1.4.4: - resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} engine.io-parser@5.2.3: resolution: {integrity: sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==} @@ -3483,8 +3568,8 @@ packages: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} - entities@6.0.0: - resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==} + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} env-paths@2.2.1: @@ -3495,15 +3580,15 @@ packages: resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - error-ex@1.3.2: - resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + error-ex@1.3.4: + resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - es-abstract@1.23.9: - resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==} + es-abstract@1.24.0: + resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} engines: {node: '>= 0.4'} - es-aggregate-error@1.0.13: - resolution: {integrity: sha512-KkzhUUuD2CUMqEc8JEqsXEMDHzDPE8RCjZeUBitsnB1eNcAJWQPiciKsMXe3Yytj4Flw1XLl46Qcf9OxvZha7A==} + es-aggregate-error@1.0.14: + resolution: {integrity: sha512-3YxX6rVb07B5TV11AV5wsL7nQCHXNwoHPsQC8S4AmBiqYhyNCJ5BRKXkXyDJvs8QzXN20NgRtxe3dEEQD9NLHA==} engines: {node: '>= 0.4'} es-define-property@1.0.1: @@ -3545,8 +3630,8 @@ packages: engines: {node: '>=12'} hasBin: true - esbuild@0.25.2: - resolution: {integrity: sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==} + esbuild@0.25.11: + resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} engines: {node: '>=18'} hasBin: true @@ -3604,16 +3689,16 @@ packages: eslint: '>6.6.0' turbo: '>2.0.0' - eslint-scope@8.3.0: - resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@4.2.0: - resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint@9.27.0: @@ -3626,8 +3711,8 @@ packages: jiti: optional: true - espree@10.3.0: - resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esprima@4.0.1: @@ -3683,12 +3768,15 @@ packages: eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + events-universal@1.0.1: + resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} + expand-template@2.0.3: resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} engines: {node: '>=6'} - expect-type@1.2.1: - resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} + expect-type@1.2.2: + resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} engines: {node: '>=12.0.0'} express@4.21.2: @@ -3717,8 +3805,8 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-equals@5.2.2: - resolution: {integrity: sha512-V7/RktU11J3I36Nwq2JnZEM7tNm17eBJz+u25qdxBZeCKiX6BkVSZQjwWIr+IobgnZy+ag73tTZgZi7tr0LrBw==} + fast-equals@5.3.2: + resolution: {integrity: sha512-6rxyATwPCkaFIL3JLqw8qXqMpIZ942pTX/tbQFkRsDGblS8tNGtlUauA/+mt6RUfqn/4MoEr+WDkYoIQbibWuQ==} engines: {node: '>=6.0.0'} fast-fifo@1.3.2: @@ -3737,8 +3825,8 @@ packages: fast-memoize@2.5.2: resolution: {integrity: sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==} - fast-uri@3.0.6: - resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} + fast-uri@3.1.0: + resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} fastestsmallesttextencoderdecoder@1.0.22: resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} @@ -3756,8 +3844,9 @@ packages: fd-slicer@1.1.0: resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} - fdir@6.4.4: - resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -3799,8 +3888,8 @@ packages: flatted@3.3.3: resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} - follow-redirects@1.15.9: - resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -3816,8 +3905,8 @@ packages: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} engines: {node: '>= 14.17'} - form-data@4.0.2: - resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} engines: {node: '>= 6'} format@0.2.2: @@ -3835,8 +3924,8 @@ packages: fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - fs-extra@11.3.0: - resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + fs-extra@11.3.2: + resolution: {integrity: sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==} engines: {node: '>=14.14'} fs-extra@7.0.1: @@ -3869,10 +3958,9 @@ packages: gcd@0.0.1: resolution: {integrity: sha512-VNx3UEGr+ILJTiMs1+xc5SX1cMgJCrXezKPa003APUWNqQqaF6n25W8VcR7nHN6yRWbvvUTwCpZCFJeWC2kXlw==} - gel@2.0.2: - resolution: {integrity: sha512-XTKpfNR9HZOw+k0Bl04nETZjuP5pypVAXsZADSdwr3EtyygTTe1RqvftU2FjGu7Tp9e576a9b/iIOxWrRBxMiQ==} - engines: {node: '>= 18.0.0'} - hasBin: true + generator-function@2.0.1: + resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==} + engines: {node: '>= 0.4'} gensequence@7.0.0: resolution: {integrity: sha512-47Frx13aZh01afHJTB3zTtKIlFI6vWY+MYCN9Qpew6i52rfKjnhCF/l1YlC8UmEMvvntZZ6z4PiCcmyuedR2aQ==} @@ -3882,8 +3970,8 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.3.0: - resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==} + get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} engines: {node: '>=18'} get-intrinsic@1.3.0: @@ -3906,11 +3994,11 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.10.0: - resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} + get-tsconfig@4.13.0: + resolution: {integrity: sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==} - get-uri@6.0.4: - resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==} + get-uri@6.0.5: + resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} engines: {node: '>= 14'} git-hooks-list@4.1.1: @@ -3976,10 +4064,6 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - has-own-prop@2.0.0: - resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==} - engines: {node: '>=8'} - has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} @@ -4026,9 +4110,6 @@ packages: hast-util-minify-whitespace@1.0.1: resolution: {integrity: sha512-L96fPOVpnclQE0xzdWb/D12VT5FabA7SnZOUMtL1DbXmYiHJMXZvFkIZfiMmTCNJHUeO2K9UYNXoVyfz+QHuOw==} - hast-util-parse-selector@3.1.1: - resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} - hast-util-parse-selector@4.0.0: resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} @@ -4056,9 +4137,6 @@ packages: hast-util-whitespace@3.0.0: resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - hastscript@7.2.0: - resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} - hastscript@9.0.1: resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} @@ -4091,8 +4169,8 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} - human-id@4.1.1: - resolution: {integrity: sha512-3gKm/gCSUipeLsRYZbbdA1BD83lBoWUkZ7G9VFrhWPAU76KwYo5KR8V28bpoPm/ygy0x5/GCbpRQdY7VLYCoIg==} + human-id@4.1.2: + resolution: {integrity: sha512-v/J+4Z/1eIJovEBdlV5TYj1IR+ZiohcYGRY+qN/oC9dAfKzVT023N/Bgw37hrKCoVRBvk3bqyzpr2PP5YeTMSg==} hasBin: true iconv-lite@0.4.24: @@ -4103,6 +4181,10 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + iconv-lite@0.7.0: + resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==} + engines: {node: '>=0.10.0'} + ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} @@ -4110,8 +4192,8 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.4: - resolution: {integrity: sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==} + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} engines: {node: '>= 4'} immer@9.0.21: @@ -4121,8 +4203,8 @@ packages: resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} engines: {node: '>=6'} - import-meta-resolve@4.1.0: - resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} + import-meta-resolve@4.2.0: + resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==} imurmurhash@0.1.4: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} @@ -4145,8 +4227,8 @@ packages: inline-style-parser@0.2.4: resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} - inquirer@12.6.1: - resolution: {integrity: sha512-MGFnzHVS3l3oM3cy+LWkyR7UUtVEn3D5U41CZbEY34szToWoJAvaVtCTz1mxsEzZFk/HXWyCArn0HDgloTXMDw==} + inquirer@12.10.0: + resolution: {integrity: sha512-K/epfEnDBZj2Q3NMDcgXWZye3nhSPeoJnOh8lcKWrldw54UEZfS4EmAMsAsmVbl7qKi+vjAsy39Sz4fbgRMewg==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -4158,8 +4240,8 @@ packages: resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} engines: {node: '>= 0.4'} - ip-address@9.0.5: - resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + ip-address@10.0.1: + resolution: {integrity: sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA==} engines: {node: '>= 12'} ip-regex@4.3.0: @@ -4187,8 +4269,8 @@ packages: is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - is-arrayish@0.3.2: - resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + is-arrayish@0.3.4: + resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} is-async-function@2.1.1: resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} @@ -4249,8 +4331,8 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-generator-function@1.1.0: - resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + is-generator-function@1.1.2: + resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} engines: {node: '>= 0.4'} is-glob@4.0.3: @@ -4272,6 +4354,10 @@ packages: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + is-number-object@1.1.1: resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} engines: {node: '>= 0.4'} @@ -4346,17 +4432,13 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - isexe@3.1.1: - resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} - engines: {node: '>=16'} - isows@1.0.7: resolution: {integrity: sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==} peerDependencies: ws: '*' - jiti@2.4.2: - resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true jose@6.0.11: @@ -4376,9 +4458,6 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsbn@1.1.0: - resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - jsep@1.4.0: resolution: {integrity: sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==} engines: {node: '>= 10.16.0'} @@ -4417,8 +4496,8 @@ packages: jsonfile@4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} - jsonfile@6.1.0: - resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonfile@6.2.0: + resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} jsonpath-plus@10.3.0: resolution: {integrity: sha512-8TNmfeTCk2Le33A3vRRwtuworG/L5RrgMvdjhKZxvyShO+mBu2fP50OWUjRLNtvw344DdDarFh9buFAZs5ujeA==} @@ -4432,8 +4511,8 @@ packages: jwks-did-resolver@0.3.0: resolution: {integrity: sha512-ptSjTICfy6T97C7WqHwAHeJnDPbokDmfosI4nHtuiAnmi15wOAteMQFNuAzvmscj0ml2HevVRfa5DIXB2TO6GA==} - katex@0.16.22: - resolution: {integrity: sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==} + katex@0.16.25: + resolution: {integrity: sha512-woHRUZ/iF23GBP1dkDQMh1QBad9dmr8/PAwNA54VrSOVYgI12MAcE14TqnDdQOdzyEonGzMepYnqBMYdsoAr8Q==} hasBin: true key-did-resolver@4.0.0: @@ -4454,78 +4533,14 @@ packages: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} - leven@4.0.0: - resolution: {integrity: sha512-puehA3YKku3osqPlNuzGDUHq8WpwXupUg1V6NXdV38G+gr+gkBwFC8g1b/+YcIvp8gnqVIus+eJCH/eGsRmJNw==} + leven@4.1.0: + resolution: {integrity: sha512-KZ9W9nWDT7rF7Dazg8xyLHGLrmpgq2nVNFUckhqdW3szVP6YhCpp/RAnpmVExA9JvrMynjwSLVrEj3AepHR6ew==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lightningcss-darwin-arm64@1.29.3: - resolution: {integrity: sha512-fb7raKO3pXtlNbQbiMeEu8RbBVHnpyqAoxTyTRMEWFQWmscGC2wZxoHzZ+YKAepUuKT9uIW5vL2QbFivTgprZg==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [darwin] - - lightningcss-darwin-x64@1.29.3: - resolution: {integrity: sha512-KF2XZ4ZdmDGGtEYmx5wpzn6u8vg7AdBHaEOvDKu8GOs7xDL/vcU2vMKtTeNe1d4dogkDdi3B9zC77jkatWBwEQ==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [darwin] - - lightningcss-freebsd-x64@1.29.3: - resolution: {integrity: sha512-VUWeVf+V1UM54jv9M4wen9vMlIAyT69Krl9XjI8SsRxz4tdNV/7QEPlW6JASev/pYdiynUCW0pwaFquDRYdxMw==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [freebsd] - - lightningcss-linux-arm-gnueabihf@1.29.3: - resolution: {integrity: sha512-UhgZ/XVNfXQVEJrMIWeK1Laj8KbhjbIz7F4znUk7G4zeGw7TRoJxhb66uWrEsonn1+O45w//0i0Fu0wIovYdYg==} - engines: {node: '>= 12.0.0'} - cpu: [arm] - os: [linux] - - lightningcss-linux-arm64-gnu@1.29.3: - resolution: {integrity: sha512-Pqau7jtgJNmQ/esugfmAT1aCFy/Gxc92FOxI+3n+LbMHBheBnk41xHDhc0HeYlx9G0xP5tK4t0Koy3QGGNqypw==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - - lightningcss-linux-arm64-musl@1.29.3: - resolution: {integrity: sha512-dxakOk66pf7KLS7VRYFO7B8WOJLecE5OPL2YOk52eriFd/yeyxt2Km5H0BjLfElokIaR+qWi33gB8MQLrdAY3A==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [linux] - - lightningcss-linux-x64-gnu@1.29.3: - resolution: {integrity: sha512-ySZTNCpbfbK8rqpKJeJR2S0g/8UqqV3QnzcuWvpI60LWxnFN91nxpSSwCbzfOXkzKfar9j5eOuOplf+klKtINg==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - - lightningcss-linux-x64-musl@1.29.3: - resolution: {integrity: sha512-3pVZhIzW09nzi10usAXfIGTTSTYQ141dk88vGFNCgawIzayiIzZQxEcxVtIkdvlEq2YuFsL9Wcj/h61JHHzuFQ==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [linux] - - lightningcss-win32-arm64-msvc@1.29.3: - resolution: {integrity: sha512-VRnkAvtIkeWuoBJeGOTrZxsNp4HogXtcaaLm8agmbYtLDOhQdpgxW6NjZZjDXbvGF+eOehGulXZ3C1TiwHY4QQ==} - engines: {node: '>= 12.0.0'} - cpu: [arm64] - os: [win32] - - lightningcss-win32-x64-msvc@1.29.3: - resolution: {integrity: sha512-IszwRPu2cPnDQsZpd7/EAr0x2W7jkaWqQ1SwCVIZ/tSbZVXPLt6k8s6FkcyBjViCzvB5CW0We0QbbP7zp2aBjQ==} - engines: {node: '>= 12.0.0'} - cpu: [x64] - os: [win32] - - lightningcss@1.29.3: - resolution: {integrity: sha512-GlOJwTIP6TMIlrTFsxTerwC0W6OpQpCGuX1ECRLBUVRh6fpJH3xTqjCjRgQHTb4ZXexH9rtHou1Lf03GKzmhhQ==} - engines: {node: '>= 12.0.0'} - lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -4560,11 +4575,8 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - loupe@3.1.3: - resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} - - loupe@3.2.0: - resolution: {integrity: sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw==} + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} lowercase-keys@3.0.0: resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} @@ -4574,8 +4586,8 @@ packages: resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} engines: {node: '>=12'} - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} markdown-extensions@2.0.0: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} @@ -4813,8 +4825,8 @@ packages: resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - minimatch@10.0.1: - resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} + minimatch@10.1.1: + resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} engines: {node: 20 || >=22} minimatch@3.1.2: @@ -4888,8 +4900,8 @@ packages: napi-build-utils@2.0.0: resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} - napi-postinstall@0.2.3: - resolution: {integrity: sha512-Mi7JISo/4Ij2tDZ2xBE2WH+/KvVlkhA6juEjpEeRAVPNCpN3nxJo/5FhDNKgBcdmcmhaH6JjgST4xY/23ZYK0w==} + napi-postinstall@0.3.4: + resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} hasBin: true @@ -4908,8 +4920,8 @@ packages: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} - next-mdx-remote-client@1.1.1: - resolution: {integrity: sha512-cJnJGaRiHc1gn4aCzDmY9zmcCjEw+zMCpCYIy45Kjs8HzeQpdGcaO5GrgIcX/DFkuCVrrzc69wi2gGnExXbv/A==} + next-mdx-remote-client@1.1.4: + resolution: {integrity: sha512-psCMdO50tfoT1kAH7OGXZvhyRfiHVK6IqwjmWFV5gtLo4dnqjAgcjcLNeJ92iI26UNlKShxYrBs1GQ6UXxk97A==} engines: {node: '>=18.18.0'} peerDependencies: react: '>= 18.3.0 < 19.0.0' @@ -4922,8 +4934,8 @@ packages: nlcst-to-string@4.0.0: resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==} - node-abi@3.75.0: - resolution: {integrity: sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==} + node-abi@3.79.0: + resolution: {integrity: sha512-Pr/5KdBQGG8TirdkS0qN3B+f3eo8zTOfZQWAxHoJqopMz2/uvRnG+S4fWu/6AZxKei2CP2p/psdQ5HFC2Ap5BA==} engines: {node: '>=10'} node-fetch@2.6.7: @@ -4948,8 +4960,8 @@ packages: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} - normalize-url@8.0.1: - resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} + normalize-url@8.1.0: + resolution: {integrity: sha512-X06Mfd/5aKsRHc0O0J5CUedwnPmnDtLF2+nq+KN9KSDlJHkPuh0JUviWjEWMe0SW/9TDdSLVPuk7L5gGTIA1/w==} engines: {node: '>=14.16'} object-assign@4.1.1: @@ -4968,9 +4980,6 @@ packages: resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} engines: {node: '>= 0.4'} - obuf@1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -4982,6 +4991,12 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} + oniguruma-parser@0.12.1: + resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} + + oniguruma-to-es@4.3.3: + resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} + open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} @@ -5120,55 +5135,13 @@ packages: pathe@2.0.3: resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} - pathval@2.0.0: - resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + pathval@2.0.1: + resolution: {integrity: sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==} engines: {node: '>= 14.16'} pend@1.2.0: resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} - pg-cloudflare@1.2.5: - resolution: {integrity: sha512-OOX22Vt0vOSRrdoUPKJ8Wi2OpE/o/h9T8X1s4qSkCedbNah9ei2W2765be8iMVxQUsvgT7zIAT2eIa9fs5+vtg==} - - pg-connection-string@2.9.0: - resolution: {integrity: sha512-P2DEBKuvh5RClafLngkAuGe9OUlFV7ebu8w1kmaaOgPcpJd1RIFh7otETfI6hAR8YupOLFTY7nuvvIn7PLciUQ==} - - pg-int8@1.0.1: - resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} - engines: {node: '>=4.0.0'} - - pg-numeric@1.0.2: - resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==} - engines: {node: '>=4'} - - pg-pool@3.10.0: - resolution: {integrity: sha512-DzZ26On4sQ0KmqnO34muPcmKbhrjmyiO4lCCR0VwEd7MjmiKf5NTg/6+apUEu0NF7ESa37CGzFxH513CoUmWnA==} - peerDependencies: - pg: '>=8.0' - - pg-protocol@1.10.0: - resolution: {integrity: sha512-IpdytjudNuLv8nhlHs/UrVBhU0e78J0oIS/0AVdTbWxSOkFUVdsHC/NrorO6nXsQNDTT1kzDSOMJubBQviX18Q==} - - pg-types@2.2.0: - resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} - engines: {node: '>=4'} - - pg-types@4.0.2: - resolution: {integrity: sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==} - engines: {node: '>=10'} - - pg@8.16.0: - resolution: {integrity: sha512-7SKfdvP8CTNXjMUzfcVTaI+TDzBEeaUnVwiVGZQD1Hh33Kpev7liQba9uLd4CfN8r9mCVsD0JIpq03+Unpz+kg==} - engines: {node: '>= 8.0.0'} - peerDependencies: - pg-native: '>=3.0.1' - peerDependenciesMeta: - pg-native: - optional: true - - pgpass@1.0.5: - resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -5176,8 +5149,8 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} pify@4.0.1: @@ -5192,45 +5165,10 @@ packages: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} - postcss@8.5.3: - resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} - postgres-array@2.0.0: - resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} - engines: {node: '>=4'} - - postgres-array@3.0.4: - resolution: {integrity: sha512-nAUSGfSDGOaOAEGwqsRY27GPOea7CNipJPOA7lPbdEpx5Kg3qzdP0AaWC5MlhTWV9s4hFX39nomVZ+C4tnGOJQ==} - engines: {node: '>=12'} - - postgres-bytea@1.0.0: - resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} - engines: {node: '>=0.10.0'} - - postgres-bytea@3.0.0: - resolution: {integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==} - engines: {node: '>= 6'} - - postgres-date@1.0.7: - resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} - engines: {node: '>=0.10.0'} - - postgres-date@2.1.0: - resolution: {integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==} - engines: {node: '>=12'} - - postgres-interval@1.2.0: - resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} - engines: {node: '>=0.10.0'} - - postgres-interval@3.0.0: - resolution: {integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==} - engines: {node: '>=12'} - - postgres-range@1.1.4: - resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==} - prebuild-install@7.1.3: resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} engines: {node: '>=10'} @@ -5262,9 +5200,6 @@ packages: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} - property-information@6.5.0: - resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} - property-information@7.1.0: resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} @@ -5283,8 +5218,8 @@ packages: resolution: {integrity: sha512-xaH3pZMni/R2BG7ZXXaWS9Wc9wFlhyDVJF47IJ+3ali0TGv+2PsckKxbmo+rnx3ZxiV2wblVhtdS3bohAP6GGw==} engines: {node: ^14.13.1 || >=16.0.0} - pump@3.0.2: - resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} + pump@3.0.3: + resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} @@ -5297,6 +5232,7 @@ packages: puppeteer@22.15.0: resolution: {integrity: sha512-XjCY1SiSEi1T7iSYuxS82ft85kwDJUS7wj1Z0eGVXKdtr5g4xnVcbjwxhq5xBnpK/E7x1VZZoJDxpjAOasHT4Q==} engines: {node: '>=18'} + deprecated: < 24.15.0 is no longer supported hasBin: true qs@6.13.0: @@ -5307,8 +5243,8 @@ packages: resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} engines: {node: '>=0.6'} - quansync@0.2.10: - resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} + quansync@0.2.11: + resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==} queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -5325,9 +5261,9 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} - raw-body@3.0.0: - resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} - engines: {node: '>= 0.8'} + raw-body@3.0.1: + resolution: {integrity: sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==} + engines: {node: '>= 0.10'} rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} @@ -5338,8 +5274,8 @@ packages: peerDependencies: react: ^18.3.1 - react@19.1.0: - resolution: {integrity: sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==} + react@19.2.0: + resolution: {integrity: sha512-tmbWg6W31tQLeB5cdIBOicJDJRR2KzXsV7uSK9iNfLWQ5bIZfxuPEHp7M8wiHyHnn0DD1i7w3Zmin0FtkrwoCQ==} engines: {node: '>=0.10.0'} read-yaml-file@1.1.0: @@ -5361,8 +5297,10 @@ packages: recma-build-jsx@1.0.0: resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} - recma-jsx@1.0.0: - resolution: {integrity: sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==} + recma-jsx@1.0.1: + resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 recma-parse@1.0.0: resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} @@ -5374,8 +5312,14 @@ packages: resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} engines: {node: '>= 0.4'} - refractor@4.9.0: - resolution: {integrity: sha512-nEG1SPXFoGGx+dcjftjv8cAjEusIh6ED1xhf5DG3C0x/k+rmZ2duKnc3QLpt6qeHv5fPb8uwN3VWN2BT7fr3Og==} + regex-recursion@6.0.2: + resolution: {integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==} + + regex-utilities@2.3.0: + resolution: {integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==} + + regex@6.0.1: + resolution: {integrity: sha512-uorlqlzAKjKQZ5P+kTJr3eeJGSVroLKoHmquUj4zHWuR+hEyNqlXsSKlYYF5F4NI6nl7tWCs0apKJ0lmfsXAPA==} regexp.prototype.flags@1.5.4: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} @@ -5402,11 +5346,13 @@ packages: remark-math@6.0.0: resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} - remark-mdx-remove-esm@1.1.0: - resolution: {integrity: sha512-oN3F9QRuPKSdzZi+wvEodBVjKwya63sl403pWzJvm0+c503iUjCDR+JAnP3Ho/4205IWbQ2NujPQi/B9kU6ZrA==} + remark-mdx-remove-esm@1.2.1: + resolution: {integrity: sha512-Vz1GKmRR9u7ij8TTf88DK8dFc/mVror9YUJekl1uP+S0sTzHxGdszJMeBbh96aIR+ZiI2QRKHu2UsV+/pWj7uQ==} + peerDependencies: + unified: ^11 - remark-mdx@3.1.0: - resolution: {integrity: sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==} + remark-mdx@3.1.1: + resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} remark-parse@11.0.0: resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} @@ -5424,10 +5370,6 @@ packages: remark@15.0.1: resolution: {integrity: sha512-Eht5w30ruCXgFmxVUSlNWQ9iiimq07URKeFS3hNc8cUWy1llX4KDWfyEDZRycMc+znsN9Ux5/tJ/BFdgdOwA3A==} - repeat-string@1.6.1: - resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} - engines: {node: '>=0.10'} - require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -5450,8 +5392,8 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.10: - resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + resolve@1.22.11: + resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} engines: {node: '>= 0.4'} hasBin: true @@ -5479,14 +5421,17 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rolldown-plugin-dts@0.13.3: - resolution: {integrity: sha512-l0n0YsO9NI9Ve5Njmb1k2AYoDsgO8go1UEkXYnRgxoJokJXAK1V486XvOMxDpC8FcfgJwfQe71qmwpBjZXUOow==} + rolldown-plugin-dts@0.13.14: + resolution: {integrity: sha512-wjNhHZz9dlN6PTIXyizB6u/mAg1wEFMW9yw7imEVe3CxHSRnNHVyycIX0yDEOVJfDNISLPbkCIPEpFpizy5+PQ==} engines: {node: '>=20.18.0'} peerDependencies: + '@typescript/native-preview': '>=7.0.0-dev.20250601.1' rolldown: ^1.0.0-beta.9 typescript: ^5.0.0 - vue-tsc: ~2.2.0 + vue-tsc: ^2.2.0 || ^3.0.0 peerDependenciesMeta: + '@typescript/native-preview': + optional: true typescript: optional: true vue-tsc: @@ -5501,13 +5446,13 @@ packages: '@oxc-project/runtime': optional: true - rollup@4.39.0: - resolution: {integrity: sha512-thI8kNc02yNvnmJp8dr3fNWJ9tCONDhp6TV35X6HkKGGs9E6q7YWCHbe5vKiTa7TAiNcFEmXKj3X/pG2b3ci0g==} + rollup@4.52.5: + resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true - run-async@3.0.0: - resolution: {integrity: sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==} + run-async@4.0.6: + resolution: {integrity: sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==} engines: {node: '>=0.12.0'} run-parallel@1.2.0: @@ -5554,13 +5499,8 @@ packages: secure-json-parse@2.7.0: resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} - semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} - engines: {node: '>=10'} - hasBin: true - - semver@7.7.2: - resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + semver@7.7.3: + resolution: {integrity: sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==} engines: {node: '>=10'} hasBin: true @@ -5603,9 +5543,8 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shell-quote@1.8.2: - resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==} - engines: {node: '>= 0.4'} + shiki@3.14.0: + resolution: {integrity: sha512-J0yvpLI7LSig3Z3acIuDLouV5UCKQqu8qOArwMx+/yPVC3WRMgrP67beaG8F+j4xfEWE0eVC4GeBCIXeOPra1g==} side-channel-list@1.0.0: resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} @@ -5643,8 +5582,8 @@ packages: simple-get@4.0.1: resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} - simple-swizzle@0.2.2: - resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + simple-swizzle@0.2.4: + resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} slash@3.0.0: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} @@ -5669,8 +5608,8 @@ packages: resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} engines: {node: '>= 14'} - socks@2.8.4: - resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} + socks@2.8.7: + resolution: {integrity: sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==} engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} sort-object-keys@1.1.3: @@ -5691,9 +5630,9 @@ packages: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} - source-map@0.7.4: - resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} - engines: {node: '>= 8'} + source-map@0.7.6: + resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} + engines: {node: '>= 12'} space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} @@ -5701,16 +5640,9 @@ packages: spawndamnit@3.0.1: resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} - split2@4.2.0: - resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} - engines: {node: '>= 10.x'} - sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - sprintf-js@1.1.3: - resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} - stable-hash@0.0.5: resolution: {integrity: sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==} @@ -5738,15 +5670,19 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} - std-env@3.9.0: - resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} stdin-discarder@0.1.0: resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - streamx@2.22.0: - resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==} + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + + streamx@2.23.0: + resolution: {integrity: sha512-kn+e44esVfn2Fa/O0CPFcex27fjIL6MkVae0Mm6q+E6f0hWv578YCERbv+4m02cjxvDsPKLnmxral/rR6lBMAg==} string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} @@ -5798,14 +5734,14 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - strip-literal@3.0.0: - resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} + strip-literal@3.1.0: + resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==} - style-to-js@1.1.16: - resolution: {integrity: sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==} + style-to-js@1.1.18: + resolution: {integrity: sha512-JFPn62D4kJaPTnhFUI244MThx+FEGbi+9dw1b9yBBQ+1CZpV7QAT8kUtJ7b7EUNdHajjF/0x8fT+16oLJoojLg==} - style-to-object@1.0.8: - resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} + style-to-object@1.0.11: + resolution: {integrity: sha512-5A560JmXr7wDyGLK12Nq/EYS38VkGlglVzkis1JEdbGWSnbQIEhZzTJhzURXN5/8WwwFCs/f/VVcmkTppbXLow==} supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} @@ -5815,24 +5751,24 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - swr@2.3.3: - resolution: {integrity: sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A==} + swr@2.3.6: + resolution: {integrity: sha512-wfHRmHWk/isGNMwlLGlZX5Gzz/uTgo0o2IRuTMcf4CPuPFJZlq0rDaKUx+ozB5nBOReNV1kiOyzMfj+MBMikLw==} peerDependencies: react: ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - synckit@0.11.4: - resolution: {integrity: sha512-Q/XQKRaJiLiFIBNN+mndW7S/RHxvwzuZS6ZwmRzUBqJBv/5QIKCEwkBC8GBf8EQJKYnaFs0wOZbKTXBPj8L9oQ==} + synckit@0.11.11: + resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} engines: {node: ^14.18.0 || >=16.0.0} synckit@0.11.6: resolution: {integrity: sha512-2pR2ubZSV64f/vqm9eLPz/KOvR9Dm+Co/5ChLgeHl0yEDRc6h5hXHoxEQH8Y5Ljycozd3p1k5TTSVdzYGkPvLw==} engines: {node: ^14.18.0 || >=16.0.0} - tar-fs@2.1.2: - resolution: {integrity: sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==} + tar-fs@2.1.4: + resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} - tar-fs@3.0.8: - resolution: {integrity: sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==} + tar-fs@3.1.1: + resolution: {integrity: sha512-LZA0oaPOc2fVo82Txf3gw+AkEd38szODlptMYejQUhndHMLQ9M059uXR+AfS7DNo0NpINvSqDsvyaCrBVkptWg==} tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} @@ -5868,12 +5804,8 @@ packages: tinyexec@1.0.1: resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==} - tinyglobby@0.2.13: - resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} - engines: {node: '>=12.0.0'} - - tinyglobby@0.2.14: - resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} + tinyglobby@0.2.15: + resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} tinypool@1.1.1: @@ -5884,8 +5816,8 @@ packages: resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} - tinyspy@4.0.3: - resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} + tinyspy@4.0.4: + resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} engines: {node: '>=14.0.0'} tmp@0.0.33: @@ -5918,8 +5850,8 @@ packages: peerDependencies: typescript: '>=4.8.4' - tsconfck@3.1.5: - resolution: {integrity: sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==} + tsconfck@3.1.6: + resolution: {integrity: sha512-ks6Vjr/jEw0P1gmOVwutM3B7fWxoWBL2KRDb1JfqGVawBmO5UsvmWOQFGHBPl5yxYz4eERr19E6L7NMv+Fej4w==} engines: {node: ^18 || >=20} hasBin: true peerDependencies: @@ -5953,8 +5885,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tsx@4.20.3: - resolution: {integrity: sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==} + tsx@4.19.4: + resolution: {integrity: sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==} engines: {node: '>=18.0.0'} hasBin: true @@ -5999,10 +5931,6 @@ packages: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} - type-fest@0.21.3: - resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} - engines: {node: '>=10'} - type-fest@4.41.0: resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} @@ -6038,8 +5966,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.9.0' - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + typescript@5.7.3: + resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} engines: {node: '>=14.17'} hasBin: true @@ -6056,8 +5984,8 @@ packages: unbzip2-stream@1.4.3: resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} - unconfig@7.3.2: - resolution: {integrity: sha512-nqG5NNL2wFVGZ0NA/aCFw0oJ2pxSf1lwg4Z5ill8wd7K4KX/rQbHlwbh+bjctXL5Ly1xtzHenHGOK0b+lG6JVg==} + unconfig@7.3.3: + resolution: {integrity: sha512-QCkQoOnJF8L107gxfHL0uavn7WD9b3dpBcFX6HtfQYmjw2YzWxGuFQ0N0J6tE9oguCBJn9KOvfqYDCMPHIZrBA==} undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} @@ -6074,8 +6002,8 @@ packages: unist-util-is@5.2.1: resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==} - unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} + unist-util-is@6.0.1: + resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} unist-util-map@4.0.0: resolution: {integrity: sha512-HJs1tpkSmRJUzj6fskQrS5oYhBYlmtcvy4SepdDEEsL04FjBrgF0Mgggvxc1/qGBGgW7hRh9+UBK1aqTEnBpIA==} @@ -6104,8 +6032,8 @@ packages: unist-util-visit-parents@5.1.3: resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==} - unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} + unist-util-visit-parents@6.0.2: + resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} unist-util-visit@4.1.2: resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==} @@ -6125,8 +6053,8 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - unrs-resolver@1.7.2: - resolution: {integrity: sha512-BBKpaylOW8KbHsu378Zky/dGh4ckT/4NW/0SHRABdqRLcQJ2dAOjDo9g97p04sWflm0kqPqpUatxReNV/dqI5A==} + unrs-resolver@1.11.1: + resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==} uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -6137,8 +6065,8 @@ packages: urlpattern-polyfill@10.0.0: resolution: {integrity: sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==} - use-sync-external-store@1.5.0: - resolution: {integrity: sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==} + use-sync-external-store@1.6.0: + resolution: {integrity: sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -6178,8 +6106,8 @@ packages: vfile-matter@5.0.1: resolution: {integrity: sha512-o6roP82AiX0XfkyTHyRCMXgHfltUNlXSEqCIS80f+mbAyiQBE2fxtDVMtseyytGx75sihiJFo/zR6r/4LTs2Cw==} - vfile-message@4.0.2: - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} + vfile-message@4.0.3: + resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} @@ -6205,19 +6133,19 @@ packages: vite: optional: true - vite@6.2.5: - resolution: {integrity: sha512-j023J/hCAa4pRIUH6J9HemwYfjB5llR2Ps0CWeikOtdR8+pAURAk0DoJC5/mm9kd+UgdnIy7d6HE4EAvlYhPhA==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vite@7.1.12: + resolution: {integrity: sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==} + engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@types/node': ^20.19.0 || >=22.12.0 jiti: '>=1.21.0' - less: '*' + less: ^4.0.0 lightningcss: ^1.21.0 - sass: '*' - sass-embedded: '*' - stylus: '*' - sugarss: '*' + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 terser: ^5.16.0 tsx: ^4.8.1 yaml: ^2.4.2 @@ -6323,11 +6251,6 @@ packages: engines: {node: '>= 8'} hasBin: true - which@4.0.0: - resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==} - engines: {node: ^16.13.0 || >=18.0.0} - hasBin: true - why-is-node-running@2.3.0: resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} engines: {node: '>=8'} @@ -6376,8 +6299,8 @@ packages: utf-8-validate: optional: true - ws@8.18.2: - resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==} + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -6400,10 +6323,6 @@ packages: resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} engines: {node: '>=4.0'} - xtend@4.0.2: - resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} - engines: {node: '>=0.4'} - y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -6411,13 +6330,8 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@2.7.1: - resolution: {integrity: sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==} - engines: {node: '>= 14'} - hasBin: true - - yaml@2.8.0: - resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} + yaml@2.8.1: + resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} engines: {node: '>= 14.6'} hasBin: true @@ -6436,16 +6350,16 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yoctocolors-cjs@2.1.2: - resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==} + yoctocolors-cjs@2.1.3: + resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==} engines: {node: '>=18'} yoctocolors@2.1.1: resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} engines: {node: '>=18'} - zod-to-json-schema@3.24.5: - resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==} + zod-to-json-schema@3.24.6: + resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==} peerDependencies: zod: ^3.24.1 @@ -6462,7 +6376,7 @@ snapshots: '@a2a-js/sdk@0.2.2': dependencies: - '@types/cors': 2.8.18 + '@types/cors': 2.8.19 '@types/express': 5.0.3 body-parser: 2.2.0 cors: 2.8.5 @@ -6471,7 +6385,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@adraffy/ens-normalize@1.11.0': {} + '@adraffy/ens-normalize@1.11.1': {} '@ai-sdk/anthropic@1.2.11(zod@3.25.4)': dependencies: @@ -6496,12 +6410,12 @@ snapshots: dependencies: json-schema: 0.4.0 - '@ai-sdk/react@1.2.12(react@19.1.0)(zod@3.25.4)': + '@ai-sdk/react@1.2.12(react@19.2.0)(zod@3.25.4)': dependencies: '@ai-sdk/provider-utils': 2.2.8(zod@3.25.4) '@ai-sdk/ui-utils': 1.2.11(zod@3.25.4) - react: 19.1.0 - swr: 2.3.3(react@19.1.0) + react: 19.2.0 + swr: 2.3.6(react@19.2.0) throttleit: 2.1.0 optionalDependencies: zod: 3.25.4 @@ -6511,20 +6425,20 @@ snapshots: '@ai-sdk/provider': 1.1.3 '@ai-sdk/provider-utils': 2.2.8(zod@3.25.4) zod: 3.25.4 - zod-to-json-schema: 3.24.5(zod@3.25.4) + zod-to-json-schema: 3.24.6(zod@3.25.4) - '@ai-sdk/valibot@0.1.28(@valibot/to-json-schema@1.0.0(valibot@1.1.0(typescript@5.8.3)))(react@19.1.0)(valibot@1.1.0(typescript@5.8.3))(zod@3.25.4)': + '@ai-sdk/valibot@0.1.28(@valibot/to-json-schema@1.3.0(valibot@1.1.0(typescript@5.7.3)))(react@19.2.0)(valibot@1.1.0(typescript@5.7.3))(zod@3.25.4)': dependencies: - '@valibot/to-json-schema': 1.0.0(valibot@1.1.0(typescript@5.8.3)) - ai: 4.3.16(react@19.1.0)(zod@3.25.4) - valibot: 1.1.0(typescript@5.8.3) + '@valibot/to-json-schema': 1.3.0(valibot@1.1.0(typescript@5.7.3)) + ai: 4.3.16(react@19.2.0)(zod@3.25.4) + valibot: 1.1.0(typescript@5.7.3) transitivePeerDependencies: - react - zod '@asyncapi/parser@3.4.0': dependencies: - '@asyncapi/specs': 6.8.1 + '@asyncapi/specs': 6.10.0 '@openapi-contrib/openapi-schema-to-json-schema': 3.2.0 '@stoplight/json': 3.21.0 '@stoplight/json-ref-readers': 1.2.2 @@ -6535,51 +6449,51 @@ snapshots: '@stoplight/spectral-ref-resolver': 1.0.5 '@stoplight/types': 13.20.0 '@types/json-schema': 7.0.15 - '@types/urijs': 1.19.25 + '@types/urijs': 1.19.26 ajv: 8.17.1 ajv-errors: 3.0.0(ajv@8.17.1) ajv-formats: 2.1.1(ajv@8.17.1) - avsc: 5.7.7 + avsc: 5.7.9 js-yaml: 4.1.0 jsonpath-plus: 10.3.0 node-fetch: 2.6.7 transitivePeerDependencies: - encoding - '@asyncapi/specs@6.8.1': + '@asyncapi/specs@6.10.0': dependencies: '@types/json-schema': 7.0.15 '@babel/code-frame@7.27.1': dependencies: - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/generator@7.27.1': + '@babel/generator@7.28.5': dependencies: - '@babel/parser': 7.27.2 - '@babel/types': 7.27.1 - '@jridgewell/gen-mapping': 0.3.8 - '@jridgewell/trace-mapping': 0.3.25 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-validator-identifier@7.27.1': {} + '@babel/helper-validator-identifier@7.28.5': {} - '@babel/parser@7.27.2': + '@babel/parser@7.28.5': dependencies: - '@babel/types': 7.27.1 + '@babel/types': 7.28.5 - '@babel/runtime@7.27.1': {} + '@babel/runtime@7.28.4': {} - '@babel/types@7.27.1': + '@babel/types@7.28.5': dependencies: '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.27.1 + '@babel/helper-validator-identifier': 7.28.5 - '@changesets/apply-release-plan@7.0.12': + '@changesets/apply-release-plan@7.0.13': dependencies: '@changesets/config': 3.1.1 '@changesets/get-version-range-type': 0.4.0 @@ -6593,16 +6507,16 @@ snapshots: outdent: 0.5.0 prettier: 2.8.8 resolve-from: 5.0.0 - semver: 7.7.1 + semver: 7.7.3 - '@changesets/assemble-release-plan@6.0.8': + '@changesets/assemble-release-plan@6.0.9': dependencies: '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.1.3 '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 - semver: 7.7.1 + semver: 7.7.3 '@changesets/changelog-git@0.2.1': dependencies: @@ -6618,13 +6532,13 @@ snapshots: '@changesets/cli@2.29.4': dependencies: - '@changesets/apply-release-plan': 7.0.12 - '@changesets/assemble-release-plan': 6.0.8 + '@changesets/apply-release-plan': 7.0.13 + '@changesets/assemble-release-plan': 6.0.9 '@changesets/changelog-git': 0.2.1 '@changesets/config': 3.1.1 '@changesets/errors': 0.2.0 '@changesets/get-dependents-graph': 2.1.3 - '@changesets/get-release-plan': 4.0.12 + '@changesets/get-release-plan': 4.0.13 '@changesets/git': 3.0.4 '@changesets/logger': 0.1.1 '@changesets/pre': 2.0.2 @@ -6643,7 +6557,7 @@ snapshots: package-manager-detector: 0.2.11 picocolors: 1.1.1 resolve-from: 5.0.0 - semver: 7.7.1 + semver: 7.7.3 spawndamnit: 3.0.1 term-size: 2.2.1 @@ -6666,7 +6580,7 @@ snapshots: '@changesets/types': 6.1.0 '@manypkg/get-packages': 1.1.3 picocolors: 1.1.1 - semver: 7.7.1 + semver: 7.7.3 '@changesets/get-github-info@0.6.0': dependencies: @@ -6675,9 +6589,9 @@ snapshots: transitivePeerDependencies: - encoding - '@changesets/get-release-plan@4.0.12': + '@changesets/get-release-plan@4.0.13': dependencies: - '@changesets/assemble-release-plan': 6.0.8 + '@changesets/assemble-release-plan': 6.0.9 '@changesets/config': 3.1.1 '@changesets/pre': 2.0.2 '@changesets/read': 0.6.5 @@ -6733,72 +6647,69 @@ snapshots: dependencies: '@changesets/types': 6.1.0 fs-extra: 7.0.1 - human-id: 4.1.1 + human-id: 4.1.2 prettier: 2.8.8 - '@cloudflare/workers-types@4.20250505.0': - optional: true - '@cspell/cspell-bundled-dicts@9.0.1': dependencies: - '@cspell/dict-ada': 4.1.0 - '@cspell/dict-al': 1.1.0 - '@cspell/dict-aws': 4.0.10 - '@cspell/dict-bash': 4.2.0 - '@cspell/dict-companies': 3.2.1 - '@cspell/dict-cpp': 6.0.8 - '@cspell/dict-cryptocurrencies': 5.0.4 - '@cspell/dict-csharp': 4.0.6 - '@cspell/dict-css': 4.0.17 - '@cspell/dict-dart': 2.3.0 - '@cspell/dict-data-science': 2.0.8 - '@cspell/dict-django': 4.1.4 - '@cspell/dict-docker': 1.1.14 - '@cspell/dict-dotnet': 5.0.9 - '@cspell/dict-elixir': 4.0.7 - '@cspell/dict-en-common-misspellings': 2.0.11 - '@cspell/dict-en-gb-mit': 3.0.6 - '@cspell/dict-en_us': 4.4.8 - '@cspell/dict-filetypes': 3.0.12 - '@cspell/dict-flutter': 1.1.0 - '@cspell/dict-fonts': 4.0.4 - '@cspell/dict-fsharp': 1.1.0 - '@cspell/dict-fullstack': 3.2.6 - '@cspell/dict-gaming-terms': 1.1.1 - '@cspell/dict-git': 3.0.5 - '@cspell/dict-golang': 6.0.21 - '@cspell/dict-google': 1.0.8 - '@cspell/dict-haskell': 4.0.5 - '@cspell/dict-html': 4.0.11 - '@cspell/dict-html-symbol-entities': 4.0.3 - '@cspell/dict-java': 5.0.11 - '@cspell/dict-julia': 1.1.0 - '@cspell/dict-k8s': 1.0.10 - '@cspell/dict-kotlin': 1.1.0 - '@cspell/dict-latex': 4.0.3 - '@cspell/dict-lorem-ipsum': 4.0.4 - '@cspell/dict-lua': 4.0.7 - '@cspell/dict-makefile': 1.0.4 - '@cspell/dict-markdown': 2.0.10(@cspell/dict-css@4.0.17)(@cspell/dict-html-symbol-entities@4.0.3)(@cspell/dict-html@4.0.11)(@cspell/dict-typescript@3.2.1) - '@cspell/dict-monkeyc': 1.0.10 - '@cspell/dict-node': 5.0.7 - '@cspell/dict-npm': 5.2.3 - '@cspell/dict-php': 4.0.14 - '@cspell/dict-powershell': 5.0.14 - '@cspell/dict-public-licenses': 2.0.13 - '@cspell/dict-python': 4.2.18 - '@cspell/dict-r': 2.1.0 - '@cspell/dict-ruby': 5.0.8 - '@cspell/dict-rust': 4.0.11 - '@cspell/dict-scala': 5.0.7 - '@cspell/dict-shell': 1.1.0 - '@cspell/dict-software-terms': 5.0.9 - '@cspell/dict-sql': 2.2.0 - '@cspell/dict-svelte': 1.0.6 - '@cspell/dict-swift': 2.0.5 - '@cspell/dict-terraform': 1.1.1 - '@cspell/dict-typescript': 3.2.1 - '@cspell/dict-vue': 3.0.4 + '@cspell/dict-ada': 4.1.1 + '@cspell/dict-al': 1.1.1 + '@cspell/dict-aws': 4.0.15 + '@cspell/dict-bash': 4.2.2 + '@cspell/dict-companies': 3.2.7 + '@cspell/dict-cpp': 6.0.13 + '@cspell/dict-cryptocurrencies': 5.0.5 + '@cspell/dict-csharp': 4.0.7 + '@cspell/dict-css': 4.0.18 + '@cspell/dict-dart': 2.3.1 + '@cspell/dict-data-science': 2.0.11 + '@cspell/dict-django': 4.1.5 + '@cspell/dict-docker': 1.1.16 + '@cspell/dict-dotnet': 5.0.10 + '@cspell/dict-elixir': 4.0.8 + '@cspell/dict-en-common-misspellings': 2.1.7 + '@cspell/dict-en-gb-mit': 3.1.12 + '@cspell/dict-en_us': 4.4.22 + '@cspell/dict-filetypes': 3.0.14 + '@cspell/dict-flutter': 1.1.1 + '@cspell/dict-fonts': 4.0.5 + '@cspell/dict-fsharp': 1.1.1 + '@cspell/dict-fullstack': 3.2.7 + '@cspell/dict-gaming-terms': 1.1.2 + '@cspell/dict-git': 3.0.7 + '@cspell/dict-golang': 6.0.24 + '@cspell/dict-google': 1.0.9 + '@cspell/dict-haskell': 4.0.6 + '@cspell/dict-html': 4.0.12 + '@cspell/dict-html-symbol-entities': 4.0.4 + '@cspell/dict-java': 5.0.12 + '@cspell/dict-julia': 1.1.1 + '@cspell/dict-k8s': 1.0.12 + '@cspell/dict-kotlin': 1.1.1 + '@cspell/dict-latex': 4.0.4 + '@cspell/dict-lorem-ipsum': 4.0.5 + '@cspell/dict-lua': 4.0.8 + '@cspell/dict-makefile': 1.0.5 + '@cspell/dict-markdown': 2.0.12(@cspell/dict-css@4.0.18)(@cspell/dict-html-symbol-entities@4.0.4)(@cspell/dict-html@4.0.12)(@cspell/dict-typescript@3.2.3) + '@cspell/dict-monkeyc': 1.0.11 + '@cspell/dict-node': 5.0.8 + '@cspell/dict-npm': 5.2.19 + '@cspell/dict-php': 4.1.0 + '@cspell/dict-powershell': 5.0.15 + '@cspell/dict-public-licenses': 2.0.15 + '@cspell/dict-python': 4.2.21 + '@cspell/dict-r': 2.1.1 + '@cspell/dict-ruby': 5.0.9 + '@cspell/dict-rust': 4.0.12 + '@cspell/dict-scala': 5.0.8 + '@cspell/dict-shell': 1.1.2 + '@cspell/dict-software-terms': 5.1.10 + '@cspell/dict-sql': 2.2.1 + '@cspell/dict-svelte': 1.0.7 + '@cspell/dict-swift': 2.0.6 + '@cspell/dict-terraform': 1.1.3 + '@cspell/dict-typescript': 3.2.3 + '@cspell/dict-vue': 3.0.5 '@cspell/cspell-pipe@9.0.1': {} @@ -6810,143 +6721,143 @@ snapshots: '@cspell/cspell-types@9.0.1': {} - '@cspell/dict-ada@4.1.0': {} + '@cspell/dict-ada@4.1.1': {} - '@cspell/dict-al@1.1.0': {} + '@cspell/dict-al@1.1.1': {} - '@cspell/dict-aws@4.0.10': {} + '@cspell/dict-aws@4.0.15': {} - '@cspell/dict-bash@4.2.0': + '@cspell/dict-bash@4.2.2': dependencies: - '@cspell/dict-shell': 1.1.0 + '@cspell/dict-shell': 1.1.2 - '@cspell/dict-companies@3.2.1': {} + '@cspell/dict-companies@3.2.7': {} - '@cspell/dict-cpp@6.0.8': {} + '@cspell/dict-cpp@6.0.13': {} - '@cspell/dict-cryptocurrencies@5.0.4': {} + '@cspell/dict-cryptocurrencies@5.0.5': {} - '@cspell/dict-csharp@4.0.6': {} + '@cspell/dict-csharp@4.0.7': {} - '@cspell/dict-css@4.0.17': {} + '@cspell/dict-css@4.0.18': {} - '@cspell/dict-dart@2.3.0': {} + '@cspell/dict-dart@2.3.1': {} - '@cspell/dict-data-science@2.0.8': {} + '@cspell/dict-data-science@2.0.11': {} - '@cspell/dict-django@4.1.4': {} + '@cspell/dict-django@4.1.5': {} - '@cspell/dict-docker@1.1.14': {} + '@cspell/dict-docker@1.1.16': {} - '@cspell/dict-dotnet@5.0.9': {} + '@cspell/dict-dotnet@5.0.10': {} - '@cspell/dict-elixir@4.0.7': {} + '@cspell/dict-elixir@4.0.8': {} - '@cspell/dict-en-common-misspellings@2.0.11': {} + '@cspell/dict-en-common-misspellings@2.1.7': {} - '@cspell/dict-en-gb-mit@3.0.6': {} + '@cspell/dict-en-gb-mit@3.1.12': {} - '@cspell/dict-en_us@4.4.8': {} + '@cspell/dict-en_us@4.4.22': {} - '@cspell/dict-filetypes@3.0.12': {} + '@cspell/dict-filetypes@3.0.14': {} - '@cspell/dict-flutter@1.1.0': {} + '@cspell/dict-flutter@1.1.1': {} - '@cspell/dict-fonts@4.0.4': {} + '@cspell/dict-fonts@4.0.5': {} - '@cspell/dict-fsharp@1.1.0': {} + '@cspell/dict-fsharp@1.1.1': {} - '@cspell/dict-fullstack@3.2.6': {} + '@cspell/dict-fullstack@3.2.7': {} - '@cspell/dict-gaming-terms@1.1.1': {} + '@cspell/dict-gaming-terms@1.1.2': {} - '@cspell/dict-git@3.0.5': {} + '@cspell/dict-git@3.0.7': {} - '@cspell/dict-golang@6.0.21': {} + '@cspell/dict-golang@6.0.24': {} - '@cspell/dict-google@1.0.8': {} + '@cspell/dict-google@1.0.9': {} - '@cspell/dict-haskell@4.0.5': {} + '@cspell/dict-haskell@4.0.6': {} - '@cspell/dict-html-symbol-entities@4.0.3': {} + '@cspell/dict-html-symbol-entities@4.0.4': {} - '@cspell/dict-html@4.0.11': {} + '@cspell/dict-html@4.0.12': {} - '@cspell/dict-java@5.0.11': {} + '@cspell/dict-java@5.0.12': {} - '@cspell/dict-julia@1.1.0': {} + '@cspell/dict-julia@1.1.1': {} - '@cspell/dict-k8s@1.0.10': {} + '@cspell/dict-k8s@1.0.12': {} - '@cspell/dict-kotlin@1.1.0': {} + '@cspell/dict-kotlin@1.1.1': {} - '@cspell/dict-latex@4.0.3': {} + '@cspell/dict-latex@4.0.4': {} - '@cspell/dict-lorem-ipsum@4.0.4': {} + '@cspell/dict-lorem-ipsum@4.0.5': {} - '@cspell/dict-lua@4.0.7': {} + '@cspell/dict-lua@4.0.8': {} - '@cspell/dict-makefile@1.0.4': {} + '@cspell/dict-makefile@1.0.5': {} - '@cspell/dict-markdown@2.0.10(@cspell/dict-css@4.0.17)(@cspell/dict-html-symbol-entities@4.0.3)(@cspell/dict-html@4.0.11)(@cspell/dict-typescript@3.2.1)': + '@cspell/dict-markdown@2.0.12(@cspell/dict-css@4.0.18)(@cspell/dict-html-symbol-entities@4.0.4)(@cspell/dict-html@4.0.12)(@cspell/dict-typescript@3.2.3)': dependencies: - '@cspell/dict-css': 4.0.17 - '@cspell/dict-html': 4.0.11 - '@cspell/dict-html-symbol-entities': 4.0.3 - '@cspell/dict-typescript': 3.2.1 + '@cspell/dict-css': 4.0.18 + '@cspell/dict-html': 4.0.12 + '@cspell/dict-html-symbol-entities': 4.0.4 + '@cspell/dict-typescript': 3.2.3 - '@cspell/dict-monkeyc@1.0.10': {} + '@cspell/dict-monkeyc@1.0.11': {} - '@cspell/dict-node@5.0.7': {} + '@cspell/dict-node@5.0.8': {} - '@cspell/dict-npm@5.2.3': {} + '@cspell/dict-npm@5.2.19': {} - '@cspell/dict-php@4.0.14': {} + '@cspell/dict-php@4.1.0': {} - '@cspell/dict-powershell@5.0.14': {} + '@cspell/dict-powershell@5.0.15': {} - '@cspell/dict-public-licenses@2.0.13': {} + '@cspell/dict-public-licenses@2.0.15': {} - '@cspell/dict-python@4.2.18': + '@cspell/dict-python@4.2.21': dependencies: - '@cspell/dict-data-science': 2.0.8 + '@cspell/dict-data-science': 2.0.11 - '@cspell/dict-r@2.1.0': {} + '@cspell/dict-r@2.1.1': {} - '@cspell/dict-ruby@5.0.8': {} + '@cspell/dict-ruby@5.0.9': {} - '@cspell/dict-rust@4.0.11': {} + '@cspell/dict-rust@4.0.12': {} - '@cspell/dict-scala@5.0.7': {} + '@cspell/dict-scala@5.0.8': {} - '@cspell/dict-shell@1.1.0': {} + '@cspell/dict-shell@1.1.2': {} - '@cspell/dict-software-terms@5.0.9': {} + '@cspell/dict-software-terms@5.1.10': {} - '@cspell/dict-sql@2.2.0': {} + '@cspell/dict-sql@2.2.1': {} - '@cspell/dict-svelte@1.0.6': {} + '@cspell/dict-svelte@1.0.7': {} - '@cspell/dict-swift@2.0.5': {} + '@cspell/dict-swift@2.0.6': {} - '@cspell/dict-terraform@1.1.1': {} + '@cspell/dict-terraform@1.1.3': {} - '@cspell/dict-typescript@3.2.1': {} + '@cspell/dict-typescript@3.2.3': {} - '@cspell/dict-vue@3.0.4': {} + '@cspell/dict-vue@3.0.5': {} '@cspell/dynamic-import@9.0.1': dependencies: '@cspell/url': 9.0.1 - import-meta-resolve: 4.1.0 + import-meta-resolve: 4.2.0 - '@cspell/eslint-plugin@9.0.1(eslint@9.27.0(jiti@2.4.2))': + '@cspell/eslint-plugin@9.0.1(eslint@9.27.0(jiti@2.6.1))': dependencies: '@cspell/cspell-types': 9.0.1 '@cspell/url': 9.0.1 cspell-lib: 9.0.1 - eslint: 9.27.0(jiti@2.4.2) - synckit: 0.11.4 + eslint: 9.27.0(jiti@2.6.1) + synckit: 0.11.11 '@cspell/filetypes@9.0.1': {} @@ -6956,18 +6867,18 @@ snapshots: '@drizzle-team/brocli@0.10.2': {} - '@emnapi/core@1.4.0': + '@emnapi/core@1.6.0': dependencies: - '@emnapi/wasi-threads': 1.0.1 + '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.4.3': + '@emnapi/runtime@1.6.0': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.0.1': + '@emnapi/wasi-threads@1.1.0': dependencies: tslib: 2.8.1 optional: true @@ -6980,165 +6891,168 @@ snapshots: '@esbuild-kit/esm-loader@2.6.5': dependencies: '@esbuild-kit/core-utils': 3.3.2 - get-tsconfig: 4.10.0 + get-tsconfig: 4.13.0 - '@esbuild/aix-ppc64@0.25.2': + '@esbuild/aix-ppc64@0.25.11': optional: true '@esbuild/android-arm64@0.18.20': optional: true - '@esbuild/android-arm64@0.25.2': + '@esbuild/android-arm64@0.25.11': optional: true '@esbuild/android-arm@0.18.20': optional: true - '@esbuild/android-arm@0.25.2': + '@esbuild/android-arm@0.25.11': optional: true '@esbuild/android-x64@0.18.20': optional: true - '@esbuild/android-x64@0.25.2': + '@esbuild/android-x64@0.25.11': optional: true '@esbuild/darwin-arm64@0.18.20': optional: true - '@esbuild/darwin-arm64@0.25.2': + '@esbuild/darwin-arm64@0.25.11': optional: true '@esbuild/darwin-x64@0.18.20': optional: true - '@esbuild/darwin-x64@0.25.2': + '@esbuild/darwin-x64@0.25.11': optional: true '@esbuild/freebsd-arm64@0.18.20': optional: true - '@esbuild/freebsd-arm64@0.25.2': + '@esbuild/freebsd-arm64@0.25.11': optional: true '@esbuild/freebsd-x64@0.18.20': optional: true - '@esbuild/freebsd-x64@0.25.2': + '@esbuild/freebsd-x64@0.25.11': optional: true '@esbuild/linux-arm64@0.18.20': optional: true - '@esbuild/linux-arm64@0.25.2': + '@esbuild/linux-arm64@0.25.11': optional: true '@esbuild/linux-arm@0.18.20': optional: true - '@esbuild/linux-arm@0.25.2': + '@esbuild/linux-arm@0.25.11': optional: true '@esbuild/linux-ia32@0.18.20': optional: true - '@esbuild/linux-ia32@0.25.2': + '@esbuild/linux-ia32@0.25.11': optional: true '@esbuild/linux-loong64@0.18.20': optional: true - '@esbuild/linux-loong64@0.25.2': + '@esbuild/linux-loong64@0.25.11': optional: true '@esbuild/linux-mips64el@0.18.20': optional: true - '@esbuild/linux-mips64el@0.25.2': + '@esbuild/linux-mips64el@0.25.11': optional: true '@esbuild/linux-ppc64@0.18.20': optional: true - '@esbuild/linux-ppc64@0.25.2': + '@esbuild/linux-ppc64@0.25.11': optional: true '@esbuild/linux-riscv64@0.18.20': optional: true - '@esbuild/linux-riscv64@0.25.2': + '@esbuild/linux-riscv64@0.25.11': optional: true '@esbuild/linux-s390x@0.18.20': optional: true - '@esbuild/linux-s390x@0.25.2': + '@esbuild/linux-s390x@0.25.11': optional: true '@esbuild/linux-x64@0.18.20': optional: true - '@esbuild/linux-x64@0.25.2': + '@esbuild/linux-x64@0.25.11': optional: true - '@esbuild/netbsd-arm64@0.25.2': + '@esbuild/netbsd-arm64@0.25.11': optional: true '@esbuild/netbsd-x64@0.18.20': optional: true - '@esbuild/netbsd-x64@0.25.2': + '@esbuild/netbsd-x64@0.25.11': optional: true - '@esbuild/openbsd-arm64@0.25.2': + '@esbuild/openbsd-arm64@0.25.11': optional: true '@esbuild/openbsd-x64@0.18.20': optional: true - '@esbuild/openbsd-x64@0.25.2': + '@esbuild/openbsd-x64@0.25.11': + optional: true + + '@esbuild/openharmony-arm64@0.25.11': optional: true '@esbuild/sunos-x64@0.18.20': optional: true - '@esbuild/sunos-x64@0.25.2': + '@esbuild/sunos-x64@0.25.11': optional: true '@esbuild/win32-arm64@0.18.20': optional: true - '@esbuild/win32-arm64@0.25.2': + '@esbuild/win32-arm64@0.25.11': optional: true '@esbuild/win32-ia32@0.18.20': optional: true - '@esbuild/win32-ia32@0.25.2': + '@esbuild/win32-ia32@0.25.11': optional: true '@esbuild/win32-x64@0.18.20': optional: true - '@esbuild/win32-x64@0.25.2': + '@esbuild/win32-x64@0.25.11': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.27.0(jiti@2.4.2))': + '@eslint-community/eslint-utils@4.9.0(eslint@9.27.0(jiti@2.6.1))': dependencies: - eslint: 9.27.0(jiti@2.4.2) + eslint: 9.27.0(jiti@2.6.1) eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.12.1': {} + '@eslint-community/regexpp@4.12.2': {} - '@eslint/config-array@0.20.0': + '@eslint/config-array@0.20.1': dependencies: - '@eslint/object-schema': 2.1.6 - debug: 4.4.1 + '@eslint/object-schema': 2.1.7 + debug: 4.4.3 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.2.1': {} + '@eslint/config-helpers@0.2.3': {} '@eslint/core@0.10.0': dependencies: @@ -7156,11 +7070,15 @@ snapshots: dependencies: '@types/json-schema': 7.0.15 + '@eslint/core@0.15.2': + dependencies: + '@types/json-schema': 7.0.15 + '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 - debug: 4.4.1 - espree: 10.3.0 + debug: 4.4.3 + espree: 10.4.0 globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 @@ -7176,7 +7094,7 @@ snapshots: dependencies: '@eslint/core': 0.12.0 '@eslint/plugin-kit': 0.2.8 - '@humanwhocodes/momoa': 3.3.8 + '@humanwhocodes/momoa': 3.3.10 natural-compare: 1.4.0 '@eslint/markdown@6.4.0': @@ -7191,41 +7109,39 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/object-schema@2.1.6': {} + '@eslint/object-schema@2.1.7': {} '@eslint/plugin-kit@0.2.8': dependencies: '@eslint/core': 0.13.0 levn: 0.4.1 - '@eslint/plugin-kit@0.3.1': + '@eslint/plugin-kit@0.3.5': dependencies: - '@eslint/core': 0.14.0 + '@eslint/core': 0.15.2 levn: 0.4.1 '@hono/node-server@1.14.2(hono@4.7.10)': dependencies: hono: 4.7.10 - '@hono/valibot-validator@0.5.2(hono@4.7.10)(valibot@1.1.0(typescript@5.8.3))': + '@hono/valibot-validator@0.5.2(hono@4.7.10)(valibot@1.1.0(typescript@5.7.3))': dependencies: hono: 4.7.10 - valibot: 1.1.0(typescript@5.8.3) + valibot: 1.1.0(typescript@5.7.3) '@humanfs/core@0.19.1': {} - '@humanfs/node@0.16.6': + '@humanfs/node@0.16.7': dependencies: '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 + '@humanwhocodes/retry': 0.4.3 '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/momoa@3.3.8': {} - - '@humanwhocodes/retry@0.3.1': {} + '@humanwhocodes/momoa@3.3.10': {} - '@humanwhocodes/retry@0.4.2': {} + '@humanwhocodes/retry@0.4.3': {} '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: @@ -7293,7 +7209,7 @@ snapshots: '@img/sharp-wasm32@0.33.5': dependencies: - '@emnapi/runtime': 1.4.3 + '@emnapi/runtime': 1.6.0 optional: true '@img/sharp-win32-ia32@0.33.5': @@ -7302,138 +7218,165 @@ snapshots: '@img/sharp-win32-x64@0.33.5': optional: true - '@inquirer/checkbox@4.1.6(@types/node@22.15.19)': + '@inquirer/ansi@1.0.1': {} + + '@inquirer/checkbox@4.3.0(@types/node@22.18.13)': dependencies: - '@inquirer/core': 10.1.11(@types/node@22.15.19) - '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.6(@types/node@22.15.19) - ansi-escapes: 4.3.2 - yoctocolors-cjs: 2.1.2 + '@inquirer/ansi': 1.0.1 + '@inquirer/core': 10.3.0(@types/node@22.18.13) + '@inquirer/figures': 1.0.14 + '@inquirer/type': 3.0.9(@types/node@22.18.13) + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.15.19 + '@types/node': 22.18.13 - '@inquirer/confirm@5.1.10(@types/node@22.15.19)': + '@inquirer/confirm@5.1.19(@types/node@22.18.13)': dependencies: - '@inquirer/core': 10.1.11(@types/node@22.15.19) - '@inquirer/type': 3.0.6(@types/node@22.15.19) + '@inquirer/core': 10.3.0(@types/node@22.18.13) + '@inquirer/type': 3.0.9(@types/node@22.18.13) optionalDependencies: - '@types/node': 22.15.19 + '@types/node': 22.18.13 - '@inquirer/core@10.1.11(@types/node@22.15.19)': + '@inquirer/core@10.3.0(@types/node@22.18.13)': dependencies: - '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.6(@types/node@22.15.19) - ansi-escapes: 4.3.2 + '@inquirer/ansi': 1.0.1 + '@inquirer/figures': 1.0.14 + '@inquirer/type': 3.0.9(@types/node@22.18.13) cli-width: 4.1.0 mute-stream: 2.0.0 signal-exit: 4.1.0 wrap-ansi: 6.2.0 - yoctocolors-cjs: 2.1.2 + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.15.19 + '@types/node': 22.18.13 - '@inquirer/editor@4.2.11(@types/node@22.15.19)': + '@inquirer/editor@4.2.21(@types/node@22.18.13)': dependencies: - '@inquirer/core': 10.1.11(@types/node@22.15.19) - '@inquirer/type': 3.0.6(@types/node@22.15.19) - external-editor: 3.1.0 + '@inquirer/core': 10.3.0(@types/node@22.18.13) + '@inquirer/external-editor': 1.0.2(@types/node@22.18.13) + '@inquirer/type': 3.0.9(@types/node@22.18.13) optionalDependencies: - '@types/node': 22.15.19 + '@types/node': 22.18.13 - '@inquirer/expand@4.0.13(@types/node@22.15.19)': + '@inquirer/expand@4.0.21(@types/node@22.18.13)': dependencies: - '@inquirer/core': 10.1.11(@types/node@22.15.19) - '@inquirer/type': 3.0.6(@types/node@22.15.19) - yoctocolors-cjs: 2.1.2 + '@inquirer/core': 10.3.0(@types/node@22.18.13) + '@inquirer/type': 3.0.9(@types/node@22.18.13) + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.15.19 + '@types/node': 22.18.13 - '@inquirer/figures@1.0.11': {} + '@inquirer/external-editor@1.0.2(@types/node@22.18.13)': + dependencies: + chardet: 2.1.0 + iconv-lite: 0.7.0 + optionalDependencies: + '@types/node': 22.18.13 - '@inquirer/input@4.1.10(@types/node@22.15.19)': + '@inquirer/figures@1.0.14': {} + + '@inquirer/input@4.2.5(@types/node@22.18.13)': dependencies: - '@inquirer/core': 10.1.11(@types/node@22.15.19) - '@inquirer/type': 3.0.6(@types/node@22.15.19) + '@inquirer/core': 10.3.0(@types/node@22.18.13) + '@inquirer/type': 3.0.9(@types/node@22.18.13) optionalDependencies: - '@types/node': 22.15.19 + '@types/node': 22.18.13 - '@inquirer/number@3.0.13(@types/node@22.15.19)': + '@inquirer/number@3.0.21(@types/node@22.18.13)': dependencies: - '@inquirer/core': 10.1.11(@types/node@22.15.19) - '@inquirer/type': 3.0.6(@types/node@22.15.19) + '@inquirer/core': 10.3.0(@types/node@22.18.13) + '@inquirer/type': 3.0.9(@types/node@22.18.13) optionalDependencies: - '@types/node': 22.15.19 + '@types/node': 22.18.13 - '@inquirer/password@4.0.13(@types/node@22.15.19)': + '@inquirer/password@4.0.21(@types/node@22.18.13)': dependencies: - '@inquirer/core': 10.1.11(@types/node@22.15.19) - '@inquirer/type': 3.0.6(@types/node@22.15.19) - ansi-escapes: 4.3.2 + '@inquirer/ansi': 1.0.1 + '@inquirer/core': 10.3.0(@types/node@22.18.13) + '@inquirer/type': 3.0.9(@types/node@22.18.13) + optionalDependencies: + '@types/node': 22.18.13 + + '@inquirer/prompts@7.5.1(@types/node@22.18.13)': + dependencies: + '@inquirer/checkbox': 4.3.0(@types/node@22.18.13) + '@inquirer/confirm': 5.1.19(@types/node@22.18.13) + '@inquirer/editor': 4.2.21(@types/node@22.18.13) + '@inquirer/expand': 4.0.21(@types/node@22.18.13) + '@inquirer/input': 4.2.5(@types/node@22.18.13) + '@inquirer/number': 3.0.21(@types/node@22.18.13) + '@inquirer/password': 4.0.21(@types/node@22.18.13) + '@inquirer/rawlist': 4.1.9(@types/node@22.18.13) + '@inquirer/search': 3.2.0(@types/node@22.18.13) + '@inquirer/select': 4.4.0(@types/node@22.18.13) optionalDependencies: - '@types/node': 22.15.19 - - '@inquirer/prompts@7.5.1(@types/node@22.15.19)': - dependencies: - '@inquirer/checkbox': 4.1.6(@types/node@22.15.19) - '@inquirer/confirm': 5.1.10(@types/node@22.15.19) - '@inquirer/editor': 4.2.11(@types/node@22.15.19) - '@inquirer/expand': 4.0.13(@types/node@22.15.19) - '@inquirer/input': 4.1.10(@types/node@22.15.19) - '@inquirer/number': 3.0.13(@types/node@22.15.19) - '@inquirer/password': 4.0.13(@types/node@22.15.19) - '@inquirer/rawlist': 4.1.1(@types/node@22.15.19) - '@inquirer/search': 3.0.13(@types/node@22.15.19) - '@inquirer/select': 4.2.1(@types/node@22.15.19) + '@types/node': 22.18.13 + + '@inquirer/prompts@7.9.0(@types/node@22.18.13)': + dependencies: + '@inquirer/checkbox': 4.3.0(@types/node@22.18.13) + '@inquirer/confirm': 5.1.19(@types/node@22.18.13) + '@inquirer/editor': 4.2.21(@types/node@22.18.13) + '@inquirer/expand': 4.0.21(@types/node@22.18.13) + '@inquirer/input': 4.2.5(@types/node@22.18.13) + '@inquirer/number': 3.0.21(@types/node@22.18.13) + '@inquirer/password': 4.0.21(@types/node@22.18.13) + '@inquirer/rawlist': 4.1.9(@types/node@22.18.13) + '@inquirer/search': 3.2.0(@types/node@22.18.13) + '@inquirer/select': 4.4.0(@types/node@22.18.13) optionalDependencies: - '@types/node': 22.15.19 + '@types/node': 22.18.13 - '@inquirer/rawlist@4.1.1(@types/node@22.15.19)': + '@inquirer/rawlist@4.1.9(@types/node@22.18.13)': dependencies: - '@inquirer/core': 10.1.11(@types/node@22.15.19) - '@inquirer/type': 3.0.6(@types/node@22.15.19) - yoctocolors-cjs: 2.1.2 + '@inquirer/core': 10.3.0(@types/node@22.18.13) + '@inquirer/type': 3.0.9(@types/node@22.18.13) + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.15.19 + '@types/node': 22.18.13 - '@inquirer/search@3.0.13(@types/node@22.15.19)': + '@inquirer/search@3.2.0(@types/node@22.18.13)': dependencies: - '@inquirer/core': 10.1.11(@types/node@22.15.19) - '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.6(@types/node@22.15.19) - yoctocolors-cjs: 2.1.2 + '@inquirer/core': 10.3.0(@types/node@22.18.13) + '@inquirer/figures': 1.0.14 + '@inquirer/type': 3.0.9(@types/node@22.18.13) + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.15.19 + '@types/node': 22.18.13 - '@inquirer/select@4.2.1(@types/node@22.15.19)': + '@inquirer/select@4.4.0(@types/node@22.18.13)': dependencies: - '@inquirer/core': 10.1.11(@types/node@22.15.19) - '@inquirer/figures': 1.0.11 - '@inquirer/type': 3.0.6(@types/node@22.15.19) - ansi-escapes: 4.3.2 - yoctocolors-cjs: 2.1.2 + '@inquirer/ansi': 1.0.1 + '@inquirer/core': 10.3.0(@types/node@22.18.13) + '@inquirer/figures': 1.0.14 + '@inquirer/type': 3.0.9(@types/node@22.18.13) + yoctocolors-cjs: 2.1.3 optionalDependencies: - '@types/node': 22.15.19 + '@types/node': 22.18.13 - '@inquirer/type@3.0.6(@types/node@22.15.19)': + '@inquirer/type@3.0.9(@types/node@22.18.13)': optionalDependencies: - '@types/node': 22.15.19 + '@types/node': 22.18.13 - '@jridgewell/gen-mapping@0.3.8': + '@isaacs/balanced-match@4.0.1': {} + + '@isaacs/brace-expansion@5.0.0': dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 + '@isaacs/balanced-match': 4.0.1 - '@jridgewell/resolve-uri@3.1.2': {} + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 - '@jridgewell/set-array@1.2.1': {} + '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/sourcemap-codec@1.5.5': {} - '@jridgewell/trace-mapping@0.3.25': + '@jridgewell/trace-mapping@0.3.31': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.5 '@jsep-plugin/assignment@1.3.0(jsep@1.4.0)': dependencies: @@ -7451,26 +7394,27 @@ snapshots: '@manypkg/find-root@1.1.0': dependencies: - '@babel/runtime': 7.27.1 + '@babel/runtime': 7.28.4 '@types/node': 12.20.55 find-up: 4.1.0 fs-extra: 8.1.0 '@manypkg/get-packages@1.1.3': dependencies: - '@babel/runtime': 7.27.1 + '@babel/runtime': 7.28.4 '@changesets/types': 4.1.0 '@manypkg/find-root': 1.1.0 fs-extra: 8.1.0 globby: 11.1.0 read-yaml-file: 1.1.0 - '@mdx-js/mdx@3.1.0(acorn@8.14.1)': + '@mdx-js/mdx@3.1.1': dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 '@types/mdx': 2.0.13 + acorn: 8.15.0 collapse-white-space: 2.1.0 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 @@ -7479,65 +7423,66 @@ snapshots: hast-util-to-jsx-runtime: 2.3.6 markdown-extensions: 2.0.0 recma-build-jsx: 1.0.0 - recma-jsx: 1.0.0(acorn@8.14.1) + recma-jsx: 1.0.1(acorn@8.15.0) recma-stringify: 1.0.0 rehype-recma: 1.0.0 - remark-mdx: 3.1.0 + remark-mdx: 3.1.1 remark-parse: 11.0.0 remark-rehype: 11.1.2 - source-map: 0.7.4 + source-map: 0.7.6 unified: 11.0.5 unist-util-position-from-estree: 2.0.0 unist-util-stringify-position: 4.0.0 unist-util-visit: 5.0.0 vfile: 6.0.3 transitivePeerDependencies: - - acorn - supports-color - '@mdx-js/react@3.1.0(@types/react@19.1.4)(react@19.1.0)': + '@mdx-js/react@3.1.1(@types/react@19.2.2)(react@19.2.0)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 19.1.4 - react: 19.1.0 + '@types/react': 19.2.2 + react: 19.2.0 - '@mintlify/cli@4.0.536(@types/node@22.15.19)(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': + '@mintlify/cli@4.0.536(@types/node@22.18.13)(@types/react@19.2.2)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.7.3)': dependencies: - '@mintlify/common': 1.0.380(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0) - '@mintlify/link-rot': 3.0.494(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + '@mintlify/common': 1.0.380(@types/react@19.2.2)(react-dom@18.3.1(react@19.2.0))(react@19.2.0) + '@mintlify/link-rot': 3.0.494(@types/react@19.2.2)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.7.3) '@mintlify/models': 0.0.193 - '@mintlify/prebuild': 1.0.491(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - '@mintlify/previewing': 4.0.527(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + '@mintlify/prebuild': 1.0.491(@types/react@19.2.2)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.7.3) + '@mintlify/previewing': 4.0.527(@types/react@19.2.2)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.7.3) '@mintlify/validation': 0.1.367 - chalk: 5.4.1 + chalk: 5.6.2 detect-port: 1.6.1 - fs-extra: 11.3.0 - inquirer: 12.6.1(@types/node@22.15.19) + fs-extra: 11.3.2 + inquirer: 12.10.0(@types/node@22.18.13) js-yaml: 4.1.0 ora: 6.3.1 yargs: 17.7.2 transitivePeerDependencies: - '@types/node' - '@types/react' + - bare-abort-controller - bare-buffer - bufferutil - debug - encoding - react - react-dom + - react-native-b4a - supports-color - typescript - utf-8-validate - '@mintlify/common@1.0.380(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)': + '@mintlify/common@1.0.380(@types/react@19.2.2)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)': dependencies: '@asyncapi/parser': 3.4.0 - '@mintlify/mdx': 1.0.1(@types/react@19.1.4)(acorn@8.14.1)(react-dom@18.3.1(react@19.1.0))(react@19.1.0) + '@mintlify/mdx': 1.1.0(@types/react@19.2.2)(react-dom@18.3.1(react@19.2.0))(react@19.2.0) '@mintlify/models': 0.0.193 '@mintlify/openapi-parser': 0.0.7 '@mintlify/validation': 0.1.367 '@sindresorhus/slugify': 2.2.1 - acorn: 8.14.1 + acorn: 8.15.0 estree-util-to-js: 2.0.0 estree-walker: 3.0.3 gray-matter: 4.0.3 @@ -7557,7 +7502,7 @@ snapshots: remark-frontmatter: 5.0.0 remark-gfm: 4.0.1 remark-math: 6.0.0 - remark-mdx: 3.1.0 + remark-mdx: 3.1.1 remark-stringify: 11.0.0 unified: 11.0.5 unist-builder: 4.0.0 @@ -7565,7 +7510,7 @@ snapshots: unist-util-remove: 4.0.0 unist-util-remove-position: 5.0.0 unist-util-visit: 5.0.0 - unist-util-visit-parents: 6.0.1 + unist-util-visit-parents: 6.0.2 vfile: 6.0.3 transitivePeerDependencies: - '@types/react' @@ -7575,48 +7520,47 @@ snapshots: - react-dom - supports-color - '@mintlify/link-rot@3.0.494(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': + '@mintlify/link-rot@3.0.494(@types/react@19.2.2)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.7.3)': dependencies: - '@mintlify/common': 1.0.380(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0) - '@mintlify/prebuild': 1.0.491(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3) - fs-extra: 11.3.0 + '@mintlify/common': 1.0.380(@types/react@19.2.2)(react-dom@18.3.1(react@19.2.0))(react@19.2.0) + '@mintlify/prebuild': 1.0.491(@types/react@19.2.2)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.7.3) + fs-extra: 11.3.2 is-absolute-url: 4.0.1 unist-util-visit: 4.1.2 transitivePeerDependencies: - '@types/react' + - bare-abort-controller - bare-buffer - bufferutil - debug - encoding - react - react-dom + - react-native-b4a - supports-color - typescript - utf-8-validate - '@mintlify/mdx@1.0.1(@types/react@19.1.4)(acorn@8.14.1)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)': + '@mintlify/mdx@1.1.0(@types/react@19.2.2)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)': dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 hast-util-to-string: 3.0.1 - next-mdx-remote-client: 1.1.1(@types/react@19.1.4)(acorn@8.14.1)(react-dom@18.3.1(react@19.1.0))(react@19.1.0) - react: 19.1.0 - react-dom: 18.3.1(react@19.1.0) - refractor: 4.9.0 + next-mdx-remote-client: 1.1.4(@types/react@19.2.2)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(unified@11.0.5) + react: 19.2.0 + react-dom: 18.3.1(react@19.2.0) rehype-katex: 7.0.1 remark-gfm: 4.0.1 remark-math: 6.0.0 remark-smartypants: 3.0.2 + shiki: 3.14.0 unified: 11.0.5 unist-util-visit: 5.0.0 transitivePeerDependencies: - '@types/react' - - acorn - supports-color '@mintlify/models@0.0.193': dependencies: - axios: 1.9.0 + axios: 1.13.1 openapi-types: 12.1.3 transitivePeerDependencies: - debug @@ -7627,19 +7571,19 @@ snapshots: ajv-draft-04: 1.0.0(ajv@8.17.1) ajv-formats: 3.0.1(ajv@8.17.1) jsonpointer: 5.0.1 - leven: 4.0.0 - yaml: 2.8.0 + leven: 4.1.0 + yaml: 2.8.1 - '@mintlify/prebuild@1.0.491(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': + '@mintlify/prebuild@1.0.491(@types/react@19.2.2)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.7.3)': dependencies: - '@mintlify/common': 1.0.380(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0) + '@mintlify/common': 1.0.380(@types/react@19.2.2)(react-dom@18.3.1(react@19.2.0))(react@19.2.0) '@mintlify/openapi-parser': 0.0.7 - '@mintlify/scraping': 4.0.236(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + '@mintlify/scraping': 4.0.236(@types/react@19.2.2)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.7.3) '@mintlify/validation': 0.1.367 - axios: 1.9.0 - chalk: 5.4.1 + axios: 1.13.1 + chalk: 5.6.2 favicons: 7.2.0 - fs-extra: 11.3.0 + fs-extra: 11.3.2 gray-matter: 4.0.3 is-absolute-url: 4.0.1 js-yaml: 4.1.0 @@ -7648,26 +7592,28 @@ snapshots: unist-util-visit: 4.1.2 transitivePeerDependencies: - '@types/react' + - bare-abort-controller - bare-buffer - bufferutil - debug - encoding - react - react-dom + - react-native-b4a - supports-color - typescript - utf-8-validate - '@mintlify/previewing@4.0.527(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': + '@mintlify/previewing@4.0.527(@types/react@19.2.2)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.7.3)': dependencies: - '@mintlify/common': 1.0.380(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0) - '@mintlify/prebuild': 1.0.491(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + '@mintlify/common': 1.0.380(@types/react@19.2.2)(react-dom@18.3.1(react@19.2.0))(react@19.2.0) + '@mintlify/prebuild': 1.0.491(@types/react@19.2.2)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.7.3) '@mintlify/validation': 0.1.367 better-opn: 3.0.2 - chalk: 5.4.1 + chalk: 5.6.2 chokidar: 3.6.0 express: 4.21.2 - fs-extra: 11.3.0 + fs-extra: 11.3.2 got: 13.0.0 gray-matter: 4.0.3 is-absolute-url: 4.0.1 @@ -7682,29 +7628,31 @@ snapshots: yargs: 17.7.2 transitivePeerDependencies: - '@types/react' + - bare-abort-controller - bare-buffer - bufferutil - debug - encoding - react - react-dom + - react-native-b4a - supports-color - typescript - utf-8-validate - '@mintlify/scraping@4.0.236(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3)': + '@mintlify/scraping@4.0.236(@types/react@19.2.2)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.7.3)': dependencies: - '@mintlify/common': 1.0.380(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0) + '@mintlify/common': 1.0.380(@types/react@19.2.2)(react-dom@18.3.1(react@19.2.0))(react@19.2.0) '@mintlify/openapi-parser': 0.0.7 - fs-extra: 11.3.0 + fs-extra: 11.3.2 hast-util-to-mdast: 10.1.2 js-yaml: 4.1.0 mdast-util-mdx-jsx: 3.2.0 neotraverse: 0.6.18 - puppeteer: 22.15.0(typescript@5.8.3) + puppeteer: 22.15.0(typescript@5.7.3) rehype-parse: 9.0.1 remark-gfm: 4.0.1 - remark-mdx: 3.1.0 + remark-mdx: 3.1.1 remark-parse: 11.0.0 remark-stringify: 11.0.0 unified: 11.0.5 @@ -7713,12 +7661,14 @@ snapshots: zod: 3.25.4 transitivePeerDependencies: - '@types/react' + - bare-abort-controller - bare-buffer - bufferutil - debug - encoding - react - react-dom + - react-native-b4a - supports-color - typescript - utf-8-validate @@ -7731,26 +7681,20 @@ snapshots: lodash: 4.17.21 openapi-types: 12.1.3 zod: 3.25.4 - zod-to-json-schema: 3.24.5(zod@3.25.4) + zod-to-json-schema: 3.24.6(zod@3.25.4) transitivePeerDependencies: - debug '@multiformats/base-x@4.0.1': {} - '@napi-rs/wasm-runtime@0.2.9': + '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.4.0 - '@emnapi/runtime': 1.4.3 - '@tybys/wasm-util': 0.9.0 + '@emnapi/core': 1.6.0 + '@emnapi/runtime': 1.6.0 + '@tybys/wasm-util': 0.10.1 optional: true - '@neondatabase/serverless@1.0.0': - dependencies: - '@types/node': 22.15.19 - '@types/pg': 8.11.6 - optional: true - - '@noble/ciphers@1.2.1': {} + '@noble/ciphers@1.3.0': {} '@noble/curves@1.8.2': dependencies: @@ -7784,28 +7728,27 @@ snapshots: '@oxc-project/types@0.70.0': {} - '@petamoriken/float16@3.9.2': - optional: true - - '@pkgr/core@0.2.4': {} + '@pkgr/core@0.2.9': {} '@puppeteer/browsers@2.3.0': dependencies: - debug: 4.4.1 + debug: 4.4.3 extract-zip: 2.0.1 progress: 2.0.3 proxy-agent: 6.5.0 - semver: 7.7.2 - tar-fs: 3.0.8 + semver: 7.7.3 + tar-fs: 3.1.1 unbzip2-stream: 1.4.3 yargs: 17.7.2 transitivePeerDependencies: + - bare-abort-controller - bare-buffer + - react-native-b4a - supports-color - '@quansync/fs@0.1.2': + '@quansync/fs@0.1.5': dependencies: - quansync: 0.2.10 + quansync: 0.2.11 '@rolldown/binding-darwin-arm64@1.0.0-beta.9': optional: true @@ -7833,7 +7776,7 @@ snapshots: '@rolldown/binding-wasm32-wasi@1.0.0-beta.9': dependencies: - '@napi-rs/wasm-runtime': 0.2.9 + '@napi-rs/wasm-runtime': 0.2.12 optional: true '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.9': @@ -7847,78 +7790,117 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.9': {} - '@rollup/rollup-android-arm-eabi@4.39.0': + '@rollup/rollup-android-arm-eabi@4.52.5': + optional: true + + '@rollup/rollup-android-arm64@4.52.5': optional: true - '@rollup/rollup-android-arm64@4.39.0': + '@rollup/rollup-darwin-arm64@4.52.5': optional: true - '@rollup/rollup-darwin-arm64@4.39.0': + '@rollup/rollup-darwin-x64@4.52.5': optional: true - '@rollup/rollup-darwin-x64@4.39.0': + '@rollup/rollup-freebsd-arm64@4.52.5': optional: true - '@rollup/rollup-freebsd-arm64@4.39.0': + '@rollup/rollup-freebsd-x64@4.52.5': optional: true - '@rollup/rollup-freebsd-x64@4.39.0': + '@rollup/rollup-linux-arm-gnueabihf@4.52.5': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.39.0': + '@rollup/rollup-linux-arm-musleabihf@4.52.5': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.39.0': + '@rollup/rollup-linux-arm64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-arm64-gnu@4.39.0': + '@rollup/rollup-linux-arm64-musl@4.52.5': optional: true - '@rollup/rollup-linux-arm64-musl@4.39.0': + '@rollup/rollup-linux-loong64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.39.0': + '@rollup/rollup-linux-ppc64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.39.0': + '@rollup/rollup-linux-riscv64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.39.0': + '@rollup/rollup-linux-riscv64-musl@4.52.5': optional: true - '@rollup/rollup-linux-riscv64-musl@4.39.0': + '@rollup/rollup-linux-s390x-gnu@4.52.5': optional: true - '@rollup/rollup-linux-s390x-gnu@4.39.0': + '@rollup/rollup-linux-x64-gnu@4.52.5': optional: true - '@rollup/rollup-linux-x64-gnu@4.39.0': + '@rollup/rollup-linux-x64-musl@4.52.5': optional: true - '@rollup/rollup-linux-x64-musl@4.39.0': + '@rollup/rollup-openharmony-arm64@4.52.5': optional: true - '@rollup/rollup-win32-arm64-msvc@4.39.0': + '@rollup/rollup-win32-arm64-msvc@4.52.5': optional: true - '@rollup/rollup-win32-ia32-msvc@4.39.0': + '@rollup/rollup-win32-ia32-msvc@4.52.5': optional: true - '@rollup/rollup-win32-x64-msvc@4.39.0': + '@rollup/rollup-win32-x64-gnu@4.52.5': optional: true - '@scure/base@1.2.4': {} + '@rollup/rollup-win32-x64-msvc@4.52.5': + optional: true + + '@scure/base@1.2.6': {} '@scure/bip32@1.6.2': dependencies: '@noble/curves': 1.8.2 '@noble/hashes': 1.7.2 - '@scure/base': 1.2.4 + '@scure/base': 1.2.6 '@scure/bip39@1.5.4': dependencies: '@noble/hashes': 1.7.2 - '@scure/base': 1.2.4 + '@scure/base': 1.2.6 + + '@shikijs/core@3.14.0': + dependencies: + '@shikijs/types': 3.14.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + hast-util-to-html: 9.0.5 + + '@shikijs/engine-javascript@3.14.0': + dependencies: + '@shikijs/types': 3.14.0 + '@shikijs/vscode-textmate': 10.0.2 + oniguruma-to-es: 4.3.3 + + '@shikijs/engine-oniguruma@3.14.0': + dependencies: + '@shikijs/types': 3.14.0 + '@shikijs/vscode-textmate': 10.0.2 + + '@shikijs/langs@3.14.0': + dependencies: + '@shikijs/types': 3.14.0 + + '@shikijs/themes@3.14.0': + dependencies: + '@shikijs/types': 3.14.0 + + '@shikijs/types@3.14.0': + dependencies: + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 + + '@shikijs/vscode-textmate@10.0.2': {} '@sindresorhus/is@5.6.0': {} @@ -7933,30 +7915,30 @@ snapshots: '@socket.io/component-emitter@3.1.2': {} - '@solana/codecs-core@2.1.1(typescript@5.8.3)': + '@solana/codecs-core@2.1.1(typescript@5.7.3)': dependencies: - '@solana/errors': 2.1.1(typescript@5.8.3) - typescript: 5.8.3 + '@solana/errors': 2.1.1(typescript@5.7.3) + typescript: 5.7.3 - '@solana/codecs-numbers@2.1.1(typescript@5.8.3)': + '@solana/codecs-numbers@2.1.1(typescript@5.7.3)': dependencies: - '@solana/codecs-core': 2.1.1(typescript@5.8.3) - '@solana/errors': 2.1.1(typescript@5.8.3) - typescript: 5.8.3 + '@solana/codecs-core': 2.1.1(typescript@5.7.3) + '@solana/errors': 2.1.1(typescript@5.7.3) + typescript: 5.7.3 - '@solana/codecs-strings@2.1.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + '@solana/codecs-strings@2.1.1(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)': dependencies: - '@solana/codecs-core': 2.1.1(typescript@5.8.3) - '@solana/codecs-numbers': 2.1.1(typescript@5.8.3) - '@solana/errors': 2.1.1(typescript@5.8.3) + '@solana/codecs-core': 2.1.1(typescript@5.7.3) + '@solana/codecs-numbers': 2.1.1(typescript@5.7.3) + '@solana/errors': 2.1.1(typescript@5.7.3) fastestsmallesttextencoderdecoder: 1.0.22 - typescript: 5.8.3 + typescript: 5.7.3 - '@solana/errors@2.1.1(typescript@5.8.3)': + '@solana/errors@2.1.1(typescript@5.7.3)': dependencies: - chalk: 5.4.1 + chalk: 5.6.2 commander: 13.1.0 - typescript: 5.8.3 + typescript: 5.7.3 '@standard-schema/spec@1.0.0': {} @@ -7968,7 +7950,7 @@ snapshots: '@stoplight/json-ref-readers@1.2.2': dependencies: - node-fetch: 2.7.0 + node-fetch: 2.6.7 tslib: 1.14.1 transitivePeerDependencies: - encoding @@ -7978,7 +7960,7 @@ snapshots: '@stoplight/json': 3.21.0 '@stoplight/path': 1.3.2 '@stoplight/types': 13.20.0 - '@types/urijs': 1.19.25 + '@types/urijs': 1.19.26 dependency-graph: 0.11.0 fast-memoize: 2.5.2 immer: 9.0.21 @@ -8013,7 +7995,7 @@ snapshots: ajv: 8.17.1 ajv-errors: 3.0.0(ajv@8.17.1) ajv-formats: 2.1.1(ajv@8.17.1) - es-aggregate-error: 1.0.13 + es-aggregate-error: 1.0.14 jsonpath-plus: 10.3.0 lodash: 4.17.21 lodash.topath: 4.5.2 @@ -8109,31 +8091,32 @@ snapshots: '@tootallnate/quickjs-emscripten@0.23.0': {} - '@tybys/wasm-util@0.9.0': + '@tybys/wasm-util@0.10.1': dependencies: tslib: 2.8.1 optional: true '@types/better-sqlite3@7.6.13': dependencies: - '@types/node': 22.15.19 + '@types/node': 22.18.13 '@types/body-parser@1.19.6': dependencies: '@types/connect': 3.4.38 - '@types/node': 22.15.19 + '@types/node': 22.18.13 - '@types/chai@5.2.2': + '@types/chai@5.2.3': dependencies: '@types/deep-eql': 4.0.2 + assertion-error: 2.0.1 '@types/connect@3.4.38': dependencies: - '@types/node': 22.15.19 + '@types/node': 22.18.13 - '@types/cors@2.8.18': + '@types/cors@2.8.19': dependencies: - '@types/node': 22.15.19 + '@types/node': 22.18.13 '@types/debug@4.1.12': dependencies: @@ -8145,33 +8128,29 @@ snapshots: '@types/es-aggregate-error@1.0.6': dependencies: - '@types/node': 22.15.19 + '@types/node': 22.18.13 '@types/estree-jsx@1.0.5': dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 - '@types/estree@1.0.7': {} + '@types/estree@1.0.8': {} - '@types/express-serve-static-core@5.0.6': + '@types/express-serve-static-core@5.1.0': dependencies: - '@types/node': 22.15.19 + '@types/node': 22.18.13 '@types/qs': 6.14.0 '@types/range-parser': 1.2.7 - '@types/send': 0.17.5 + '@types/send': 1.2.1 '@types/express@5.0.3': dependencies: '@types/body-parser': 1.19.6 - '@types/express-serve-static-core': 5.0.6 - '@types/serve-static': 1.15.8 + '@types/express-serve-static-core': 5.1.0 + '@types/serve-static': 2.2.0 '@types/figlet@1.7.0': {} - '@types/hast@2.3.10': - dependencies: - '@types/unist': 2.0.11 - '@types/hast@3.0.4': dependencies: '@types/unist': 3.0.3 @@ -8190,8 +8169,6 @@ snapshots: '@types/mdx@2.0.13': {} - '@types/mime@1.3.5': {} - '@types/ms@2.1.0': {} '@types/nlcst@2.0.3': @@ -8200,79 +8177,77 @@ snapshots: '@types/node@12.20.55': {} - '@types/node@22.15.19': + '@types/node@22.18.13': dependencies: undici-types: 6.21.0 - '@types/pg@8.11.6': - dependencies: - '@types/node': 22.15.19 - pg-protocol: 1.10.0 - pg-types: 4.0.2 - optional: true - - '@types/prismjs@1.26.5': {} - '@types/qs@6.14.0': {} '@types/range-parser@1.2.7': {} - '@types/react@19.1.4': + '@types/react@19.2.2': dependencies: csstype: 3.1.3 - '@types/send@0.17.5': + '@types/send@1.2.1': dependencies: - '@types/mime': 1.3.5 - '@types/node': 22.15.19 + '@types/node': 22.18.13 - '@types/serve-static@1.15.8': + '@types/serve-static@2.2.0': dependencies: '@types/http-errors': 2.0.5 - '@types/node': 22.15.19 - '@types/send': 0.17.5 + '@types/node': 22.18.13 '@types/unist@2.0.11': {} '@types/unist@3.0.3': {} - '@types/urijs@1.19.25': {} + '@types/urijs@1.19.26': {} '@types/varint@6.0.3': dependencies: - '@types/node': 22.15.19 + '@types/node': 22.18.13 '@types/yauzl@2.10.3': dependencies: - '@types/node': 22.15.19 + '@types/node': 22.18.13 optional: true - '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.7.3))(eslint@9.27.0(jiti@2.6.1))(typescript@5.7.3)': dependencies: - '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.7.3) '@typescript-eslint/scope-manager': 8.32.1 - '@typescript-eslint/type-utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/type-utils': 8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.7.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.32.1 - eslint: 9.27.0(jiti@2.4.2) + eslint: 9.27.0(jiti@2.6.1) graphemer: 1.4.0 - ignore: 7.0.4 + ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.7.3) + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.7.3)': dependencies: '@typescript-eslint/scope-manager': 8.32.1 '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) + '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.32.1 - debug: 4.4.1 - eslint: 9.27.0(jiti@2.4.2) - typescript: 5.8.3 + debug: 4.4.3 + eslint: 9.27.0(jiti@2.6.1) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.46.2(typescript@5.7.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.7.3) + '@typescript-eslint/types': 8.46.2 + debug: 4.4.3 + typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -8281,123 +8256,172 @@ snapshots: '@typescript-eslint/types': 8.32.1 '@typescript-eslint/visitor-keys': 8.32.1 - '@typescript-eslint/type-utils@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/scope-manager@8.46.2': dependencies: - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - debug: 4.4.1 - eslint: 9.27.0(jiti@2.4.2) - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/visitor-keys': 8.46.2 + + '@typescript-eslint/tsconfig-utils@8.46.2(typescript@5.7.3)': + dependencies: + typescript: 5.7.3 + + '@typescript-eslint/type-utils@8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.7.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.7.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.7.3) + debug: 4.4.3 + eslint: 9.27.0(jiti@2.6.1) + ts-api-utils: 2.1.0(typescript@5.7.3) + typescript: 5.7.3 transitivePeerDependencies: - supports-color '@typescript-eslint/types@8.32.1': {} - '@typescript-eslint/typescript-estree@8.32.1(typescript@5.8.3)': + '@typescript-eslint/types@8.46.2': {} + + '@typescript-eslint/typescript-estree@8.32.1(typescript@5.7.3)': dependencies: '@typescript-eslint/types': 8.32.1 '@typescript-eslint/visitor-keys': 8.32.1 - debug: 4.4.1 + debug: 4.4.3 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.1 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + semver: 7.7.3 + ts-api-utils: 2.1.0(typescript@5.7.3) + typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.46.2(typescript@5.7.3)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2)) + '@typescript-eslint/project-service': 8.46.2(typescript@5.7.3) + '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.7.3) + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/visitor-keys': 8.46.2 + debug: 4.4.3 + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.3 + ts-api-utils: 2.1.0(typescript@5.7.3) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.7.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.27.0(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.32.1 '@typescript-eslint/types': 8.32.1 - '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) - eslint: 9.27.0(jiti@2.4.2) - typescript: 5.8.3 + '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.7.3) + eslint: 9.27.0(jiti@2.6.1) + typescript: 5.7.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@8.46.2(eslint@9.27.0(jiti@2.6.1))(typescript@5.7.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.27.0(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.46.2 + '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.7.3) + eslint: 9.27.0(jiti@2.6.1) + typescript: 5.7.3 transitivePeerDependencies: - supports-color '@typescript-eslint/visitor-keys@8.32.1': dependencies: '@typescript-eslint/types': 8.32.1 - eslint-visitor-keys: 4.2.0 + eslint-visitor-keys: 4.2.1 + + '@typescript-eslint/visitor-keys@8.46.2': + dependencies: + '@typescript-eslint/types': 8.46.2 + eslint-visitor-keys: 4.2.1 '@ungap/structured-clone@1.3.0': {} - '@unrs/resolver-binding-darwin-arm64@1.7.2': + '@unrs/resolver-binding-android-arm-eabi@1.11.1': + optional: true + + '@unrs/resolver-binding-android-arm64@1.11.1': + optional: true + + '@unrs/resolver-binding-darwin-arm64@1.11.1': optional: true - '@unrs/resolver-binding-darwin-x64@1.7.2': + '@unrs/resolver-binding-darwin-x64@1.11.1': optional: true - '@unrs/resolver-binding-freebsd-x64@1.7.2': + '@unrs/resolver-binding-freebsd-x64@1.11.1': optional: true - '@unrs/resolver-binding-linux-arm-gnueabihf@1.7.2': + '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1': optional: true - '@unrs/resolver-binding-linux-arm-musleabihf@1.7.2': + '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1': optional: true - '@unrs/resolver-binding-linux-arm64-gnu@1.7.2': + '@unrs/resolver-binding-linux-arm64-gnu@1.11.1': optional: true - '@unrs/resolver-binding-linux-arm64-musl@1.7.2': + '@unrs/resolver-binding-linux-arm64-musl@1.11.1': optional: true - '@unrs/resolver-binding-linux-ppc64-gnu@1.7.2': + '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1': optional: true - '@unrs/resolver-binding-linux-riscv64-gnu@1.7.2': + '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1': optional: true - '@unrs/resolver-binding-linux-riscv64-musl@1.7.2': + '@unrs/resolver-binding-linux-riscv64-musl@1.11.1': optional: true - '@unrs/resolver-binding-linux-s390x-gnu@1.7.2': + '@unrs/resolver-binding-linux-s390x-gnu@1.11.1': optional: true - '@unrs/resolver-binding-linux-x64-gnu@1.7.2': + '@unrs/resolver-binding-linux-x64-gnu@1.11.1': optional: true - '@unrs/resolver-binding-linux-x64-musl@1.7.2': + '@unrs/resolver-binding-linux-x64-musl@1.11.1': optional: true - '@unrs/resolver-binding-wasm32-wasi@1.7.2': + '@unrs/resolver-binding-wasm32-wasi@1.11.1': dependencies: - '@napi-rs/wasm-runtime': 0.2.9 + '@napi-rs/wasm-runtime': 0.2.12 optional: true - '@unrs/resolver-binding-win32-arm64-msvc@1.7.2': + '@unrs/resolver-binding-win32-arm64-msvc@1.11.1': optional: true - '@unrs/resolver-binding-win32-ia32-msvc@1.7.2': + '@unrs/resolver-binding-win32-ia32-msvc@1.11.1': optional: true - '@unrs/resolver-binding-win32-x64-msvc@1.7.2': + '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@valibot/to-json-schema@1.0.0(valibot@1.1.0(typescript@5.8.3))': + '@valibot/to-json-schema@1.3.0(valibot@1.1.0(typescript@5.7.3))': dependencies: - valibot: 1.1.0(typescript@5.8.3) + valibot: 1.1.0(typescript@5.7.3) '@vitest/expect@3.2.4': dependencies: - '@types/chai': 5.2.2 + '@types/chai': 5.2.3 '@vitest/spy': 3.2.4 '@vitest/utils': 3.2.4 - chai: 5.2.0 + chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@6.2.5(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0))': + '@vitest/mocker@3.2.4(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 - magic-string: 0.30.17 + magic-string: 0.30.21 optionalDependencies: - vite: 6.2.5(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + vite: 7.1.12(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -8407,27 +8431,27 @@ snapshots: dependencies: '@vitest/utils': 3.2.4 pathe: 2.0.3 - strip-literal: 3.0.0 + strip-literal: 3.1.0 '@vitest/snapshot@3.2.4': dependencies: '@vitest/pretty-format': 3.2.4 - magic-string: 0.30.17 + magic-string: 0.30.21 pathe: 2.0.3 '@vitest/spy@3.2.4': dependencies: - tinyspy: 4.0.3 + tinyspy: 4.0.4 '@vitest/utils@3.2.4': dependencies: '@vitest/pretty-format': 3.2.4 - loupe: 3.2.0 + loupe: 3.2.1 tinyrainbow: 2.0.0 - abitype@1.0.8(typescript@5.8.3)(zod@3.25.4): + abitype@1.0.8(typescript@5.7.3)(zod@3.25.4): optionalDependencies: - typescript: 5.8.3 + typescript: 5.7.3 zod: 3.25.4 abort-controller@3.0.0: @@ -8439,32 +8463,32 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-jsx@5.3.2(acorn@8.14.1): + acorn-jsx@5.3.2(acorn@8.15.0): dependencies: - acorn: 8.14.1 + acorn: 8.15.0 - acorn@8.14.1: {} + acorn@8.15.0: {} address@1.2.2: {} - agent-base@7.1.3: {} + agent-base@7.1.4: {} aggregate-error@4.0.1: dependencies: clean-stack: 4.2.0 indent-string: 5.0.0 - ai@4.3.16(react@19.1.0)(zod@3.25.4): + ai@4.3.16(react@19.2.0)(zod@3.25.4): dependencies: '@ai-sdk/provider': 1.1.3 '@ai-sdk/provider-utils': 2.2.8(zod@3.25.4) - '@ai-sdk/react': 1.2.12(react@19.1.0)(zod@3.25.4) + '@ai-sdk/react': 1.2.12(react@19.2.0)(zod@3.25.4) '@ai-sdk/ui-utils': 1.2.11(zod@3.25.4) '@opentelemetry/api': 1.9.0 jsondiffpatch: 0.6.0 zod: 3.25.4 optionalDependencies: - react: 19.1.0 + react: 19.2.0 ajv-draft-04@1.0.0(ajv@8.17.1): optionalDependencies: @@ -8492,27 +8516,23 @@ snapshots: ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.0.6 + fast-uri: 3.1.0 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 ansi-colors@4.1.3: {} - ansi-escapes@4.3.2: - dependencies: - type-fest: 0.21.3 - ansi-regex@5.0.1: {} - ansi-regex@6.1.0: {} + ansi-regex@6.2.2: {} ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 - ansi-styles@6.2.1: {} + ansi-styles@6.2.3: {} - ansis@4.0.0: {} + ansis@4.2.0: {} anymatch@3.1.3: dependencies: @@ -8543,16 +8563,16 @@ snapshots: array-buffer-byte-length: 1.0.2 call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.24.0 es-errors: 1.3.0 get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 assertion-error@2.0.1: {} - ast-kit@2.0.0: + ast-kit@2.1.3: dependencies: - '@babel/parser': 7.27.2 + '@babel/parser': 7.28.5 pathe: 2.0.3 ast-types@0.13.4: @@ -8569,45 +8589,57 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 - avsc@5.7.7: {} + avsc@5.7.9: {} - axios@1.9.0: + axios@1.13.1: dependencies: - follow-redirects: 1.15.9 - form-data: 4.0.2 + follow-redirects: 1.15.11 + form-data: 4.0.4 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug - b4a@1.6.7: {} + b4a@1.7.3: {} bail@2.0.2: {} balanced-match@1.0.2: {} - bare-events@2.5.4: - optional: true + bare-events@2.8.1: {} - bare-fs@4.1.5: + bare-fs@4.5.0: dependencies: - bare-events: 2.5.4 + bare-events: 2.8.1 bare-path: 3.0.0 - bare-stream: 2.6.5(bare-events@2.5.4) + bare-stream: 2.7.0(bare-events@2.8.1) + bare-url: 2.3.1 + fast-fifo: 1.3.2 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a optional: true - bare-os@3.6.1: + bare-os@3.6.2: optional: true bare-path@3.0.0: dependencies: - bare-os: 3.6.1 + bare-os: 3.6.2 optional: true - bare-stream@2.6.5(bare-events@2.5.4): + bare-stream@2.7.0(bare-events@2.8.1): dependencies: - streamx: 2.22.0 + streamx: 2.23.0 optionalDependencies: - bare-events: 2.5.4 + bare-events: 2.8.1 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + optional: true + + bare-url@2.3.1: + dependencies: + bare-path: 3.0.0 optional: true base64-js@1.5.1: {} @@ -8635,7 +8667,7 @@ snapshots: dependencies: file-uri-to-path: 1.0.0 - birpc@2.3.0: {} + birpc@2.6.1: {} bit-buffers@1.0.2: dependencies: @@ -8675,22 +8707,22 @@ snapshots: dependencies: bytes: 3.1.2 content-type: 1.0.5 - debug: 4.4.1 + debug: 4.4.3 http-errors: 2.0.0 iconv-lite: 0.6.3 on-finished: 2.4.1 qs: 6.14.0 - raw-body: 3.0.0 + raw-body: 3.0.1 type-is: 2.0.1 transitivePeerDependencies: - supports-color - brace-expansion@1.1.11: + brace-expansion@1.1.12: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 - brace-expansion@2.0.1: + brace-expansion@2.0.2: dependencies: balanced-match: 1.0.2 @@ -8725,7 +8757,7 @@ snapshots: http-cache-semantics: 4.2.0 keyv: 4.5.4 mimic-response: 4.0.0 - normalize-url: 8.0.1 + normalize-url: 8.1.0 responselike: 3.0.0 call-bind-apply-helpers@1.0.2: @@ -8751,20 +8783,20 @@ snapshots: ccount@2.0.1: {} - chai@5.2.0: + chai@5.3.3: dependencies: assertion-error: 2.0.1 check-error: 2.1.1 deep-eql: 5.0.2 - loupe: 3.1.3 - pathval: 2.0.0 + loupe: 3.2.1 + pathval: 2.0.1 chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.4.1: {} + chalk@5.6.2: {} character-entities-html4@2.1.0: {} @@ -8776,6 +8808,8 @@ snapshots: chardet@0.7.0: {} + chardet@2.1.0: {} + check-error@2.1.1: {} chokidar@3.6.0: @@ -8843,7 +8877,7 @@ snapshots: color-string@1.9.1: dependencies: color-name: 1.1.4 - simple-swizzle: 0.2.2 + simple-swizzle: 0.2.4 color@4.2.3: dependencies: @@ -8860,13 +8894,11 @@ snapshots: commander@8.3.0: {} - comment-json@4.2.5: + comment-json@4.4.1: dependencies: array-timsort: 1.0.3 core-util-is: 1.0.3 esprima: 4.0.1 - has-own-prop: 2.0.0 - repeat-string: 1.6.1 comment-parser@1.4.1: {} @@ -8891,14 +8923,14 @@ snapshots: object-assign: 4.1.1 vary: 1.1.2 - cosmiconfig@9.0.0(typescript@5.8.3): + cosmiconfig@9.0.0(typescript@5.7.3): dependencies: env-paths: 2.2.1 import-fresh: 3.3.1 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.8.3 + typescript: 5.7.3 cross-spawn@7.0.6: dependencies: @@ -8909,20 +8941,20 @@ snapshots: cspell-config-lib@9.0.1: dependencies: '@cspell/cspell-types': 9.0.1 - comment-json: 4.2.5 - yaml: 2.7.1 + comment-json: 4.4.1 + yaml: 2.8.1 cspell-dictionary@9.0.1: dependencies: '@cspell/cspell-pipe': 9.0.1 '@cspell/cspell-types': 9.0.1 cspell-trie-lib: 9.0.1 - fast-equals: 5.2.2 + fast-equals: 5.3.2 cspell-glob@9.0.1: dependencies: '@cspell/url': 9.0.1 - picomatch: 4.0.2 + picomatch: 4.0.3 cspell-grammar@9.0.1: dependencies: @@ -8945,7 +8977,7 @@ snapshots: '@cspell/strong-weak-map': 9.0.1 '@cspell/url': 9.0.1 clear-module: 4.1.2 - comment-json: 4.2.5 + comment-json: 4.4.1 cspell-config-lib: 9.0.1 cspell-dictionary: 9.0.1 cspell-glob: 9.0.1 @@ -8953,7 +8985,7 @@ snapshots: cspell-io: 9.0.1 cspell-trie-lib: 9.0.1 env-paths: 3.0.0 - fast-equals: 5.2.2 + fast-equals: 5.3.2 gensequence: 7.0.0 import-fresh: 3.3.1 resolve-from: 5.0.0 @@ -9003,15 +9035,11 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.4.0: + debug@4.4.3: dependencies: ms: 2.1.3 - debug@4.4.1: - dependencies: - ms: 2.1.3 - - decode-named-character-reference@1.1.0: + decode-named-character-reference@1.2.0: dependencies: character-entities: 2.0.2 @@ -9065,18 +9093,16 @@ snapshots: detect-indent@6.1.0: {} - detect-indent@7.0.1: {} - - detect-libc@2.0.3: {} + detect-indent@7.0.2: {} - detect-libc@2.0.4: {} + detect-libc@2.1.2: {} detect-newline@4.0.1: {} detect-port@1.6.1: dependencies: address: 1.2.2 - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -9086,10 +9112,10 @@ snapshots: devtools-protocol@0.0.1312386: {} - did-jwks@0.3.0(typescript@5.8.3)(zod@3.25.4): + did-jwks@0.3.0(typescript@5.7.3)(zod@3.25.4): dependencies: - valibot: 1.1.0(typescript@5.8.3) - web-identity-schemas: 0.1.6(valibot@1.1.0(typescript@5.8.3))(zod@3.25.4) + valibot: 1.1.0(typescript@5.7.3) + web-identity-schemas: 0.1.6(valibot@1.1.0(typescript@5.7.3))(zod@3.25.4) transitivePeerDependencies: - typescript - zod @@ -9101,10 +9127,10 @@ snapshots: did-jwt@8.0.15: dependencies: - '@noble/ciphers': 1.2.1 + '@noble/ciphers': 1.3.0 '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 - '@scure/base': 1.2.4 + '@scure/base': 1.2.6 canonicalize: 2.1.0 did-resolver: 4.1.0 multibase: 4.0.6 @@ -9115,7 +9141,7 @@ snapshots: diff-match-patch@1.0.5: {} - diff@8.0.1: {} + diff@8.0.2: {} dir-glob@3.0.1: dependencies: @@ -9132,7 +9158,7 @@ snapshots: dotenv-cli@8.0.0: dependencies: cross-spawn: 7.0.6 - dotenv: 16.5.0 + dotenv: 16.6.1 dotenv-expand: 10.0.0 minimist: 1.2.8 @@ -9140,7 +9166,7 @@ snapshots: dotenv@16.0.3: {} - dotenv@16.5.0: {} + dotenv@16.6.1: {} dotenv@8.6.0: {} @@ -9148,23 +9174,18 @@ snapshots: dependencies: '@drizzle-team/brocli': 0.10.2 '@esbuild-kit/esm-loader': 2.6.5 - esbuild: 0.25.2 - esbuild-register: 3.6.0(esbuild@0.25.2) + esbuild: 0.25.11 + esbuild-register: 3.6.0(esbuild@0.25.11) transitivePeerDependencies: - supports-color - drizzle-orm@0.43.1(@cloudflare/workers-types@4.20250505.0)(@neondatabase/serverless@1.0.0)(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(@types/pg@8.11.6)(better-sqlite3@11.10.0)(gel@2.0.2)(pg@8.16.0): + drizzle-orm@0.43.1(@opentelemetry/api@1.9.0)(@types/better-sqlite3@7.6.13)(better-sqlite3@11.10.0): optionalDependencies: - '@cloudflare/workers-types': 4.20250505.0 - '@neondatabase/serverless': 1.0.0 '@opentelemetry/api': 1.9.0 '@types/better-sqlite3': 7.6.13 - '@types/pg': 8.11.6 better-sqlite3: 11.10.0 - gel: 2.0.2 - pg: 8.16.0 - dts-resolver@2.0.1: {} + dts-resolver@2.1.2: {} dunder-proto@1.0.1: dependencies: @@ -9174,7 +9195,7 @@ snapshots: ee-first@1.1.1: {} - emoji-regex@10.4.0: {} + emoji-regex@10.6.0: {} emoji-regex@8.0.0: {} @@ -9184,7 +9205,7 @@ snapshots: encodeurl@2.0.0: {} - end-of-stream@1.4.4: + end-of-stream@1.4.5: dependencies: once: 1.4.0 @@ -9192,8 +9213,8 @@ snapshots: engine.io@6.6.4: dependencies: - '@types/cors': 2.8.18 - '@types/node': 22.15.19 + '@types/cors': 2.8.19 + '@types/node': 22.18.13 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -9211,17 +9232,17 @@ snapshots: ansi-colors: 4.1.3 strip-ansi: 6.0.1 - entities@6.0.0: {} + entities@6.0.1: {} env-paths@2.2.1: {} env-paths@3.0.0: {} - error-ex@1.3.2: + error-ex@1.3.4: dependencies: is-arrayish: 0.2.1 - es-abstract@1.23.9: + es-abstract@1.24.0: dependencies: array-buffer-byte-length: 1.0.2 arraybuffer.prototype.slice: 1.0.4 @@ -9250,7 +9271,9 @@ snapshots: is-array-buffer: 3.0.5 is-callable: 1.2.7 is-data-view: 1.0.2 + is-negative-zero: 2.0.3 is-regex: 1.2.1 + is-set: 2.0.3 is-shared-array-buffer: 1.0.4 is-string: 1.1.1 is-typed-array: 1.1.15 @@ -9265,6 +9288,7 @@ snapshots: safe-push-apply: 1.0.0 safe-regex-test: 1.1.0 set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 string.prototype.trim: 1.2.10 string.prototype.trimend: 1.0.9 string.prototype.trimstart: 1.0.8 @@ -9275,11 +9299,11 @@ snapshots: unbox-primitive: 1.1.0 which-typed-array: 1.1.19 - es-aggregate-error@1.0.13: + es-aggregate-error@1.0.14: dependencies: define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.24.0 es-errors: 1.3.0 function-bind: 1.1.2 globalthis: 1.0.4 @@ -9319,14 +9343,14 @@ snapshots: esast-util-from-js@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 - acorn: 8.14.1 + acorn: 8.15.0 esast-util-from-estree: 2.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 - esbuild-register@3.6.0(esbuild@0.25.2): + esbuild-register@3.6.0(esbuild@0.25.11): dependencies: - debug: 4.4.1 - esbuild: 0.25.2 + debug: 4.4.3 + esbuild: 0.25.11 transitivePeerDependencies: - supports-color @@ -9355,33 +9379,34 @@ snapshots: '@esbuild/win32-ia32': 0.18.20 '@esbuild/win32-x64': 0.18.20 - esbuild@0.25.2: + esbuild@0.25.11: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.2 - '@esbuild/android-arm': 0.25.2 - '@esbuild/android-arm64': 0.25.2 - '@esbuild/android-x64': 0.25.2 - '@esbuild/darwin-arm64': 0.25.2 - '@esbuild/darwin-x64': 0.25.2 - '@esbuild/freebsd-arm64': 0.25.2 - '@esbuild/freebsd-x64': 0.25.2 - '@esbuild/linux-arm': 0.25.2 - '@esbuild/linux-arm64': 0.25.2 - '@esbuild/linux-ia32': 0.25.2 - '@esbuild/linux-loong64': 0.25.2 - '@esbuild/linux-mips64el': 0.25.2 - '@esbuild/linux-ppc64': 0.25.2 - '@esbuild/linux-riscv64': 0.25.2 - '@esbuild/linux-s390x': 0.25.2 - '@esbuild/linux-x64': 0.25.2 - '@esbuild/netbsd-arm64': 0.25.2 - '@esbuild/netbsd-x64': 0.25.2 - '@esbuild/openbsd-arm64': 0.25.2 - '@esbuild/openbsd-x64': 0.25.2 - '@esbuild/sunos-x64': 0.25.2 - '@esbuild/win32-arm64': 0.25.2 - '@esbuild/win32-ia32': 0.25.2 - '@esbuild/win32-x64': 0.25.2 + '@esbuild/aix-ppc64': 0.25.11 + '@esbuild/android-arm': 0.25.11 + '@esbuild/android-arm64': 0.25.11 + '@esbuild/android-x64': 0.25.11 + '@esbuild/darwin-arm64': 0.25.11 + '@esbuild/darwin-x64': 0.25.11 + '@esbuild/freebsd-arm64': 0.25.11 + '@esbuild/freebsd-x64': 0.25.11 + '@esbuild/linux-arm': 0.25.11 + '@esbuild/linux-arm64': 0.25.11 + '@esbuild/linux-ia32': 0.25.11 + '@esbuild/linux-loong64': 0.25.11 + '@esbuild/linux-mips64el': 0.25.11 + '@esbuild/linux-ppc64': 0.25.11 + '@esbuild/linux-riscv64': 0.25.11 + '@esbuild/linux-s390x': 0.25.11 + '@esbuild/linux-x64': 0.25.11 + '@esbuild/netbsd-arm64': 0.25.11 + '@esbuild/netbsd-x64': 0.25.11 + '@esbuild/openbsd-arm64': 0.25.11 + '@esbuild/openbsd-x64': 0.25.11 + '@esbuild/openharmony-arm64': 0.25.11 + '@esbuild/sunos-x64': 0.25.11 + '@esbuild/win32-arm64': 0.25.11 + '@esbuild/win32-ia32': 0.25.11 + '@esbuild/win32-x64': 0.25.11 escalade@3.2.0: {} @@ -9399,88 +9424,88 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-prettier@10.1.5(eslint@9.27.0(jiti@2.4.2)): + eslint-config-prettier@10.1.5(eslint@9.27.0(jiti@2.6.1)): dependencies: - eslint: 9.27.0(jiti@2.4.2) + eslint: 9.27.0(jiti@2.6.1) eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 is-core-module: 2.16.1 - resolve: 1.22.10 + resolve: 1.22.11 transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.3.5(eslint-plugin-import-x@4.12.2(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2)): + eslint-import-resolver-typescript@4.3.5(eslint-plugin-import-x@4.12.2(eslint@9.27.0(jiti@2.6.1))(typescript@5.7.3))(eslint@9.27.0(jiti@2.6.1)): dependencies: - debug: 4.4.1 - eslint: 9.27.0(jiti@2.4.2) - get-tsconfig: 4.10.0 + debug: 4.4.3 + eslint: 9.27.0(jiti@2.6.1) + get-tsconfig: 4.13.0 is-bun-module: 2.0.0 stable-hash: 0.0.5 - tinyglobby: 0.2.13 - unrs-resolver: 1.7.2 + tinyglobby: 0.2.15 + unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import-x: 4.12.2(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + eslint-plugin-import-x: 4.12.2(eslint@9.27.0(jiti@2.6.1))(typescript@5.7.3) transitivePeerDependencies: - supports-color - eslint-plugin-import-x@4.12.2(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3): + eslint-plugin-import-x@4.12.2(eslint@9.27.0(jiti@2.6.1))(typescript@5.7.3): dependencies: - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) + '@typescript-eslint/utils': 8.46.2(eslint@9.27.0(jiti@2.6.1))(typescript@5.7.3) comment-parser: 1.4.1 - debug: 4.4.1 - eslint: 9.27.0(jiti@2.4.2) + debug: 4.4.3 + eslint: 9.27.0(jiti@2.6.1) eslint-import-resolver-node: 0.3.9 - get-tsconfig: 4.10.0 + get-tsconfig: 4.13.0 is-glob: 4.0.3 - minimatch: 10.0.1 - semver: 7.7.2 + minimatch: 10.1.1 + semver: 7.7.3 stable-hash: 0.0.5 tslib: 2.8.1 - unrs-resolver: 1.7.2 + unrs-resolver: 1.11.1 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-turbo@2.5.3(eslint@9.27.0(jiti@2.4.2))(turbo@2.5.3): + eslint-plugin-turbo@2.5.3(eslint@9.27.0(jiti@2.6.1))(turbo@2.5.3): dependencies: dotenv: 16.0.3 - eslint: 9.27.0(jiti@2.4.2) + eslint: 9.27.0(jiti@2.6.1) turbo: 2.5.3 - eslint-scope@8.3.0: + eslint-scope@8.4.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.2.0: {} + eslint-visitor-keys@4.2.1: {} - eslint@9.27.0(jiti@2.4.2): + eslint@9.27.0(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2)) - '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.20.0 - '@eslint/config-helpers': 0.2.1 + '@eslint-community/eslint-utils': 4.9.0(eslint@9.27.0(jiti@2.6.1)) + '@eslint-community/regexpp': 4.12.2 + '@eslint/config-array': 0.20.1 + '@eslint/config-helpers': 0.2.3 '@eslint/core': 0.14.0 '@eslint/eslintrc': 3.3.1 '@eslint/js': 9.27.0 - '@eslint/plugin-kit': 0.3.1 - '@humanfs/node': 0.16.6 + '@eslint/plugin-kit': 0.3.5 + '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.2 - '@types/estree': 1.0.7 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.1 + debug: 4.4.3 escape-string-regexp: 4.0.0 - eslint-scope: 8.3.0 - eslint-visitor-keys: 4.2.0 - espree: 10.3.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -9496,15 +9521,15 @@ snapshots: natural-compare: 1.4.0 optionator: 0.9.4 optionalDependencies: - jiti: 2.4.2 + jiti: 2.6.1 transitivePeerDependencies: - supports-color - espree@10.3.0: + espree@10.4.0: dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) - eslint-visitor-keys: 4.2.0 + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 esprima@4.0.1: {} @@ -9520,7 +9545,7 @@ snapshots: estree-util-attach-comments@3.0.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 estree-util-build-jsx@3.0.1: dependencies: @@ -9533,14 +9558,14 @@ snapshots: estree-util-scope@1.0.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 devlop: 1.1.0 estree-util-to-js@2.0.0: dependencies: '@types/estree-jsx': 1.0.5 astring: 1.9.0 - source-map: 0.7.4 + source-map: 0.7.6 estree-util-visit@2.0.0: dependencies: @@ -9549,7 +9574,7 @@ snapshots: estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 esutils@2.0.3: {} @@ -9559,9 +9584,15 @@ snapshots: eventemitter3@5.0.1: {} + events-universal@1.0.1: + dependencies: + bare-events: 2.8.1 + transitivePeerDependencies: + - bare-abort-controller + expand-template@2.0.3: {} - expect-type@1.2.1: {} + expect-type@1.2.2: {} express@4.21.2: dependencies: @@ -9615,7 +9646,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.4.1 + debug: 4.4.3 get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -9625,7 +9656,7 @@ snapshots: fast-deep-equal@3.1.3: {} - fast-equals@5.2.2: {} + fast-equals@5.3.2: {} fast-fifo@1.3.2: {} @@ -9643,7 +9674,7 @@ snapshots: fast-memoize@2.5.2: {} - fast-uri@3.0.6: {} + fast-uri@3.1.0: {} fastestsmallesttextencoderdecoder@1.0.22: {} @@ -9665,9 +9696,9 @@ snapshots: dependencies: pend: 1.2.0 - fdir@6.4.4(picomatch@4.0.2): + fdir@6.5.0(picomatch@4.0.3): optionalDependencies: - picomatch: 4.0.2 + picomatch: 4.0.3 figlet@1.8.1: {} @@ -9710,7 +9741,7 @@ snapshots: flatted@3.3.3: {} - follow-redirects@1.15.9: {} + follow-redirects@1.15.11: {} for-each@0.3.5: dependencies: @@ -9718,11 +9749,12 @@ snapshots: form-data-encoder@2.1.4: {} - form-data@4.0.2: + form-data@4.0.4: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 es-set-tostringtag: 2.1.0 + hasown: 2.0.2 mime-types: 2.1.35 format@0.2.2: {} @@ -9733,10 +9765,10 @@ snapshots: fs-constants@1.0.0: {} - fs-extra@11.3.0: + fs-extra@11.3.2: dependencies: graceful-fs: 4.2.11 - jsonfile: 6.1.0 + jsonfile: 6.2.0 universalify: 2.0.1 fs-extra@7.0.1: @@ -9773,23 +9805,13 @@ snapshots: gcd@0.0.1: {} - gel@2.0.2: - dependencies: - '@petamoriken/float16': 3.9.2 - debug: 4.4.1 - env-paths: 3.0.0 - semver: 7.7.2 - shell-quote: 1.8.2 - which: 4.0.0 - transitivePeerDependencies: - - supports-color - optional: true + generator-function@2.0.1: {} gensequence@7.0.0: {} get-caller-file@2.0.5: {} - get-east-asian-width@1.3.0: {} + get-east-asian-width@1.4.0: {} get-intrinsic@1.3.0: dependencies: @@ -9811,7 +9833,7 @@ snapshots: get-stream@5.2.0: dependencies: - pump: 3.0.2 + pump: 3.0.3 get-stream@6.0.1: {} @@ -9821,15 +9843,15 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-tsconfig@4.10.0: + get-tsconfig@4.13.0: dependencies: resolve-pkg-maps: 1.0.0 - get-uri@6.0.4: + get-uri@6.0.5: dependencies: basic-ftp: 5.0.5 data-uri-to-buffer: 6.0.2 - debug: 4.4.1 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -9912,8 +9934,6 @@ snapshots: has-flag@4.0.0: {} - has-own-prop@2.0.0: {} - has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.1 @@ -9957,7 +9977,7 @@ snapshots: hast-util-from-parse5: 8.0.3 parse5: 7.3.0 vfile: 6.0.3 - vfile-message: 4.0.2 + vfile-message: 4.0.3 hast-util-from-parse5@8.0.3: dependencies: @@ -9988,11 +10008,7 @@ snapshots: hast-util-embedded: 3.0.0 hast-util-is-element: 3.0.0 hast-util-whitespace: 3.0.0 - unist-util-is: 6.0.0 - - hast-util-parse-selector@3.1.1: - dependencies: - '@types/hast': 2.3.10 + unist-util-is: 6.0.1 hast-util-parse-selector@4.0.0: dependencies: @@ -10008,7 +10024,7 @@ snapshots: hast-util-to-estree@3.1.3: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 @@ -10021,7 +10037,7 @@ snapshots: mdast-util-mdxjs-esm: 2.0.1 property-information: 7.1.0 space-separated-tokens: 2.0.2 - style-to-js: 1.1.16 + style-to-js: 1.1.18 unist-util-position: 5.0.0 zwitch: 2.0.4 transitivePeerDependencies: @@ -10043,7 +10059,7 @@ snapshots: hast-util-to-jsx-runtime@2.3.6: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/hast': 3.0.4 '@types/unist': 3.0.3 comma-separated-tokens: 2.0.3 @@ -10055,9 +10071,9 @@ snapshots: mdast-util-mdxjs-esm: 2.0.1 property-information: 7.1.0 space-separated-tokens: 2.0.2 - style-to-js: 1.1.16 + style-to-js: 1.1.18 unist-util-position: 5.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 transitivePeerDependencies: - supports-color @@ -10093,14 +10109,6 @@ snapshots: dependencies: '@types/hast': 3.0.4 - hastscript@7.2.0: - dependencies: - '@types/hast': 2.3.10 - comma-separated-tokens: 2.0.3 - hast-util-parse-selector: 3.1.1 - property-information: 6.5.0 - space-separated-tokens: 2.0.2 - hastscript@9.0.1: dependencies: '@types/hast': 3.0.4 @@ -10127,8 +10135,8 @@ snapshots: http-proxy-agent@7.0.2: dependencies: - agent-base: 7.1.3 - debug: 4.4.1 + agent-base: 7.1.4 + debug: 4.4.3 transitivePeerDependencies: - supports-color @@ -10139,12 +10147,12 @@ snapshots: https-proxy-agent@7.0.6: dependencies: - agent-base: 7.1.3 - debug: 4.4.1 + agent-base: 7.1.4 + debug: 4.4.3 transitivePeerDependencies: - supports-color - human-id@4.1.1: {} + human-id@4.1.2: {} iconv-lite@0.4.24: dependencies: @@ -10154,11 +10162,15 @@ snapshots: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.7.0: + dependencies: + safer-buffer: 2.1.2 + ieee754@1.2.1: {} ignore@5.3.2: {} - ignore@7.0.4: {} + ignore@7.0.5: {} immer@9.0.21: {} @@ -10167,7 +10179,7 @@ snapshots: parent-module: 1.0.1 resolve-from: 4.0.0 - import-meta-resolve@4.1.0: {} + import-meta-resolve@4.2.0: {} imurmurhash@0.1.4: {} @@ -10181,17 +10193,17 @@ snapshots: inline-style-parser@0.2.4: {} - inquirer@12.6.1(@types/node@22.15.19): + inquirer@12.10.0(@types/node@22.18.13): dependencies: - '@inquirer/core': 10.1.11(@types/node@22.15.19) - '@inquirer/prompts': 7.5.1(@types/node@22.15.19) - '@inquirer/type': 3.0.6(@types/node@22.15.19) - ansi-escapes: 4.3.2 + '@inquirer/ansi': 1.0.1 + '@inquirer/core': 10.3.0(@types/node@22.18.13) + '@inquirer/prompts': 7.9.0(@types/node@22.18.13) + '@inquirer/type': 3.0.9(@types/node@22.18.13) mute-stream: 2.0.0 - run-async: 3.0.0 + run-async: 4.0.6 rxjs: 7.8.2 optionalDependencies: - '@types/node': 22.15.19 + '@types/node': 22.18.13 internal-slot@1.1.0: dependencies: @@ -10199,10 +10211,7 @@ snapshots: hasown: 2.0.2 side-channel: 1.1.0 - ip-address@9.0.5: - dependencies: - jsbn: 1.1.0 - sprintf-js: 1.1.3 + ip-address@10.0.1: {} ip-regex@4.3.0: {} @@ -10225,7 +10234,7 @@ snapshots: is-arrayish@0.2.1: {} - is-arrayish@0.3.2: {} + is-arrayish@0.3.4: {} is-async-function@2.1.1: dependencies: @@ -10250,7 +10259,7 @@ snapshots: is-bun-module@2.0.0: dependencies: - semver: 7.7.2 + semver: 7.7.3 is-callable@1.2.7: {} @@ -10283,9 +10292,10 @@ snapshots: is-fullwidth-code-point@3.0.0: {} - is-generator-function@1.1.0: + is-generator-function@1.1.2: dependencies: call-bound: 1.0.4 + generator-function: 2.0.1 get-proto: 1.0.1 has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 @@ -10304,6 +10314,8 @@ snapshots: is-map@2.0.3: {} + is-negative-zero@2.0.3: {} + is-number-object@1.1.1: dependencies: call-bound: 1.0.4 @@ -10375,14 +10387,11 @@ snapshots: isexe@2.0.0: {} - isexe@3.1.1: - optional: true - isows@1.0.7(ws@8.18.1): dependencies: ws: 8.18.1 - jiti@2.4.2: {} + jiti@2.6.1: {} jose@6.0.11: {} @@ -10399,8 +10408,6 @@ snapshots: dependencies: argparse: 2.0.1 - jsbn@1.1.0: {} - jsep@1.4.0: {} jsesc@3.1.0: {} @@ -10422,14 +10429,14 @@ snapshots: jsondiffpatch@0.6.0: dependencies: '@types/diff-match-patch': 1.0.36 - chalk: 5.4.1 + chalk: 5.6.2 diff-match-patch: 1.0.5 jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 - jsonfile@6.1.0: + jsonfile@6.2.0: dependencies: universalify: 2.0.1 optionalDependencies: @@ -10443,14 +10450,14 @@ snapshots: jsonpointer@5.0.1: {} - jwks-did-resolver@0.3.0(typescript@5.8.3)(zod@3.25.4): + jwks-did-resolver@0.3.0(typescript@5.7.3)(zod@3.25.4): dependencies: - did-jwks: 0.3.0(typescript@5.8.3)(zod@3.25.4) + did-jwks: 0.3.0(typescript@5.7.3)(zod@3.25.4) transitivePeerDependencies: - typescript - zod - katex@0.16.22: + katex@0.16.25: dependencies: commander: 8.3.0 @@ -10473,59 +10480,13 @@ snapshots: leven@3.1.0: {} - leven@4.0.0: {} + leven@4.1.0: {} levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 - lightningcss-darwin-arm64@1.29.3: - optional: true - - lightningcss-darwin-x64@1.29.3: - optional: true - - lightningcss-freebsd-x64@1.29.3: - optional: true - - lightningcss-linux-arm-gnueabihf@1.29.3: - optional: true - - lightningcss-linux-arm64-gnu@1.29.3: - optional: true - - lightningcss-linux-arm64-musl@1.29.3: - optional: true - - lightningcss-linux-x64-gnu@1.29.3: - optional: true - - lightningcss-linux-x64-musl@1.29.3: - optional: true - - lightningcss-win32-arm64-msvc@1.29.3: - optional: true - - lightningcss-win32-x64-msvc@1.29.3: - optional: true - - lightningcss@1.29.3: - dependencies: - detect-libc: 2.0.4 - optionalDependencies: - lightningcss-darwin-arm64: 1.29.3 - lightningcss-darwin-x64: 1.29.3 - lightningcss-freebsd-x64: 1.29.3 - lightningcss-linux-arm-gnueabihf: 1.29.3 - lightningcss-linux-arm64-gnu: 1.29.3 - lightningcss-linux-arm64-musl: 1.29.3 - lightningcss-linux-x64-gnu: 1.29.3 - lightningcss-linux-x64-musl: 1.29.3 - lightningcss-win32-arm64-msvc: 1.29.3 - lightningcss-win32-x64-msvc: 1.29.3 - optional: true - lines-and-columns@1.2.4: {} locate-path@5.0.0: @@ -10546,7 +10507,7 @@ snapshots: log-symbols@5.1.0: dependencies: - chalk: 5.4.1 + chalk: 5.6.2 is-unicode-supported: 1.3.0 longest-streak@3.1.0: {} @@ -10555,17 +10516,15 @@ snapshots: dependencies: js-tokens: 4.0.0 - loupe@3.1.3: {} - - loupe@3.2.0: {} + loupe@3.2.1: {} lowercase-keys@3.0.0: {} lru-cache@7.18.3: {} - magic-string@0.30.17: + magic-string@0.30.21: dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/sourcemap-codec': 1.5.5 markdown-extensions@2.0.0: {} @@ -10577,14 +10536,14 @@ snapshots: dependencies: '@types/mdast': 4.0.4 escape-string-regexp: 5.0.0 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 mdast-util-from-markdown@2.0.2: dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.2.0 devlop: 1.1.0 mdast-util-to-string: 4.0.0 micromark: 4.0.2 @@ -10701,7 +10660,7 @@ snapshots: parse-entities: 4.0.2 stringify-entities: 4.0.4 unist-util-stringify-position: 4.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 transitivePeerDependencies: - supports-color @@ -10729,7 +10688,7 @@ snapshots: mdast-util-phrasing@4.1.0: dependencies: '@types/mdast': 4.0.4 - unist-util-is: 6.0.0 + unist-util-is: 6.0.1 mdast-util-to-hast@13.2.0: dependencies: @@ -10773,7 +10732,7 @@ snapshots: micromark-core-commonmark@2.0.3: dependencies: - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.2.0 devlop: 1.1.0 micromark-factory-destination: 2.0.1 micromark-factory-label: 2.0.1 @@ -10859,7 +10818,7 @@ snapshots: dependencies: '@types/katex': 0.16.7 devlop: 1.1.0 - katex: 0.16.22 + katex: 0.16.25 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 micromark-util-symbol: 2.0.1 @@ -10867,7 +10826,7 @@ snapshots: micromark-extension-mdx-expression@3.0.1: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 devlop: 1.1.0 micromark-factory-mdx-expression: 2.0.3 micromark-factory-space: 2.0.1 @@ -10878,7 +10837,7 @@ snapshots: micromark-extension-mdx-jsx@3.0.2: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 micromark-factory-mdx-expression: 2.0.3 @@ -10887,7 +10846,7 @@ snapshots: micromark-util-events-to-acorn: 2.0.3 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - vfile-message: 4.0.2 + vfile-message: 4.0.3 micromark-extension-mdx-md@2.0.0: dependencies: @@ -10895,7 +10854,7 @@ snapshots: micromark-extension-mdxjs-esm@3.0.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 micromark-util-character: 2.1.1 @@ -10903,12 +10862,12 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 micromark-extension-mdxjs@3.0.0: dependencies: - acorn: 8.14.1 - acorn-jsx: 5.3.2(acorn@8.14.1) + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) micromark-extension-mdx-expression: 3.0.1 micromark-extension-mdx-jsx: 3.0.2 micromark-extension-mdx-md: 2.0.0 @@ -10931,7 +10890,7 @@ snapshots: micromark-factory-mdx-expression@2.0.3: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 devlop: 1.1.0 micromark-factory-space: 2.0.1 micromark-util-character: 2.1.1 @@ -10939,7 +10898,7 @@ snapshots: micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.2 + vfile-message: 4.0.3 micromark-factory-space@2.0.1: dependencies: @@ -10986,7 +10945,7 @@ snapshots: micromark-util-decode-string@2.0.1: dependencies: - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.2.0 micromark-util-character: 2.1.1 micromark-util-decode-numeric-character-reference: 2.0.2 micromark-util-symbol: 2.0.1 @@ -10995,13 +10954,13 @@ snapshots: micromark-util-events-to-acorn@2.0.3: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/unist': 3.0.3 devlop: 1.1.0 estree-util-visit: 2.0.0 micromark-util-symbol: 2.0.1 micromark-util-types: 2.0.2 - vfile-message: 4.0.2 + vfile-message: 4.0.3 micromark-util-html-tag-name@2.0.1: {} @@ -11033,8 +10992,8 @@ snapshots: micromark@4.0.2: dependencies: '@types/debug': 4.1.12 - debug: 4.4.1 - decode-named-character-reference: 1.1.0 + debug: 4.4.3 + decode-named-character-reference: 1.2.0 devlop: 1.1.0 micromark-core-commonmark: 2.0.3 micromark-factory-space: 2.0.1 @@ -11077,17 +11036,17 @@ snapshots: mimic-response@4.0.0: {} - minimatch@10.0.1: + minimatch@10.1.1: dependencies: - brace-expansion: 2.0.1 + '@isaacs/brace-expansion': 5.0.0 minimatch@3.1.2: dependencies: - brace-expansion: 1.1.11 + brace-expansion: 1.1.12 minimatch@9.0.5: dependencies: - brace-expansion: 2.0.1 + brace-expansion: 2.0.2 minimist@1.2.8: {} @@ -11102,18 +11061,20 @@ snapshots: minipass: 3.3.6 yallist: 4.0.0 - mintlify@4.0.538(@types/node@22.15.19)(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3): + mintlify@4.0.538(@types/node@22.18.13)(@types/react@19.2.2)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.7.3): dependencies: - '@mintlify/cli': 4.0.536(@types/node@22.15.19)(@types/react@19.1.4)(react-dom@18.3.1(react@19.1.0))(react@19.1.0)(typescript@5.8.3) + '@mintlify/cli': 4.0.536(@types/node@22.18.13)(@types/react@19.2.2)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(typescript@5.7.3) transitivePeerDependencies: - '@types/node' - '@types/react' + - bare-abort-controller - bare-buffer - bufferutil - debug - encoding - react - react-dom + - react-native-b4a - supports-color - typescript - utf-8-validate @@ -11144,7 +11105,7 @@ snapshots: napi-build-utils@2.0.0: {} - napi-postinstall@0.2.3: {} + napi-postinstall@0.3.4: {} natural-compare@1.4.0: {} @@ -11154,21 +11115,21 @@ snapshots: netmask@2.0.2: {} - next-mdx-remote-client@1.1.1(@types/react@19.1.4)(acorn@8.14.1)(react-dom@18.3.1(react@19.1.0))(react@19.1.0): + next-mdx-remote-client@1.1.4(@types/react@19.2.2)(react-dom@18.3.1(react@19.2.0))(react@19.2.0)(unified@11.0.5): dependencies: '@babel/code-frame': 7.27.1 - '@mdx-js/mdx': 3.1.0(acorn@8.14.1) - '@mdx-js/react': 3.1.0(@types/react@19.1.4)(react@19.1.0) - react: 19.1.0 - react-dom: 18.3.1(react@19.1.0) - remark-mdx-remove-esm: 1.1.0 + '@mdx-js/mdx': 3.1.1 + '@mdx-js/react': 3.1.1(@types/react@19.2.2)(react@19.2.0) + react: 19.2.0 + react-dom: 18.3.1(react@19.2.0) + remark-mdx-remove-esm: 1.2.1(unified@11.0.5) serialize-error: 12.0.0 vfile: 6.0.3 vfile-matter: 5.0.1 transitivePeerDependencies: - '@types/react' - - acorn - supports-color + - unified nimma@0.2.3: dependencies: @@ -11184,9 +11145,9 @@ snapshots: dependencies: '@types/nlcst': 2.0.3 - node-abi@3.75.0: + node-abi@3.79.0: dependencies: - semver: 7.7.1 + semver: 7.7.3 node-fetch@2.6.7: dependencies: @@ -11198,7 +11159,7 @@ snapshots: normalize-path@3.0.0: {} - normalize-url@8.0.1: {} + normalize-url@8.1.0: {} object-assign@4.1.1: {} @@ -11215,9 +11176,6 @@ snapshots: has-symbols: 1.1.0 object-keys: 1.1.1 - obuf@1.1.2: - optional: true - on-finished@2.4.1: dependencies: ee-first: 1.1.1 @@ -11230,6 +11188,14 @@ snapshots: dependencies: mimic-fn: 2.1.0 + oniguruma-parser@0.12.1: {} + + oniguruma-to-es@4.3.3: + dependencies: + oniguruma-parser: 0.12.1 + regex: 6.0.1 + regex-recursion: 6.0.2 + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 @@ -11249,7 +11215,7 @@ snapshots: ora@6.3.1: dependencies: - chalk: 5.4.1 + chalk: 5.6.2 cli-cursor: 4.0.0 cli-spinners: 2.9.2 is-interactive: 2.0.0 @@ -11269,17 +11235,17 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - ox@0.6.9(typescript@5.8.3)(zod@3.25.4): + ox@0.6.9(typescript@5.7.3)(zod@3.25.4): dependencies: - '@adraffy/ens-normalize': 1.11.0 + '@adraffy/ens-normalize': 1.11.1 '@noble/curves': 1.9.1 - '@noble/hashes': 1.8.0 + '@noble/hashes': 1.7.2 '@scure/bip32': 1.6.2 '@scure/bip39': 1.5.4 - abitype: 1.0.8(typescript@5.8.3)(zod@3.25.4) + abitype: 1.0.8(typescript@5.7.3)(zod@3.25.4) eventemitter3: 5.0.1 optionalDependencies: - typescript: 5.8.3 + typescript: 5.7.3 transitivePeerDependencies: - zod @@ -11324,9 +11290,9 @@ snapshots: pac-proxy-agent@7.2.0: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 - agent-base: 7.1.3 - debug: 4.4.1 - get-uri: 6.0.4 + agent-base: 7.1.4 + debug: 4.4.3 + get-uri: 6.0.5 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 pac-resolver: 7.0.1 @@ -11341,7 +11307,7 @@ snapshots: package-manager-detector@0.2.11: dependencies: - quansync: 0.2.10 + quansync: 0.2.11 pako@2.1.0: {} @@ -11358,7 +11324,7 @@ snapshots: '@types/unist': 2.0.11 character-entities-legacy: 3.0.0 character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.1.0 + decode-named-character-reference: 1.2.0 is-alphanumerical: 2.0.1 is-decimal: 2.0.1 is-hexadecimal: 2.0.1 @@ -11366,7 +11332,7 @@ snapshots: parse-json@5.2.0: dependencies: '@babel/code-frame': 7.27.1 - error-ex: 1.3.2 + error-ex: 1.3.4 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -11381,7 +11347,7 @@ snapshots: parse5@7.3.0: dependencies: - entities: 6.0.0 + entities: 6.0.1 parseurl@1.3.3: {} @@ -11397,71 +11363,15 @@ snapshots: pathe@2.0.3: {} - pathval@2.0.0: {} + pathval@2.0.1: {} pend@1.2.0: {} - pg-cloudflare@1.2.5: - optional: true - - pg-connection-string@2.9.0: - optional: true - - pg-int8@1.0.1: - optional: true - - pg-numeric@1.0.2: - optional: true - - pg-pool@3.10.0(pg@8.16.0): - dependencies: - pg: 8.16.0 - optional: true - - pg-protocol@1.10.0: - optional: true - - pg-types@2.2.0: - dependencies: - pg-int8: 1.0.1 - postgres-array: 2.0.0 - postgres-bytea: 1.0.0 - postgres-date: 1.0.7 - postgres-interval: 1.2.0 - optional: true - - pg-types@4.0.2: - dependencies: - pg-int8: 1.0.1 - pg-numeric: 1.0.2 - postgres-array: 3.0.4 - postgres-bytea: 3.0.0 - postgres-date: 2.1.0 - postgres-interval: 3.0.0 - postgres-range: 1.1.4 - optional: true - - pg@8.16.0: - dependencies: - pg-connection-string: 2.9.0 - pg-pool: 3.10.0(pg@8.16.0) - pg-protocol: 1.10.0 - pg-types: 2.2.0 - pgpass: 1.0.5 - optionalDependencies: - pg-cloudflare: 1.2.5 - optional: true - - pgpass@1.0.5: - dependencies: - split2: 4.2.0 - optional: true - picocolors@1.1.1: {} picomatch@2.3.1: {} - picomatch@4.0.2: {} + picomatch@4.0.3: {} pify@4.0.1: {} @@ -11469,56 +11379,25 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss@8.5.3: + postcss@8.5.6: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 - postgres-array@2.0.0: - optional: true - - postgres-array@3.0.4: - optional: true - - postgres-bytea@1.0.0: - optional: true - - postgres-bytea@3.0.0: - dependencies: - obuf: 1.1.2 - optional: true - - postgres-date@1.0.7: - optional: true - - postgres-date@2.1.0: - optional: true - - postgres-interval@1.2.0: - dependencies: - xtend: 4.0.2 - optional: true - - postgres-interval@3.0.0: - optional: true - - postgres-range@1.1.4: - optional: true - prebuild-install@7.1.3: dependencies: - detect-libc: 2.0.3 + detect-libc: 2.1.2 expand-template: 2.0.3 github-from-package: 0.0.0 minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 2.0.0 - node-abi: 3.75.0 - pump: 3.0.2 + node-abi: 3.79.0 + pump: 3.0.3 rc: 1.2.8 simple-get: 4.0.1 - tar-fs: 2.1.2 + tar-fs: 2.1.4 tunnel-agent: 0.6.0 prelude-ls@1.2.1: {} @@ -11536,8 +11415,6 @@ snapshots: progress@2.0.3: {} - property-information@6.5.0: {} - property-information@7.1.0: {} proxy-addr@2.0.7: @@ -11547,8 +11424,8 @@ snapshots: proxy-agent@6.5.0: dependencies: - agent-base: 7.1.3 - debug: 4.4.1 + agent-base: 7.1.4 + debug: 4.4.3 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 lru-cache: 7.18.3 @@ -11566,9 +11443,9 @@ snapshots: got: 12.6.1 is-ip: 3.1.0 - pump@3.0.2: + pump@3.0.3: dependencies: - end-of-stream: 1.4.4 + end-of-stream: 1.4.5 once: 1.4.0 punycode@2.3.1: {} @@ -11577,24 +11454,28 @@ snapshots: dependencies: '@puppeteer/browsers': 2.3.0 chromium-bidi: 0.6.3(devtools-protocol@0.0.1312386) - debug: 4.4.1 + debug: 4.4.3 devtools-protocol: 0.0.1312386 - ws: 8.18.2 + ws: 8.18.3 transitivePeerDependencies: + - bare-abort-controller - bare-buffer - bufferutil + - react-native-b4a - supports-color - utf-8-validate - puppeteer@22.15.0(typescript@5.8.3): + puppeteer@22.15.0(typescript@5.7.3): dependencies: '@puppeteer/browsers': 2.3.0 - cosmiconfig: 9.0.0(typescript@5.8.3) + cosmiconfig: 9.0.0(typescript@5.7.3) devtools-protocol: 0.0.1312386 puppeteer-core: 22.15.0 transitivePeerDependencies: + - bare-abort-controller - bare-buffer - bufferutil + - react-native-b4a - supports-color - typescript - utf-8-validate @@ -11607,7 +11488,7 @@ snapshots: dependencies: side-channel: 1.1.0 - quansync@0.2.10: {} + quansync@0.2.11: {} queue-microtask@1.2.3: {} @@ -11622,11 +11503,11 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - raw-body@3.0.0: + raw-body@3.0.1: dependencies: bytes: 3.1.2 http-errors: 2.0.0 - iconv-lite: 0.6.3 + iconv-lite: 0.7.0 unpipe: 1.0.0 rc@1.2.8: @@ -11636,13 +11517,13 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - react-dom@18.3.1(react@19.1.0): + react-dom@18.3.1(react@19.2.0): dependencies: loose-envify: 1.4.0 - react: 19.1.0 + react: 19.2.0 scheduler: 0.23.2 - react@19.1.0: {} + react@19.2.0: {} read-yaml-file@1.1.0: dependencies: @@ -11665,30 +11546,29 @@ snapshots: recma-build-jsx@1.0.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 estree-util-build-jsx: 3.0.1 vfile: 6.0.3 - recma-jsx@1.0.0(acorn@8.14.1): + recma-jsx@1.0.1(acorn@8.15.0): dependencies: - acorn-jsx: 5.3.2(acorn@8.14.1) + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) estree-util-to-js: 2.0.0 recma-parse: 1.0.0 recma-stringify: 1.0.0 unified: 11.0.5 - transitivePeerDependencies: - - acorn recma-parse@1.0.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 esast-util-from-js: 2.0.1 unified: 11.0.5 vfile: 6.0.3 recma-stringify@1.0.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 estree-util-to-js: 2.0.0 unified: 11.0.5 vfile: 6.0.3 @@ -11697,19 +11577,22 @@ snapshots: dependencies: call-bind: 1.0.8 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.24.0 es-errors: 1.3.0 es-object-atoms: 1.1.1 get-intrinsic: 1.3.0 get-proto: 1.0.1 which-builtin-type: 1.2.1 - refractor@4.9.0: + regex-recursion@6.0.2: dependencies: - '@types/hast': 2.3.10 - '@types/prismjs': 1.26.5 - hastscript: 7.2.0 - parse-entities: 4.0.2 + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.0.1: + dependencies: + regex-utilities: 2.3.0 regexp.prototype.flags@1.5.4: dependencies: @@ -11726,8 +11609,8 @@ snapshots: '@types/katex': 0.16.7 hast-util-from-html-isomorphic: 2.0.0 hast-util-to-text: 4.0.2 - katex: 0.16.22 - unist-util-visit-parents: 6.0.1 + katex: 0.16.25 + unist-util-visit-parents: 6.0.2 vfile: 6.0.3 rehype-minify-whitespace@6.0.2: @@ -11743,7 +11626,7 @@ snapshots: rehype-recma@1.0.0: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 '@types/hast': 3.0.4 hast-util-to-estree: 3.1.3 transitivePeerDependencies: @@ -11778,15 +11661,16 @@ snapshots: transitivePeerDependencies: - supports-color - remark-mdx-remove-esm@1.1.0: + remark-mdx-remove-esm@1.2.1(unified@11.0.5): dependencies: '@types/mdast': 4.0.4 mdast-util-mdxjs-esm: 2.0.1 + unified: 11.0.5 unist-util-remove: 4.0.0 transitivePeerDependencies: - supports-color - remark-mdx@3.1.0: + remark-mdx@3.1.1: dependencies: mdast-util-mdx: 3.0.0 micromark-extension-mdxjs: 3.0.0 @@ -11832,8 +11716,6 @@ snapshots: transitivePeerDependencies: - supports-color - repeat-string@1.6.1: {} - require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -11846,7 +11728,7 @@ snapshots: resolve-pkg-maps@1.0.0: {} - resolve@1.22.10: + resolve@1.22.11: dependencies: is-core-module: 2.16.1 path-parse: 1.0.7 @@ -11888,19 +11770,19 @@ snapshots: reusify@1.1.0: {} - rolldown-plugin-dts@0.13.3(rolldown@1.0.0-beta.9)(typescript@5.8.3): + rolldown-plugin-dts@0.13.14(rolldown@1.0.0-beta.9)(typescript@5.7.3): dependencies: - '@babel/generator': 7.27.1 - '@babel/parser': 7.27.2 - '@babel/types': 7.27.1 - ast-kit: 2.0.0 - birpc: 2.3.0 - debug: 4.4.1 - dts-resolver: 2.0.1 - get-tsconfig: 4.10.0 + '@babel/generator': 7.28.5 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + ast-kit: 2.1.3 + birpc: 2.6.1 + debug: 4.4.3 + dts-resolver: 2.1.2 + get-tsconfig: 4.13.0 rolldown: 1.0.0-beta.9 optionalDependencies: - typescript: 5.8.3 + typescript: 5.7.3 transitivePeerDependencies: - oxc-resolver - supports-color @@ -11909,7 +11791,7 @@ snapshots: dependencies: '@oxc-project/types': 0.70.0 '@rolldown/pluginutils': 1.0.0-beta.9 - ansis: 4.0.0 + ansis: 4.2.0 optionalDependencies: '@rolldown/binding-darwin-arm64': 1.0.0-beta.9 '@rolldown/binding-darwin-x64': 1.0.0-beta.9 @@ -11924,33 +11806,35 @@ snapshots: '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.9 '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.9 - rollup@4.39.0: + rollup@4.52.5: dependencies: - '@types/estree': 1.0.7 + '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.39.0 - '@rollup/rollup-android-arm64': 4.39.0 - '@rollup/rollup-darwin-arm64': 4.39.0 - '@rollup/rollup-darwin-x64': 4.39.0 - '@rollup/rollup-freebsd-arm64': 4.39.0 - '@rollup/rollup-freebsd-x64': 4.39.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.39.0 - '@rollup/rollup-linux-arm-musleabihf': 4.39.0 - '@rollup/rollup-linux-arm64-gnu': 4.39.0 - '@rollup/rollup-linux-arm64-musl': 4.39.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.39.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.39.0 - '@rollup/rollup-linux-riscv64-gnu': 4.39.0 - '@rollup/rollup-linux-riscv64-musl': 4.39.0 - '@rollup/rollup-linux-s390x-gnu': 4.39.0 - '@rollup/rollup-linux-x64-gnu': 4.39.0 - '@rollup/rollup-linux-x64-musl': 4.39.0 - '@rollup/rollup-win32-arm64-msvc': 4.39.0 - '@rollup/rollup-win32-ia32-msvc': 4.39.0 - '@rollup/rollup-win32-x64-msvc': 4.39.0 + '@rollup/rollup-android-arm-eabi': 4.52.5 + '@rollup/rollup-android-arm64': 4.52.5 + '@rollup/rollup-darwin-arm64': 4.52.5 + '@rollup/rollup-darwin-x64': 4.52.5 + '@rollup/rollup-freebsd-arm64': 4.52.5 + '@rollup/rollup-freebsd-x64': 4.52.5 + '@rollup/rollup-linux-arm-gnueabihf': 4.52.5 + '@rollup/rollup-linux-arm-musleabihf': 4.52.5 + '@rollup/rollup-linux-arm64-gnu': 4.52.5 + '@rollup/rollup-linux-arm64-musl': 4.52.5 + '@rollup/rollup-linux-loong64-gnu': 4.52.5 + '@rollup/rollup-linux-ppc64-gnu': 4.52.5 + '@rollup/rollup-linux-riscv64-gnu': 4.52.5 + '@rollup/rollup-linux-riscv64-musl': 4.52.5 + '@rollup/rollup-linux-s390x-gnu': 4.52.5 + '@rollup/rollup-linux-x64-gnu': 4.52.5 + '@rollup/rollup-linux-x64-musl': 4.52.5 + '@rollup/rollup-openharmony-arm64': 4.52.5 + '@rollup/rollup-win32-arm64-msvc': 4.52.5 + '@rollup/rollup-win32-ia32-msvc': 4.52.5 + '@rollup/rollup-win32-x64-gnu': 4.52.5 + '@rollup/rollup-win32-x64-msvc': 4.52.5 fsevents: 2.3.3 - run-async@3.0.0: {} + run-async@4.0.6: {} run-parallel@1.2.0: dependencies: @@ -12000,9 +11884,7 @@ snapshots: secure-json-parse@2.7.0: {} - semver@7.7.1: {} - - semver@7.7.2: {} + semver@7.7.3: {} send@0.19.0: dependencies: @@ -12062,8 +11944,8 @@ snapshots: sharp@0.33.5: dependencies: color: 4.2.3 - detect-libc: 2.0.4 - semver: 7.7.2 + detect-libc: 2.1.2 + semver: 7.7.3 optionalDependencies: '@img/sharp-darwin-arm64': 0.33.5 '@img/sharp-darwin-x64': 0.33.5 @@ -12091,8 +11973,16 @@ snapshots: shebang-regex@3.0.0: {} - shell-quote@1.8.2: - optional: true + shiki@3.14.0: + dependencies: + '@shikijs/core': 3.14.0 + '@shikijs/engine-javascript': 3.14.0 + '@shikijs/engine-oniguruma': 3.14.0 + '@shikijs/langs': 3.14.0 + '@shikijs/themes': 3.14.0 + '@shikijs/types': 3.14.0 + '@shikijs/vscode-textmate': 10.0.2 + '@types/hast': 3.0.4 side-channel-list@1.0.0: dependencies: @@ -12140,9 +12030,9 @@ snapshots: once: 1.4.0 simple-concat: 1.0.1 - simple-swizzle@0.2.2: + simple-swizzle@0.2.4: dependencies: - is-arrayish: 0.3.2 + is-arrayish: 0.3.4 slash@3.0.0: {} @@ -12180,28 +12070,28 @@ snapshots: socks-proxy-agent@8.0.5: dependencies: - agent-base: 7.1.3 - debug: 4.4.1 - socks: 2.8.4 + agent-base: 7.1.4 + debug: 4.4.3 + socks: 2.8.7 transitivePeerDependencies: - supports-color - socks@2.8.4: + socks@2.8.7: dependencies: - ip-address: 9.0.5 + ip-address: 10.0.1 smart-buffer: 4.2.0 sort-object-keys@1.1.3: {} sort-package-json@3.2.1: dependencies: - detect-indent: 7.0.1 + detect-indent: 7.0.2 detect-newline: 4.0.1 git-hooks-list: 4.1.1 is-plain-obj: 4.1.0 - semver: 7.7.2 + semver: 7.7.3 sort-object-keys: 1.1.3 - tinyglobby: 0.2.13 + tinyglobby: 0.2.15 source-map-js@1.2.1: {} @@ -12212,7 +12102,7 @@ snapshots: source-map@0.6.1: {} - source-map@0.7.4: {} + source-map@0.7.6: {} space-separated-tokens@2.0.2: {} @@ -12221,39 +12111,41 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - split2@4.2.0: - optional: true - sprintf-js@1.0.3: {} - sprintf-js@1.1.3: {} - stable-hash@0.0.5: {} stackback@0.0.2: {} - standard-parse@0.3.0(valibot@1.1.0(typescript@5.8.3))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0))(zod@3.25.4): + standard-parse@0.3.0(valibot@1.1.0(typescript@5.7.3))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1))(zod@3.25.4): dependencies: '@standard-schema/spec': 1.0.0 optionalDependencies: - valibot: 1.1.0(typescript@5.8.3) - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + valibot: 1.1.0(typescript@5.7.3) + vitest: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) zod: 3.25.4 statuses@2.0.1: {} - std-env@3.9.0: {} + std-env@3.10.0: {} stdin-discarder@0.1.0: dependencies: bl: 5.1.0 - streamx@2.22.0: + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + + streamx@2.23.0: dependencies: + events-universal: 1.0.1 fast-fifo: 1.3.2 text-decoder: 1.2.3 - optionalDependencies: - bare-events: 2.5.4 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a string-width@4.2.3: dependencies: @@ -12263,8 +12155,8 @@ snapshots: string-width@7.2.0: dependencies: - emoji-regex: 10.4.0 - get-east-asian-width: 1.3.0 + emoji-regex: 10.6.0 + get-east-asian-width: 1.4.0 strip-ansi: 7.1.0 string.prototype.trim@1.2.10: @@ -12273,7 +12165,7 @@ snapshots: call-bound: 1.0.4 define-data-property: 1.1.4 define-properties: 1.2.1 - es-abstract: 1.23.9 + es-abstract: 1.24.0 es-object-atoms: 1.1.1 has-property-descriptors: 1.0.2 @@ -12305,7 +12197,7 @@ snapshots: strip-ansi@7.1.0: dependencies: - ansi-regex: 6.1.0 + ansi-regex: 6.2.2 strip-bom-string@1.0.0: {} @@ -12315,15 +12207,15 @@ snapshots: strip-json-comments@3.1.1: {} - strip-literal@3.0.0: + strip-literal@3.1.0: dependencies: js-tokens: 9.0.1 - style-to-js@1.1.16: + style-to-js@1.1.18: dependencies: - style-to-object: 1.0.8 + style-to-object: 1.0.11 - style-to-object@1.0.8: + style-to-object@1.0.11: dependencies: inline-style-parser: 0.2.4 @@ -12333,51 +12225,55 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - swr@2.3.3(react@19.1.0): + swr@2.3.6(react@19.2.0): dependencies: dequal: 2.0.3 - react: 19.1.0 - use-sync-external-store: 1.5.0(react@19.1.0) + react: 19.2.0 + use-sync-external-store: 1.6.0(react@19.2.0) - synckit@0.11.4: + synckit@0.11.11: dependencies: - '@pkgr/core': 0.2.4 - tslib: 2.8.1 + '@pkgr/core': 0.2.9 synckit@0.11.6: dependencies: - '@pkgr/core': 0.2.4 + '@pkgr/core': 0.2.9 - tar-fs@2.1.2: + tar-fs@2.1.4: dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 - pump: 3.0.2 + pump: 3.0.3 tar-stream: 2.2.0 - tar-fs@3.0.8: + tar-fs@3.1.1: dependencies: - pump: 3.0.2 + pump: 3.0.3 tar-stream: 3.1.7 optionalDependencies: - bare-fs: 4.1.5 + bare-fs: 4.5.0 bare-path: 3.0.0 transitivePeerDependencies: + - bare-abort-controller - bare-buffer + - react-native-b4a tar-stream@2.2.0: dependencies: bl: 4.1.0 - end-of-stream: 1.4.4 + end-of-stream: 1.4.5 fs-constants: 1.0.0 inherits: 2.0.4 readable-stream: 3.6.2 tar-stream@3.1.7: dependencies: - b4a: 1.6.7 + b4a: 1.7.3 fast-fifo: 1.3.2 - streamx: 2.22.0 + streamx: 2.23.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a tar@6.2.1: dependencies: @@ -12392,7 +12288,9 @@ snapshots: text-decoder@1.2.3: dependencies: - b4a: 1.6.7 + b4a: 1.7.3 + transitivePeerDependencies: + - react-native-b4a throttleit@2.1.0: {} @@ -12404,21 +12302,16 @@ snapshots: tinyexec@1.0.1: {} - tinyglobby@0.2.13: - dependencies: - fdir: 6.4.4(picomatch@4.0.2) - picomatch: 4.0.2 - - tinyglobby@0.2.14: + tinyglobby@0.2.15: dependencies: - fdir: 6.4.4(picomatch@4.0.2) - picomatch: 4.0.2 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 tinypool@1.1.1: {} tinyrainbow@2.0.0: {} - tinyspy@4.0.3: {} + tinyspy@4.0.4: {} tmp@0.0.33: dependencies: @@ -12438,33 +12331,34 @@ snapshots: trough@2.2.0: {} - ts-api-utils@2.1.0(typescript@5.8.3): + ts-api-utils@2.1.0(typescript@5.7.3): dependencies: - typescript: 5.8.3 + typescript: 5.7.3 - tsconfck@3.1.5(typescript@5.8.3): + tsconfck@3.1.6(typescript@5.7.3): optionalDependencies: - typescript: 5.8.3 + typescript: 5.7.3 - tsdown@0.11.12(typescript@5.8.3): + tsdown@0.11.12(typescript@5.7.3): dependencies: - ansis: 4.0.0 + ansis: 4.2.0 cac: 6.7.14 chokidar: 4.0.3 - debug: 4.4.1 - diff: 8.0.1 + debug: 4.4.3 + diff: 8.0.2 empathic: 1.1.0 hookable: 5.5.3 rolldown: 1.0.0-beta.9 - rolldown-plugin-dts: 0.13.3(rolldown@1.0.0-beta.9)(typescript@5.8.3) - semver: 7.7.2 + rolldown-plugin-dts: 0.13.14(rolldown@1.0.0-beta.9)(typescript@5.7.3) + semver: 7.7.3 tinyexec: 1.0.1 - tinyglobby: 0.2.13 - unconfig: 7.3.2 + tinyglobby: 0.2.15 + unconfig: 7.3.3 optionalDependencies: - typescript: 5.8.3 + typescript: 5.7.3 transitivePeerDependencies: - '@oxc-project/runtime' + - '@typescript/native-preview' - oxc-resolver - supports-color - vue-tsc @@ -12473,10 +12367,10 @@ snapshots: tslib@2.8.1: {} - tsx@4.20.3: + tsx@4.19.4: dependencies: - esbuild: 0.25.2 - get-tsconfig: 4.10.0 + esbuild: 0.25.11 + get-tsconfig: 4.13.0 optionalDependencies: fsevents: 2.3.3 @@ -12515,8 +12409,6 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-fest@0.21.3: {} - type-fest@4.41.0: {} type-is@1.6.18: @@ -12563,17 +12455,17 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3): + typescript-eslint@8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.7.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3) - eslint: 9.27.0(jiti@2.4.2) - typescript: 5.8.3 + '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.7.3))(eslint@9.27.0(jiti@2.6.1))(typescript@5.7.3) + '@typescript-eslint/parser': 8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.7.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.6.1))(typescript@5.7.3) + eslint: 9.27.0(jiti@2.6.1) + typescript: 5.7.3 transitivePeerDependencies: - supports-color - typescript@5.8.3: {} + typescript@5.7.3: {} uint8arrays@3.1.1: dependencies: @@ -12595,12 +12487,12 @@ snapshots: buffer: 5.7.1 through: 2.3.8 - unconfig@7.3.2: + unconfig@7.3.3: dependencies: - '@quansync/fs': 0.1.2 + '@quansync/fs': 0.1.5 defu: 6.1.4 - jiti: 2.4.2 - quansync: 0.2.10 + jiti: 2.6.1 + quansync: 0.2.11 undici-types@6.21.0: {} @@ -12621,13 +12513,13 @@ snapshots: unist-util-find-after@5.0.0: dependencies: '@types/unist': 3.0.3 - unist-util-is: 6.0.0 + unist-util-is: 6.0.1 unist-util-is@5.2.1: dependencies: '@types/unist': 2.0.11 - unist-util-is@6.0.0: + unist-util-is@6.0.1: dependencies: '@types/unist': 3.0.3 @@ -12656,8 +12548,8 @@ snapshots: unist-util-remove@4.0.0: dependencies: '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 unist-util-stringify-position@4.0.0: dependencies: @@ -12672,10 +12564,10 @@ snapshots: '@types/unist': 2.0.11 unist-util-is: 5.2.1 - unist-util-visit-parents@6.0.1: + unist-util-visit-parents@6.0.2: dependencies: '@types/unist': 3.0.3 - unist-util-is: 6.0.0 + unist-util-is: 6.0.1 unist-util-visit@4.1.2: dependencies: @@ -12686,8 +12578,8 @@ snapshots: unist-util-visit@5.0.0: dependencies: '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 universalify@0.1.2: {} @@ -12695,27 +12587,29 @@ snapshots: unpipe@1.0.0: {} - unrs-resolver@1.7.2: + unrs-resolver@1.11.1: dependencies: - napi-postinstall: 0.2.3 + napi-postinstall: 0.3.4 optionalDependencies: - '@unrs/resolver-binding-darwin-arm64': 1.7.2 - '@unrs/resolver-binding-darwin-x64': 1.7.2 - '@unrs/resolver-binding-freebsd-x64': 1.7.2 - '@unrs/resolver-binding-linux-arm-gnueabihf': 1.7.2 - '@unrs/resolver-binding-linux-arm-musleabihf': 1.7.2 - '@unrs/resolver-binding-linux-arm64-gnu': 1.7.2 - '@unrs/resolver-binding-linux-arm64-musl': 1.7.2 - '@unrs/resolver-binding-linux-ppc64-gnu': 1.7.2 - '@unrs/resolver-binding-linux-riscv64-gnu': 1.7.2 - '@unrs/resolver-binding-linux-riscv64-musl': 1.7.2 - '@unrs/resolver-binding-linux-s390x-gnu': 1.7.2 - '@unrs/resolver-binding-linux-x64-gnu': 1.7.2 - '@unrs/resolver-binding-linux-x64-musl': 1.7.2 - '@unrs/resolver-binding-wasm32-wasi': 1.7.2 - '@unrs/resolver-binding-win32-arm64-msvc': 1.7.2 - '@unrs/resolver-binding-win32-ia32-msvc': 1.7.2 - '@unrs/resolver-binding-win32-x64-msvc': 1.7.2 + '@unrs/resolver-binding-android-arm-eabi': 1.11.1 + '@unrs/resolver-binding-android-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-arm64': 1.11.1 + '@unrs/resolver-binding-darwin-x64': 1.11.1 + '@unrs/resolver-binding-freebsd-x64': 1.11.1 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1 + '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-arm64-musl': 1.11.1 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1 + '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-gnu': 1.11.1 + '@unrs/resolver-binding-linux-x64-musl': 1.11.1 + '@unrs/resolver-binding-wasm32-wasi': 1.11.1 + '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1 + '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 + '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 uri-js@4.4.1: dependencies: @@ -12725,9 +12619,9 @@ snapshots: urlpattern-polyfill@10.0.0: {} - use-sync-external-store@1.5.0(react@19.1.0): + use-sync-external-store@1.6.0(react@19.2.0): dependencies: - react: 19.1.0 + react: 19.2.0 util-deprecate@1.0.2: {} @@ -12737,9 +12631,9 @@ snapshots: uuid@11.1.0: {} - valibot@1.1.0(typescript@5.8.3): + valibot@1.1.0(typescript@5.7.3): optionalDependencies: - typescript: 5.8.3 + typescript: 5.7.3 varint@6.0.0: {} @@ -12753,9 +12647,9 @@ snapshots: vfile-matter@5.0.1: dependencies: vfile: 6.0.3 - yaml: 2.8.0 + yaml: 2.8.1 - vfile-message@4.0.2: + vfile-message@4.0.3: dependencies: '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 @@ -12763,32 +12657,32 @@ snapshots: vfile@6.0.3: dependencies: '@types/unist': 3.0.3 - vfile-message: 4.0.2 + vfile-message: 4.0.3 - viem@2.29.4(typescript@5.8.3)(zod@3.25.4): + viem@2.29.4(typescript@5.7.3)(zod@3.25.4): dependencies: '@noble/curves': 1.8.2 '@noble/hashes': 1.7.2 '@scure/bip32': 1.6.2 '@scure/bip39': 1.5.4 - abitype: 1.0.8(typescript@5.8.3)(zod@3.25.4) + abitype: 1.0.8(typescript@5.7.3)(zod@3.25.4) isows: 1.0.7(ws@8.18.1) - ox: 0.6.9(typescript@5.8.3)(zod@3.25.4) + ox: 0.6.9(typescript@5.7.3)(zod@3.25.4) ws: 8.18.1 optionalDependencies: - typescript: 5.8.3 + typescript: 5.7.3 transitivePeerDependencies: - bufferutil - utf-8-validate - zod - vite-node@3.2.4(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0): + vite-node@3.2.4(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1): dependencies: cac: 6.7.14 - debug: 4.4.1 + debug: 4.4.3 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 6.2.5(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + vite: 7.1.12(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -12803,58 +12697,60 @@ snapshots: - tsx - yaml - vite-tsconfig-paths@5.1.4(typescript@5.8.3)(vite@6.2.5(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0)): + vite-tsconfig-paths@5.1.4(typescript@5.7.3)(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1)): dependencies: - debug: 4.4.0 + debug: 4.4.3 globrex: 0.1.2 - tsconfck: 3.1.5(typescript@5.8.3) + tsconfck: 3.1.6(typescript@5.7.3) optionalDependencies: - vite: 6.2.5(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + vite: 7.1.12(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) transitivePeerDependencies: - supports-color - typescript - vite@6.2.5(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0): + vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1): dependencies: - esbuild: 0.25.2 - postcss: 8.5.3 - rollup: 4.39.0 + esbuild: 0.25.11 + fdir: 6.5.0(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.52.5 + tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 22.15.19 + '@types/node': 22.18.13 fsevents: 2.3.3 - jiti: 2.4.2 - lightningcss: 1.29.3 - tsx: 4.20.3 - yaml: 2.8.0 + jiti: 2.6.1 + tsx: 4.19.4 + yaml: 2.8.1 - vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0): + vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1): dependencies: - '@types/chai': 5.2.2 + '@types/chai': 5.2.3 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@6.2.5(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0)) + '@vitest/mocker': 3.2.4(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 '@vitest/spy': 3.2.4 '@vitest/utils': 3.2.4 - chai: 5.2.0 - debug: 4.4.1 - expect-type: 1.2.1 - magic-string: 0.30.17 + chai: 5.3.3 + debug: 4.4.3 + expect-type: 1.2.2 + magic-string: 0.30.21 pathe: 2.0.3 - picomatch: 4.0.2 - std-env: 3.9.0 + picomatch: 4.0.3 + std-env: 3.10.0 tinybench: 2.9.0 tinyexec: 0.3.2 - tinyglobby: 0.2.14 + tinyglobby: 0.2.15 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 6.2.5(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) - vite-node: 3.2.4(@types/node@22.15.19)(jiti@2.4.2)(lightningcss@1.29.3)(tsx@4.20.3)(yaml@2.8.0) + vite: 7.1.12(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: '@types/debug': 4.1.12 - '@types/node': 22.15.19 + '@types/node': 22.18.13 transitivePeerDependencies: - jiti - less @@ -12877,9 +12773,9 @@ snapshots: dependencies: defaults: 1.0.4 - web-identity-schemas@0.1.6(valibot@1.1.0(typescript@5.8.3))(zod@3.25.4): + web-identity-schemas@0.1.6(valibot@1.1.0(typescript@5.7.3))(zod@3.25.4): optionalDependencies: - valibot: 1.1.0(typescript@5.8.3) + valibot: 1.1.0(typescript@5.7.3) zod: 3.25.4 web-namespaces@2.0.1: {} @@ -12907,7 +12803,7 @@ snapshots: is-async-function: 2.1.1 is-date-object: 1.1.0 is-finalizationregistry: 1.1.1 - is-generator-function: 1.1.0 + is-generator-function: 1.1.2 is-regex: 1.2.1 is-weakref: 1.1.1 isarray: 2.0.5 @@ -12936,11 +12832,6 @@ snapshots: dependencies: isexe: 2.0.0 - which@4.0.0: - dependencies: - isexe: 3.1.1 - optional: true - why-is-node-running@2.3.0: dependencies: siginfo: 2.0.0 @@ -12962,7 +12853,7 @@ snapshots: wrap-ansi@9.0.0: dependencies: - ansi-styles: 6.2.1 + ansi-styles: 6.2.3 string-width: 7.2.0 strip-ansi: 7.1.0 @@ -12972,7 +12863,7 @@ snapshots: ws@8.18.1: {} - ws@8.18.2: {} + ws@8.18.3: {} xdg-basedir@5.1.0: {} @@ -12983,16 +12874,11 @@ snapshots: xmlbuilder@11.0.1: {} - xtend@4.0.2: - optional: true - y18n@5.0.8: {} yallist@4.0.0: {} - yaml@2.7.1: {} - - yaml@2.8.0: {} + yaml@2.8.1: {} yargs-parser@21.1.1: {} @@ -13013,11 +12899,11 @@ snapshots: yocto-queue@0.1.0: {} - yoctocolors-cjs@2.1.2: {} + yoctocolors-cjs@2.1.3: {} yoctocolors@2.1.1: {} - zod-to-json-schema@3.24.5(zod@3.25.4): + zod-to-json-schema@3.24.6(zod@3.25.4): dependencies: zod: 3.25.4 diff --git a/tools/api-utils/package.json b/tools/api-utils/package.json index e292a0a..5704f4b 100644 --- a/tools/api-utils/package.json +++ b/tools/api-utils/package.json @@ -48,14 +48,14 @@ "@agentcommercekit/jwt": "workspace:*", "@agentcommercekit/keys": "workspace:*", "@agentcommercekit/vc": "workspace:*", - "hono": "^4.7.10", - "valibot": "^1.1.0" + "hono": "4.7.10", + "valibot": "1.1.0" }, "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "eslint": "^9.27.0", - "typescript": "^5", - "vitest": "^3.2.4" + "eslint": "9.27.0", + "typescript": "5.7.3", + "vitest": "3.2.4" } } diff --git a/tools/cli-tools/package.json b/tools/cli-tools/package.json index 3cf5b04..28a539c 100644 --- a/tools/cli-tools/package.json +++ b/tools/cli-tools/package.json @@ -30,19 +30,19 @@ "test": "vitest" }, "dependencies": { - "@inquirer/prompts": "^7.5.1", - "figlet": "^1.8.1", - "strip-ansi": "^7.1.0", - "wrap-ansi": "^9.0.0", - "yoctocolors": "^2.1.1" + "@inquirer/prompts": "7.5.1", + "figlet": "1.8.1", + "strip-ansi": "7.1.0", + "wrap-ansi": "9.0.0", + "yoctocolors": "2.1.1" }, "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "@types/figlet": "^1.7.0", - "@types/node": "^22", - "eslint": "^9.27.0", - "typescript": "^5", - "vitest": "^3.2.4" + "@types/figlet": "1.7.0", + "@types/node": "22.18.13", + "eslint": "9.27.0", + "typescript": "5.7.3", + "vitest": "3.2.4" } } diff --git a/tools/eslint-config/package.json b/tools/eslint-config/package.json index c9cde60..0050744 100644 --- a/tools/eslint-config/package.json +++ b/tools/eslint-config/package.json @@ -21,16 +21,16 @@ }, "main": "./base.js", "devDependencies": { - "@cspell/eslint-plugin": "^9.0.1", - "@eslint/js": "^9.27.0", - "@eslint/json": "^0.12.0", - "@eslint/markdown": "^6.4.0", - "eslint": "^9.27.0", - "eslint-config-prettier": "^10.1.5", - "eslint-import-resolver-typescript": "^4.3.5", - "eslint-plugin-import-x": "^4.12.2", - "eslint-plugin-turbo": "^2.5.3", - "typescript": "^5", - "typescript-eslint": "^8.32.1" + "@cspell/eslint-plugin": "9.0.1", + "@eslint/js": "9.27.0", + "@eslint/json": "0.12.0", + "@eslint/markdown": "6.4.0", + "eslint": "9.27.0", + "eslint-config-prettier": "10.1.5", + "eslint-import-resolver-typescript": "4.3.5", + "eslint-plugin-import-x": "4.12.2", + "eslint-plugin-turbo": "2.5.3", + "typescript": "5.7.3", + "typescript-eslint": "8.32.1" } } From bb56426a3d1a2f73d9d183e72b9737ff130d6ceb Mon Sep 17 00:00:00 2001 From: Matt Venables Date: Wed, 29 Oct 2025 04:53:56 -0400 Subject: [PATCH 3/6] Update tests to use assertive language --- AGENTS.md | 5 +- packages/agentcommercekit/README.md | 1 + packages/caip/README.md | 146 +++++++++++++++++- .../did-resolvers/web-did-resolver.test.ts | 16 +- packages/jwt/src/create-jwt.test.ts | 4 +- packages/jwt/src/jwt-string.test.ts | 4 +- packages/keys/src/encoding/multibase.test.ts | 30 ++-- packages/vc/src/create-credential.test.ts | 12 +- packages/vc/src/create-presentation.test.ts | 14 +- .../vc/src/revocation/make-revocable.test.ts | 2 +- .../vc/src/verification/is-expired.test.ts | 10 +- .../vc/src/verification/is-revoked.test.ts | 16 +- .../verify-parsed-credential.test.ts | 16 +- .../vc/src/verification/verify-proof.test.ts | 8 +- 14 files changed, 215 insertions(+), 69 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index d636b41..846e897 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -43,7 +43,7 @@ pnpm demo:skyfire-kya # Skyfire KYA token demonstration ### Testing - Run individual package tests: `pnpm --filter ./packages/[package-name] test` -- All tests use **Vitest** framework and use assertive testing (`it('requires...')`, not `it('should require...')`) +- All tests use **Vitest** framework with assertive testing patterns (`it('requires...')`, `it('throws...')`, `it('returns...')`) - Test configuration: individual `vitest.config.ts` files per package ## Architecture @@ -53,6 +53,7 @@ pnpm demo:skyfire-kya # Skyfire KYA token demonstration - **`agentcommercekit/`** - Main SDK package (exports everything) - **`ack-id/`** - Identity protocol implementation - **`ack-pay/`** - Payment protocol implementation +- **`caip/`** - CAIP (Chain Agnostic Improvement Proposal) utilities for CAIP-2, CAIP-10, and CAIP-19 - **`did/`** - Decentralized Identifier utilities - **`jwt/`** - JWT creation/verification utilities - **`keys/`** - Cryptographic key management (Ed25519, secp256k1, secp256r1) @@ -71,7 +72,7 @@ Standalone service implementations including credential issuer, verifier, and lo - **Turbo**: Orchestrates builds across packages with dependency graph - **tsdown**: TypeScript compiler/bundler - **Output**: `dist/` directories with ESM and TypeScript definitions -- **Dependency Management**: Packages have proper dependency relationships +- **Dependency Management**: Exact versions for dependencies (enforced via `.npmrc`), ranges for peer dependencies ### Key Technical Patterns diff --git a/packages/agentcommercekit/README.md b/packages/agentcommercekit/README.md index 5f7fbf6..28cc29a 100644 --- a/packages/agentcommercekit/README.md +++ b/packages/agentcommercekit/README.md @@ -20,6 +20,7 @@ Alternatively, you can install each sub-package individually. These are: - [@agentcommercekit/ack-id](https://github.com/agentcommercekit/ack/tree/main/packages/ack-id) - For ACK-ID specific schemas and functionality - [@agentcommercekit/ack-pay](https://github.com/agentcommercekit/ack/tree/main/packages/ack-pay) - For ACK-Pay specific schemas and functionality +- [@agentcommercekit/caip](https://github.com/agentcommercekit/ack/tree/main/packages/caip) - For CAIP (Chain Agnostic Improvement Proposal) utilities - [@agentcommercekit/did](https://github.com/agentcommercekit/ack/tree/main/packages/did) - For DID resolution and manipulation - [@agentcommercekit/jwt](https://github.com/agentcommercekit/ack/tree/main/packages/jwt) - For JWT creation and verification - [@agentcommercekit/keys](https://github.com/agentcommercekit/ack/tree/main/packages/keys) - For public/private KeyPairs diff --git a/packages/caip/README.md b/packages/caip/README.md index 40e24e9..8f68e8d 100644 --- a/packages/caip/README.md +++ b/packages/caip/README.md @@ -1,6 +1,6 @@ # @agentcommercekit/caip -CAIP (Chain Agnostic Improvement Proposal) utilities with support for CAIP-2, CAIP-10, and CAIP-19. +CAIP (Chain Agnostic Improvement Proposal) utilities for blockchain-agnostic identifier formats with support for CAIP-2 (Chain IDs), CAIP-10 (Account IDs), and CAIP-19 (Asset IDs). This package is part of the [Agent Commerce Kit](https://www.agentcommercekit.com). @@ -12,6 +12,150 @@ npm i @agentcommercekit/caip pnpm add @agentcommercekit/caip ``` +## What are CAIP IDs? + +Chain Agnostic Improvement Proposals (CAIPs) provide standardized formats for identifying blockchains, accounts, and assets across different blockchain ecosystems. This enables applications to work with multiple chains without custom logic for each one. + +In short, it these let you specify blockchains and contracts in a standardized format. + +## Usage + +### CAIP-2: Chain IDs + +CAIP-2 defines a standard format for blockchain network identifiers: `namespace:reference` + +```ts +import { caip2ChainIds, caip2Parts } from "@agentcommercekit/caip" + +// Use predefined chain IDs +const ethMainnet = caip2ChainIds.ethereumMainnet // "eip155:1" +const solMainnet = caip2ChainIds.solanaMainnet // "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp" + +// Parse chain ID into parts +const parts = caip2Parts("eip155:1") +// { namespace: "eip155", reference: "1" } +``` + +**Available predefined chains:** + +- `ethereumMainnet`, `ethereumSepolia` +- `baseMainnet`, `baseSepolia` +- `arbitrumMainnet`, `arbitrumSepolia` +- `solanaMainnet`, `solanaDevnet` + +### CAIP-10: Account IDs + +CAIP-10 defines account identifiers across chains: `chainId:accountAddress` + +```ts +import { createCaip10AccountId, caip10Parts } from "@agentcommercekit/caip" + +// Create an account ID +const accountId = createCaip10AccountId( + "eip155:1", + "0x1234567890123456789012345678901234567890" +) +// "eip155:1:0x1234567890123456789012345678901234567890" + +// Parse account ID into parts +const parts = caip10Parts(accountId) +// { +// namespace: "eip155", +// reference: "1", +// accountId: "0x1234567890123456789012345678901234567890" +// } +``` + +### CAIP-19: Asset IDs + +CAIP-19 defines asset and token identifiers: `chainId/assetNamespace:assetReference/tokenId` + +```ts +import type { Caip19AssetType, Caip19AssetId } from "@agentcommercekit/caip" + +// Asset type (e.g., ERC-721 contract) +const nftContract: Caip19AssetType = + "eip155:1/erc721:0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D" + +// Asset ID (specific token) +const nftToken: Caip19AssetId = + "eip155:1/erc721:0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D/1" +``` + +## API Reference + +### CAIP-2 (Chain IDs) + +**Types:** + +- `Caip2ChainId` - Chain identifier format +- `Caip2ChainIdParts` - Parsed chain ID components + +**Constants:** + +- `caip2ChainIds` - Predefined chain IDs for common networks +- `caip2ChainIdRegex` - Validation regex + +**Functions:** + +- `caip2Parts(chainId)` - Parse a CAIP-2 chain ID into namespace and reference + +### CAIP-10 (Account IDs) + +**Types:** + +- `Caip10AccountId` - Account identifier format +- `Caip10AccountIdParts` - Parsed account ID components + +**Constants:** + +- `caip10AccountIdRegex` - Validation regex + +**Functions:** + +- `createCaip10AccountId(chainId, address)` - Create an account ID +- `caip10Parts(accountId)` - Parse an account ID into components + +### CAIP-19 (Asset IDs) + +**Types:** + +- `Caip19AssetName` - Asset namespace and reference +- `Caip19AssetType` - Asset type (contract/collection) +- `Caip19AssetId` - Specific asset/token identifier + +**Constants:** + +- `caip19AssetIdRegex`, `caip19AssetTypeRegex`, `caip19AssetNameRegex` - Validation regexes + +### Schema Validation + +```ts +// Zod v4 schemas +import { + caip2ChainIdSchema, + caip10AccountIdSchema +} from "@agentcommercekit/caip/schemas/zod/v4" + +// Zod v3 schemas +import { + caip2ChainIdSchema, + caip10AccountIdSchema +} from "@agentcommercekit/caip/schemas/zod/v3" + +// Valibot schemas +import { + caip2ChainIdSchema, + caip10AccountIdSchema +} from "@agentcommercekit/caip/schemas/valibot" +``` + +## Resources + +- [CAIP-2 Specification](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-2.md) +- [CAIP-10 Specification](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-10.md) +- [CAIP-19 Specification](https://github.com/ChainAgnostic/CAIPs/blob/main/CAIPs/caip-19.md) + ## License (MIT) Copyright (c) 2025 [Catena Labs, Inc](https://catenalabs.com). 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 aa8110f..0785579 100644 --- a/packages/did/src/did-resolvers/web-did-resolver.test.ts +++ b/packages/did/src/did-resolvers/web-did-resolver.test.ts @@ -16,7 +16,7 @@ describe("web-did-resolver", () => { }) describe("getResolver", () => { - it("should resolve a valid did:web document", async () => { + it("resolves a valid did:web document", async () => { mockFetch.mockResolvedValueOnce({ ok: true, json: () => Promise.resolve(mockDidDocument) @@ -48,7 +48,7 @@ describe("web-did-resolver", () => { ) }) - it("should use custom docPath when provided", async () => { + it("uses custom docPath when provided", async () => { mockFetch.mockResolvedValueOnce({ ok: true, json: () => Promise.resolve(mockDidDocument) @@ -70,7 +70,7 @@ describe("web-did-resolver", () => { ) }) - it("should allow http for specified hosts", async () => { + it("allows http for specified hosts", async () => { mockFetch.mockResolvedValueOnce({ ok: true, json: () => Promise.resolve(mockDidDocument) @@ -93,7 +93,7 @@ describe("web-did-resolver", () => { ) }) - it("should handle fetch errors", async () => { + it("handles fetch errors", async () => { mockFetch.mockRejectedValueOnce(new Error("Network error")) const resolver = getResolver() @@ -120,7 +120,7 @@ describe("web-did-resolver", () => { }) }) - it("should handle non-OK responses", async () => { + it("handles non-OK responses", async () => { mockFetch.mockResolvedValueOnce({ ok: false, statusText: "Not Found" @@ -151,7 +151,7 @@ describe("web-did-resolver", () => { }) }) - it("should handle invalid DID documents", async () => { + it("handles invalid DID documents", async () => { mockFetch.mockResolvedValueOnce({ ok: true, json: () => Promise.resolve({ invalid: "document" }) @@ -182,7 +182,7 @@ describe("web-did-resolver", () => { }) }) - it("should handle DID document with mismatched ID", async () => { + it("handles DID document with mismatched ID", async () => { const mismatchedDocument = { ...mockDidDocument, id: "did:web:different.com" @@ -217,7 +217,7 @@ describe("web-did-resolver", () => { }) }) - it("should use custom fetch function when provided", async () => { + it("uses custom fetch function when provided", async () => { const customFetch = vi.fn().mockResolvedValueOnce({ ok: true, json: () => Promise.resolve(mockDidDocument) diff --git a/packages/jwt/src/create-jwt.test.ts b/packages/jwt/src/create-jwt.test.ts index 3b9314a..1dfb0f8 100644 --- a/packages/jwt/src/create-jwt.test.ts +++ b/packages/jwt/src/create-jwt.test.ts @@ -28,7 +28,7 @@ describe("createJWT", () => { } }) - it("should create a valid JWT when baseCreateJWT returns a valid JWT string", async () => { + it("creates a valid JWT when baseCreateJWT returns a valid JWT string", async () => { const expectedJwt = "eyJ0eXAiOiJKV1QiLCJhbGciOiJFUzI1NksifQ.eyJpc3MiOiJkaWQ6ZXhhbXBsZTo0NTYifQ.sig" @@ -42,7 +42,7 @@ describe("createJWT", () => { }) }) - it("should throw an error when baseCreateJWT returns an invalid JWT string", async () => { + it("throws an error when baseCreateJWT returns an invalid JWT string", async () => { const invalidJwt = "not-a-valid-jwt" vi.mocked(baseCreateJWT).mockResolvedValueOnce(invalidJwt) diff --git a/packages/jwt/src/jwt-string.test.ts b/packages/jwt/src/jwt-string.test.ts index a9c8f1c..a5609f1 100644 --- a/packages/jwt/src/jwt-string.test.ts +++ b/packages/jwt/src/jwt-string.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it } from "vitest" import { isJwtString } from "./jwt-string" describe("isJwtString", () => { - it("should return true for a valid JWT string", () => { + it("returns true for a valid JWT string", () => { expect( isJwtString( "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" @@ -10,7 +10,7 @@ describe("isJwtString", () => { ).toBe(true) }) - it("should return false for an invalid JWT string", () => { + it("returns false for an invalid JWT string", () => { expect(isJwtString("invalid")).toBe(false) }) }) diff --git a/packages/keys/src/encoding/multibase.test.ts b/packages/keys/src/encoding/multibase.test.ts index fe4deb7..199a990 100644 --- a/packages/keys/src/encoding/multibase.test.ts +++ b/packages/keys/src/encoding/multibase.test.ts @@ -17,13 +17,13 @@ describe("multibase", () => { } as const describe("bytesToMultibase", () => { - it("should encode bytes to base58btc by default", () => { + it("encodes bytes to base58btc by default", () => { const result = bytesToMultibase(testBytes) expect(result).toBe(testMultibases.base58btc) }) it.each(Object.entries(testMultibases))( - "should encode bytes to %s", + "encodes bytes to %s", (encoding, expected) => { const result = bytesToMultibase( testBytes, @@ -36,77 +36,77 @@ describe("multibase", () => { describe("multibaseToBytes", () => { it.each(Object.entries(testMultibases))( - "should decode %s multibase string to bytes", + "decodes %s multibase string to bytes", (encoding, multibase) => { const result = multibaseToBytes(multibase) expect(result).toEqual(testBytes) } ) - it("should throw on empty string", () => { + it("throws on empty string", () => { expect(() => multibaseToBytes("")).toThrow("Empty multibase string") }) - it("should throw on invalid prefix", () => { + it("throws on invalid prefix", () => { expect(() => multibaseToBytes("xinvalid")).toThrow( "Unsupported multibase prefix" ) }) - it("should throw on invalid base58btc", () => { + it("throws on invalid base58btc", () => { expect(() => multibaseToBytes("zinvalid")).toThrow() }) }) describe("getMultibaseEncoding", () => { it.each(Object.entries(testMultibases))( - "should detect %s encoding", + "detects %s encoding", (encoding, multibase) => { const result = getMultibaseEncoding(multibase) expect(result).toBe(encoding) } ) - it("should return undefined for empty string", () => { + it("returns undefined for empty string", () => { expect(getMultibaseEncoding("")).toBeUndefined() }) - it("should return undefined for invalid prefix", () => { + it("returns undefined for invalid prefix", () => { expect(getMultibaseEncoding("xinvalid")).toBeUndefined() }) }) describe("isMultibase", () => { it.each(Object.entries(testMultibases))( - "should validate %s multibase string", + "validates %s multibase string", (encoding, multibase) => { expect(isMultibase(multibase)).toBe(true) } ) - it("should reject non-string values", () => { + it("rejects non-string values", () => { expect(isMultibase(null)).toBe(false) expect(isMultibase(undefined)).toBe(false) expect(isMultibase(123)).toBe(false) expect(isMultibase({})).toBe(false) }) - it("should reject empty string", () => { + it("rejects empty string", () => { expect(isMultibase("")).toBe(false) }) - it("should reject string with invalid prefix", () => { + it("rejects string with invalid prefix", () => { expect(isMultibase("xinvalid")).toBe(false) }) - it("should reject string with invalid encoding", () => { + it("rejects string with invalid encoding", () => { expect(isMultibase("zinvalid")).toBe(false) }) }) describe("roundtrip", () => { it.each(Object.entries(testMultibases))( - "should roundtrip through %s encoding", + "roundtrips through %s encoding", (encoding, multibase) => { const bytes = multibaseToBytes(multibase) const result = bytesToMultibase(bytes, encoding as MultibaseEncoding) diff --git a/packages/vc/src/create-credential.test.ts b/packages/vc/src/create-credential.test.ts index 25dfe51..b1f3dfc 100644 --- a/packages/vc/src/create-credential.test.ts +++ b/packages/vc/src/create-credential.test.ts @@ -11,7 +11,7 @@ describe("createCredential", () => { vi.setSystemTime(date) }) - it("should create a basic credential with required fields", () => { + it("creates a basic credential with required fields", () => { const credential = createCredential({ issuer: mockIssuer, subject: mockSubject @@ -26,7 +26,7 @@ describe("createCredential", () => { }) }) - it("should include optional attestation data", () => { + it("includes optional attestation data", () => { const credential = createCredential({ issuer: mockIssuer, subject: mockSubject, @@ -39,7 +39,7 @@ describe("createCredential", () => { }) }) - it("should handle custom credential types", () => { + it("handles custom credential types", () => { const customType = "CustomCredential" const credential = createCredential({ issuer: mockIssuer, @@ -50,7 +50,7 @@ describe("createCredential", () => { expect(credential.type).toEqual(["VerifiableCredential", customType]) }) - it("should handle multiple credential types", () => { + it("handles multiple credential types", () => { const types = ["CustomCredential1", "CustomCredential2"] const credential = createCredential({ issuer: mockIssuer, @@ -61,7 +61,7 @@ describe("createCredential", () => { expect(credential.type).toEqual(["VerifiableCredential", ...types]) }) - it("should use provided issuance date", () => { + it("uses provided issuance date", () => { const issuanceDate = new Date("2024-01-01") const credential = createCredential({ issuer: mockIssuer, @@ -72,7 +72,7 @@ describe("createCredential", () => { expect(credential.issuanceDate).toBe(issuanceDate.toISOString()) }) - it("should include custom ID when provided", () => { + it("includes custom ID when provided", () => { const customId = "urn:uuid:12345678-1234-5678-1234-567812345678" const credential = createCredential({ id: customId, diff --git a/packages/vc/src/create-presentation.test.ts b/packages/vc/src/create-presentation.test.ts index 3bc52c9..0553f8a 100644 --- a/packages/vc/src/create-presentation.test.ts +++ b/packages/vc/src/create-presentation.test.ts @@ -16,7 +16,7 @@ describe("createPresentation", () => { } } - it("should create a basic presentation with required fields", () => { + it("creates a basic presentation with required fields", () => { const presentation = createPresentation({ credentials: [mockCredential], holder: mockHolder @@ -30,7 +30,7 @@ describe("createPresentation", () => { }) }) - it("should handle multiple credentials", () => { + it("handles multiple credentials", () => { const secondCredential = { ...mockCredential, credentialSubject: { id: "did:example:subject2" } @@ -46,7 +46,7 @@ describe("createPresentation", () => { ]) }) - it("should handle custom presentation types", () => { + it("handles custom presentation types", () => { const customType = "CustomPresentation" const presentation = createPresentation({ credentials: [mockCredential], @@ -57,7 +57,7 @@ describe("createPresentation", () => { expect(presentation.type).toEqual(["VerifiablePresentation", customType]) }) - it("should handle multiple presentation types", () => { + it("handles multiple presentation types", () => { const types = ["CustomPresentation1", "CustomPresentation2"] const presentation = createPresentation({ credentials: [mockCredential], @@ -68,7 +68,7 @@ describe("createPresentation", () => { expect(presentation.type).toEqual(["VerifiablePresentation", ...types]) }) - it("should use provided issuance date", () => { + it("uses provided issuance date", () => { const issuanceDate = new Date("2024-01-01") const presentation = createPresentation({ credentials: [mockCredential], @@ -79,7 +79,7 @@ describe("createPresentation", () => { expect(presentation.issuanceDate).toBe(issuanceDate.toISOString()) }) - it("should use provided expiration date", () => { + it("uses provided expiration date", () => { const expirationDate = new Date("2024-12-31") const presentation = createPresentation({ credentials: [mockCredential], @@ -90,7 +90,7 @@ describe("createPresentation", () => { expect(presentation.expirationDate).toBe(expirationDate.toISOString()) }) - it("should include custom ID when provided", () => { + it("includes custom ID when provided", () => { const customId = "urn:uuid:12345678-1234-5678-1234-567812345678" const presentation = createPresentation({ id: customId, diff --git a/packages/vc/src/revocation/make-revocable.test.ts b/packages/vc/src/revocation/make-revocable.test.ts index 2e63ce3..4d2b5fe 100644 --- a/packages/vc/src/revocation/make-revocable.test.ts +++ b/packages/vc/src/revocation/make-revocable.test.ts @@ -15,7 +15,7 @@ describe("makeRevocable", () => { const mockStatusListUrl = "https://example.com/status/1" const mockStatusListIndex = 123 - it("should add revocation status to credential", () => { + it("adds revocation status to credential", () => { const revocableCredential = makeRevocable(mockCredential, { id: mockStatusListId, statusListIndex: mockStatusListIndex, diff --git a/packages/vc/src/verification/is-expired.test.ts b/packages/vc/src/verification/is-expired.test.ts index a7b02ee..267b7df 100644 --- a/packages/vc/src/verification/is-expired.test.ts +++ b/packages/vc/src/verification/is-expired.test.ts @@ -3,12 +3,12 @@ import { isExpired } from "./is-expired" import type { Verifiable, W3CCredential } from "../types" describe("isExpired", () => { - it("should return false when credential has no expiration date", () => { + it("returns false when credential has no expiration date", () => { const credential = {} as Verifiable expect(isExpired(credential)).toBe(false) }) - it("should return true when credential is expired", () => { + it("returns true when credential is expired", () => { const pastDate = new Date() pastDate.setFullYear(pastDate.getFullYear() - 1) @@ -19,7 +19,7 @@ describe("isExpired", () => { expect(isExpired(credential)).toBe(true) }) - it("should return false when credential is not expired", () => { + it("returns false when credential is not expired", () => { const futureDate = new Date() futureDate.setFullYear(futureDate.getFullYear() + 1) @@ -30,7 +30,7 @@ describe("isExpired", () => { expect(isExpired(credential)).toBe(false) }) - it("should handle expiration date exactly at current time", () => { + it("handles expiration date exactly at current time", () => { const now = new Date() const credential = { expirationDate: now.toISOString() @@ -41,7 +41,7 @@ describe("isExpired", () => { expect(isExpired(credential)).toBe(false) }) - it("should handle invalid date strings gracefully", () => { + it("handles invalid date strings gracefully", () => { const credential = { expirationDate: "invalid-date" } as Verifiable diff --git a/packages/vc/src/verification/is-revoked.test.ts b/packages/vc/src/verification/is-revoked.test.ts index 1455260..dd20151 100644 --- a/packages/vc/src/verification/is-revoked.test.ts +++ b/packages/vc/src/verification/is-revoked.test.ts @@ -5,7 +5,7 @@ import { createStatusListCredential } from "../revocation/status-list-credential import type { Verifiable, W3CCredential } from "../types" describe("isRevocable", () => { - it("should return false if no credential status is present", () => { + it("returns false if no credential status is present", () => { const credential = { credentialStatus: undefined } as Verifiable @@ -13,7 +13,7 @@ describe("isRevocable", () => { expect(isRevocable(credential)).toBe(false) }) - it("should return false if status list not present", () => { + it("returns false if status list not present", () => { const credential = { credentialStatus: { statusListIndex: "0" @@ -23,7 +23,7 @@ describe("isRevocable", () => { expect(isRevocable(credential)).toBe(false) }) - it("should return false if index is not present", () => { + it("returns false if index is not present", () => { const credential = { credentialStatus: { statusListCredential: "https://example.com/status-list/1" @@ -33,7 +33,7 @@ describe("isRevocable", () => { expect(isRevocable(credential)).toBe(false) }) - it("should return true for a revocable credential", () => { + it("returns true for a revocable credential", () => { const credential = { credentialStatus: { statusListIndex: "0", @@ -69,7 +69,7 @@ describe("isRevoked", () => { mockFetch.mockReset() }) - it("should return false for non-revocable credentials", async () => { + it("returns false for non-revocable credentials", async () => { const credential = { credentialStatus: undefined } as Verifiable @@ -81,7 +81,7 @@ describe("isRevoked", () => { expect(await isRevoked(credential)).toBe(false) }) - it("should return false when status list cannot be fetched", async () => { + it("returns false when status list cannot be fetched", async () => { const credential = { credentialStatus: { statusListIndex: "0", @@ -94,7 +94,7 @@ describe("isRevoked", () => { expect(await isRevoked(credential)).toBe(false) }) - it("should return false when bit at index is not set", async () => { + it("returns false when bit at index is not set", async () => { const credential = { credentialStatus: { statusListIndex: "5", @@ -109,7 +109,7 @@ describe("isRevoked", () => { expect(await isRevoked(credential)).toBe(false) }) - it("should return true when bit at index is set", async () => { + it("returns true when bit at index is set", async () => { const credential = { credentialStatus: { statusListIndex: "5", diff --git a/packages/vc/src/verification/verify-parsed-credential.test.ts b/packages/vc/src/verification/verify-parsed-credential.test.ts index 7d7afd2..d97c73a 100644 --- a/packages/vc/src/verification/verify-parsed-credential.test.ts +++ b/packages/vc/src/verification/verify-parsed-credential.test.ts @@ -83,7 +83,7 @@ describe("verifyParsedCredential", () => { vi.clearAllMocks() }) - it("should throw when no proof is present", async () => { + it("throws when no proof is present", async () => { const { vc: baseVc, issuerDid, resolver } = await setup() const vc = { @@ -99,7 +99,7 @@ describe("verifyParsedCredential", () => { ).rejects.toThrow(InvalidProofError) }) - it("should throw for an expired credential", async () => { + it("throws for an expired credential", async () => { const { vc, issuerDid, resolver } = await setup() vi.mocked(isExpired).mockReturnValue(true) @@ -112,7 +112,7 @@ describe("verifyParsedCredential", () => { ).rejects.toThrow(CredentialExpiredError) }) - it("should throw for a revoked credential", async () => { + it("throws for a revoked credential", async () => { const { vc, issuerDid, resolver } = await setup() vi.mocked(isRevoked).mockResolvedValue(true) @@ -125,7 +125,7 @@ describe("verifyParsedCredential", () => { ).rejects.toThrow(CredentialRevokedError) }) - it("should throw for non-trusted issuer", async () => { + it("throws for non-trusted issuer", async () => { const { vc, resolver } = await setup() await expect( @@ -136,7 +136,7 @@ describe("verifyParsedCredential", () => { ).rejects.toThrow(UntrustedIssuerError) }) - it("should throw for an invalid proof", async () => { + it("throws for an invalid proof", async () => { const { vc, issuerDid, resolver } = await setup() vi.mocked(verifyProof).mockRejectedValueOnce(new InvalidProofError()) @@ -171,7 +171,7 @@ describe("verifyParsedCredential", () => { ).rejects.toThrow("Invalid credential subject") }) - it("should throw if credential type does not match any verifiers", async () => { + it("throws if credential type does not match any verifiers", async () => { const { vc, issuerDid, resolver } = await setup() await expect( @@ -188,7 +188,7 @@ describe("verifyParsedCredential", () => { ).rejects.toThrow(UnsupportedCredentialTypeError) }) - it("should verify a valid credential with verifiers", async () => { + it("verifies a valid credential with verifiers", async () => { const { vc, issuerDid, resolver } = await setup() await expect( @@ -205,7 +205,7 @@ describe("verifyParsedCredential", () => { ).resolves.not.toThrow() }) - it("should verify a valid credential with no verifiers", async () => { + it("verifies a valid credential with no verifiers", async () => { const { vc, issuerDid, resolver } = await setup() await expect( diff --git a/packages/vc/src/verification/verify-proof.test.ts b/packages/vc/src/verification/verify-proof.test.ts index 8edb698..ace09d2 100644 --- a/packages/vc/src/verification/verify-proof.test.ts +++ b/packages/vc/src/verification/verify-proof.test.ts @@ -22,7 +22,7 @@ describe("verifyProof", () => { resolve: vi.fn() } as unknown as Resolvable - it("should throw for invalid proof payload", async () => { + it("throws for invalid proof payload", async () => { const invalidProof = { type: "JwtProof2020" // Missing jwt field @@ -33,7 +33,7 @@ describe("verifyProof", () => { ) }) - it("should throw for unsupported proof type", async () => { + it("throws for unsupported proof type", async () => { const unsupportedProof = { type: "UnsupportedProofType", jwt: "some.jwt.token" @@ -44,7 +44,7 @@ describe("verifyProof", () => { ) }) - it("should handle verification errors from verifyCredentialJwt", async () => { + it("handles verification errors from verifyCredentialJwt", async () => { const proofWithInvalidJwt = { type: "JwtProof2020", jwt: "invalid.jwt.token" @@ -56,7 +56,7 @@ describe("verifyProof", () => { ).rejects.toThrow(InvalidProofError) }) - it("should successfully verify a valid JwtProof2020", async () => { + it("successfully verifies a valid JwtProof2020", async () => { const validProof = { type: "JwtProof2020", jwt: "valid.jwt.token" From 823a43b9344d37890b648f73875b04cb19e8bf19 Mon Sep 17 00:00:00 2001 From: Matt Venables Date: Wed, 29 Oct 2025 05:46:03 -0400 Subject: [PATCH 4/6] Add @prettier/plugin-oxc, import sorting --- demos/e2e/src/agent.ts | 24 +- demos/e2e/src/credential-issuer.ts | 14 +- demos/e2e/src/credential-verifier.ts | 20 +- demos/e2e/src/index.ts | 5 +- demos/e2e/src/receipt-issuer.ts | 16 +- demos/e2e/src/receipt-verifier.ts | 14 +- demos/e2e/src/user.ts | 16 +- demos/e2e/src/verification.ts | 7 +- demos/identity-a2a/src/agent.ts | 32 +- demos/identity-a2a/src/bank-client-agent.ts | 14 +- demos/identity-a2a/src/bank-teller-agent.ts | 14 +- demos/identity-a2a/src/issuer.ts | 4 +- demos/identity-a2a/src/utils/server-utils.ts | 3 +- demos/identity/src/agent.ts | 20 +- demos/identity/src/client-agent.ts | 3 +- demos/identity/src/credential-issuer.ts | 18 +- demos/identity/src/credential-verifier.ts | 16 +- demos/identity/src/haiku-agent.ts | 3 +- demos/identity/src/identity-tools.ts | 8 +- demos/identity/src/index.ts | 11 +- demos/identity/src/owner.ts | 12 +- demos/payments/src/index.ts | 17 +- demos/payments/src/payment-service.ts | 13 +- demos/payments/src/receipt-service.ts | 9 +- demos/payments/src/server.ts | 9 +- demos/payments/src/utils/ensure-balances.ts | 3 +- .../payments/src/utils/ensure-private-keys.ts | 2 +- demos/payments/src/utils/keypair-info.ts | 12 +- demos/payments/src/utils/usdc-contract.ts | 10 +- demos/skyfire-kya/src/index.ts | 8 +- demos/skyfire-kya/src/kya-token.ts | 8 +- demos/skyfire-kya/src/skyfire-kya-ack-id.ts | 18 +- docs/README.md | 1 - examples/issuer/bin/start-server.ts | 4 +- examples/issuer/src/db/queries/credentials.ts | 12 +- .../issuer/src/db/queries/status-lists.ts | 3 +- examples/issuer/src/db/schema.ts | 2 +- .../db/utils/get-status-list-position.test.ts | 2 +- examples/issuer/src/index.ts | 3 +- .../build-signed-credential.test.ts | 6 +- .../credentials/build-signed-credential.ts | 8 +- examples/issuer/src/middleware/database.ts | 3 +- .../issuer/src/middleware/did-resolver.ts | 3 +- examples/issuer/src/middleware/issuer.ts | 4 +- .../issuer/src/routes/credentials.test.ts | 14 +- examples/issuer/src/routes/credentials.ts | 29 +- examples/issuer/src/routes/healthcheck.ts | 9 +- examples/issuer/src/routes/receipts.test.ts | 18 +- examples/issuer/src/routes/receipts.ts | 34 +- examples/issuer/src/routes/status.ts | 27 +- examples/issuer/src/routes/well-known.ts | 3 +- .../src/test-helpers/did-web-with-signer.ts | 6 +- examples/local-did-host/bin/serve.ts | 2 +- examples/local-did-host/src/lib/identity.ts | 16 +- .../src/middleware/identities.ts | 5 +- examples/verifier/bin/serve.ts | 2 +- examples/verifier/src/index.ts | 3 +- examples/verifier/src/middleware/verifier.ts | 9 +- examples/verifier/src/routes/healthcheck.ts | 9 +- examples/verifier/src/routes/verify.ts | 9 +- examples/verifier/src/routes/well-known.ts | 3 +- package.json | 7 +- packages/ack-id/README.md | 11 +- packages/ack-id/src/a2a/sign-message.ts | 21 +- packages/ack-id/src/a2a/verify.ts | 12 +- .../src/controller-claim-verifier.test.ts | 4 +- .../ack-id/src/controller-claim-verifier.ts | 16 +- packages/ack-id/src/controller-credential.ts | 3 +- packages/ack-pay/README.md | 7 +- .../ack-pay/src/create-payment-receipt.ts | 3 +- .../src/create-payment-request-token.test.ts | 13 +- .../src/create-payment-request-token.ts | 10 +- .../src/create-signed-payment-request.test.ts | 13 +- .../src/create-signed-payment-request.ts | 10 +- packages/ack-pay/src/payment-request.test.ts | 3 +- packages/ack-pay/src/payment-request.ts | 6 +- .../src/receipt-claim-verifier.test.ts | 6 +- .../ack-pay/src/receipt-claim-verifier.ts | 10 +- .../src/verify-payment-receipt.test.ts | 19 +- .../ack-pay/src/verify-payment-receipt.ts | 12 +- .../src/verify-payment-request-token.test.ts | 14 +- .../src/verify-payment-request-token.ts | 7 +- packages/agentcommercekit/README.md | 8 +- packages/caip/README.md | 13 +- packages/caip/src/caips/caip-10.ts | 7 +- packages/caip/src/caips/caip-19.ts | 3 +- packages/caip/src/schemas/schemas.test.ts | 10 +- packages/caip/src/schemas/valibot.ts | 14 +- packages/caip/src/schemas/zod/v3.ts | 14 +- packages/caip/src/schemas/zod/v4.ts | 14 +- packages/did/README.md | 16 +- packages/did/src/create-did-document.test.ts | 5 +- packages/did/src/create-did-document.ts | 20 +- .../did/src/did-resolvers/did-resolver.ts | 14 +- .../did/src/did-resolvers/get-did-resolver.ts | 8 +- .../did-resolvers/pkh-did-resolver.test.ts | 2 +- .../did/src/did-resolvers/pkh-did-resolver.ts | 2 +- .../did-resolvers/web-did-resolver.test.ts | 2 +- .../did/src/did-resolvers/web-did-resolver.ts | 9 +- packages/did/src/methods/did-key.test.ts | 4 +- packages/did/src/methods/did-key.ts | 6 +- packages/did/src/methods/did-pkh.ts | 14 +- packages/did/src/methods/did-web.ts | 8 +- packages/did/src/resolve-did.test.ts | 2 +- packages/did/src/resolve-did.ts | 2 +- packages/did/src/schemas/valibot.ts | 3 +- packages/did/src/schemas/zod/v3.ts | 3 +- packages/did/src/schemas/zod/v4.ts | 3 +- packages/jwt/README.md | 7 +- packages/jwt/src/create-jwt.test.ts | 7 +- packages/jwt/src/create-jwt.ts | 11 +- packages/jwt/src/jwt-algorithm.ts | 3 +- packages/jwt/src/schemas/valibot.ts | 2 +- packages/jwt/src/schemas/zod/v3.ts | 2 +- packages/jwt/src/schemas/zod/v4.ts | 2 +- packages/jwt/src/signer.ts | 3 +- packages/jwt/src/verify.test.ts | 3 +- packages/jwt/src/verify.ts | 3 +- packages/keys/README.md | 6 +- packages/keys/src/curves/ed25519.test.ts | 6 +- packages/keys/src/curves/secp256k1.test.ts | 2 +- packages/keys/src/curves/secp256r1.test.ts | 2 +- packages/keys/src/encoding/base58.test.ts | 2 +- packages/keys/src/encoding/jwk.test.ts | 5 +- packages/keys/src/encoding/jwk.ts | 4 +- packages/keys/src/encoding/multibase.test.ts | 4 +- packages/keys/src/keypair.ts | 4 +- packages/keys/src/public-key.ts | 3 +- packages/vc/README.md | 11 +- packages/vc/src/create-presentation.ts | 2 +- packages/vc/src/is-credential.ts | 2 +- .../revocation/is-status-list-credential.ts | 2 +- .../vc/src/revocation/make-revocable.test.ts | 2 +- packages/vc/src/revocation/types.ts | 2 +- .../vc/src/signing/sign-credential.test.ts | 2 +- packages/vc/src/signing/sign-credential.ts | 19 +- .../vc/src/signing/sign-presentation.test.ts | 2 +- packages/vc/src/signing/sign-presentation.ts | 5 +- .../vc/src/verification/is-expired.test.ts | 2 +- .../vc/src/verification/is-revoked.test.ts | 2 +- .../verification/parse-jwt-credential.test.ts | 2 +- .../src/verification/parse-jwt-credential.ts | 2 +- packages/vc/src/verification/types.ts | 2 +- .../verify-parsed-credential.test.ts | 10 +- .../verification/verify-parsed-credential.ts | 6 +- .../vc/src/verification/verify-proof.test.ts | 5 +- packages/vc/src/verification/verify-proof.ts | 4 +- pnpm-lock.yaml | 306 ++++++++++++++++-- prettier.config.js | 23 ++ prettier.config.mjs | 13 - tools/api-utils/src/api-response.ts | 2 +- .../api-utils/src/middleware/error-handler.ts | 2 +- .../middleware/signed-payload-validator.ts | 8 +- tools/api-utils/src/validate-payload.test.ts | 17 +- tools/api-utils/src/validate-payload.ts | 9 +- tools/eslint-config/base.js | 45 +-- turbo.jsonc => turbo.json | 10 +- 157 files changed, 946 insertions(+), 699 deletions(-) create mode 100644 prettier.config.js delete mode 100644 prettier.config.mjs rename turbo.jsonc => turbo.json (93%) diff --git a/demos/e2e/src/agent.ts b/demos/e2e/src/agent.ts index 0757bb0..bafafac 100644 --- a/demos/e2e/src/agent.ts +++ b/demos/e2e/src/agent.ts @@ -5,23 +5,21 @@ import { createJwtSigner, createSignedPaymentRequest, curveToJwtAlgorithm, - generateKeypair + generateKeypair, + type Caip2ChainId, + type DidDocument, + type DidResolver, + type DidUri, + type JwtSigner, + type JwtString, + type Keypair, + type PaymentRequest } from "agentcommercekit" +import type { CredentialVerifier } from "./credential-verifier" import { PaymentRequiredError } from "./payment-required-error" +import type { ReceiptVerifier } from "./receipt-verifier" import { publicKeyToAddress } from "./utils/evm-address" import { verifyAgentIdentityWithCredential } from "./verification" -import type { CredentialVerifier } from "./credential-verifier" -import type { ReceiptVerifier } from "./receipt-verifier" -import type { - Caip2ChainId, - DidDocument, - DidResolver, - DidUri, - JwtSigner, - JwtString, - Keypair, - PaymentRequest -} from "agentcommercekit" interface AgentConstructorParams { did: DidUri diff --git a/demos/e2e/src/credential-issuer.ts b/demos/e2e/src/credential-issuer.ts index 6434f36..ea4253c 100644 --- a/demos/e2e/src/credential-issuer.ts +++ b/demos/e2e/src/credential-issuer.ts @@ -4,17 +4,15 @@ import { createJwtSigner, generateKeypair, signCredential, - verifyJwt + verifyJwt, + type DidDocument, + type DidResolver, + type DidUri, + type JwtString, + type Keypair } from "agentcommercekit" import { didUriSchema } from "agentcommercekit/schemas/valibot" import * as v from "valibot" -import type { - DidDocument, - DidResolver, - DidUri, - JwtString, - Keypair -} from "agentcommercekit" const credentialPayloadSchema = v.object({ controller: didUriSchema, diff --git a/demos/e2e/src/credential-verifier.ts b/demos/e2e/src/credential-verifier.ts index 70f29c9..fc383a0 100644 --- a/demos/e2e/src/credential-verifier.ts +++ b/demos/e2e/src/credential-verifier.ts @@ -1,20 +1,18 @@ import { - InvalidCredentialSubjectError, createDidWebDocumentFromKeypair, generateKeypair, getControllerClaimVerifier, + InvalidCredentialSubjectError, isControllerCredential, parseJwtCredential, - verifyParsedCredential -} from "agentcommercekit" -import type { - ControllerCredential, - DidDocument, - DidResolver, - DidUri, - JwtString, - Keypair, - Verifiable + verifyParsedCredential, + type ControllerCredential, + type DidDocument, + type DidResolver, + type DidUri, + type JwtString, + type Keypair, + type Verifiable } from "agentcommercekit" export class CredentialVerifier { diff --git a/demos/e2e/src/index.ts b/demos/e2e/src/index.ts index 1eccab7..ad1edf9 100644 --- a/demos/e2e/src/index.ts +++ b/demos/e2e/src/index.ts @@ -11,7 +11,9 @@ import { caip2ChainIds, createJwt, getDidResolver, - parseJwtCredential + parseJwtCredential, + type Keypair, + type PaymentRequest } from "agentcommercekit" import { Agent } from "./agent" import { CredentialIssuer } from "./credential-issuer" @@ -21,7 +23,6 @@ import { ReceiptIssuer } from "./receipt-issuer" import { ReceiptVerifier } from "./receipt-verifier" import { User } from "./user" import { publicKeyToAddress } from "./utils/evm-address" -import type { Keypair, PaymentRequest } from "agentcommercekit" /** * The chain id to use for payments in this example. diff --git a/demos/e2e/src/receipt-issuer.ts b/demos/e2e/src/receipt-issuer.ts index 91adc4c..3386eb1 100644 --- a/demos/e2e/src/receipt-issuer.ts +++ b/demos/e2e/src/receipt-issuer.ts @@ -4,15 +4,13 @@ import { createPaymentReceipt, generateKeypair, signCredential, - verifyPaymentRequestToken -} from "agentcommercekit" -import type { - DidDocument, - DidResolver, - DidUri, - JwtString, - Keypair, - PaymentRequest + verifyPaymentRequestToken, + type DidDocument, + type DidResolver, + type DidUri, + type JwtString, + type Keypair, + type PaymentRequest } from "agentcommercekit" export class ReceiptIssuer { diff --git a/demos/e2e/src/receipt-verifier.ts b/demos/e2e/src/receipt-verifier.ts index f50b796..4743a78 100644 --- a/demos/e2e/src/receipt-verifier.ts +++ b/demos/e2e/src/receipt-verifier.ts @@ -1,14 +1,12 @@ import { createDidWebDocumentFromKeypair, generateKeypair, - verifyPaymentReceipt -} from "agentcommercekit" -import type { - DidDocument, - DidResolver, - DidUri, - JwtString, - Keypair + verifyPaymentReceipt, + type DidDocument, + type DidResolver, + type DidUri, + type JwtString, + type Keypair } from "agentcommercekit" export class ReceiptVerifier { diff --git a/demos/e2e/src/user.ts b/demos/e2e/src/user.ts index 8b911cc..a9ff60c 100644 --- a/demos/e2e/src/user.ts +++ b/demos/e2e/src/user.ts @@ -1,17 +1,15 @@ import { createDidPkhDocument, createJwtSigner, - generateKeypair + generateKeypair, + type Caip2ChainId, + type DidDocument, + type DidResolver, + type DidUri, + type JwtSigner, + type Keypair } from "agentcommercekit" import { publicKeyToAddress } from "./utils/evm-address" -import type { - Caip2ChainId, - DidDocument, - DidResolver, - DidUri, - JwtSigner, - Keypair -} from "agentcommercekit" interface ConstructorParams { wallet: Keypair diff --git a/demos/e2e/src/verification.ts b/demos/e2e/src/verification.ts index 930b151..8391384 100644 --- a/demos/e2e/src/verification.ts +++ b/demos/e2e/src/verification.ts @@ -5,9 +5,12 @@ import { logJson, successMessage } from "@repo/cli-tools" -import { resolveDidWithController } from "agentcommercekit" +import { + resolveDidWithController, + type DidResolver, + type JwtString +} from "agentcommercekit" import type { CredentialVerifier } from "./credential-verifier" -import type { DidResolver, JwtString } from "agentcommercekit" /** * Verify another agent's identity using their DID and ownership credential. diff --git a/demos/identity-a2a/src/agent.ts b/demos/identity-a2a/src/agent.ts index 2860892..a43b002 100644 --- a/demos/identity-a2a/src/agent.ts +++ b/demos/identity-a2a/src/agent.ts @@ -9,32 +9,30 @@ * - Authentication uses DID-based JWT signing and verification */ +import type { + AgentCard, + AgentExecutor, + ExecutionEventBus, + Message, + RequestContext +} from "@a2a-js/sdk" import { colors } from "@repo/cli-tools" import { createDidDocumentFromKeypair, createDidWebUri, createJwtSigner, - generateKeypair + generateKeypair, + type DidDocument, + type DidUri, + type JwtSigner, + type KeyCurve, + type Keypair, + type Verifiable, + type W3CCredential } from "agentcommercekit" import { createAgentCardServiceEndpoint } from "agentcommercekit/a2a" import { v4 } from "uuid" import { issueCredential } from "./issuer" -import type { - AgentCard, - AgentExecutor, - ExecutionEventBus, - Message, - RequestContext -} from "@a2a-js/sdk" -import type { - DidDocument, - DidUri, - JwtSigner, - KeyCurve, - Keypair, - Verifiable, - W3CCredential -} from "agentcommercekit" type AgentConfig = { agentCard: AgentCard diff --git a/demos/identity-a2a/src/bank-client-agent.ts b/demos/identity-a2a/src/bank-client-agent.ts index 52b7f28..e999b21 100644 --- a/demos/identity-a2a/src/bank-client-agent.ts +++ b/demos/identity-a2a/src/bank-client-agent.ts @@ -1,12 +1,19 @@ /* eslint-disable @typescript-eslint/no-unnecessary-condition */ -import { A2AClient } from "@a2a-js/sdk" +import type { Server } from "node:http" +import { + A2AClient, + type AgentCard, + type Message, + type TextPart +} from "@a2a-js/sdk" import { colors, createLogger, waitForEnter } from "@repo/cli-tools" import { curveToJwtAlgorithm, getDidResolver, resolveDid, - verifyParsedCredential + verifyParsedCredential, + type DidUri } from "agentcommercekit" import { createA2AHandshakeMessage, @@ -25,9 +32,6 @@ import { isRpcErrorResponse } from "./utils/response-parsers" import { startAgentServer } from "./utils/server-utils" -import type { AgentCard, Message, TextPart } from "@a2a-js/sdk" -import type { DidUri } from "agentcommercekit" -import type { Server } from "node:http" const logger = createLogger("Bank Customer", colors.green) diff --git a/demos/identity-a2a/src/bank-teller-agent.ts b/demos/identity-a2a/src/bank-teller-agent.ts index 5c36f19..7c95709 100644 --- a/demos/identity-a2a/src/bank-teller-agent.ts +++ b/demos/identity-a2a/src/bank-teller-agent.ts @@ -1,4 +1,10 @@ -import { A2AError } from "@a2a-js/sdk" +import { + A2AError, + type AgentCard, + type ExecutionEventBus, + type Message, + type RequestContext +} from "@a2a-js/sdk" import { colors, createLogger, waitForEnter } from "@repo/cli-tools" import { curveToJwtAlgorithm, @@ -14,12 +20,6 @@ import { v4 } from "uuid" import { Agent } from "./agent" import { didResolverWithIssuer, issuerDid } from "./issuer" import { startAgentServer } from "./utils/server-utils" -import type { - AgentCard, - ExecutionEventBus, - Message, - RequestContext -} from "@a2a-js/sdk" const logger = createLogger("Bank Teller", colors.blue) diff --git a/demos/identity-a2a/src/issuer.ts b/demos/identity-a2a/src/issuer.ts index 5c403a8..23ba83f 100644 --- a/demos/identity-a2a/src/issuer.ts +++ b/demos/identity-a2a/src/issuer.ts @@ -6,9 +6,9 @@ import { generateKeypair, getDidResolver, parseJwtCredential, - signCredential + signCredential, + type DidUri } from "agentcommercekit" -import type { DidUri } from "agentcommercekit" const issuerKeypair = await generateKeypair("Ed25519") diff --git a/demos/identity-a2a/src/utils/server-utils.ts b/demos/identity-a2a/src/utils/server-utils.ts index 6359db4..d0a7691 100644 --- a/demos/identity-a2a/src/utils/server-utils.ts +++ b/demos/identity-a2a/src/utils/server-utils.ts @@ -3,10 +3,9 @@ import { DefaultRequestHandler, InMemoryTaskStore } from "@a2a-js/sdk" -import { colors, createLogger } from "@repo/cli-tools" +import { colors, createLogger, type Logger } from "@repo/cli-tools" import express from "express" import type { Agent } from "../agent" -import type { Logger } from "@repo/cli-tools" type Options = { logger?: Logger diff --git a/demos/identity/src/agent.ts b/demos/identity/src/agent.ts index 799595b..63fcdac 100644 --- a/demos/identity/src/agent.ts +++ b/demos/identity/src/agent.ts @@ -5,19 +5,17 @@ import { createJwt, createJwtSigner, curveToJwtAlgorithm, - generateKeypair -} from "agentcommercekit" -import type { CredentialVerifier } from "./credential-verifier" -import type { - DidDocument, - DidResolver, - DidUri, - JwtSigner, - Keypair, - Verifiable, - W3CCredential + generateKeypair, + type DidDocument, + type DidResolver, + type DidUri, + type JwtSigner, + type Keypair, + type Verifiable, + type W3CCredential } from "agentcommercekit" import type { CoreMessage } from "ai" +import type { CredentialVerifier } from "./credential-verifier" interface AgentConstructorParams { ownerDid: DidUri diff --git a/demos/identity/src/client-agent.ts b/demos/identity/src/client-agent.ts index 90e9cb0..e247825 100644 --- a/demos/identity/src/client-agent.ts +++ b/demos/identity/src/client-agent.ts @@ -1,10 +1,9 @@ import { valibotSchema } from "@ai-sdk/valibot" import { colors } from "@repo/cli-tools" -import { generateText, tool } from "ai" +import { generateText, tool, type CoreMessage } from "ai" import * as v from "valibot" import { Agent } from "./agent" import { getModel } from "./get-model" -import type { CoreMessage } from "ai" const agentResponseSchema = v.object({ text: v.string() diff --git a/demos/identity/src/credential-issuer.ts b/demos/identity/src/credential-issuer.ts index 39f497a..ac98954 100644 --- a/demos/identity/src/credential-issuer.ts +++ b/demos/identity/src/credential-issuer.ts @@ -5,19 +5,17 @@ import { generateKeypair, parseJwtCredential, signCredential, - verifyJwt + verifyJwt, + type DidDocument, + type DidResolver, + type DidUri, + type JwtString, + type Keypair, + type Verifiable, + type W3CCredential } from "agentcommercekit" import { didUriSchema } from "agentcommercekit/schemas/valibot" import * as v from "valibot" -import type { - DidDocument, - DidResolver, - DidUri, - JwtString, - Keypair, - Verifiable, - W3CCredential -} from "agentcommercekit" interface CredentialIssuerParams { baseUrl: string diff --git a/demos/identity/src/credential-verifier.ts b/demos/identity/src/credential-verifier.ts index ef54b97..6e79082 100644 --- a/demos/identity/src/credential-verifier.ts +++ b/demos/identity/src/credential-verifier.ts @@ -3,15 +3,13 @@ import { createJwtSigner, generateKeypair, getControllerClaimVerifier, - verifyParsedCredential -} from "agentcommercekit" -import type { - DidDocument, - DidResolver, - DidUri, - JwtSigner, - Keypair, - W3CCredential + verifyParsedCredential, + type DidDocument, + type DidResolver, + type DidUri, + type JwtSigner, + type Keypair, + type W3CCredential } from "agentcommercekit" interface CredentialVerifierParams { diff --git a/demos/identity/src/haiku-agent.ts b/demos/identity/src/haiku-agent.ts index 76b79cb..72c0596 100644 --- a/demos/identity/src/haiku-agent.ts +++ b/demos/identity/src/haiku-agent.ts @@ -1,8 +1,7 @@ -import { generateText } from "ai" +import { generateText, type CoreMessage } from "ai" import { Agent } from "./agent" import { getModel } from "./get-model" import { getIdentityTools } from "./identity-tools" -import type { CoreMessage } from "ai" export class HaikuAgent extends Agent { protected async _run(messages: CoreMessage[]) { diff --git a/demos/identity/src/identity-tools.ts b/demos/identity/src/identity-tools.ts index 48c42cd..8f0f29f 100644 --- a/demos/identity/src/identity-tools.ts +++ b/demos/identity/src/identity-tools.ts @@ -1,11 +1,15 @@ import { valibotSchema } from "@ai-sdk/valibot" import { colors } from "@repo/cli-tools" -import { resolveDid, verifyJwt } from "agentcommercekit" +import { + resolveDid, + verifyJwt, + type DidResolver, + type DidUri +} from "agentcommercekit" import { credentialSchema } from "agentcommercekit/schemas/valibot" import { tool } from "ai" import * as v from "valibot" import type { CredentialVerifier } from "./credential-verifier" -import type { DidResolver, DidUri } from "agentcommercekit" const challengeResponseSchema = v.object({ signedChallenge: v.string() diff --git a/demos/identity/src/index.ts b/demos/identity/src/index.ts index 2582e99..de365fc 100644 --- a/demos/identity/src/index.ts +++ b/demos/identity/src/index.ts @@ -14,16 +14,19 @@ import { updateEnvFile, waitForEnter } from "@repo/cli-tools" -import { createJwt, getDidResolver, parseJwtCredential } from "agentcommercekit" +import { + createJwt, + getDidResolver, + parseJwtCredential, + type DidUri +} from "agentcommercekit" import { ClientAgent } from "./client-agent" import { CredentialIssuer } from "./credential-issuer" import { CredentialVerifier } from "./credential-verifier" import { providerKeySet } from "./get-model" import { HaikuAgent } from "./haiku-agent" -import { createOwner } from "./owner" +import { createOwner, type Owner } from "./owner" import { serveAgent } from "./serve-agent" -import type { Owner } from "./owner" -import type { DidUri } from "agentcommercekit" const currentDir = dirname(fileURLToPath(import.meta.url)) diff --git a/demos/identity/src/owner.ts b/demos/identity/src/owner.ts index 2391a29..fe2f616 100644 --- a/demos/identity/src/owner.ts +++ b/demos/identity/src/owner.ts @@ -3,13 +3,11 @@ import { createDidKeyUri, createJwtSigner, curveToJwtAlgorithm, - generateKeypair -} from "agentcommercekit" -import type { - DidDocument, - DidUri, - JwtAlgorithm, - JwtSigner + generateKeypair, + type DidDocument, + type DidUri, + type JwtAlgorithm, + type JwtSigner } from "agentcommercekit" export interface Owner { diff --git a/demos/payments/src/index.ts b/demos/payments/src/index.ts index 0e82673..36b7b5c 100644 --- a/demos/payments/src/index.ts +++ b/demos/payments/src/index.ts @@ -18,7 +18,11 @@ import { getDidResolver, isDidPkhUri, isJwtString, - parseJwtCredential + parseJwtCredential, + type JwtString, + type PaymentReceiptCredential, + type PaymentRequest, + type Verifiable } from "agentcommercekit" import { jwtStringSchema, @@ -27,23 +31,16 @@ import { import * as v from "valibot" import { isAddress } from "viem" import { - SERVER_URL, chain, chainId, publicClient, + SERVER_URL, usdcAddress } from "./constants" import { ensureNonZeroBalances } from "./utils/ensure-balances" import { ensurePrivateKey } from "./utils/ensure-private-keys" -import { getKeypairInfo } from "./utils/keypair-info" +import { getKeypairInfo, type KeypairInfo } from "./utils/keypair-info" import { transferUsdc } from "./utils/usdc-contract" -import type { KeypairInfo } from "./utils/keypair-info" -import type { - JwtString, - PaymentReceiptCredential, - PaymentRequest, - Verifiable -} from "agentcommercekit" import "./server" import "./receipt-service" import "./payment-service" diff --git a/demos/payments/src/payment-service.ts b/demos/payments/src/payment-service.ts index cf93f2d..ce751e0 100644 --- a/demos/payments/src/payment-service.ts +++ b/demos/payments/src/payment-service.ts @@ -4,21 +4,18 @@ import { colors, errorMessage, log } from "@repo/cli-tools" import { createJwt, getDidResolver, - verifyPaymentRequestToken + verifyPaymentRequestToken, + type JwtString, + type PaymentReceiptCredential, + type Verifiable } from "agentcommercekit" import { jwtStringSchema } from "agentcommercekit/schemas/valibot" -import { Hono } from "hono" +import { Hono, type Env, type TypedResponse } from "hono" import { env } from "hono/adapter" import { HTTPException } from "hono/http-exception" import * as v from "valibot" import { PAYMENT_SERVICE_URL } from "./constants" import { getKeypairInfo } from "./utils/keypair-info" -import type { - JwtString, - PaymentReceiptCredential, - Verifiable -} from "agentcommercekit" -import type { Env, TypedResponse } from "hono" const app = new Hono() app.use(logger()) diff --git a/demos/payments/src/receipt-service.ts b/demos/payments/src/receipt-service.ts index 62e5700..a7249dc 100644 --- a/demos/payments/src/receipt-service.ts +++ b/demos/payments/src/receipt-service.ts @@ -16,8 +16,11 @@ import { verifyJwt, verifyPaymentRequestToken } from "agentcommercekit" -import { caip2ChainIdSchema } from "agentcommercekit/schemas/valibot" -import { Hono } from "hono" +import { + caip2ChainIdSchema, + type paymentOptionSchema +} from "agentcommercekit/schemas/valibot" +import { Hono, type Env } from "hono" import { env } from "hono/adapter" import { HTTPException } from "hono/http-exception" import * as v from "valibot" @@ -26,8 +29,6 @@ import { parseEventLogs } from "viem/utils" import { chainId, publicClient, usdcAddress } from "./constants" import { asAddress } from "./utils/as-address" import { getKeypairInfo } from "./utils/keypair-info" -import type { paymentOptionSchema } from "agentcommercekit/schemas/valibot" -import type { Env } from "hono" const app = new Hono() app.use(logger()) diff --git a/demos/payments/src/server.ts b/demos/payments/src/server.ts index 4ab38d4..de3dab8 100644 --- a/demos/payments/src/server.ts +++ b/demos/payments/src/server.ts @@ -5,15 +5,14 @@ import { createSignedPaymentRequest, curveToJwtAlgorithm, getDidResolver, - verifyPaymentReceipt + verifyPaymentReceipt, + type PaymentRequestInit } from "agentcommercekit" -import { Hono } from "hono" +import { Hono, type Env, type TypedResponse } from "hono" import { env } from "hono/adapter" import { HTTPException } from "hono/http-exception" -import { PAYMENT_SERVICE_URL, RECEIPT_SERVICE_URL, chainId } from "./constants" +import { chainId, PAYMENT_SERVICE_URL, RECEIPT_SERVICE_URL } from "./constants" import { getKeypairInfo } from "./utils/keypair-info" -import type { PaymentRequestInit } from "agentcommercekit" -import type { Env, TypedResponse } from "hono" const app = new Hono() app.use(logger()) diff --git a/demos/payments/src/utils/ensure-balances.ts b/demos/payments/src/utils/ensure-balances.ts index b96f3c6..5676673 100644 --- a/demos/payments/src/utils/ensure-balances.ts +++ b/demos/payments/src/utils/ensure-balances.ts @@ -1,7 +1,6 @@ import { waitForEnter } from "@repo/cli-tools" -import { createPublicClient, erc20Abi, http } from "viem" +import { createPublicClient, erc20Abi, http, type Chain } from "viem" import { formatUnits } from "viem/utils" -import type { Chain } from "viem" /** * Ensure the client wallet has a non-zero balance of USDC and ETH diff --git a/demos/payments/src/utils/ensure-private-keys.ts b/demos/payments/src/utils/ensure-private-keys.ts index 23f8e21..a3a72ca 100644 --- a/demos/payments/src/utils/ensure-private-keys.ts +++ b/demos/payments/src/utils/ensure-private-keys.ts @@ -1,5 +1,5 @@ -import { colors, log, updateEnvFile } from "@repo/cli-tools" import { envFilePath } from "@/constants" +import { colors, log, updateEnvFile } from "@repo/cli-tools" import { generatePrivateKeyHex } from "./keypair-info" export async function ensurePrivateKey(name: string) { diff --git a/demos/payments/src/utils/keypair-info.ts b/demos/payments/src/utils/keypair-info.ts index d49571d..310f0bd 100644 --- a/demos/payments/src/utils/keypair-info.ts +++ b/demos/payments/src/utils/keypair-info.ts @@ -1,16 +1,18 @@ +import { chainId } from "@/constants" import { bytesToHexString, createDidPkhUri, createJwtSigner, generateKeypair, generatePrivateKeyBytes, - hexStringToBytes + hexStringToBytes, + type DidUri, + type JwtSigner, + type KeyCurve, + type Keypair } from "agentcommercekit" -import { privateKeyToAccount } from "viem/accounts" +import { privateKeyToAccount, type Account } from "viem/accounts" import { publicKeyToAddress } from "viem/utils" -import { chainId } from "@/constants" -import type { DidUri, JwtSigner, KeyCurve, Keypair } from "agentcommercekit" -import type { Account } from "viem/accounts" export type KeypairInfo = { publicKeyHex: `0x${string}` diff --git a/demos/payments/src/utils/usdc-contract.ts b/demos/payments/src/utils/usdc-contract.ts index df7dc07..3129aec 100644 --- a/demos/payments/src/utils/usdc-contract.ts +++ b/demos/payments/src/utils/usdc-contract.ts @@ -1,6 +1,12 @@ -import { createWalletClient, encodeFunctionData, erc20Abi, http } from "viem" import { chain, usdcAddress } from "@/constants" -import type { Account, Address } from "viem" +import { + createWalletClient, + encodeFunctionData, + erc20Abi, + http, + type Account, + type Address +} from "viem" /** * Transfer USDC to the recipient diff --git a/demos/skyfire-kya/src/index.ts b/demos/skyfire-kya/src/index.ts index 3ca303d..67e530a 100644 --- a/demos/skyfire-kya/src/index.ts +++ b/demos/skyfire-kya/src/index.ts @@ -6,6 +6,8 @@ import { successMessage, waitForEnter } from "@repo/cli-tools" +import type { JwtString, Verifiable, W3CCredential } from "agentcommercekit" +import type * as jose from "jose" import { generateJwks } from "./jwk-keys" import { createMockSkyfireKyaToken } from "./kya-token" import { @@ -14,11 +16,9 @@ import { getBuyerDidFromVC, getOwnerDidFromVC, getSellerDidFromVC, - verifySkyfireKyaAsAckId + verifySkyfireKyaAsAckId, + type SkyfireKyaCredentialSubject } from "./skyfire-kya-ack-id" -import type { SkyfireKyaCredentialSubject } from "./skyfire-kya-ack-id" -import type { JwtString, Verifiable, W3CCredential } from "agentcommercekit" -import type * as jose from "jose" async function runDemo() { const { jwks, keypair } = await generateJwks() diff --git a/demos/skyfire-kya/src/kya-token.ts b/demos/skyfire-kya/src/kya-token.ts index f3baa0b..50496dd 100644 --- a/demos/skyfire-kya/src/kya-token.ts +++ b/demos/skyfire-kya/src/kya-token.ts @@ -1,9 +1,13 @@ import { log, logJson } from "@repo/cli-tools" -import { createJwt, createJwtSigner } from "agentcommercekit" +import { + createJwt, + createJwtSigner, + type JwtString, + type Keypair +} from "agentcommercekit" import { jwtPayloadSchema } from "agentcommercekit/schemas/zod/v4" import { decodeJwt } from "jose" import * as z from "zod/v4" -import type { JwtString, Keypair } from "agentcommercekit" export const skyfireKyaJwtPayloadSchema = z.object({ ...jwtPayloadSchema.shape, diff --git a/demos/skyfire-kya/src/skyfire-kya-ack-id.ts b/demos/skyfire-kya/src/skyfire-kya-ack-id.ts index f6c6946..873752b 100644 --- a/demos/skyfire-kya/src/skyfire-kya-ack-id.ts +++ b/demos/skyfire-kya/src/skyfire-kya-ack-id.ts @@ -1,14 +1,14 @@ -import { bytesToBase64url } from "agentcommercekit" +import { + bytesToBase64url, + type DidUri, + type DidWebUri, + type JwtPayload, + type JwtString, + type Verifiable, + type W3CCredential +} from "agentcommercekit" import * as jose from "jose" import type { SkyfireKyaJwtPayload } from "./kya-token" -import type { - DidUri, - DidWebUri, - JwtPayload, - JwtString, - Verifiable, - W3CCredential -} from "agentcommercekit" export interface SkyfireKyaCredentialSubject { id: DidUri // VC spec requires id in credentialSubject (represents the subject) diff --git a/docs/README.md b/docs/README.md index 2456187..97ef401 100644 --- a/docs/README.md +++ b/docs/README.md @@ -63,7 +63,6 @@ We welcome contributions to the Agent Commerce Kit documentation and specificati 5. **Commit Your Changes:** Commit your changes with clear and concise commit messages. 6. **Push to Your Fork:** Push your feature branch to your fork on GitHub (e.g., `git push origin fix/typo-in-ack-id`). 7. **Submit a Pull Request (PR):** Open a Pull Request from your feature branch in your fork to the `main` branch of the official ACK repository. - - Provide a clear title and description for your PR, explaining the purpose and scope of your changes. - Reference any related GitHub issues (e.g., "Closes #123"). diff --git a/examples/issuer/bin/start-server.ts b/examples/issuer/bin/start-server.ts index 8eea226..d717799 100644 --- a/examples/issuer/bin/start-server.ts +++ b/examples/issuer/bin/start-server.ts @@ -1,8 +1,8 @@ import { join } from "node:path" -import { serve } from "@hono/node-server" -import { migrate } from "drizzle-orm/better-sqlite3/migrator" import { getDb } from "@/db/get-db" import app from "@/index" +import { serve } from "@hono/node-server" +import { migrate } from "drizzle-orm/better-sqlite3/migrator" function startServer() { const db = getDb() diff --git a/examples/issuer/src/db/queries/credentials.ts b/examples/issuer/src/db/queries/credentials.ts index 5fc5763..0097ca9 100644 --- a/examples/issuer/src/db/queries/credentials.ts +++ b/examples/issuer/src/db/queries/credentials.ts @@ -1,9 +1,13 @@ -import { eq } from "drizzle-orm" -import { credentialsTable, statusListsTable } from "@/db/schema" +import { + credentialsTable, + statusListsTable, + type DatabaseCredential, + type NewDatabaseCredential +} from "@/db/schema" import { getStatusListPosition } from "@/db/utils/get-status-list-position" -import { maybeCreateStatusList } from "./status-lists" +import { eq } from "drizzle-orm" import type { DatabaseClient } from "../get-db" -import type { DatabaseCredential, NewDatabaseCredential } from "@/db/schema" +import { maybeCreateStatusList } from "./status-lists" export async function createCredential( db: DatabaseClient, diff --git a/examples/issuer/src/db/queries/status-lists.ts b/examples/issuer/src/db/queries/status-lists.ts index b694f74..7237487 100644 --- a/examples/issuer/src/db/queries/status-lists.ts +++ b/examples/issuer/src/db/queries/status-lists.ts @@ -1,7 +1,6 @@ import { eq } from "drizzle-orm/sql" -import { statusListsTable } from "../schema" import type { DatabaseClient } from "../get-db" -import type { DatabaseStatusList } from "../schema" +import { statusListsTable, type DatabaseStatusList } from "../schema" type CreateStatusListParams = Pick diff --git a/examples/issuer/src/db/schema.ts b/examples/issuer/src/db/schema.ts index 4002b09..22ea39c 100644 --- a/examples/issuer/src/db/schema.ts +++ b/examples/issuer/src/db/schema.ts @@ -1,3 +1,4 @@ +import type { W3CCredential } from "agentcommercekit" import { sql } from "drizzle-orm" import { index, @@ -5,7 +6,6 @@ import { sqliteTable as table, text } from "drizzle-orm/sqlite-core" -import type { W3CCredential } from "agentcommercekit" export const STATUS_LIST_MAX_SIZE = 8_192 diff --git a/examples/issuer/src/db/utils/get-status-list-position.test.ts b/examples/issuer/src/db/utils/get-status-list-position.test.ts index 932a0f8..b31550c 100644 --- a/examples/issuer/src/db/utils/get-status-list-position.test.ts +++ b/examples/issuer/src/db/utils/get-status-list-position.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest" -import { getStatusListPosition } from "./get-status-list-position" import { STATUS_LIST_MAX_SIZE } from "../schema" +import { getStatusListPosition } from "./get-status-list-position" describe("getStatusListPosition", () => { it("returns correct position for index 1", () => { diff --git a/examples/issuer/src/index.ts b/examples/issuer/src/index.ts index 3ca4177..055040e 100644 --- a/examples/issuer/src/index.ts +++ b/examples/issuer/src/index.ts @@ -1,12 +1,11 @@ import { errorHandler } from "@repo/api-utils/middleware/error-handler" import { logger } from "@repo/api-utils/middleware/logger" -import { Hono } from "hono" +import { Hono, type Env } from "hono" import credentials from "./routes/credentials" import healthcheck from "./routes/healthcheck" import receipts from "./routes/receipts" import status from "./routes/status" import wellKnown from "./routes/well-known" -import type { Env } from "hono" const app = new Hono() diff --git a/examples/issuer/src/lib/credentials/build-signed-credential.test.ts b/examples/issuer/src/lib/credentials/build-signed-credential.test.ts index 7c08a30..d3a54ce 100644 --- a/examples/issuer/src/lib/credentials/build-signed-credential.test.ts +++ b/examples/issuer/src/lib/credentials/build-signed-credential.test.ts @@ -1,15 +1,15 @@ +import type { DatabaseCredential } from "@/db/schema" import { - DidResolver, createCredential, createDidWebDocumentFromKeypair, createJwtSigner, + DidResolver, generateKeypair, isJwtString } from "agentcommercekit" import { describe, expect, it } from "vitest" -import { buildSignedCredential } from "./build-signed-credential" import type { Issuer } from "../types" -import type { DatabaseCredential } from "@/db/schema" +import { buildSignedCredential } from "./build-signed-credential" describe("buildSignedCredential", async () => { const baseUrl = "https://test.example.com" diff --git a/examples/issuer/src/lib/credentials/build-signed-credential.ts b/examples/issuer/src/lib/credentials/build-signed-credential.ts index e963287..d026cde 100644 --- a/examples/issuer/src/lib/credentials/build-signed-credential.ts +++ b/examples/issuer/src/lib/credentials/build-signed-credential.ts @@ -1,12 +1,12 @@ +import type { DatabaseCredential } from "@/db/schema" +import { getStatusListPosition } from "@/db/utils/get-status-list-position" import { makeRevocable, parseJwtCredential, - signCredential + signCredential, + type Resolvable } from "agentcommercekit" -import { getStatusListPosition } from "@/db/utils/get-status-list-position" import type { CredentialResponse, Issuer } from "../types" -import type { DatabaseCredential } from "@/db/schema" -import type { Resolvable } from "agentcommercekit" type BuildSignedCredentialParams = { baseUrl: string diff --git a/examples/issuer/src/middleware/database.ts b/examples/issuer/src/middleware/database.ts index 776f644..d0c78f6 100644 --- a/examples/issuer/src/middleware/database.ts +++ b/examples/issuer/src/middleware/database.ts @@ -1,5 +1,4 @@ -import { getDb } from "@/db/get-db" -import type { DatabaseClient } from "@/db/get-db" +import { getDb, type DatabaseClient } from "@/db/get-db" import type { Env, MiddlewareHandler } from "hono" declare module "hono" { diff --git a/examples/issuer/src/middleware/did-resolver.ts b/examples/issuer/src/middleware/did-resolver.ts index 94b7fb4..414131c 100644 --- a/examples/issuer/src/middleware/did-resolver.ts +++ b/examples/issuer/src/middleware/did-resolver.ts @@ -1,5 +1,4 @@ -import { getDidResolver } from "agentcommercekit" -import type { DidResolver } from "agentcommercekit" +import { getDidResolver, type DidResolver } from "agentcommercekit" import type { Env, MiddlewareHandler } from "hono" declare module "hono" { diff --git a/examples/issuer/src/middleware/issuer.ts b/examples/issuer/src/middleware/issuer.ts index 45dfa47..492ed6d 100644 --- a/examples/issuer/src/middleware/issuer.ts +++ b/examples/issuer/src/middleware/issuer.ts @@ -1,12 +1,12 @@ +import type { Issuer } from "@/lib/types" import { createDidWebDocumentFromKeypair, createJwtSigner, generateKeypair, hexStringToBytes } from "agentcommercekit" -import { env } from "hono/adapter" -import type { Issuer } from "@/lib/types" import type { Env, MiddlewareHandler } from "hono" +import { env } from "hono/adapter" declare module "hono" { interface ContextVariableMap { diff --git a/examples/issuer/src/routes/credentials.test.ts b/examples/issuer/src/routes/credentials.test.ts index 5695a38..a187024 100644 --- a/examples/issuer/src/routes/credentials.test.ts +++ b/examples/issuer/src/routes/credentials.test.ts @@ -1,19 +1,21 @@ +import type { DatabaseClient } from "@/db/get-db" +import { getCredential } from "@/db/queries/credentials" +import type { DatabaseCredential } from "@/db/schema" +import { + createDidWebWithSigner, + type DidWithSigner +} from "@/test-helpers/did-web-with-signer" import { - DidResolver, bytesToHexString, createControllerCredential, createJwt, + DidResolver, getDidResolver } from "agentcommercekit" import { credentialSchema } from "agentcommercekit/schemas/valibot" import * as v from "valibot" import { afterEach, beforeAll, describe, expect, it, vi } from "vitest" -import { getCredential } from "@/db/queries/credentials" -import { createDidWebWithSigner } from "@/test-helpers/did-web-with-signer" import app from ".." -import type { DatabaseClient } from "@/db/get-db" -import type { DatabaseCredential } from "@/db/schema" -import type { DidWithSigner } from "@/test-helpers/did-web-with-signer" // Mock the DID resolver vi.mock("agentcommercekit", async () => { diff --git a/examples/issuer/src/routes/credentials.ts b/examples/issuer/src/routes/credentials.ts index 9eb8c8f..207b7dc 100644 --- a/examples/issuer/src/routes/credentials.ts +++ b/examples/issuer/src/routes/credentials.ts @@ -1,4 +1,17 @@ -import { apiSuccessResponse } from "@repo/api-utils/api-response" +import { + createCredential as createDatabaseCredential, + getCredential, + revokeCredential +} from "@/db/queries/credentials" +import { buildSignedCredential } from "@/lib/credentials/build-signed-credential" +import type { CredentialResponse } from "@/lib/types" +import { database } from "@/middleware/database" +import { didResolver } from "@/middleware/did-resolver" +import { issuer } from "@/middleware/issuer" +import { + apiSuccessResponse, + type ApiResponse +} from "@repo/api-utils/api-response" import { internalServerError, notFound, @@ -11,21 +24,9 @@ import { resolveDidWithController } from "agentcommercekit" import { didUriSchema } from "agentcommercekit/schemas/valibot" -import { Hono } from "hono" +import { Hono, type Env } from "hono" import { env } from "hono/adapter" import * as v from "valibot" -import { - createCredential as createDatabaseCredential, - getCredential, - revokeCredential -} from "@/db/queries/credentials" -import { buildSignedCredential } from "@/lib/credentials/build-signed-credential" -import { database } from "@/middleware/database" -import { didResolver } from "@/middleware/did-resolver" -import { issuer } from "@/middleware/issuer" -import type { CredentialResponse } from "@/lib/types" -import type { ApiResponse } from "@repo/api-utils/api-response" -import type { Env } from "hono" const app = new Hono() app.use("*", issuer()) diff --git a/examples/issuer/src/routes/healthcheck.ts b/examples/issuer/src/routes/healthcheck.ts index 39b7d30..7fb4caa 100644 --- a/examples/issuer/src/routes/healthcheck.ts +++ b/examples/issuer/src/routes/healthcheck.ts @@ -1,7 +1,8 @@ -import { apiSuccessResponse } from "@repo/api-utils/api-response" -import { Hono } from "hono" -import type { ApiResponse } from "@repo/api-utils/api-response" -import type { Env } from "hono" +import { + apiSuccessResponse, + type ApiResponse +} from "@repo/api-utils/api-response" +import { Hono, type Env } from "hono" const app = new Hono() diff --git a/examples/issuer/src/routes/receipts.test.ts b/examples/issuer/src/routes/receipts.test.ts index 2fa75f9..c23a7eb 100644 --- a/examples/issuer/src/routes/receipts.test.ts +++ b/examples/issuer/src/routes/receipts.test.ts @@ -1,12 +1,20 @@ +import type { DatabaseClient } from "@/db/get-db" +import { getCredential } from "@/db/queries/credentials" +import type { DatabaseCredential } from "@/db/schema" +import { + createDidWebWithSigner, + type DidWithSigner +} from "@/test-helpers/did-web-with-signer" import { - DidResolver, bytesToHexString, createJwt, createPaymentReceipt, createSignedPaymentRequest, curveToJwtAlgorithm, + DidResolver, getDidResolver, - verifyPaymentRequestToken + verifyPaymentRequestToken, + type PaymentRequestInit } from "agentcommercekit" import { credentialSchema, @@ -14,13 +22,7 @@ import { } from "agentcommercekit/schemas/valibot" import * as v from "valibot" import { afterEach, beforeEach, describe, expect, it, vi } from "vitest" -import { getCredential } from "@/db/queries/credentials" -import { createDidWebWithSigner } from "@/test-helpers/did-web-with-signer" import app from ".." -import type { DatabaseClient } from "@/db/get-db" -import type { DatabaseCredential } from "@/db/schema" -import type { DidWithSigner } from "@/test-helpers/did-web-with-signer" -import type { PaymentRequestInit } from "agentcommercekit" vi.mock("agentcommercekit", async () => { const actual = await vi.importActual("agentcommercekit") diff --git a/examples/issuer/src/routes/receipts.ts b/examples/issuer/src/routes/receipts.ts index 4268bc5..5b4afb6 100644 --- a/examples/issuer/src/routes/receipts.ts +++ b/examples/issuer/src/routes/receipts.ts @@ -1,4 +1,17 @@ -import { apiSuccessResponse } from "@repo/api-utils/api-response" +import { + createCredential as createDatabaseCredential, + getCredential, + revokeCredential +} from "@/db/queries/credentials" +import { buildSignedCredential } from "@/lib/credentials/build-signed-credential" +import type { CredentialResponse } from "@/lib/types" +import { database } from "@/middleware/database" +import { didResolver } from "@/middleware/did-resolver" +import { issuer } from "@/middleware/issuer" +import { + apiSuccessResponse, + type ApiResponse +} from "@repo/api-utils/api-response" import { internalServerError, notFound, @@ -8,25 +21,14 @@ import { signedPayloadValidator } from "@repo/api-utils/middleware/signed-payloa import { createPaymentReceipt, isPaymentReceiptCredential, - verifyPaymentRequestToken + verifyPaymentRequestToken, + type DidUri, + type PaymentRequest } from "agentcommercekit" import { didUriSchema } from "agentcommercekit/schemas/valibot" -import { Hono } from "hono" +import { Hono, type Env } from "hono" import { env } from "hono/adapter" import * as v from "valibot" -import { - createCredential as createDatabaseCredential, - getCredential, - revokeCredential -} from "@/db/queries/credentials" -import { buildSignedCredential } from "@/lib/credentials/build-signed-credential" -import { database } from "@/middleware/database" -import { didResolver } from "@/middleware/did-resolver" -import { issuer } from "@/middleware/issuer" -import type { CredentialResponse } from "@/lib/types" -import type { ApiResponse } from "@repo/api-utils/api-response" -import type { DidUri, PaymentRequest } from "agentcommercekit" -import type { Env } from "hono" const app = new Hono() diff --git a/examples/issuer/src/routes/status.ts b/examples/issuer/src/routes/status.ts index eb08644..86bb1e5 100644 --- a/examples/issuer/src/routes/status.ts +++ b/examples/issuer/src/routes/status.ts @@ -1,23 +1,22 @@ -import { apiSuccessResponse } from "@repo/api-utils/api-response" -import { notFound } from "@repo/api-utils/exceptions" -import { - createStatusListCredential, - parseJwtCredential, - signCredential -} from "agentcommercekit" -import { Hono } from "hono" -import { env } from "hono/adapter" import { getStatusList } from "@/db/queries/status-lists" import { compressBitString } from "@/lib/utils/compress-bit-string" import { database } from "@/middleware/database" import { didResolver } from "@/middleware/did-resolver" import { issuer } from "@/middleware/issuer" -import type { ApiResponse } from "@repo/api-utils/api-response" -import type { - BitstringStatusListCredential, - Verifiable +import { + apiSuccessResponse, + type ApiResponse +} from "@repo/api-utils/api-response" +import { notFound } from "@repo/api-utils/exceptions" +import { + createStatusListCredential, + parseJwtCredential, + signCredential, + type BitstringStatusListCredential, + type Verifiable } from "agentcommercekit" -import type { Env } from "hono" +import { Hono, type Env } from "hono" +import { env } from "hono/adapter" const app = new Hono() diff --git a/examples/issuer/src/routes/well-known.ts b/examples/issuer/src/routes/well-known.ts index aee7654..194fd78 100644 --- a/examples/issuer/src/routes/well-known.ts +++ b/examples/issuer/src/routes/well-known.ts @@ -1,7 +1,6 @@ -import { Hono } from "hono" import { issuer } from "@/middleware/issuer" import type { DidDocument } from "agentcommercekit" -import type { Env, TypedResponse } from "hono" +import { Hono, type Env, type TypedResponse } from "hono" const app = new Hono() diff --git a/examples/issuer/src/test-helpers/did-web-with-signer.ts b/examples/issuer/src/test-helpers/did-web-with-signer.ts index 651bd0a..fb1b0c4 100644 --- a/examples/issuer/src/test-helpers/did-web-with-signer.ts +++ b/examples/issuer/src/test-helpers/did-web-with-signer.ts @@ -1,9 +1,11 @@ import { createDidWebDocumentFromKeypair, createJwtSigner, - generateKeypair + generateKeypair, + type DidResolver, + type DidUri, + type KeyCurve } from "agentcommercekit" -import type { DidResolver, DidUri, KeyCurve } from "agentcommercekit" interface GenerateDidWebWithSignerOptions { controller?: DidUri diff --git a/examples/local-did-host/bin/serve.ts b/examples/local-did-host/bin/serve.ts index e4b3a9d..80a99fa 100644 --- a/examples/local-did-host/bin/serve.ts +++ b/examples/local-did-host/bin/serve.ts @@ -1,7 +1,7 @@ -import { serve } from "@hono/node-server" import app from "@/index" import { buildUrl } from "@/lib/build-url" import { getIdentityDid } from "@/lib/identity" +import { serve } from "@hono/node-server" serve( { diff --git a/examples/local-did-host/src/lib/identity.ts b/examples/local-did-host/src/lib/identity.ts index 0ac5158..a3e6bc5 100644 --- a/examples/local-did-host/src/lib/identity.ts +++ b/examples/local-did-host/src/lib/identity.ts @@ -1,13 +1,17 @@ import { createDidWebDocumentFromKeypair, - createDidWebUri + createDidWebUri, + type DidDocument, + type DidUri } from "@agentcommercekit/did" -import { createJwtSigner, curveToJwtAlgorithm } from "@agentcommercekit/jwt" -import { generateKeypair } from "@agentcommercekit/keys" +import { + createJwtSigner, + curveToJwtAlgorithm, + type JwtAlgorithm, + type JwtSigner +} from "@agentcommercekit/jwt" +import { generateKeypair, type KeyCurve } from "@agentcommercekit/keys" import { hexStringToBytes } from "@agentcommercekit/keys/encoding" -import type { DidDocument, DidUri } from "@agentcommercekit/did" -import type { JwtAlgorithm, JwtSigner } from "@agentcommercekit/jwt" -import type { KeyCurve } from "@agentcommercekit/keys" export interface Identity { did: DidUri diff --git a/examples/local-did-host/src/middleware/identities.ts b/examples/local-did-host/src/middleware/identities.ts index 0b47693..05f5312 100644 --- a/examples/local-did-host/src/middleware/identities.ts +++ b/examples/local-did-host/src/middleware/identities.ts @@ -1,8 +1,7 @@ -import { env } from "hono/adapter" import { buildUrl } from "@/lib/build-url" -import { getIdentity } from "@/lib/identity" -import type { Identity } from "@/lib/identity" +import { getIdentity, type Identity } from "@/lib/identity" import type { Env, MiddlewareHandler } from "hono" +import { env } from "hono/adapter" declare module "hono" { interface ContextVariableMap { diff --git a/examples/verifier/bin/serve.ts b/examples/verifier/bin/serve.ts index d3cc348..0117ba2 100644 --- a/examples/verifier/bin/serve.ts +++ b/examples/verifier/bin/serve.ts @@ -1,5 +1,5 @@ -import { serve } from "@hono/node-server" import app from "@/index" +import { serve } from "@hono/node-server" serve( { diff --git a/examples/verifier/src/index.ts b/examples/verifier/src/index.ts index 05993bc..6050140 100644 --- a/examples/verifier/src/index.ts +++ b/examples/verifier/src/index.ts @@ -1,10 +1,9 @@ import { errorHandler } from "@repo/api-utils/middleware/error-handler" import { logger } from "@repo/api-utils/middleware/logger" -import { Hono } from "hono" +import { Hono, type Env } from "hono" import healthcheck from "./routes/healthcheck" import verify from "./routes/verify" import wellKnown from "./routes/well-known" -import type { Env } from "hono" const app = new Hono() diff --git a/examples/verifier/src/middleware/verifier.ts b/examples/verifier/src/middleware/verifier.ts index ad3690a..c04a8b8 100644 --- a/examples/verifier/src/middleware/verifier.ts +++ b/examples/verifier/src/middleware/verifier.ts @@ -2,11 +2,14 @@ import { createDidWebDocumentFromKeypair, createJwtSigner, generateKeypair, - hexStringToBytes + hexStringToBytes, + type DidDocument, + type DidUri, + type JwtSigner } from "agentcommercekit" -import { env } from "hono/adapter" -import type { DidDocument, DidUri, JwtSigner } from "agentcommercekit" import type { Env, MiddlewareHandler } from "hono" +import { env } from "hono/adapter" + declare module "hono" { interface ContextVariableMap { verifier: { diff --git a/examples/verifier/src/routes/healthcheck.ts b/examples/verifier/src/routes/healthcheck.ts index 651002b..ec57399 100644 --- a/examples/verifier/src/routes/healthcheck.ts +++ b/examples/verifier/src/routes/healthcheck.ts @@ -1,7 +1,8 @@ -import { apiSuccessResponse } from "@repo/api-utils/api-response" -import { Hono } from "hono" -import type { ApiResponse } from "@repo/api-utils/api-response" -import type { Env } from "hono" +import { + apiSuccessResponse, + type ApiResponse +} from "@repo/api-utils/api-response" +import { Hono, type Env } from "hono" const app = new Hono() diff --git a/examples/verifier/src/routes/verify.ts b/examples/verifier/src/routes/verify.ts index 0f7ab57..775db5b 100644 --- a/examples/verifier/src/routes/verify.ts +++ b/examples/verifier/src/routes/verify.ts @@ -1,5 +1,8 @@ import { vValidator } from "@hono/valibot-validator" -import { apiSuccessResponse } from "@repo/api-utils/api-response" +import { + apiSuccessResponse, + type ApiResponse +} from "@repo/api-utils/api-response" import { createDidWebUri, getControllerClaimVerifier, @@ -13,11 +16,9 @@ import { credentialSchema, jwtStringSchema } from "agentcommercekit/schemas/valibot" -import { Hono } from "hono" +import { Hono, type Env } from "hono" import { ValiError } from "valibot" import * as v from "valibot" -import type { ApiResponse } from "@repo/api-utils/api-response" -import type { Env } from "hono" const app = new Hono() diff --git a/examples/verifier/src/routes/well-known.ts b/examples/verifier/src/routes/well-known.ts index 0ded624..1d15cb4 100644 --- a/examples/verifier/src/routes/well-known.ts +++ b/examples/verifier/src/routes/well-known.ts @@ -1,7 +1,6 @@ -import { Hono } from "hono" import { verifier } from "@/middleware/verifier" import type { DidDocument } from "agentcommercekit" -import type { Env, TypedResponse } from "hono" +import { Hono, type Env, type TypedResponse } from "hono" const app = new Hono() diff --git a/package.json b/package.json index 170839d..8579ae4 100644 --- a/package.json +++ b/package.json @@ -42,9 +42,12 @@ "devDependencies": { "@changesets/changelog-github": "0.5.1", "@changesets/cli": "2.29.4", + "@ianvs/prettier-plugin-sort-imports": "4.7.0", + "@prettier/plugin-oxc": "0.0.4", "@repo/typescript-config": "workspace:*", - "prettier": "3.5.3", - "prettier-plugin-packagejson": "2.5.14", + "prettier": "3.6.2", + "prettier-plugin-jsdoc": "1.3.3", + "prettier-plugin-packagejson": "2.5.19", "turbo": "2.5.3", "typescript": "5.7.3" }, diff --git a/packages/ack-id/README.md b/packages/ack-id/README.md index b2be0e2..09c40b9 100644 --- a/packages/ack-id/README.md +++ b/packages/ack-id/README.md @@ -64,8 +64,8 @@ try { ```ts import { - isControllerCredential, - isControllerClaim + isControllerClaim, + isControllerCredential } from "@agentcommercekit/ack-id" // Check if a credential is specifically a controller credential @@ -88,13 +88,12 @@ isControllerClaim(credential.credentialSubject) ```ts // Zod v4 schema -import { controllerClaimSchema } from "@agentcommercekit/ack-id/schemas/zod/v4" - -// Zod v3 schema -import { controllerClaimSchema } from "@agentcommercekit/ack-id/schemas/zod/v3" // Valibot schema import { controllerClaimSchema } from "@agentcommercekit/ack-id/schemas/valibot" +// Zod v3 schema +import { controllerClaimSchema } from "@agentcommercekit/ack-id/schemas/zod/v3" +import { controllerClaimSchema } from "@agentcommercekit/ack-id/schemas/zod/v4" ``` ## A2A Support diff --git a/packages/ack-id/src/a2a/sign-message.ts b/packages/ack-id/src/a2a/sign-message.ts index 1a2ebb9..2080564 100644 --- a/packages/ack-id/src/a2a/sign-message.ts +++ b/packages/ack-id/src/a2a/sign-message.ts @@ -1,15 +1,15 @@ -import { createJwt } from "@agentcommercekit/jwt" -import { v4 } from "uuid" -import { generateRandomJti, generateRandomNonce } from "./random" import type { Message } from "@a2a-js/sdk" import type { DidUri } from "@agentcommercekit/did" -import type { - JwtAlgorithm, - JwtPayload, - JwtSigner, - JwtString +import { + createJwt, + type JwtAlgorithm, + type JwtPayload, + type JwtSigner, + type JwtString } from "@agentcommercekit/jwt" import type { W3CCredential } from "@agentcommercekit/vc" +import { v4 } from "uuid" +import { generateRandomJti, generateRandomNonce } from "./random" type SignMessageOptions = { did: DidUri @@ -24,11 +24,6 @@ type SignedA2AMessage = { message: Message } -type A2AHandshakeMessage = SignedA2AMessage & { - nonce: string - replyNonce?: string -} - /** * Creates a signed A2A Message * @returns an object containing the signature, jti, and the signed message, with the signature added to the metadata diff --git a/packages/ack-id/src/a2a/verify.ts b/packages/ack-id/src/a2a/verify.ts index 0fc8852..03e688e 100644 --- a/packages/ack-id/src/a2a/verify.ts +++ b/packages/ack-id/src/a2a/verify.ts @@ -1,13 +1,15 @@ -import { getDidResolver } from "@agentcommercekit/did" +import type { Message } from "@a2a-js/sdk" +import { + getDidResolver, + type DidResolver, + type DidUri +} from "@agentcommercekit/did" import { didUriSchema } from "@agentcommercekit/did/schemas/valibot" -import { verifyJwt } from "@agentcommercekit/jwt" +import { verifyJwt, type JwtVerified } from "@agentcommercekit/jwt" import { credentialSchema } from "@agentcommercekit/vc/schemas/valibot" import { stringify } from "safe-stable-stringify" import * as v from "valibot" import { dataPartSchema, messageSchema } from "./schemas/valibot" -import type { Message } from "@a2a-js/sdk" -import type { DidResolver, DidUri } from "@agentcommercekit/did" -import type { JwtVerified } from "@agentcommercekit/jwt" const jwtDataPartSchema = v.object({ ...dataPartSchema.entries, diff --git a/packages/ack-id/src/controller-claim-verifier.test.ts b/packages/ack-id/src/controller-claim-verifier.test.ts index b991980..1654cbd 100644 --- a/packages/ack-id/src/controller-claim-verifier.test.ts +++ b/packages/ack-id/src/controller-claim-verifier.test.ts @@ -1,7 +1,8 @@ import { createDidDocumentFromKeypair, createDidWebUri, - getDidResolver + getDidResolver, + type Resolvable } from "@agentcommercekit/did" import { generateKeypair } from "@agentcommercekit/keys" import { @@ -10,7 +11,6 @@ import { } from "@agentcommercekit/vc" import { beforeEach, describe, expect, it } from "vitest" import { getControllerClaimVerifier } from "./controller-claim-verifier" -import type { Resolvable } from "@agentcommercekit/did" async function setup() { const resolver = getDidResolver() diff --git a/packages/ack-id/src/controller-claim-verifier.ts b/packages/ack-id/src/controller-claim-verifier.ts index a463f10..bc79089 100644 --- a/packages/ack-id/src/controller-claim-verifier.ts +++ b/packages/ack-id/src/controller-claim-verifier.ts @@ -1,17 +1,17 @@ -import { resolveDidWithController } from "@agentcommercekit/did" +import { + resolveDidWithController, + type Resolvable +} from "@agentcommercekit/did" import { InvalidControllerClaimError, InvalidCredentialSubjectError, - isCredential + isCredential, + type ClaimVerifier, + type CredentialSubject, + type W3CCredential } from "@agentcommercekit/vc" import * as v from "valibot" import { controllerClaimSchema } from "./schemas/valibot" -import type { Resolvable } from "@agentcommercekit/did" -import type { - ClaimVerifier, - CredentialSubject, - W3CCredential -} from "@agentcommercekit/vc" export interface ControllerCredential extends W3CCredential { credentialSubject: v.InferOutput diff --git a/packages/ack-id/src/controller-credential.ts b/packages/ack-id/src/controller-credential.ts index 90fcb0b..09616ce 100644 --- a/packages/ack-id/src/controller-credential.ts +++ b/packages/ack-id/src/controller-credential.ts @@ -1,6 +1,5 @@ -import { createCredential } from "@agentcommercekit/vc" import type { DidUri } from "@agentcommercekit/did" -import type { W3CCredential } from "@agentcommercekit/vc" +import { createCredential, type W3CCredential } from "@agentcommercekit/vc" type CreateControllerCredentialParams = { /** diff --git a/packages/ack-pay/README.md b/packages/ack-pay/README.md index 669e3e3..0cb40a2 100644 --- a/packages/ack-pay/README.md +++ b/packages/ack-pay/README.md @@ -118,13 +118,12 @@ isPaymentReceiptClaim(credential.credentialSubject) ```ts // Zod v4 schema -import { paymentRequestSchema } from "@agentcommercekit/ack-pay/schemas/zod/v4" - -// Zod v3 schema -import { paymentRequestSchema } from "@agentcommercekit/ack-pay/schemas/zod/v3" // Valibot schema import { paymentRequestSchema } from "@agentcommercekit/ack-pay/schemas/valibot" +// Zod v3 schema +import { paymentRequestSchema } from "@agentcommercekit/ack-pay/schemas/zod/v3" +import { paymentRequestSchema } from "@agentcommercekit/ack-pay/schemas/zod/v4" ``` ## Agent Commerce Kit Version diff --git a/packages/ack-pay/src/create-payment-receipt.ts b/packages/ack-pay/src/create-payment-receipt.ts index aafef5a..82e8ec8 100644 --- a/packages/ack-pay/src/create-payment-receipt.ts +++ b/packages/ack-pay/src/create-payment-receipt.ts @@ -1,6 +1,5 @@ -import { createCredential } from "@agentcommercekit/vc" import type { DidUri } from "@agentcommercekit/did" -import type { W3CCredential } from "@agentcommercekit/vc" +import { createCredential, type W3CCredential } from "@agentcommercekit/vc" const PAYMENT_RECEIPT_TYPE = "PaymentReceiptCredential" diff --git a/packages/ack-pay/src/create-payment-request-token.test.ts b/packages/ack-pay/src/create-payment-request-token.test.ts index d57d21b..bfe4b68 100644 --- a/packages/ack-pay/src/create-payment-request-token.test.ts +++ b/packages/ack-pay/src/create-payment-request-token.test.ts @@ -1,23 +1,22 @@ import { createDidDocumentFromKeypair, createDidKeyUri, - getDidResolver + getDidResolver, + type DidUri } from "@agentcommercekit/did" import { createJwtSigner, curveToJwtAlgorithm, isJwtString, - verifyJwt + verifyJwt, + type JwtSigner } from "@agentcommercekit/jwt" -import { generateKeypair } from "@agentcommercekit/keys" +import { generateKeypair, type Keypair } from "@agentcommercekit/keys" import * as v from "valibot" import { beforeEach, describe, expect, it } from "vitest" import { createPaymentRequestToken } from "./create-payment-request-token" -import { paymentRequestSchema } from "./schemas/valibot" import type { PaymentRequestInit } from "./payment-request" -import type { DidUri } from "@agentcommercekit/did" -import type { JwtSigner } from "@agentcommercekit/jwt" -import type { Keypair } from "@agentcommercekit/keys" +import { paymentRequestSchema } from "./schemas/valibot" describe("createPaymentRequestToken()", () => { let keypair: Keypair diff --git a/packages/ack-pay/src/create-payment-request-token.ts b/packages/ack-pay/src/create-payment-request-token.ts index 456d085..f6d99f3 100644 --- a/packages/ack-pay/src/create-payment-request-token.ts +++ b/packages/ack-pay/src/create-payment-request-token.ts @@ -1,7 +1,11 @@ -import { createJwt } from "@agentcommercekit/jwt" -import type { PaymentRequest } from "./payment-request" import type { DidUri } from "@agentcommercekit/did" -import type { JwtAlgorithm, JwtSigner, JwtString } from "@agentcommercekit/jwt" +import { + createJwt, + type JwtAlgorithm, + type JwtSigner, + type JwtString +} from "@agentcommercekit/jwt" +import type { PaymentRequest } from "./payment-request" export interface PaymentRequestTokenOptions { /** diff --git a/packages/ack-pay/src/create-signed-payment-request.test.ts b/packages/ack-pay/src/create-signed-payment-request.test.ts index 8134fc5..3081775 100644 --- a/packages/ack-pay/src/create-signed-payment-request.test.ts +++ b/packages/ack-pay/src/create-signed-payment-request.test.ts @@ -1,21 +1,20 @@ import { createDidDocumentFromKeypair, createDidKeyUri, - getDidResolver + getDidResolver, + type DidUri } from "@agentcommercekit/did" import { createJwtSigner, curveToJwtAlgorithm, - isJwtString + isJwtString, + type JwtSigner } from "@agentcommercekit/jwt" -import { generateKeypair } from "@agentcommercekit/keys" +import { generateKeypair, type Keypair } from "@agentcommercekit/keys" import { beforeEach, describe, expect, it } from "vitest" import { createSignedPaymentRequest } from "./create-signed-payment-request" -import { verifyPaymentRequestToken } from "./verify-payment-request-token" import type { PaymentRequestInit } from "./payment-request" -import type { DidUri } from "@agentcommercekit/did" -import type { JwtSigner } from "@agentcommercekit/jwt" -import type { Keypair } from "@agentcommercekit/keys" +import { verifyPaymentRequestToken } from "./verify-payment-request-token" describe("createSignedPaymentRequest()", () => { let keypair: Keypair diff --git a/packages/ack-pay/src/create-signed-payment-request.ts b/packages/ack-pay/src/create-signed-payment-request.ts index 83d667d..2fab24a 100644 --- a/packages/ack-pay/src/create-signed-payment-request.ts +++ b/packages/ack-pay/src/create-signed-payment-request.ts @@ -1,9 +1,11 @@ +import type { JwtString } from "@agentcommercekit/jwt" import * as v from "valibot" -import { createPaymentRequestToken } from "./create-payment-request-token" -import { paymentRequestSchema } from "./schemas/valibot" -import type { PaymentRequestTokenOptions } from "./create-payment-request-token" +import { + createPaymentRequestToken, + type PaymentRequestTokenOptions +} from "./create-payment-request-token" import type { PaymentRequest, PaymentRequestInit } from "./payment-request" -import type { JwtString } from "@agentcommercekit/jwt" +import { paymentRequestSchema } from "./schemas/valibot" /** * Create a signed payment request diff --git a/packages/ack-pay/src/payment-request.test.ts b/packages/ack-pay/src/payment-request.test.ts index c2cec10..90253cc 100644 --- a/packages/ack-pay/src/payment-request.test.ts +++ b/packages/ack-pay/src/payment-request.test.ts @@ -1,6 +1,5 @@ import { describe, expect, it } from "vitest" -import { isPaymentRequest } from "./payment-request" -import type { PaymentRequestInit } from "./payment-request" +import { isPaymentRequest, type PaymentRequestInit } from "./payment-request" describe("isPaymentRequest", () => { const validPaymentRequest: PaymentRequestInit = { diff --git a/packages/ack-pay/src/payment-request.ts b/packages/ack-pay/src/payment-request.ts index e409738..5789c7e 100644 --- a/packages/ack-pay/src/payment-request.ts +++ b/packages/ack-pay/src/payment-request.ts @@ -1,6 +1,8 @@ import * as v from "valibot" -import { paymentRequestSchema } from "./schemas/valibot" -import type { paymentOptionSchema } from "./schemas/valibot" +import { + paymentRequestSchema, + type paymentOptionSchema +} from "./schemas/valibot" export type PaymentRequestInit = v.InferInput export type PaymentRequest = v.InferOutput diff --git a/packages/ack-pay/src/receipt-claim-verifier.test.ts b/packages/ack-pay/src/receipt-claim-verifier.test.ts index 563efb8..5a66971 100644 --- a/packages/ack-pay/src/receipt-claim-verifier.test.ts +++ b/packages/ack-pay/src/receipt-claim-verifier.test.ts @@ -6,8 +6,10 @@ import * as v from "valibot" import { describe, expect, it } from "vitest" import { createPaymentRequestToken } from "./create-payment-request-token" import { getReceiptClaimVerifier } from "./receipt-claim-verifier" -import { paymentRequestSchema } from "./schemas/valibot" -import type { paymentReceiptClaimSchema } from "./schemas/valibot" +import { + paymentRequestSchema, + type paymentReceiptClaimSchema +} from "./schemas/valibot" describe("getReceiptClaimVerifier", () => { const resolver = getDidResolver() diff --git a/packages/ack-pay/src/receipt-claim-verifier.ts b/packages/ack-pay/src/receipt-claim-verifier.ts index 7ccbfe8..0c81d35 100644 --- a/packages/ack-pay/src/receipt-claim-verifier.ts +++ b/packages/ack-pay/src/receipt-claim-verifier.ts @@ -1,14 +1,12 @@ import { InvalidCredentialSubjectError, - isCredential + isCredential, + type ClaimVerifier, + type CredentialSubject, + type W3CCredential } from "@agentcommercekit/vc" import * as v from "valibot" import { paymentReceiptClaimSchema } from "./schemas/valibot" -import type { - ClaimVerifier, - CredentialSubject, - W3CCredential -} from "@agentcommercekit/vc" export interface PaymentReceiptCredential extends W3CCredential { credentialSubject: v.InferOutput diff --git a/packages/ack-pay/src/verify-payment-receipt.test.ts b/packages/ack-pay/src/verify-payment-receipt.test.ts index 43009c8..b78186d 100644 --- a/packages/ack-pay/src/verify-payment-receipt.test.ts +++ b/packages/ack-pay/src/verify-payment-receipt.test.ts @@ -1,24 +1,29 @@ import { createDidKeyUri, createDidPkhUri, - getDidResolver + getDidResolver, + type DidUri, + type Resolvable } from "@agentcommercekit/did" -import { createJwtSigner, curveToJwtAlgorithm } from "@agentcommercekit/jwt" +import { + createJwtSigner, + curveToJwtAlgorithm, + type JwtString +} from "@agentcommercekit/jwt" import { generateKeypair } from "@agentcommercekit/keys" import { InvalidCredentialError, parseJwtCredential, - signCredential + signCredential, + type Verifiable, + type W3CCredential } from "@agentcommercekit/vc" import { beforeEach, describe, expect, it } from "vitest" import { createPaymentReceipt } from "./create-payment-receipt" import { createSignedPaymentRequest } from "./create-signed-payment-request" import { InvalidPaymentRequestTokenError } from "./errors" -import { verifyPaymentReceipt } from "./verify-payment-receipt" import type { PaymentRequestInit } from "./payment-request" -import type { DidUri, Resolvable } from "@agentcommercekit/did" -import type { JwtString } from "@agentcommercekit/jwt" -import type { Verifiable, W3CCredential } from "@agentcommercekit/vc" +import { verifyPaymentReceipt } from "./verify-payment-receipt" describe("verifyPaymentReceipt()", () => { let resolver: Resolvable diff --git a/packages/ack-pay/src/verify-payment-receipt.ts b/packages/ack-pay/src/verify-payment-receipt.ts index 67bd06c..e64eb14 100644 --- a/packages/ack-pay/src/verify-payment-receipt.ts +++ b/packages/ack-pay/src/verify-payment-receipt.ts @@ -1,20 +1,20 @@ -import { isJwtString } from "@agentcommercekit/jwt" +import type { Resolvable } from "@agentcommercekit/did" +import { isJwtString, type JwtString } from "@agentcommercekit/jwt" import { InvalidCredentialError, InvalidCredentialSubjectError, isCredential, parseJwtCredential, - verifyParsedCredential + verifyParsedCredential, + type Verifiable, + type W3CCredential } from "@agentcommercekit/vc" +import type { PaymentRequest } from "./payment-request" import { getReceiptClaimVerifier, isPaymentReceiptCredential } from "./receipt-claim-verifier" import { verifyPaymentRequestToken } from "./verify-payment-request-token" -import type { PaymentRequest } from "./payment-request" -import type { Resolvable } from "@agentcommercekit/did" -import type { JwtString } from "@agentcommercekit/jwt" -import type { Verifiable, W3CCredential } from "@agentcommercekit/vc" interface VerifyPaymentReceiptOptions { /** diff --git a/packages/ack-pay/src/verify-payment-request-token.test.ts b/packages/ack-pay/src/verify-payment-request-token.test.ts index f04ae28..e3b8828 100644 --- a/packages/ack-pay/src/verify-payment-request-token.test.ts +++ b/packages/ack-pay/src/verify-payment-request-token.test.ts @@ -1,21 +1,21 @@ import { createDidDocumentFromKeypair, createDidKeyUri, - getDidResolver + getDidResolver, + type DidDocument, + type DidUri } from "@agentcommercekit/did" import { createJwt, createJwtSigner, - curveToJwtAlgorithm + curveToJwtAlgorithm, + type JwtSigner } from "@agentcommercekit/jwt" -import { generateKeypair } from "@agentcommercekit/keys" +import { generateKeypair, type Keypair } from "@agentcommercekit/keys" import { beforeEach, describe, expect, it } from "vitest" import { createSignedPaymentRequest } from "./create-signed-payment-request" -import { verifyPaymentRequestToken } from "./verify-payment-request-token" import type { PaymentRequestInit } from "./payment-request" -import type { DidDocument, DidUri } from "@agentcommercekit/did" -import type { JwtSigner } from "@agentcommercekit/jwt" -import type { Keypair } from "@agentcommercekit/keys" +import { verifyPaymentRequestToken } from "./verify-payment-request-token" /** * Removes undefined values from the payment request diff --git a/packages/ack-pay/src/verify-payment-request-token.ts b/packages/ack-pay/src/verify-payment-request-token.ts index a09c3f9..4b6e008 100644 --- a/packages/ack-pay/src/verify-payment-request-token.ts +++ b/packages/ack-pay/src/verify-payment-request-token.ts @@ -1,10 +1,9 @@ -import { verifyJwt } from "@agentcommercekit/jwt" +import type { Resolvable } from "@agentcommercekit/did" +import { verifyJwt, type JwtVerified } from "@agentcommercekit/jwt" import * as v from "valibot" import { InvalidPaymentRequestTokenError } from "./errors" -import { paymentRequestSchema } from "./schemas/valibot" import type { PaymentRequest } from "./payment-request" -import type { Resolvable } from "@agentcommercekit/did" -import type { JwtVerified } from "@agentcommercekit/jwt" +import { paymentRequestSchema } from "./schemas/valibot" interface ValidatePaymentRequestTokenOptions { /** diff --git a/packages/agentcommercekit/README.md b/packages/agentcommercekit/README.md index 28cc29a..94fbb0e 100644 --- a/packages/agentcommercekit/README.md +++ b/packages/agentcommercekit/README.md @@ -84,7 +84,7 @@ try { #### Type Guards for Credential Validation ```ts -import { isControllerCredential, isControllerClaim } from "agentcommercekit" +import { isControllerClaim, isControllerCredential } from "agentcommercekit" // Check if a credential is specifically a controller credential isControllerCredential(credential) @@ -167,7 +167,7 @@ const receipt = createPaymentReceipt({ #### Verifying a Payment Receipt ```ts -import { verifyPaymentReceipt, getDidResolver } from "agentcommercekit" +import { getDidResolver, verifyPaymentReceipt } from "agentcommercekit" const verified = await verifyPaymentReceipt(receipt, { resolver: getDidResolver(), @@ -179,9 +179,9 @@ const verified = await verifyPaymentReceipt(receipt, { ```ts import { - isPaymentRequest, + isPaymentReceiptClaim, isPaymentReceiptCredential, - isPaymentReceiptClaim + isPaymentRequest } from "agentcommercekit" // Check if a value is a valid payment request diff --git a/packages/caip/README.md b/packages/caip/README.md index 8f68e8d..a2fdc96 100644 --- a/packages/caip/README.md +++ b/packages/caip/README.md @@ -48,7 +48,7 @@ const parts = caip2Parts("eip155:1") CAIP-10 defines account identifiers across chains: `chainId:accountAddress` ```ts -import { createCaip10AccountId, caip10Parts } from "@agentcommercekit/caip" +import { caip10Parts, createCaip10AccountId } from "@agentcommercekit/caip" // Create an account ID const accountId = createCaip10AccountId( @@ -71,7 +71,7 @@ const parts = caip10Parts(accountId) CAIP-19 defines asset and token identifiers: `chainId/assetNamespace:assetReference/tokenId` ```ts -import type { Caip19AssetType, Caip19AssetId } from "@agentcommercekit/caip" +import type { Caip19AssetId, Caip19AssetType } from "@agentcommercekit/caip" // Asset type (e.g., ERC-721 contract) const nftContract: Caip19AssetType = @@ -132,22 +132,21 @@ const nftToken: Caip19AssetId = ```ts // Zod v4 schemas + +// Valibot schemas import { caip2ChainIdSchema, caip10AccountIdSchema -} from "@agentcommercekit/caip/schemas/zod/v4" - +} from "@agentcommercekit/caip/schemas/valibot" // Zod v3 schemas import { caip2ChainIdSchema, caip10AccountIdSchema } from "@agentcommercekit/caip/schemas/zod/v3" - -// Valibot schemas import { caip2ChainIdSchema, caip10AccountIdSchema -} from "@agentcommercekit/caip/schemas/valibot" +} from "@agentcommercekit/caip/schemas/zod/v4" ``` ## Resources diff --git a/packages/caip/src/caips/caip-10.ts b/packages/caip/src/caips/caip-10.ts index 52d2621..743efd7 100644 --- a/packages/caip/src/caips/caip-10.ts +++ b/packages/caip/src/caips/caip-10.ts @@ -1,5 +1,8 @@ -import { caip2ChainIdPattern } from "./caip-2" -import type { Caip2ChainId, Caip2ChainIdParts } from "./caip-2" +import { + caip2ChainIdPattern, + type Caip2ChainId, + type Caip2ChainIdParts +} from "./caip-2" /** * CAIP-10 Spec - Account ID Components diff --git a/packages/caip/src/caips/caip-19.ts b/packages/caip/src/caips/caip-19.ts index c972f29..153ab6f 100644 --- a/packages/caip/src/caips/caip-19.ts +++ b/packages/caip/src/caips/caip-19.ts @@ -1,5 +1,4 @@ -import { caip2ChainIdPattern } from "./caip-2" -import type { Caip2ChainId } from "./caip-2" +import { caip2ChainIdPattern, type Caip2ChainId } from "./caip-2" /** * CAIP-19 Spec - Asset Identification Components diff --git a/packages/caip/src/schemas/schemas.test.ts b/packages/caip/src/schemas/schemas.test.ts index 136bdd2..ae45f9b 100644 --- a/packages/caip/src/schemas/schemas.test.ts +++ b/packages/caip/src/schemas/schemas.test.ts @@ -1,14 +1,14 @@ import { describe, expect, it } from "vitest" -import * as valibot from "./valibot" -import * as zodv3 from "./zod/v3" -import * as zodv4 from "./zod/v4" import type { + Caip2ChainId, Caip10AccountId, Caip19AssetId, Caip19AssetName, - Caip19AssetType, - Caip2ChainId + Caip19AssetType } from "../caips" +import * as valibot from "./valibot" +import * as zodv3 from "./zod/v3" +import * as zodv4 from "./zod/v4" const schemas = { valibot, diff --git a/packages/caip/src/schemas/valibot.ts b/packages/caip/src/schemas/valibot.ts index a578f7f..ae7c4cd 100644 --- a/packages/caip/src/schemas/valibot.ts +++ b/packages/caip/src/schemas/valibot.ts @@ -1,17 +1,15 @@ import * as v from "valibot" import { + caip2ChainIdRegex, caip10AccountIdRegex, caip19AssetIdRegex, caip19AssetNameRegex, caip19AssetTypeRegex, - caip2ChainIdRegex -} from "../caips" -import type { - Caip10AccountId, - Caip19AssetId, - Caip19AssetName, - Caip19AssetType, - Caip2ChainId + type Caip2ChainId, + type Caip10AccountId, + type Caip19AssetId, + type Caip19AssetName, + type Caip19AssetType } from "../caips" export const caip2ChainIdSchema = v.pipe( diff --git a/packages/caip/src/schemas/zod/v3.ts b/packages/caip/src/schemas/zod/v3.ts index f8622bb..cd2a324 100644 --- a/packages/caip/src/schemas/zod/v3.ts +++ b/packages/caip/src/schemas/zod/v3.ts @@ -1,17 +1,15 @@ import { z } from "zod/v3" import { + caip2ChainIdRegex, caip10AccountIdRegex, caip19AssetIdRegex, caip19AssetNameRegex, caip19AssetTypeRegex, - caip2ChainIdRegex -} from "../../caips" -import type { - Caip10AccountId, - Caip19AssetId, - Caip19AssetName, - Caip19AssetType, - Caip2ChainId + type Caip2ChainId, + type Caip10AccountId, + type Caip19AssetId, + type Caip19AssetName, + type Caip19AssetType } from "../../caips" export const caip2ChainIdSchema = z diff --git a/packages/caip/src/schemas/zod/v4.ts b/packages/caip/src/schemas/zod/v4.ts index 7d7352f..dac7a36 100644 --- a/packages/caip/src/schemas/zod/v4.ts +++ b/packages/caip/src/schemas/zod/v4.ts @@ -1,17 +1,15 @@ import * as z from "zod/v4" import { + caip2ChainIdRegex, caip10AccountIdRegex, caip19AssetIdRegex, caip19AssetNameRegex, caip19AssetTypeRegex, - caip2ChainIdRegex -} from "../../caips" -import type { - Caip10AccountId, - Caip19AssetId, - Caip19AssetName, - Caip19AssetType, - Caip2ChainId + type Caip2ChainId, + type Caip10AccountId, + type Caip19AssetId, + type Caip19AssetName, + type Caip19AssetType } from "../../caips" export const caip2ChainIdSchema = z diff --git a/packages/did/README.md b/packages/did/README.md index 88e2ab6..ab22845 100644 --- a/packages/did/README.md +++ b/packages/did/README.md @@ -17,8 +17,7 @@ pnpm add @agentcommercekit/did ### Basic DID Resolution ```ts -import { getDidResolver, resolveDid } from "@agentcommercekit/did" -import type { DidUri } from "@agentcommercekit/did" +import { getDidResolver, resolveDid, type DidUri } from "@agentcommercekit/did" // Create a resolver with support for did:web, did:key, and did:pkh methods const resolver = getDidResolver() @@ -45,9 +44,9 @@ const { did, didDocument, controller } = await resolveDidWithController( ```ts import { - createDidWebUri, createDidKeyUri, - createDidPkhUri + createDidPkhUri, + createDidWebUri } from "@agentcommercekit/did" import { generateKeypair } from "@agentcommercekit/keys" @@ -71,11 +70,11 @@ const pkhDid = createDidPkhUri( ### Creating DID Documents ```ts -import { generateKeypair } from "@agentcommercekit/keys" import { createDidDocumentFromKeypair, createDidWebDocumentFromKeypair } from "@agentcommercekit/did" +import { generateKeypair } from "@agentcommercekit/keys" const keypair = await generateKeypair("secp256k1") @@ -128,13 +127,12 @@ const { did, didDocument } = createDidWebDocumentFromKeypair({ ```ts // Zod v4 schemas -import { didUriSchema } from "@agentcommercekit/did/schemas/zod/v4" - -// Zod v3 schemas -import { didUriSchema } from "@agentcommercekit/did/schemas/zod/v3" // Valibot schemas import { didUriSchema } from "@agentcommercekit/did/schemas/valibot" +// Zod v3 schemas +import { didUriSchema } from "@agentcommercekit/did/schemas/zod/v3" +import { didUriSchema } from "@agentcommercekit/did/schemas/zod/v4" ``` ## License (MIT) diff --git a/packages/did/src/create-did-document.test.ts b/packages/did/src/create-did-document.test.ts index 5bce751..94758ab 100644 --- a/packages/did/src/create-did-document.test.ts +++ b/packages/did/src/create-did-document.test.ts @@ -2,7 +2,9 @@ import { encodePublicKeyFromKeypair, generateKeypair, keyCurves, - publicKeyEncodings + publicKeyEncodings, + type Keypair, + type PublicKeyEncoding } from "@agentcommercekit/keys" import { bytesToMultibase, @@ -13,7 +15,6 @@ import { createDidDocument, createDidDocumentFromKeypair } from "./create-did-document" -import type { Keypair, PublicKeyEncoding } from "@agentcommercekit/keys" const keyTypeMap = { jwk: "JsonWebKey2020", diff --git a/packages/did/src/create-did-document.ts b/packages/did/src/create-did-document.ts index 14d9d6c..66b0bd8 100644 --- a/packages/did/src/create-did-document.ts +++ b/packages/did/src/create-did-document.ts @@ -1,19 +1,19 @@ -import { encodePublicKeyFromKeypair } from "@agentcommercekit/keys" +import { + encodePublicKeyFromKeypair, + type KeyCurve, + type Keypair, + type PublicKeyEncoding, + type PublicKeyTypeMap, + type PublicKeyWithEncoding +} from "@agentcommercekit/keys" import { base58ToBytes, bytesToMultibase, hexStringToBytes } from "@agentcommercekit/keys/encoding" +import type { VerificationMethod } from "did-resolver" import type { DidDocument } from "./did-document" import type { DidUri } from "./did-uri" -import type { - KeyCurve, - Keypair, - PublicKeyEncoding, - PublicKeyTypeMap, - PublicKeyWithEncoding -} from "@agentcommercekit/keys" -import type { VerificationMethod } from "did-resolver" type LegacyPublicKeyEncoding = "hex" | "base58" @@ -154,7 +154,7 @@ export type CreateDidDocumentOptions = { * value: { * kty: "OKP", * crv: "Ed25519", - * x: "11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo" + * x: "..." * } * } * }) diff --git a/packages/did/src/did-resolvers/did-resolver.ts b/packages/did/src/did-resolvers/did-resolver.ts index 772590b..d68186b 100644 --- a/packages/did/src/did-resolvers/did-resolver.ts +++ b/packages/did/src/did-resolvers/did-resolver.ts @@ -1,11 +1,11 @@ -import { Resolver } from "did-resolver" -import type { DidDocument } from "../did-document" -import type { - DIDResolutionOptions, - DIDResolutionResult, - ResolverOptions, - ResolverRegistry +import { + Resolver, + type DIDResolutionOptions, + type DIDResolutionResult, + type ResolverOptions, + type ResolverRegistry } from "did-resolver" +import type { DidDocument } from "../did-document" export type { Resolvable } from "did-resolver" /** diff --git a/packages/did/src/did-resolvers/get-did-resolver.ts b/packages/did/src/did-resolvers/get-did-resolver.ts index 61b8ec8..7e1830d 100644 --- a/packages/did/src/did-resolvers/get-did-resolver.ts +++ b/packages/did/src/did-resolvers/get-did-resolver.ts @@ -1,10 +1,12 @@ +import type { ResolverOptions } from "did-resolver" import { getResolver as getJwksDidResolver } from "jwks-did-resolver" import { getResolver as getKeyDidResolver } from "key-did-resolver" import { DidResolver } from "./did-resolver" import { getResolver as getPkhDidResolver } from "./pkh-did-resolver" -import { getResolver as getWebDidResolver } from "./web-did-resolver" -import type { DidWebResolverOptions } from "./web-did-resolver" -import type { ResolverOptions } from "did-resolver" +import { + getResolver as getWebDidResolver, + type DidWebResolverOptions +} from "./web-did-resolver" interface GetDidResolverOptions extends ResolverOptions { /** diff --git a/packages/did/src/did-resolvers/pkh-did-resolver.test.ts b/packages/did/src/did-resolvers/pkh-did-resolver.test.ts index 9790e8c..7581890 100644 --- a/packages/did/src/did-resolvers/pkh-did-resolver.test.ts +++ b/packages/did/src/did-resolvers/pkh-did-resolver.test.ts @@ -1,8 +1,8 @@ import { describe, expect, it } from "vitest" -import { resolve } from "./pkh-did-resolver" import fixtureEthereumMainnet from "../../test-fixtures/did-pkh/did:pkh:eip155:1:0xb9c5714089478a327f09197987f16f9e5d936e8a.json" import fixtureBaseSepolia from "../../test-fixtures/did-pkh/did:pkh:eip155:84532:0xa0ae58da58dfa46fa55c3b86545e7065f90ff011.json" import fixtureSolana from "../../test-fixtures/did-pkh/did:pkh:solana:4sGjMW1sUnHzSxGspuhpqLDx6wiyjNtZ:CKg5d12Jhpej1JqtmxLJgaFqqeYjxgPqToJ4LBdvG9Ev.json" +import { resolve } from "./pkh-did-resolver" /** * Test vectors from the did-pkh spec diff --git a/packages/did/src/did-resolvers/pkh-did-resolver.ts b/packages/did/src/did-resolvers/pkh-did-resolver.ts index 24453b4..ef18d5c 100644 --- a/packages/did/src/did-resolvers/pkh-did-resolver.ts +++ b/packages/did/src/did-resolvers/pkh-did-resolver.ts @@ -1,11 +1,11 @@ /** * A `did:pkh` resolver for use with `did-resolver` */ +import type { DIDResolutionResult, DIDResolver } from "did-resolver" import { createDidPkhDocumentFromDidPkhUri, isDidPkhUri } from "../methods/did-pkh" -import type { DIDResolutionResult, DIDResolver } from "did-resolver" export async function resolve(did: string): Promise { if (!isDidPkhUri(did)) { 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 0785579..c1ad45a 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 { getResolver } from "./web-did-resolver" -import type { ParsedDID } from "did-resolver" describe("web-did-resolver", () => { const mockFetch = vi.fn() diff --git a/packages/did/src/did-resolvers/web-did-resolver.ts b/packages/did/src/did-resolvers/web-did-resolver.ts index 77f17d7..b207bd4 100644 --- a/packages/did/src/did-resolvers/web-did-resolver.ts +++ b/packages/did/src/did-resolvers/web-did-resolver.ts @@ -9,15 +9,18 @@ * @see {@link https://github.com/decentralized-identity/web-did-resolver} * @see {@link ../../licenses/web-did-resolver.LICENSE} */ -import { isDidDocument, isDidDocumentForDid } from "../did-document" -import { isDidWebUri } from "../methods/did-web" -import type { DidDocument } from "../did-document" import type { DIDDocument, DIDResolutionResult, DIDResolver, ParsedDID } from "did-resolver" +import { + isDidDocument, + isDidDocumentForDid, + type DidDocument +} from "../did-document" +import { isDidWebUri } from "../methods/did-web" type Fetch = typeof globalThis.fetch diff --git a/packages/did/src/methods/did-key.test.ts b/packages/did/src/methods/did-key.test.ts index ba983f3..66ddb99 100644 --- a/packages/did/src/methods/did-key.test.ts +++ b/packages/did/src/methods/did-key.test.ts @@ -1,9 +1,9 @@ import { generateKeypair, jwkToKeypair } from "@agentcommercekit/keys" +import type { PrivateKeyJwk } from "@agentcommercekit/keys/encoding" import { describe, expect, it } from "vitest" -import { createDidKeyUri, isDidKeyUri } from "./did-key" import { getDidResolver } from "../did-resolvers/get-did-resolver" import type { DidUri } from "../did-uri" -import type { PrivateKeyJwk } from "@agentcommercekit/keys/encoding" +import { createDidKeyUri, isDidKeyUri } from "./did-key" const KNOWN_DID_KEYS: { did: DidUri; jwk: PrivateKeyJwk }[] = [ { diff --git a/packages/did/src/methods/did-key.ts b/packages/did/src/methods/did-key.ts index 2233399..6cc018a 100644 --- a/packages/did/src/methods/did-key.ts +++ b/packages/did/src/methods/did-key.ts @@ -1,8 +1,10 @@ -import { getPublicKeyFromPrivateKey } from "@agentcommercekit/keys" +import { + getPublicKeyFromPrivateKey, + type Keypair +} from "@agentcommercekit/keys" import { bytesToMultibase } from "@agentcommercekit/keys/encoding" import * as varint from "varint" import type { DidUri } from "../did-uri" -import type { Keypair } from "@agentcommercekit/keys" /** * @see {@link https://w3c-ccg.github.io/did-key-spec/} diff --git a/packages/did/src/methods/did-pkh.ts b/packages/did/src/methods/did-pkh.ts index 5cee8d9..bfec940 100644 --- a/packages/did/src/methods/did-pkh.ts +++ b/packages/did/src/methods/did-pkh.ts @@ -1,19 +1,23 @@ /* eslint-disable @cspell/spellchecker */ -import { caip10Parts, createCaip10AccountId } from "@agentcommercekit/caip" import { - isCaip10AccountId, - isCaip2ChainId + caip10Parts, + createCaip10AccountId, + type Caip2ChainId, + type Caip10AccountId +} from "@agentcommercekit/caip" +import { + isCaip2ChainId, + isCaip10AccountId } from "@agentcommercekit/caip/schemas/valibot" import { base58ToBytes, isBase58, publicKeyBytesToJwk } from "@agentcommercekit/keys/encoding" +import type { VerificationMethod } from "did-resolver" import { createDidDocument } from "../create-did-document" import type { DidUri } from "../did-uri" import type { DidUriWithDocument } from "../types" -import type { Caip10AccountId, Caip2ChainId } from "@agentcommercekit/caip" -import type { VerificationMethod } from "did-resolver" /** * Methods for creating and verifying did:pkh documents diff --git a/packages/did/src/methods/did-web.ts b/packages/did/src/methods/did-web.ts index 76e8d3e..105bcad 100644 --- a/packages/did/src/methods/did-web.ts +++ b/packages/did/src/methods/did-web.ts @@ -1,10 +1,8 @@ import { createDidDocument, - createDidDocumentFromKeypair -} from "../create-did-document" -import type { - CreateDidDocumentFromKeypairOptions, - CreateDidDocumentOptions + createDidDocumentFromKeypair, + type CreateDidDocumentFromKeypairOptions, + type CreateDidDocumentOptions } from "../create-did-document" import type { DidUri } from "../did-uri" import type { DidUriWithDocument } from "../types" diff --git a/packages/did/src/resolve-did.test.ts b/packages/did/src/resolve-did.test.ts index 26fc2a9..32ef99d 100644 --- a/packages/did/src/resolve-did.test.ts +++ b/packages/did/src/resolve-did.test.ts @@ -2,10 +2,10 @@ import { generateKeypair } from "@agentcommercekit/keys" import { bytesToHexString } from "@agentcommercekit/keys/encoding" import { describe, expect, it } from "vitest" import { getDidResolver } from "./did-resolvers/get-did-resolver" +import type { DidUri } from "./did-uri" import { DidDocumentNotFoundError, InvalidDidControllerError } from "./errors" import { createDidWebDocument } from "./methods/did-web" import { resolveDid, resolveDidWithController } from "./resolve-did" -import type { DidUri } from "./did-uri" async function generateDid(baseUrl: string, controller?: DidUri) { const keypair = await generateKeypair("secp256k1") diff --git a/packages/did/src/resolve-did.ts b/packages/did/src/resolve-did.ts index 1d109c5..704096e 100644 --- a/packages/did/src/resolve-did.ts +++ b/packages/did/src/resolve-did.ts @@ -1,3 +1,4 @@ +import type { Resolvable } from "did-resolver" import { isDidUri } from "./did-uri" import { DidDocumentNotFoundError, @@ -6,7 +7,6 @@ import { UnsupportedDidMethodError } from "./errors" import type { DidUriWithDocument } from "./types" -import type { Resolvable } from "did-resolver" interface DidUriWithControlledDidDocument extends DidUriWithDocument { controller: DidUriWithDocument diff --git a/packages/did/src/schemas/valibot.ts b/packages/did/src/schemas/valibot.ts index d51e148..992da0c 100644 --- a/packages/did/src/schemas/valibot.ts +++ b/packages/did/src/schemas/valibot.ts @@ -1,7 +1,6 @@ import { caip2ChainIdSchema } from "@agentcommercekit/caip/schemas/valibot" import * as v from "valibot" -import { isDidUri } from "../did-uri" -import type { DidUri } from "../did-uri" +import { isDidUri, type DidUri } from "../did-uri" export const didUriSchema = v.custom(isDidUri, "Invalid DID format") diff --git a/packages/did/src/schemas/zod/v3.ts b/packages/did/src/schemas/zod/v3.ts index 54da134..29efc69 100644 --- a/packages/did/src/schemas/zod/v3.ts +++ b/packages/did/src/schemas/zod/v3.ts @@ -1,7 +1,6 @@ import { caip2ChainIdSchema } from "@agentcommercekit/caip/schemas/zod/v3" import { z } from "zod/v3" -import { isDidUri } from "../../did-uri" -import type { DidUri } from "../../did-uri" +import { isDidUri, type DidUri } from "../../did-uri" export const didUriSchema = z.custom(isDidUri, "Invalid DID format") diff --git a/packages/did/src/schemas/zod/v4.ts b/packages/did/src/schemas/zod/v4.ts index aae8153..2a40071 100644 --- a/packages/did/src/schemas/zod/v4.ts +++ b/packages/did/src/schemas/zod/v4.ts @@ -1,7 +1,6 @@ import { caip2ChainIdSchema } from "@agentcommercekit/caip/schemas/zod/v4" import * as z from "zod/v4" -import { isDidUri } from "../../did-uri" -import type { DidUri } from "../../did-uri" +import { isDidUri, type DidUri } from "../../did-uri" export const didUriSchema = z.custom(isDidUri, "Invalid DID format") diff --git a/packages/jwt/README.md b/packages/jwt/README.md index fd0270d..f3ec177 100644 --- a/packages/jwt/README.md +++ b/packages/jwt/README.md @@ -54,13 +54,12 @@ The package provides schemas for validating JWT strings with Zod and Valibot: ```ts // Zod v4 -import { jwtStringSchema } from "@agentcommercekit/jwt/schemas/zod/v4" - -// Zod v3 -import { jwtStringSchema } from "@agentcommercekit/jwt/schemas/zod/v3" // Valibot import { jwtStringSchema } from "@agentcommercekit/jwt/schemas/valibot" +// Zod v3 +import { jwtStringSchema } from "@agentcommercekit/jwt/schemas/zod/v3" +import { jwtStringSchema } from "@agentcommercekit/jwt/schemas/zod/v4" ``` ## API diff --git a/packages/jwt/src/create-jwt.test.ts b/packages/jwt/src/create-jwt.test.ts index 1dfb0f8..597ecdc 100644 --- a/packages/jwt/src/create-jwt.test.ts +++ b/packages/jwt/src/create-jwt.test.ts @@ -1,9 +1,12 @@ import { generateKeypair } from "@agentcommercekit/keys" -import { createJWT as baseCreateJWT } from "did-jwt" +import { + createJWT as baseCreateJWT, + type JWTOptions, + type JWTPayload +} from "did-jwt" import { beforeEach, describe, expect, it, vi } from "vitest" import { createJwt } from "./create-jwt" import { createJwtSigner } from "./signer" -import type { JWTOptions, JWTPayload } from "did-jwt" vi.mock("did-jwt", async () => { const actual = await vi.importActual("did-jwt") diff --git a/packages/jwt/src/create-jwt.ts b/packages/jwt/src/create-jwt.ts index 05fd7e6..0a1bf25 100644 --- a/packages/jwt/src/create-jwt.ts +++ b/packages/jwt/src/create-jwt.ts @@ -1,8 +1,11 @@ -import { createJWT as baseCreateJWT } from "did-jwt" -import { isJwtString } from "./jwt-string" +import { + createJWT as baseCreateJWT, + type JWTHeader, + type JWTOptions, + type JWTPayload +} from "did-jwt" import type { JwtAlgorithm } from "./jwt-algorithm" -import type { JwtString } from "./jwt-string" -import type { JWTHeader, JWTOptions, JWTPayload } from "did-jwt" +import { isJwtString, type JwtString } from "./jwt-string" export type JwtPayload = JWTPayload export type JwtOptions = JWTOptions diff --git a/packages/jwt/src/jwt-algorithm.ts b/packages/jwt/src/jwt-algorithm.ts index dcb0f22..4d7eb3e 100644 --- a/packages/jwt/src/jwt-algorithm.ts +++ b/packages/jwt/src/jwt-algorithm.ts @@ -1,5 +1,4 @@ -import { isKeyCurve } from "@agentcommercekit/keys" -import type { KeyCurve } from "@agentcommercekit/keys" +import { isKeyCurve, type KeyCurve } from "@agentcommercekit/keys" /** * JWT signing algorithms supported by the JWT library diff --git a/packages/jwt/src/schemas/valibot.ts b/packages/jwt/src/schemas/valibot.ts index 5bdc1b4..b2b8afa 100644 --- a/packages/jwt/src/schemas/valibot.ts +++ b/packages/jwt/src/schemas/valibot.ts @@ -1,6 +1,6 @@ import * as v from "valibot" -import { jwtAlgorithms } from "../jwt-algorithm" import type { JwtHeader, JwtPayload } from "../create-jwt" +import { jwtAlgorithms } from "../jwt-algorithm" import type { JwtString } from "../jwt-string" export const jwtPayloadSchema = v.pipe( diff --git a/packages/jwt/src/schemas/zod/v3.ts b/packages/jwt/src/schemas/zod/v3.ts index ef2a977..1a35f28 100644 --- a/packages/jwt/src/schemas/zod/v3.ts +++ b/packages/jwt/src/schemas/zod/v3.ts @@ -1,7 +1,7 @@ import { z } from "zod/v3" +import type { JwtHeader, JwtPayload } from "../../create-jwt" import { jwtAlgorithms } from "../../jwt-algorithm" import { isJwtString } from "../../jwt-string" -import type { JwtHeader, JwtPayload } from "../../create-jwt" export const jwtPayloadSchema = z .object({ diff --git a/packages/jwt/src/schemas/zod/v4.ts b/packages/jwt/src/schemas/zod/v4.ts index 249eceb..aee58ff 100644 --- a/packages/jwt/src/schemas/zod/v4.ts +++ b/packages/jwt/src/schemas/zod/v4.ts @@ -1,7 +1,7 @@ import * as z from "zod/v4" +import type { JwtHeader, JwtPayload } from "../../create-jwt" import { jwtAlgorithms } from "../../jwt-algorithm" import { isJwtString } from "../../jwt-string" -import type { JwtHeader, JwtPayload } from "../../create-jwt" export const jwtPayloadSchema = z .looseObject({ diff --git a/packages/jwt/src/signer.ts b/packages/jwt/src/signer.ts index 484ada3..bf61792 100644 --- a/packages/jwt/src/signer.ts +++ b/packages/jwt/src/signer.ts @@ -1,6 +1,5 @@ -import { ES256KSigner, ES256Signer, EdDSASigner } from "did-jwt" import type { Keypair } from "@agentcommercekit/keys" -import type { Signer } from "did-jwt" +import { EdDSASigner, ES256KSigner, ES256Signer, type Signer } from "did-jwt" export type JwtSigner = Signer diff --git a/packages/jwt/src/verify.test.ts b/packages/jwt/src/verify.test.ts index 0642449..0c31154 100644 --- a/packages/jwt/src/verify.test.ts +++ b/packages/jwt/src/verify.test.ts @@ -1,10 +1,9 @@ import { generateKeypair } from "@agentcommercekit/keys" -import { verifyJWT } from "did-jwt" +import { verifyJWT, type JWTVerified } from "did-jwt" import { beforeEach, describe, expect, it, vi } from "vitest" import { createJwt } from "./create-jwt" import { createJwtSigner } from "./signer" import { verifyJwt } from "./verify" -import type { JWTVerified } from "did-jwt" // Mock did-jwt for testing vi.mock("did-jwt", async () => { diff --git a/packages/jwt/src/verify.ts b/packages/jwt/src/verify.ts index 0d25bcd..b50b53a 100644 --- a/packages/jwt/src/verify.ts +++ b/packages/jwt/src/verify.ts @@ -1,5 +1,4 @@ -import { verifyJWT } from "did-jwt" -import type { JWTVerified, JWTVerifyOptions } from "did-jwt" +import { verifyJWT, type JWTVerified, type JWTVerifyOptions } from "did-jwt" export type JwtVerified = JWTVerified diff --git a/packages/keys/README.md b/packages/keys/README.md index 14101e8..08560a9 100644 --- a/packages/keys/README.md +++ b/packages/keys/README.md @@ -16,9 +16,9 @@ pnpm add @agentcommercekit/keys ```ts import { + encodePublicKeyFromKeypair, generateKeypair, - keypairToJwk, - encodePublicKeyFromKeypair + keypairToJwk } from "@agentcommercekit/keys" // Generate and format keypairs @@ -49,7 +49,7 @@ const base58PublicKey = encodePublicKeyFromKeypair("base58", keypair) Encoding utilities are also available via subpath exports: ```ts -import { bytesToBase58, base58ToBytes } from "@agentcommercekit/keys/encoding" +import { base58ToBytes, bytesToBase58 } from "@agentcommercekit/keys/encoding" ``` ## License (MIT) diff --git a/packages/keys/src/curves/ed25519.test.ts b/packages/keys/src/curves/ed25519.test.ts index 203ca35..d83ab01 100644 --- a/packages/keys/src/curves/ed25519.test.ts +++ b/packages/keys/src/curves/ed25519.test.ts @@ -1,10 +1,6 @@ import { describe, expect, test } from "vitest" -import { - generateKeypair, - generatePrivateKeyBytes, - isValidPublicKey -} from "./ed25519" import { base58ToBytes } from "../encoding/base58" +import { generateKeypair, isValidPublicKey } from "./ed25519" describe("Ed25519", () => { describe("generateKeypair()", () => { diff --git a/packages/keys/src/curves/secp256k1.test.ts b/packages/keys/src/curves/secp256k1.test.ts index 7ac0ce8..ab6494f 100644 --- a/packages/keys/src/curves/secp256k1.test.ts +++ b/packages/keys/src/curves/secp256k1.test.ts @@ -1,10 +1,10 @@ import { describe, expect, test } from "vitest" +import { hexStringToBytes } from "../encoding/hex" import { generateKeypair, getPublicKeyBytes, isValidPublicKey } from "./secp256k1" -import { hexStringToBytes } from "../encoding/hex" describe("secp256k1", () => { describe("generateKeypair()", () => { diff --git a/packages/keys/src/curves/secp256r1.test.ts b/packages/keys/src/curves/secp256r1.test.ts index 008dc20..d9ad0cd 100644 --- a/packages/keys/src/curves/secp256r1.test.ts +++ b/packages/keys/src/curves/secp256r1.test.ts @@ -1,10 +1,10 @@ import { describe, expect, test } from "vitest" +import { hexStringToBytes } from "../encoding/hex" import { generateKeypair, getPublicKeyBytes, isValidPublicKey } from "./secp256r1" -import { hexStringToBytes } from "../encoding/hex" describe("secp256r1", () => { describe("generateKeypair()", () => { diff --git a/packages/keys/src/encoding/base58.test.ts b/packages/keys/src/encoding/base58.test.ts index a986870..fd4a01e 100644 --- a/packages/keys/src/encoding/base58.test.ts +++ b/packages/keys/src/encoding/base58.test.ts @@ -1,7 +1,7 @@ import { describe, expect, test } from "vitest" import { - base58ToBytes, base58btcToBytes, + base58ToBytes, bytesToBase58, bytesToBase58btc } from "./base58" diff --git a/packages/keys/src/encoding/jwk.test.ts b/packages/keys/src/encoding/jwk.test.ts index fdb94fb..8654e90 100644 --- a/packages/keys/src/encoding/jwk.test.ts +++ b/packages/keys/src/encoding/jwk.test.ts @@ -4,9 +4,10 @@ import { isPrivateKeyJwk, isPublicKeyJwk, publicKeyBytesToJwk, - publicKeyJwkToBytes + publicKeyJwkToBytes, + type PublicKeyJwkEd25519, + type PublicKeyJwkSecp256k1 } from "./jwk" -import type { PublicKeyJwkEd25519, PublicKeyJwkSecp256k1 } from "./jwk" describe("JWK encoding", () => { // Test data: 32 bytes for Ed25519, 65 bytes for secp256k1 diff --git a/packages/keys/src/encoding/jwk.ts b/packages/keys/src/encoding/jwk.ts index d319ade..e4a998a 100644 --- a/packages/keys/src/encoding/jwk.ts +++ b/packages/keys/src/encoding/jwk.ts @@ -1,6 +1,6 @@ -import { base64urlToBytes, bytesToBase64url } from "./base64" -import { getPublicKeyFromPrivateKey } from "../public-key" import type { KeyCurve } from "../key-curves" +import { getPublicKeyFromPrivateKey } from "../public-key" +import { base64urlToBytes, bytesToBase64url } from "./base64" /** * JWK-encoding diff --git a/packages/keys/src/encoding/multibase.test.ts b/packages/keys/src/encoding/multibase.test.ts index 199a990..e15c9a1 100644 --- a/packages/keys/src/encoding/multibase.test.ts +++ b/packages/keys/src/encoding/multibase.test.ts @@ -3,9 +3,9 @@ import { bytesToMultibase, getMultibaseEncoding, isMultibase, - multibaseToBytes + multibaseToBytes, + type MultibaseEncoding } from "./multibase" -import type { MultibaseEncoding } from "./multibase" describe("multibase", () => { // Test data: "Hello, World!" in different encodings diff --git a/packages/keys/src/keypair.ts b/packages/keys/src/keypair.ts index 5530e40..36c4f44 100644 --- a/packages/keys/src/keypair.ts +++ b/packages/keys/src/keypair.ts @@ -5,9 +5,9 @@ import { base64urlToBytes } from "./encoding/base64" import { getPublicKeyJwk, privateKeyBytesToJwk, - publicKeyJwkToBytes + publicKeyJwkToBytes, + type PrivateKeyJwk } from "./encoding/jwk" -import type { PrivateKeyJwk } from "./encoding/jwk" import type { KeyCurve } from "./key-curves" export interface Keypair { diff --git a/packages/keys/src/public-key.ts b/packages/keys/src/public-key.ts index 8256920..b0c9743 100644 --- a/packages/keys/src/public-key.ts +++ b/packages/keys/src/public-key.ts @@ -3,9 +3,8 @@ import * as secp256k1 from "./curves/secp256k1" import * as secp256r1 from "./curves/secp256r1" import { bytesToBase58 } from "./encoding/base58" import { bytesToHexString } from "./encoding/hex" -import { publicKeyBytesToJwk } from "./encoding/jwk" +import { publicKeyBytesToJwk, type PublicKeyJwk } from "./encoding/jwk" import { bytesToMultibase } from "./encoding/multibase" -import type { PublicKeyJwk } from "./encoding/jwk" import type { KeyCurve } from "./key-curves" import type { Keypair } from "./keypair" diff --git a/packages/vc/README.md b/packages/vc/README.md index 7fceef8..d1620e1 100644 --- a/packages/vc/README.md +++ b/packages/vc/README.md @@ -53,8 +53,8 @@ const { jwt, verifiableCredential } = await signCredential(credential, { ```ts import { - verifyParsedCredential, - parsedJwtCredential + parsedJwtCredential, + verifyParsedCredential } from "@agentcommercekit/vc" // Parse JWT credential @@ -108,13 +108,12 @@ const revoked = await isRevoked(credential) ```ts // Zod v4 schemas -import { credentialSchema } from "@agentcommercekit/vc/schemas/zod/v4" - -// Zod v3 schemas -import { credentialSchema } from "@agentcommercekit/vc/schemas/zod/v3" // Valibot schemas import { credentialSchema } from "@agentcommercekit/vc/schemas/valibot" +// Zod v3 schemas +import { credentialSchema } from "@agentcommercekit/vc/schemas/zod/v3" +import { credentialSchema } from "@agentcommercekit/vc/schemas/zod/v4" ``` ## License (MIT) diff --git a/packages/vc/src/create-presentation.ts b/packages/vc/src/create-presentation.ts index b19720e..3af09bc 100644 --- a/packages/vc/src/create-presentation.ts +++ b/packages/vc/src/create-presentation.ts @@ -1,5 +1,5 @@ -import type { Verifiable, W3CCredential, W3CPresentation } from "./types" import type { DidUri } from "@agentcommercekit/did" +import type { Verifiable, W3CCredential, W3CPresentation } from "./types" export type CreatePresentationParams = { /** diff --git a/packages/vc/src/is-credential.ts b/packages/vc/src/is-credential.ts index 00d9c6a..ec70174 100644 --- a/packages/vc/src/is-credential.ts +++ b/packages/vc/src/is-credential.ts @@ -1,6 +1,6 @@ +import type { W3CCredential } from "did-jwt-vc" import * as v from "valibot" import { credentialSchema } from "./schemas/valibot" -import type { W3CCredential } from "did-jwt-vc" /** * Check if a value is a valid W3C credential diff --git a/packages/vc/src/revocation/is-status-list-credential.ts b/packages/vc/src/revocation/is-status-list-credential.ts index 4ba9d7d..0e42991 100644 --- a/packages/vc/src/revocation/is-status-list-credential.ts +++ b/packages/vc/src/revocation/is-status-list-credential.ts @@ -1,8 +1,8 @@ import * as v from "valibot" import { isCredential } from "../is-credential" import { bitstringStatusListClaimSchema } from "../schemas/valibot" -import type { BitstringStatusListCredential } from "./types" import type { CredentialSubject } from "../types" +import type { BitstringStatusListCredential } from "./types" function isStatusListClaim( credentialSubject: CredentialSubject diff --git a/packages/vc/src/revocation/make-revocable.test.ts b/packages/vc/src/revocation/make-revocable.test.ts index 4d2b5fe..e6c9004 100644 --- a/packages/vc/src/revocation/make-revocable.test.ts +++ b/packages/vc/src/revocation/make-revocable.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it } from "vitest" -import { makeRevocable } from "./make-revocable" import type { W3CCredential } from "../types" +import { makeRevocable } from "./make-revocable" describe("makeRevocable", () => { const mockCredential: W3CCredential = { diff --git a/packages/vc/src/revocation/types.ts b/packages/vc/src/revocation/types.ts index fd638f0..3da3ba5 100644 --- a/packages/vc/src/revocation/types.ts +++ b/packages/vc/src/revocation/types.ts @@ -1,6 +1,6 @@ +import type * as v from "valibot" import type { bitstringStatusListClaimSchema } from "../schemas/valibot" import type { W3CCredential } from "../types" -import type * as v from "valibot" type BitstringStatusListEntry = { id: string diff --git a/packages/vc/src/signing/sign-credential.test.ts b/packages/vc/src/signing/sign-credential.test.ts index 5524296..e452923 100644 --- a/packages/vc/src/signing/sign-credential.test.ts +++ b/packages/vc/src/signing/sign-credential.test.ts @@ -7,8 +7,8 @@ import { createJwtSigner, verifyJwt } from "@agentcommercekit/jwt" import { generateKeypair } from "@agentcommercekit/keys" import { expect, test } from "vitest" import { createCredential } from "../create-credential" -import { signCredential } from "./sign-credential" import type { JwtCredentialPayload } from "../types" +import { signCredential } from "./sign-credential" test("signCredential creates a valid JWT and verifiable credential", async () => { const resolver = getDidResolver() diff --git a/packages/vc/src/signing/sign-credential.ts b/packages/vc/src/signing/sign-credential.ts index c36cf1c..eff5fc2 100644 --- a/packages/vc/src/signing/sign-credential.ts +++ b/packages/vc/src/signing/sign-credential.ts @@ -1,20 +1,7 @@ -import { isJwtString } from "@agentcommercekit/jwt" -import { createVerifiableCredentialJwt, verifyCredential } from "did-jwt-vc" +import { isJwtString, type JwtString } from "@agentcommercekit/jwt" +import { createVerifiableCredentialJwt } from "did-jwt-vc" +import type { W3CCredential } from "../types" import type { Signer } from "./types" -import type { Verifiable, W3CCredential } from "../types" -import type { Resolvable } from "@agentcommercekit/did" -import type { JwtString } from "@agentcommercekit/jwt" - -type SignedCredential = { - /** - * The signed {@link Verifiable} credential - */ - verifiableCredential: Verifiable - /** - * The JWT string representation of the signed credential - */ - jwt: JwtString -} /** * Signs a credential with a given issuer. diff --git a/packages/vc/src/signing/sign-presentation.test.ts b/packages/vc/src/signing/sign-presentation.test.ts index d7c25ca..a926412 100644 --- a/packages/vc/src/signing/sign-presentation.test.ts +++ b/packages/vc/src/signing/sign-presentation.test.ts @@ -7,9 +7,9 @@ import { createJwtSigner, verifyJwt } from "@agentcommercekit/jwt" import { generateKeypair } from "@agentcommercekit/keys" import { describe, expect, it } from "vitest" import { createPresentation } from "../create-presentation" +import type { Verifiable, W3CCredential } from "../types" import { signPresentation } from "./sign-presentation" import type { Signer } from "./types" -import type { Verifiable, W3CCredential } from "../types" const resolver = getDidResolver() const holderKeypair = await generateKeypair("secp256k1") diff --git a/packages/vc/src/signing/sign-presentation.ts b/packages/vc/src/signing/sign-presentation.ts index 1d87a12..e5d1a49 100644 --- a/packages/vc/src/signing/sign-presentation.ts +++ b/packages/vc/src/signing/sign-presentation.ts @@ -1,8 +1,7 @@ -import { isJwtString } from "@agentcommercekit/jwt" +import { isJwtString, type JwtString } from "@agentcommercekit/jwt" import { createVerifiablePresentationJwt } from "did-jwt-vc" -import type { Signer } from "./types" import type { W3CPresentation } from "../types" -import type { JwtString } from "@agentcommercekit/jwt" +import type { Signer } from "./types" type SignPresentationOptions = { challenge?: string diff --git a/packages/vc/src/verification/is-expired.test.ts b/packages/vc/src/verification/is-expired.test.ts index 267b7df..e240f44 100644 --- a/packages/vc/src/verification/is-expired.test.ts +++ b/packages/vc/src/verification/is-expired.test.ts @@ -1,6 +1,6 @@ import { describe, expect, it, vi } from "vitest" -import { isExpired } from "./is-expired" import type { Verifiable, W3CCredential } from "../types" +import { isExpired } from "./is-expired" describe("isExpired", () => { it("returns false when credential has no expiration date", () => { diff --git a/packages/vc/src/verification/is-revoked.test.ts b/packages/vc/src/verification/is-revoked.test.ts index dd20151..170b5af 100644 --- a/packages/vc/src/verification/is-revoked.test.ts +++ b/packages/vc/src/verification/is-revoked.test.ts @@ -1,8 +1,8 @@ import { BitBuffer } from "bit-buffers" import { afterEach, beforeEach, describe, expect, it, vi } from "vitest" -import { isRevocable, isRevoked } from "./is-revoked" import { createStatusListCredential } from "../revocation/status-list-credential" import type { Verifiable, W3CCredential } from "../types" +import { isRevocable, isRevoked } from "./is-revoked" describe("isRevocable", () => { it("returns false if no credential status is present", () => { diff --git a/packages/vc/src/verification/parse-jwt-credential.test.ts b/packages/vc/src/verification/parse-jwt-credential.test.ts index 0402c6f..7cbec42 100644 --- a/packages/vc/src/verification/parse-jwt-credential.test.ts +++ b/packages/vc/src/verification/parse-jwt-credential.test.ts @@ -6,9 +6,9 @@ import { import { createJwtSigner } from "@agentcommercekit/jwt" import { generateKeypair } from "@agentcommercekit/keys" import { expect, test } from "vitest" -import { parseJwtCredential } from "./parse-jwt-credential" import { createCredential } from "../create-credential" import { signCredential } from "../signing/sign-credential" +import { parseJwtCredential } from "./parse-jwt-credential" test("parseJwtCredential should parse a valid credential", async () => { const resolver = getDidResolver() diff --git a/packages/vc/src/verification/parse-jwt-credential.ts b/packages/vc/src/verification/parse-jwt-credential.ts index ed06c1c..1b4303c 100644 --- a/packages/vc/src/verification/parse-jwt-credential.ts +++ b/packages/vc/src/verification/parse-jwt-credential.ts @@ -1,6 +1,6 @@ +import type { Resolvable } from "@agentcommercekit/did" import { verifyCredential } from "did-jwt-vc" import type { Verifiable, W3CCredential } from "../types" -import type { Resolvable } from "@agentcommercekit/did" /** * Parse a JWT credential diff --git a/packages/vc/src/verification/types.ts b/packages/vc/src/verification/types.ts index 2d875fa..f6ce5ab 100644 --- a/packages/vc/src/verification/types.ts +++ b/packages/vc/src/verification/types.ts @@ -1,5 +1,5 @@ -import type { CredentialSubject } from "../types" import type { Resolvable } from "@agentcommercekit/did" +import type { CredentialSubject } from "../types" export type ClaimVerifier = { accepts(type: string[]): boolean diff --git a/packages/vc/src/verification/verify-parsed-credential.test.ts b/packages/vc/src/verification/verify-parsed-credential.test.ts index d97c73a..02ab6aa 100644 --- a/packages/vc/src/verification/verify-parsed-credential.test.ts +++ b/packages/vc/src/verification/verify-parsed-credential.test.ts @@ -5,11 +5,8 @@ import { } from "@agentcommercekit/did" import { generateKeypair } from "@agentcommercekit/keys" import { afterEach, beforeEach, describe, expect, it, vi } from "vitest" -import { isExpired } from "./is-expired" -import { isRevoked } from "./is-revoked" -import { verifyParsedCredential } from "./verify-parsed-credential" -import { verifyProof } from "./verify-proof" import { createCredential } from "../create-credential" +import type { Verifiable, W3CCredential } from "../types" import { CredentialExpiredError, CredentialRevokedError, @@ -17,7 +14,10 @@ import { UnsupportedCredentialTypeError, UntrustedIssuerError } from "./errors" -import type { Verifiable, W3CCredential } from "../types" +import { isExpired } from "./is-expired" +import { isRevoked } from "./is-revoked" +import { verifyParsedCredential } from "./verify-parsed-credential" +import { verifyProof } from "./verify-proof" vi.mock("./is-expired", () => ({ isExpired: vi.fn() diff --git a/packages/vc/src/verification/verify-parsed-credential.ts b/packages/vc/src/verification/verify-parsed-credential.ts index 933c327..8a68034 100644 --- a/packages/vc/src/verification/verify-parsed-credential.ts +++ b/packages/vc/src/verification/verify-parsed-credential.ts @@ -1,3 +1,5 @@ +import type { Resolvable } from "@agentcommercekit/did" +import type { Verifiable, W3CCredential } from "../types" import { CredentialExpiredError, CredentialRevokedError, @@ -7,10 +9,8 @@ import { } from "./errors" import { isExpired } from "./is-expired" import { isRevoked } from "./is-revoked" -import { verifyProof } from "./verify-proof" import type { ClaimVerifier } from "./types" -import type { Verifiable, W3CCredential } from "../types" -import type { Resolvable } from "@agentcommercekit/did" +import { verifyProof } from "./verify-proof" type VerifyCredentialOptions = { /** diff --git a/packages/vc/src/verification/verify-proof.test.ts b/packages/vc/src/verification/verify-proof.test.ts index ace09d2..b5732a6 100644 --- a/packages/vc/src/verification/verify-proof.test.ts +++ b/packages/vc/src/verification/verify-proof.test.ts @@ -1,9 +1,8 @@ -import { verifyCredential } from "did-jwt-vc" +import type { Resolvable } from "@agentcommercekit/did" +import { verifyCredential, type VerifiedCredential } from "did-jwt-vc" import { describe, expect, it, vi } from "vitest" import { InvalidProofError, UnsupportedProofTypeError } from "./errors" import { verifyProof } from "./verify-proof" -import type { Resolvable } from "@agentcommercekit/did" -import type { VerifiedCredential } from "did-jwt-vc" vi.mock("did-jwt-vc", async () => { const actual = await vi.importActual("did-jwt-vc") diff --git a/packages/vc/src/verification/verify-proof.ts b/packages/vc/src/verification/verify-proof.ts index 53549d1..c8d74e6 100644 --- a/packages/vc/src/verification/verify-proof.ts +++ b/packages/vc/src/verification/verify-proof.ts @@ -1,7 +1,7 @@ +import type { Resolvable } from "@agentcommercekit/did" import { verifyCredential } from "did-jwt-vc" -import { InvalidProofError, UnsupportedProofTypeError } from "./errors" import type { Verifiable, W3CCredential } from "../types" -import type { Resolvable } from "@agentcommercekit/did" +import { InvalidProofError, UnsupportedProofTypeError } from "./errors" interface JwtProof { type: "JwtProof2020" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4097e78..c355fea 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -14,15 +14,24 @@ importers: '@changesets/cli': specifier: 2.29.4 version: 2.29.4 + '@ianvs/prettier-plugin-sort-imports': + specifier: 4.7.0 + version: 4.7.0(@prettier/plugin-oxc@0.0.4)(prettier@3.6.2) + '@prettier/plugin-oxc': + specifier: 0.0.4 + version: 0.0.4 '@repo/typescript-config': specifier: workspace:* version: link:tools/typescript-config prettier: - specifier: 3.5.3 - version: 3.5.3 + specifier: 3.6.2 + version: 3.6.2 + prettier-plugin-jsdoc: + specifier: 1.3.3 + version: 1.3.3(prettier@3.6.2) prettier-plugin-packagejson: - specifier: 2.5.14 - version: 2.5.14(prettier@3.5.3) + specifier: 2.5.19 + version: 2.5.19(prettier@3.6.2) turbo: specifier: 2.5.3 version: 2.5.3 @@ -930,6 +939,10 @@ packages: resolution: {integrity: sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==} engines: {node: '>=6.9.0'} + '@babel/helper-globals@7.28.0': + resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} + engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.27.1': resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} @@ -947,6 +960,14 @@ packages: resolution: {integrity: sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==} engines: {node: '>=6.9.0'} + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.28.5': + resolution: {integrity: sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==} + engines: {node: '>=6.9.0'} + '@babel/types@7.28.5': resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} @@ -1639,6 +1660,24 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@ianvs/prettier-plugin-sort-imports@4.7.0': + resolution: {integrity: sha512-soa2bPUJAFruLL4z/CnMfSEKGznm5ebz29fIa9PxYtu8HHyLKNE1NXAs6dylfw1jn/ilEIfO2oLLN6uAafb7DA==} + peerDependencies: + '@prettier/plugin-oxc': ^0.0.4 + '@vue/compiler-sfc': 2.7.x || 3.x + content-tag: ^4.0.0 + prettier: 2 || 3 || ^4.0.0-0 + prettier-plugin-ember-template-tag: ^2.1.0 + peerDependenciesMeta: + '@prettier/plugin-oxc': + optional: true + '@vue/compiler-sfc': + optional: true + content-tag: + optional: true + prettier-plugin-ember-template-tag: + optional: true + '@img/sharp-darwin-arm64@0.33.5': resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} @@ -2030,13 +2069,109 @@ packages: resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} engines: {node: '>=8.0.0'} + '@oxc-parser/binding-android-arm64@0.74.0': + resolution: {integrity: sha512-lgq8TJq22eyfojfa2jBFy2m66ckAo7iNRYDdyn9reXYA3I6Wx7tgGWVx1JAp1lO+aUiqdqP/uPlDaETL9tqRcg==} + engines: {node: '>=20.0.0'} + cpu: [arm64] + os: [android] + + '@oxc-parser/binding-darwin-arm64@0.74.0': + resolution: {integrity: sha512-xbY/io/hkARggbpYEMFX6CwFzb7f4iS6WuBoBeZtdqRWfIEi7sm/uYWXfyVeB8uqOATvJ07WRFC2upI8PSI83g==} + engines: {node: '>=20.0.0'} + cpu: [arm64] + os: [darwin] + + '@oxc-parser/binding-darwin-x64@0.74.0': + resolution: {integrity: sha512-FIj2gAGtFaW0Zk+TnGyenMUoRu1ju+kJ/h71D77xc1owOItbFZFGa+4WSVck1H8rTtceeJlK+kux+vCjGFCl9Q==} + engines: {node: '>=20.0.0'} + cpu: [x64] + os: [darwin] + + '@oxc-parser/binding-freebsd-x64@0.74.0': + resolution: {integrity: sha512-W1I+g5TJg0TRRMHgEWNWsTIfe782V3QuaPgZxnfPNmDMywYdtlzllzclBgaDq6qzvZCCQc/UhvNb37KWTCTj8A==} + engines: {node: '>=20.0.0'} + cpu: [x64] + os: [freebsd] + + '@oxc-parser/binding-linux-arm-gnueabihf@0.74.0': + resolution: {integrity: sha512-gxqkyRGApeVI8dgvJ19SYe59XASW3uVxF1YUgkE7peW/XIg5QRAOVTFKyTjI9acYuK1MF6OJHqx30cmxmZLtiQ==} + engines: {node: '>=20.0.0'} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm-musleabihf@0.74.0': + resolution: {integrity: sha512-jpnAUP4Fa93VdPPDzxxBguJmldj/Gpz7wTXKFzpAueqBMfZsy9KNC+0qT2uZ9HGUDMzNuKw0Se3bPCpL/gfD2Q==} + engines: {node: '>=20.0.0'} + cpu: [arm] + os: [linux] + + '@oxc-parser/binding-linux-arm64-gnu@0.74.0': + resolution: {integrity: sha512-fcWyM7BNfCkHqIf3kll8fJctbR/PseL4RnS2isD9Y3FFBhp4efGAzhDaxIUK5GK7kIcFh1P+puIRig8WJ6IMVQ==} + engines: {node: '>=20.0.0'} + cpu: [arm64] + os: [linux] + + '@oxc-parser/binding-linux-arm64-musl@0.74.0': + resolution: {integrity: sha512-AMY30z/C77HgiRRJX7YtVUaelKq1ex0aaj28XoJu4SCezdS8i0IftUNTtGS1UzGjGZB8zQz5SFwVy4dRu4GLwg==} + engines: {node: '>=20.0.0'} + cpu: [arm64] + os: [linux] + + '@oxc-parser/binding-linux-riscv64-gnu@0.74.0': + resolution: {integrity: sha512-/RZAP24TgZo4vV/01TBlzRqs0R7E6xvatww4LnmZEBBulQBU/SkypDywfriFqWuFoa61WFXPV7sLcTjJGjim/w==} + engines: {node: '>=20.0.0'} + cpu: [riscv64] + os: [linux] + + '@oxc-parser/binding-linux-s390x-gnu@0.74.0': + resolution: {integrity: sha512-620J1beNAlGSPBD+Msb3ptvrwxu04B8iULCH03zlf0JSLy/5sqlD6qBs0XUVkUJv1vbakUw1gfVnUQqv0UTuEg==} + engines: {node: '>=20.0.0'} + cpu: [s390x] + os: [linux] + + '@oxc-parser/binding-linux-x64-gnu@0.74.0': + resolution: {integrity: sha512-WBFgQmGtFnPNzHyLKbC1wkYGaRIBxXGofO0+hz1xrrkPgbxbJS1Ukva1EB8sPaVBBQ52Bdc2GjLSp721NWRvww==} + engines: {node: '>=20.0.0'} + cpu: [x64] + os: [linux] + + '@oxc-parser/binding-linux-x64-musl@0.74.0': + resolution: {integrity: sha512-y4mapxi0RGqlp3t6Sm+knJlAEqdKDYrEue2LlXOka/F2i4sRN0XhEMPiSOB3ppHmvK4I2zY2XBYTsX1Fel0fAg==} + engines: {node: '>=20.0.0'} + cpu: [x64] + os: [linux] + + '@oxc-parser/binding-wasm32-wasi@0.74.0': + resolution: {integrity: sha512-yDS9bRDh5ymobiS2xBmjlrGdUuU61IZoJBaJC5fELdYT5LJNBXlbr3Yc6m2PWfRJwkH6Aq5fRvxAZ4wCbkGa8w==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@oxc-parser/binding-win32-arm64-msvc@0.74.0': + resolution: {integrity: sha512-XFWY52Rfb4N5wEbMCTSBMxRkDLGbAI9CBSL24BIDywwDJMl31gHEVlmHdCDRoXAmanCI6gwbXYTrWe0HvXJ7Aw==} + engines: {node: '>=20.0.0'} + cpu: [arm64] + os: [win32] + + '@oxc-parser/binding-win32-x64-msvc@0.74.0': + resolution: {integrity: sha512-1D3x6iU2apLyfTQHygbdaNbX3nZaHu4yaXpD7ilYpoLo7f0MX0tUuoDrqJyJrVGqvyXgc0uz4yXz9tH9ZZhvvg==} + engines: {node: '>=20.0.0'} + cpu: [x64] + os: [win32] + '@oxc-project/types@0.70.0': resolution: {integrity: sha512-ngyLUpUjO3dpqygSRQDx7nMx8+BmXbWOU4oIwTJFV2MVIDG7knIZwgdwXlQWLg3C3oxg1lS7ppMtPKqKFb7wzw==} + '@oxc-project/types@0.74.0': + resolution: {integrity: sha512-KOw/RZrVlHGhCXh1RufBFF7Nuo7HdY5w1lRJukM/igIl6x9qtz8QycDvZdzb4qnHO7znrPyo2sJrFJK2eKHgfQ==} + '@pkgr/core@0.2.9': resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + '@prettier/plugin-oxc@0.0.4': + resolution: {integrity: sha512-UGXe+g/rSRbglL0FOJiar+a+nUrst7KaFmsg05wYbKiInGWP6eAj/f8A2Uobgo5KxEtb2X10zeflNH6RK2xeIQ==} + engines: {node: '>=14'} + '@puppeteer/browsers@2.3.0': resolution: {integrity: sha512-ioXoq9gPxkss4MYhD+SFaU9p1IHFUX0ILAWFPyjGaBdjLsYAlZw6j1iLA0N/m12uVHLFDfSYNF7EQccjinIMDA==} engines: {node: '>=18'} @@ -2945,6 +3080,9 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + binary-searching@2.0.5: + resolution: {integrity: sha512-v4N2l3RxL+m4zDxyxz3Ne2aTmiPn8ZUpKFpdPtO+ItW1NcTCXA7JeHG5GMBSvoKSkQZ9ycS+EouDVxYB9ufKWA==} + bindings@1.5.0: resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} @@ -5031,6 +5169,10 @@ packages: typescript: optional: true + oxc-parser@0.74.0: + resolution: {integrity: sha512-2tDN/ttU8WE6oFh8EzKNam7KE7ZXSG5uXmvX85iNzxdJfMssDWcj3gpYzZi1E04XuE7m3v1dVWl/8BE886vPGw==} + engines: {node: '>=20.0.0'} + p-any@4.0.0: resolution: {integrity: sha512-S/B50s+pAVe0wmEZHmBs/9yJXeZ5KhHzOsgKzt0hRdgkoR3DxW9ts46fcsWi/r3VnzsnkKS7q4uimze+zjdryw==} engines: {node: '>=12.20'} @@ -5178,8 +5320,14 @@ packages: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier-plugin-packagejson@2.5.14: - resolution: {integrity: sha512-h+3tSpr2nVpp+YOK1MDIYtYhHVXr8/0V59UUbJpIJFaqi3w4fvUokJo6eV8W+vELrUXIZzJ+DKm5G7lYzrMcKQ==} + prettier-plugin-jsdoc@1.3.3: + resolution: {integrity: sha512-YIxejcbPYK4N58jHGiXjYvrCzBMyvV2AEMSoF5LvqqeMEI0nsmww57I6NGnpVc0AU9ncFCTEBoYHN/xuBf80YA==} + engines: {node: '>=14.13.1 || >=16.0.0'} + peerDependencies: + prettier: ^3.0.0 + + prettier-plugin-packagejson@2.5.19: + resolution: {integrity: sha512-Qsqp4+jsZbKMpEGZB1UP1pxeAT8sCzne2IwnKkr+QhUe665EXUo3BAvTf1kAPCqyMv9kg3ZmO0+7eOni/C6Uag==} peerDependencies: prettier: '>= 1.16.0' peerDependenciesMeta: @@ -5191,8 +5339,8 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.5.3: - resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} engines: {node: '>=14'} hasBin: true @@ -5615,8 +5763,9 @@ packages: sort-object-keys@1.1.3: resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==} - sort-package-json@3.2.1: - resolution: {integrity: sha512-rTfRdb20vuoAn7LDlEtCqOkYfl2X+Qze6cLbNOzcDpbmKEhJI30tTN44d5shbKJnXsvz24QQhlCm81Bag7EOKg==} + sort-package-json@3.4.0: + resolution: {integrity: sha512-97oFRRMM2/Js4oEA9LJhjyMlde+2ewpZQf53pgue27UkbEXfHJnDzHlUxQ/DWUkzqmp7DFwJp8D+wi/TYeQhpA==} + engines: {node: '>=20'} hasBin: true source-map-js@1.2.1: @@ -5760,10 +5909,6 @@ packages: resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} engines: {node: ^14.18.0 || >=16.0.0} - synckit@0.11.6: - resolution: {integrity: sha512-2pR2ubZSV64f/vqm9eLPz/KOvR9Dm+Co/5ChLgeHl0yEDRc6h5hXHoxEQH8Y5Ljycozd3p1k5TTSVdzYGkPvLw==} - engines: {node: ^14.18.0 || >=16.0.0} - tar-fs@2.1.4: resolution: {integrity: sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==} @@ -6478,6 +6623,8 @@ snapshots: '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 + '@babel/helper-globals@7.28.0': {} + '@babel/helper-string-parser@7.27.1': {} '@babel/helper-validator-identifier@7.28.5': {} @@ -6488,6 +6635,24 @@ snapshots: '@babel/runtime@7.28.4': {} + '@babel/template@7.27.2': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.28.5 + '@babel/types': 7.28.5 + + '@babel/traverse@7.28.5': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.5 + '@babel/helper-globals': 7.28.0 + '@babel/parser': 7.28.5 + '@babel/template': 7.27.2 + '@babel/types': 7.28.5 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + '@babel/types@7.28.5': dependencies: '@babel/helper-string-parser': 7.27.1 @@ -7143,6 +7308,19 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@ianvs/prettier-plugin-sort-imports@4.7.0(@prettier/plugin-oxc@0.0.4)(prettier@3.6.2)': + dependencies: + '@babel/generator': 7.28.5 + '@babel/parser': 7.28.5 + '@babel/traverse': 7.28.5 + '@babel/types': 7.28.5 + prettier: 3.6.2 + semver: 7.7.3 + optionalDependencies: + '@prettier/plugin-oxc': 0.0.4 + transitivePeerDependencies: + - supports-color + '@img/sharp-darwin-arm64@0.33.5': optionalDependencies: '@img/sharp-libvips-darwin-arm64': 1.0.4 @@ -7726,10 +7904,63 @@ snapshots: '@opentelemetry/api@1.9.0': {} + '@oxc-parser/binding-android-arm64@0.74.0': + optional: true + + '@oxc-parser/binding-darwin-arm64@0.74.0': + optional: true + + '@oxc-parser/binding-darwin-x64@0.74.0': + optional: true + + '@oxc-parser/binding-freebsd-x64@0.74.0': + optional: true + + '@oxc-parser/binding-linux-arm-gnueabihf@0.74.0': + optional: true + + '@oxc-parser/binding-linux-arm-musleabihf@0.74.0': + optional: true + + '@oxc-parser/binding-linux-arm64-gnu@0.74.0': + optional: true + + '@oxc-parser/binding-linux-arm64-musl@0.74.0': + optional: true + + '@oxc-parser/binding-linux-riscv64-gnu@0.74.0': + optional: true + + '@oxc-parser/binding-linux-s390x-gnu@0.74.0': + optional: true + + '@oxc-parser/binding-linux-x64-gnu@0.74.0': + optional: true + + '@oxc-parser/binding-linux-x64-musl@0.74.0': + optional: true + + '@oxc-parser/binding-wasm32-wasi@0.74.0': + dependencies: + '@napi-rs/wasm-runtime': 0.2.12 + optional: true + + '@oxc-parser/binding-win32-arm64-msvc@0.74.0': + optional: true + + '@oxc-parser/binding-win32-x64-msvc@0.74.0': + optional: true + '@oxc-project/types@0.70.0': {} + '@oxc-project/types@0.74.0': {} + '@pkgr/core@0.2.9': {} + '@prettier/plugin-oxc@0.0.4': + dependencies: + oxc-parser: 0.74.0 + '@puppeteer/browsers@2.3.0': dependencies: debug: 4.4.3 @@ -8663,6 +8894,8 @@ snapshots: binary-extensions@2.3.0: {} + binary-searching@2.0.5: {} + bindings@1.5.0: dependencies: file-uri-to-path: 1.0.0 @@ -11249,6 +11482,26 @@ snapshots: transitivePeerDependencies: - zod + oxc-parser@0.74.0: + dependencies: + '@oxc-project/types': 0.74.0 + optionalDependencies: + '@oxc-parser/binding-android-arm64': 0.74.0 + '@oxc-parser/binding-darwin-arm64': 0.74.0 + '@oxc-parser/binding-darwin-x64': 0.74.0 + '@oxc-parser/binding-freebsd-x64': 0.74.0 + '@oxc-parser/binding-linux-arm-gnueabihf': 0.74.0 + '@oxc-parser/binding-linux-arm-musleabihf': 0.74.0 + '@oxc-parser/binding-linux-arm64-gnu': 0.74.0 + '@oxc-parser/binding-linux-arm64-musl': 0.74.0 + '@oxc-parser/binding-linux-riscv64-gnu': 0.74.0 + '@oxc-parser/binding-linux-s390x-gnu': 0.74.0 + '@oxc-parser/binding-linux-x64-gnu': 0.74.0 + '@oxc-parser/binding-linux-x64-musl': 0.74.0 + '@oxc-parser/binding-wasm32-wasi': 0.74.0 + '@oxc-parser/binding-win32-arm64-msvc': 0.74.0 + '@oxc-parser/binding-win32-x64-msvc': 0.74.0 + p-any@4.0.0: dependencies: p-cancelable: 3.0.0 @@ -11402,16 +11655,25 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-packagejson@2.5.14(prettier@3.5.3): + prettier-plugin-jsdoc@1.3.3(prettier@3.6.2): dependencies: - sort-package-json: 3.2.1 - synckit: 0.11.6 + binary-searching: 2.0.5 + comment-parser: 1.4.1 + mdast-util-from-markdown: 2.0.2 + prettier: 3.6.2 + transitivePeerDependencies: + - supports-color + + prettier-plugin-packagejson@2.5.19(prettier@3.6.2): + dependencies: + sort-package-json: 3.4.0 + synckit: 0.11.11 optionalDependencies: - prettier: 3.5.3 + prettier: 3.6.2 prettier@2.8.8: {} - prettier@3.5.3: {} + prettier@3.6.2: {} progress@2.0.3: {} @@ -12083,7 +12345,7 @@ snapshots: sort-object-keys@1.1.3: {} - sort-package-json@3.2.1: + sort-package-json@3.4.0: dependencies: detect-indent: 7.0.2 detect-newline: 4.0.1 @@ -12235,10 +12497,6 @@ snapshots: dependencies: '@pkgr/core': 0.2.9 - synckit@0.11.6: - dependencies: - '@pkgr/core': 0.2.9 - tar-fs@2.1.4: dependencies: chownr: 1.1.4 diff --git a/prettier.config.js b/prettier.config.js new file mode 100644 index 0000000..5225ab3 --- /dev/null +++ b/prettier.config.js @@ -0,0 +1,23 @@ +/** + * @see https://prettier.io/docs/en/configuration.html + * @type {import("prettier").Config} + */ +const config = { + plugins: [ + "@prettier/plugin-oxc", // must be first + "@ianvs/prettier-plugin-sort-imports", + "prettier-plugin-packagejson", + "prettier-plugin-jsdoc" + ], + + // General config + semi: false, + singleQuote: false, + tabWidth: 2, + trailingComma: "none", + + // @ianvs/prettier-plugin-sort-imports + importOrderTypeScriptVersion: "5.0.0" +} + +export default config diff --git a/prettier.config.mjs b/prettier.config.mjs deleted file mode 100644 index 4487191..0000000 --- a/prettier.config.mjs +++ /dev/null @@ -1,13 +0,0 @@ -/** - * @see https://prettier.io/docs/en/configuration.html - * @type {import("prettier").Config} - */ -const config = { - trailingComma: "none", - tabWidth: 2, - semi: false, - singleQuote: false, - plugins: ["prettier-plugin-packagejson"] -} - -export default config diff --git a/tools/api-utils/src/api-response.ts b/tools/api-utils/src/api-response.ts index 49b249c..9e2303e 100644 --- a/tools/api-utils/src/api-response.ts +++ b/tools/api-utils/src/api-response.ts @@ -1,7 +1,7 @@ import { DidResolutionError } from "@agentcommercekit/did" import { CredentialVerificationError } from "@agentcommercekit/vc" -import * as v from "valibot" import type { TypedResponse } from "hono" +import * as v from "valibot" export type ApiResponse = TypedResponse> diff --git a/tools/api-utils/src/middleware/error-handler.ts b/tools/api-utils/src/middleware/error-handler.ts index 5935e28..942d4de 100644 --- a/tools/api-utils/src/middleware/error-handler.ts +++ b/tools/api-utils/src/middleware/error-handler.ts @@ -1,10 +1,10 @@ import { InvalidPaymentRequestTokenError } from "@agentcommercekit/ack-pay" import { DidResolutionError } from "@agentcommercekit/did" import { CredentialVerificationError } from "@agentcommercekit/vc" +import type { Env, ErrorHandler } from "hono" import { HTTPException } from "hono/http-exception" import * as v from "valibot" import { formatErrorResponse } from "../api-response" -import type { Env, ErrorHandler } from "hono" export const errorHandler: ErrorHandler = (err, c) => { if ( diff --git a/tools/api-utils/src/middleware/signed-payload-validator.ts b/tools/api-utils/src/middleware/signed-payload-validator.ts index 151bbd8..8558414 100644 --- a/tools/api-utils/src/middleware/signed-payload-validator.ts +++ b/tools/api-utils/src/middleware/signed-payload-validator.ts @@ -1,12 +1,10 @@ -import { isDidUri } from "@agentcommercekit/did" -import { isJwtString } from "@agentcommercekit/jwt" +import { isDidUri, type DidUri, type Resolvable } from "@agentcommercekit/did" +import { isJwtString, type JwtString } from "@agentcommercekit/jwt" +import type { ValidationTargets } from "hono" import { env } from "hono/adapter" import { validator } from "hono/validator" import * as v from "valibot" import { validatePayload } from "../validate-payload" -import type { DidUri, Resolvable } from "@agentcommercekit/did" -import type { JwtString } from "@agentcommercekit/jwt" -import type { ValidationTargets } from "hono" interface ValidatedSignedPayload { issuer: DidUri diff --git a/tools/api-utils/src/validate-payload.test.ts b/tools/api-utils/src/validate-payload.test.ts index dcd2675..621a9e1 100644 --- a/tools/api-utils/src/validate-payload.test.ts +++ b/tools/api-utils/src/validate-payload.test.ts @@ -1,16 +1,19 @@ import { - DidResolver, createDidWebDocumentFromKeypair, - getDidResolver + DidResolver, + getDidResolver, + type createDidWebDocument } from "@agentcommercekit/did" -import { createJwt, createJwtSigner } from "@agentcommercekit/jwt" -import { generateKeypair } from "@agentcommercekit/keys" +import { + createJwt, + createJwtSigner, + type JwtSigner, + type JwtString +} from "@agentcommercekit/jwt" +import { generateKeypair, type Keypair } from "@agentcommercekit/keys" import * as v from "valibot" import { beforeEach, describe, expect, it } from "vitest" import { validatePayload } from "./validate-payload" -import type { createDidWebDocument } from "@agentcommercekit/did" -import type { JwtSigner, JwtString } from "@agentcommercekit/jwt" -import type { Keypair } from "@agentcommercekit/keys" const testBodySchema = v.object({ test: v.string() diff --git a/tools/api-utils/src/validate-payload.ts b/tools/api-utils/src/validate-payload.ts index 061106f..d51f36d 100644 --- a/tools/api-utils/src/validate-payload.ts +++ b/tools/api-utils/src/validate-payload.ts @@ -1,8 +1,11 @@ -import { verifyJwt } from "@agentcommercekit/jwt" +import type { Resolvable } from "@agentcommercekit/did" +import { + verifyJwt, + type JwtString, + type JwtVerified +} from "@agentcommercekit/jwt" import * as v from "valibot" import { unauthorized } from "./exceptions" -import type { Resolvable } from "@agentcommercekit/did" -import type { JwtString, JwtVerified } from "@agentcommercekit/jwt" export type ParsedPayload = { parsed: JwtVerified diff --git a/tools/eslint-config/base.js b/tools/eslint-config/base.js index 49a485f..a22e2b4 100644 --- a/tools/eslint-config/base.js +++ b/tools/eslint-config/base.js @@ -1,14 +1,14 @@ // @ts-check +import cspell from "@cspell/eslint-plugin/configs" import js from "@eslint/js" +import json from "@eslint/json" +import markdown from "@eslint/markdown" import prettier from "eslint-config-prettier" import { createTypeScriptImportResolver } from "eslint-import-resolver-typescript" import importX from "eslint-plugin-import-x" import turbo from "eslint-plugin-turbo" -import markdown from "@eslint/markdown" import tseslint from "typescript-eslint" -import json from "@eslint/json" -import cspell from "@cspell/eslint-plugin/configs" export function config({ root }) { const tsconfigPath = `${root}/tsconfig.json` @@ -71,7 +71,10 @@ export function config({ root }) { "@typescript-eslint/consistent-type-definitions": "off", "@typescript-eslint/consistent-type-imports": [ "warn", - { prefer: "type-imports" } + { + prefer: "type-imports", + fixStyle: "separate-type-imports" // Enforces: import type { Foo } (top-level) + } ], "@typescript-eslint/no-misused-promises": [ "error", @@ -88,34 +91,12 @@ export function config({ root }) { } ], "@typescript-eslint/restrict-template-expressions": ["off"], - "import-x/consistent-type-specifier-style": [ - "warn", - "prefer-top-level" - ], - "import-x/order": [ - "warn", - { - "newlines-between": "never", - groups: [ - "builtin", - "external", - "internal", - ["sibling", "parent"], - "index", - "object", - "type" - ], - alphabetize: { - order: "asc" - } - } - ], - "sort-imports": [ - "warn", - { - ignoreDeclarationSort: true - } - ] + // Disabled: Redundant with @typescript-eslint/consistent-type-imports + "import-x/consistent-type-specifier-style": "off", + // Disabled: Handled by @ianvs/prettier-plugin-sort-imports + "import-x/order": "off", + // Disabled: Handled by @ianvs/prettier-plugin-sort-imports + "sort-imports": "off" } }, diff --git a/turbo.jsonc b/turbo.json similarity index 93% rename from turbo.jsonc rename to turbo.json index 9e67cdb..9e66760 100644 --- a/turbo.jsonc +++ b/turbo.json @@ -3,9 +3,6 @@ "ui": "stream", "concurrency": "15", "tasks": { - "//#check:format": {}, - "//#check:packages": {}, - "//#format": {}, "build": { "dependsOn": ["^build"], "inputs": ["$TURBO_DEFAULT$", ".env*"], @@ -32,7 +29,7 @@ "persistent": true }, "fix": { - "dependsOn": ["//#format", "lint:fix"] + "dependsOn": ["lint:fix", "//#format"] }, "lint": { "dependsOn": ["^lint", "^build"] @@ -46,7 +43,10 @@ }, "test": { "dependsOn": ["^test", "^build"] - } + }, + "//#check:format": {}, + "//#check:packages": {}, + "//#format": {} }, "globalEnv": ["NODE_ENV"] } From fca35b52d27eaf30bef4232bde9540af1a734b72 Mon Sep 17 00:00:00 2001 From: Matt Venables Date: Wed, 29 Oct 2025 05:51:10 -0400 Subject: [PATCH 5/6] Enable prettier trailing commas --- demos/e2e/eslint.config.js | 2 +- demos/e2e/src/agent.ts | 40 ++--- demos/e2e/src/credential-issuer.ts | 20 +-- demos/e2e/src/credential-verifier.ts | 14 +- demos/e2e/src/index.ts | 72 ++++---- demos/e2e/src/receipt-issuer.ts | 22 +-- demos/e2e/src/receipt-verifier.ts | 10 +- demos/e2e/src/user.ts | 10 +- demos/e2e/src/verification.ts | 20 +-- demos/e2e/vitest.config.ts | 4 +- demos/identity-a2a/README.md | 28 ++-- demos/identity-a2a/eslint.config.js | 2 +- demos/identity-a2a/src/agent.ts | 26 +-- demos/identity-a2a/src/bank-client-agent.ts | 146 ++++++++-------- demos/identity-a2a/src/bank-teller-agent.ts | 80 ++++----- demos/identity-a2a/src/issuer.ts | 10 +- demos/identity-a2a/src/run-demo.ts | 18 +- .../src/utils/fetch-agent-card.ts | 4 +- .../src/utils/response-parsers.ts | 8 +- demos/identity-a2a/src/utils/server-utils.ts | 12 +- demos/identity-a2a/vitest.config.ts | 4 +- demos/identity/eslint.config.js | 2 +- demos/identity/src/agent.ts | 26 +-- demos/identity/src/client-agent.ts | 24 +-- demos/identity/src/credential-issuer.ts | 20 +-- demos/identity/src/credential-verifier.ts | 10 +- demos/identity/src/get-model.ts | 4 +- demos/identity/src/haiku-agent.ts | 8 +- demos/identity/src/identity-tools.ts | 32 ++-- demos/identity/src/index.ts | 136 +++++++-------- demos/identity/src/owner.ts | 6 +- demos/identity/src/serve-agent.ts | 6 +- demos/identity/vitest.config.ts | 4 +- demos/payments/eslint.config.js | 2 +- demos/payments/src/constants.ts | 2 +- demos/payments/src/index.ts | 156 +++++++++--------- demos/payments/src/payment-service.ts | 46 +++--- demos/payments/src/receipt-service.ts | 60 +++---- demos/payments/src/server.ts | 28 ++-- demos/payments/src/utils/ensure-balances.ts | 26 +-- demos/payments/src/utils/keypair-info.ts | 10 +- demos/payments/src/utils/usdc-contract.ts | 10 +- demos/payments/vitest.config.ts | 4 +- demos/skyfire-kya/eslint.config.js | 2 +- demos/skyfire-kya/src/index.ts | 18 +- demos/skyfire-kya/src/jwk-keys.ts | 4 +- demos/skyfire-kya/src/kya-token.ts | 18 +- demos/skyfire-kya/src/skyfire-kya-ack-id.ts | 34 ++-- demos/skyfire-kya/vitest.config.ts | 4 +- examples/issuer/bin/start-server.ts | 12 +- examples/issuer/drizzle.config.ts | 2 +- examples/issuer/eslint.config.js | 2 +- examples/issuer/src/db/queries/credentials.ts | 14 +- .../issuer/src/db/queries/status-lists.ts | 4 +- examples/issuer/src/db/schema.ts | 8 +- .../db/utils/get-status-list-position.test.ts | 10 +- .../src/db/utils/get-status-list-position.ts | 4 +- .../build-signed-credential.test.ts | 18 +- .../credentials/build-signed-credential.ts | 10 +- examples/issuer/src/lib/types.ts | 2 +- examples/issuer/src/middleware/issuer.ts | 6 +- .../issuer/src/routes/credentials.test.ts | 142 ++++++++-------- examples/issuer/src/routes/credentials.ts | 26 +-- examples/issuer/src/routes/healthcheck.ts | 2 +- examples/issuer/src/routes/receipts.test.ts | 138 ++++++++-------- examples/issuer/src/routes/receipts.ts | 38 ++--- examples/issuer/src/routes/status.ts | 10 +- .../src/test-helpers/did-web-with-signer.ts | 10 +- examples/issuer/vitest.config.ts | 4 +- examples/local-did-host/bin/serve.ts | 12 +- examples/local-did-host/eslint.config.js | 2 +- examples/local-did-host/src/index.ts | 22 +-- examples/local-did-host/src/lib/identity.ts | 10 +- .../src/middleware/identities.ts | 6 +- examples/local-did-host/vitest.config.ts | 4 +- examples/verifier/bin/serve.ts | 4 +- examples/verifier/eslint.config.js | 2 +- examples/verifier/src/middleware/verifier.ts | 8 +- examples/verifier/src/routes/healthcheck.ts | 2 +- examples/verifier/src/routes/verify.ts | 14 +- examples/verifier/vitest.config.ts | 4 +- packages/ack-id/README.md | 24 +-- packages/ack-id/eslint.config.js | 2 +- packages/ack-id/src/a2a/schemas/valibot.ts | 16 +- packages/ack-id/src/a2a/schemas/zod/v3.ts | 14 +- packages/ack-id/src/a2a/schemas/zod/v4.ts | 14 +- packages/ack-id/src/a2a/service-endpoints.ts | 4 +- packages/ack-id/src/a2a/sign-message.ts | 40 ++--- packages/ack-id/src/a2a/verify.ts | 22 +-- .../src/controller-claim-verifier.test.ts | 24 +-- .../ack-id/src/controller-claim-verifier.ts | 14 +- .../ack-id/src/controller-credential.test.ts | 8 +- packages/ack-id/src/controller-credential.ts | 6 +- packages/ack-id/src/schemas/valibot.ts | 2 +- packages/ack-id/src/schemas/zod/v3.ts | 2 +- packages/ack-id/src/schemas/zod/v4.ts | 2 +- packages/ack-id/tsdown.config.ts | 4 +- packages/ack-id/vitest.config.ts | 4 +- packages/ack-pay/README.md | 4 +- packages/ack-pay/eslint.config.js | 2 +- .../src/create-payment-receipt.test.ts | 34 ++-- .../ack-pay/src/create-payment-receipt.ts | 6 +- .../src/create-payment-request-token.test.ts | 24 +-- .../src/create-payment-request-token.ts | 10 +- .../src/create-signed-payment-request.test.ts | 30 ++-- .../src/create-signed-payment-request.ts | 10 +- packages/ack-pay/src/payment-request.test.ts | 10 +- packages/ack-pay/src/payment-request.ts | 2 +- .../src/receipt-claim-verifier.test.ts | 20 +-- .../ack-pay/src/receipt-claim-verifier.ts | 10 +- packages/ack-pay/src/schemas/valibot.ts | 12 +- packages/ack-pay/src/schemas/zod/v3.ts | 6 +- packages/ack-pay/src/schemas/zod/v4.ts | 6 +- .../src/verify-payment-receipt.test.ts | 42 ++--- .../ack-pay/src/verify-payment-receipt.ts | 22 +-- .../src/verify-payment-request-token.test.ts | 64 +++---- .../src/verify-payment-request-token.ts | 12 +- packages/ack-pay/tsdown.config.ts | 4 +- packages/ack-pay/vitest.config.ts | 4 +- packages/agentcommercekit/README.md | 12 +- packages/agentcommercekit/eslint.config.js | 2 +- packages/agentcommercekit/tsdown.config.ts | 4 +- packages/agentcommercekit/vitest.config.ts | 4 +- packages/caip/README.md | 8 +- packages/caip/eslint.config.js | 2 +- packages/caip/src/caips/caip-10.test.ts | 6 +- packages/caip/src/caips/caip-10.ts | 6 +- packages/caip/src/caips/caip-19.ts | 4 +- packages/caip/src/caips/caip-2.ts | 2 +- packages/caip/src/schemas/schemas.test.ts | 24 +-- packages/caip/src/schemas/valibot.ts | 18 +- packages/caip/src/schemas/zod/v3.ts | 8 +- packages/caip/src/schemas/zod/v4.ts | 8 +- packages/caip/tsdown.config.ts | 4 +- packages/caip/vitest.config.ts | 4 +- packages/did/README.md | 12 +- packages/did/eslint.config.js | 2 +- packages/did/src/create-did-document.test.ts | 56 +++---- packages/did/src/create-did-document.ts | 24 +-- packages/did/src/did-document.ts | 4 +- .../src/did-resolvers/did-resolver.test.ts | 10 +- .../did/src/did-resolvers/did-resolver.ts | 12 +- .../did/src/did-resolvers/get-did-resolver.ts | 8 +- .../did-resolvers/pkh-did-resolver.test.ts | 12 +- .../did/src/did-resolvers/pkh-did-resolver.ts | 6 +- .../did-resolvers/web-did-resolver.test.ts | 70 ++++---- .../did/src/did-resolvers/web-did-resolver.ts | 20 +-- packages/did/src/did-uri.ts | 2 +- packages/did/src/methods/did-key.test.ts | 12 +- packages/did/src/methods/did-key.ts | 14 +- packages/did/src/methods/did-pkh.test.ts | 72 ++++---- packages/did/src/methods/did-pkh.ts | 38 ++--- packages/did/src/methods/did-web.test.ts | 26 +-- packages/did/src/methods/did-web.ts | 10 +- packages/did/src/resolve-did.test.ts | 38 ++--- packages/did/src/resolve-did.ts | 18 +- packages/did/tsdown.config.ts | 4 +- packages/did/vitest.config.ts | 4 +- packages/jwt/README.md | 4 +- packages/jwt/eslint.config.js | 2 +- packages/jwt/src/create-jwt.test.ts | 12 +- packages/jwt/src/create-jwt.ts | 6 +- packages/jwt/src/jwt-algorithm.test.ts | 4 +- packages/jwt/src/jwt-algorithm.ts | 2 +- packages/jwt/src/jwt-string.test.ts | 4 +- packages/jwt/src/schemas/valibot.ts | 10 +- packages/jwt/src/schemas/zod/v3.ts | 6 +- packages/jwt/src/schemas/zod/v4.ts | 6 +- packages/jwt/src/verify.test.ts | 52 +++--- packages/jwt/src/verify.ts | 2 +- packages/jwt/tsdown.config.ts | 4 +- packages/jwt/vitest.config.ts | 4 +- packages/keys/README.md | 2 +- packages/keys/eslint.config.js | 8 +- packages/keys/src/curves/ed25519.ts | 4 +- packages/keys/src/curves/secp256k1.test.ts | 4 +- packages/keys/src/curves/secp256k1.ts | 6 +- packages/keys/src/curves/secp256r1.test.ts | 4 +- packages/keys/src/curves/secp256r1.ts | 6 +- packages/keys/src/encoding/base58.test.ts | 2 +- packages/keys/src/encoding/jwk.test.ts | 36 ++-- packages/keys/src/encoding/jwk.ts | 26 +-- packages/keys/src/encoding/multibase.test.ts | 18 +- packages/keys/src/encoding/multibase.ts | 8 +- packages/keys/src/keypair.test.ts | 6 +- packages/keys/src/keypair.ts | 6 +- packages/keys/src/public-key.test.ts | 16 +- packages/keys/src/public-key.ts | 28 ++-- packages/keys/tsdown.config.ts | 4 +- packages/keys/vitest.config.ts | 4 +- packages/vc/README.md | 10 +- packages/vc/eslint.config.js | 2 +- packages/vc/src/create-credential.test.ts | 16 +- packages/vc/src/create-credential.ts | 4 +- packages/vc/src/create-presentation.test.ts | 24 +-- packages/vc/src/create-presentation.ts | 4 +- .../revocation/is-status-list-credential.ts | 4 +- .../vc/src/revocation/make-revocable.test.ts | 6 +- packages/vc/src/revocation/make-revocable.ts | 6 +- .../revocation/status-list-credential.test.ts | 2 +- .../src/revocation/status-list-credential.ts | 6 +- packages/vc/src/schemas/valibot.ts | 14 +- packages/vc/src/schemas/zod/v3.ts | 12 +- packages/vc/src/schemas/zod/v4.ts | 12 +- .../vc/src/signing/sign-credential.test.ts | 14 +- packages/vc/src/signing/sign-credential.ts | 2 +- .../vc/src/signing/sign-presentation.test.ts | 22 +-- packages/vc/src/signing/sign-presentation.ts | 4 +- .../vc/src/verification/is-expired.test.ts | 8 +- .../vc/src/verification/is-revoked.test.ts | 36 ++-- packages/vc/src/verification/is-revoked.ts | 8 +- .../verification/parse-jwt-credential.test.ts | 14 +- .../src/verification/parse-jwt-credential.ts | 2 +- packages/vc/src/verification/types.ts | 2 +- .../verify-parsed-credential.test.ts | 84 +++++----- .../verification/verify-parsed-credential.ts | 12 +- .../vc/src/verification/verify-proof.test.ts | 20 +-- packages/vc/src/verification/verify-proof.ts | 6 +- packages/vc/tsdown.config.ts | 4 +- packages/vc/vitest.config.ts | 4 +- prettier.config.js | 6 +- tools/api-utils/eslint.config.js | 2 +- tools/api-utils/src/api-response.ts | 12 +- tools/api-utils/src/exceptions.ts | 8 +- .../middleware/signed-payload-validator.ts | 12 +- tools/api-utils/src/validate-payload.test.ts | 32 ++-- tools/api-utils/src/validate-payload.ts | 10 +- tools/api-utils/vitest.config.ts | 4 +- tools/cli-tools/eslint.config.js | 2 +- tools/cli-tools/src/formatters.ts | 14 +- tools/cli-tools/src/logger.ts | 2 +- tools/cli-tools/src/prompts.ts | 4 +- tools/cli-tools/src/update-env-file.ts | 6 +- tools/cli-tools/vitest.config.ts | 4 +- tools/eslint-config/base.js | 61 +++---- turbo.json | 16 +- 236 files changed, 1904 insertions(+), 1893 deletions(-) diff --git a/demos/e2e/eslint.config.js b/demos/e2e/eslint.config.js index 0979926..13fe2a3 100644 --- a/demos/e2e/eslint.config.js +++ b/demos/e2e/eslint.config.js @@ -3,5 +3,5 @@ import { config } from "@repo/eslint-config/base" export default config({ - root: import.meta.dirname + root: import.meta.dirname, }) diff --git a/demos/e2e/src/agent.ts b/demos/e2e/src/agent.ts index bafafac..787abc2 100644 --- a/demos/e2e/src/agent.ts +++ b/demos/e2e/src/agent.ts @@ -13,7 +13,7 @@ import { type JwtSigner, type JwtString, type Keypair, - type PaymentRequest + type PaymentRequest, } from "agentcommercekit" import type { CredentialVerifier } from "./credential-verifier" import { PaymentRequiredError } from "./payment-required-error" @@ -59,7 +59,7 @@ export class Agent { receiptVerifier, credentialVerifier, wallet, - preferredChainId + preferredChainId, }: AgentConstructorParams) { // DID this.did = did @@ -78,7 +78,7 @@ export class Agent { const { did: walletDid, didDocument: walletDidDocument } = createDidPkhDocument({ address: this.walletAddress, - chainId: this.preferredChainId + chainId: this.preferredChainId, }) this.walletDid = walletDid resolver.addToCache(walletDid, walletDidDocument) @@ -99,7 +99,7 @@ export class Agent { preferredChainId, resolver, receiptVerifier, - credentialVerifier + credentialVerifier, }: { ownerDid: DidUri preferredChainId: Caip2ChainId @@ -119,7 +119,7 @@ export class Agent { const { did, didDocument } = createDidWebDocumentFromKeypair({ keypair, baseUrl, - controller: ownerDid + controller: ownerDid, }) return new Agent({ @@ -131,7 +131,7 @@ export class Agent { receiptVerifier, credentialVerifier, wallet: walletKeypair, - preferredChainId + preferredChainId, }) } @@ -152,13 +152,13 @@ ${colors.bold(otherAgent.did)} [chat] Verifying other agent's identity: ${colors.bold(otherAgent.did)} -`) +`), ) const verified = await verifyAgentIdentityWithCredential( otherAgent.ownershipVc, this.resolver, - this.credentialVerifier + this.credentialVerifier, ) if (!verified) { throw new Error("Other agent's credential verification failed") @@ -169,7 +169,7 @@ ${colors.bold(otherAgent.did)} this.did, this.ownershipVc, message, - receipt + receipt, ) } @@ -180,7 +180,7 @@ ${colors.bold(otherAgent.did)} fromDid: DidUri, fromOwnershipVc: JwtString | undefined, message: string, - receipt?: JwtString + receipt?: JwtString, ) { log( colors.dim( @@ -188,14 +188,14 @@ ${colors.bold(otherAgent.did)} [chat] ${this.did} handling chat from ${fromDid} [chat] Message: ${message} [chat] Verifying other agent's identity: ${fromDid} -` +`, ), - { wrap: false } + { wrap: false }, ) const verified = await verifyAgentIdentityWithCredential( fromOwnershipVc, this.resolver, - this.credentialVerifier + this.credentialVerifier, ) if (!verified) { throw new Error("Other agent's credential verification failed") @@ -214,15 +214,15 @@ ${colors.bold(otherAgent.did)} amount: BigInt(500).toString(), decimals: 2, currency: "USD", - recipient: this.walletDid - } - ] + recipient: this.walletDid, + }, + ], }, { issuer: this.did, signer: this.signer, - algorithm: curveToJwtAlgorithm(this.keypair.curve) - } + algorithm: curveToJwtAlgorithm(this.keypair.curve), + }, ) // Optional: Store the pending payment request tokens. @@ -234,7 +234,7 @@ ${colors.bold(otherAgent.did)} // Verify the receipt const { paymentRequestToken } = await this.receiptVerifier.verifyReceipt( receipt, - this.did + this.did, ) // Optional: Ensure the payment request token was for this same type of request. @@ -248,7 +248,7 @@ ${colors.bold(otherAgent.did)} // Provide the service return { data: "Response to: " + message, - timestamp: new Date().toISOString() + timestamp: new Date().toISOString(), } } } diff --git a/demos/e2e/src/credential-issuer.ts b/demos/e2e/src/credential-issuer.ts index ea4253c..2673ab3 100644 --- a/demos/e2e/src/credential-issuer.ts +++ b/demos/e2e/src/credential-issuer.ts @@ -9,14 +9,14 @@ import { type DidResolver, type DidUri, type JwtString, - type Keypair + type Keypair, } from "agentcommercekit" import { didUriSchema } from "agentcommercekit/schemas/valibot" import * as v from "valibot" const credentialPayloadSchema = v.object({ controller: didUriSchema, - subject: didUriSchema + subject: didUriSchema, }) export class CredentialIssuer { @@ -30,7 +30,7 @@ export class CredentialIssuer { private constructor({ baseUrl, keypair, - resolver + resolver, }: { baseUrl: string keypair: Keypair @@ -46,7 +46,7 @@ export class CredentialIssuer { // Did Document const { did, didDocument } = createDidWebDocumentFromKeypair({ keypair, - baseUrl: this.baseUrl + baseUrl: this.baseUrl, }) this.did = did this.didDocument = didDocument @@ -58,7 +58,7 @@ export class CredentialIssuer { static async create({ baseUrl, - resolver + resolver, }: { baseUrl: string resolver: DidResolver @@ -71,13 +71,13 @@ export class CredentialIssuer { const parsed = await verifyJwt(signedPayload, { resolver: this.resolver, policies: { - aud: false - } + aud: false, + }, }) const { controller, subject } = v.parse( credentialPayloadSchema, - parsed.payload + parsed.payload, ) const id = `${this.baseUrl}/credentials/${parsed.payload.id}` @@ -85,13 +85,13 @@ export class CredentialIssuer { id, subject, controller, - issuer: this.did + issuer: this.did, }) const jwt = await signCredential(credential, { did: this.did, signer: this.signer, - alg: "ES256K" + alg: "ES256K", }) return jwt diff --git a/demos/e2e/src/credential-verifier.ts b/demos/e2e/src/credential-verifier.ts index fc383a0..a217a13 100644 --- a/demos/e2e/src/credential-verifier.ts +++ b/demos/e2e/src/credential-verifier.ts @@ -12,7 +12,7 @@ import { type DidUri, type JwtString, type Keypair, - type Verifiable + type Verifiable, } from "agentcommercekit" export class CredentialVerifier { @@ -26,7 +26,7 @@ export class CredentialVerifier { baseUrl, keypair, resolver, - trustedIssuers + trustedIssuers, }: { baseUrl: string keypair: Keypair @@ -39,7 +39,7 @@ export class CredentialVerifier { // Did Document const { did, didDocument } = createDidWebDocumentFromKeypair({ keypair: this.keypair, - baseUrl + baseUrl, }) this.did = did this.didDocument = didDocument @@ -53,7 +53,7 @@ export class CredentialVerifier { static async create({ baseUrl, resolver, - trustedIssuers + trustedIssuers, }: { baseUrl: string resolver: DidResolver @@ -64,7 +64,7 @@ export class CredentialVerifier { baseUrl, keypair, resolver, - trustedIssuers + trustedIssuers, }) } @@ -72,7 +72,7 @@ export class CredentialVerifier { * Verifies a credential JWT */ async verifyCredential( - jwt: JwtString + jwt: JwtString, ): Promise> { const parsedCredential = await parseJwtCredential(jwt, this.resolver) @@ -83,7 +83,7 @@ export class CredentialVerifier { await verifyParsedCredential(parsedCredential, { resolver: this.resolver, trustedIssuers: this.trustedIssuers, - verifiers: [getControllerClaimVerifier()] + verifiers: [getControllerClaimVerifier()], }) return parsedCredential diff --git a/demos/e2e/src/index.ts b/demos/e2e/src/index.ts index ad1edf9..407b402 100644 --- a/demos/e2e/src/index.ts +++ b/demos/e2e/src/index.ts @@ -5,7 +5,7 @@ import { logJson, sectionHeader, successMessage, - waitForEnter + waitForEnter, } from "@repo/cli-tools" import { caip2ChainIds, @@ -13,7 +13,7 @@ import { getDidResolver, parseJwtCredential, type Keypair, - type PaymentRequest + type PaymentRequest, } from "agentcommercekit" import { Agent } from "./agent" import { CredentialIssuer } from "./credential-issuer" @@ -44,23 +44,23 @@ const resolver = getDidResolver() const credentialIssuer = await CredentialIssuer.create({ baseUrl: "https://issuer.example.com", - resolver + resolver, }) const credentialVerifier = await CredentialVerifier.create({ baseUrl: "https://verifier.example.com", resolver, - trustedIssuers: [credentialIssuer.did] + trustedIssuers: [credentialIssuer.did], }) const receiptIssuer = await ReceiptIssuer.create({ baseUrl: "https://receipt-issuer.example.com", - resolver + resolver, }) const receiptVerifier = await ReceiptVerifier.create({ baseUrl: "https://receipt-verifier.example.com", - resolver + resolver, }) /** @@ -73,7 +73,7 @@ async function main() { ${colors.bold("✨ === Agent Commerce Kit End-to-End Demo === ✨")} ${colors.dim( - "This demo will walk through a complete end-to-end flow, demonstrating how agents can interact securely and make payments. We'll see how identity verification, payment processing, and resource access all work seamlessly together in the Agent Commerce Kit." + "This demo will walk through a complete end-to-end flow, demonstrating how agents can interact securely and make payments. We'll see how identity verification, payment processing, and resource access all work seamlessly together in the Agent Commerce Kit.", )} `) @@ -81,8 +81,8 @@ ${colors.dim( log( sectionHeader(`Creating User 1 (Client Owner) & Agent 1 (Client Agent)`, { - step: 1 - }) + step: 1, + }), ) log( colors.dim(` @@ -90,7 +90,7 @@ First, we'll set up a 'User' who owns an 'Agent'. The User has a Decentralized I The Agent also has its own DID and will be linked to its User via an Ownership Verifiable Credential (VC). -Creating User 1 and Agent 1...`) +Creating User 1 and Agent 1...`), ) const user1 = await User.create(resolver, CHAIN_ID) @@ -99,15 +99,15 @@ Creating User 1 and Agent 1...`) resolver, receiptVerifier, credentialVerifier, - preferredChainId: CHAIN_ID + preferredChainId: CHAIN_ID, }) const payload = { controller: user1.did, - subject: agent1.did + subject: agent1.did, } const signedPayload = await createJwt(payload, { issuer: user1.did, - signer: user1.signer + signer: user1.signer, }) const ownershipVc1 = @@ -123,7 +123,7 @@ User 1 (Client Owner): Agent 1 (Client Agent): DID: ${agent1.did} Ownership VC:`), - { wrap: false } + { wrap: false }, ) logJson(await parseJwtCredential(ownershipVc1, resolver)) log(` @@ -138,8 +138,8 @@ ${colors.dim("Next, we'll create a second User and Agent, which will be used as log( sectionHeader(`Creating User 2 (Server Owner) & Agent 2 (Server Agent)`, { - step: 2 - }) + step: 2, + }), ) const user2 = await User.create(resolver, CHAIN_ID) @@ -148,16 +148,16 @@ ${colors.dim("Next, we'll create a second User and Agent, which will be used as resolver, receiptVerifier, credentialVerifier, - preferredChainId: CHAIN_ID + preferredChainId: CHAIN_ID, }) const payload2 = { controller: user2.did, - subject: agent2.did + subject: agent2.did, } const signedPayload2 = await createJwt(payload2, { issuer: user2.did, - signer: user2.signer + signer: user2.signer, }) const ownershipVc2 = @@ -172,7 +172,7 @@ User 2 (Server Owner): Agent 2 (Server Agent): DID: ${agent2.did} - Ownership VC:`) + Ownership VC:`), ) logJson(await parseJwtCredential(ownershipVc2, resolver)) log( @@ -182,7 +182,7 @@ This VC, issued by User 2, proves they control Agent 2. ${successMessage("User 2 and Agent 2 (Server) setup complete")} Next, the agents will begin communicating with each other. -`) +`), ) await waitForEnter() @@ -194,7 +194,7 @@ Agent 1 will now try to communicate with Agent 2 by sending a message. Agent 2 is configured to require payment for its services. Agent 2 will first verify Agent 1's identity and ownership using its VC. If identity is verified, Agent 2 will then respond with a 402 Payment Required error, including details for the payment. -`) +`), ) const message = "What's the current price of AAPL stock?" @@ -202,7 +202,7 @@ If identity is verified, Agent 2 will then respond with a 402 Payment Required e const { paymentRequest, paymentRequestToken } = await chat( agent1, agent2, - message + message, ) log( @@ -210,13 +210,13 @@ If identity is verified, Agent 2 will then respond with a 402 Payment Required e The server has verified Agent 1's identity and now requires payment. Next, we will perform the payment and fetch a Receipt. -`) +`), ) await waitForEnter() log( - sectionHeader("Agent 1 makes payment and receives a Receipt", { step: 4 }) + sectionHeader("Agent 1 makes payment and receives a Receipt", { step: 4 }), ) logJson(paymentRequest) log( @@ -224,41 +224,41 @@ Next, we will perform the payment and fetch a Receipt. Payment must be made using token: ${paymentRequestToken} -`) +`), ) await waitForEnter("Press Enter to simulate making the on-chain payment...") const txHash = await makeOnChainPayment({ payingWallet: agent1.wallet, - paymentRequest + paymentRequest, }) log( successMessage(`Payment made.`), `Transaction Hash: ${colors.bold(txHash)}`, - "" + "", ) await waitForEnter( - "Press Enter to request a payment receipt from the Receipt Issuer..." + "Press Enter to request a payment receipt from the Receipt Issuer...", ) const receipt = await receiptIssuer.issueReceipt({ payerDid: agent1.walletDid, txHash, - paymentRequestToken + paymentRequestToken, }) log(successMessage("Payment Receipt VC Issued!")) logJson(await parseJwtCredential(receipt, resolver)) log( colors.dim( - "This VC, issued by the Receipt Issuer, attests to the payment transaction." + "This VC, issued by the Receipt Issuer, attests to the payment transaction.", ), - "" + "", ) await waitForEnter( - "Press Enter to retry the chat with Agent 2, this time including the payment receipt..." + "Press Enter to retry the chat with Agent 2, this time including the payment receipt...", ) await agent1.chatWith(agent2, message, receipt) @@ -266,9 +266,9 @@ ${paymentRequestToken} log( "", successMessage( - "The Client successfully used the Receipt to access the Server's protected resource." + "The Client successfully used the Receipt to access the Server's protected resource.", ), - "Demo complete." + "Demo complete.", ) } @@ -296,7 +296,7 @@ async function chat(agent1: Agent, agent2: Agent, message: string) { if (error instanceof PaymentRequiredError) { return { paymentRequest: error.paymentRequest, - paymentRequestToken: error.paymentRequestToken + paymentRequestToken: error.paymentRequestToken, } } diff --git a/demos/e2e/src/receipt-issuer.ts b/demos/e2e/src/receipt-issuer.ts index 3386eb1..149cf16 100644 --- a/demos/e2e/src/receipt-issuer.ts +++ b/demos/e2e/src/receipt-issuer.ts @@ -10,7 +10,7 @@ import { type DidUri, type JwtString, type Keypair, - type PaymentRequest + type PaymentRequest, } from "agentcommercekit" export class ReceiptIssuer { @@ -23,7 +23,7 @@ export class ReceiptIssuer { private constructor({ baseUrl, keypair, - resolver + resolver, }: { baseUrl: string keypair: Keypair @@ -36,7 +36,7 @@ export class ReceiptIssuer { // Did Document const { did, didDocument } = createDidWebDocumentFromKeypair({ keypair: this.keypair, - baseUrl + baseUrl, }) this.did = did this.didDocument = didDocument @@ -48,7 +48,7 @@ export class ReceiptIssuer { static async create({ baseUrl, - resolver + resolver, }: { baseUrl: string resolver: DidResolver @@ -63,7 +63,7 @@ export class ReceiptIssuer { async issueReceipt({ payerDid, txHash, - paymentRequestToken + paymentRequestToken, }: { payerDid: DidUri txHash: string @@ -72,14 +72,14 @@ export class ReceiptIssuer { const { paymentRequest } = await verifyPaymentRequestToken( paymentRequestToken, { - resolver: this.resolver - } + resolver: this.resolver, + }, ) // Verify the payment on-chain const paymentVerified = await this.verifyPaymentOnChain( txHash, - paymentRequest + paymentRequest, ) if (!paymentVerified) { throw new Error("Payment verification failed") @@ -90,13 +90,13 @@ export class ReceiptIssuer { paymentRequestToken, paymentOptionId: paymentRequest.paymentOptions[0].id, issuer: this.did, - payerDid + payerDid, }) const jwt = await signCredential(credential, { did: this.did, signer: this.signer, - alg: "ES256K" + alg: "ES256K", }) return jwt @@ -107,7 +107,7 @@ export class ReceiptIssuer { */ private async verifyPaymentOnChain( txHash: string, - _paymentRequest: PaymentRequest + _paymentRequest: PaymentRequest, ): Promise { // Implementation will use your local libraries // This is where you would verify the transaction on-chain diff --git a/demos/e2e/src/receipt-verifier.ts b/demos/e2e/src/receipt-verifier.ts index 4743a78..f84fb76 100644 --- a/demos/e2e/src/receipt-verifier.ts +++ b/demos/e2e/src/receipt-verifier.ts @@ -6,7 +6,7 @@ import { type DidResolver, type DidUri, type JwtString, - type Keypair + type Keypair, } from "agentcommercekit" export class ReceiptVerifier { @@ -20,7 +20,7 @@ export class ReceiptVerifier { baseUrl, keypair, resolver, - trustedIssuers + trustedIssuers, }: { baseUrl: string keypair: Keypair @@ -33,7 +33,7 @@ export class ReceiptVerifier { // Did Document const { did, didDocument } = createDidWebDocumentFromKeypair({ keypair: this.keypair, - baseUrl + baseUrl, }) this.did = did this.didDocument = didDocument @@ -47,7 +47,7 @@ export class ReceiptVerifier { static async create({ baseUrl, resolver, - trustedIssuers + trustedIssuers, }: { baseUrl: string resolver: DidResolver @@ -65,7 +65,7 @@ export class ReceiptVerifier { resolver: this.resolver, trustedReceiptIssuers: this.trustedIssuers, paymentRequestIssuer: paymentRequestIssuer, - verifyPaymentRequestTokenJwt: true + verifyPaymentRequestTokenJwt: true, }) } } diff --git a/demos/e2e/src/user.ts b/demos/e2e/src/user.ts index a9ff60c..1c9b183 100644 --- a/demos/e2e/src/user.ts +++ b/demos/e2e/src/user.ts @@ -7,7 +7,7 @@ import { type DidResolver, type DidUri, type JwtSigner, - type Keypair + type Keypair, } from "agentcommercekit" import { publicKeyToAddress } from "./utils/evm-address" @@ -31,7 +31,7 @@ export class User { didDocument, resolver, wallet, - preferredChainId + preferredChainId, }: ConstructorParams) { // Wallet this.wallet = wallet @@ -46,13 +46,13 @@ export class User { static async create( resolver: DidResolver, - chainId: Caip2ChainId + chainId: Caip2ChainId, ): Promise { const wallet = await generateKeypair("secp256k1") const address = publicKeyToAddress(wallet.publicKey) const { did, didDocument } = createDidPkhDocument({ address, - chainId + chainId, }) return new User({ @@ -60,7 +60,7 @@ export class User { did, didDocument, resolver, - preferredChainId: chainId + preferredChainId: chainId, }) } } diff --git a/demos/e2e/src/verification.ts b/demos/e2e/src/verification.ts index 8391384..08cdf81 100644 --- a/demos/e2e/src/verification.ts +++ b/demos/e2e/src/verification.ts @@ -3,12 +3,12 @@ import { errorMessage, log, logJson, - successMessage + successMessage, } from "@repo/cli-tools" import { resolveDidWithController, type DidResolver, - type JwtString + type JwtString, } from "agentcommercekit" import type { CredentialVerifier } from "./credential-verifier" @@ -20,7 +20,7 @@ import type { CredentialVerifier } from "./credential-verifier" export async function verifyAgentIdentityWithCredential( jwt: JwtString | undefined, resolver: DidResolver, - verifier: CredentialVerifier + verifier: CredentialVerifier, ): Promise { if (!jwt) { log(colors.dim("[verification] Agent missing ownership credential")) @@ -45,21 +45,21 @@ export async function verifyAgentIdentityWithCredential( // Resolve the agent's DID and controller const { controller } = await resolveDidWithController( credential.credentialSubject.id, - resolver + resolver, ) log( colors.dim( - `[verification] Verification result issuer: ${credential.issuer.id}` - ) + `[verification] Verification result issuer: ${credential.issuer.id}`, + ), ) // Check if the DID controller matches the controller in the credential if (credential.credentialSubject.controller !== controller.did) { log( colors.dim( - `[verification] Credential verification failed: Issuer ${credential.credentialSubject.id} doesn't match expected owner ${controller.did}` - ) + `[verification] Credential verification failed: Issuer ${credential.credentialSubject.id} doesn't match expected owner ${controller.did}`, + ), ) return false } @@ -67,8 +67,8 @@ export async function verifyAgentIdentityWithCredential( log( successMessage( `[verification] Credential verification succeeded: Agent is controlled by: - ${colors.bold(controller.did)}` - ) + ${colors.bold(controller.did)}`, + ), ) return true } catch (error) { diff --git a/demos/e2e/vitest.config.ts b/demos/e2e/vitest.config.ts index 6a8b09e..7972f77 100644 --- a/demos/e2e/vitest.config.ts +++ b/demos/e2e/vitest.config.ts @@ -3,6 +3,6 @@ import { defineConfig } from "vitest/config" export default defineConfig({ test: { passWithNoTests: true, - watch: false - } + watch: false, + }, }) diff --git a/demos/identity-a2a/README.md b/demos/identity-a2a/README.md index 3b9256c..1c36e4a 100644 --- a/demos/identity-a2a/README.md +++ b/demos/identity-a2a/README.md @@ -41,10 +41,10 @@ The Customer Agent sends an authentication request as an A2A message containing { "type": "data", "data": { - "jwt": "" - } - } - ] + "jwt": "", + }, + }, + ], } ``` @@ -57,7 +57,7 @@ The JWT payload includes: "nonce": "c-128bit-random", // Customer's random nonce "iat": 1718476800, "jti": "0e94d7ec-...", // Unique JWT ID - "exp": 1718477100 // 5-minute expiry + "exp": 1718477100, // 5-minute expiry } ``` @@ -74,10 +74,10 @@ The Bank Teller Agent verifies the customer's JWT signature and responds with it { "type": "data", "data": { - "jwt": "" - } - } - ] + "jwt": "", + }, + }, + ], } ``` @@ -91,7 +91,7 @@ The Bank's JWT payload: "replyNonce": "b-128bit-random", // Bank's new nonce "jti": "1f85c8fa-...", // Unique JWT ID "iat": 1718476805, - "exp": 1718477105 // Short expiry + "exp": 1718477105, // Short expiry } ``` @@ -107,12 +107,12 @@ After successful mutual authentication, all subsequent messages include a signat "parts": [ { "type": "text", - "text": "Please check the balance for account #12345" - } + "text": "Please check the balance for account #12345", + }, ], "metadata": { - "sig": "eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9...Q" // JWT signature of the parts array - } + "sig": "eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9...Q", // JWT signature of the parts array + }, } ``` diff --git a/demos/identity-a2a/eslint.config.js b/demos/identity-a2a/eslint.config.js index 0979926..13fe2a3 100644 --- a/demos/identity-a2a/eslint.config.js +++ b/demos/identity-a2a/eslint.config.js @@ -3,5 +3,5 @@ import { config } from "@repo/eslint-config/base" export default config({ - root: import.meta.dirname + root: import.meta.dirname, }) diff --git a/demos/identity-a2a/src/agent.ts b/demos/identity-a2a/src/agent.ts index a43b002..eefa2fb 100644 --- a/demos/identity-a2a/src/agent.ts +++ b/demos/identity-a2a/src/agent.ts @@ -14,7 +14,7 @@ import type { AgentExecutor, ExecutionEventBus, Message, - RequestContext + RequestContext, } from "@a2a-js/sdk" import { colors } from "@repo/cli-tools" import { @@ -28,7 +28,7 @@ import { type KeyCurve, type Keypair, type Verifiable, - type W3CCredential + type W3CCredential, } from "agentcommercekit" import { createAgentCardServiceEndpoint } from "agentcommercekit/a2a" import { v4 } from "uuid" @@ -46,7 +46,7 @@ export abstract class Agent implements AgentExecutor { public did: DidUri, public jwtSigner: JwtSigner, public didDocument: DidDocument, - public vc: Verifiable + public vc: Verifiable, ) {} static async create( @@ -56,9 +56,9 @@ export abstract class Agent implements AgentExecutor { did: DidUri, jwtSigner: JwtSigner, didDocument: DidDocument, - vc: Verifiable + vc: Verifiable, ) => T, - config: AgentConfig + config: AgentConfig, ) { const { agentCard, curve, controller } = config @@ -70,19 +70,19 @@ export abstract class Agent implements AgentExecutor { const didDocument = createDidDocumentFromKeypair({ did, keypair, - service: [createAgentCardServiceEndpoint(did, agentCardUrl)] + service: [createAgentCardServiceEndpoint(did, agentCardUrl)], }) console.log(`🌐 Generated ${curve} keypair with did:web for ${this.name}`) console.log(" DID:", colors.dim(did)) console.log( " Public key:", - colors.dim(Buffer.from(keypair.publicKey).toString("hex")) + colors.dim(Buffer.from(keypair.publicKey).toString("hex")), ) const vc = await issueCredential({ subject: did, - controller + controller, }) console.log("Generated sample VC for ownership attestation") @@ -93,7 +93,7 @@ export abstract class Agent implements AgentExecutor { async execute( requestContext: RequestContext, - eventBus: ExecutionEventBus + eventBus: ExecutionEventBus, ): Promise { const message: Message = { kind: "message", @@ -102,9 +102,9 @@ export abstract class Agent implements AgentExecutor { parts: [ { kind: "text", - text: `User message ${requestContext.userMessage.messageId} received and processed` - } - ] + text: `User message ${requestContext.userMessage.messageId} received and processed`, + }, + ], } eventBus.publish(message) @@ -112,7 +112,7 @@ export abstract class Agent implements AgentExecutor { async cancelTask( _taskId: string, - _eventBus: ExecutionEventBus + _eventBus: ExecutionEventBus, ): Promise { // Task canceled return Promise.resolve() diff --git a/demos/identity-a2a/src/bank-client-agent.ts b/demos/identity-a2a/src/bank-client-agent.ts index e999b21..9c6fcc2 100644 --- a/demos/identity-a2a/src/bank-client-agent.ts +++ b/demos/identity-a2a/src/bank-client-agent.ts @@ -5,7 +5,7 @@ import { A2AClient, type AgentCard, type Message, - type TextPart + type TextPart, } from "@a2a-js/sdk" import { colors, createLogger, waitForEnter } from "@repo/cli-tools" import { @@ -13,12 +13,12 @@ import { getDidResolver, resolveDid, verifyParsedCredential, - type DidUri + type DidUri, } from "agentcommercekit" import { createA2AHandshakeMessage, createSignedA2AMessage, - verifyA2AHandshakeMessage + verifyA2AHandshakeMessage, } from "agentcommercekit/a2a" import { messageSchema } from "agentcommercekit/a2a/schemas/valibot" import { v4 } from "uuid" @@ -29,7 +29,7 @@ import { fetchUrlFromAgentCardUrl } from "./utils/fetch-agent-card" import { isFailedTaskResponse, isMessageResponse, - isRpcErrorResponse + isRpcErrorResponse, } from "./utils/response-parsers" import { startAgentServer } from "./utils/server-utils" @@ -42,13 +42,13 @@ export class BankClientAgent extends Agent { async requestBankingServices(): Promise { console.log( colors.yellow( - "📚 STEP 1: Initial Setup - At this point, the agents cannot trust each other yet" - ) + "📚 STEP 1: Initial Setup - At this point, the agents cannot trust each other yet", + ), ) console.log( colors.yellow( - " The bank client needs to discover and authenticate with the bank teller" - ) + " The bank client needs to discover and authenticate with the bank teller", + ), ) console.log("") await waitForEnter("Press Enter to start the client agent...") @@ -61,12 +61,12 @@ export class BankClientAgent extends Agent { try { this.server = startAgentServer(this, { logger, - port: 3000 + port: 3000, }) logger.log("✅ Bank Client server started successfully") logger.log( - `🌐 Client DID document available at: ${colors.dim("http://localhost:3000/.well-known/did.json")}` + `🌐 Client DID document available at: ${colors.dim("http://localhost:3000/.well-known/did.json")}`, ) } catch (error) { logger.log("❌ Failed to start Bank Client server:", error as Error) @@ -78,18 +78,18 @@ export class BankClientAgent extends Agent { console.log( colors.yellow( - "📚 STEP 2: Service Discovery - Client discovers the bank's public DID" - ) + "📚 STEP 2: Service Discovery - Client discovers the bank's public DID", + ), ) console.log( colors.yellow( - " The client constructs the bank's did:web from its domain (localhost:3001)" - ) + " The client constructs the bank's did:web from its domain (localhost:3001)", + ), ) console.log( colors.yellow( - " Then resolves the DID document to find the bank's public keys and services" - ) + " Then resolves the DID document to find the bank's public keys and services", + ), ) console.log("") await waitForEnter("Press Enter to begin service discovery...") @@ -108,17 +108,17 @@ export class BankClientAgent extends Agent { console.log( colors.yellow( - "📚 STEP 2.5: Unauthenticated Request - Client tries to access services without identity proof" - ) + "📚 STEP 2.5: Unauthenticated Request - Client tries to access services without identity proof", + ), ) console.log( colors.yellow( - " Let's see what happens when we try to access banking services without authentication..." - ) + " Let's see what happens when we try to access banking services without authentication...", + ), ) console.log("") await waitForEnter( - "Press Enter to attempt unauthenticated banking request..." + "Press Enter to attempt unauthenticated banking request...", ) // Try to access banking services without authentication first @@ -130,14 +130,14 @@ export class BankClientAgent extends Agent { parts: [ { kind: "text", - text: "I would like to check my account balance please." - } - ] + text: "I would like to check my account balance please.", + }, + ], } const unauthenticatedParams = { id: v4(), - message: unauthenticatedMessage + message: unauthenticatedMessage, } logger.log("🚨 Sending unauthenticated request to bank...") @@ -155,12 +155,12 @@ export class BankClientAgent extends Agent { } catch (_error: unknown) { console.log("") console.log( - colors.yellow("EXPECTED RESULT: Bank rejects unauthenticated request") + colors.yellow("EXPECTED RESULT: Bank rejects unauthenticated request"), ) console.log( colors.yellow( - " The bank doesn't know who this customer is or if they can be trusted" - ) + " The bank doesn't know who this customer is or if they can be trusted", + ), ) console.log(colors.yellow(" Error received: Authentication required")) logger.log("✅ Bank REJECTED unauthenticated request") @@ -170,18 +170,18 @@ export class BankClientAgent extends Agent { console.log( colors.yellow( - "📚 STEP 3: Identity Challenge - Client sends cryptographic proof to bank" - ) + "📚 STEP 3: Identity Challenge - Client sends cryptographic proof to bank", + ), ) console.log( colors.yellow( - " Now the client creates a JWT signed with its private key, scoped to the bank's DID" - ) + " Now the client creates a JWT signed with its private key, scoped to the bank's DID", + ), ) console.log( colors.yellow( - " This cryptographically proves the client controls the private key for its DID" - ) + " This cryptographically proves the client controls the private key for its DID", + ), ) console.log("") await waitForEnter("Press Enter to send identity verification challenge...") @@ -189,7 +189,7 @@ export class BankClientAgent extends Agent { // Step 3: Send identity verification challenge const authSuccess = await this.performIdentityVerification( client, - serverDid + serverDid, ) if (!authSuccess) { throw new Error("❌ Identity verification failed!") @@ -198,18 +198,18 @@ export class BankClientAgent extends Agent { try { console.log( colors.yellow( - "📚 STEP 4: Authenticated Communication - Now both parties trust each other" - ) + "📚 STEP 4: Authenticated Communication - Now both parties trust each other", + ), ) console.log( colors.yellow( - " Client can now send signed messages to access banking services" - ) + " Client can now send signed messages to access banking services", + ), ) console.log( colors.yellow( - " Bank verifies each message signature against the client's established identity" - ) + " Bank verifies each message signature against the client's established identity", + ), ) console.log(colors.yellow(" This time the request should succeed!")) console.log("") @@ -224,20 +224,20 @@ export class BankClientAgent extends Agent { parts: [ { kind: "text", - text: "I would like to access my banking services. Please verify my identity." - } - ] + text: "I would like to access my banking services. Please verify my identity.", + }, + ], }, { did: this.did, jwtSigner: this.jwtSigner, alg: curveToJwtAlgorithm(this.keypair.curve), - expiresIn: 5 * 60 - } + expiresIn: 5 * 60, + }, ) const response = await client.sendMessage({ - message + message, }) if (isRpcErrorResponse(response)) { @@ -253,7 +253,7 @@ export class BankClientAgent extends Agent { if (!parseResult.success) { logger.log( "❌ Invalid bank response format:", - JSON.stringify(parseResult.issues) + JSON.stringify(parseResult.issues), ) return } @@ -268,24 +268,24 @@ export class BankClientAgent extends Agent { console.log("") console.log( - colors.yellow("📚 SUCCESS: Secure Banking Session Established!") + colors.yellow("📚 SUCCESS: Secure Banking Session Established!"), ) console.log( colors.yellow( - " ✓ Mutual authentication completed using cryptographic DIDs" - ) + " ✓ Mutual authentication completed using cryptographic DIDs", + ), ) console.log(colors.yellow(" ✓ No shared secrets or passwords required")) console.log( colors.yellow( - " ✓ Each message is cryptographically signed and verified" - ) + " ✓ Each message is cryptographically signed and verified", + ), ) console.log("") await waitForEnter("Press Enter to complete the demo...") logger.log( - "🏦 Bank Client: Thank you! I appreciate the secure identity verification process." + "🏦 Bank Client: Thank you! I appreciate the secure identity verification process.", ) } catch (error) { logger.log("❌ Error accessing banking services:", error as Error) @@ -303,7 +303,7 @@ export class BankClientAgent extends Agent { private async performIdentityVerification( client: A2AClient, - serverDid: DidUri + serverDid: DidUri, ): Promise { try { logger.log("🔐 Starting identity verification with bank teller...") @@ -312,22 +312,22 @@ export class BankClientAgent extends Agent { "user", { recipient: serverDid, - vc: this.vc + vc: this.vc, }, { did: this.did, jwtSigner: this.jwtSigner, alg: curveToJwtAlgorithm(this.keypair.curve), - expiresIn: 5 * 60 - } + expiresIn: 5 * 60, + }, ) logger.log( "Sending identity verification challenge...\n", - colors.dim(JSON.stringify(message, null, 2)) + colors.dim(JSON.stringify(message, null, 2)), ) const authResponse = await client.sendMessage({ - message + message, }) if ("error" in authResponse) { @@ -336,7 +336,7 @@ export class BankClientAgent extends Agent { if (authResponse.result.kind !== "message") { throw new Error( - "❌ Failed to send identity verification challenge: Did not receive message response" + "❌ Failed to send identity verification challenge: Did not receive message response", ) } @@ -347,13 +347,13 @@ export class BankClientAgent extends Agent { // Validate that this is intended for our DID did: this.did, // Validate that the bank teller is the counterparty - counterparty: serverDid - } + counterparty: serverDid, + }, ) await verifyParsedCredential(bankVc, { resolver: didResolverWithIssuer, - trustedIssuers: [issuerDid] + trustedIssuers: [issuerDid], }) // Check that bank teller included our nonce @@ -394,19 +394,19 @@ export class BankClientAgent extends Agent { logger.log(" DID Document ID:", colors.dim(didDocument.id)) logger.log( " Services:", - colors.dim(JSON.stringify(didDocument.service, null, 2)) + colors.dim(JSON.stringify(didDocument.service, null, 2)), ) // Look for AgentCard service in the DID document if (didDocument.service && didDocument.service.length > 0) { const agentCardService = didDocument.service.find( - (service) => service.type === "AgentCard" + (service) => service.type === "AgentCard", ) if (!agentCardService) { logger.log("⚠️ No AgentCard service found in DID document") throw new Error( - "No AgentCard service found in bank teller DID document" + "No AgentCard service found in bank teller DID document", ) } @@ -414,7 +414,7 @@ export class BankClientAgent extends Agent { logger.log(" Service ID:", colors.dim(agentCardService.id)) logger.log( " Service Endpoint:", - colors.dim(JSON.stringify(agentCardService.serviceEndpoint, null, 2)) + colors.dim(JSON.stringify(agentCardService.serviceEndpoint, null, 2)), ) // Extract the A2A server URL from the service endpoint @@ -424,17 +424,17 @@ export class BankClientAgent extends Agent { // We need to fetch the url from the agent card this.a2aServerUrl = await fetchUrlFromAgentCardUrl( - agentCardService.serviceEndpoint + agentCardService.serviceEndpoint, ) logger.log( "✅ Discovered A2A server URL:", - colors.dim(this.a2aServerUrl) + colors.dim(this.a2aServerUrl), ) } } catch (error) { logger.log( "❌ Failed to resolve bank teller DID document:", - error as Error + error as Error, ) throw error // Don't continue if we can't resolve the DID document } @@ -450,13 +450,13 @@ const agentCard: AgentCard = { defaultInputModes: ["text"], defaultOutputModes: ["text"], capabilities: { streaming: false }, - skills: [] + skills: [], } export async function getClientAgent() { return BankClientAgent.create({ agentCard, curve: "Ed25519", - controller: "did:web:builder.ack.com" + controller: "did:web:builder.ack.com", }) } diff --git a/demos/identity-a2a/src/bank-teller-agent.ts b/demos/identity-a2a/src/bank-teller-agent.ts index 7c95709..6eef6f6 100644 --- a/demos/identity-a2a/src/bank-teller-agent.ts +++ b/demos/identity-a2a/src/bank-teller-agent.ts @@ -3,18 +3,18 @@ import { type AgentCard, type ExecutionEventBus, type Message, - type RequestContext + type RequestContext, } from "@a2a-js/sdk" import { colors, createLogger, waitForEnter } from "@repo/cli-tools" import { curveToJwtAlgorithm, isDidUri, - verifyParsedCredential + verifyParsedCredential, } from "agentcommercekit" import { createA2AHandshakeMessage, verifyA2AHandshakeMessage, - verifyA2ASignedMessage + verifyA2ASignedMessage, } from "agentcommercekit/a2a" import { v4 } from "uuid" import { Agent } from "./agent" @@ -28,7 +28,7 @@ class BankTellerAgent extends Agent { async execute( requestContext: RequestContext, - eventBus: ExecutionEventBus + eventBus: ExecutionEventBus, ): Promise { // Access message from request params const userMessage = requestContext.userMessage @@ -44,11 +44,11 @@ class BankTellerAgent extends Agent { try { logger.log( "🔐 Verifying authentication request\n", - colors.dim(JSON.stringify(userMessage, null, 2)) + colors.dim(JSON.stringify(userMessage, null, 2)), ) const { issuer: clientDid } = await verifyA2ASignedMessage(userMessage, { - did: this.did + did: this.did, }) if (!isDidUri(clientDid)) { @@ -67,9 +67,9 @@ class BankTellerAgent extends Agent { parts: [ { kind: "text", - text: `Verified ${clientDid}. You can now access your account.` - } - ] + text: `Verified ${clientDid}. You can now access your account.`, + }, + ], } eventBus.publish(message) @@ -80,27 +80,27 @@ class BankTellerAgent extends Agent { private isAuthRequest(message: Message): boolean { return message.parts.some( - (part) => part.kind === "data" && "jwt" in part.data + (part) => part.kind === "data" && "jwt" in part.data, ) } private async handleAuthentication( - requestContext: RequestContext + requestContext: RequestContext, ): Promise { try { console.log("") console.log( - colors.yellow("📚 BANK PERSPECTIVE: Verifying Customer Identity") + colors.yellow("📚 BANK PERSPECTIVE: Verifying Customer Identity"), ) console.log(colors.yellow(" Bank receives a JWT from unknown customer")) console.log( colors.yellow( - " Must verify: 1) JWT signature is valid, 2) Customer controls the DID" - ) + " Must verify: 1) JWT signature is valid, 2) Customer controls the DID", + ), ) console.log("") await waitForEnter( - "Press Enter for bank to begin identity verification..." + "Press Enter for bank to begin identity verification...", ) logger.log("🔐 Processing customer identity verification request...") @@ -108,25 +108,25 @@ class BankTellerAgent extends Agent { const { nonce: clientNonce, iss: clientDid, - vc: clientVc + vc: clientVc, } = await verifyA2AHandshakeMessage(requestContext.userMessage, { - did: this.did + did: this.did, }) await verifyParsedCredential(clientVc, { resolver: didResolverWithIssuer, - trustedIssuers: [issuerDid] + trustedIssuers: [issuerDid], }) console.log( colors.yellow( - "✅ TRUST ESTABLISHED: Customer cryptographically proved their identity" - ) + "✅ TRUST ESTABLISHED: Customer cryptographically proved their identity", + ), ) console.log( colors.yellow( - " Bank now knows this customer controls the private key for their DID" - ) + " Bank now knows this customer controls the private key for their DID", + ), ) console.log("") await waitForEnter("Press Enter for bank to create response JWT...") @@ -138,14 +138,14 @@ class BankTellerAgent extends Agent { { recipient: clientDid, requestNonce: clientNonce, - vc: this.vc + vc: this.vc, }, { did: this.did, jwtSigner: this.jwtSigner, alg: curveToJwtAlgorithm(this.keypair.curve), - expiresIn: 5 * 60 - } + expiresIn: 5 * 60, + }, ) // Add client to authenticated list @@ -153,27 +153,27 @@ class BankTellerAgent extends Agent { console.log( colors.yellow( - "🔐 RESPONSE: Bank sends back signed proof of successful verification" - ) + "🔐 RESPONSE: Bank sends back signed proof of successful verification", + ), ) console.log( colors.yellow( - " Bank creates a response JWT that includes the customer's nonce" - ) + " Bank creates a response JWT that includes the customer's nonce", + ), ) console.log( colors.yellow( - " This proves to customer that bank verified their identity correctly" - ) + " This proves to customer that bank verified their identity correctly", + ), ) console.log("") await waitForEnter( - "Press Enter to send authentication response back to customer..." + "Press Enter to send authentication response back to customer...", ) logger.log( "🔐 Identity verification successful for customer:", - colors.dim(clientDid) + colors.dim(clientDid), ) logger.log(colors.dim(JSON.stringify(message, null, 2))) @@ -185,7 +185,7 @@ class BankTellerAgent extends Agent { -32603, "Identity verification failed", {}, - requestContext.taskId + requestContext.taskId, ) } } @@ -210,10 +210,10 @@ const agentCard: AgentCard = { examples: [ "verify my identity", "I need banking services", - "access my account" - ] - } - ] + "access my account", + ], + }, + ], } export async function startTellerServer() { @@ -221,12 +221,12 @@ export async function startTellerServer() { const bankTellerAgent = await BankTellerAgent.create({ agentCard, curve: "secp256k1", - controller: "did:web:bank.com" + controller: "did:web:bank.com", }) // Start the server using shared utility return startAgentServer(bankTellerAgent, { logger, - port: 3001 + port: 3001, }) } diff --git a/demos/identity-a2a/src/issuer.ts b/demos/identity-a2a/src/issuer.ts index 23ba83f..c814e2b 100644 --- a/demos/identity-a2a/src/issuer.ts +++ b/demos/identity-a2a/src/issuer.ts @@ -7,7 +7,7 @@ import { getDidResolver, parseJwtCredential, signCredential, - type DidUri + type DidUri, } from "agentcommercekit" const issuerKeypair = await generateKeypair("Ed25519") @@ -15,7 +15,7 @@ const issuerKeypair = await generateKeypair("Ed25519") export const issuerDid = createDidKeyUri(issuerKeypair) export const issuerDidDocument = createDidDocumentFromKeypair({ did: issuerDid, - keypair: issuerKeypair + keypair: issuerKeypair, }) const signer = createJwtSigner(issuerKeypair) @@ -27,7 +27,7 @@ export const didResolverWithIssuer = resolver export async function issueCredential({ subject, - controller + controller, }: { subject: DidUri controller: DidUri @@ -35,13 +35,13 @@ export async function issueCredential({ const credential = createControllerCredential({ subject, controller, - issuer: issuerDid + issuer: issuerDid, }) const jwt = await signCredential(credential, { did: issuerDid, signer, - alg: "EdDSA" + alg: "EdDSA", }) const verifiableCredential = await parseJwtCredential(jwt, resolver) diff --git a/demos/identity-a2a/src/run-demo.ts b/demos/identity-a2a/src/run-demo.ts index 3abdd27..542b6eb 100644 --- a/demos/identity-a2a/src/run-demo.ts +++ b/demos/identity-a2a/src/run-demo.ts @@ -5,19 +5,19 @@ import { startTellerServer } from "./bank-teller-agent" async function main() { console.log("🚀 Starting A2A Bank Identity Verification Demo...\n") console.log( - colors.yellow("📚 DEMO OVERVIEW: ACK-ID + A2A Identity Verification") + colors.yellow("📚 DEMO OVERVIEW: ACK-ID + A2A Identity Verification"), ) console.log( colors.yellow( - " This demo shows how two agents establish trust without shared secrets" - ) + " This demo shows how two agents establish trust without shared secrets", + ), ) console.log(colors.yellow(" • Bank Teller: secp256k1 keys (ES256K JWTs)")) console.log(colors.yellow(" • Bank Customer: Ed25519 keys (EdDSA JWTs)")) console.log( colors.yellow( - " • Trust is established through cryptographic proof of DID ownership" - ) + " • Trust is established through cryptographic proof of DID ownership", + ), ) console.log("") @@ -28,8 +28,8 @@ async function main() { // Start the bank teller server console.log( colors.yellow( - "🏦 Starting Bank Teller Agent (will wait for customer connections)..." - ) + "🏦 Starting Bank Teller Agent (will wait for customer connections)...", + ), ) console.log("") const server = await startTellerServer() @@ -40,8 +40,8 @@ async function main() { console.log("") console.log( colors.yellow( - "📚 Now starting Bank Customer Agent to connect to the bank..." - ) + "📚 Now starting Bank Customer Agent to connect to the bank...", + ), ) console.log("") await waitForEnter("Press Enter to start the customer agent...") diff --git a/demos/identity-a2a/src/utils/fetch-agent-card.ts b/demos/identity-a2a/src/utils/fetch-agent-card.ts index 79a906b..da1424f 100644 --- a/demos/identity-a2a/src/utils/fetch-agent-card.ts +++ b/demos/identity-a2a/src/utils/fetch-agent-card.ts @@ -2,11 +2,11 @@ import * as v from "valibot" // Minimal agent card schema to ensure it has a URL const objectWithUrlSchema = v.object({ - url: v.pipe(v.string(), v.url()) + url: v.pipe(v.string(), v.url()), }) export async function fetchUrlFromAgentCardUrl( - agentCardUrl: string | URL + agentCardUrl: string | URL, ): Promise { const url = new URL(agentCardUrl) const response = await fetch(url) diff --git a/demos/identity-a2a/src/utils/response-parsers.ts b/demos/identity-a2a/src/utils/response-parsers.ts index 8b6ec9a..74c10bf 100644 --- a/demos/identity-a2a/src/utils/response-parsers.ts +++ b/demos/identity-a2a/src/utils/response-parsers.ts @@ -1,23 +1,23 @@ import type { JSONRPCErrorResponse, SendMessageResponse, - SendMessageSuccessResponse + SendMessageSuccessResponse, } from "@a2a-js/sdk" export function isRpcSuccessResponse( - resp: SendMessageResponse + resp: SendMessageResponse, ): resp is SendMessageSuccessResponse { return "result" in resp } export function isRpcErrorResponse( - resp: SendMessageResponse + resp: SendMessageResponse, ): resp is JSONRPCErrorResponse { return "error" in resp } export function isMessageResponse( - resp: SendMessageResponse + resp: SendMessageResponse, ): resp is SendMessageSuccessResponse { if (isRpcErrorResponse(resp)) { return false diff --git a/demos/identity-a2a/src/utils/server-utils.ts b/demos/identity-a2a/src/utils/server-utils.ts index d0a7691..dbc5e61 100644 --- a/demos/identity-a2a/src/utils/server-utils.ts +++ b/demos/identity-a2a/src/utils/server-utils.ts @@ -1,7 +1,7 @@ import { A2AExpressApp, DefaultRequestHandler, - InMemoryTaskStore + InMemoryTaskStore, } from "@a2a-js/sdk" import { colors, createLogger, type Logger } from "@repo/cli-tools" import express from "express" @@ -21,8 +21,8 @@ export function startAgentServer( { logger = createLogger("server"), host = "0.0.0.0", - port = 3001 - }: Options = {} + port = 3001, + }: Options = {}, ) { logger.log(`🏦 Starting ${agent.constructor.name} on port ${port}...`) logger.log(`🆔 Bank Teller DID: ${colors.dim(agent.did)}`) @@ -37,7 +37,7 @@ export function startAgentServer( const requestHandler = new DefaultRequestHandler( agent.agentCard, new InMemoryTaskStore(), - agent + agent, ) const appBuilder = new A2AExpressApp(requestHandler) @@ -54,14 +54,14 @@ export function startAgentServer( logger.log( "🌐 DID document endpoint added at:", - colors.dim("/.well-known/did.json") + colors.dim("/.well-known/did.json"), ) // Start the server using the same app instance const expressServer = app.listen(port, host, () => { logger.log(`A2A Server running at ${colors.dim(`http://${host}:${port}`)}`) logger.log( - `🌐 DID document available at: ${colors.dim(`http://localhost:${port}/.well-known/did.json`)}` + `🌐 DID document available at: ${colors.dim(`http://localhost:${port}/.well-known/did.json`)}`, ) }) diff --git a/demos/identity-a2a/vitest.config.ts b/demos/identity-a2a/vitest.config.ts index 6a8b09e..7972f77 100644 --- a/demos/identity-a2a/vitest.config.ts +++ b/demos/identity-a2a/vitest.config.ts @@ -3,6 +3,6 @@ import { defineConfig } from "vitest/config" export default defineConfig({ test: { passWithNoTests: true, - watch: false - } + watch: false, + }, }) diff --git a/demos/identity/eslint.config.js b/demos/identity/eslint.config.js index 0979926..13fe2a3 100644 --- a/demos/identity/eslint.config.js +++ b/demos/identity/eslint.config.js @@ -3,5 +3,5 @@ import { config } from "@repo/eslint-config/base" export default config({ - root: import.meta.dirname + root: import.meta.dirname, }) diff --git a/demos/identity/src/agent.ts b/demos/identity/src/agent.ts index 63fcdac..67cae3f 100644 --- a/demos/identity/src/agent.ts +++ b/demos/identity/src/agent.ts @@ -12,7 +12,7 @@ import { type JwtSigner, type Keypair, type Verifiable, - type W3CCredential + type W3CCredential, } from "agentcommercekit" import type { CoreMessage } from "ai" import type { CredentialVerifier } from "./credential-verifier" @@ -48,7 +48,7 @@ export abstract class Agent { baseUrl, ownerDid, verifier, - keypair + keypair, }: AgentConstructorParams) { const did = createDidWebUri(baseUrl) const didDocument = createDidDocumentFromKeypair({ @@ -59,14 +59,14 @@ export abstract class Agent { { id: `${did}/chat`, type: "ChatEndpoint", - serviceEndpoint: `${baseUrl}/chat` + serviceEndpoint: `${baseUrl}/chat`, }, { id: `${did}/identity`, type: "IdentityService", - serviceEndpoint: `${baseUrl}/identity` - } - ] + serviceEndpoint: `${baseUrl}/identity`, + }, + ], }) this.did = did @@ -82,7 +82,7 @@ export abstract class Agent { static async create( this: new (params: AgentConstructorParams) => T, - params: Omit + params: Omit, ): Promise { const keypair = await generateKeypair("secp256k1") return new this({ ...params, keypair }) @@ -105,11 +105,11 @@ export abstract class Agent { { sub: challenge }, { issuer: this.did, - signer: this.signer + signer: this.signer, }, { - alg: curveToJwtAlgorithm(this.keypair.curve) - } + alg: curveToJwtAlgorithm(this.keypair.curve), + }, ) return challengeResponse @@ -118,13 +118,13 @@ export abstract class Agent { async run(prompt: string): Promise { console.log( `${colors.yellow(`\n> Agent ${this.did} processing prompt:`)} "${colors.dim( - prompt - )}"` + prompt, + )}"`, ) this.messages.push({ role: "user", - content: prompt + content: prompt, }) const result = await this._run(this.messages) diff --git a/demos/identity/src/client-agent.ts b/demos/identity/src/client-agent.ts index e247825..916d68f 100644 --- a/demos/identity/src/client-agent.ts +++ b/demos/identity/src/client-agent.ts @@ -6,7 +6,7 @@ import { Agent } from "./agent" import { getModel } from "./get-model" const agentResponseSchema = v.object({ - text: v.string() + text: v.string(), }) export class ClientAgent extends Agent { @@ -27,9 +27,9 @@ export class ClientAgent extends Agent { v.object({ message: v.pipe( v.string(), - v.description("The message to send to the haiku agent") - ) - }) + v.description("The message to send to the haiku agent"), + ), + }), ), execute: async ({ message }) => { console.log(colors.dim(`> Agent ${this.did} calling haiku agent`)) @@ -38,18 +38,18 @@ export class ClientAgent extends Agent { method: "POST", body: JSON.stringify({ message }), headers: { - "Content-Type": "application/json" - } + "Content-Type": "application/json", + }, }) const { text } = v.parse(agentResponseSchema, await response.json()) console.log( - colors.dim(`< Received response from haiku agent: ${text}`) + colors.dim(`< Received response from haiku agent: ${text}`), ) return text - } + }, }), isComplete: tool({ description: @@ -60,14 +60,14 @@ export class ClientAgent extends Agent { this.haikuComplete = true return Promise.resolve("success") - } - }) - } + }, + }), + }, }) return { text: result.text, - responseMessages: result.response.messages + responseMessages: result.response.messages, } } } diff --git a/demos/identity/src/credential-issuer.ts b/demos/identity/src/credential-issuer.ts index ac98954..09ee0b0 100644 --- a/demos/identity/src/credential-issuer.ts +++ b/demos/identity/src/credential-issuer.ts @@ -12,7 +12,7 @@ import { type JwtString, type Keypair, type Verifiable, - type W3CCredential + type W3CCredential, } from "agentcommercekit" import { didUriSchema } from "agentcommercekit/schemas/valibot" import * as v from "valibot" @@ -25,7 +25,7 @@ interface CredentialIssuerParams { const credentialPayloadSchema = v.object({ controller: didUriSchema, - subject: didUriSchema + subject: didUriSchema, }) export class CredentialIssuer { @@ -37,7 +37,7 @@ export class CredentialIssuer { private readonly resolver: DidResolver static async create( - params: Omit + params: Omit, ): Promise { const keypair = await generateKeypair("secp256k1") return new this({ ...params, keypair }) @@ -54,7 +54,7 @@ export class CredentialIssuer { // Did Document const { did, didDocument } = createDidWebDocumentFromKeypair({ keypair: this.keypair, - baseUrl: this.baseUrl + baseUrl: this.baseUrl, }) this.did = did this.didDocument = didDocument @@ -65,18 +65,18 @@ export class CredentialIssuer { } async issueAgentOwnershipVc( - signedPayload: JwtString + signedPayload: JwtString, ): Promise> { const parsed = await verifyJwt(signedPayload, { resolver: this.resolver, policies: { - aud: false - } + aud: false, + }, }) const { controller, subject } = v.parse( credentialPayloadSchema, - parsed.payload + parsed.payload, ) const id = `${this.baseUrl}/credentials/${parsed.payload.id}` @@ -84,13 +84,13 @@ export class CredentialIssuer { id, subject, controller, - issuer: this.did + issuer: this.did, }) const jwt = await signCredential(credential, { did: this.did, signer: this.signer, - alg: "ES256K" + alg: "ES256K", }) const verifiableCredential = await parseJwtCredential(jwt, this.resolver) diff --git a/demos/identity/src/credential-verifier.ts b/demos/identity/src/credential-verifier.ts index 6e79082..c2d9f17 100644 --- a/demos/identity/src/credential-verifier.ts +++ b/demos/identity/src/credential-verifier.ts @@ -9,7 +9,7 @@ import { type DidUri, type JwtSigner, type Keypair, - type W3CCredential + type W3CCredential, } from "agentcommercekit" interface CredentialVerifierParams { @@ -28,7 +28,7 @@ export class CredentialVerifier { private readonly trustedIssuers?: DidUri[] static async create( - params: Omit + params: Omit, ): Promise { const keypair = await generateKeypair("secp256k1") return new this({ ...params, keypair }) @@ -38,7 +38,7 @@ export class CredentialVerifier { baseUrl, resolver, trustedIssuers, - keypair + keypair, }: CredentialVerifierParams) { // Keypair this.keypair = keypair @@ -47,7 +47,7 @@ export class CredentialVerifier { // Did Document const { did, didDocument } = createDidWebDocumentFromKeypair({ keypair: this.keypair, - baseUrl + baseUrl, }) this.did = did this.didDocument = didDocument @@ -62,7 +62,7 @@ export class CredentialVerifier { await verifyParsedCredential(credential, { resolver: this.resolver, trustedIssuers: this.trustedIssuers, - verifiers: [getControllerClaimVerifier()] + verifiers: [getControllerClaimVerifier()], }) } } diff --git a/demos/identity/src/get-model.ts b/demos/identity/src/get-model.ts index 39f65dc..d16cc4b 100644 --- a/demos/identity/src/get-model.ts +++ b/demos/identity/src/get-model.ts @@ -7,11 +7,11 @@ export const providerKeySet = export const getModel = () => { if (process.env.ANTHROPIC_API_KEY) { return createAnthropic({ - apiKey: process.env.ANTHROPIC_API_KEY + apiKey: process.env.ANTHROPIC_API_KEY, })("claude-3-7-sonnet-20250219") } else if (process.env.OPENAI_API_KEY) { return createOpenAI({ - apiKey: process.env.OPENAI_API_KEY + apiKey: process.env.OPENAI_API_KEY, })("gpt-4o") } diff --git a/demos/identity/src/haiku-agent.ts b/demos/identity/src/haiku-agent.ts index 72c0596..674bde5 100644 --- a/demos/identity/src/haiku-agent.ts +++ b/demos/identity/src/haiku-agent.ts @@ -14,14 +14,14 @@ export class HaikuAgent extends Agent { tools: { ...getIdentityTools({ resolver: this.resolver, - verifier: this.verifier - }) - } + verifier: this.verifier, + }), + }, }) return { text: result.text, - responseMessages: result.response.messages + responseMessages: result.response.messages, } } } diff --git a/demos/identity/src/identity-tools.ts b/demos/identity/src/identity-tools.ts index 8f0f29f..a25257c 100644 --- a/demos/identity/src/identity-tools.ts +++ b/demos/identity/src/identity-tools.ts @@ -4,7 +4,7 @@ import { resolveDid, verifyJwt, type DidResolver, - type DidUri + type DidUri, } from "agentcommercekit" import { credentialSchema } from "agentcommercekit/schemas/valibot" import { tool } from "ai" @@ -12,7 +12,7 @@ import * as v from "valibot" import type { CredentialVerifier } from "./credential-verifier" const challengeResponseSchema = v.object({ - signedChallenge: v.string() + signedChallenge: v.string(), }) type IdentityToolsParams = { @@ -23,13 +23,13 @@ type IdentityToolsParams = { async function verifyIdentity( did: DidUri, resolver: DidResolver, - verifier: CredentialVerifier + verifier: CredentialVerifier, ) { const didResolution = await resolveDid(did, resolver) // Extract the identity service endpoint from the DID document const identityService = didResolution.didDocument.service?.find( - (s) => s.type === "IdentityService" + (s) => s.type === "IdentityService", ) if (!identityService) { @@ -50,22 +50,22 @@ async function verifyIdentity( method: "POST", body: JSON.stringify({ challenge }), headers: { - "Content-Type": "application/json" - } - } + "Content-Type": "application/json", + }, + }, ) const { signedChallenge } = v.parse( challengeResponseSchema, - await challengeResponse.json() + await challengeResponse.json(), ) const parsed = await verifyJwt(signedChallenge, { resolver, issuer: did, policies: { - aud: false - } + aud: false, + }, }) if (parsed.payload.sub !== challenge) { @@ -89,8 +89,8 @@ export function getIdentityTools({ resolver, verifier }: IdentityToolsParams) { description: "Validate counterparty identity", parameters: valibotSchema( v.object({ - did: v.string() - }) + did: v.string(), + }), ), execute: async ({ did }) => { console.log(colors.dim(`> Validating identity for ${did}`)) @@ -99,14 +99,14 @@ export function getIdentityTools({ resolver, verifier }: IdentityToolsParams) { } catch (_error: unknown) { return { success: false, - message: "Identity validation failed" + message: "Identity validation failed", } } return { success: true, - message: "Identity validated" + message: "Identity validated", } - } - }) + }, + }), } } diff --git a/demos/identity/src/index.ts b/demos/identity/src/index.ts index de365fc..77436e4 100644 --- a/demos/identity/src/index.ts +++ b/demos/identity/src/index.ts @@ -12,13 +12,13 @@ import { sectionHeader, select, updateEnvFile, - waitForEnter + waitForEnter, } from "@repo/cli-tools" import { createJwt, getDidResolver, parseJwtCredential, - type DidUri + type DidUri, } from "agentcommercekit" import { ClientAgent } from "./client-agent" import { CredentialIssuer } from "./credential-issuer" @@ -42,29 +42,29 @@ Press Enter at each step to continue. const credentialIssuer = await CredentialIssuer.create({ baseUrl: "https://issuer.example.com", - resolver + resolver, }) const credentialVerifier = await CredentialVerifier.create({ baseUrl: "https://verifier.example.com", resolver, - trustedIssuers: [credentialIssuer.did] + trustedIssuers: [credentialIssuer.did], }) async function createOwnershipVc(agentDid: DidUri, owner: Owner) { const payload = { controller: owner.did, - subject: agentDid + subject: agentDid, } const signedPayload = await createJwt( payload, { issuer: owner.did, - signer: owner.signer + signer: owner.signer, }, { - alg: owner.algorithm - } + alg: owner.algorithm, + }, ) return credentialIssuer.issueAgentOwnershipVc(signedPayload) @@ -73,8 +73,8 @@ async function createOwnershipVc(agentDid: DidUri, owner: Owner) { async function promptForProviderKey() { log( colors.yellow( - "\nNOTE: An Anthropic or OpenAI API key is required to simulate agent interaction. Please select an option below:" - ) + "\nNOTE: An Anthropic or OpenAI API key is required to simulate agent interaction. Please select an option below:", + ), ) const selection = await select({ @@ -82,8 +82,8 @@ async function promptForProviderKey() { choices: [ { value: "anthropic", name: "Anthropic" }, { value: "openai", name: "OpenAI" }, - { value: "exit", name: "Exit" } - ] + { value: "exit", name: "Exit" }, + ], }) if (selection === "exit") { @@ -94,8 +94,8 @@ async function promptForProviderKey() { const storeInEnv = await confirm({ message: colors.white( - "Store in the .env file to skip this step in the future?" - ) + "Store in the .env file to skip this step in the future?", + ), }) const envKey = @@ -106,7 +106,7 @@ async function promptForProviderKey() { if (storeInEnv) { await updateEnvFile( { [envKey]: apiKey }, - path.resolve(currentDir, "..", ".env") + path.resolve(currentDir, "..", ".env"), ) } } @@ -122,13 +122,13 @@ async function main() { log( sectionHeader("📝 Creating Identity for Agent Owner 1 (Client Owner)", { - step: 1 - }) + step: 1, + }), ) log( colors.dim( - "First, we need an 'Owner'. In ACK-ID, an Owner is the human or legal entity ultimately responsible for an agent's actions. In this example, the agent will have a direct relationship with their owner, but in practice there may be a chain of ownership. We'll create an Owner identity using a Decentralized Identifier (DID). A DID is a globally unique ID that the owner controls, not issued by a central authority. Associated with the DID is a DID Document, which contains public keys for verification." - ) + "First, we need an 'Owner'. In ACK-ID, an Owner is the human or legal entity ultimately responsible for an agent's actions. In this example, the agent will have a direct relationship with their owner, but in practice there may be a chain of ownership. We'll create an Owner identity using a Decentralized Identifier (DID). A DID is a globally unique ID that the owner controls, not issued by a central authority. Associated with the DID is a DID Document, which contains public keys for verification.", + ), ) const clientOwner = await createOwner() @@ -137,28 +137,28 @@ async function main() { log( `\n✨ Agent Owner 1 (Client Owner) Created! ✨ -Owner DID (Unique Identifier):` +Owner DID (Unique Identifier):`, ) log(colors.dim(clientOwner.did), { wrap: false }) log( colors.italic( - "\n This is the unique, self-sovereign identifier for our first agent owner.\n" - ) + "\n This is the unique, self-sovereign identifier for our first agent owner.\n", + ), ) log("Owner DID Document (Public Keys & Metadata):") logJson(clientOwner.didDocument as Record, colors.magenta) log( colors.italic( - "\n This document contains cryptographic public keys that allow others to verify signatures made by this owner." - ) + "\n This document contains cryptographic public keys that allow others to verify signatures made by this owner.", + ), ) await waitForEnter() log( sectionHeader("🤖 Creating Client Agent (Owned by Owner 1)", { - step: 2 - }) + step: 2, + }), ) log( colors.dim( @@ -169,34 +169,34 @@ This step creates a new Client Agent with its own DID. The Client Agent will be The Client Agent DID Document will have a "controller" field that links to the Owner's DID. The provable ownership relationship will be formalized through a Verifiable Credential in the next step. In this example, the Client Agent will have their DID hosted on a locally-running server (localhost:5678). -` - ) +`, + ), ) const clientAgent = await ClientAgent.create({ resolver, baseUrl: "http://localhost:5678", ownerDid: clientOwner.did, - verifier: credentialVerifier + verifier: credentialVerifier, }) log( `\n✨ Client Agent Created! ✨ -Client Agent DID (Unique Identifier for the Agent):` +Client Agent DID (Unique Identifier for the Agent):`, ) log(colors.dim(clientAgent.did), { wrap: false }) log( colors.italic( - "\n This is the unique identifier for the client agent itself." - ) + "\n This is the unique identifier for the client agent itself.", + ), ) log("Client Agent DID Document (Agent's Public Keys & Metadata):") logJson(clientAgent.didDocument as Record, colors.magenta) log( colors.italic( - "\n This document allows the client agent to prove its identity and sign messages." - ) + "\n This document allows the client agent to prove its identity and sign messages.", + ), ) await waitForEnter() @@ -205,28 +205,28 @@ Client Agent DID (Unique Identifier for the Agent):` sectionHeader( "🎫 Issuing Ownership Verifiable Credential (VC) for Client Agent", { - step: 3 - } - ) + step: 3, + }, + ), ) log( colors.dim( `${colors.bold("Owner 1 issues a VC to Client Agent")} -In this step, Owner 1 issues a Verifiable Credential to the Client Agent, formally establishing the ownership relationship. This VC is cryptographically signed by Owner 1 and contains claims about the ownership relationship. The Client Agent can present this VC to prove its ownership status.` - ) +In this step, Owner 1 issues a Verifiable Credential to the Client Agent, formally establishing the ownership relationship. This VC is cryptographically signed by Owner 1 and contains claims about the ownership relationship. The Client Agent can present this VC to prove its ownership status.`, + ), ) const clientOwnershipVc = await createOwnershipVc( clientAgent.did, - clientOwner + clientOwner, ) clientAgent.setOwnershipVc(clientOwnershipVc) log( `\n✨ Client Agent Ownership VC Issued! ✨ -Client Agent Ownership Credential (Proof of Ownership):` +Client Agent Ownership Credential (Proof of Ownership):`, ) const parsedClientOwnershipVc = typeof clientOwnershipVc === "string" @@ -235,23 +235,23 @@ Client Agent Ownership Credential (Proof of Ownership):` logJson(parsedClientOwnershipVc, colors.magenta) log( colors.italic( - "\n Notice the 'issuer' is Owner 1's DID, and the 'credentialSubject' links to the Client Agent's DID.\n The 'proof' section contains the digital signature from Owner 1." - ) + "\n Notice the 'issuer' is Owner 1's DID, and the 'credentialSubject' links to the Client Agent's DID.\n The 'proof' section contains the digital signature from Owner 1.", + ), ) await waitForEnter() log( sectionHeader("🔄 Repeating for Server Agent & Owner 2", { - step: 4 - }) + step: 4, + }), ) log( colors.dim( `${colors.bold("Creating Owner 2 and Server Agent")} -This step repeats the process for a second owner (Owner 2) and a Server Agent. The Server Agent will be owned by Owner 2, creating a parallel structure to the Client Agent and Owner 1 relationship. This demonstrates how multiple agents can be created and owned by different entities.` - ) +This step repeats the process for a second owner (Owner 2) and a Server Agent. The Server Agent will be owned by Owner 2, creating a parallel structure to the Client Agent and Owner 1 relationship. This demonstrates how multiple agents can be created and owned by different entities.`, + ), ) await waitForEnter("Press Enter to create Server Agent Owner (Owner 2)...") @@ -262,11 +262,11 @@ This step repeats the process for a second owner (Owner 2) and a Server Agent. T log( `\n✨ Agent Owner 2 (Server Owner) Created! ✨ -Owner DID (Unique Identifier):` +Owner DID (Unique Identifier):`, ) log(colors.dim(serverOwner.did), { wrap: false }) log( - colors.italic("\n Another unique DID, this time for the server's owner.") + colors.italic("\n Another unique DID, this time for the server's owner."), ) log("Owner DID Document (Public Keys & Metadata):") logJson(serverOwner.didDocument as Record, colors.magenta) @@ -280,45 +280,45 @@ Similar to the Client Agent, we provide: ${colors.italic(" - resolver: The same DID resolver instance.")} ${colors.italic(" - baseUrl: A different network address for this server agent (it will run on a different port).")} ${colors.italic(" - ownerDid: The DID of Owner 2, establishing its ownership.")} -${colors.italic(" - verifier: The same credential verifier, so it shares the same trust policies (e.g., trusted issuers).")}` - ) +${colors.italic(" - verifier: The same credential verifier, so it shares the same trust policies (e.g., trusted issuers).")}`, + ), ) const serverAgent = await HaikuAgent.create({ resolver, baseUrl: "http://localhost:5679", ownerDid: serverOwner.did, - verifier: credentialVerifier + verifier: credentialVerifier, }) log( `\n✨ Server Agent Created! ✨ -Server Agent DID (Unique Identifier for the Agent):` +Server Agent DID (Unique Identifier for the Agent):`, ) log(colors.dim(serverAgent.did), { wrap: false }) log( colors.italic( - "\n The Server Agent gets its own distinct DID and DID Document." - ) + "\n The Server Agent gets its own distinct DID and DID Document.", + ), ) log("Server Agent DID Document (Agent's Public Keys & Metadata):") logJson(serverAgent.didDocument as Record, colors.magenta) await waitForEnter( - "Press Enter to issue Server Agent Ownership Credential..." + "Press Enter to issue Server Agent Ownership Credential...", ) const serverOwnershipVc = await createOwnershipVc( serverAgent.did, - serverOwner + serverOwner, ) serverAgent.setOwnershipVc(serverOwnershipVc) log( `\n✨ Server Agent Ownership VC Issued! ✨ -Server Agent Ownership Credential (Proof of Ownership):` +Server Agent Ownership Credential (Proof of Ownership):`, ) const parsedServerOwnershipVc = typeof serverOwnershipVc === "string" @@ -327,24 +327,24 @@ Server Agent Ownership Credential (Proof of Ownership):` logJson(parsedServerOwnershipVc, colors.magenta) log( colors.italic( - "\n Similar to the client's VC, this links Server Agent to Owner 2." - ) + "\n Similar to the client's VC, this links Server Agent to Owner 2.", + ), ) await waitForEnter() log( sectionHeader("🤝 Agent-to-Agent Communication & Verification", { - step: 5 - }) + step: 5, + }), ) log( colors.dim( `${colors.bold("Establishing trust between agents")} -In this final step, we demonstrate how agents can verify each other's credentials and establish trust. The Client Agent and Server Agent can verify each other's ownership VCs, ensuring they are interacting with legitimate agents owned by trusted entities. This verification process is crucial for secure agent-to-agent communication.` - ) +In this final step, we demonstrate how agents can verify each other's credentials and establish trust. The Client Agent and Server Agent can verify each other's ownership VCs, ensuring they are interacting with legitimate agents owned by trusted entities. This verification process is crucial for secure agent-to-agent communication.`, + ), ) if (!providerKeySet) { @@ -352,7 +352,7 @@ In this final step, we demonstrate how agents can verify each other's credential } await waitForEnter( - "Press Enter to start the agents and initiate communication..." + "Press Enter to start the agents and initiate communication...", ) serveAgent({ port: 5678, agent: clientAgent }) @@ -361,7 +361,7 @@ In this final step, we demonstrate how agents can verify each other's credential let result = "" while (!clientAgent.haikuComplete) { result = await clientAgent.run( - "Begin or continue generating a haiku about the ocean" + "Begin or continue generating a haiku about the ocean", ) } @@ -370,10 +370,10 @@ In this final step, we demonstrate how agents can verify each other's credential log( colors.bold(colors.magenta("\n🎉 === ACK-ID Demo Complete === 🎉\n")), colors.yellow( - `This demo was created by Catena Labs. For more information on ACK-Pay and other tools for the agent economy, please visit ${link("https://www.agentcommercekit.com")} 🌐.` + `This demo was created by Catena Labs. For more information on ACK-Pay and other tools for the agent economy, please visit ${link("https://www.agentcommercekit.com")} 🌐.`, ), demoFooter("Thank You!"), - { wrap: false } + { wrap: false }, ) } diff --git a/demos/identity/src/owner.ts b/demos/identity/src/owner.ts index fe2f616..e9a0f10 100644 --- a/demos/identity/src/owner.ts +++ b/demos/identity/src/owner.ts @@ -7,7 +7,7 @@ import { type DidDocument, type DidUri, type JwtAlgorithm, - type JwtSigner + type JwtSigner, } from "agentcommercekit" export interface Owner { @@ -22,7 +22,7 @@ export async function createOwner(): Promise { const did = createDidKeyUri(keypair) const didDocument = createDidDocumentFromKeypair({ did, - keypair + keypair, }) const signer = createJwtSigner(keypair) @@ -30,6 +30,6 @@ export async function createOwner(): Promise { did, didDocument, signer, - algorithm: curveToJwtAlgorithm(keypair.curve) + algorithm: curveToJwtAlgorithm(keypair.curve), } } diff --git a/demos/identity/src/serve-agent.ts b/demos/identity/src/serve-agent.ts index 7f29454..9a03dc8 100644 --- a/demos/identity/src/serve-agent.ts +++ b/demos/identity/src/serve-agent.ts @@ -25,7 +25,7 @@ export function serveAgent({ port, agent }: ServeAgentConfig) { const text = await agent.run(message) return c.json({ text }) - } + }, ) app.post( @@ -37,7 +37,7 @@ export function serveAgent({ port, agent }: ServeAgentConfig) { const signedChallenge = await agent.signChallenge(challenge) return c.json({ signedChallenge }) - } + }, ) app.get("/identity/vc", (c) => { @@ -46,7 +46,7 @@ export function serveAgent({ port, agent }: ServeAgentConfig) { serve({ fetch: app.fetch, - port + port, }) console.log(colors.green(`Agent '${agent.did}' ready on port ${port}`)) diff --git a/demos/identity/vitest.config.ts b/demos/identity/vitest.config.ts index 6a8b09e..7972f77 100644 --- a/demos/identity/vitest.config.ts +++ b/demos/identity/vitest.config.ts @@ -3,6 +3,6 @@ import { defineConfig } from "vitest/config" export default defineConfig({ test: { passWithNoTests: true, - watch: false - } + watch: false, + }, }) diff --git a/demos/payments/eslint.config.js b/demos/payments/eslint.config.js index 0979926..13fe2a3 100644 --- a/demos/payments/eslint.config.js +++ b/demos/payments/eslint.config.js @@ -3,5 +3,5 @@ import { config } from "@repo/eslint-config/base" export default config({ - root: import.meta.dirname + root: import.meta.dirname, }) diff --git a/demos/payments/src/constants.ts b/demos/payments/src/constants.ts index 7665cff..1ec3893 100644 --- a/demos/payments/src/constants.ts +++ b/demos/payments/src/constants.ts @@ -24,5 +24,5 @@ export const chainId = caip2ChainIds.baseSepolia export const usdcAddress = "0x036CbD53842c5426634e7929541eC2318f3dCF7e" export const publicClient = createPublicClient({ chain, - transport: http() + transport: http(), }) diff --git a/demos/payments/src/index.ts b/demos/payments/src/index.ts index 36b7b5c..f0f4ef4 100644 --- a/demos/payments/src/index.ts +++ b/demos/payments/src/index.ts @@ -10,7 +10,7 @@ import { select, successMessage, waitForEnter, - wordWrap + wordWrap, } from "@repo/cli-tools" import { addressFromDidPkhUri, @@ -22,11 +22,11 @@ import { type JwtString, type PaymentReceiptCredential, type PaymentRequest, - type Verifiable + type Verifiable, } from "agentcommercekit" import { jwtStringSchema, - paymentRequestSchema + paymentRequestSchema, } from "agentcommercekit/schemas/valibot" import * as v from "valibot" import { isAddress } from "viem" @@ -35,7 +35,7 @@ import { chainId, publicClient, SERVER_URL, - usdcAddress + usdcAddress, } from "./constants" import { ensureNonZeroBalances } from "./utils/ensure-balances" import { ensurePrivateKey } from "./utils/ensure-private-keys" @@ -53,7 +53,7 @@ async function main() { log(demoHeader("ACK-Pay"), { wrap: false }) log( colors.bold( - colors.magenta("\n✨ === Agent-Native Payments Protocol Demo === ✨") + colors.magenta("\n✨ === Agent-Native Payments Protocol Demo === ✨"), ), colors.cyan(` This demo will guide you through a typical payment flow between a Client and a Server. ACK-Pay enables secure, verifiable, and interoperable financial transactions among autonomous agents, services, and human participants. You can find more information at ${link("https://www.agentcommercekit.com")}. @@ -66,7 +66,7 @@ The demo involves the following key components from the ACK-Pay protocol:`), 2. ${colors.bold("Server:")} An API that protects a resource and requires payment for access, initiating the payment request. 3. ${colors.bold("Payment Service:")} An intermediary that handles compliant payment execution. In this demo, the payment service is used for Credit Card payments, and is bypassed for on-chain payments using a crypto wallet and the Base Sepolia network to transfer USDC. In a full ACK-Pay deployment, a dedicated Payment Service offers more features like payment method abstraction (e.g., paying with different currencies or even credit cards), currency conversion, and enhanced compliance. 4. ${colors.bold("Receipt Service:")} A service that verifies the payment and issues a cryptographically verifiable receipt (as a Verifiable Credential). -`) +`), ) await waitForEnter("Press Enter to embark on the ACK-Pay journey...") @@ -82,7 +82,7 @@ ${colors.dim("Checking for existing keys ...")} ensurePrivateKey("CLIENT_PRIVATE_KEY_HEX"), ensurePrivateKey("SERVER_PRIVATE_KEY_HEX"), ensurePrivateKey("RECEIPT_SERVICE_PRIVATE_KEY_HEX"), - ensurePrivateKey("PAYMENT_SERVICE_PRIVATE_KEY_HEX") + ensurePrivateKey("PAYMENT_SERVICE_PRIVATE_KEY_HEX"), ]) const clientKeypairInfo = await getKeypairInfo(clientPrivateKeyHex) @@ -95,7 +95,7 @@ Using the following public keys: ${colors.bold("Client:")} ${colors.dim(clientKeypairInfo.publicKeyHex)} ${colors.bold("Server:")} ${colors.dim(serverKeypairInfo.publicKeyHex)} `, - { wrap: false } + { wrap: false }, ) log(sectionHeader("🚪 Client Requests Protected Resource")) @@ -103,15 +103,15 @@ ${colors.bold("Server:")} ${colors.dim(serverKeypairInfo.publicKeyHex)} colors.dim( `${colors.bold("Client Agent 👤 -> Server Agent 🖥️")} -The Client attempts to access a protected resource on the Server. Since no valid payment receipt is presented, the Server will respond with an HTTP 402 'Payment Required' status. This response includes a cryptographically signed Payment Request (as a JWT), specifying the required amount, currency, and recipient for the payment.` - ) +The Client attempts to access a protected resource on the Server. Since no valid payment receipt is presented, the Server will respond with an HTTP 402 'Payment Required' status. This response includes a cryptographically signed Payment Request (as a JWT), specifying the required amount, currency, and recipient for the payment.`, + ), ) await waitForEnter("Press Enter to make the request...") log(colors.dim("📡 Initiating GET request to the Server Agent...")) const response1 = await fetch(SERVER_URL, { - method: "GET" + method: "GET", }) if (response1.status !== 402) { @@ -121,9 +121,9 @@ The Client attempts to access a protected resource on the Server. Since no valid const { paymentRequestToken, paymentRequest } = v.parse( v.object({ paymentRequestToken: jwtStringSchema, - paymentRequest: paymentRequestSchema + paymentRequest: paymentRequestSchema, }), - await response1.json() + await response1.json(), ) // This demo uses JWT strings for the payment request token, but this is not a requirement of the protocol. @@ -133,17 +133,17 @@ The Client attempts to access a protected resource on the Server. Since no valid log( successMessage( - "Successfully received 402 Payment Required response from Server Agent. 🛑" - ) + "Successfully received 402 Payment Required response from Server Agent. 🛑", + ), ) log(colors.bold("\n📜 Payment Request Details (from Server Agent):")) logJson(paymentRequest as Record, colors.dim) log( colors.magenta( wordWrap( - "\n💡 The 'paymentRequestToken' is a JWT signed by the Server, ensuring the integrity and authenticity of the payment request. The Client will include this token when requesting a receipt, along with the payment option id and metadata." - ) - ) + "\n💡 The 'paymentRequestToken' is a JWT signed by the Server, ensuring the integrity and authenticity of the payment request. The Client will include this token when requesting a receipt, along with the payment option id and metadata.", + ), + ), ) const paymentOptions = paymentRequest.paymentOptions @@ -152,12 +152,12 @@ The Client attempts to access a protected resource on the Server. Since no valid choices: paymentOptions.map((option) => ({ name: option.network === "stripe" ? "Stripe" : "Base Sepolia", value: option.id, - description: `Pay on ${option.network === "stripe" ? "Stripe" : "Base Sepolia"} using ${option.currency}` - })) + description: `Pay on ${option.network === "stripe" ? "Stripe" : "Base Sepolia"} using ${option.currency}`, + })), }) const selectedPaymentOption = paymentOptions.find( - (option) => option.id === selectedPaymentOptionId + (option) => option.id === selectedPaymentOptionId, ) if (!selectedPaymentOption) { @@ -171,7 +171,7 @@ The Client attempts to access a protected resource on the Server. Since no valid const paymentResult = await performStripePayment( clientKeypairInfo, selectedPaymentOption, - paymentRequestToken + paymentRequestToken, ) receipt = paymentResult.receipt details = paymentResult.details @@ -179,7 +179,7 @@ The Client attempts to access a protected resource on the Server. Since no valid const paymentResult = await performOnChainPayment( clientKeypairInfo, selectedPaymentOption, - paymentRequestToken + paymentRequestToken, ) receipt = paymentResult.receipt details = paymentResult.details @@ -189,9 +189,9 @@ The Client attempts to access a protected resource on the Server. Since no valid log( successMessage( - "Verifiable Payment Receipt (VC) issued successfully by the Receipt Service! 🎉" + "Verifiable Payment Receipt (VC) issued successfully by the Receipt Service! 🎉", ), - colors.bold("📄 Receipt Details (Verifiable Credential):") + colors.bold("📄 Receipt Details (Verifiable Credential):"), ) const resolver = getDidResolver() const parsedDetails = @@ -201,14 +201,14 @@ The Client attempts to access a protected resource on the Server. Since no valid logJson(parsedDetails, colors.dim) log( colors.magenta( - "💡 This receipt is a Verifiable Credential (VC) in JWT format. It's cryptographically signed by the Receipt Service, making it tamper-proof and independently verifiable. It links the original payment request from the Server to the confirmed on-chain transaction and the Client's identity." - ) + "💡 This receipt is a Verifiable Credential (VC) in JWT format. It's cryptographically signed by the Receipt Service, making it tamper-proof and independently verifiable. It links the original payment request from the Server to the confirmed on-chain transaction and the Client's identity.", + ), ) log( sectionHeader( - "✅ Access Protected Resource with Receipt (Client Agent -> Server Agent)" - ) + "✅ Access Protected Resource with Receipt (Client Agent -> Server Agent)", + ), ) log( colors.dim( @@ -220,25 +220,25 @@ ${colors.bold("The Server Agent then performs its own verifications:")} 1. Validates the receipt's signature (ensuring it was issued by a trusted Receipt Service and hasn't been tampered with). 2. Checks the receipt's claims: Confirms the receipt is for the correct payment (e.g., matches the 'paymentRequestToken' it originally issued), is not expired, and meets any other criteria for accessing the resource. -If the receipt is valid, the Server grants access to the protected resource.` - ) +If the receipt is valid, the Server grants access to the protected resource.`, + ), ) await waitForEnter( - "Press Enter to present the receipt to the Server and access the resource..." + "Press Enter to present the receipt to the Server and access the resource...", ) log( colors.dim( - "🔐 Making authenticated GET request to the Server Agent with the receipt..." - ) + "🔐 Making authenticated GET request to the Server Agent with the receipt...", + ), ) const response3 = await fetch(SERVER_URL, { method: "GET", headers: { - Authorization: `Bearer ${receipt}` - } + Authorization: `Bearer ${receipt}`, + }, }) if (response3.status !== 200) { @@ -252,20 +252,20 @@ If the receipt is valid, the Server grants access to the protected resource.` successMessage("Access granted to protected resource! 🔓"), colors.bold(colors.magenta("\n🎉 === ACK-Pay Demo Complete === 🎉\n")), colors.cyan( - "Congratulations! You've successfully completed the ACK-Pay payment flow. This demonstrates how agents can programmatically negotiate and settle payments, obtaining verifiable proof for services or data access." + "Congratulations! You've successfully completed the ACK-Pay payment flow. This demonstrates how agents can programmatically negotiate and settle payments, obtaining verifiable proof for services or data access.", ), colors.yellow( - `This demo was created by Catena Labs. For more information on ACK-Pay and other tools for the agent economy, please visit ${link("https://www.agentcommercekit.com")} 🌐.` + `This demo was created by Catena Labs. For more information on ACK-Pay and other tools for the agent economy, please visit ${link("https://www.agentcommercekit.com")} 🌐.`, ), demoFooter("Thank You!"), - { wrap: false } + { wrap: false }, ) } async function performOnChainPayment( client: KeypairInfo, paymentOption: PaymentRequest["paymentOptions"][number], - paymentRequestToken: JwtString + paymentRequestToken: JwtString, ) { const receiptServiceUrl = paymentOption.receiptService if (!receiptServiceUrl) { @@ -276,21 +276,21 @@ async function performOnChainPayment( await ensureNonZeroBalances(chain, client.crypto.address, usdcAddress) log( successMessage( - "Balances verified! Client has sufficient ETH for gas and USDC for payment. ✅\n\n" - ) + "Balances verified! Client has sufficient ETH for gas and USDC for payment. ✅\n\n", + ), ) log( sectionHeader( - "💸 Execute Payment (Client Agent -> Payment Service / Blockchain)" - ) + "💸 Execute Payment (Client Agent -> Payment Service / Blockchain)", + ), ) log( colors.dim( `${colors.bold("Client Agent 👤 -> Blockchain 🔗 (acting as Payment Service)")} -The Client Agent now uses the details from the Payment Request to make the payment. In this demo, the Client transfers the specified amount of USDC to the Server's address on the Base Sepolia testnet. The resulting transaction hash serves as a preliminary proof of payment. This interaction implicitly uses the blockchain as a Settlement Network and the wallet interaction as a form of Payment Service.` - ) +The Client Agent now uses the details from the Payment Request to make the payment. In this demo, the Client transfers the specified amount of USDC to the Server's address on the Base Sepolia testnet. The resulting transaction hash serves as a preliminary proof of payment. This interaction implicitly uses the blockchain as a Settlement Network and the wallet interaction as a form of Payment Service.`, + ), ) await waitForEnter("Press Enter to proceed with the on-chain USDC payment...") @@ -305,7 +305,7 @@ The Client Agent now uses the details from the Payment Request to make the payme if (paymentOption.currency !== "USDC") { throw new Error( - errorMessage(`Unsupported currency: ${paymentOption.currency}`) + errorMessage(`Unsupported currency: ${paymentOption.currency}`), ) } @@ -314,36 +314,36 @@ The Client Agent now uses the details from the Payment Request to make the payme const hash = await transferUsdc( client.crypto.account, payToAddress, - BigInt(paymentOption.amount) + BigInt(paymentOption.amount), ) log( successMessage("Payment transaction submitted to the blockchain. 🚀"), - "Transaction hash:" + "Transaction hash:", ) log(colors.cyan(hash), { wrap: false }) log(colors.dim("View on BaseScan:")) log(link(`https://sepolia.basescan.org/tx/${hash}`), { - wrap: false + wrap: false, }) log( colors.magenta( - "💡 This transaction is now being processed by the Base Sepolia network. We need to wait for it to be confirmed (included in a block) before we can reliably use it as proof of payment." - ) + "💡 This transaction is now being processed by the Base Sepolia network. We need to wait for it to be confirmed (included in a block) before we can reliably use it as proof of payment.", + ), ) log( colors.dim( - "⏳ Waiting for transaction confirmation (this might take a moment)..." - ) + "⏳ Waiting for transaction confirmation (this might take a moment)...", + ), ) await publicClient.waitForTransactionReceipt({ hash: hash as `0x${string}` }) log(successMessage("Transaction confirmed on the blockchain! ✅\n\n")) log( sectionHeader( - "🧾 Obtain Verifiable Receipt (Client Agent -> Receipt Service)" - ) + "🧾 Obtain Verifiable Receipt (Client Agent -> Receipt Service)", + ), ) log( colors.dim( @@ -356,14 +356,14 @@ ${colors.bold("The Receipt Service then performs several crucial verifications:" 2. Verifies the on-chain transaction: Confirms that the transaction hash is valid, the correct amount of the specified currency was transferred to the correct recipient address as per the 'paymentRequestToken'. 3. Verifies the Client's signature on the request, ensuring the payer is who they claim to be (linking the payment action to the Client's DID). -If all checks pass, the Receipt Service issues a Verifiable Credential (VC) serving as the payment receipt.` - ) +If all checks pass, the Receipt Service issues a Verifiable Credential (VC) serving as the payment receipt.`, + ), ) await waitForEnter("Press Enter to request the verifiable receipt...") log( - colors.dim("✍️ Creating a signed payload (JWT) for the Receipt Service...") + colors.dim("✍️ Creating a signed payload (JWT) for the Receipt Service..."), ) const payload = { @@ -371,22 +371,22 @@ If all checks pass, the Receipt Service issues a Verifiable Credential (VC) serv paymentOptionId: paymentOption.id, metadata: { txHash: hash, - network: chainId // eip155:84532 + network: chainId, // eip155:84532 }, - payerDid: client.did + payerDid: client.did, } const signedPayload = await createJwt(payload, { issuer: client.did, - signer: client.jwtSigner + signer: client.jwtSigner, }) log(colors.dim("Submitting to receipt service...")) const response2 = await fetch(receiptServiceUrl, { method: "POST", body: JSON.stringify({ - payload: signedPayload - }) + payload: signedPayload, + }), }) const { receipt, details } = (await response2.json()) as { @@ -400,7 +400,7 @@ If all checks pass, the Receipt Service issues a Verifiable Credential (VC) serv async function performStripePayment( _client: KeypairInfo, paymentOption: PaymentRequest["paymentOptions"][number], - paymentRequestToken: JwtString + paymentRequestToken: JwtString, ) { const paymentServiceUrl = paymentOption.paymentService if (!paymentServiceUrl) { @@ -409,8 +409,8 @@ async function performStripePayment( log( sectionHeader( - "💸 Execute Payment (Client Agent -> Payment Service / Stripe)" - ) + "💸 Execute Payment (Client Agent -> Payment Service / Stripe)", + ), ) log( colors.dim( @@ -419,8 +419,8 @@ async function performStripePayment( The Client Agent now uses the details from the Payment Request to initiate a Stripe payment. The Payment Service will generate a Stripe payment URL where the payment can be completed. After successful payment, Stripe will redirect back to our callback URL with the payment confirmation. This flow is simulated in this example. -` - ) +`, + ), ) await waitForEnter("Press Enter to initiate the Stripe payment...") @@ -432,8 +432,8 @@ This flow is simulated in this example. method: "POST", body: JSON.stringify({ paymentOptionId: paymentOption.id, - paymentRequestToken - }) + paymentRequestToken, + }), }) if (!response1.ok) { @@ -446,19 +446,19 @@ This flow is simulated in this example. successMessage("Stripe payment URL generated successfully! 🚀"), colors.dim("\nSample Stripe payment URL:"), colors.cyan(paymentUrl), - { wrap: false } + { wrap: false }, ) log( colors.magenta( - "\n💡 In a real implementation, this would open in a browser for the agent or user to complete the payment." - ) + "\n💡 In a real implementation, this would open in a browser for the agent or user to complete the payment.", + ), ) // Extract the return_to URL from the payment URL const returnToUrl = new URL(paymentUrl).searchParams.get("return_to") if (!returnToUrl) { throw new Error( - errorMessage("Invalid payment URL - missing return_to parameter") + errorMessage("Invalid payment URL - missing return_to parameter"), ) } @@ -473,9 +473,9 @@ This flow is simulated in this example. paymentOptionId: paymentOption.id, paymentRequestToken, metadata: { - eventId: "evt_" + Math.random().toString(36).substring(7) // Simulated Stripe event ID - } - }) + eventId: "evt_" + Math.random().toString(36).substring(7), // Simulated Stripe event ID + }, + }), }) if (!response2.ok) { diff --git a/demos/payments/src/payment-service.ts b/demos/payments/src/payment-service.ts index ce751e0..2b29c56 100644 --- a/demos/payments/src/payment-service.ts +++ b/demos/payments/src/payment-service.ts @@ -7,7 +7,7 @@ import { verifyPaymentRequestToken, type JwtString, type PaymentReceiptCredential, - type Verifiable + type Verifiable, } from "agentcommercekit" import { jwtStringSchema } from "agentcommercekit/schemas/valibot" import { Hono, type Env, type TypedResponse } from "hono" @@ -22,7 +22,7 @@ app.use(logger()) const bodySchema = v.object({ paymentOptionId: v.string(), - paymentRequestToken: jwtStringSchema + paymentRequestToken: jwtStringSchema, }) const name = colors.green(colors.bold("[Payment Service]")) @@ -35,7 +35,7 @@ const name = colors.green(colors.bold("[Payment Service]")) app.post("/", async (c): Promise> => { const { paymentOptionId, paymentRequestToken } = v.parse( bodySchema, - await c.req.json() + await c.req.json(), ) // Verify the payment request token and payment option are valid @@ -48,33 +48,33 @@ app.post("/", async (c): Promise> => { const paymentUrl = `https://payments.stripe.com/payment-url/?return_to=${PAYMENT_SERVICE_URL}/stripe-callback` return c.json({ - paymentUrl + paymentUrl, }) }) const callbackSchema = v.object({ ...bodySchema.entries, metadata: v.object({ - eventId: v.string() - }) + eventId: v.string(), + }), }) app.post( "/stripe-callback", async (c): Promise> => { const serverIdentity = await getKeypairInfo( - env(c).PAYMENT_SERVICE_PRIVATE_KEY_HEX + env(c).PAYMENT_SERVICE_PRIVATE_KEY_HEX, ) const { paymentOptionId, paymentRequestToken, metadata } = v.parse( callbackSchema, - await c.req.json() + await c.req.json(), ) // Verify the payment request token and payment option are valid const { paymentOption } = await validatePaymentOption( paymentOptionId, - paymentRequestToken + paymentRequestToken, ) const receiptServiceUrl = paymentOption.receiptService if (!receiptServiceUrl) { @@ -86,22 +86,22 @@ app.post( paymentOptionId, metadata: { network: "stripe", - eventId: metadata.eventId + eventId: metadata.eventId, }, - payerDid: serverIdentity.did + payerDid: serverIdentity.did, } const signedPayload = await createJwt(payload, { issuer: serverIdentity.did, - signer: serverIdentity.jwtSigner + signer: serverIdentity.jwtSigner, }) log(colors.dim(`${name} Getting receipt from Receipt Service...`)) const response = await fetch(receiptServiceUrl, { method: "POST", body: JSON.stringify({ - payload: signedPayload - }) + payload: signedPayload, + }), }) const { receipt, details } = (await response.json()) as { @@ -111,14 +111,14 @@ app.post( return c.json({ receipt, - details + details, }) - } + }, ) async function validatePaymentOption( paymentOptionId: string, - paymentRequestToken: JwtString + paymentRequestToken: JwtString, ) { const didResolver = getDidResolver() @@ -126,29 +126,29 @@ async function validatePaymentOption( const { paymentRequest } = await verifyPaymentRequestToken( paymentRequestToken, { - resolver: didResolver - } + resolver: didResolver, + }, ) log(colors.dim(`${name} Checking for payment option...`)) const paymentOption = paymentRequest.paymentOptions.find( - (option) => option.id === paymentOptionId + (option) => option.id === paymentOptionId, ) if (!paymentOption) { log(errorMessage(`${name} Invalid payment option`)) throw new HTTPException(400, { - message: "Invalid payment option" + message: "Invalid payment option", }) } return { paymentRequest, - paymentOption + paymentOption, } } serve({ port: 4569, - fetch: app.fetch + fetch: app.fetch, }) diff --git a/demos/payments/src/receipt-service.ts b/demos/payments/src/receipt-service.ts index a7249dc..193be04 100644 --- a/demos/payments/src/receipt-service.ts +++ b/demos/payments/src/receipt-service.ts @@ -5,7 +5,7 @@ import { errorMessage, log, logJson, - successMessage + successMessage, } from "@repo/cli-tools" import { createPaymentReceipt, @@ -14,11 +14,11 @@ import { parseJwtCredential, signCredential, verifyJwt, - verifyPaymentRequestToken + verifyPaymentRequestToken, } from "agentcommercekit" import { caip2ChainIdSchema, - type paymentOptionSchema + type paymentOptionSchema, } from "agentcommercekit/schemas/valibot" import { Hono, type Env } from "hono" import { env } from "hono/adapter" @@ -34,22 +34,22 @@ const app = new Hono() app.use(logger()) const bodySchema = v.object({ - payload: v.string() + payload: v.string(), }) const paymentDetailsSchema = v.object({ metadata: v.union([ v.object({ network: caip2ChainIdSchema, - txHash: v.string() + txHash: v.string(), }), v.object({ network: v.literal("stripe"), - eventId: v.string() - }) + eventId: v.string(), + }), ]), payerDid: v.string(), - paymentRequestToken: v.string() + paymentRequestToken: v.string(), }) /** @@ -60,7 +60,7 @@ const paymentDetailsSchema = v.object({ */ app.post("/", async (c) => { const serverIdentity = await getKeypairInfo( - env(c).RECEIPT_SERVICE_PRIVATE_KEY_HEX + env(c).RECEIPT_SERVICE_PRIVATE_KEY_HEX, ) const didResolver = getDidResolver() @@ -72,8 +72,8 @@ app.post("/", async (c) => { const parsed = await verifyJwt(payload, { resolver: didResolver, policies: { - aud: false - } + aud: false, + }, }) // This demo uses did:pkh for all issuers, so we add this check, however, this @@ -93,14 +93,14 @@ app.post("/", async (c) => { const { paymentRequest } = await verifyPaymentRequestToken( paymentDetails.paymentRequestToken, { - resolver: didResolver - } + resolver: didResolver, + }, ) // Load the payment option from the payment request matching our // preferred network. const paymentOption = paymentRequest.paymentOptions.find( - (option) => option.network === paymentDetails.metadata.network + (option) => option.network === paymentDetails.metadata.network, ) if (!paymentOption) { @@ -115,7 +115,7 @@ app.post("/", async (c) => { } else { log(errorMessage("Invalid network")) throw new HTTPException(400, { - message: "Invalid network" + message: "Invalid network", }) } @@ -124,26 +124,26 @@ app.post("/", async (c) => { paymentRequestToken: paymentDetails.paymentRequestToken, paymentOptionId: paymentOption.id, issuer: serverIdentity.did, - payerDid: parsed.issuer + payerDid: parsed.issuer, }) const jwt = await signCredential(receipt, { did: serverIdentity.did, signer: serverIdentity.jwtSigner, - alg: "ES256K" + alg: "ES256K", }) log(successMessage("Receipt created successfully")) return c.json({ receipt: jwt, - details: await parseJwtCredential(jwt, didResolver) + details: await parseJwtCredential(jwt, didResolver), }) }) async function verifyStripePayment( _issuer: string, _paymentDetails: v.InferOutput, - _paymentOption: v.InferOutput + _paymentOption: v.InferOutput, ) { // Simulated stripe verification. In practice the receipt service and // the payment service would have a deeper connection to allow for @@ -156,12 +156,12 @@ async function verifyStripePayment( async function verifyOnChainPayment( issuer: string, paymentDetails: v.InferOutput, - paymentOption: v.InferOutput + paymentOption: v.InferOutput, ) { if (paymentDetails.metadata.network !== chainId) { log(errorMessage("Invalid network")) throw new HTTPException(400, { - message: "Invalid network" + message: "Invalid network", }) } @@ -175,7 +175,7 @@ async function verifyOnChainPayment( if (txReceipt.status !== "success") { log(errorMessage(`Transaction failed: ${txHash}`)) throw new HTTPException(400, { - message: `Transaction failed: ${txHash}` + message: `Transaction failed: ${txHash}`, }) } @@ -186,19 +186,19 @@ async function verifyOnChainPayment( logs: txReceipt.logs, eventName: "Transfer", args: { - to: asAddress(paymentOption.recipient) - } + to: asAddress(paymentOption.recipient), + }, }) // Find the Transfer event in the logs const transferEvent = logs.find((log) => - isAddressEqual(log.address, usdcAddress) + isAddressEqual(log.address, usdcAddress), ) if (!transferEvent) { log(errorMessage("Transfer event not found in transaction logs")) throw new HTTPException(400, { - message: "Transfer event not found in transaction logs" + message: "Transfer event not found in transaction logs", }) } @@ -213,21 +213,21 @@ async function verifyOnChainPayment( ) { log(errorMessage("Invalid recipient address")) throw new HTTPException(400, { - message: "Invalid recipient address" + message: "Invalid recipient address", }) } if (transferEvent.args.value !== BigInt(paymentOption.amount)) { log(errorMessage("Invalid amount")) throw new HTTPException(400, { - message: "Invalid amount" + message: "Invalid amount", }) } if (!isAddressEqual(transferEvent.args.from, senderAddress)) { log(errorMessage("Invalid sender address")) throw new HTTPException(400, { - message: "Invalid sender address" + message: "Invalid sender address", }) } @@ -237,5 +237,5 @@ async function verifyOnChainPayment( serve({ port: 4568, - fetch: app.fetch + fetch: app.fetch, }) diff --git a/demos/payments/src/server.ts b/demos/payments/src/server.ts index de3dab8..13f0a4b 100644 --- a/demos/payments/src/server.ts +++ b/demos/payments/src/server.ts @@ -6,7 +6,7 @@ import { curveToJwtAlgorithm, getDidResolver, verifyPaymentReceipt, - type PaymentRequestInit + type PaymentRequestInit, } from "agentcommercekit" import { Hono, type Env, type TypedResponse } from "hono" import { env } from "hono/adapter" @@ -37,7 +37,7 @@ app.get("/", async (c): Promise> => { const didResolver = getDidResolver() const { did: receiptIssuerDid } = await getKeypairInfo( - env(c).RECEIPT_SERVICE_PRIVATE_KEY_HEX + env(c).RECEIPT_SERVICE_PRIVATE_KEY_HEX, ) const trustedReceiptIssuers: string[] = [receiptIssuerDid] @@ -65,7 +65,7 @@ app.get("/", async (c): Promise> => { currency: "USDC", recipient: serverIdentity.crypto.address, // This could be a did:pkh network: chainId, // eip155:84532 - receiptService: RECEIPT_SERVICE_URL + receiptService: RECEIPT_SERVICE_URL, }, // Stripe payment option { @@ -76,9 +76,9 @@ app.get("/", async (c): Promise> => { decimals: 2, recipient: serverIdentity.did, paymentService: PAYMENT_SERVICE_URL, - receiptService: RECEIPT_SERVICE_URL - } - ] + receiptService: RECEIPT_SERVICE_URL, + }, + ], } // Generate the ACK-Pay Payment Request, which is a signed JWT detailing what needs to be paid. @@ -87,15 +87,15 @@ app.get("/", async (c): Promise> => { { issuer: serverIdentity.did, signer: serverIdentity.jwtSigner, - algorithm: curveToJwtAlgorithm(serverIdentity.keypair.curve) - } + algorithm: curveToJwtAlgorithm(serverIdentity.keypair.curve), + }, ) const res = new Response(JSON.stringify(paymentRequestBody), { status: 402, headers: { - "Content-Type": "application/json" - } + "Content-Type": "application/json", + }, }) log(successMessage("Payment request generated")) @@ -109,23 +109,23 @@ app.get("/", async (c): Promise> => { resolver: didResolver, trustedReceiptIssuers, paymentRequestIssuer: serverIdentity.did, - verifyPaymentRequestTokenJwt: true + verifyPaymentRequestTokenJwt: true, }) } catch (e) { console.log(errorMessage("Error verifying receipt"), e) throw new HTTPException(400, { - message: "Invalid receipt" + message: "Invalid receipt", }) } log(successMessage("Receipt verified successfully")) return c.json({ - message: "Access granted" + message: "Access granted", }) }) serve({ port: 4567, - fetch: app.fetch + fetch: app.fetch, }) diff --git a/demos/payments/src/utils/ensure-balances.ts b/demos/payments/src/utils/ensure-balances.ts index 5676673..437aa7e 100644 --- a/demos/payments/src/utils/ensure-balances.ts +++ b/demos/payments/src/utils/ensure-balances.ts @@ -8,7 +8,7 @@ import { formatUnits } from "viem/utils" export async function ensureNonZeroBalances( chain: Chain, address: `0x${string}`, - usdcAddress: `0x${string}` + usdcAddress: `0x${string}`, ) { // 2. Make sure the client wallet has been funded let balanceUsdc = await getErc20Balance(chain, address, usdcAddress) @@ -17,13 +17,13 @@ export async function ensureNonZeroBalances( while (balanceUsdc.value === BigInt(0)) { console.log( "We need to fund this address with testnet USDC and testnet ETH:", - address + address, ) console.log( "You can get testnet tokens from the following faucets:", "ETH: https://docs.base.org/chain/network-faucets", - "USDC: https://faucet.circle.com/" + "USDC: https://faucet.circle.com/", ) console.log("Once funded, press enter to check balance again") await waitForEnter() @@ -45,27 +45,27 @@ export async function ensureNonZeroBalances( async function getEthBalance(chain: Chain, address: `0x${string}`) { const publicClient = createPublicClient({ chain, - transport: http() + transport: http(), }) const balance = await publicClient.getBalance({ - address + address, }) return { value: balance, - decimals: 18 + decimals: 18, } } async function getErc20Balance( chain: Chain, address: `0x${string}`, - contractAddress: `0x${string}` + contractAddress: `0x${string}`, ) { const publicClient = createPublicClient({ chain, - transport: http() + transport: http(), }) // eslint-disable-next-line @cspell/spellchecker @@ -75,14 +75,14 @@ async function getErc20Balance( address: contractAddress, abi: erc20Abi, functionName: "balanceOf", - args: [address] + args: [address], }, { address: contractAddress, abi: erc20Abi, - functionName: "decimals" - } - ] + functionName: "decimals", + }, + ], }) if (balance.status !== "success" || decimals.status !== "success") { @@ -91,6 +91,6 @@ async function getErc20Balance( return { value: balance.result, - decimals: decimals.result + decimals: decimals.result, } } diff --git a/demos/payments/src/utils/keypair-info.ts b/demos/payments/src/utils/keypair-info.ts index 310f0bd..36ab79d 100644 --- a/demos/payments/src/utils/keypair-info.ts +++ b/demos/payments/src/utils/keypair-info.ts @@ -9,7 +9,7 @@ import { type DidUri, type JwtSigner, type KeyCurve, - type Keypair + type Keypair, } from "agentcommercekit" import { privateKeyToAccount, type Account } from "viem/accounts" import { publicKeyToAddress } from "viem/utils" @@ -34,12 +34,12 @@ export type KeypairInfo = { */ export async function getKeypairInfo( privateKeyHex: string, - curve: KeyCurve = "secp256k1" + curve: KeyCurve = "secp256k1", ): Promise { const keypair = await generateKeypair(curve, hexStringToBytes(privateKeyHex)) const address = publicKeyToAddress(`0x${bytesToHexString(keypair.publicKey)}`) const account = privateKeyToAccount( - `0x${bytesToHexString(keypair.privateKey)}` + `0x${bytesToHexString(keypair.privateKey)}`, ) const did = createDidPkhUri(chainId, address) const jwtSigner = createJwtSigner(keypair) @@ -51,8 +51,8 @@ export async function getKeypairInfo( jwtSigner, crypto: { address, - account - } + account, + }, } } diff --git a/demos/payments/src/utils/usdc-contract.ts b/demos/payments/src/utils/usdc-contract.ts index 3129aec..53d5907 100644 --- a/demos/payments/src/utils/usdc-contract.ts +++ b/demos/payments/src/utils/usdc-contract.ts @@ -5,7 +5,7 @@ import { erc20Abi, http, type Account, - type Address + type Address, } from "viem" /** @@ -19,7 +19,7 @@ import { export async function transferUsdc( fromAccount: Account, toAddress: Address, - amount: bigint + amount: bigint, ) { // If you'd like to bypass actual transactions on subsequent runs with the same // client wallet to the same server, you can set the SIMULATED_PAYMENT_TX_HASH @@ -31,7 +31,7 @@ export async function transferUsdc( const walletClient = createWalletClient({ chain, transport: http(), - account: fromAccount + account: fromAccount, }) return walletClient.sendTransaction({ @@ -40,7 +40,7 @@ export async function transferUsdc( data: encodeFunctionData({ abi: erc20Abi, functionName: "transfer", - args: [toAddress, amount] - }) + args: [toAddress, amount], + }), }) } diff --git a/demos/payments/vitest.config.ts b/demos/payments/vitest.config.ts index 6a8b09e..7972f77 100644 --- a/demos/payments/vitest.config.ts +++ b/demos/payments/vitest.config.ts @@ -3,6 +3,6 @@ import { defineConfig } from "vitest/config" export default defineConfig({ test: { passWithNoTests: true, - watch: false - } + watch: false, + }, }) diff --git a/demos/skyfire-kya/eslint.config.js b/demos/skyfire-kya/eslint.config.js index 0979926..13fe2a3 100644 --- a/demos/skyfire-kya/eslint.config.js +++ b/demos/skyfire-kya/eslint.config.js @@ -3,5 +3,5 @@ import { config } from "@repo/eslint-config/base" export default config({ - root: import.meta.dirname + root: import.meta.dirname, }) diff --git a/demos/skyfire-kya/src/index.ts b/demos/skyfire-kya/src/index.ts index 67e530a..bc15b68 100644 --- a/demos/skyfire-kya/src/index.ts +++ b/demos/skyfire-kya/src/index.ts @@ -4,7 +4,7 @@ import { log, logJson, successMessage, - waitForEnter + waitForEnter, } from "@repo/cli-tools" import type { JwtString, Verifiable, W3CCredential } from "agentcommercekit" import type * as jose from "jose" @@ -17,7 +17,7 @@ import { getOwnerDidFromVC, getSellerDidFromVC, verifySkyfireKyaAsAckId, - type SkyfireKyaCredentialSubject + type SkyfireKyaCredentialSubject, } from "./skyfire-kya-ack-id" async function runDemo() { @@ -38,7 +38,7 @@ async function runDemo() { // create mock kya token log( - `In this first step, we'll work with a Skyfire KYA token that contains buyer identity data, service scope, and a cryptographic proof.` + `In this first step, we'll work with a Skyfire KYA token that contains buyer identity data, service scope, and a cryptographic proof.`, ) await waitForEnter() @@ -50,7 +50,7 @@ async function runDemo() { // verify and extract ack-id identity log( - `\nNext, we'll convert the Skyfire KYA JWT into an ACK-ID compatible Verifiable Credential. This creates a W3C standard Verifiable Credential that preserves the original JWT's signature and payload.` + `\nNext, we'll convert the Skyfire KYA JWT into an ACK-ID compatible Verifiable Credential. This creates a W3C standard Verifiable Credential that preserves the original JWT's signature and payload.`, ) await waitForEnter() @@ -77,7 +77,7 @@ Details: // demonstrate bidirectional conversion log( - `\nNow we'll demonstrate that the conversion maintains full cryptographic integrity by converting the VC back to the original JWT format with perfect fidelity.` + `\nNow we'll demonstrate that the conversion maintains full cryptographic integrity by converting the VC back to the original JWT format with perfect fidelity.`, ) await waitForEnter() @@ -98,14 +98,14 @@ Details: // verify using ack-id style verification log( - `\nNext, we'll verify the Skyfire KYA token using ACK-ID's verification infrastructure, demonstrating how Skyfire can work on top of ACK-ID.` + `\nNext, we'll verify the Skyfire KYA token using ACK-ID's verification infrastructure, demonstrating how Skyfire can work on top of ACK-ID.`, ) await waitForEnter() log("4. Running ACK-ID style verification...") const isValid = await verifySkyfireKyaAsAckId(jwks, kyaToken, [ - "did:web:api.skyfire.xyz" + "did:web:api.skyfire.xyz", ]) if (isValid) { @@ -117,7 +117,7 @@ Details: // simulate service interaction log( - `\nFinally, we'll simulate how services built on ACK-ID can seamlessly work with Skyfire KYA tokens without any modifications.` + `\nFinally, we'll simulate how services built on ACK-ID can seamlessly work with Skyfire KYA tokens without any modifications.`, ) await waitForEnter() @@ -136,7 +136,7 @@ Details: async function simulateServiceCall( jwks: jose.JSONWebKeySet, - kyaToken: JwtString + kyaToken: JwtString, ) { log(" 📞 Incoming request with KYA token...") diff --git a/demos/skyfire-kya/src/jwk-keys.ts b/demos/skyfire-kya/src/jwk-keys.ts index c3747fe..9f44c6c 100644 --- a/demos/skyfire-kya/src/jwk-keys.ts +++ b/demos/skyfire-kya/src/jwk-keys.ts @@ -12,11 +12,11 @@ export async function generateJwks() { crv: "P-256", use: "sig", kid: "skyfire-key-1", - alg: "ES256" + alg: "ES256", } return { jwks: { keys: [publicKeyJwk] }, - keypair + keypair, } } diff --git a/demos/skyfire-kya/src/kya-token.ts b/demos/skyfire-kya/src/kya-token.ts index 50496dd..4b63e17 100644 --- a/demos/skyfire-kya/src/kya-token.ts +++ b/demos/skyfire-kya/src/kya-token.ts @@ -3,7 +3,7 @@ import { createJwt, createJwtSigner, type JwtString, - type Keypair + type Keypair, } from "agentcommercekit" import { jwtPayloadSchema } from "agentcommercekit/schemas/zod/v4" import { decodeJwt } from "jose" @@ -17,8 +17,8 @@ export const skyfireKyaJwtPayloadSchema = z.object({ agentName: z.string(), ownerId: z.string(), nameFirst: z.string(), - nameLast: z.string() - }) + nameLast: z.string(), + }), }) export type SkyfireKyaJwtPayload = z.output @@ -29,7 +29,7 @@ export type SkyfireKyaJwtPayload = z.output * @returns */ export async function createMockSkyfireKyaToken( - keypair: Keypair + keypair: Keypair, ): Promise { const payload: SkyfireKyaJwtPayload = { aud: "seller-service-123", @@ -38,10 +38,10 @@ export async function createMockSkyfireKyaToken( agentName: "BuyerAgent", ownerId: "buyer-org-789", nameFirst: "Alice", - nameLast: "Johnson" + nameLast: "Johnson", }, ssi: "seller-service-123", - jti: crypto.randomUUID() + jti: crypto.randomUUID(), } const jwt = await createJwt( @@ -49,13 +49,13 @@ export async function createMockSkyfireKyaToken( { issuer: "https://api.skyfire.xyz/", signer: createJwtSigner(keypair), - expiresIn: 3600 + expiresIn: 3600, }, { // @ts-expect-error - TODO: fix this typ: "kya+JWT", - alg: "ES256" - } + alg: "ES256", + }, ) const parsed = decodeJwt(jwt) diff --git a/demos/skyfire-kya/src/skyfire-kya-ack-id.ts b/demos/skyfire-kya/src/skyfire-kya-ack-id.ts index 873752b..5c8f67a 100644 --- a/demos/skyfire-kya/src/skyfire-kya-ack-id.ts +++ b/demos/skyfire-kya/src/skyfire-kya-ack-id.ts @@ -5,7 +5,7 @@ import { type JwtPayload, type JwtString, type Verifiable, - type W3CCredential + type W3CCredential, } from "agentcommercekit" import * as jose from "jose" import type { SkyfireKyaJwtPayload } from "./kya-token" @@ -21,7 +21,7 @@ export interface SkyfireKyaCredentialSubject { export async function convertSkyfireKyaToVerifiableCredential( jwks: jose.JSONWebKeySet, - kyaToken: JwtString + kyaToken: JwtString, ): Promise>> { const verifier = jose.createLocalJWKSet(jwks) const { payload } = await jose.jwtVerify( @@ -29,8 +29,8 @@ export async function convertSkyfireKyaToVerifiableCredential( verifier, { issuer: "https://api.skyfire.xyz/", - typ: "kya+JWT" - } + typ: "kya+JWT", + }, ) // Extract the signature from the JWT (third part after splitting by '.') @@ -61,7 +61,7 @@ export async function convertSkyfireKyaToVerifiableCredential( const syntheticVC: Verifiable> = { "@context": [ "https://www.w3.org/2018/credentials/v1", - "https://agentcommercekit.com/contexts/skyfire/v1" + "https://agentcommercekit.com/contexts/skyfire/v1", ], id: `urn:uuid:${payload.jti}`, type: ["VerifiableCredential", "SkyFireKYACredential"], @@ -74,7 +74,7 @@ export async function convertSkyfireKyaToVerifiableCredential( aud: payload.aud as string, bid: payload.bid, ssi: payload.ssi, - jti: payload.jti + jti: payload.jti, }, // Use the actual JWT signature with proper proof format proof: { @@ -83,8 +83,8 @@ export async function convertSkyfireKyaToVerifiableCredential( verificationMethod: "did:web:api.skyfire.xyz#key-1", proofPurpose: "assertionMethod", // Use the actual JWT signature (base64url encoded) - jws: `${jwtParts[0]}..${jwtSignature}` // detached JWS format - } + jws: `${jwtParts[0]}..${jwtSignature}`, // detached JWS format + }, } return syntheticVC @@ -94,7 +94,7 @@ export async function convertSkyfireKyaToVerifiableCredential( * Extract the buyer DID from a Skyfire KYA converted Verifiable Credential */ export function getBuyerDidFromVC( - vc: Verifiable> + vc: Verifiable>, ): DidWebUri { return vc.credentialSubject.id as DidWebUri } @@ -103,7 +103,7 @@ export function getBuyerDidFromVC( * Extract the seller DID from a Skyfire KYA converted Verifiable Credential */ export function getSellerDidFromVC( - vc: Verifiable> + vc: Verifiable>, ): DidWebUri { return `did:web:api.skyfire.xyz:seller:${vc.credentialSubject.ssi}` as DidWebUri } @@ -112,7 +112,7 @@ export function getSellerDidFromVC( * Extract the owner DID from a Skyfire KYA converted Verifiable Credential (if present) */ export function getOwnerDidFromVC( - vc: Verifiable> + vc: Verifiable>, ): DidWebUri | undefined { return vc.credentialSubject.bid.ownerId ? (`did:web:api.skyfire.xyz:owner:${vc.credentialSubject.bid.ownerId}` as DidWebUri) @@ -129,7 +129,7 @@ export interface SkyFireKYAPayload extends JwtPayload { export async function verifySkyfireKyaAsAckId( jwks: jose.JSONWebKeySet, kyaToken: JwtString, - trustedIssuers: string[] + trustedIssuers: string[], ): Promise { try { const vc = await convertSkyfireKyaToVerifiableCredential(jwks, kyaToken) @@ -162,7 +162,7 @@ export async function verifySkyfireKyaAsAckId( * This demonstrates the bidirectional nature of the conversion */ export function convertVerifiableCredentialToSkyfireKya( - vc: Verifiable> + vc: Verifiable>, ): JwtString { // Reconstruct the original JWT payload from VC data const { id, ...credentialData } = vc.credentialSubject @@ -177,21 +177,21 @@ export function convertVerifiableCredentialToSkyfireKya( sub, iss: "https://api.skyfire.xyz/", iat: Math.floor(new Date(vc.issuanceDate).getTime() / 1000), - exp: Math.floor(new Date(vc.expirationDate ?? "").getTime() / 1000) + exp: Math.floor(new Date(vc.expirationDate ?? "").getTime() / 1000), } // Reconstruct the JWT header (Skyfire always uses ES256 with kya+JWT type) const header = { alg: "ES256", - typ: "kya+JWT" + typ: "kya+JWT", } // Base64url encode header and payload const encodedHeader = bytesToBase64url( - new TextEncoder().encode(JSON.stringify(header)) + new TextEncoder().encode(JSON.stringify(header)), ) const encodedPayload = bytesToBase64url( - new TextEncoder().encode(JSON.stringify(jwtPayload)) + new TextEncoder().encode(JSON.stringify(jwtPayload)), ) // Extract signature from the VC proof (format: "header..signature") diff --git a/demos/skyfire-kya/vitest.config.ts b/demos/skyfire-kya/vitest.config.ts index 6a8b09e..7972f77 100644 --- a/demos/skyfire-kya/vitest.config.ts +++ b/demos/skyfire-kya/vitest.config.ts @@ -3,6 +3,6 @@ import { defineConfig } from "vitest/config" export default defineConfig({ test: { passWithNoTests: true, - watch: false - } + watch: false, + }, }) diff --git a/examples/issuer/bin/start-server.ts b/examples/issuer/bin/start-server.ts index d717799..de2a01f 100644 --- a/examples/issuer/bin/start-server.ts +++ b/examples/issuer/bin/start-server.ts @@ -8,17 +8,23 @@ function startServer() { const db = getDb() migrate(db, { - migrationsFolder: join(import.meta.dirname, "..", "src", "db", "migrations") + migrationsFolder: join( + import.meta.dirname, + "..", + "src", + "db", + "migrations", + ), }) serve( { fetch: app.fetch, - port: 3456 + port: 3456, }, ({ port }) => { console.log(`> issuer running at http://localhost:${port}`) - } + }, ) } diff --git a/examples/issuer/drizzle.config.ts b/examples/issuer/drizzle.config.ts index cd9344a..b2ddfea 100644 --- a/examples/issuer/drizzle.config.ts +++ b/examples/issuer/drizzle.config.ts @@ -3,5 +3,5 @@ import { defineConfig } from "drizzle-kit" export default defineConfig({ out: "./src/db/migrations", schema: "./src/db/schema.ts", - dialect: "sqlite" + dialect: "sqlite", }) diff --git a/examples/issuer/eslint.config.js b/examples/issuer/eslint.config.js index 0979926..13fe2a3 100644 --- a/examples/issuer/eslint.config.js +++ b/examples/issuer/eslint.config.js @@ -3,5 +3,5 @@ import { config } from "@repo/eslint-config/base" export default config({ - root: import.meta.dirname + root: import.meta.dirname, }) diff --git a/examples/issuer/src/db/queries/credentials.ts b/examples/issuer/src/db/queries/credentials.ts index 0097ca9..c01a237 100644 --- a/examples/issuer/src/db/queries/credentials.ts +++ b/examples/issuer/src/db/queries/credentials.ts @@ -2,7 +2,7 @@ import { credentialsTable, statusListsTable, type DatabaseCredential, - type NewDatabaseCredential + type NewDatabaseCredential, } from "@/db/schema" import { getStatusListPosition } from "@/db/utils/get-status-list-position" import { eq } from "drizzle-orm" @@ -11,7 +11,7 @@ import { maybeCreateStatusList } from "./status-lists" export async function createCredential( db: DatabaseClient, - credential: NewDatabaseCredential + credential: NewDatabaseCredential, ): Promise { const [result] = await db .insert(credentialsTable) @@ -26,7 +26,7 @@ export async function createCredential( await maybeCreateStatusList(db, { id: statusListId, - credentialType: credential.credentialType + credentialType: credential.credentialType, }) return result @@ -34,7 +34,7 @@ export async function createCredential( export async function getCredential( db: DatabaseClient, - id: number + id: number, ): Promise { const [credential] = await db .select() @@ -46,11 +46,11 @@ export async function getCredential( export async function revokeCredential( db: DatabaseClient, - credential: DatabaseCredential + credential: DatabaseCredential, ) { // Set revocation bit in the status list const { id: statusListId, index: listIndex } = getStatusListPosition( - credential.id + credential.id, ) await db @@ -79,7 +79,7 @@ export async function revokeCredential( await db .update(statusListsTable) .set({ - data: updatedString + data: updatedString, }) .where(eq(statusListsTable.id, statusListId)) } diff --git a/examples/issuer/src/db/queries/status-lists.ts b/examples/issuer/src/db/queries/status-lists.ts index 7237487..59e9b9d 100644 --- a/examples/issuer/src/db/queries/status-lists.ts +++ b/examples/issuer/src/db/queries/status-lists.ts @@ -6,13 +6,13 @@ type CreateStatusListParams = Pick export async function maybeCreateStatusList( db: DatabaseClient, - { id, credentialType }: CreateStatusListParams + { id, credentialType }: CreateStatusListParams, ) { await db .insert(statusListsTable) .values({ id, - credentialType + credentialType, }) .onConflictDoNothing() } diff --git a/examples/issuer/src/db/schema.ts b/examples/issuer/src/db/schema.ts index 22ea39c..b5d8e09 100644 --- a/examples/issuer/src/db/schema.ts +++ b/examples/issuer/src/db/schema.ts @@ -4,7 +4,7 @@ import { index, integer, sqliteTable as table, - text + text, } from "drizzle-orm/sqlite-core" export const STATUS_LIST_MAX_SIZE = 8_192 @@ -26,7 +26,7 @@ export const statusListsTable = table("status_lists", { .notNull() // eslint-disable-next-line @cspell/spellchecker .default(sql`(unixepoch() * 1000)`) - .$onUpdateFn(() => new Date()) + .$onUpdateFn(() => new Date()), }) export type DatabaseStatusList = typeof statusListsTable.$inferSelect @@ -46,9 +46,9 @@ export const credentialsTable = table( .notNull() // eslint-disable-next-line @cspell/spellchecker .default(sql`(unixepoch() * 1000)`), - revokedAt: integer("revoked_at", { mode: "timestamp_ms" }) + revokedAt: integer("revoked_at", { mode: "timestamp_ms" }), }, - (t) => [index("credential_type_idx").on(t.credentialType)] + (t) => [index("credential_type_idx").on(t.credentialType)], ) export type DatabaseCredential = typeof credentialsTable.$inferSelect diff --git a/examples/issuer/src/db/utils/get-status-list-position.test.ts b/examples/issuer/src/db/utils/get-status-list-position.test.ts index b31550c..5c0a27d 100644 --- a/examples/issuer/src/db/utils/get-status-list-position.test.ts +++ b/examples/issuer/src/db/utils/get-status-list-position.test.ts @@ -7,7 +7,7 @@ describe("getStatusListPosition", () => { const result = getStatusListPosition(1) expect(result).toEqual({ id: 0, - index: 0 + index: 0, }) }) @@ -15,7 +15,7 @@ describe("getStatusListPosition", () => { const result = getStatusListPosition(5) expect(result).toEqual({ id: 0, - index: 4 + index: 4, }) }) @@ -23,7 +23,7 @@ describe("getStatusListPosition", () => { const result = getStatusListPosition(STATUS_LIST_MAX_SIZE + 1) expect(result).toEqual({ id: 1, - index: 0 + index: 0, }) }) @@ -31,7 +31,7 @@ describe("getStatusListPosition", () => { const result = getStatusListPosition(STATUS_LIST_MAX_SIZE + 2) expect(result).toEqual({ id: 1, - index: 1 + index: 1, }) }) @@ -39,7 +39,7 @@ describe("getStatusListPosition", () => { const result = getStatusListPosition(STATUS_LIST_MAX_SIZE * 3 + 42) expect(result).toEqual({ id: 3, - index: 41 + index: 41, }) }) diff --git a/examples/issuer/src/db/utils/get-status-list-position.ts b/examples/issuer/src/db/utils/get-status-list-position.ts index 8dc1065..21d6324 100644 --- a/examples/issuer/src/db/utils/get-status-list-position.ts +++ b/examples/issuer/src/db/utils/get-status-list-position.ts @@ -10,7 +10,7 @@ export function getStatusListPosition(statusListIndex: number) { // Ensure the index is a positive integer if (!Number.isInteger(statusListIndex) || statusListIndex < 1) { throw new Error( - "Status list index must be a positive integer starting from 1" + "Status list index must be a positive integer starting from 1", ) } @@ -18,6 +18,6 @@ export function getStatusListPosition(statusListIndex: number) { return { id: Math.floor(zeroIndexed / STATUS_LIST_MAX_SIZE), - index: zeroIndexed % STATUS_LIST_MAX_SIZE + index: zeroIndexed % STATUS_LIST_MAX_SIZE, } } diff --git a/examples/issuer/src/lib/credentials/build-signed-credential.test.ts b/examples/issuer/src/lib/credentials/build-signed-credential.test.ts index d3a54ce..ab6e211 100644 --- a/examples/issuer/src/lib/credentials/build-signed-credential.test.ts +++ b/examples/issuer/src/lib/credentials/build-signed-credential.test.ts @@ -5,7 +5,7 @@ import { createJwtSigner, DidResolver, generateKeypair, - isJwtString + isJwtString, } from "agentcommercekit" import { describe, expect, it } from "vitest" import type { Issuer } from "../types" @@ -19,14 +19,14 @@ describe("buildSignedCredential", async () => { const { did, didDocument } = createDidWebDocumentFromKeypair({ keypair, - baseUrl + baseUrl, }) const issuer: Issuer = { did, didDocument, signer: createJwtSigner(keypair), - alg: "ES256K" + alg: "ES256K", } const credential: DatabaseCredential = { @@ -40,9 +40,9 @@ describe("buildSignedCredential", async () => { issuer: issuer.did, subject: "did:example:123", attestation: { - test: "data" - } - }) + test: "data", + }, + }), } it("should set the id on the credential", async () => { @@ -54,7 +54,7 @@ describe("buildSignedCredential", async () => { path, issuer, credential, - resolver + resolver, }) expect(signedCredential.id).toBe(`${baseUrl}/credentials/${credential.id}`) @@ -69,7 +69,7 @@ describe("buildSignedCredential", async () => { path, issuer, credential, - resolver + resolver, }) expect(signedCredential.credentialStatus).toBeDefined() @@ -84,7 +84,7 @@ describe("buildSignedCredential", async () => { path, issuer, credential, - resolver + resolver, }) expect(signedCredential.proof).toBeDefined() diff --git a/examples/issuer/src/lib/credentials/build-signed-credential.ts b/examples/issuer/src/lib/credentials/build-signed-credential.ts index d026cde..7247052 100644 --- a/examples/issuer/src/lib/credentials/build-signed-credential.ts +++ b/examples/issuer/src/lib/credentials/build-signed-credential.ts @@ -4,7 +4,7 @@ import { makeRevocable, parseJwtCredential, signCredential, - type Resolvable + type Resolvable, } from "agentcommercekit" import type { CredentialResponse, Issuer } from "../types" @@ -21,10 +21,10 @@ export async function buildSignedCredential({ path, issuer, credential, - resolver + resolver, }: BuildSignedCredentialParams): Promise { const { id: statusListId, index: statusListIndex } = getStatusListPosition( - credential.id + credential.id, ) let unsignedCredential = credential.baseCredential @@ -35,7 +35,7 @@ export async function buildSignedCredential({ unsignedCredential = makeRevocable(unsignedCredential, { id: `${baseUrl}/status/${statusListId}#${statusListIndex}`, statusListIndex, - statusListUrl: `${baseUrl}/status/${statusListId}` + statusListUrl: `${baseUrl}/status/${statusListId}`, }) const jwt = await signCredential(unsignedCredential, issuer) @@ -44,6 +44,6 @@ export async function buildSignedCredential({ return { credential: verifiableCredential, - jwt + jwt, } } diff --git a/examples/issuer/src/lib/types.ts b/examples/issuer/src/lib/types.ts index de21f93..4ca111a 100644 --- a/examples/issuer/src/lib/types.ts +++ b/examples/issuer/src/lib/types.ts @@ -5,7 +5,7 @@ import type { JwtSigner, JwtString, Verifiable, - W3CCredential + W3CCredential, } from "agentcommercekit" export type Issuer = { diff --git a/examples/issuer/src/middleware/issuer.ts b/examples/issuer/src/middleware/issuer.ts index 492ed6d..503eaa6 100644 --- a/examples/issuer/src/middleware/issuer.ts +++ b/examples/issuer/src/middleware/issuer.ts @@ -3,7 +3,7 @@ import { createDidWebDocumentFromKeypair, createJwtSigner, generateKeypair, - hexStringToBytes + hexStringToBytes, } from "agentcommercekit" import type { Env, MiddlewareHandler } from "hono" import { env } from "hono/adapter" @@ -23,7 +23,7 @@ export function issuer(): MiddlewareHandler { const { did, didDocument } = createDidWebDocumentFromKeypair({ keypair, - baseUrl: BASE_URL + baseUrl: BASE_URL, }) const signer = createJwtSigner(keypair) @@ -32,7 +32,7 @@ export function issuer(): MiddlewareHandler { did, didDocument, signer, - alg: "ES256K" + alg: "ES256K", }) await next() diff --git a/examples/issuer/src/routes/credentials.test.ts b/examples/issuer/src/routes/credentials.test.ts index a187024..2e67e7d 100644 --- a/examples/issuer/src/routes/credentials.test.ts +++ b/examples/issuer/src/routes/credentials.test.ts @@ -3,14 +3,14 @@ import { getCredential } from "@/db/queries/credentials" import type { DatabaseCredential } from "@/db/schema" import { createDidWebWithSigner, - type DidWithSigner + type DidWithSigner, } from "@/test-helpers/did-web-with-signer" import { bytesToHexString, createControllerCredential, createJwt, DidResolver, - getDidResolver + getDidResolver, } from "agentcommercekit" import { credentialSchema } from "agentcommercekit/schemas/valibot" import * as v from "valibot" @@ -22,7 +22,7 @@ vi.mock("agentcommercekit", async () => { const actual = await vi.importActual("agentcommercekit") return { ...actual, - getDidResolver: vi.fn() + getDidResolver: vi.fn(), } }) @@ -36,15 +36,15 @@ vi.mock("@/db/queries/credentials", async () => { credential: Omit< DatabaseCredential, "id" | "statusListIndex" | "issuedAt" | "revokedAt" - > + >, ): Promise => Promise.resolve({ id: 1, credentialType: credential.credentialType, baseCredential: credential.baseCredential, issuedAt: new Date(), - revokedAt: null - }) + revokedAt: null, + }), ), getCredential: vi.fn().mockImplementation(async (_db, id: number) => { return Promise.resolve({ @@ -53,11 +53,11 @@ vi.mock("@/db/queries/credentials", async () => { baseCredential: createControllerCredential({ controller: "did:web:controller.example.com", subject: "did:web:subject.example.com", - issuer: "did:web:issuer.example.com" - }) + issuer: "did:web:issuer.example.com", + }), }) }), - revokeCredential: vi.fn() + revokeCredential: vi.fn(), } }) @@ -65,8 +65,8 @@ const responseSchema = v.object({ ok: v.literal(true), data: v.object({ credential: credentialSchema, - jwt: v.string() - }) + jwt: v.string(), + }), }) describe("POST /credentials/controller", () => { @@ -78,7 +78,7 @@ describe("POST /credentials/controller", () => { issuer = await createDidWebWithSigner("https://issuer.example.com") controller = await createDidWebWithSigner("https://controller.example.com") target = await createDidWebWithSigner(`https://target.example.com`, { - controller: controller.did + controller: controller.did, }) process.env.ISSUER_PRIVATE_KEY = bytesToHexString(issuer.keypair.privateKey) @@ -97,20 +97,20 @@ describe("POST /credentials/controller", () => { const payload = { controller: controller.did, - subject: target.did + subject: target.did, } const signedPayload = await createJwt(payload, { issuer: controller.did, - signer: controller.signer + signer: controller.signer, }) const res = await app.request("/credentials/controller", { method: "POST", body: JSON.stringify({ - payload: signedPayload + payload: signedPayload, }), - headers: new Headers({ "Content-Type": "application/json" }) + headers: new Headers({ "Content-Type": "application/json" }), }) expect(res.status).toBe(200) @@ -126,7 +126,7 @@ describe("POST /credentials/controller", () => { it("responds with an error when the target DID does not have a controller listed", async () => { const resolver = new DidResolver() const targetNoController = await createDidWebWithSigner( - `https://stray.example.com` + `https://stray.example.com`, ) resolver.addToCache(controller.did, controller.didDocument) resolver.addToCache(targetNoController.did, targetNoController.didDocument) @@ -134,26 +134,26 @@ describe("POST /credentials/controller", () => { const payload = { controller: controller.did, - subject: targetNoController.did + subject: targetNoController.did, } const signedPayload = await createJwt(payload, { issuer: controller.did, - signer: controller.signer + signer: controller.signer, }) const res = await app.request("/credentials/controller", { method: "POST", body: JSON.stringify({ - payload: signedPayload + payload: signedPayload, }), - headers: new Headers({ "Content-Type": "application/json" }) + headers: new Headers({ "Content-Type": "application/json" }), }) expect(res.status).toBe(400) expect(await res.json()).toEqual({ error: `DID ${targetNoController.did} is missing a controller`, - ok: false + ok: false, }) }) @@ -161,38 +161,38 @@ describe("POST /credentials/controller", () => { const resolver = new DidResolver() const targetBadController = await createDidWebWithSigner( `https://target2.example.com`, - { controller: issuer.did } // Uses the 'issuer' instead of the `controller` + { controller: issuer.did }, // Uses the 'issuer' instead of the `controller` ) resolver.addToCache(issuer.did, issuer.didDocument) resolver.addToCache(controller.did, controller.didDocument) resolver.addToCache( targetBadController.did, - targetBadController.didDocument + targetBadController.didDocument, ) vi.mocked(getDidResolver).mockReturnValue(resolver) const payload = { controller: controller.did, - subject: targetBadController.did + subject: targetBadController.did, } const signedPayload = await createJwt(payload, { issuer: controller.did, - signer: controller.signer + signer: controller.signer, }) const res = await app.request("/credentials/controller", { method: "POST", body: JSON.stringify({ - payload: signedPayload + payload: signedPayload, }), - headers: new Headers({ "Content-Type": "application/json" }) + headers: new Headers({ "Content-Type": "application/json" }), }) expect(res.status).toBe(401) expect(await res.json()).toEqual({ error: "Target controller does not match", - ok: false + ok: false, }) }) @@ -204,26 +204,26 @@ describe("POST /credentials/controller", () => { const payload = { controller: controller.did, - subject: target.did + subject: target.did, } const signedPayload = await createJwt(payload, { issuer: target.did, // The target attempting to prove ownership - signer: target.signer + signer: target.signer, }) const res = await app.request("/credentials/controller", { method: "POST", body: JSON.stringify({ - payload: signedPayload + payload: signedPayload, }), - headers: new Headers({ "Content-Type": "application/json" }) + headers: new Headers({ "Content-Type": "application/json" }), }) expect(res.status).toBe(401) expect(await res.json()).toEqual({ ok: false, - error: "Target controller does not match" + error: "Target controller does not match", }) }) @@ -233,26 +233,26 @@ describe("POST /credentials/controller", () => { const payload = { controller: controller.did, - subject: target.did + subject: target.did, } const signedPayload = await createJwt(payload, { issuer: controller.did, - signer: controller.signer + signer: controller.signer, }) const res = await app.request("/credentials/controller", { method: "POST", body: JSON.stringify({ - payload: signedPayload + payload: signedPayload, }), - headers: new Headers({ "Content-Type": "application/json" }) + headers: new Headers({ "Content-Type": "application/json" }), }) expect(res.status).toBe(401) expect(await res.json()).toEqual({ ok: false, - error: "Invalid payload" + error: "Invalid payload", }) }) @@ -264,9 +264,9 @@ describe("POST /credentials/controller", () => { const res = await app.request("/credentials/controller", { method: "POST", body: JSON.stringify({ - payload: "not-a-valid-jwt" + payload: "not-a-valid-jwt", }), - headers: new Headers({ "Content-Type": "application/json" }) + headers: new Headers({ "Content-Type": "application/json" }), }) expect(res.status).toBe(400) expect(await res.json()).toMatchObject({ @@ -280,9 +280,9 @@ describe("POST /credentials/controller", () => { received: '"not-a-valid-jwt"', input: "not-a-valid-jwt", message: "Invalid JWT format", - path: [{ key: "payload", value: "not-a-valid-jwt" }] - } - ] + path: [{ key: "payload", value: "not-a-valid-jwt" }], + }, + ], }) }) @@ -293,20 +293,20 @@ describe("POST /credentials/controller", () => { const payload = { controller: "not-a-valid-did", - subject: target.did + subject: target.did, } const signedPayload = await createJwt(payload, { issuer: controller.did, - signer: controller.signer + signer: controller.signer, }) const res = await app.request("/credentials/controller", { method: "POST", body: JSON.stringify({ - payload: signedPayload + payload: signedPayload, }), - headers: new Headers({ "Content-Type": "application/json" }) + headers: new Headers({ "Content-Type": "application/json" }), }) expect(res.status).toBe(400) @@ -321,9 +321,9 @@ describe("POST /credentials/controller", () => { received: '"not-a-valid-did"', input: "not-a-valid-did", message: "Invalid DID format", - path: [{ key: "controller", value: "not-a-valid-did" }] - } - ] + path: [{ key: "controller", value: "not-a-valid-did" }], + }, + ], }) }) }) @@ -337,12 +337,12 @@ describe("DELETE /credentials/controller", () => { controller = await createDidWebWithSigner("https://controller.example.com") const payload = { - id: 1 + id: 1, } signedPayload = await createJwt(payload, { issuer: controller.did, - signer: controller.signer + signer: controller.signer, }) process.env.ISSUER_PRIVATE_KEY = bytesToHexString(issuer.keypair.privateKey) @@ -361,15 +361,15 @@ describe("DELETE /credentials/controller", () => { const res = await app.request("/credentials/controller", { method: "DELETE", body: JSON.stringify({ - payload: signedPayload + payload: signedPayload, }), - headers: new Headers({ "Content-Type": "application/json" }) + headers: new Headers({ "Content-Type": "application/json" }), }) expect(res.status).toBe(200) expect(await res.json()).toEqual({ ok: true, - data: null + data: null, }) }) @@ -382,26 +382,26 @@ describe("DELETE /credentials/controller", () => { const res = await app.request("/credentials/controller", { method: "DELETE", body: JSON.stringify({ - payload: signedPayload + payload: signedPayload, }), - headers: new Headers({ "Content-Type": "application/json" }) + headers: new Headers({ "Content-Type": "application/json" }), }) expect(res.status).toBe(404) expect(await res.json()).toEqual({ ok: false, - error: "Credential not found" + error: "Credential not found", }) }) it("throws an error if credential controller is not the request signer", async () => { const resolver = new DidResolver() const differentController = await createDidWebWithSigner( - "https://different-controller.example.com" + "https://different-controller.example.com", ) resolver.addToCache( differentController.did, - differentController.didDocument + differentController.didDocument, ) vi.mocked(getDidResolver).mockReturnValue(resolver) @@ -409,23 +409,23 @@ describe("DELETE /credentials/controller", () => { { id: 1 }, { issuer: differentController.did, - signer: differentController.signer - } + signer: differentController.signer, + }, ) const res = await app.request("/credentials/controller", { method: "DELETE", body: JSON.stringify({ - payload: signedPayload + payload: signedPayload, }), - headers: new Headers({ "Content-Type": "application/json" }) + headers: new Headers({ "Content-Type": "application/json" }), }) expect(res.status).toBe(401) expect(await res.json()).toEqual({ ok: false, - error: "Unauthorized" + error: "Unauthorized", }) }) @@ -437,7 +437,7 @@ describe("DELETE /credentials/controller", () => { const invalidCredential = createControllerCredential({ controller: "did:web:controller.example.com", subject: "did:web:subject.example.com", - issuer: "did:web:issuer.example.com" + issuer: "did:web:issuer.example.com", }) delete invalidCredential.credentialSubject.controller @@ -445,21 +445,21 @@ describe("DELETE /credentials/controller", () => { vi.mocked(getCredential).mockResolvedValueOnce({ id: 1, credentialType: "ControllerCredential", - baseCredential: invalidCredential + baseCredential: invalidCredential, } as DatabaseCredential) const res = await app.request("/credentials/controller", { method: "DELETE", body: JSON.stringify({ - payload: signedPayload + payload: signedPayload, }), - headers: new Headers({ "Content-Type": "application/json" }) + headers: new Headers({ "Content-Type": "application/json" }), }) expect(res.status).toBe(500) expect(await res.json()).toEqual({ ok: false, - error: "Invalid stored credential" + error: "Invalid stored credential", }) }) }) diff --git a/examples/issuer/src/routes/credentials.ts b/examples/issuer/src/routes/credentials.ts index 207b7dc..1bac064 100644 --- a/examples/issuer/src/routes/credentials.ts +++ b/examples/issuer/src/routes/credentials.ts @@ -1,7 +1,7 @@ import { createCredential as createDatabaseCredential, getCredential, - revokeCredential + revokeCredential, } from "@/db/queries/credentials" import { buildSignedCredential } from "@/lib/credentials/build-signed-credential" import type { CredentialResponse } from "@/lib/types" @@ -10,18 +10,18 @@ import { didResolver } from "@/middleware/did-resolver" import { issuer } from "@/middleware/issuer" import { apiSuccessResponse, - type ApiResponse + type ApiResponse, } from "@repo/api-utils/api-response" import { internalServerError, notFound, - unauthorized + unauthorized, } from "@repo/api-utils/exceptions" import { signedPayloadValidator } from "@repo/api-utils/middleware/signed-payload-validator" import { createControllerCredential, isControllerCredential, - resolveDidWithController + resolveDidWithController, } from "agentcommercekit" import { didUriSchema } from "agentcommercekit/schemas/valibot" import { Hono, type Env } from "hono" @@ -35,7 +35,7 @@ app.use("*", database()) const bodySchema = v.object({ controller: didUriSchema, - subject: didUriSchema + subject: didUriSchema, }) /** @@ -75,7 +75,7 @@ app.post( // Check that the subject is a valid did with a valid, resolvable controller const { did, controller } = await resolveDidWithController( payload.body.subject, - resolver + resolver, ) if (controller.did !== payload.body.controller) { @@ -85,12 +85,12 @@ app.post( const baseCredential = createControllerCredential({ subject: did, controller: controller.did, - issuer: issuer.did + issuer: issuer.did, }) const credential = await createDatabaseCredential(db, { credentialType: "ControllerCredential", - baseCredential + baseCredential, }) const result = await buildSignedCredential({ @@ -98,11 +98,11 @@ app.post( path: "/credentials/controller", issuer, credential, - resolver + resolver, }) return c.json(apiSuccessResponse(result)) - } + }, ) /** @@ -136,14 +136,14 @@ app.get("/:id", async (c): Promise> => { path: "/credentials/controller", issuer, credential, - resolver + resolver, }) return c.json(apiSuccessResponse(result)) }) const deleteBodySchema = v.object({ - id: v.number() + id: v.number(), }) /** @@ -189,7 +189,7 @@ app.delete( await revokeCredential(db, databaseCredential) return c.json(apiSuccessResponse(null)) - } + }, ) export default app diff --git a/examples/issuer/src/routes/healthcheck.ts b/examples/issuer/src/routes/healthcheck.ts index 7fb4caa..35bf63d 100644 --- a/examples/issuer/src/routes/healthcheck.ts +++ b/examples/issuer/src/routes/healthcheck.ts @@ -1,6 +1,6 @@ import { apiSuccessResponse, - type ApiResponse + type ApiResponse, } from "@repo/api-utils/api-response" import { Hono, type Env } from "hono" diff --git a/examples/issuer/src/routes/receipts.test.ts b/examples/issuer/src/routes/receipts.test.ts index c23a7eb..be4437d 100644 --- a/examples/issuer/src/routes/receipts.test.ts +++ b/examples/issuer/src/routes/receipts.test.ts @@ -3,7 +3,7 @@ import { getCredential } from "@/db/queries/credentials" import type { DatabaseCredential } from "@/db/schema" import { createDidWebWithSigner, - type DidWithSigner + type DidWithSigner, } from "@/test-helpers/did-web-with-signer" import { bytesToHexString, @@ -14,11 +14,11 @@ import { DidResolver, getDidResolver, verifyPaymentRequestToken, - type PaymentRequestInit + type PaymentRequestInit, } from "agentcommercekit" import { credentialSchema, - paymentRequestSchema + paymentRequestSchema, } from "agentcommercekit/schemas/valibot" import * as v from "valibot" import { afterEach, beforeEach, describe, expect, it, vi } from "vitest" @@ -29,7 +29,7 @@ vi.mock("agentcommercekit", async () => { return { ...actual, verifyPaymentRequestToken: vi.fn(), - getDidResolver: vi.fn() + getDidResolver: vi.fn(), } }) @@ -43,15 +43,15 @@ vi.mock("@/db/queries/credentials", async () => { credential: Omit< DatabaseCredential, "id" | "statusListIndex" | "issuedAt" | "revokedAt" - > + >, ): Promise => Promise.resolve({ id: 1, credentialType: credential.credentialType, baseCredential: credential.baseCredential, issuedAt: new Date(), - revokedAt: null - }) + revokedAt: null, + }), ), getCredential: vi.fn().mockImplementation(async (_db, id: string) => { return Promise.resolve({ @@ -61,11 +61,11 @@ vi.mock("@/db/queries/credentials", async () => { paymentRequestToken: "test.payment.token", paymentOptionId: "test-payment-option-id", issuer: "did:web:issuer.example.com", - payerDid: "did:web:payer.example.com" - }) + payerDid: "did:web:payer.example.com", + }), }) }), - revokeCredential: vi.fn() + revokeCredential: vi.fn(), } }) @@ -73,8 +73,8 @@ const responseSchema = v.object({ ok: v.literal(true), data: v.object({ credential: credentialSchema, - jwt: v.string() - }) + jwt: v.string(), + }), }) const paymentRequestInit: PaymentRequestInit = { @@ -85,9 +85,9 @@ const paymentRequestInit: PaymentRequestInit = { amount: 10, decimals: 2, currency: "USD", - recipient: "sol:123" - } - ] + recipient: "sol:123", + }, + ], } const paymentRequest = v.parse(paymentRequestSchema, paymentRequestInit) @@ -95,27 +95,27 @@ const paymentRequest = v.parse(paymentRequestSchema, paymentRequestInit) async function generatePayload( payer: DidWithSigner, resourceServer: DidWithSigner, - paymentService: DidWithSigner + paymentService: DidWithSigner, ) { const { paymentRequestToken, paymentRequest } = await createSignedPaymentRequest(paymentRequestInit, { issuer: resourceServer.did, signer: resourceServer.signer, - algorithm: curveToJwtAlgorithm(resourceServer.keypair.curve) + algorithm: curveToJwtAlgorithm(resourceServer.keypair.curve), }) const payload = { paymentRequestToken, paymentOptionId: paymentRequest.paymentOptions[0].id, metadata: { - txHash: "test-tx-hash" + txHash: "test-tx-hash", }, - payerDid: payer.did + payerDid: payer.did, } const signedPayload = await createJwt(payload, { issuer: paymentService.did, - signer: paymentService.signer + signer: paymentService.signer, }) return signedPayload @@ -133,22 +133,22 @@ describe("POST /credentials/receipts", () => { vi.mocked(getDidResolver).mockReturnValue(resolver) issuer = await createDidWebWithSigner("https://issuer.example.com", { - resolver + resolver, }) payer = await createDidWebWithSigner("https://payer.example.com", { - resolver + resolver, }) resourceServer = await createDidWebWithSigner( "https://resource-server.example.com", { - resolver - } + resolver, + }, ) paymentService = await createDidWebWithSigner( "https://payment-service.example.com", { - resolver - } + resolver, + }, ) process.env.ISSUER_PRIVATE_KEY = bytesToHexString(issuer.keypair.privateKey) @@ -160,8 +160,8 @@ describe("POST /credentials/receipts", () => { parsed: { payload: paymentRequestInit, issuer: resourceServer.did, - verified: true - } + verified: true, + }, }) }) @@ -173,15 +173,15 @@ describe("POST /credentials/receipts", () => { const signedPayload = await generatePayload( payer, resourceServer, - paymentService + paymentService, ) const res = await app.request("/credentials/receipts", { method: "POST", body: JSON.stringify({ - payload: signedPayload + payload: signedPayload, }), - headers: new Headers({ "Content-Type": "application/json" }) + headers: new Headers({ "Content-Type": "application/json" }), }) expect(res.status).toBe(200) @@ -203,21 +203,21 @@ describe("POST /credentials/receipts", () => { const signedPayload = await generatePayload( payer, resourceServer, - paymentService + paymentService, ) const res = await app.request("/credentials/receipts", { method: "POST", body: JSON.stringify({ - payload: signedPayload + payload: signedPayload, }), - headers: new Headers({ "Content-Type": "application/json" }) + headers: new Headers({ "Content-Type": "application/json" }), }) expect(res.status).toBe(401) expect(await res.json()).toEqual({ ok: false, - error: "Invalid payload" + error: "Invalid payload", }) }) @@ -227,22 +227,22 @@ describe("POST /credentials/receipts", () => { paymentRequestToken: "test.jwt.token", paymentOptionId: "test-payment-option-id", metadata: { - txHash: "test-tx-hash" + txHash: "test-tx-hash", }, - payerDid: "invalid-did" + payerDid: "invalid-did", }, { issuer: paymentService.did, - signer: paymentService.signer - } + signer: paymentService.signer, + }, ) const res = await app.request("/credentials/receipts", { method: "POST", body: JSON.stringify({ - payload: signedPayload + payload: signedPayload, }), - headers: new Headers({ "Content-Type": "application/json" }) + headers: new Headers({ "Content-Type": "application/json" }), }) expect(res.status).toBe(400) @@ -257,9 +257,9 @@ describe("POST /credentials/receipts", () => { received: '"invalid-did"', input: "invalid-did", message: "Invalid DID format", - path: [{ key: "payerDid", value: "invalid-did" }] - } - ] + path: [{ key: "payerDid", value: "invalid-did" }], + }, + ], }) }) }) @@ -274,23 +274,23 @@ describe("DELETE /credentials/receipts", () => { vi.mocked(getDidResolver).mockReturnValue(resolver) const issuer = await createDidWebWithSigner("https://issuer.example.com", { - resolver + resolver, }) tokenIssuer = await createDidWebWithSigner( "https://token-issuer.example.com", { - resolver - } + resolver, + }, ) const payload = { - id: 1 + id: 1, } signedPayload = await createJwt(payload, { issuer: tokenIssuer.did, - signer: tokenIssuer.signer + signer: tokenIssuer.signer, }) process.env.ISSUER_PRIVATE_KEY = bytesToHexString(issuer.keypair.privateKey) @@ -302,8 +302,8 @@ describe("DELETE /credentials/receipts", () => { parsed: { issuer: tokenIssuer.did, payload: paymentRequestInit, - verified: true - } + verified: true, + }, }) }) @@ -315,15 +315,15 @@ describe("DELETE /credentials/receipts", () => { const res = await app.request("/credentials/receipts", { method: "DELETE", body: JSON.stringify({ - payload: signedPayload + payload: signedPayload, }), - headers: new Headers({ "Content-Type": "application/json" }) + headers: new Headers({ "Content-Type": "application/json" }), }) expect(res.status).toBe(200) expect(await res.json()).toEqual({ ok: true, - data: null + data: null, }) }) @@ -333,15 +333,15 @@ describe("DELETE /credentials/receipts", () => { const res = await app.request("/credentials/receipts", { method: "DELETE", body: JSON.stringify({ - payload: signedPayload + payload: signedPayload, }), - headers: new Headers({ "Content-Type": "application/json" }) + headers: new Headers({ "Content-Type": "application/json" }), }) expect(res.status).toBe(404) expect(await res.json()).toEqual({ ok: false, - error: "Credential not found" + error: "Credential not found", }) }) @@ -349,31 +349,31 @@ describe("DELETE /credentials/receipts", () => { const unknownSigner = await createDidWebWithSigner( "https://unknown-signer.example.com", { - resolver - } + resolver, + }, ) const signedPayload = await createJwt( { id: 1 }, { issuer: unknownSigner.did, - signer: unknownSigner.signer - } + signer: unknownSigner.signer, + }, ) const res = await app.request("/credentials/receipts", { method: "DELETE", body: JSON.stringify({ - payload: signedPayload + payload: signedPayload, }), - headers: new Headers({ "Content-Type": "application/json" }) + headers: new Headers({ "Content-Type": "application/json" }), }) expect(res.status).toBe(401) expect(await res.json()).toEqual({ ok: false, - error: "Unauthorized" + error: "Unauthorized", }) }) @@ -382,7 +382,7 @@ describe("DELETE /credentials/receipts", () => { paymentRequestToken: "test.payment.token", paymentOptionId: "test-payment-option-id", issuer: "did:web:issuer.example.com", - payerDid: "did:web:payer.example.com" + payerDid: "did:web:payer.example.com", }) delete invalidCredential.credentialSubject.paymentRequestToken @@ -390,21 +390,21 @@ describe("DELETE /credentials/receipts", () => { vi.mocked(getCredential).mockResolvedValueOnce({ id: 1, credentialType: "PaymentReceiptCredential", - baseCredential: invalidCredential + baseCredential: invalidCredential, } as DatabaseCredential) const res = await app.request("/credentials/receipts", { method: "DELETE", body: JSON.stringify({ - payload: signedPayload + payload: signedPayload, }), - headers: new Headers({ "Content-Type": "application/json" }) + headers: new Headers({ "Content-Type": "application/json" }), }) expect(res.status).toBe(500) expect(await res.json()).toEqual({ ok: false, - error: "Invalid stored credential" + error: "Invalid stored credential", }) }) }) diff --git a/examples/issuer/src/routes/receipts.ts b/examples/issuer/src/routes/receipts.ts index 5b4afb6..e22766f 100644 --- a/examples/issuer/src/routes/receipts.ts +++ b/examples/issuer/src/routes/receipts.ts @@ -1,7 +1,7 @@ import { createCredential as createDatabaseCredential, getCredential, - revokeCredential + revokeCredential, } from "@/db/queries/credentials" import { buildSignedCredential } from "@/lib/credentials/build-signed-credential" import type { CredentialResponse } from "@/lib/types" @@ -10,12 +10,12 @@ import { didResolver } from "@/middleware/did-resolver" import { issuer } from "@/middleware/issuer" import { apiSuccessResponse, - type ApiResponse + type ApiResponse, } from "@repo/api-utils/api-response" import { internalServerError, notFound, - unauthorized + unauthorized, } from "@repo/api-utils/exceptions" import { signedPayloadValidator } from "@repo/api-utils/middleware/signed-payload-validator" import { @@ -23,7 +23,7 @@ import { isPaymentReceiptCredential, verifyPaymentRequestToken, type DidUri, - type PaymentRequest + type PaymentRequest, } from "agentcommercekit" import { didUriSchema } from "agentcommercekit/schemas/valibot" import { Hono, type Env } from "hono" @@ -38,11 +38,11 @@ app.use("*", database()) const bodySchema = v.object({ metadata: v.object({ - txHash: v.string() + txHash: v.string(), }), payerDid: didUriSchema, paymentRequestToken: v.string(), - paymentOptionId: v.string() + paymentOptionId: v.string(), }) /** @@ -56,7 +56,7 @@ const bodySchema = v.object({ async function verifyPayment( _paymentRequest: PaymentRequest, _txHash: string, - _walletDid: DidUri + _walletDid: DidUri, ) { return Promise.resolve(true) } @@ -101,14 +101,14 @@ app.post( const { paymentRequest } = await verifyPaymentRequestToken( paymentRequestToken, { - resolver - } + resolver, + }, ) const verified = await verifyPayment( paymentRequest, metadata.txHash, - payload.issuer + payload.issuer, ) if (!verified) { @@ -119,12 +119,12 @@ app.post( paymentRequestToken, paymentOptionId, issuer: issuer.did, - payerDid + payerDid, }) const dbCredential = await createDatabaseCredential(db, { credentialType: "PaymentReceiptCredential", - baseCredential: receipt + baseCredential: receipt, }) const result = await buildSignedCredential({ @@ -132,11 +132,11 @@ app.post( path: "/credentials/receipts", issuer, credential: dbCredential, - resolver + resolver, }) return c.json(apiSuccessResponse(result)) - } + }, ) export default app @@ -171,14 +171,14 @@ app.get("/:id", async (c): Promise> => { path: "/credentials/receipts", issuer, credential, - resolver + resolver, }) return c.json(apiSuccessResponse(result)) }) const deleteBodySchema = v.object({ - id: v.number() + id: v.number(), }) /** @@ -220,8 +220,8 @@ app.delete( const { parsed } = await verifyPaymentRequestToken( credential.credentialSubject.paymentRequestToken, { - resolver - } + resolver, + }, ) // For now, only allows the original issuer of the payment request token @@ -233,5 +233,5 @@ app.delete( await revokeCredential(db, databaseCredential) return c.json(apiSuccessResponse(null)) - } + }, ) diff --git a/examples/issuer/src/routes/status.ts b/examples/issuer/src/routes/status.ts index 86bb1e5..4256105 100644 --- a/examples/issuer/src/routes/status.ts +++ b/examples/issuer/src/routes/status.ts @@ -5,7 +5,7 @@ import { didResolver } from "@/middleware/did-resolver" import { issuer } from "@/middleware/issuer" import { apiSuccessResponse, - type ApiResponse + type ApiResponse, } from "@repo/api-utils/api-response" import { notFound } from "@repo/api-utils/exceptions" import { @@ -13,7 +13,7 @@ import { parseJwtCredential, signCredential, type BitstringStatusListCredential, - type Verifiable + type Verifiable, } from "agentcommercekit" import { Hono, type Env } from "hono" import { env } from "hono/adapter" @@ -37,7 +37,7 @@ app.use("*", didResolver()) app.get( "/:listId", async ( - c + c, ): Promise>> => { const listId = c.req.param("listId") const db = c.get("db") @@ -56,7 +56,7 @@ app.get( const credential = createStatusListCredential({ url: `${BASE_URL}/status/${listId}`, encodedList, - issuer: issuer.did + issuer: issuer.did, }) const jwt = await signCredential(credential, issuer) @@ -65,7 +65,7 @@ app.get( await parseJwtCredential(jwt, resolver) return c.json(apiSuccessResponse(verifiableCredential)) - } + }, ) export default app diff --git a/examples/issuer/src/test-helpers/did-web-with-signer.ts b/examples/issuer/src/test-helpers/did-web-with-signer.ts index fb1b0c4..cea5b6b 100644 --- a/examples/issuer/src/test-helpers/did-web-with-signer.ts +++ b/examples/issuer/src/test-helpers/did-web-with-signer.ts @@ -4,7 +4,7 @@ import { generateKeypair, type DidResolver, type DidUri, - type KeyCurve + type KeyCurve, } from "agentcommercekit" interface GenerateDidWebWithSignerOptions { @@ -21,15 +21,15 @@ export async function createDidWebWithSigner( { controller, resolver, - curve = "secp256k1" - }: GenerateDidWebWithSignerOptions = {} + curve = "secp256k1", + }: GenerateDidWebWithSignerOptions = {}, ) { const keypair = await generateKeypair(curve) const { did, didDocument } = createDidWebDocumentFromKeypair({ keypair, baseUrl, controller, - encoding: "jwk" + encoding: "jwk", }) const signer = createJwtSigner(keypair) @@ -41,7 +41,7 @@ export async function createDidWebWithSigner( keypair, signer, did, - didDocument + didDocument, } } diff --git a/examples/issuer/vitest.config.ts b/examples/issuer/vitest.config.ts index 112c6b5..0ccd529 100644 --- a/examples/issuer/vitest.config.ts +++ b/examples/issuer/vitest.config.ts @@ -5,6 +5,6 @@ export default defineConfig({ plugins: [tsconfigPaths()], test: { passWithNoTests: true, - watch: false - } + watch: false, + }, }) diff --git a/examples/local-did-host/bin/serve.ts b/examples/local-did-host/bin/serve.ts index 80a99fa..8faabb7 100644 --- a/examples/local-did-host/bin/serve.ts +++ b/examples/local-did-host/bin/serve.ts @@ -7,25 +7,25 @@ serve( { fetch: app.fetch, hostname: process.env.HOSTNAME ?? "0.0.0.0", - port: parseInt(process.env.PORT ?? "3458") + port: parseInt(process.env.PORT ?? "3458"), }, ({ address, port }) => Promise.all([ getIdentityDid(buildUrl(address, port, "/agent")), - getIdentityDid(buildUrl(address, port, "/controller")) + getIdentityDid(buildUrl(address, port, "/controller")), ]).then(([agent, controller]) => { console.log(`> server running at http://${address}:${port}`) console.table([ { name: "Agent", didUri: agent, - url: buildUrl(address, port, "/agent/.well-known/did.json") + url: buildUrl(address, port, "/agent/.well-known/did.json"), }, { name: "Controller", didUri: controller, - url: buildUrl(address, port, "/controller/.well-known/did.json") - } + url: buildUrl(address, port, "/controller/.well-known/did.json"), + }, ]) - }) + }), ) diff --git a/examples/local-did-host/eslint.config.js b/examples/local-did-host/eslint.config.js index 0979926..13fe2a3 100644 --- a/examples/local-did-host/eslint.config.js +++ b/examples/local-did-host/eslint.config.js @@ -3,5 +3,5 @@ import { config } from "@repo/eslint-config/base" export default config({ - root: import.meta.dirname + root: import.meta.dirname, }) diff --git a/examples/local-did-host/src/index.ts b/examples/local-did-host/src/index.ts index 266d045..65e1389 100644 --- a/examples/local-did-host/src/index.ts +++ b/examples/local-did-host/src/index.ts @@ -18,14 +18,14 @@ app.get( vValidator( "param", v.object({ - entity: v.picklist(["agent", "controller"]) - }) + entity: v.picklist(["agent", "controller"]), + }), ), (c) => { const { entity } = c.req.valid("param") const identities = c.get("identities") return c.json(identities[entity].didDocument) - } + }, ) /** @@ -36,8 +36,8 @@ app.post( vValidator( "param", v.object({ - entity: v.picklist(["agent", "controller"]) - }) + entity: v.picklist(["agent", "controller"]), + }), ), vValidator( "json", @@ -45,8 +45,8 @@ app.post( subject: v.string(), payload: v.record(v.string(), v.unknown()), audience: v.optional(v.string()), - expiresIn: v.optional(v.number()) - }) + expiresIn: v.optional(v.number()), + }), ), async (c) => { const { signer, did, alg } = c.get("identities").agent @@ -56,19 +56,19 @@ app.post( { ...payload, sub: subject, - aud: audience + aud: audience, }, { alg, issuer: did, expiresIn, signer, - canonicalize: true - } + canonicalize: true, + }, ) return c.json({ jwt }) - } + }, ) export default app diff --git a/examples/local-did-host/src/lib/identity.ts b/examples/local-did-host/src/lib/identity.ts index a3e6bc5..b80da9b 100644 --- a/examples/local-did-host/src/lib/identity.ts +++ b/examples/local-did-host/src/lib/identity.ts @@ -2,13 +2,13 @@ import { createDidWebDocumentFromKeypair, createDidWebUri, type DidDocument, - type DidUri + type DidUri, } from "@agentcommercekit/did" import { createJwtSigner, curveToJwtAlgorithm, type JwtAlgorithm, - type JwtSigner + type JwtSigner, } from "@agentcommercekit/jwt" import { generateKeypair, type KeyCurve } from "@agentcommercekit/keys" import { hexStringToBytes } from "@agentcommercekit/keys/encoding" @@ -35,7 +35,7 @@ export async function getIdentity({ baseUrl, privateKey, controller, - curve = "secp256k1" + curve = "secp256k1", }: GetIdentityOptions): Promise { const keypair = await generateKeypair(curve, hexStringToBytes(privateKey)) const signer = createJwtSigner(keypair) @@ -43,13 +43,13 @@ export async function getIdentity({ const { did, didDocument } = createDidWebDocumentFromKeypair({ keypair, baseUrl, - controller + controller, }) return { did, didDocument, signer, - alg: curveToJwtAlgorithm(curve) + alg: curveToJwtAlgorithm(curve), } } diff --git a/examples/local-did-host/src/middleware/identities.ts b/examples/local-did-host/src/middleware/identities.ts index 05f5312..578949a 100644 --- a/examples/local-did-host/src/middleware/identities.ts +++ b/examples/local-did-host/src/middleware/identities.ts @@ -19,19 +19,19 @@ export function identities(): MiddlewareHandler { const controller = await getIdentity({ baseUrl: buildUrl(HOSTNAME, PORT, "/controller"), privateKey: CONTROLLER_PRIVATE_KEY, - curve: "Ed25519" + curve: "Ed25519", }) const agent = await getIdentity({ baseUrl: buildUrl(HOSTNAME, PORT, "/agent"), privateKey: AGENT_PRIVATE_KEY, controller: controller.did, - curve: "secp256k1" + curve: "secp256k1", }) c.set("identities", { agent, - controller + controller, }) await next() diff --git a/examples/local-did-host/vitest.config.ts b/examples/local-did-host/vitest.config.ts index 6a8b09e..7972f77 100644 --- a/examples/local-did-host/vitest.config.ts +++ b/examples/local-did-host/vitest.config.ts @@ -3,6 +3,6 @@ import { defineConfig } from "vitest/config" export default defineConfig({ test: { passWithNoTests: true, - watch: false - } + watch: false, + }, }) diff --git a/examples/verifier/bin/serve.ts b/examples/verifier/bin/serve.ts index 0117ba2..04a78fb 100644 --- a/examples/verifier/bin/serve.ts +++ b/examples/verifier/bin/serve.ts @@ -4,9 +4,9 @@ import { serve } from "@hono/node-server" serve( { fetch: app.fetch, - port: 3457 + port: 3457, }, ({ port }) => { console.log(`> verifier running at http://localhost:${port}`) - } + }, ) diff --git a/examples/verifier/eslint.config.js b/examples/verifier/eslint.config.js index 0979926..13fe2a3 100644 --- a/examples/verifier/eslint.config.js +++ b/examples/verifier/eslint.config.js @@ -3,5 +3,5 @@ import { config } from "@repo/eslint-config/base" export default config({ - root: import.meta.dirname + root: import.meta.dirname, }) diff --git a/examples/verifier/src/middleware/verifier.ts b/examples/verifier/src/middleware/verifier.ts index c04a8b8..42623dd 100644 --- a/examples/verifier/src/middleware/verifier.ts +++ b/examples/verifier/src/middleware/verifier.ts @@ -5,7 +5,7 @@ import { hexStringToBytes, type DidDocument, type DidUri, - type JwtSigner + type JwtSigner, } from "agentcommercekit" import type { Env, MiddlewareHandler } from "hono" import { env } from "hono/adapter" @@ -40,11 +40,11 @@ export function verifier(): MiddlewareHandler { const keypair = await generateKeypair( "secp256k1", - hexStringToBytes(VERIFIER_PRIVATE_KEY) + hexStringToBytes(VERIFIER_PRIVATE_KEY), ) const { did, didDocument } = createDidWebDocumentFromKeypair({ keypair, - baseUrl: BASE_URL + baseUrl: BASE_URL, }) const signer = createJwtSigner(keypair) @@ -53,7 +53,7 @@ export function verifier(): MiddlewareHandler { did, didDocument, signer, - alg: "ES256K" + alg: "ES256K", }) await next() diff --git a/examples/verifier/src/routes/healthcheck.ts b/examples/verifier/src/routes/healthcheck.ts index ec57399..d552bca 100644 --- a/examples/verifier/src/routes/healthcheck.ts +++ b/examples/verifier/src/routes/healthcheck.ts @@ -1,6 +1,6 @@ import { apiSuccessResponse, - type ApiResponse + type ApiResponse, } from "@repo/api-utils/api-response" import { Hono, type Env } from "hono" diff --git a/examples/verifier/src/routes/verify.ts b/examples/verifier/src/routes/verify.ts index 775db5b..5e8043e 100644 --- a/examples/verifier/src/routes/verify.ts +++ b/examples/verifier/src/routes/verify.ts @@ -1,7 +1,7 @@ import { vValidator } from "@hono/valibot-validator" import { apiSuccessResponse, - type ApiResponse + type ApiResponse, } from "@repo/api-utils/api-response" import { createDidWebUri, @@ -10,11 +10,11 @@ import { getReceiptClaimVerifier, isJwtString, parseJwtCredential, - verifyParsedCredential + verifyParsedCredential, } from "agentcommercekit" import { credentialSchema, - jwtStringSchema + jwtStringSchema, } from "agentcommercekit/schemas/valibot" import { Hono, type Env } from "hono" import { ValiError } from "valibot" @@ -24,11 +24,11 @@ const app = new Hono() // Treat the local `issuer` API as trusted. const trustedIssuers: string[] = [ - createDidWebUri(new URL("http://localhost:3456")) + createDidWebUri(new URL("http://localhost:3456")), ] const bodySchema = v.object({ - credential: v.union([credentialSchema, jwtStringSchema]) + credential: v.union([credentialSchema, jwtStringSchema]), }) app.post( @@ -49,11 +49,11 @@ app.post( await verifyParsedCredential(credential, { trustedIssuers, resolver, - verifiers: [getControllerClaimVerifier(), getReceiptClaimVerifier()] + verifiers: [getControllerClaimVerifier(), getReceiptClaimVerifier()], }) return c.json(apiSuccessResponse(null)) - } + }, ) export default app diff --git a/examples/verifier/vitest.config.ts b/examples/verifier/vitest.config.ts index 6a8b09e..7972f77 100644 --- a/examples/verifier/vitest.config.ts +++ b/examples/verifier/vitest.config.ts @@ -3,6 +3,6 @@ import { defineConfig } from "vitest/config" export default defineConfig({ test: { passWithNoTests: true, - watch: false - } + watch: false, + }, }) diff --git a/packages/ack-id/README.md b/packages/ack-id/README.md index 09c40b9..de6b87b 100644 --- a/packages/ack-id/README.md +++ b/packages/ack-id/README.md @@ -32,7 +32,7 @@ const credential = createControllerCredential({ controller: controllerDid, // Optional id and issuer can be provided id: "urn:uuid:123e4567-e89b-12d3-a456-426614174000", - issuer: controllerDid // Defaults to controller if not provided + issuer: controllerDid, // Defaults to controller if not provided }) ``` @@ -52,7 +52,7 @@ try { await verifyParsedCredential(controllerCredential, { resolver, verifiers: [verifier], - trustedIssuers: [controllerDid] // Optional: list of trusted issuers + trustedIssuers: [controllerDid], // Optional: list of trusted issuers }) console.log("Credential verified successfully") } catch (error) { @@ -65,7 +65,7 @@ try { ```ts import { isControllerClaim, - isControllerCredential + isControllerCredential, } from "@agentcommercekit/ack-id" // Check if a credential is specifically a controller credential @@ -116,16 +116,16 @@ This package includes utilities for building secure, mutually authenticated agen ```ts import { createA2AHandshakeMessage, - generateRandomNonce + generateRandomNonce, } from "@agentcommercekit/ack-id/a2a" const handshake = await createA2AHandshakeMessage( "user", // role "did:web:bank.example.com", // recipient DID { - did: "did:web:customer.example.com" // sender DID + did: "did:web:customer.example.com", // sender DID // ... - } + }, ) // Send handshake message to the other agent @@ -162,7 +162,7 @@ t const response = await createA2AHandshakeMessage( ```ts import { createSignedA2AMessage, - verifyA2ASignedMessage + verifyA2ASignedMessage, } from "@agentcommercekit/ack-id/a2a" // To send a signed message: @@ -170,21 +170,21 @@ const signed = await createSignedA2AMessage( { role: "user", parts: [ - { type: "text", text: "Please check the balance for account #12345" } - ] + { type: "text", text: "Please check the balance for account #12345" }, + ], // metadata will be filled in }, { - did: "did:web:customer.example.com" + did: "did:web:customer.example.com", // ... - } + }, ) // Send signed.message // To verify a signed message: const verified = await verifyA2ASignedMessage(signed.message, { did: "did:web:bank.example.com", - counterparty: "did:web:customer.example.com" + counterparty: "did:web:customer.example.com", }) // verified.payload.message matches the message content ``` diff --git a/packages/ack-id/eslint.config.js b/packages/ack-id/eslint.config.js index 0979926..13fe2a3 100644 --- a/packages/ack-id/eslint.config.js +++ b/packages/ack-id/eslint.config.js @@ -3,5 +3,5 @@ import { config } from "@repo/eslint-config/base" export default config({ - root: import.meta.dirname + root: import.meta.dirname, }) diff --git a/packages/ack-id/src/a2a/schemas/valibot.ts b/packages/ack-id/src/a2a/schemas/valibot.ts index 86d71cb..dc974e3 100644 --- a/packages/ack-id/src/a2a/schemas/valibot.ts +++ b/packages/ack-id/src/a2a/schemas/valibot.ts @@ -6,21 +6,21 @@ const metadataSchema = v.nullable(v.record(v.string(), v.unknown())) // Base schema for common part properties const partBaseSchema = v.object({ - metadata: v.optional(metadataSchema) + metadata: v.optional(metadataSchema), }) // Text part schema export const textPartSchema = v.object({ ...partBaseSchema.entries, kind: v.literal("text"), - text: v.string() + text: v.string(), }) // Data part schema export const dataPartSchema = v.object({ ...partBaseSchema.entries, kind: v.literal("data"), - data: v.union([v.record(v.string(), v.unknown()), v.array(v.unknown())]) + data: v.union([v.record(v.string(), v.unknown()), v.array(v.unknown())]), }) // File content schema @@ -28,27 +28,27 @@ export const fileWithBytesSchema = v.object({ name: v.optional(v.nullable(v.string())), mimeType: v.optional(v.nullable(v.string())), bytes: v.optional(v.nullable(v.string())), - uri: v.optional(v.nullable(v.string())) + uri: v.optional(v.nullable(v.string())), }) export const fileWithUriSchema = v.object({ name: v.optional(v.nullable(v.string())), mimeType: v.optional(v.nullable(v.string())), - uri: v.optional(v.nullable(v.string())) + uri: v.optional(v.nullable(v.string())), }) // File part schema export const filePartSchema = v.object({ ...partBaseSchema.entries, kind: v.literal("file"), - file: v.union([fileWithBytesSchema, fileWithUriSchema]) + file: v.union([fileWithBytesSchema, fileWithUriSchema]), }) // Union of all part types using variant syntax export const partSchema = v.variant("kind", [ textPartSchema, dataPartSchema, - filePartSchema + filePartSchema, ]) // Message schema @@ -61,5 +61,5 @@ export const messageSchema = v.looseObject({ taskId: v.optional(v.string()), contextId: v.optional(v.string()), extensions: v.optional(v.array(v.string())), - referenceTaskIds: v.optional(v.array(v.string())) + referenceTaskIds: v.optional(v.array(v.string())), }) diff --git a/packages/ack-id/src/a2a/schemas/zod/v3.ts b/packages/ack-id/src/a2a/schemas/zod/v3.ts index 2b3a8c5..6c72eb7 100644 --- a/packages/ack-id/src/a2a/schemas/zod/v3.ts +++ b/packages/ack-id/src/a2a/schemas/zod/v3.ts @@ -6,19 +6,19 @@ const metadataSchema = z.record(z.string(), z.unknown()).nullable() // Base schema for common part properties const partBaseSchema = z.object({ - metadata: metadataSchema.optional() + metadata: metadataSchema.optional(), }) // Text part schema export const textPartSchema = partBaseSchema.extend({ type: z.literal("text"), - text: z.string() + text: z.string(), }) // Data part schema export const dataPartSchema = partBaseSchema.extend({ type: z.literal("data"), - data: z.union([z.record(z.string(), z.unknown()), z.array(z.unknown())]) + data: z.union([z.record(z.string(), z.unknown()), z.array(z.unknown())]), }) // File content schema @@ -26,20 +26,20 @@ export const fileContentSchema = z.object({ name: z.string().nullable().optional(), mimeType: z.string().nullable().optional(), bytes: z.string().nullable().optional(), - uri: z.string().nullable().optional() + uri: z.string().nullable().optional(), }) // File part schema export const filePartSchema = partBaseSchema.extend({ type: z.literal("file"), - file: fileContentSchema + file: fileContentSchema, }) // Union of all part types using discriminated union export const partSchema = z.discriminatedUnion("type", [ textPartSchema, dataPartSchema, - filePartSchema + filePartSchema, ]) // Message schema @@ -47,6 +47,6 @@ export const messageSchema = z .object({ role: roleSchema, parts: z.array(partSchema), - metadata: metadataSchema.optional() + metadata: metadataSchema.optional(), }) .passthrough() diff --git a/packages/ack-id/src/a2a/schemas/zod/v4.ts b/packages/ack-id/src/a2a/schemas/zod/v4.ts index c549d52..a6e9425 100644 --- a/packages/ack-id/src/a2a/schemas/zod/v4.ts +++ b/packages/ack-id/src/a2a/schemas/zod/v4.ts @@ -6,19 +6,19 @@ const metadataSchema = z.record(z.string(), z.unknown()).nullable() // Base schema for common part properties const partBaseSchema = z.object({ - metadata: metadataSchema.optional() + metadata: metadataSchema.optional(), }) // Text part schema export const textPartSchema = partBaseSchema.extend({ type: z.literal("text"), - text: z.string() + text: z.string(), }) // Data part schema export const dataPartSchema = partBaseSchema.extend({ type: z.literal("data"), - data: z.union([z.record(z.string(), z.unknown()), z.array(z.unknown())]) + data: z.union([z.record(z.string(), z.unknown()), z.array(z.unknown())]), }) // File content schema @@ -26,25 +26,25 @@ export const fileContentSchema = z.object({ name: z.string().nullable().optional(), mimeType: z.string().nullable().optional(), bytes: z.string().nullable().optional(), - uri: z.string().nullable().optional() + uri: z.string().nullable().optional(), }) // File part schema export const filePartSchema = partBaseSchema.extend({ type: z.literal("file"), - file: fileContentSchema + file: fileContentSchema, }) // Union of all part types using discriminated union export const partSchema = z.discriminatedUnion("type", [ textPartSchema, dataPartSchema, - filePartSchema + filePartSchema, ]) // Message schema export const messageSchema = z.looseObject({ role: roleSchema, parts: z.array(partSchema), - metadata: metadataSchema.optional() + metadata: metadataSchema.optional(), }) diff --git a/packages/ack-id/src/a2a/service-endpoints.ts b/packages/ack-id/src/a2a/service-endpoints.ts index bbcc18e..4bd5b72 100644 --- a/packages/ack-id/src/a2a/service-endpoints.ts +++ b/packages/ack-id/src/a2a/service-endpoints.ts @@ -4,11 +4,11 @@ export type ServiceTypeAgentCard = typeof serviceTypeAgentCard export function createAgentCardServiceEndpoint( did: string, - agentCardUrl: string + agentCardUrl: string, ) { return { id: `${did}#agent-card`, type: "AgentCard", - serviceEndpoint: agentCardUrl + serviceEndpoint: agentCardUrl, } } diff --git a/packages/ack-id/src/a2a/sign-message.ts b/packages/ack-id/src/a2a/sign-message.ts index 2080564..b39895d 100644 --- a/packages/ack-id/src/a2a/sign-message.ts +++ b/packages/ack-id/src/a2a/sign-message.ts @@ -5,7 +5,7 @@ import { type JwtAlgorithm, type JwtPayload, type JwtSigner, - type JwtString + type JwtString, } from "@agentcommercekit/jwt" import type { W3CCredential } from "@agentcommercekit/vc" import { v4 } from "uuid" @@ -30,14 +30,14 @@ type SignedA2AMessage = { */ export async function createSignedA2AMessage( { metadata, ...message }: Message, - options: SignMessageOptions + options: SignMessageOptions, ): Promise { // Sign everything in the message, excluding the metadata const { jwt: sig, jti } = await createMessageSignature({ message }, options) const metadataWithSig = { ...metadata, - sig + sig, } return { @@ -45,8 +45,8 @@ export async function createSignedA2AMessage( jti, message: { ...message, - metadata: metadataWithSig - } + metadata: metadataWithSig, + }, } } @@ -70,22 +70,22 @@ export function createA2AHandshakePayload(params: A2AHandshakeParams) { const nonces = params.requestNonce ? { nonce: params.requestNonce, - replyNonce: nonce + replyNonce: nonce, } : { - nonce: nonce + nonce: nonce, } return { aud: params.recipient, ...nonces, - vc: params.vc + vc: params.vc, } } export function createA2AHandshakeMessageFromJwt( role: "agent" | "user", - jwt: string + jwt: string, ): Message { return { kind: "message" as const, @@ -95,10 +95,10 @@ export function createA2AHandshakeMessageFromJwt( { kind: "data" as const, data: { - jwt - } - } - ] + jwt, + }, + }, + ], } } @@ -110,7 +110,7 @@ export function createA2AHandshakeMessageFromJwt( export async function createA2AHandshakeMessage( role: "agent" | "user", params: A2AHandshakeParams, - signOptions: SignMessageOptions + signOptions: SignMessageOptions, ) { const payload = createA2AHandshakePayload(params) @@ -122,28 +122,28 @@ export async function createA2AHandshakeMessage( sig: jwt, jti, nonce: payload.nonce, - message + message, } } async function createMessageSignature( payload: Partial, - { did, jwtSigner, alg = "ES256K", expiresIn = 5 * 60 }: SignMessageOptions + { did, jwtSigner, alg = "ES256K", expiresIn = 5 * 60 }: SignMessageOptions, ): Promise<{ jwt: JwtString; jti: string }> { const jti = generateRandomJti() const jwt = await createJwt( { jti, - ...payload + ...payload, }, { expiresIn, signer: jwtSigner, - issuer: did + issuer: did, }, { - alg - } + alg, + }, ) return { jwt, jti } diff --git a/packages/ack-id/src/a2a/verify.ts b/packages/ack-id/src/a2a/verify.ts index 03e688e..abe2bfe 100644 --- a/packages/ack-id/src/a2a/verify.ts +++ b/packages/ack-id/src/a2a/verify.ts @@ -2,7 +2,7 @@ import type { Message } from "@a2a-js/sdk" import { getDidResolver, type DidResolver, - type DidUri + type DidUri, } from "@agentcommercekit/did" import { didUriSchema } from "@agentcommercekit/did/schemas/valibot" import { verifyJwt, type JwtVerified } from "@agentcommercekit/jwt" @@ -14,26 +14,26 @@ import { dataPartSchema, messageSchema } from "./schemas/valibot" const jwtDataPartSchema = v.object({ ...dataPartSchema.entries, data: v.object({ - jwt: v.string() - }) + jwt: v.string(), + }), }) const messageWithJwtSchema = v.looseObject({ ...messageSchema.entries, - parts: v.tuple([jwtDataPartSchema]) + parts: v.tuple([jwtDataPartSchema]), }) const messageWithSignatureSchema = v.looseObject({ ...messageSchema.entries, metadata: v.looseObject({ - sig: v.string() - }) + sig: v.string(), + }), }) const handshakePayloadSchema = v.object({ iss: didUriSchema, nonce: v.string(), - vc: credentialSchema + vc: credentialSchema, }) type VerifyA2AHandshakeOptions = { @@ -44,7 +44,7 @@ type VerifyA2AHandshakeOptions = { export async function verifyA2AHandshakeMessage( message: Message | null, - { did, counterparty, resolver = getDidResolver() }: VerifyA2AHandshakeOptions + { did, counterparty, resolver = getDidResolver() }: VerifyA2AHandshakeOptions, ): Promise> { // Ensure the message is a valid A2A handshake message const parsedMessage = v.parse(messageWithJwtSchema, message) @@ -53,7 +53,7 @@ export async function verifyA2AHandshakeMessage( const verified = await verifyJwt(jwt, { audience: did, issuer: counterparty, - resolver + resolver, }) return v.parse(handshakePayloadSchema, verified.payload) @@ -61,7 +61,7 @@ export async function verifyA2AHandshakeMessage( export async function verifyA2ASignedMessage( message: Message, - { did, counterparty, resolver = getDidResolver() }: VerifyA2AHandshakeOptions + { did, counterparty, resolver = getDidResolver() }: VerifyA2AHandshakeOptions, ): Promise { // Ensure the message is a valid A2A signed message // We need to remove the auto-generated contextId from the message @@ -77,7 +77,7 @@ export async function verifyA2ASignedMessage( const verified = await verifyJwt(metadata.sig, { audience: did, issuer: counterparty, - resolver + resolver, }) const stringifiedMessage = stringify(parsedMessage) diff --git a/packages/ack-id/src/controller-claim-verifier.test.ts b/packages/ack-id/src/controller-claim-verifier.test.ts index 1654cbd..37b8d2f 100644 --- a/packages/ack-id/src/controller-claim-verifier.test.ts +++ b/packages/ack-id/src/controller-claim-verifier.test.ts @@ -2,12 +2,12 @@ import { createDidDocumentFromKeypair, createDidWebUri, getDidResolver, - type Resolvable + type Resolvable, } from "@agentcommercekit/did" import { generateKeypair } from "@agentcommercekit/keys" import { InvalidControllerClaimError, - InvalidCredentialSubjectError + InvalidCredentialSubjectError, } from "@agentcommercekit/vc" import { beforeEach, describe, expect, it } from "vitest" import { getControllerClaimVerifier } from "./controller-claim-verifier" @@ -22,8 +22,8 @@ async function setup() { controllerDid, createDidDocumentFromKeypair({ did: controllerDid, - keypair: controllerKeypair - }) + keypair: controllerKeypair, + }), ) // Generate keypair for the agent @@ -34,8 +34,8 @@ async function setup() { createDidDocumentFromKeypair({ did: agentDid, keypair: agentKeypair, - controller: controllerDid - }) + controller: controllerDid, + }), ) return { resolver, controllerDid, agentDid } @@ -69,11 +69,11 @@ describe("getControllerClaimVerifier", () => { const invalidSubject = { id: agentDid, - someOtherField: "value" + someOtherField: "value", } await expect(verifier.verify(invalidSubject, resolver)).rejects.toThrow( - InvalidCredentialSubjectError + InvalidCredentialSubjectError, ) }) @@ -82,7 +82,7 @@ describe("getControllerClaimVerifier", () => { const credential = { id: "did:example:non-existent", - controller: "did:example:controller" + controller: "did:example:controller", } await expect(verifier.verify(credential, resolver)).rejects.toThrow() @@ -93,11 +93,11 @@ describe("getControllerClaimVerifier", () => { const credential = { id: agentDid, - controller: "did:example:wrong-controller" + controller: "did:example:wrong-controller", } await expect(verifier.verify(credential, resolver)).rejects.toThrow( - InvalidControllerClaimError + InvalidControllerClaimError, ) }) @@ -106,7 +106,7 @@ describe("getControllerClaimVerifier", () => { const credential = { id: agentDid, - controller: controllerDid + controller: controllerDid, } await expect(verifier.verify(credential, resolver)).resolves.not.toThrow() diff --git a/packages/ack-id/src/controller-claim-verifier.ts b/packages/ack-id/src/controller-claim-verifier.ts index bc79089..f3f601e 100644 --- a/packages/ack-id/src/controller-claim-verifier.ts +++ b/packages/ack-id/src/controller-claim-verifier.ts @@ -1,6 +1,6 @@ import { resolveDidWithController, - type Resolvable + type Resolvable, } from "@agentcommercekit/did" import { InvalidControllerClaimError, @@ -8,7 +8,7 @@ import { isCredential, type ClaimVerifier, type CredentialSubject, - type W3CCredential + type W3CCredential, } from "@agentcommercekit/vc" import * as v from "valibot" import { controllerClaimSchema } from "./schemas/valibot" @@ -18,7 +18,7 @@ export interface ControllerCredential extends W3CCredential { } function isControllerClaim( - credentialSubject: CredentialSubject + credentialSubject: CredentialSubject, ): credentialSubject is v.InferOutput { return v.is(controllerClaimSchema, credentialSubject) } @@ -30,7 +30,7 @@ function isControllerClaim( * @returns `true` if the credential is a controller credential, `false` otherwise */ export function isControllerCredential( - credential: unknown + credential: unknown, ): credential is ControllerCredential { if (!isCredential(credential)) { return false @@ -41,7 +41,7 @@ export function isControllerCredential( async function verifyAgentControllerClaim( credentialSubject: CredentialSubject, - resolver: Resolvable + resolver: Resolvable, ): Promise { if (!isControllerClaim(credentialSubject)) { throw new InvalidCredentialSubjectError() @@ -50,7 +50,7 @@ async function verifyAgentControllerClaim( // Resolve the agent's DID document and its controller's DID document const { controller } = await resolveDidWithController( credentialSubject.id, - resolver + resolver, ) if (controller.did !== credentialSubject.controller) { @@ -66,6 +66,6 @@ async function verifyAgentControllerClaim( export function getControllerClaimVerifier(): ClaimVerifier { return { accepts: (type: string[]) => type.includes("ControllerCredential"), - verify: verifyAgentControllerClaim + verify: verifyAgentControllerClaim, } } diff --git a/packages/ack-id/src/controller-credential.test.ts b/packages/ack-id/src/controller-credential.test.ts index 359dcf2..5947436 100644 --- a/packages/ack-id/src/controller-credential.test.ts +++ b/packages/ack-id/src/controller-credential.test.ts @@ -17,7 +17,7 @@ describe("createControllerCredential", () => { const credential = createControllerCredential({ subject: subjectDid, controller: controllerDid, - issuer: issuerDid + issuer: issuerDid, }) // Check basic structure @@ -28,9 +28,9 @@ describe("createControllerCredential", () => { issuer: { id: issuerDid }, credentialSubject: { id: subjectDid, - controller: controllerDid + controller: controllerDid, }, - issuanceDate: new Date().toISOString() + issuanceDate: new Date().toISOString(), }) // Verify issuanceDate is a valid ISO date string @@ -43,7 +43,7 @@ describe("createControllerCredential", () => { const credential = createControllerCredential({ subject: subjectDid, - controller: controllerDid + controller: controllerDid, }) expect(credential.issuer).toEqual({ id: controllerDid }) diff --git a/packages/ack-id/src/controller-credential.ts b/packages/ack-id/src/controller-credential.ts index 09616ce..80d3b08 100644 --- a/packages/ack-id/src/controller-credential.ts +++ b/packages/ack-id/src/controller-credential.ts @@ -31,7 +31,7 @@ export function createControllerCredential({ id, subject, controller, - issuer + issuer, }: CreateControllerCredentialParams): W3CCredential { return createCredential({ id, @@ -39,7 +39,7 @@ export function createControllerCredential({ issuer: issuer ?? controller, subject, attestation: { - controller: controller - } + controller: controller, + }, }) } diff --git a/packages/ack-id/src/schemas/valibot.ts b/packages/ack-id/src/schemas/valibot.ts index dd75fac..2f57984 100644 --- a/packages/ack-id/src/schemas/valibot.ts +++ b/packages/ack-id/src/schemas/valibot.ts @@ -2,5 +2,5 @@ import * as v from "valibot" export const controllerClaimSchema = v.object({ id: v.string(), - controller: v.string() + controller: v.string(), }) diff --git a/packages/ack-id/src/schemas/zod/v3.ts b/packages/ack-id/src/schemas/zod/v3.ts index e155fa9..1aab7e8 100644 --- a/packages/ack-id/src/schemas/zod/v3.ts +++ b/packages/ack-id/src/schemas/zod/v3.ts @@ -2,5 +2,5 @@ import { z } from "zod/v3" export const controllerClaimSchema = z.object({ id: z.string(), - controller: z.string() + controller: z.string(), }) diff --git a/packages/ack-id/src/schemas/zod/v4.ts b/packages/ack-id/src/schemas/zod/v4.ts index 8114e37..389ee73 100644 --- a/packages/ack-id/src/schemas/zod/v4.ts +++ b/packages/ack-id/src/schemas/zod/v4.ts @@ -2,5 +2,5 @@ import * as z from "zod/v4" export const controllerClaimSchema = z.object({ id: z.string(), - controller: z.string() + controller: z.string(), }) diff --git a/packages/ack-id/tsdown.config.ts b/packages/ack-id/tsdown.config.ts index 655cc5c..a78f602 100644 --- a/packages/ack-id/tsdown.config.ts +++ b/packages/ack-id/tsdown.config.ts @@ -9,8 +9,8 @@ export default defineConfig({ "src/a2a/index.ts", "src/a2a/schemas/zod/v3.ts", "src/a2a/schemas/zod/v4.ts", - "src/a2a/schemas/valibot.ts" + "src/a2a/schemas/valibot.ts", ], dts: true, - silent: true + silent: true, }) diff --git a/packages/ack-id/vitest.config.ts b/packages/ack-id/vitest.config.ts index 6a8b09e..7972f77 100644 --- a/packages/ack-id/vitest.config.ts +++ b/packages/ack-id/vitest.config.ts @@ -3,6 +3,6 @@ import { defineConfig } from "vitest/config" export default defineConfig({ test: { passWithNoTests: true, - watch: false - } + watch: false, + }, }) diff --git a/packages/ack-pay/README.md b/packages/ack-pay/README.md index 0cb40a2..d20f6c1 100644 --- a/packages/ack-pay/README.md +++ b/packages/ack-pay/README.md @@ -65,7 +65,7 @@ const receipt = createPaymentReceipt({ paymentRequestToken: "", paymentOptionId: "", issuer: "did:web:receipt-service.example.com", - payerDid: "did:web:customer.example.com" + payerDid: "did:web:customer.example.com", }) ``` @@ -77,7 +77,7 @@ import { getDidResolver } from "@agentcommercekit/did" const verified = await verifyPaymentReceipt(receipt, { resolver: getDidResolver(), - trustedIssuers: ["did:web:merchant.example.com"] + trustedIssuers: ["did:web:merchant.example.com"], }) ``` diff --git a/packages/ack-pay/eslint.config.js b/packages/ack-pay/eslint.config.js index 0979926..13fe2a3 100644 --- a/packages/ack-pay/eslint.config.js +++ b/packages/ack-pay/eslint.config.js @@ -3,5 +3,5 @@ import { config } from "@repo/eslint-config/base" export default config({ - root: import.meta.dirname + root: import.meta.dirname, }) diff --git a/packages/ack-pay/src/create-payment-receipt.test.ts b/packages/ack-pay/src/create-payment-receipt.test.ts index 782ee58..5989c7e 100644 --- a/packages/ack-pay/src/create-payment-receipt.test.ts +++ b/packages/ack-pay/src/create-payment-receipt.test.ts @@ -26,9 +26,9 @@ describe("createPaymentReceipt", () => { amount: 100, decimals: 2, currency: "USD", - recipient: "did:example:recipient" - } - ] + recipient: "did:example:recipient", + }, + ], } const paymentRequiredBody = await createSignedPaymentRequest( @@ -36,8 +36,8 @@ describe("createPaymentReceipt", () => { { issuer: createDidKeyUri(keypair), signer: createJwtSigner(keypair), - algorithm: curveToJwtAlgorithm(keypair.curve) - } + algorithm: curveToJwtAlgorithm(keypair.curve), + }, ) paymentRequestToken = paymentRequiredBody.paymentRequestToken @@ -48,19 +48,19 @@ describe("createPaymentReceipt", () => { paymentRequestToken, paymentOptionId: "test-payment-option-id", issuer: "did:example:issuer", - payerDid: "did:example:payer" + payerDid: "did:example:payer", }) expect(receipt).toMatchObject({ type: ["VerifiableCredential", "PaymentReceiptCredential"], issuer: { - id: "did:example:issuer" + id: "did:example:issuer", }, issuanceDate: date.toISOString(), credentialSubject: { id: "did:example:payer", - paymentRequestToken - } + paymentRequestToken, + }, }) }) @@ -71,23 +71,23 @@ describe("createPaymentReceipt", () => { issuer: "did:example:issuer", payerDid: "did:example:payer", metadata: { - test: "test" - } + test: "test", + }, }) expect(receipt).toMatchObject({ type: ["VerifiableCredential", "PaymentReceiptCredential"], issuer: { - id: "did:example:issuer" + id: "did:example:issuer", }, issuanceDate: date.toISOString(), credentialSubject: { id: "did:example:payer", paymentRequestToken, metadata: { - test: "test" - } - } + test: "test", + }, + }, }) }) @@ -98,11 +98,11 @@ describe("createPaymentReceipt", () => { paymentOptionId: "test-payment-option-id", issuer: "did:example:issuer", payerDid: "did:example:payer", - expirationDate + expirationDate, }) expect(receipt).toMatchObject({ - expirationDate: expirationDate.toISOString() + expirationDate: expirationDate.toISOString(), }) }) }) diff --git a/packages/ack-pay/src/create-payment-receipt.ts b/packages/ack-pay/src/create-payment-receipt.ts index 82e8ec8..cc60d31 100644 --- a/packages/ack-pay/src/create-payment-receipt.ts +++ b/packages/ack-pay/src/create-payment-receipt.ts @@ -24,11 +24,11 @@ export function createPaymentReceipt({ issuer, payerDid, expirationDate, - metadata + metadata, }: CreatePaymentReceiptParams): W3CCredential { const attestation: Record = { paymentRequestToken, - paymentOptionId + paymentOptionId, } if (metadata) { @@ -40,6 +40,6 @@ export function createPaymentReceipt({ issuer: issuer, subject: payerDid, expirationDate, - attestation + attestation, }) } diff --git a/packages/ack-pay/src/create-payment-request-token.test.ts b/packages/ack-pay/src/create-payment-request-token.test.ts index bfe4b68..7707cb0 100644 --- a/packages/ack-pay/src/create-payment-request-token.test.ts +++ b/packages/ack-pay/src/create-payment-request-token.test.ts @@ -2,14 +2,14 @@ import { createDidDocumentFromKeypair, createDidKeyUri, getDidResolver, - type DidUri + type DidUri, } from "@agentcommercekit/did" import { createJwtSigner, curveToJwtAlgorithm, isJwtString, verifyJwt, - type JwtSigner + type JwtSigner, } from "@agentcommercekit/jwt" import { generateKeypair, type Keypair } from "@agentcommercekit/keys" import * as v from "valibot" @@ -31,9 +31,9 @@ describe("createPaymentRequestToken()", () => { amount: 10, decimals: 2, currency: "USD", - recipient: "sol:123" - } - ] + recipient: "sol:123", + }, + ], } const paymentRequest = v.parse(paymentRequestSchema, paymentRequestInit) @@ -49,8 +49,8 @@ describe("createPaymentRequestToken()", () => { { issuer: issuerDid, signer, - algorithm: curveToJwtAlgorithm(keypair.curve) - } + algorithm: curveToJwtAlgorithm(keypair.curve), + }, ) expect(isJwtString(paymentRequestToken)).toBe(true) @@ -62,8 +62,8 @@ describe("createPaymentRequestToken()", () => { { issuer: issuerDid, signer, - algorithm: curveToJwtAlgorithm(keypair.curve) - } + algorithm: curveToJwtAlgorithm(keypair.curve), + }, ) const resolver = getDidResolver() @@ -71,14 +71,14 @@ describe("createPaymentRequestToken()", () => { issuerDid, createDidDocumentFromKeypair({ did: issuerDid, - keypair - }) + keypair, + }), ) // Verify the JWT is valid (disable audience validation) // TODO: Use parsePaymentRequestToken when it returns the issuer const result = await verifyJwt(paymentRequestToken, { - resolver + resolver, }) expect(result.payload.iss).toBe(issuerDid) diff --git a/packages/ack-pay/src/create-payment-request-token.ts b/packages/ack-pay/src/create-payment-request-token.ts index f6d99f3..0084178 100644 --- a/packages/ack-pay/src/create-payment-request-token.ts +++ b/packages/ack-pay/src/create-payment-request-token.ts @@ -3,7 +3,7 @@ import { createJwt, type JwtAlgorithm, type JwtSigner, - type JwtString + type JwtString, } from "@agentcommercekit/jwt" import type { PaymentRequest } from "./payment-request" @@ -31,16 +31,16 @@ export interface PaymentRequestTokenOptions { */ export async function createPaymentRequestToken( paymentRequest: PaymentRequest, - { issuer, signer, algorithm }: PaymentRequestTokenOptions + { issuer, signer, algorithm }: PaymentRequestTokenOptions, ): Promise { return createJwt( { ...paymentRequest, sub: paymentRequest.id }, { issuer, - signer + signer, }, { - alg: algorithm - } + alg: algorithm, + }, ) } diff --git a/packages/ack-pay/src/create-signed-payment-request.test.ts b/packages/ack-pay/src/create-signed-payment-request.test.ts index 3081775..b5dcbeb 100644 --- a/packages/ack-pay/src/create-signed-payment-request.test.ts +++ b/packages/ack-pay/src/create-signed-payment-request.test.ts @@ -2,13 +2,13 @@ import { createDidDocumentFromKeypair, createDidKeyUri, getDidResolver, - type DidUri + type DidUri, } from "@agentcommercekit/did" import { createJwtSigner, curveToJwtAlgorithm, isJwtString, - type JwtSigner + type JwtSigner, } from "@agentcommercekit/jwt" import { generateKeypair, type Keypair } from "@agentcommercekit/keys" import { beforeEach, describe, expect, it } from "vitest" @@ -29,9 +29,9 @@ describe("createSignedPaymentRequest()", () => { amount: 10, decimals: 2, currency: "USD", - recipient: "sol:123" - } - ] + recipient: "sol:123", + }, + ], } beforeEach(async () => { @@ -44,7 +44,7 @@ describe("createSignedPaymentRequest()", () => { const result = await createSignedPaymentRequest(paymentRequest, { issuer: issuerDid, signer, - algorithm: curveToJwtAlgorithm(keypair.curve) + algorithm: curveToJwtAlgorithm(keypair.curve), }) expect(result.paymentRequest).toEqual({ @@ -55,9 +55,9 @@ describe("createSignedPaymentRequest()", () => { amount: 10, decimals: 2, currency: "USD", - recipient: "sol:123" - } - ] + recipient: "sol:123", + }, + ], }) expect(isJwtString(result.paymentRequestToken)).toBe(true) @@ -67,7 +67,7 @@ describe("createSignedPaymentRequest()", () => { const body = await createSignedPaymentRequest(paymentRequest, { issuer: issuerDid, signer, - algorithm: curveToJwtAlgorithm(keypair.curve) + algorithm: curveToJwtAlgorithm(keypair.curve), }) const resolver = getDidResolver() @@ -75,12 +75,12 @@ describe("createSignedPaymentRequest()", () => { issuerDid, createDidDocumentFromKeypair({ did: issuerDid, - keypair - }) + keypair, + }), ) const result = await verifyPaymentRequestToken(body.paymentRequestToken, { - resolver + resolver, }) expect(result.parsed.payload.iss).toBe(issuerDid) @@ -98,8 +98,8 @@ describe("createSignedPaymentRequest()", () => { { issuer: issuerDid, signer, - algorithm: curveToJwtAlgorithm(keypair.curve) - } + algorithm: curveToJwtAlgorithm(keypair.curve), + }, ) expect(result.paymentRequest.expiresAt).toBe("2024-12-31T23:59:59.000Z") diff --git a/packages/ack-pay/src/create-signed-payment-request.ts b/packages/ack-pay/src/create-signed-payment-request.ts index 2fab24a..d12275a 100644 --- a/packages/ack-pay/src/create-signed-payment-request.ts +++ b/packages/ack-pay/src/create-signed-payment-request.ts @@ -2,7 +2,7 @@ import type { JwtString } from "@agentcommercekit/jwt" import * as v from "valibot" import { createPaymentRequestToken, - type PaymentRequestTokenOptions + type PaymentRequestTokenOptions, } from "./create-payment-request-token" import type { PaymentRequest, PaymentRequestInit } from "./payment-request" import { paymentRequestSchema } from "./schemas/valibot" @@ -16,7 +16,7 @@ import { paymentRequestSchema } from "./schemas/valibot" */ export async function createSignedPaymentRequest( paymentRequestInit: PaymentRequestInit, - { issuer, signer, algorithm }: PaymentRequestTokenOptions + { issuer, signer, algorithm }: PaymentRequestTokenOptions, ): Promise<{ paymentRequest: PaymentRequest paymentRequestToken: JwtString @@ -25,12 +25,12 @@ export async function createSignedPaymentRequest( const paymentRequestToken = await createPaymentRequestToken(paymentRequest, { issuer, signer, - algorithm + algorithm, }) return { paymentRequest, - paymentRequestToken + paymentRequestToken, } } @@ -46,6 +46,6 @@ export async function createPaymentRequestBody( const result = await createSignedPaymentRequest(...args) return { paymentRequest: result.paymentRequest, - paymentToken: result.paymentRequestToken + paymentToken: result.paymentRequestToken, } } diff --git a/packages/ack-pay/src/payment-request.test.ts b/packages/ack-pay/src/payment-request.test.ts index 90253cc..6ab9622 100644 --- a/packages/ack-pay/src/payment-request.test.ts +++ b/packages/ack-pay/src/payment-request.test.ts @@ -10,9 +10,9 @@ describe("isPaymentRequest", () => { amount: BigInt(100).toString(), decimals: 2, currency: "USD", - recipient: "did:example:recipient" - } - ] + recipient: "did:example:recipient", + }, + ], } it("returns true for a valid payment request", () => { @@ -23,8 +23,8 @@ describe("isPaymentRequest", () => { expect( isPaymentRequest({ ...validPaymentRequest, - id: undefined - }) + id: undefined, + }), ).toBe(false) }) diff --git a/packages/ack-pay/src/payment-request.ts b/packages/ack-pay/src/payment-request.ts index 5789c7e..993c442 100644 --- a/packages/ack-pay/src/payment-request.ts +++ b/packages/ack-pay/src/payment-request.ts @@ -1,7 +1,7 @@ import * as v from "valibot" import { paymentRequestSchema, - type paymentOptionSchema + type paymentOptionSchema, } from "./schemas/valibot" export type PaymentRequestInit = v.InferInput diff --git a/packages/ack-pay/src/receipt-claim-verifier.test.ts b/packages/ack-pay/src/receipt-claim-verifier.test.ts index 5a66971..855a413 100644 --- a/packages/ack-pay/src/receipt-claim-verifier.test.ts +++ b/packages/ack-pay/src/receipt-claim-verifier.test.ts @@ -8,7 +8,7 @@ import { createPaymentRequestToken } from "./create-payment-request-token" import { getReceiptClaimVerifier } from "./receipt-claim-verifier" import { paymentRequestSchema, - type paymentReceiptClaimSchema + type paymentReceiptClaimSchema, } from "./schemas/valibot" describe("getReceiptClaimVerifier", () => { @@ -29,11 +29,11 @@ describe("getReceiptClaimVerifier", () => { const verifier = getReceiptClaimVerifier() const invalidSubject = { - paymentRequestToken: null + paymentRequestToken: null, } await expect(verifier.verify(invalidSubject, resolver)).rejects.toThrow( - InvalidCredentialSubjectError + InvalidCredentialSubjectError, ) }) @@ -49,9 +49,9 @@ describe("getReceiptClaimVerifier", () => { amount: 10, decimals: 2, currency: "USD", - recipient: "sol:123" - } - ] + recipient: "sol:123", + }, + ], }) const paymentRequestToken = await createPaymentRequestToken( @@ -59,18 +59,18 @@ describe("getReceiptClaimVerifier", () => { { issuer: issuerDid, signer, - algorithm: curveToJwtAlgorithm(keypair.curve) - } + algorithm: curveToJwtAlgorithm(keypair.curve), + }, ) const receiptSubject: v.InferOutput = { paymentOptionId: paymentRequest.paymentOptions[0].id, - paymentRequestToken + paymentRequestToken, } const verifier = getReceiptClaimVerifier() await expect( - verifier.verify(receiptSubject, resolver) + verifier.verify(receiptSubject, resolver), ).resolves.not.toThrow() }) }) diff --git a/packages/ack-pay/src/receipt-claim-verifier.ts b/packages/ack-pay/src/receipt-claim-verifier.ts index 0c81d35..d59253c 100644 --- a/packages/ack-pay/src/receipt-claim-verifier.ts +++ b/packages/ack-pay/src/receipt-claim-verifier.ts @@ -3,7 +3,7 @@ import { isCredential, type ClaimVerifier, type CredentialSubject, - type W3CCredential + type W3CCredential, } from "@agentcommercekit/vc" import * as v from "valibot" import { paymentReceiptClaimSchema } from "./schemas/valibot" @@ -13,7 +13,7 @@ export interface PaymentReceiptCredential extends W3CCredential { } function isPaymentReceiptClaim( - credentialSubject: CredentialSubject + credentialSubject: CredentialSubject, ): credentialSubject is v.InferOutput { return v.is(paymentReceiptClaimSchema, credentialSubject) } @@ -25,7 +25,7 @@ function isPaymentReceiptClaim( * @returns `true` if the credential is a payment receipt credential, `false` otherwise */ export function isPaymentReceiptCredential( - credential: unknown + credential: unknown, ): credential is PaymentReceiptCredential { if (!isCredential(credential)) { return false @@ -34,7 +34,7 @@ export function isPaymentReceiptCredential( } async function verifyPaymentReceiptClaim( - credentialSubject: CredentialSubject + credentialSubject: CredentialSubject, ): Promise { if (!isPaymentReceiptClaim(credentialSubject)) { throw new InvalidCredentialSubjectError() @@ -52,6 +52,6 @@ export function getReceiptClaimVerifier(): ClaimVerifier { return { accepts: (type: string[]) => type.includes("PaymentReceiptCredential"), // For now, we just verify the credential subject matches the expected schema - verify: verifyPaymentReceiptClaim + verify: verifyPaymentReceiptClaim, } } diff --git a/packages/ack-pay/src/schemas/valibot.ts b/packages/ack-pay/src/schemas/valibot.ts index 75d5c76..06a58f1 100644 --- a/packages/ack-pay/src/schemas/valibot.ts +++ b/packages/ack-pay/src/schemas/valibot.ts @@ -12,7 +12,7 @@ export const paymentOptionSchema = v.object({ recipient: v.string(), network: v.optional(v.string()), paymentService: v.optional(urlOrDidUri), - receiptService: v.optional(urlOrDidUri) + receiptService: v.optional(urlOrDidUri), }) export const paymentRequestSchema = v.object({ @@ -22,17 +22,17 @@ export const paymentRequestSchema = v.object({ expiresAt: v.optional( v.pipe( v.union([v.date(), v.string()]), - v.transform((input) => new Date(input).toISOString()) - ) + v.transform((input) => new Date(input).toISOString()), + ), ), paymentOptions: v.pipe( v.tupleWithRest([paymentOptionSchema], paymentOptionSchema), - v.nonEmpty() - ) + v.nonEmpty(), + ), }) export const paymentReceiptClaimSchema = v.object({ paymentRequestToken: jwtStringSchema, paymentOptionId: v.string(), - metadata: v.optional(v.record(v.string(), v.unknown())) + metadata: v.optional(v.record(v.string(), v.unknown())), }) diff --git a/packages/ack-pay/src/schemas/zod/v3.ts b/packages/ack-pay/src/schemas/zod/v3.ts index c8649f1..2e3ee83 100644 --- a/packages/ack-pay/src/schemas/zod/v3.ts +++ b/packages/ack-pay/src/schemas/zod/v3.ts @@ -12,7 +12,7 @@ export const paymentOptionSchema = z.object({ recipient: z.string(), network: z.string().optional(), paymentService: urlOrDidUri.optional(), - receiptService: urlOrDidUri.optional() + receiptService: urlOrDidUri.optional(), }) export const paymentRequestSchema = z.object({ @@ -23,11 +23,11 @@ export const paymentRequestSchema = z.object({ .union([z.date(), z.string()]) .transform((val) => new Date(val).toISOString()) .optional(), - paymentOptions: z.array(paymentOptionSchema).nonempty() + paymentOptions: z.array(paymentOptionSchema).nonempty(), }) export const paymentReceiptClaimSchema = z.object({ paymentRequestToken: jwtStringSchema, paymentOptionId: z.string(), - metadata: z.record(z.string(), z.unknown()).optional() + metadata: z.record(z.string(), z.unknown()).optional(), }) diff --git a/packages/ack-pay/src/schemas/zod/v4.ts b/packages/ack-pay/src/schemas/zod/v4.ts index 3c6c290..55c19f0 100644 --- a/packages/ack-pay/src/schemas/zod/v4.ts +++ b/packages/ack-pay/src/schemas/zod/v4.ts @@ -12,7 +12,7 @@ export const paymentOptionSchema = z.object({ recipient: z.string(), network: z.string().optional(), paymentService: urlOrDidUri.optional(), - receiptService: urlOrDidUri.optional() + receiptService: urlOrDidUri.optional(), }) export const paymentRequestSchema = z.object({ @@ -23,11 +23,11 @@ export const paymentRequestSchema = z.object({ .union([z.date(), z.string()]) .transform((val) => new Date(val).toISOString()) .optional(), - paymentOptions: z.array(paymentOptionSchema).nonempty() + paymentOptions: z.array(paymentOptionSchema).nonempty(), }) export const paymentReceiptClaimSchema = z.object({ paymentRequestToken: jwtStringSchema, paymentOptionId: z.string(), - metadata: z.record(z.string(), z.unknown()).optional() + metadata: z.record(z.string(), z.unknown()).optional(), }) diff --git a/packages/ack-pay/src/verify-payment-receipt.test.ts b/packages/ack-pay/src/verify-payment-receipt.test.ts index b78186d..eea79aa 100644 --- a/packages/ack-pay/src/verify-payment-receipt.test.ts +++ b/packages/ack-pay/src/verify-payment-receipt.test.ts @@ -3,12 +3,12 @@ import { createDidPkhUri, getDidResolver, type DidUri, - type Resolvable + type Resolvable, } from "@agentcommercekit/did" import { createJwtSigner, curveToJwtAlgorithm, - type JwtString + type JwtString, } from "@agentcommercekit/jwt" import { generateKeypair } from "@agentcommercekit/keys" import { @@ -16,7 +16,7 @@ import { parseJwtCredential, signCredential, type Verifiable, - type W3CCredential + type W3CCredential, } from "@agentcommercekit/vc" import { beforeEach, describe, expect, it } from "vitest" import { createPaymentReceipt } from "./create-payment-receipt" @@ -50,16 +50,16 @@ describe("verifyPaymentReceipt()", () => { decimals: 2, currency: "USD", network: "eip155:84532", - recipient: "0x592D4858DE40BC81A77E5B373238B70D7C79D3C79" - } - ] + recipient: "0x592D4858DE40BC81A77E5B373238B70D7C79D3C79", + }, + ], } const { paymentRequestToken, paymentRequest } = await createSignedPaymentRequest(paymentRequestInit, { issuer: paymentRequestIssuerDid, signer: createJwtSigner(paymentRequestIssuerKeypair), - algorithm: curveToJwtAlgorithm(paymentRequestIssuerKeypair.curve) + algorithm: curveToJwtAlgorithm(paymentRequestIssuerKeypair.curve), }) unsignedReceipt = createPaymentReceipt({ @@ -68,13 +68,13 @@ describe("verifyPaymentReceipt()", () => { issuer: receiptIssuerDid, payerDid: createDidPkhUri( "eip155:84532", - "0x7B3D8F2E1C9A4B5D6E7F8A9B0C1D2E3F4A5B6C" - ) + "0x7B3D8F2E1C9A4B5D6E7F8A9B0C1D2E3F4A5B6C", + ), }) signedReceiptJwt = await signCredential(unsignedReceipt, { did: receiptIssuerDid, - signer: createJwtSigner(receiptIssuerKeypair) + signer: createJwtSigner(receiptIssuerKeypair), }) signedReceipt = await parseJwtCredential(signedReceiptJwt, resolver) @@ -89,7 +89,7 @@ describe("verifyPaymentReceipt()", () => { it("validates a parsed credential", async () => { const result = await verifyPaymentReceipt(signedReceipt, { - resolver + resolver, }) expect(result.receipt).toBeDefined() expect(result.paymentRequestToken).toBeDefined() @@ -98,26 +98,26 @@ describe("verifyPaymentReceipt()", () => { it("throws for an invalid JWT receipt", async () => { await expect( - verifyPaymentReceipt("invalid-jwt", { resolver }) + verifyPaymentReceipt("invalid-jwt", { resolver }), ).rejects.toThrow(InvalidCredentialError) }) it("throws for invalid credential subject", async () => { const invalidCredential = { ...unsignedReceipt, - credentialSubject: { paymentRequestToken: null } + credentialSubject: { paymentRequestToken: null }, } await expect( // @ts-expect-error -- forcing a bad credential here - verifyPaymentReceipt(invalidCredential, { resolver }) + verifyPaymentReceipt(invalidCredential, { resolver }), ).rejects.toThrow(InvalidCredentialError) }) it("skips payment request token verification when disabled", async () => { const result = await verifyPaymentReceipt(signedReceiptJwt, { resolver, - verifyPaymentRequestTokenJwt: false + verifyPaymentRequestTokenJwt: false, }) expect(result.receipt).toBeDefined() expect(result.paymentRequestToken).toBeDefined() @@ -127,7 +127,7 @@ describe("verifyPaymentReceipt()", () => { it("validates payment request token issuer when specified", async () => { const result = await verifyPaymentReceipt(signedReceiptJwt, { resolver, - paymentRequestIssuer: paymentRequestIssuerDid + paymentRequestIssuer: paymentRequestIssuerDid, }) expect(result.receipt).toBeDefined() expect(result.paymentRequestToken).toBeDefined() @@ -138,15 +138,15 @@ describe("verifyPaymentReceipt()", () => { await expect( verifyPaymentReceipt(signedReceiptJwt, { resolver, - paymentRequestIssuer: "did:example:wrong-issuer" - }) + paymentRequestIssuer: "did:example:wrong-issuer", + }), ).rejects.toThrow(InvalidPaymentRequestTokenError) }) it("validates trusted receipt issuers", async () => { const result = await verifyPaymentReceipt(signedReceiptJwt, { resolver, - trustedReceiptIssuers: [receiptIssuerDid] + trustedReceiptIssuers: [receiptIssuerDid], }) expect(result.receipt).toBeDefined() expect(result.paymentRequestToken).toBeDefined() @@ -157,8 +157,8 @@ describe("verifyPaymentReceipt()", () => { await expect( verifyPaymentReceipt(signedReceiptJwt, { resolver, - trustedReceiptIssuers: ["did:example:wrong-issuer"] - }) + trustedReceiptIssuers: ["did:example:wrong-issuer"], + }), ).rejects.toThrow() }) }) diff --git a/packages/ack-pay/src/verify-payment-receipt.ts b/packages/ack-pay/src/verify-payment-receipt.ts index e64eb14..3dd227d 100644 --- a/packages/ack-pay/src/verify-payment-receipt.ts +++ b/packages/ack-pay/src/verify-payment-receipt.ts @@ -7,12 +7,12 @@ import { parseJwtCredential, verifyParsedCredential, type Verifiable, - type W3CCredential + type W3CCredential, } from "@agentcommercekit/vc" import type { PaymentRequest } from "./payment-request" import { getReceiptClaimVerifier, - isPaymentReceiptCredential + isPaymentReceiptCredential, } from "./receipt-claim-verifier" import { verifyPaymentRequestToken } from "./verify-payment-request-token" @@ -48,8 +48,8 @@ export async function verifyPaymentReceipt( resolver, trustedReceiptIssuers, paymentRequestIssuer, - verifyPaymentRequestTokenJwt = true - }: VerifyPaymentReceiptOptions + verifyPaymentRequestTokenJwt = true, + }: VerifyPaymentReceiptOptions, ): Promise< | { receipt: Verifiable @@ -74,14 +74,14 @@ export async function verifyPaymentReceipt( if (!isPaymentReceiptCredential(parsedCredential)) { throw new InvalidCredentialError( - "Credential is not a PaymentReceiptCredential" + "Credential is not a PaymentReceiptCredential", ) } await verifyParsedCredential(parsedCredential, { resolver, trustedIssuers: trustedReceiptIssuers, - verifiers: [getReceiptClaimVerifier()] + verifiers: [getReceiptClaimVerifier()], }) // Verify the paymentRequestToken is a valid JWT @@ -92,13 +92,13 @@ export async function verifyPaymentReceipt( return { receipt: parsedCredential, paymentRequestToken, - paymentRequest: null + paymentRequest: null, } } if (!isJwtString(paymentRequestToken)) { throw new InvalidCredentialSubjectError( - "Payment Request token is not a JWT" + "Payment Request token is not a JWT", ) } @@ -111,13 +111,13 @@ export async function verifyPaymentReceipt( verifyExpiry: false, // If the paymentRequestIssuer is provided, we want to verify that the // payment request token was issued by the same issuer. - issuer: paymentRequestIssuer - } + issuer: paymentRequestIssuer, + }, ) return { receipt: parsedCredential, paymentRequestToken, - paymentRequest + paymentRequest, } } diff --git a/packages/ack-pay/src/verify-payment-request-token.test.ts b/packages/ack-pay/src/verify-payment-request-token.test.ts index e3b8828..87ccafc 100644 --- a/packages/ack-pay/src/verify-payment-request-token.test.ts +++ b/packages/ack-pay/src/verify-payment-request-token.test.ts @@ -3,13 +3,13 @@ import { createDidKeyUri, getDidResolver, type DidDocument, - type DidUri + type DidUri, } from "@agentcommercekit/did" import { createJwt, createJwtSigner, curveToJwtAlgorithm, - type JwtSigner + type JwtSigner, } from "@agentcommercekit/jwt" import { generateKeypair, type Keypair } from "@agentcommercekit/keys" import { beforeEach, describe, expect, it } from "vitest" @@ -22,7 +22,7 @@ import { verifyPaymentRequestToken } from "./verify-payment-request-token" */ function cleanPaymentRequest(paymentRequest: PaymentRequestInit) { return Object.fromEntries( - Object.entries(paymentRequest).filter(([_, v]) => v) + Object.entries(paymentRequest).filter(([_, v]) => v), ) } @@ -40,9 +40,9 @@ describe("verifyPaymentRequestToken", () => { amount: 10, decimals: 2, currency: "USD", - recipient: "sol:123" - } - ] + recipient: "sol:123", + }, + ], } beforeEach(async () => { @@ -51,7 +51,7 @@ describe("verifyPaymentRequestToken", () => { issuerDid = createDidKeyUri(keypair) issuerDidDocument = createDidDocumentFromKeypair({ did: issuerDid, - keypair + keypair, }) }) @@ -60,7 +60,7 @@ describe("verifyPaymentRequestToken", () => { const body = await createSignedPaymentRequest(paymentRequest, { issuer: issuerDid, signer, - algorithm: curveToJwtAlgorithm(keypair.curve) + algorithm: curveToJwtAlgorithm(keypair.curve), }) const resolver = getDidResolver() @@ -68,11 +68,11 @@ describe("verifyPaymentRequestToken", () => { // Verify the token const result = await verifyPaymentRequestToken(body.paymentRequestToken, { - resolver + resolver, }) expect(result.paymentRequest).toStrictEqual( - cleanPaymentRequest(body.paymentRequest) + cleanPaymentRequest(body.paymentRequest), ) expect(result.parsed.issuer).toEqual(issuerDid) }) @@ -83,8 +83,8 @@ describe("verifyPaymentRequestToken", () => { await expect( verifyPaymentRequestToken("invalid.jwt.token", { - resolver - }) + resolver, + }), ).rejects.toThrow("Invalid payment request token") }) @@ -93,18 +93,18 @@ describe("verifyPaymentRequestToken", () => { const expiredPayload = { ...paymentRequest, sub: paymentRequest.id, - exp: Math.floor(Date.now() / 1000) - 3600 // 1 hour in the past + exp: Math.floor(Date.now() / 1000) - 3600, // 1 hour in the past } const expiredToken = await createJwt( expiredPayload, { issuer: issuerDid, - signer + signer, }, { - alg: curveToJwtAlgorithm(keypair.curve) - } + alg: curveToJwtAlgorithm(keypair.curve), + }, ) const resolver = getDidResolver() @@ -112,8 +112,8 @@ describe("verifyPaymentRequestToken", () => { await expect( verifyPaymentRequestToken(expiredToken, { - resolver - }) + resolver, + }), ).rejects.toThrow("Invalid payment request token") }) @@ -122,18 +122,18 @@ describe("verifyPaymentRequestToken", () => { const expiredPayload = { ...paymentRequest, sub: paymentRequest.id, - exp: Math.floor(Date.now() / 1000) - 3600 // 1 hour in the past + exp: Math.floor(Date.now() / 1000) - 3600, // 1 hour in the past } const expiredToken = await createJwt( expiredPayload, { issuer: issuerDid, - signer + signer, }, { - alg: curveToJwtAlgorithm(keypair.curve) - } + alg: curveToJwtAlgorithm(keypair.curve), + }, ) const resolver = getDidResolver() @@ -142,7 +142,7 @@ describe("verifyPaymentRequestToken", () => { // Verify with verifyExpiry set to false const result = await verifyPaymentRequestToken(expiredToken, { resolver, - verifyExpiry: false + verifyExpiry: false, }) expect(result.paymentRequest).toBeDefined() @@ -153,7 +153,7 @@ describe("verifyPaymentRequestToken", () => { const body = await createSignedPaymentRequest(paymentRequest, { issuer: issuerDid, signer, - algorithm: curveToJwtAlgorithm(keypair.curve) + algorithm: curveToJwtAlgorithm(keypair.curve), }) // Create a resolver with a different public key to make signature verification fail @@ -163,14 +163,14 @@ describe("verifyPaymentRequestToken", () => { issuerDid, createDidDocumentFromKeypair({ did: issuerDid, - keypair: differentKeypair - }) + keypair: differentKeypair, + }), ) await expect( verifyPaymentRequestToken(body.paymentRequestToken, { - resolver - }) + resolver, + }), ).rejects.toThrow("Invalid payment request token") }) @@ -180,8 +180,8 @@ describe("verifyPaymentRequestToken", () => { { sub: "test-payment-request-id" }, { issuer: issuerDid, - signer - } + signer, + }, ) const resolver = getDidResolver() @@ -189,8 +189,8 @@ describe("verifyPaymentRequestToken", () => { await expect( verifyPaymentRequestToken(invalidToken, { - resolver - }) + resolver, + }), ).rejects.toThrow("Payment Request token is not a valid PaymentRequest") }) }) diff --git a/packages/ack-pay/src/verify-payment-request-token.ts b/packages/ack-pay/src/verify-payment-request-token.ts index 4b6e008..cef4f33 100644 --- a/packages/ack-pay/src/verify-payment-request-token.ts +++ b/packages/ack-pay/src/verify-payment-request-token.ts @@ -29,7 +29,7 @@ interface ValidatePaymentRequestTokenOptions { */ export async function verifyPaymentRequestToken( token: string, - options: ValidatePaymentRequestTokenOptions = {} + options: ValidatePaymentRequestTokenOptions = {}, ): Promise<{ paymentRequest: PaymentRequest; parsed: JwtVerified }> { let parsedPaymentRequestToken: JwtVerified @@ -39,8 +39,8 @@ export async function verifyPaymentRequestToken( issuer: options.issuer, policies: { aud: false, - exp: options.verifyExpiry ?? true - } + exp: options.verifyExpiry ?? true, + }, }) } catch (_err) { throw new InvalidPaymentRequestTokenError() @@ -48,17 +48,17 @@ export async function verifyPaymentRequestToken( const { success, output } = v.safeParse( paymentRequestSchema, - parsedPaymentRequestToken.payload + parsedPaymentRequestToken.payload, ) if (!success) { throw new InvalidPaymentRequestTokenError( - "Payment Request token is not a valid PaymentRequest" + "Payment Request token is not a valid PaymentRequest", ) } return { paymentRequest: output, - parsed: parsedPaymentRequestToken + parsed: parsedPaymentRequestToken, } } diff --git a/packages/ack-pay/tsdown.config.ts b/packages/ack-pay/tsdown.config.ts index 06262db..b3f56b0 100644 --- a/packages/ack-pay/tsdown.config.ts +++ b/packages/ack-pay/tsdown.config.ts @@ -5,8 +5,8 @@ export default defineConfig({ "src/index.ts", "src/schemas/zod/v3.ts", "src/schemas/zod/v4.ts", - "src/schemas/valibot.ts" + "src/schemas/valibot.ts", ], dts: true, - silent: true + silent: true, }) diff --git a/packages/ack-pay/vitest.config.ts b/packages/ack-pay/vitest.config.ts index 6a8b09e..7972f77 100644 --- a/packages/ack-pay/vitest.config.ts +++ b/packages/ack-pay/vitest.config.ts @@ -3,6 +3,6 @@ import { defineConfig } from "vitest/config" export default defineConfig({ test: { passWithNoTests: true, - watch: false - } + watch: false, + }, }) diff --git a/packages/agentcommercekit/README.md b/packages/agentcommercekit/README.md index 94fbb0e..d3ea3cc 100644 --- a/packages/agentcommercekit/README.md +++ b/packages/agentcommercekit/README.md @@ -51,7 +51,7 @@ const credential = createControllerCredential({ controller: controllerDid, // Optional id and issuer can be provided id: "urn:uuid:123e4567-e89b-12d3-a456-426614174000", - issuer: controllerDid // Defaults to controller if not provided + issuer: controllerDid, // Defaults to controller if not provided }) ``` @@ -61,7 +61,7 @@ const credential = createControllerCredential({ import { getControllerClaimVerifier, getDidResolver, - verifyParsedCredential + verifyParsedCredential, } from "agentcommercekit" // Get the claim verifier for controller credentials @@ -73,7 +73,7 @@ try { await verifyParsedCredential(controllerCredential, { resolver, verifiers: [verifier], - trustedIssuers: [controllerDid] // Optional: list of trusted issuers + trustedIssuers: [controllerDid], // Optional: list of trusted issuers }) console.log("Credential verified successfully") } catch (error) { @@ -160,7 +160,7 @@ const receipt = createPaymentReceipt({ paymentRequestToken: "", paymentOptionId: "", issuer: "did:web:receipt-service.example.com", - payerDid: "did:web:customer.example.com" + payerDid: "did:web:customer.example.com", }) ``` @@ -171,7 +171,7 @@ import { getDidResolver, verifyPaymentReceipt } from "agentcommercekit" const verified = await verifyPaymentReceipt(receipt, { resolver: getDidResolver(), - trustedIssuers: ["did:web:merchant.example.com"] + trustedIssuers: ["did:web:merchant.example.com"], }) ``` @@ -181,7 +181,7 @@ const verified = await verifyPaymentReceipt(receipt, { import { isPaymentReceiptClaim, isPaymentReceiptCredential, - isPaymentRequest + isPaymentRequest, } from "agentcommercekit" // Check if a value is a valid payment request diff --git a/packages/agentcommercekit/eslint.config.js b/packages/agentcommercekit/eslint.config.js index 0979926..13fe2a3 100644 --- a/packages/agentcommercekit/eslint.config.js +++ b/packages/agentcommercekit/eslint.config.js @@ -3,5 +3,5 @@ import { config } from "@repo/eslint-config/base" export default config({ - root: import.meta.dirname + root: import.meta.dirname, }) diff --git a/packages/agentcommercekit/tsdown.config.ts b/packages/agentcommercekit/tsdown.config.ts index 655cc5c..a78f602 100644 --- a/packages/agentcommercekit/tsdown.config.ts +++ b/packages/agentcommercekit/tsdown.config.ts @@ -9,8 +9,8 @@ export default defineConfig({ "src/a2a/index.ts", "src/a2a/schemas/zod/v3.ts", "src/a2a/schemas/zod/v4.ts", - "src/a2a/schemas/valibot.ts" + "src/a2a/schemas/valibot.ts", ], dts: true, - silent: true + silent: true, }) diff --git a/packages/agentcommercekit/vitest.config.ts b/packages/agentcommercekit/vitest.config.ts index 6a8b09e..7972f77 100644 --- a/packages/agentcommercekit/vitest.config.ts +++ b/packages/agentcommercekit/vitest.config.ts @@ -3,6 +3,6 @@ import { defineConfig } from "vitest/config" export default defineConfig({ test: { passWithNoTests: true, - watch: false - } + watch: false, + }, }) diff --git a/packages/caip/README.md b/packages/caip/README.md index a2fdc96..63706a7 100644 --- a/packages/caip/README.md +++ b/packages/caip/README.md @@ -53,7 +53,7 @@ import { caip10Parts, createCaip10AccountId } from "@agentcommercekit/caip" // Create an account ID const accountId = createCaip10AccountId( "eip155:1", - "0x1234567890123456789012345678901234567890" + "0x1234567890123456789012345678901234567890", ) // "eip155:1:0x1234567890123456789012345678901234567890" @@ -136,16 +136,16 @@ const nftToken: Caip19AssetId = // Valibot schemas import { caip2ChainIdSchema, - caip10AccountIdSchema + caip10AccountIdSchema, } from "@agentcommercekit/caip/schemas/valibot" // Zod v3 schemas import { caip2ChainIdSchema, - caip10AccountIdSchema + caip10AccountIdSchema, } from "@agentcommercekit/caip/schemas/zod/v3" import { caip2ChainIdSchema, - caip10AccountIdSchema + caip10AccountIdSchema, } from "@agentcommercekit/caip/schemas/zod/v4" ``` diff --git a/packages/caip/eslint.config.js b/packages/caip/eslint.config.js index 0979926..13fe2a3 100644 --- a/packages/caip/eslint.config.js +++ b/packages/caip/eslint.config.js @@ -3,5 +3,5 @@ import { config } from "@repo/eslint-config/base" export default config({ - root: import.meta.dirname + root: import.meta.dirname, }) diff --git a/packages/caip/src/caips/caip-10.test.ts b/packages/caip/src/caips/caip-10.test.ts index 0178fa4..af7e032 100644 --- a/packages/caip/src/caips/caip-10.test.ts +++ b/packages/caip/src/caips/caip-10.test.ts @@ -5,7 +5,7 @@ describe("createCaip10AccountId", () => { it("creates a caip 10 account ID for EVM address", () => { const result = createCaip10AccountId( "eip155:1", - "0x1234567890123456789012345678901234567890" + "0x1234567890123456789012345678901234567890", ) expect(result).toBe("eip155:1:0x1234567890123456789012345678901234567890") }) @@ -13,10 +13,10 @@ describe("createCaip10AccountId", () => { it("creates a caip 10 account ID for Solana address", () => { const result = createCaip10AccountId( "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", - "FNoGHiv7DKPLXHfuhiEWpJ8qYitawGkuaYwfYkuvFk1P" + "FNoGHiv7DKPLXHfuhiEWpJ8qYitawGkuaYwfYkuvFk1P", ) expect(result).toBe( - "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:FNoGHiv7DKPLXHfuhiEWpJ8qYitawGkuaYwfYkuvFk1P" + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:FNoGHiv7DKPLXHfuhiEWpJ8qYitawGkuaYwfYkuvFk1P", ) }) }) diff --git a/packages/caip/src/caips/caip-10.ts b/packages/caip/src/caips/caip-10.ts index 743efd7..22a06fe 100644 --- a/packages/caip/src/caips/caip-10.ts +++ b/packages/caip/src/caips/caip-10.ts @@ -1,7 +1,7 @@ import { caip2ChainIdPattern, type Caip2ChainId, - type Caip2ChainIdParts + type Caip2ChainIdParts, } from "./caip-2" /** @@ -22,7 +22,7 @@ export const caip10AccountAddressPattern = "[-.%a-zA-Z0-9]{1,128}" export const caip10AccountIdPattern = `${caip2ChainIdPattern}:${caip10AccountAddressPattern}` export const caip10AccountAddressRegex = new RegExp( - `^${caip10AccountAddressPattern}$` + `^${caip10AccountAddressPattern}$`, ) export const caip10AccountIdRegex = new RegExp(`^${caip10AccountIdPattern}$`) @@ -35,7 +35,7 @@ export const caip10AccountIdRegex = new RegExp(`^${caip10AccountIdPattern}$`) */ export function createCaip10AccountId( chainId: Caip2ChainId, - address: string + address: string, ): Caip10AccountId { return `${chainId}:${address}` } diff --git a/packages/caip/src/caips/caip-19.ts b/packages/caip/src/caips/caip-19.ts index 153ab6f..7f42bda 100644 --- a/packages/caip/src/caips/caip-19.ts +++ b/packages/caip/src/caips/caip-19.ts @@ -25,10 +25,10 @@ export const caip19TokenIdPattern = "[-.%a-zA-Z0-9]{1,78}" export const caip19AssetIdPattern = `${caip19AssetTypePattern}/${caip19TokenIdPattern}` export const caip19AssetNamespaceRegex = new RegExp( - `^${caip19AssetNamespacePattern}$` + `^${caip19AssetNamespacePattern}$`, ) export const caip19AssetReferenceRegex = new RegExp( - `^${caip19AssetReferencePattern}$` + `^${caip19AssetReferencePattern}$`, ) export const caip19AssetNameRegex = new RegExp(`^${caip19AssetNamePattern}$`) export const caip19AssetTypeRegex = new RegExp(`^${caip19AssetTypePattern}$`) diff --git a/packages/caip/src/caips/caip-2.ts b/packages/caip/src/caips/caip-2.ts index db4e57c..53c6883 100644 --- a/packages/caip/src/caips/caip-2.ts +++ b/packages/caip/src/caips/caip-2.ts @@ -35,7 +35,7 @@ export const caip2ChainIds = { arbitrumMainnet: "eip155:42161", arbitrumSepolia: "eip155:421614", solanaMainnet: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", - solanaDevnet: "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1" + solanaDevnet: "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", } as const export function caip2Parts(caip: Caip2ChainId): Caip2ChainIdParts { diff --git a/packages/caip/src/schemas/schemas.test.ts b/packages/caip/src/schemas/schemas.test.ts index ae45f9b..b1c978f 100644 --- a/packages/caip/src/schemas/schemas.test.ts +++ b/packages/caip/src/schemas/schemas.test.ts @@ -4,7 +4,7 @@ import type { Caip10AccountId, Caip19AssetId, Caip19AssetName, - Caip19AssetType + Caip19AssetType, } from "../caips" import * as valibot from "./valibot" import * as zodv3 from "./zod/v3" @@ -13,7 +13,7 @@ import * as zodv4 from "./zod/v4" const schemas = { valibot, zodv3, - zodv4 + zodv4, } describe.each(Object.entries(schemas))("CAIP (%s)", (_name, schemas) => { @@ -24,7 +24,7 @@ describe.each(Object.entries(schemas))("CAIP (%s)", (_name, schemas) => { "eip155:11155111", "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", "bitcoin:mainnet", - "cosmos:cosmoshub-4" + "cosmos:cosmoshub-4", ] for (const chainId of validChainIds) { @@ -42,7 +42,7 @@ describe.each(Object.entries(schemas))("CAIP (%s)", (_name, schemas) => { "ab:1", // too short namespace "verylongnamespace:1", // too long namespace "EIP155:1", // uppercase not allowed in namespace - "eip-155:1" // hyphen not allowed in namespace + "eip-155:1", // hyphen not allowed in namespace ] for (const chainId of invalidChainIds) { @@ -57,7 +57,7 @@ describe.each(Object.entries(schemas))("CAIP (%s)", (_name, schemas) => { const validAccountIds = [ "eip155:1:0x742d35Cc6634C0532925a3b8D4C9db96C4b4d8b6", "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", - "bitcoin:mainnet:bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh" + "bitcoin:mainnet:bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh", ] for (const accountId of validAccountIds) { @@ -70,7 +70,7 @@ describe.each(Object.entries(schemas))("CAIP (%s)", (_name, schemas) => { "eip155:1", "eip155:1:", "eip155::0x742d35Cc6634C0532925a3b8D4C9db96C4b4d8b6", - "" + "", ] for (const accountId of invalidAccountIds) { @@ -85,7 +85,7 @@ describe.each(Object.entries(schemas))("CAIP (%s)", (_name, schemas) => { "slip44:60", "erc20:0xa0b86a33e6441b8c4c8c8c8c8c8c8c8c8c8c8c8c", "erc721:0xb0b86a33e6441b8c4c8c8c8c8c8c8c8c8c8c8c8c", - "spl:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" + "spl:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", ] for (const assetName of validAssetNames) { @@ -99,7 +99,7 @@ describe.each(Object.entries(schemas))("CAIP (%s)", (_name, schemas) => { "eip155:", ":erc20", "EIP155:erc20", // uppercase not allowed - "" + "", ] for (const assetName of invalidAssetNames) { @@ -113,7 +113,7 @@ describe.each(Object.entries(schemas))("CAIP (%s)", (_name, schemas) => { const validAssetTypes = [ "eip155:1/erc20:0xa0b86a33e6441b8c4c8c8c8c8c8c8c8c8c8c8c8c", "eip155:11155111/erc721:0xb0b86a33e6441b8c4c8c8c8c8c8c8c8c8c8c8c8c", - "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/spl:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v" + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/spl:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v", ] for (const assetType of validAssetTypes) { @@ -127,7 +127,7 @@ describe.each(Object.entries(schemas))("CAIP (%s)", (_name, schemas) => { "eip155:1/eip155", "eip155:1/eip155:", "invalid/asset/type", - "" + "", ] for (const assetType of invalidAssetTypes) { @@ -141,7 +141,7 @@ describe.each(Object.entries(schemas))("CAIP (%s)", (_name, schemas) => { const validAssetIds = [ "eip155:1/erc20:0xa0b86a33e6441b8c4c8c8c8c8c8c8c8c8c8c8c8c/0x742d35Cc6634C0532925a3b8D4C9db96C4b4d8b6", "eip155:11155111/erc721:0xb0b86a33e6441b8c4c8c8c8c8c8c8c8c8c8c8c8c/123", - "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/spl:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v/5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp" + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp/spl:EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v/5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", ] for (const assetId of validAssetIds) { @@ -155,7 +155,7 @@ describe.each(Object.entries(schemas))("CAIP (%s)", (_name, schemas) => { "eip155:1/eip155:erc20/", "eip155:1//0x742d35Cc6634C0532925a3b8D4C9db96C4b4d8b6", "invalid/asset/id/format", - "" + "", ] for (const assetId of invalidAssetIds) { diff --git a/packages/caip/src/schemas/valibot.ts b/packages/caip/src/schemas/valibot.ts index ae7c4cd..6694e15 100644 --- a/packages/caip/src/schemas/valibot.ts +++ b/packages/caip/src/schemas/valibot.ts @@ -9,13 +9,13 @@ import { type Caip10AccountId, type Caip19AssetId, type Caip19AssetName, - type Caip19AssetType + type Caip19AssetType, } from "../caips" export const caip2ChainIdSchema = v.pipe( v.string(), v.regex(caip2ChainIdRegex), - v.custom(() => true) + v.custom(() => true), ) export function isCaip2ChainId(chainId: unknown): chainId is Caip2ChainId { @@ -25,11 +25,11 @@ export function isCaip2ChainId(chainId: unknown): chainId is Caip2ChainId { export const caip10AccountIdSchema = v.pipe( v.string(), v.regex(caip10AccountIdRegex), - v.custom(() => true) + v.custom(() => true), ) export function isCaip10AccountId( - accountId: unknown + accountId: unknown, ): accountId is Caip10AccountId { return v.is(caip10AccountIdSchema, accountId) } @@ -37,11 +37,11 @@ export function isCaip10AccountId( export const caip19AssetNameSchema = v.pipe( v.string(), v.regex(caip19AssetNameRegex), - v.custom(() => true) + v.custom(() => true), ) export function isCaip19AssetName( - assetName: unknown + assetName: unknown, ): assetName is Caip19AssetName { return v.is(caip19AssetNameSchema, assetName) } @@ -49,11 +49,11 @@ export function isCaip19AssetName( export const caip19AssetTypeSchema = v.pipe( v.string(), v.regex(caip19AssetTypeRegex), - v.custom(() => true) + v.custom(() => true), ) export function isCaip19AssetType( - assetType: unknown + assetType: unknown, ): assetType is Caip19AssetType { return v.is(caip19AssetTypeSchema, assetType) } @@ -61,7 +61,7 @@ export function isCaip19AssetType( export const caip19AssetIdSchema = v.pipe( v.string(), v.regex(caip19AssetIdRegex), - v.custom(() => true) + v.custom(() => true), ) export function isCaip19AssetId(assetId: unknown): assetId is Caip19AssetId { diff --git a/packages/caip/src/schemas/zod/v3.ts b/packages/caip/src/schemas/zod/v3.ts index cd2a324..1693a6b 100644 --- a/packages/caip/src/schemas/zod/v3.ts +++ b/packages/caip/src/schemas/zod/v3.ts @@ -9,7 +9,7 @@ import { type Caip10AccountId, type Caip19AssetId, type Caip19AssetName, - type Caip19AssetType + type Caip19AssetType, } from "../../caips" export const caip2ChainIdSchema = z @@ -27,7 +27,7 @@ export const caip10AccountIdSchema = z .pipe(z.custom(() => true)) export function isCaip10AccountId( - accountId: unknown + accountId: unknown, ): accountId is Caip10AccountId { return caip10AccountIdSchema.safeParse(accountId).success } @@ -38,7 +38,7 @@ export const caip19AssetNameSchema = z .pipe(z.custom(() => true)) export function isCaip19AssetName( - assetName: unknown + assetName: unknown, ): assetName is Caip19AssetName { return caip19AssetNameSchema.safeParse(assetName).success } @@ -49,7 +49,7 @@ export const caip19AssetTypeSchema = z .pipe(z.custom(() => true)) export function isCaip19AssetType( - assetType: unknown + assetType: unknown, ): assetType is Caip19AssetType { return caip19AssetTypeSchema.safeParse(assetType).success } diff --git a/packages/caip/src/schemas/zod/v4.ts b/packages/caip/src/schemas/zod/v4.ts index dac7a36..fa456f6 100644 --- a/packages/caip/src/schemas/zod/v4.ts +++ b/packages/caip/src/schemas/zod/v4.ts @@ -9,7 +9,7 @@ import { type Caip10AccountId, type Caip19AssetId, type Caip19AssetName, - type Caip19AssetType + type Caip19AssetType, } from "../../caips" export const caip2ChainIdSchema = z @@ -27,7 +27,7 @@ export const caip10AccountIdSchema = z .pipe(z.custom(() => true)) export function isCaip10AccountId( - accountId: unknown + accountId: unknown, ): accountId is Caip10AccountId { return caip10AccountIdSchema.safeParse(accountId).success } @@ -38,7 +38,7 @@ export const caip19AssetNameSchema = z .pipe(z.custom(() => true)) export function isCaip19AssetName( - assetName: unknown + assetName: unknown, ): assetName is Caip19AssetName { return caip19AssetNameSchema.safeParse(assetName).success } @@ -49,7 +49,7 @@ export const caip19AssetTypeSchema = z .pipe(z.custom(() => true)) export function isCaip19AssetType( - assetType: unknown + assetType: unknown, ): assetType is Caip19AssetType { return caip19AssetTypeSchema.safeParse(assetType).success } diff --git a/packages/caip/tsdown.config.ts b/packages/caip/tsdown.config.ts index 06262db..b3f56b0 100644 --- a/packages/caip/tsdown.config.ts +++ b/packages/caip/tsdown.config.ts @@ -5,8 +5,8 @@ export default defineConfig({ "src/index.ts", "src/schemas/zod/v3.ts", "src/schemas/zod/v4.ts", - "src/schemas/valibot.ts" + "src/schemas/valibot.ts", ], dts: true, - silent: true + silent: true, }) diff --git a/packages/caip/vitest.config.ts b/packages/caip/vitest.config.ts index 122104c..d70cf2b 100644 --- a/packages/caip/vitest.config.ts +++ b/packages/caip/vitest.config.ts @@ -4,6 +4,6 @@ export default defineConfig({ test: { setupFiles: ["./vitest.setup.ts"], passWithNoTests: true, - watch: false - } + watch: false, + }, }) diff --git a/packages/did/README.md b/packages/did/README.md index ab22845..aba231d 100644 --- a/packages/did/README.md +++ b/packages/did/README.md @@ -36,7 +36,7 @@ const resolver = getDidResolver() // Resolve a DID and its controller const { did, didDocument, controller } = await resolveDidWithController( "did:web:example.com", - resolver + resolver, ) ``` @@ -46,7 +46,7 @@ const { did, didDocument, controller } = await resolveDidWithController( import { createDidKeyUri, createDidPkhUri, - createDidWebUri + createDidWebUri, } from "@agentcommercekit/did" import { generateKeypair } from "@agentcommercekit/keys" @@ -62,7 +62,7 @@ const keyDid = createDidKeyUri(keypair) // Create a did:pkh URI from an address and chain ID const pkhDid = createDidPkhUri( "eip155:1", - "0x1234567890123456789012345678901234567890" + "0x1234567890123456789012345678901234567890", ) // did:pkh:eip155:1:0x1234567890123456789012345678901234567890 ``` @@ -72,7 +72,7 @@ const pkhDid = createDidPkhUri( ```ts import { createDidDocumentFromKeypair, - createDidWebDocumentFromKeypair + createDidWebDocumentFromKeypair, } from "@agentcommercekit/did" import { generateKeypair } from "@agentcommercekit/keys" @@ -85,14 +85,14 @@ const didDocument = createDidDocumentFromKeypair({ did, keypair, encoding: "jwk", // Optional, defaults to "jwk" - controller: "did:web:controller.example.com" // Optional + controller: "did:web:controller.example.com", // Optional }) // Create a did:web and document with URI and document const { did, didDocument } = createDidWebDocumentFromKeypair({ keypair, baseUrl: "https://www.example.com", - controller: ownerDid + controller: ownerDid, }) ``` diff --git a/packages/did/eslint.config.js b/packages/did/eslint.config.js index 0979926..13fe2a3 100644 --- a/packages/did/eslint.config.js +++ b/packages/did/eslint.config.js @@ -3,5 +3,5 @@ import { config } from "@repo/eslint-config/base" export default config({ - root: import.meta.dirname + root: import.meta.dirname, }) diff --git a/packages/did/src/create-did-document.test.ts b/packages/did/src/create-did-document.test.ts index 94758ab..4fe165b 100644 --- a/packages/did/src/create-did-document.test.ts +++ b/packages/did/src/create-did-document.test.ts @@ -4,37 +4,37 @@ import { keyCurves, publicKeyEncodings, type Keypair, - type PublicKeyEncoding + type PublicKeyEncoding, } from "@agentcommercekit/keys" import { bytesToMultibase, - publicKeyBytesToJwk + publicKeyBytesToJwk, } from "@agentcommercekit/keys/encoding" import { beforeEach, describe, expect, test } from "vitest" import { createDidDocument, - createDidDocumentFromKeypair + createDidDocumentFromKeypair, } from "./create-did-document" const keyTypeMap = { jwk: "JsonWebKey2020", multibase: "Multikey", hex: "Multikey", - base58: "Multikey" + base58: "Multikey", } as const const encodingMap = { hex: "multibase", jwk: "jwk", multibase: "multibase", - base58: "multibase" + base58: "multibase", } const contextMap = { jwk: "https://w3id.org/security/jwk/v1", multibase: "https://w3id.org/security/multikey/v1", hex: "https://w3id.org/security/multikey/v1", - base58: "https://w3id.org/security/multikey/v1" + base58: "https://w3id.org/security/multikey/v1", } describe("createDidDocument() and createDidDocumentFromKeypair()", () => { @@ -52,7 +52,7 @@ describe("createDidDocument() and createDidDocumentFromKeypair()", () => { const keypairMap = { secp256k1: () => secp256k1Keypair, secp256r1: () => secp256r1Keypair, - Ed25519: () => ed25519Keypair + Ed25519: () => ed25519Keypair, } as const describe.each(keyCurves)("curve: %s", (curve) => { @@ -65,12 +65,12 @@ describe("createDidDocument() and createDidDocumentFromKeypair()", () => { const documentFromKeypair = createDidDocumentFromKeypair({ did, keypair, - encoding + encoding, }) const document = createDidDocument({ did, - publicKey: encodePublicKeyFromKeypair(encoding, keypair) + publicKey: encodePublicKeyFromKeypair(encoding, keypair), }) const keyId = `${did}#${encodingMap[encoding]}-1` @@ -80,13 +80,13 @@ describe("createDidDocument() and createDidDocumentFromKeypair()", () => { id: keyId, type: keyTypeMap[encoding], controller: did, - publicKeyJwk: publicKeyBytesToJwk(keypair.publicKey, curve) + publicKeyJwk: publicKeyBytesToJwk(keypair.publicKey, curve), } : { id: keyId, type: keyTypeMap[encoding], controller: did, - publicKeyMultibase: bytesToMultibase(keypair.publicKey) + publicKeyMultibase: bytesToMultibase(keypair.publicKey), } const expectedDocument = { @@ -94,7 +94,7 @@ describe("createDidDocument() and createDidDocumentFromKeypair()", () => { id: did, verificationMethod: [expectedVerificationMethod], authentication: [keyId], - assertionMethod: [keyId] + assertionMethod: [keyId], } expect(document).toEqual(expectedDocument) @@ -102,7 +102,7 @@ describe("createDidDocument() and createDidDocumentFromKeypair()", () => { expect(document.verificationMethod![0]!.id).toBe(keyId) expect(documentFromKeypair.verificationMethod![0]!.id).toBe(keyId) }) - } + }, ) }) @@ -112,19 +112,19 @@ describe("createDidDocument() and createDidDocumentFromKeypair()", () => { const documentFromKeypair = createDidDocumentFromKeypair({ did, keypair: secp256k1Keypair, - controller + controller, }) const document = createDidDocument({ did, publicKey: encodePublicKeyFromKeypair("jwk", secp256k1Keypair), - controller + controller, }) const expectedDocument = { "@context": [ "https://www.w3.org/ns/did/v1", - "https://w3id.org/security/jwk/v1" + "https://w3id.org/security/jwk/v1", ], id: did, controller, @@ -133,11 +133,11 @@ describe("createDidDocument() and createDidDocumentFromKeypair()", () => { id: `${did}#jwk-1`, type: "JsonWebKey2020", controller: did, - publicKeyJwk: expect.any(Object) as unknown - } + publicKeyJwk: expect.any(Object) as unknown, + }, ], authentication: [`${did}#jwk-1`], - assertionMethod: [`${did}#jwk-1`] + assertionMethod: [`${did}#jwk-1`], } expect(document).toEqual(expectedDocument) @@ -150,41 +150,41 @@ describe("createDidDocument() and createDidDocumentFromKeypair()", () => { const document1FromKeypair = createDidDocumentFromKeypair({ did: did1, - keypair: secp256k1Keypair + keypair: secp256k1Keypair, }) const document2FromKeypair = createDidDocumentFromKeypair({ did: did2, - keypair: secp256k1Keypair + keypair: secp256k1Keypair, }) const document1 = createDidDocument({ did: did1, - publicKey: encodePublicKeyFromKeypair("jwk", secp256k1Keypair) + publicKey: encodePublicKeyFromKeypair("jwk", secp256k1Keypair), }) const document2 = createDidDocument({ did: did2, - publicKey: encodePublicKeyFromKeypair("jwk", secp256k1Keypair) + publicKey: encodePublicKeyFromKeypair("jwk", secp256k1Keypair), }) expect(document1.verificationMethod![0]!.id).toBe(`${did1}#jwk-1`) expect(document1FromKeypair.verificationMethod![0]!.id).toBe( - `${did1}#jwk-1` + `${did1}#jwk-1`, ) expect(document2.verificationMethod![0]!.id).toBe(`${did2}#jwk-1`) expect(document2FromKeypair.verificationMethod![0]!.id).toBe( - `${did2}#jwk-1` + `${did2}#jwk-1`, ) }) test("includes all required Did document fields", () => { const documentFromKeypair = createDidDocumentFromKeypair({ did, - keypair: secp256k1Keypair + keypair: secp256k1Keypair, }) const document = createDidDocument({ did, - publicKey: encodePublicKeyFromKeypair("jwk", secp256k1Keypair) + publicKey: encodePublicKeyFromKeypair("jwk", secp256k1Keypair), }) const requiredFields = [ @@ -192,7 +192,7 @@ describe("createDidDocument() and createDidDocumentFromKeypair()", () => { "id", "verificationMethod", "authentication", - "assertionMethod" + "assertionMethod", ] requiredFields.forEach((field) => { expect(document).toHaveProperty(field) diff --git a/packages/did/src/create-did-document.ts b/packages/did/src/create-did-document.ts index 66b0bd8..fe7248b 100644 --- a/packages/did/src/create-did-document.ts +++ b/packages/did/src/create-did-document.ts @@ -4,12 +4,12 @@ import { type Keypair, type PublicKeyEncoding, type PublicKeyTypeMap, - type PublicKeyWithEncoding + type PublicKeyWithEncoding, } from "@agentcommercekit/keys" import { base58ToBytes, bytesToMultibase, - hexStringToBytes + hexStringToBytes, } from "@agentcommercekit/keys/encoding" import type { VerificationMethod } from "did-resolver" import type { DidDocument } from "./did-document" @@ -35,16 +35,16 @@ interface CreateVerificationMethodOptions { */ export function createVerificationMethod({ did, - publicKey: publicKeyWithEncoding + publicKey: publicKeyWithEncoding, }: CreateVerificationMethodOptions): VerificationMethod { const { encoding, value: publicKey } = convertLegacyPublicKeyToMultibase( - publicKeyWithEncoding + publicKeyWithEncoding, ) const verificationMethod: VerificationMethod = { id: `${did}#${encoding}-1`, type: "Multikey", - controller: did + controller: did, } // Add public key in the requested format @@ -63,20 +63,20 @@ export function createVerificationMethod({ } function convertLegacyPublicKeyToMultibase( - publicKey: PublicKeyWithEncoding + publicKey: PublicKeyWithEncoding, ): DidDocumentPublicKey { switch (publicKey.encoding) { case "hex": return { encoding: "multibase", curve: publicKey.curve, - value: bytesToMultibase(hexStringToBytes(publicKey.value)) + value: bytesToMultibase(hexStringToBytes(publicKey.value)), } case "base58": return { encoding: "multibase", curve: publicKey.curve, - value: bytesToMultibase(base58ToBytes(publicKey.value)) + value: bytesToMultibase(base58ToBytes(publicKey.value)), } default: return publicKey @@ -182,7 +182,7 @@ export function createDidDocument({ additionalContexts, verificationMethod, capabilityDelegation, - capabilityInvocation + capabilityInvocation, }: CreateDidDocumentOptions): DidDocument { if (!verificationMethod) { // If no verification method is provided, we need to create one from the @@ -193,7 +193,7 @@ export function createDidDocument({ verificationMethod ??= createVerificationMethod({ did, - publicKey + publicKey, }) } @@ -218,7 +218,7 @@ export function createDidDocument({ ...(alsoKnownAs && { alsoKnownAs }), ...(service && { service }), ...(capabilityDelegation && { capabilityDelegation }), - ...(capabilityInvocation && { capabilityInvocation }) + ...(capabilityInvocation && { capabilityInvocation }), } return document @@ -251,6 +251,6 @@ export function createDidDocumentFromKeypair({ }: CreateDidDocumentFromKeypairOptions): DidDocument { return createDidDocument({ ...options, - publicKey: encodePublicKeyFromKeypair(encoding, keypair) + publicKey: encodePublicKeyFromKeypair(encoding, keypair), }) } diff --git a/packages/did/src/did-document.ts b/packages/did/src/did-document.ts index a4a1f76..ff3c8a8 100644 --- a/packages/did/src/did-document.ts +++ b/packages/did/src/did-document.ts @@ -9,7 +9,7 @@ export type { DidDocument, Service } * @returns True if the value is a did document, false otherwise */ export function isDidDocument( - didDocument: unknown + didDocument: unknown, ): didDocument is DidDocument { return ( typeof didDocument === "object" && @@ -27,7 +27,7 @@ export function isDidDocument( */ export function isDidDocumentForDid( didDocument: DidDocument, - did: string + did: string, ): boolean { return didDocument.id === did } diff --git a/packages/did/src/did-resolvers/did-resolver.test.ts b/packages/did/src/did-resolvers/did-resolver.test.ts index ccd70bc..8e2231b 100644 --- a/packages/did/src/did-resolvers/did-resolver.test.ts +++ b/packages/did/src/did-resolvers/did-resolver.test.ts @@ -10,8 +10,8 @@ describe("DidResolver", () => { publicKey: { encoding: "hex", curve: "secp256k1", - value: "0xc0ffee254729296a45a3885639AC7E10F9d54979" - } + value: "0xc0ffee254729296a45a3885639AC7E10F9d54979", + }, }) it("returns empty result for non-matching Did", async () => { @@ -19,7 +19,7 @@ describe("DidResolver", () => { expect(result.didDocument).toBeNull() expect(result.didResolutionMetadata).toEqual({ - error: "unsupportedDidMethod" + error: "unsupportedDidMethod", }) expect(result.didDocumentMetadata).toEqual({}) }) @@ -38,11 +38,11 @@ describe("DidResolver", () => { expect(result.didDocument).toEqual(didDocument) expect(result.didResolutionMetadata).toEqual({ - contentType: "application/did+json" + contentType: "application/did+json", }) expect(result.didDocumentMetadata).toEqual({ created: date.toISOString(), - updated: date.toISOString() + updated: date.toISOString(), }) }) }) diff --git a/packages/did/src/did-resolvers/did-resolver.ts b/packages/did/src/did-resolvers/did-resolver.ts index d68186b..ee248fc 100644 --- a/packages/did/src/did-resolvers/did-resolver.ts +++ b/packages/did/src/did-resolvers/did-resolver.ts @@ -3,7 +3,7 @@ import { type DIDResolutionOptions, type DIDResolutionResult, type ResolverOptions, - type ResolverRegistry + type ResolverRegistry, } from "did-resolver" import type { DidDocument } from "../did-document" @@ -27,7 +27,7 @@ export class DidResolver extends Resolver { async resolve( didUrl: string, - options: DIDResolutionOptions = {} + options: DIDResolutionOptions = {}, ): Promise { const cached = this._cache.get(didUrl) if (this._useCache && cached) { @@ -39,7 +39,7 @@ export class DidResolver extends Resolver { addResolutionResultToCache( did: string, - resolutionResult: DIDResolutionResult + resolutionResult: DIDResolutionResult, ) { this._cache.set(did, resolutionResult) return this @@ -48,13 +48,13 @@ export class DidResolver extends Resolver { addToCache(did: string, didDocument: DidDocument) { return this.addResolutionResultToCache(did, { didResolutionMetadata: { - contentType: "application/did+json" + contentType: "application/did+json", }, didDocument, didDocumentMetadata: { created: new Date().toISOString(), - updated: new Date().toISOString() - } + updated: new Date().toISOString(), + }, }) } diff --git a/packages/did/src/did-resolvers/get-did-resolver.ts b/packages/did/src/did-resolvers/get-did-resolver.ts index 7e1830d..fbe0a81 100644 --- a/packages/did/src/did-resolvers/get-did-resolver.ts +++ b/packages/did/src/did-resolvers/get-did-resolver.ts @@ -5,7 +5,7 @@ import { DidResolver } from "./did-resolver" import { getResolver as getPkhDidResolver } from "./pkh-did-resolver" import { getResolver as getWebDidResolver, - type DidWebResolverOptions + type DidWebResolverOptions, } from "./web-did-resolver" interface GetDidResolverOptions extends ResolverOptions { @@ -23,7 +23,7 @@ interface GetDidResolverOptions extends ResolverOptions { */ export function getDidResolver({ webOptions = { - allowedHttpHosts: ["localhost", "127.0.0.1", "0.0.0.0"] + allowedHttpHosts: ["localhost", "127.0.0.1", "0.0.0.0"], }, ...options }: GetDidResolverOptions = {}): DidResolver { @@ -37,9 +37,9 @@ export function getDidResolver({ ...keyResolver, ...webResolver, ...jwksResolver, - ...pkhResolver + ...pkhResolver, }, - options + options, ) return didResolver diff --git a/packages/did/src/did-resolvers/pkh-did-resolver.test.ts b/packages/did/src/did-resolvers/pkh-did-resolver.test.ts index 7581890..5e41b5b 100644 --- a/packages/did/src/did-resolvers/pkh-did-resolver.test.ts +++ b/packages/did/src/did-resolvers/pkh-did-resolver.test.ts @@ -11,16 +11,16 @@ import { resolve } from "./pkh-did-resolver" const fixtures = { ethereumMainnet: { did: "did:pkh:eip155:1:0xb9c5714089478a327f09197987f16f9e5d936e8a", - fixture: fixtureEthereumMainnet + fixture: fixtureEthereumMainnet, }, baseSepolia: { did: "did:pkh:eip155:84532:0xa0ae58da58dfa46fa55c3b86545e7065f90ff011", - fixture: fixtureBaseSepolia + fixture: fixtureBaseSepolia, }, solana: { did: "did:pkh:solana:4sGjMW1sUnHzSxGspuhpqLDx6wiyjNtZ:CKg5d12Jhpej1JqtmxLJgaFqqeYjxgPqToJ4LBdvG9Ev", - fixture: fixtureSolana - } + fixture: fixtureSolana, + }, } describe("pkh-did-resolver", () => { @@ -30,7 +30,7 @@ describe("pkh-did-resolver", () => { const result = await resolve(did) expect(result.didDocument).toEqual(fixture) - } + }, ) it("returns an error for unknown did:pkh URIs", async () => { @@ -39,7 +39,7 @@ describe("pkh-did-resolver", () => { expect(result).toEqual({ didDocument: null, didDocumentMetadata: {}, - didResolutionMetadata: { error: "invalidDid" } + didResolutionMetadata: { error: "invalidDid" }, }) }) }) diff --git a/packages/did/src/did-resolvers/pkh-did-resolver.ts b/packages/did/src/did-resolvers/pkh-did-resolver.ts index ef18d5c..3d3f8e6 100644 --- a/packages/did/src/did-resolvers/pkh-did-resolver.ts +++ b/packages/did/src/did-resolvers/pkh-did-resolver.ts @@ -4,7 +4,7 @@ import type { DIDResolutionResult, DIDResolver } from "did-resolver" import { createDidPkhDocumentFromDidPkhUri, - isDidPkhUri + isDidPkhUri, } from "../methods/did-pkh" export async function resolve(did: string): Promise { @@ -12,7 +12,7 @@ export async function resolve(did: string): Promise { return { didDocument: null, didDocumentMetadata: {}, - didResolutionMetadata: { error: "invalidDid" } + didResolutionMetadata: { error: "invalidDid" }, } } @@ -21,7 +21,7 @@ export async function resolve(did: string): Promise { return Promise.resolve({ didDocument, didDocumentMetadata: {}, - didResolutionMetadata: { contentType: "application/did+ld+json" } + didResolutionMetadata: { contentType: "application/did+ld+json" }, }) } 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 c1ad45a..ba9138e 100644 --- a/packages/did/src/did-resolvers/web-did-resolver.test.ts +++ b/packages/did/src/did-resolvers/web-did-resolver.test.ts @@ -7,7 +7,7 @@ describe("web-did-resolver", () => { const mockDidDocument = { "@context": "https://www.w3.org/ns/did/v1", id: "did:web:example.com", - verificationMethod: [] + verificationMethod: [], } beforeEach(() => { @@ -19,7 +19,7 @@ describe("web-did-resolver", () => { it("resolves a valid did:web document", async () => { mockFetch.mockResolvedValueOnce({ ok: true, - json: () => Promise.resolve(mockDidDocument) + json: () => Promise.resolve(mockDidDocument), }) const did = "did:web:example.com" @@ -28,30 +28,30 @@ describe("web-did-resolver", () => { did, didUrl: did, method: "web", - id: "example.com" + id: "example.com", } const result = await resolver.web( did, parsedDid, { resolve: vi.fn() }, - {} + {}, ) expect(result).toEqual({ didDocument: mockDidDocument, didDocumentMetadata: {}, - didResolutionMetadata: { contentType: "application/did+ld+json" } + didResolutionMetadata: { contentType: "application/did+ld+json" }, }) expect(mockFetch).toHaveBeenCalledWith( "https://example.com/.well-known/did.json", - { mode: "cors" } + { mode: "cors" }, ) }) it("uses custom docPath when provided", async () => { mockFetch.mockResolvedValueOnce({ ok: true, - json: () => Promise.resolve(mockDidDocument) + json: () => Promise.resolve(mockDidDocument), }) const did = "did:web:example.com" @@ -60,20 +60,20 @@ describe("web-did-resolver", () => { did, didUrl: did, method: "web", - id: "example.com" + id: "example.com", } await resolver.web(did, parsedDid, { resolve: vi.fn() }, {}) expect(mockFetch).toHaveBeenCalledWith( "https://example.com/custom/path/did.json", - { mode: "cors" } + { mode: "cors" }, ) }) it("allows http for specified hosts", async () => { mockFetch.mockResolvedValueOnce({ ok: true, - json: () => Promise.resolve(mockDidDocument) + json: () => Promise.resolve(mockDidDocument), }) const did = "did:web:localhost%3A8787" @@ -83,13 +83,13 @@ describe("web-did-resolver", () => { did, didUrl: did, method: "web", - id: "localhost" + id: "localhost", } await resolver.web(did, parsedDid, { resolve: vi.fn() }, {}) expect(mockFetch).toHaveBeenCalledWith( "http://localhost:8787/.well-known/did.json", - { mode: "cors" } + { mode: "cors" }, ) }) @@ -101,13 +101,13 @@ describe("web-did-resolver", () => { did: "did:web:example.com", didUrl: "did:web:example.com", method: "web", - id: "example.com" + id: "example.com", } const result = await resolver.web( "did:web:example.com", parsedDid, { resolve: vi.fn() }, - {} + {}, ) expect(result).toEqual({ @@ -115,15 +115,15 @@ describe("web-did-resolver", () => { didDocumentMetadata: {}, didResolutionMetadata: { error: "notFound", - message: "resolver_error: Network error" - } + message: "resolver_error: Network error", + }, }) }) it("handles non-OK responses", async () => { mockFetch.mockResolvedValueOnce({ ok: false, - statusText: "Not Found" + statusText: "Not Found", }) const resolver = getResolver() @@ -131,13 +131,13 @@ describe("web-did-resolver", () => { did: "did:web:example.com", didUrl: "did:web:example.com", method: "web", - id: "example.com" + id: "example.com", } const result = await resolver.web( "did:web:example.com", parsedDid, { resolve: vi.fn() }, - {} + {}, ) expect(result).toEqual({ @@ -146,15 +146,15 @@ describe("web-did-resolver", () => { didResolutionMetadata: { error: "notFound", message: - "resolver_error: DID must resolve to a valid https URL containing a JSON document: Bad response Not Found" - } + "resolver_error: DID must resolve to a valid https URL containing a JSON document: Bad response Not Found", + }, }) }) it("handles invalid DID documents", async () => { mockFetch.mockResolvedValueOnce({ ok: true, - json: () => Promise.resolve({ invalid: "document" }) + json: () => Promise.resolve({ invalid: "document" }), }) const resolver = getResolver() @@ -162,13 +162,13 @@ describe("web-did-resolver", () => { did: "did:web:example.com", didUrl: "did:web:example.com", method: "web", - id: "example.com" + id: "example.com", } const result = await resolver.web( "did:web:example.com", parsedDid, { resolve: vi.fn() }, - {} + {}, ) expect(result).toEqual({ @@ -177,19 +177,19 @@ describe("web-did-resolver", () => { didResolutionMetadata: { error: "notFound", message: - "resolver_error: DID must resolve to a valid https URL containing a JSON document: Invalid JSON DID document" - } + "resolver_error: DID must resolve to a valid https URL containing a JSON document: Invalid JSON DID document", + }, }) }) it("handles DID document with mismatched ID", async () => { const mismatchedDocument = { ...mockDidDocument, - id: "did:web:different.com" + id: "did:web:different.com", } mockFetch.mockResolvedValueOnce({ ok: true, - json: () => Promise.resolve(mismatchedDocument) + json: () => Promise.resolve(mismatchedDocument), }) const resolver = getResolver() @@ -197,13 +197,13 @@ describe("web-did-resolver", () => { did: "did:web:example.com", didUrl: "did:web:example.com", method: "web", - id: "example.com" + id: "example.com", } const result = await resolver.web( "did:web:example.com", parsedDid, { resolve: vi.fn() }, - {} + {}, ) expect(result).toEqual({ @@ -212,15 +212,15 @@ describe("web-did-resolver", () => { didResolutionMetadata: { error: "notFound", message: - "resolver_error: DID document id does not match requested did" - } + "resolver_error: DID document id does not match requested did", + }, }) }) it("uses custom fetch function when provided", async () => { const customFetch = vi.fn().mockResolvedValueOnce({ ok: true, - json: () => Promise.resolve(mockDidDocument) + json: () => Promise.resolve(mockDidDocument), }) const resolver = getResolver({ fetch: customFetch }) @@ -228,13 +228,13 @@ describe("web-did-resolver", () => { did: "did:web:example.com", didUrl: "did:web:example.com", method: "web", - id: "example.com" + id: "example.com", } await resolver.web( "did:web:example.com", parsedDid, { resolve: vi.fn() }, - {} + {}, ) expect(customFetch).toHaveBeenCalled() diff --git a/packages/did/src/did-resolvers/web-did-resolver.ts b/packages/did/src/did-resolvers/web-did-resolver.ts index b207bd4..004a4a7 100644 --- a/packages/did/src/did-resolvers/web-did-resolver.ts +++ b/packages/did/src/did-resolvers/web-did-resolver.ts @@ -13,12 +13,12 @@ import type { DIDDocument, DIDResolutionResult, DIDResolver, - ParsedDID + ParsedDID, } from "did-resolver" import { isDidDocument, isDidDocumentForDid, - type DidDocument + type DidDocument, } from "../did-document" import { isDidWebUri } from "../methods/did-web" @@ -57,13 +57,13 @@ const DEFAULT_DOC_PATH = "/.well-known/did.json" */ async function fetchDidDocumentAtUrl( url: string | URL, - { fetch = globalThis.fetch }: { fetch?: Fetch } = {} + { fetch = globalThis.fetch }: { fetch?: Fetch } = {}, ): Promise { const res = await fetch(url, { mode: "cors" }) if (!res.ok) { throw new Error( - `DID must resolve to a valid https URL containing a JSON document: Bad response ${res.statusText}` + `DID must resolve to a valid https URL containing a JSON document: Bad response ${res.statusText}`, ) } @@ -71,7 +71,7 @@ async function fetchDidDocumentAtUrl( if (!isDidDocument(json)) { throw new Error( - "DID must resolve to a valid https URL containing a JSON document: Invalid JSON DID document" + "DID must resolve to a valid https URL containing a JSON document: Invalid JSON DID document", ) } @@ -127,11 +127,11 @@ function getContentType(didDocument: DidDocument): string { export function getResolver({ docPath = DEFAULT_DOC_PATH, fetch = globalThis.fetch, - allowedHttpHosts = DEFAULT_ALLOWED_HTTP_HOSTS + allowedHttpHosts = DEFAULT_ALLOWED_HTTP_HOSTS, }: DidWebResolverOptions = {}): { web: DIDResolver } { async function resolve( did: string, - parsed: ParsedDID + parsed: ParsedDID, ): Promise { const path = buildDidPath(parsed.did, docPath) const url = isHttpAllowed(path, allowedHttpHosts) @@ -153,15 +153,15 @@ export function getResolver({ didDocumentMetadata, didResolutionMetadata: { error: "notFound", - message: `resolver_error: ` + (error as Error).message - } + message: `resolver_error: ` + (error as Error).message, + }, } } return { didDocument, didDocumentMetadata, - didResolutionMetadata: { contentType: getContentType(didDocument) } + didResolutionMetadata: { contentType: getContentType(didDocument) }, } } diff --git a/packages/did/src/did-uri.ts b/packages/did/src/did-uri.ts index 31d2578..727461f 100644 --- a/packages/did/src/did-uri.ts +++ b/packages/did/src/did-uri.ts @@ -1,6 +1,6 @@ export type DidUri< TMethod extends string = string, - TIdentifier extends string = string + TIdentifier extends string = string, > = `did:${TMethod}:${TIdentifier}` /** diff --git a/packages/did/src/methods/did-key.test.ts b/packages/did/src/methods/did-key.test.ts index 66ddb99..a8f8b32 100644 --- a/packages/did/src/methods/did-key.test.ts +++ b/packages/did/src/methods/did-key.test.ts @@ -13,8 +13,8 @@ const KNOWN_DID_KEYS: { did: DidUri; jwk: PrivateKeyJwk }[] = [ crv: "secp256k1", x: "C70KP9BXCdKBTfjtkQA9xH7uzd7R8hYC6cSpE6CUpro", y: "2kmbH7YTM-RJ2G596UidxkB3SiG66gi9htsriop766g", - d: "ca66hYvhFSAbm_5YsBTydV2R_hDal-ISv3trPNCFYWg" - } + d: "ca66hYvhFSAbm_5YsBTydV2R_hDal-ISv3trPNCFYWg", + }, }, { did: "did:key:z6MknEES6VA14awWdV27ab5r1jtz3d6ct2wULmvU4YgE1wQ8", @@ -22,9 +22,9 @@ const KNOWN_DID_KEYS: { did: DidUri; jwk: PrivateKeyJwk }[] = [ kty: "OKP", crv: "Ed25519", x: "c4cfSJSiOFUJffpI06i5Q20X8qc8Vdcw5gCxvcZy9kU", - d: "FIQVa6NvaYXJdRCoI-pNl_ScNKgf_jVjGZf7bHDxEBw" - } - } + d: "FIQVa6NvaYXJdRCoI-pNl_ScNKgf_jVjGZf7bHDxEBw", + }, + }, ] describe("createDidKeyUri()", () => { @@ -42,7 +42,7 @@ describe("createDidKeyUri()", () => { const resolvedDid = await didResolver.resolve(didKey) expect(resolvedDid.didDocument).toBeDefined() expect(resolvedDid.didDocument?.id).toBe(did) - } + }, ) it("uses the compressed public key", async () => { diff --git a/packages/did/src/methods/did-key.ts b/packages/did/src/methods/did-key.ts index 6cc018a..5d83b44 100644 --- a/packages/did/src/methods/did-key.ts +++ b/packages/did/src/methods/did-key.ts @@ -1,6 +1,6 @@ import { getPublicKeyFromPrivateKey, - type Keypair + type Keypair, } from "@agentcommercekit/keys" import { bytesToMultibase } from "@agentcommercekit/keys/encoding" import * as varint from "varint" @@ -23,16 +23,16 @@ export type DidKeyUri = DidUri<"key", `z${string}`> export const KEY_CONFIG = { secp256k1: { multicodecPrefix: 0xe7, - keyLength: 33 + keyLength: 33, }, secp256r1: { multicodecPrefix: 0x1200, - keyLength: 33 + keyLength: 33, }, Ed25519: { multicodecPrefix: 0xed, - keyLength: 32 - } + keyLength: 32, + }, } as const /** @@ -63,12 +63,12 @@ export function createDidKeyUri(keypair: Keypair): DidKeyUri { const publicKey = getPublicKeyFromPrivateKey( keypair.privateKey, keypair.curve, - true + true, ) if (publicKey.length !== keyConfig.keyLength) { throw new Error( - `Invalid key length for ${keypair.curve}. Expected ${keyConfig.keyLength} bytes, got ${publicKey.length}` + `Invalid key length for ${keypair.curve}. Expected ${keyConfig.keyLength} bytes, got ${publicKey.length}`, ) } diff --git a/packages/did/src/methods/did-pkh.test.ts b/packages/did/src/methods/did-pkh.test.ts index 11693d1..53eb502 100644 --- a/packages/did/src/methods/did-pkh.test.ts +++ b/packages/did/src/methods/did-pkh.test.ts @@ -4,33 +4,33 @@ import { createDidPkhDocument, createDidPkhUri, didPkhParts, - isDidPkhUri + isDidPkhUri, } from "./did-pkh" describe("didPkhParts", () => { it("parses valid did:pkh URIs correctly", () => { const result = didPkhParts( - "did:pkh:eip155:1:0x1234567890123456789012345678901234567890" + "did:pkh:eip155:1:0x1234567890123456789012345678901234567890", ) expect(result).toEqual([ "did", "pkh", "eip155", "1", - "0x1234567890123456789012345678901234567890" + "0x1234567890123456789012345678901234567890", ]) }) it("parses Solana did:pkh URIs correctly", () => { const result = didPkhParts( - "did:pkh:solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:FNoGHiv7DKPLXHfuhiEWpJ8qYitawGkuaYwfYkuvFk1P" + "did:pkh:solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:FNoGHiv7DKPLXHfuhiEWpJ8qYitawGkuaYwfYkuvFk1P", ) expect(result).toEqual([ "did", "pkh", "solana", "5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", - "FNoGHiv7DKPLXHfuhiEWpJ8qYitawGkuaYwfYkuvFk1P" + "FNoGHiv7DKPLXHfuhiEWpJ8qYitawGkuaYwfYkuvFk1P", ]) }) @@ -48,19 +48,19 @@ describe("didPkhParts", () => { it("throws error for invalid chain IDs", () => { expect(() => didPkhParts("did:pkh:ab:1:0x123")).toThrow( - "Invalid did:pkh URI" + "Invalid did:pkh URI", ) }) it("throws error for non-string inputs", () => { expect(() => didPkhParts(null as unknown as string)).toThrow( - "Invalid did:pkh URI" + "Invalid did:pkh URI", ) expect(() => didPkhParts(undefined as unknown as string)).toThrow( - "Invalid did:pkh URI" + "Invalid did:pkh URI", ) expect(() => didPkhParts(123 as unknown as string)).toThrow( - "Invalid did:pkh URI" + "Invalid did:pkh URI", ) }) }) @@ -68,15 +68,17 @@ describe("didPkhParts", () => { describe("isDidPkhUri", () => { it("returns true for valid did:pkh URIs", () => { expect( - isDidPkhUri("did:pkh:eip155:1:0x1234567890123456789012345678901234567890") + isDidPkhUri( + "did:pkh:eip155:1:0x1234567890123456789012345678901234567890", + ), ).toBe(true) expect( isDidPkhUri( - "did:pkh:solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:FNoGHiv7DKPLXHfuhiEWpJ8qYitawGkuaYwfYkuvFk1P" - ) + "did:pkh:solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:FNoGHiv7DKPLXHfuhiEWpJ8qYitawGkuaYwfYkuvFk1P", + ), ).toBe(true) expect( - isDidPkhUri("did:pkh:bitcoin:mainnet:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa") + isDidPkhUri("did:pkh:bitcoin:mainnet:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa"), ).toBe(true) }) @@ -94,28 +96,28 @@ describe("isDidPkhUri", () => { describe("addressFromDidPkhUri", () => { it("extracts address from EVM did:pkh URI", () => { const address = addressFromDidPkhUri( - "did:pkh:eip155:1:0x1234567890123456789012345678901234567890" + "did:pkh:eip155:1:0x1234567890123456789012345678901234567890", ) expect(address).toBe("0x1234567890123456789012345678901234567890") }) it("extracts address from Solana did:pkh URI", () => { const address = addressFromDidPkhUri( - "did:pkh:solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:FNoGHiv7DKPLXHfuhiEWpJ8qYitawGkuaYwfYkuvFk1P" + "did:pkh:solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:FNoGHiv7DKPLXHfuhiEWpJ8qYitawGkuaYwfYkuvFk1P", ) expect(address).toBe("FNoGHiv7DKPLXHfuhiEWpJ8qYitawGkuaYwfYkuvFk1P") }) it("extracts address from Bitcoin did:pkh URI", () => { const address = addressFromDidPkhUri( - "did:pkh:bitcoin:mainnet:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa" + "did:pkh:bitcoin:mainnet:1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa", ) expect(address).toBe("1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa") }) it("throws error for invalid did:pkh URI", () => { expect(() => addressFromDidPkhUri("did:key:123")).toThrow( - "Invalid did:pkh URI" + "Invalid did:pkh URI", ) }) }) @@ -124,20 +126,20 @@ describe("createDidPkhUri", () => { it("creates did:pkh URI for EVM address", () => { const result = createDidPkhUri( "eip155:1", - "0x1234567890123456789012345678901234567890" + "0x1234567890123456789012345678901234567890", ) expect(result).toBe( - "did:pkh:eip155:1:0x1234567890123456789012345678901234567890" + "did:pkh:eip155:1:0x1234567890123456789012345678901234567890", ) }) it("creates did:pkh URI for Solana address", () => { const result = createDidPkhUri( "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", - "FNoGHiv7DKPLXHfuhiEWpJ8qYitawGkuaYwfYkuvFk1P" + "FNoGHiv7DKPLXHfuhiEWpJ8qYitawGkuaYwfYkuvFk1P", ) expect(result).toBe( - "did:pkh:solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:FNoGHiv7DKPLXHfuhiEWpJ8qYitawGkuaYwfYkuvFk1P" + "did:pkh:solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:FNoGHiv7DKPLXHfuhiEWpJ8qYitawGkuaYwfYkuvFk1P", ) }) }) @@ -146,47 +148,47 @@ describe("createDidPkhDocument", () => { it("creates did:pkh document for EVM address with secp256k1 keypair", () => { const result = createDidPkhDocument({ address: "0x1234567890123456789012345678901234567890", - chainId: "eip155:1" + chainId: "eip155:1", }) expect(result.did).toBe( - "did:pkh:eip155:1:0x1234567890123456789012345678901234567890" + "did:pkh:eip155:1:0x1234567890123456789012345678901234567890", ) expect(result.didDocument["@context"]).toContain( - "https://identity.foundation/EcdsaSecp256k1RecoverySignature2020#EcdsaSecp256k1RecoveryMethod2020" + "https://identity.foundation/EcdsaSecp256k1RecoverySignature2020#EcdsaSecp256k1RecoveryMethod2020", ) expect(result.didDocument["@context"]).toContain( - "https://w3id.org/security#blockchainAccountId" + "https://w3id.org/security#blockchainAccountId", ) expect(result.didDocument.verificationMethod).toHaveLength(1) expect(result.didDocument.verificationMethod?.[0]?.type).toBe( - "EcdsaSecp256k1RecoveryMethod2020" + "EcdsaSecp256k1RecoveryMethod2020", ) expect( - result.didDocument.verificationMethod?.[0]?.blockchainAccountId + result.didDocument.verificationMethod?.[0]?.blockchainAccountId, ).toBe("eip155:1:0x1234567890123456789012345678901234567890") }) it("creates did:pkh document for Solana address with Ed25519 keypair", () => { const result = createDidPkhDocument({ address: "FNoGHiv7DKPLXHfuhiEWpJ8qYitawGkuaYwfYkuvFk1P", - chainId: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp" + chainId: "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp", }) expect(result.did).toBe( - "did:pkh:solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:FNoGHiv7DKPLXHfuhiEWpJ8qYitawGkuaYwfYkuvFk1P" + "did:pkh:solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:FNoGHiv7DKPLXHfuhiEWpJ8qYitawGkuaYwfYkuvFk1P", ) expect(result.didDocument["@context"]).toContain( - "https://w3id.org/security#publicKeyJwk" + "https://w3id.org/security#publicKeyJwk", ) expect(result.didDocument["@context"]).toContain( - "https://w3id.org/security#blockchainAccountId" + "https://w3id.org/security#blockchainAccountId", ) expect(result.didDocument.verificationMethod).toHaveLength(1) expect( - result.didDocument.verificationMethod?.[0]?.blockchainAccountId + result.didDocument.verificationMethod?.[0]?.blockchainAccountId, ).toBe( - "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:FNoGHiv7DKPLXHfuhiEWpJ8qYitawGkuaYwfYkuvFk1P" + "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp:FNoGHiv7DKPLXHfuhiEWpJ8qYitawGkuaYwfYkuvFk1P", ) }) @@ -194,11 +196,11 @@ describe("createDidPkhDocument", () => { const result = createDidPkhDocument({ address: "0x1234567890123456789012345678901234567890", chainId: "eip155:1", - controller: "did:key:zQ3sharFd8K3z6L9b5X5J7m8n9o0p1q2r3s4t5u6v7w8x9y0z" + controller: "did:key:zQ3sharFd8K3z6L9b5X5J7m8n9o0p1q2r3s4t5u6v7w8x9y0z", }) expect(result.didDocument.controller).toBe( - "did:key:zQ3sharFd8K3z6L9b5X5J7m8n9o0p1q2r3s4t5u6v7w8x9y0z" + "did:key:zQ3sharFd8K3z6L9b5X5J7m8n9o0p1q2r3s4t5u6v7w8x9y0z", ) }) }) diff --git a/packages/did/src/methods/did-pkh.ts b/packages/did/src/methods/did-pkh.ts index bfec940..f40b432 100644 --- a/packages/did/src/methods/did-pkh.ts +++ b/packages/did/src/methods/did-pkh.ts @@ -3,16 +3,16 @@ import { caip10Parts, createCaip10AccountId, type Caip2ChainId, - type Caip10AccountId + type Caip10AccountId, } from "@agentcommercekit/caip" import { isCaip2ChainId, - isCaip10AccountId + isCaip10AccountId, } from "@agentcommercekit/caip/schemas/valibot" import { base58ToBytes, isBase58, - publicKeyBytesToJwk + publicKeyBytesToJwk, } from "@agentcommercekit/keys/encoding" import type { VerificationMethod } from "did-resolver" import { createDidDocument } from "../create-did-document" @@ -50,7 +50,7 @@ export const isDidPkhChainId = isCaip2ChainId * @returns The components of the did:pkh URI */ export function didPkhParts( - didUri: unknown + didUri: unknown, ): ["did", "pkh", string, string, string] { if (typeof didUri !== "string" || !didUri.startsWith("did:pkh:")) { throw new Error("Invalid did:pkh URI") @@ -104,7 +104,7 @@ export function addressFromDidPkhUri(didUri: string): string { } export function caip10AccountIdFromDidPkhUri( - didUri: DidPkhUri + didUri: DidPkhUri, ): Caip10AccountId { const caip10AccountId = didUri.replace("did:pkh:", "") if (!isCaip10AccountId(caip10AccountId)) { @@ -118,7 +118,7 @@ export function caip10AccountIdFromDidPkhUri( */ export function createBlockchainAccountId( address: string, - chainId: Caip2ChainId + chainId: Caip2ChainId, ) { return createCaip10AccountId(chainId, address) } @@ -141,7 +141,7 @@ export function createBlockchainAccountId( */ export function createDidPkhUri( chainId: Caip2ChainId, - address: string + address: string, ): DidPkhUri { return `did:pkh:${createCaip10AccountId(chainId, address)}` } @@ -150,7 +150,7 @@ export function createDidPkhUri( * Create a did:pkh URI from a CAIP-10 account ID */ export function createDidPkhUriFromCaip10AccountId( - caip10AccountId: Caip10AccountId + caip10AccountId: Caip10AccountId, ): DidPkhUri { return `did:pkh:${caip10AccountId}` } @@ -159,12 +159,12 @@ const jsonLdContexts = { Ed25519VerificationKey2020: [ "https://w3id.org/security#blockchainAccountId", "https://w3id.org/security#publicKeyJwk", - "https://w3id.org/security/suites/ed25519-2020/v1" + "https://w3id.org/security/suites/ed25519-2020/v1", ], EcdsaSecp256k1RecoveryMethod2020: [ "https://w3id.org/security#blockchainAccountId", - "https://identity.foundation/EcdsaSecp256k1RecoverySignature2020#EcdsaSecp256k1RecoveryMethod2020" - ] + "https://identity.foundation/EcdsaSecp256k1RecoverySignature2020#EcdsaSecp256k1RecoveryMethod2020", + ], } /** @@ -183,7 +183,7 @@ const jsonLdContexts = { */ export function createDidPkhDocumentFromDidPkhUri( didUri: DidPkhUri, - controller?: DidUri + controller?: DidUri, ): DidUriWithDocument { const caip10AccountId = caip10AccountIdFromDidPkhUri(didUri) return createDidPkhDocumentFromCaip10AccountId(caip10AccountId, controller) @@ -206,7 +206,7 @@ export function createDidPkhDocumentFromDidPkhUri( */ export function createDidPkhDocumentFromCaip10AccountId( caip10AccountId: Caip10AccountId, - controller?: DidUri + controller?: DidUri, ): DidUriWithDocument { const did = createDidPkhUriFromCaip10AccountId(caip10AccountId) const verificationMethod = createVerificationMethod(did, caip10AccountId) @@ -218,7 +218,7 @@ export function createDidPkhDocumentFromCaip10AccountId( additionalContexts, verificationMethod, capabilityDelegation: [verificationMethod.id], - capabilityInvocation: [verificationMethod.id] + capabilityInvocation: [verificationMethod.id], }) return { did, didDocument } @@ -237,7 +237,7 @@ interface CreateDidPkhDocumentOptions { export function createDidPkhDocument({ address, chainId, - controller + controller, }: CreateDidPkhDocumentOptions): DidUriWithDocument { const caip10AccountId = createCaip10AccountId(chainId, address) return createDidPkhDocumentFromCaip10AccountId(caip10AccountId, controller) @@ -251,7 +251,7 @@ export function createDidPkhDocument({ */ function createVerificationMethod( did: DidUri, - caip10AccountId: Caip10AccountId + caip10AccountId: Caip10AccountId, ): Omit & { type: "Ed25519VerificationKey2020" | "EcdsaSecp256k1RecoveryMethod2020" } { @@ -260,14 +260,14 @@ function createVerificationMethod( if (namespace.startsWith("solana") && isBase58(accountId)) { const publicKeyJwk = publicKeyBytesToJwk( base58ToBytes(accountId), - "Ed25519" + "Ed25519", ) return { id: `${did}#controller`, type: "Ed25519VerificationKey2020", controller: did, blockchainAccountId: caip10AccountId, - publicKeyJwk + publicKeyJwk, } } @@ -276,6 +276,6 @@ function createVerificationMethod( id: `${did}#blockchainAccountId`, type: "EcdsaSecp256k1RecoveryMethod2020", controller: did, - blockchainAccountId: caip10AccountId + blockchainAccountId: caip10AccountId, } } diff --git a/packages/did/src/methods/did-web.test.ts b/packages/did/src/methods/did-web.test.ts index 5d994ef..7cde34e 100644 --- a/packages/did/src/methods/did-web.test.ts +++ b/packages/did/src/methods/did-web.test.ts @@ -2,7 +2,7 @@ import { generateKeypair } from "@agentcommercekit/keys" import { bytesToHexString, bytesToMultibase, - publicKeyBytesToJwk + publicKeyBytesToJwk, } from "@agentcommercekit/keys/encoding" import { describe, expect, it } from "vitest" import { createDidWebDocument, createDidWebUri } from "./did-web" @@ -36,9 +36,9 @@ describe("createDidWebDocument", () => { publicKey: { encoding: "jwk", value: publicKeyJwk, - curve: keypair.curve + curve: keypair.curve, }, - baseUrl: "https://example.com" + baseUrl: "https://example.com", }) expect(did).toEqual("did:web:example.com") @@ -46,7 +46,7 @@ describe("createDidWebDocument", () => { expect(didDocument).toEqual({ "@context": [ "https://www.w3.org/ns/did/v1", - "https://w3id.org/security/jwk/v1" + "https://w3id.org/security/jwk/v1", ], id: "did:web:example.com", verificationMethod: [ @@ -54,11 +54,11 @@ describe("createDidWebDocument", () => { id: "did:web:example.com#jwk-1", type: "JsonWebKey2020", controller: "did:web:example.com", - publicKeyJwk - } + publicKeyJwk, + }, ], authentication: ["did:web:example.com#jwk-1"], - assertionMethod: ["did:web:example.com#jwk-1"] + assertionMethod: ["did:web:example.com#jwk-1"], }) }) @@ -71,9 +71,9 @@ describe("createDidWebDocument", () => { publicKey: { encoding: "hex", value: publicKeyHex, - curve: keypair.curve + curve: keypair.curve, }, - baseUrl: "https://example.com" + baseUrl: "https://example.com", }) expect(did).toEqual("did:web:example.com") @@ -81,7 +81,7 @@ describe("createDidWebDocument", () => { expect(didDocument).toEqual({ "@context": [ "https://www.w3.org/ns/did/v1", - "https://w3id.org/security/multikey/v1" + "https://w3id.org/security/multikey/v1", ], id: "did:web:example.com", verificationMethod: [ @@ -89,11 +89,11 @@ describe("createDidWebDocument", () => { id: "did:web:example.com#multibase-1", type: "Multikey", controller: "did:web:example.com", - publicKeyMultibase - } + publicKeyMultibase, + }, ], authentication: ["did:web:example.com#multibase-1"], - assertionMethod: ["did:web:example.com#multibase-1"] + assertionMethod: ["did:web:example.com#multibase-1"], }) }) }) diff --git a/packages/did/src/methods/did-web.ts b/packages/did/src/methods/did-web.ts index 105bcad..2fd5e1b 100644 --- a/packages/did/src/methods/did-web.ts +++ b/packages/did/src/methods/did-web.ts @@ -2,7 +2,7 @@ import { createDidDocument, createDidDocumentFromKeypair, type CreateDidDocumentFromKeypairOptions, - type CreateDidDocumentOptions + type CreateDidDocumentOptions, } from "../create-did-document" import type { DidUri } from "../did-uri" import type { DidUriWithDocument } from "../types" @@ -65,12 +65,12 @@ export function createDidWebDocument({ const did = createDidWebUri(baseUrl) const didDocument = createDidDocument({ did, - ...options + ...options, }) return { did, - didDocument + didDocument, } } @@ -94,12 +94,12 @@ export function createDidWebDocumentFromKeypair({ const did = createDidWebUri(baseUrl) const didDocument = createDidDocumentFromKeypair({ did, - ...options + ...options, }) return { did, - didDocument + didDocument, } } diff --git a/packages/did/src/resolve-did.test.ts b/packages/did/src/resolve-did.test.ts index 32ef99d..373fcf1 100644 --- a/packages/did/src/resolve-did.test.ts +++ b/packages/did/src/resolve-did.test.ts @@ -14,10 +14,10 @@ async function generateDid(baseUrl: string, controller?: DidUri) { publicKey: { encoding: "hex", value: bytesToHexString(keypair.publicKey), - curve: keypair.curve + curve: keypair.curve, }, baseUrl, - controller + controller, }) } @@ -30,7 +30,7 @@ describe("resolveDid", () => { const result = await resolveDid(did, resolver) expect(result).toEqual({ did, - didDocument + didDocument, }) }) @@ -38,7 +38,7 @@ describe("resolveDid", () => { const controller = await generateDid("https://controller.example.com") const subject = await generateDid( "https://subject.example.com", - controller.did + controller.did, ) const resolver = getDidResolver() resolver.addToCache(controller.did, controller.didDocument) @@ -47,7 +47,7 @@ describe("resolveDid", () => { const result = await resolveDid(subject.did, resolver) expect(result).toEqual({ did: subject.did, - didDocument: subject.didDocument + didDocument: subject.didDocument, }) }) @@ -57,14 +57,14 @@ describe("resolveDid", () => { resolver.addResolutionResultToCache(did, { didResolutionMetadata: { error: "notFound", - message: "not found" + message: "not found", }, didDocument: null, - didDocumentMetadata: {} + didDocumentMetadata: {}, }) await expect(resolveDid(did, resolver)).rejects.toThrow( - DidDocumentNotFoundError + DidDocumentNotFoundError, ) }) }) @@ -74,7 +74,7 @@ describe("resolveDidWithController", () => { const controller = await generateDid("https://controller.example.com") const subject = await generateDid( "https://subject.example.com", - controller.did + controller.did, ) const resolver = getDidResolver() resolver.addToCache(controller.did, controller.didDocument) @@ -87,8 +87,8 @@ describe("resolveDidWithController", () => { didDocument: subject.didDocument, controller: { did: controller.did, - didDocument: controller.didDocument - } + didDocument: controller.didDocument, + }, }) }) @@ -98,20 +98,20 @@ describe("resolveDidWithController", () => { resolver.addToCache(did, didDocument) await expect(resolveDidWithController(did, resolver)).rejects.toThrow( - InvalidDidControllerError + InvalidDidControllerError, ) }) it("throws if the controller is the same as the subject", async () => { const subject = await generateDid( "https://subject.example.com", - "did:web:subject.example.com" + "did:web:subject.example.com", ) const resolver = getDidResolver() resolver.addToCache(subject.did, subject.didDocument) await expect( - resolveDidWithController(subject.did, resolver) + resolveDidWithController(subject.did, resolver), ).rejects.toThrow(InvalidDidControllerError) }) @@ -121,14 +121,14 @@ describe("resolveDidWithController", () => { resolver.addResolutionResultToCache(did, { didResolutionMetadata: { error: "notFound", - message: "not found" + message: "not found", }, didDocument: null, - didDocumentMetadata: {} + didDocumentMetadata: {}, }) await expect(resolveDidWithController(did, resolver)).rejects.toThrow( - DidDocumentNotFoundError + DidDocumentNotFoundError, ) }) @@ -136,13 +136,13 @@ describe("resolveDidWithController", () => { const controller = await generateDid("https://controller.example.com") const subject = await generateDid( "https://subject.example.com", - controller.did + controller.did, ) const resolver = getDidResolver() resolver.addToCache(subject.did, subject.didDocument) await expect( - resolveDidWithController(subject.did, resolver) + resolveDidWithController(subject.did, resolver), ).rejects.toThrow(DidDocumentNotFoundError) }) }) diff --git a/packages/did/src/resolve-did.ts b/packages/did/src/resolve-did.ts index 704096e..278b787 100644 --- a/packages/did/src/resolve-did.ts +++ b/packages/did/src/resolve-did.ts @@ -4,7 +4,7 @@ import { DidDocumentNotFoundError, InvalidDidControllerError, InvalidDidUriError, - UnsupportedDidMethodError + UnsupportedDidMethodError, } from "./errors" import type { DidUriWithDocument } from "./types" @@ -22,7 +22,7 @@ interface DidUriWithControlledDidDocument extends DidUriWithDocument { */ export async function resolveDid( didUri: string, - resolver: Resolvable + resolver: Resolvable, ): Promise { if (!isDidUri(didUri)) { throw new InvalidDidUriError(`Invalid DID URI format: ${didUri}`) @@ -44,19 +44,19 @@ export async function resolveDid( if (!result.didDocument) { throw new DidDocumentNotFoundError( - `No DID document returned for: ${didUri}` + `No DID document returned for: ${didUri}`, ) } if (!isDidUri(result.didDocument.id)) { throw new InvalidDidUriError( - `Invalid DID document ID format: ${result.didDocument.id}` + `Invalid DID document ID format: ${result.didDocument.id}`, ) } return { did: result.didDocument.id, - didDocument: result.didDocument + didDocument: result.didDocument, } } @@ -70,7 +70,7 @@ export async function resolveDid( */ export async function resolveDidWithController( didUri: string, - resolver: Resolvable + resolver: Resolvable, ): Promise { // Resolve the agent's DID document const { did, didDocument } = await resolveDid(didUri, resolver) @@ -82,14 +82,14 @@ export async function resolveDidWithController( // Check if the agent has a controller that can be resolved if (!isDidUri(didDocument.controller)) { throw new InvalidDidControllerError( - `Controller of DID ${didUri} is not a valid DID: ${didDocument.controller}` + `Controller of DID ${didUri} is not a valid DID: ${didDocument.controller}`, ) } // Check if the agent is not controlling itself if (didDocument.controller === did) { throw new InvalidDidControllerError( - `DID ${didUri} cannot be its own controller` + `DID ${didUri} cannot be its own controller`, ) } @@ -98,6 +98,6 @@ export async function resolveDidWithController( return { did, didDocument, - controller + controller, } } diff --git a/packages/did/tsdown.config.ts b/packages/did/tsdown.config.ts index 06262db..b3f56b0 100644 --- a/packages/did/tsdown.config.ts +++ b/packages/did/tsdown.config.ts @@ -5,8 +5,8 @@ export default defineConfig({ "src/index.ts", "src/schemas/zod/v3.ts", "src/schemas/zod/v4.ts", - "src/schemas/valibot.ts" + "src/schemas/valibot.ts", ], dts: true, - silent: true + silent: true, }) diff --git a/packages/did/vitest.config.ts b/packages/did/vitest.config.ts index 122104c..d70cf2b 100644 --- a/packages/did/vitest.config.ts +++ b/packages/did/vitest.config.ts @@ -4,6 +4,6 @@ export default defineConfig({ test: { setupFiles: ["./vitest.setup.ts"], passWithNoTests: true, - watch: false - } + watch: false, + }, }) diff --git a/packages/jwt/README.md b/packages/jwt/README.md index f3ec177..ddd40df 100644 --- a/packages/jwt/README.md +++ b/packages/jwt/README.md @@ -29,7 +29,7 @@ const signer = createJwtSigner(keypair) // Create a JWT const jwt = await createJwt( { sub: "did:web:subject.com", foo: "bar" }, - { issuer: "did:web:issuer.com", signer } + { issuer: "did:web:issuer.com", signer }, ) ``` @@ -42,7 +42,7 @@ import { verifyJwt } from "@agentcommercekit/jwt" const resolver = getDidResolver() const parsed = await verifyJwt(payload, { - resolver: didResolver + resolver: didResolver, }) console.log(parsed.payload) diff --git a/packages/jwt/eslint.config.js b/packages/jwt/eslint.config.js index 0979926..13fe2a3 100644 --- a/packages/jwt/eslint.config.js +++ b/packages/jwt/eslint.config.js @@ -3,5 +3,5 @@ import { config } from "@repo/eslint-config/base" export default config({ - root: import.meta.dirname + root: import.meta.dirname, }) diff --git a/packages/jwt/src/create-jwt.test.ts b/packages/jwt/src/create-jwt.test.ts index 597ecdc..f1d4458 100644 --- a/packages/jwt/src/create-jwt.test.ts +++ b/packages/jwt/src/create-jwt.test.ts @@ -2,7 +2,7 @@ import { generateKeypair } from "@agentcommercekit/keys" import { createJWT as baseCreateJWT, type JWTOptions, - type JWTPayload + type JWTPayload, } from "did-jwt" import { beforeEach, describe, expect, it, vi } from "vitest" import { createJwt } from "./create-jwt" @@ -12,7 +12,7 @@ vi.mock("did-jwt", async () => { const actual = await vi.importActual("did-jwt") return { ...actual, - createJWT: vi.fn() + createJWT: vi.fn(), } }) @@ -20,14 +20,14 @@ describe("createJWT", () => { let mockOptions: JWTOptions const mockPayload: Partial = { sub: "did:example:123", - iss: "did:example:456" + iss: "did:example:456", } beforeEach(async () => { const keypair = await generateKeypair("secp256k1") mockOptions = { issuer: "did:example:456", - signer: createJwtSigner(keypair) + signer: createJwtSigner(keypair), } }) @@ -41,7 +41,7 @@ describe("createJWT", () => { expect(result).toBe(expectedJwt) expect(baseCreateJWT).toHaveBeenCalledWith(mockPayload, mockOptions, { - alg: "ES256K" + alg: "ES256K", }) }) @@ -51,7 +51,7 @@ describe("createJWT", () => { vi.mocked(baseCreateJWT).mockResolvedValueOnce(invalidJwt) await expect(createJwt(mockPayload, mockOptions)).rejects.toThrow( - "Failed to create JWT" + "Failed to create JWT", ) }) }) diff --git a/packages/jwt/src/create-jwt.ts b/packages/jwt/src/create-jwt.ts index 0a1bf25..98687d4 100644 --- a/packages/jwt/src/create-jwt.ts +++ b/packages/jwt/src/create-jwt.ts @@ -2,7 +2,7 @@ import { createJWT as baseCreateJWT, type JWTHeader, type JWTOptions, - type JWTPayload + type JWTPayload, } from "did-jwt" import type { JwtAlgorithm } from "./jwt-algorithm" import { isJwtString, type JwtString } from "./jwt-string" @@ -32,11 +32,11 @@ export interface JwtHeader extends Omit { export async function createJwt( payload: Partial, options: JwtOptions, - { alg = "ES256K", ...header }: Partial = {} + { alg = "ES256K", ...header }: Partial = {}, ): Promise { const result = await baseCreateJWT(payload, options, { ...header, - alg + alg, }) if (!isJwtString(result)) { diff --git a/packages/jwt/src/jwt-algorithm.test.ts b/packages/jwt/src/jwt-algorithm.test.ts index d810b64..8cd2634 100644 --- a/packages/jwt/src/jwt-algorithm.test.ts +++ b/packages/jwt/src/jwt-algorithm.test.ts @@ -2,7 +2,7 @@ import { describe, expect, it } from "vitest" import { curveToJwtAlgorithm, isJwtAlgorithm, - jwtAlgorithms + jwtAlgorithms, } from "./jwt-algorithm" describe("isJwtAlgorithm", () => { @@ -33,7 +33,7 @@ describe("curveToJwtAlgorithm", () => { it("throws an error for an unsupported curve", () => { // @ts-expect-error - invalid curve expect(() => curveToJwtAlgorithm("invalid")).toThrow( - "Unsupported curve: 'invalid'" + "Unsupported curve: 'invalid'", ) }) }) diff --git a/packages/jwt/src/jwt-algorithm.ts b/packages/jwt/src/jwt-algorithm.ts index 4d7eb3e..6773b73 100644 --- a/packages/jwt/src/jwt-algorithm.ts +++ b/packages/jwt/src/jwt-algorithm.ts @@ -14,7 +14,7 @@ export type JwtAlgorithm = (typeof jwtAlgorithms)[number] export const CURVE_TO_ALGORITHM: Record = { secp256k1: "ES256K", secp256r1: "ES256", - Ed25519: "EdDSA" + Ed25519: "EdDSA", } /** diff --git a/packages/jwt/src/jwt-string.test.ts b/packages/jwt/src/jwt-string.test.ts index a5609f1..fe49757 100644 --- a/packages/jwt/src/jwt-string.test.ts +++ b/packages/jwt/src/jwt-string.test.ts @@ -5,8 +5,8 @@ describe("isJwtString", () => { it("returns true for a valid JWT string", () => { expect( isJwtString( - "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" - ) + "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c", + ), ).toBe(true) }) diff --git a/packages/jwt/src/schemas/valibot.ts b/packages/jwt/src/schemas/valibot.ts index b2b8afa..c041e4c 100644 --- a/packages/jwt/src/schemas/valibot.ts +++ b/packages/jwt/src/schemas/valibot.ts @@ -10,21 +10,21 @@ export const jwtPayloadSchema = v.pipe( aud: v.optional(v.union([v.string(), v.array(v.string())])), iat: v.optional(v.number()), nbf: v.optional(v.number()), - exp: v.optional(v.number()) + exp: v.optional(v.number()), }), - v.custom(() => true) + v.custom(() => true), ) export const jwtHeaderSchema = v.pipe( v.looseObject({ typ: v.literal("JWT"), - alg: v.picklist(jwtAlgorithms) + alg: v.picklist(jwtAlgorithms), }), - v.custom(() => true) + v.custom(() => true), ) export const jwtStringSchema = v.pipe( v.string(), v.regex(/^[a-zA-Z0-9-_]+\.[a-zA-Z0-9-_]+\.[a-zA-Z0-9-_]+$/), - v.transform((input) => input as JwtString) + v.transform((input) => input as JwtString), ) diff --git a/packages/jwt/src/schemas/zod/v3.ts b/packages/jwt/src/schemas/zod/v3.ts index 1a35f28..a6cf48a 100644 --- a/packages/jwt/src/schemas/zod/v3.ts +++ b/packages/jwt/src/schemas/zod/v3.ts @@ -10,7 +10,7 @@ export const jwtPayloadSchema = z aud: z.optional(z.union([z.string(), z.array(z.string())])), iat: z.optional(z.number()), nbf: z.optional(z.number()), - exp: z.optional(z.number()) + exp: z.optional(z.number()), }) .passthrough() .refine((val): val is JwtPayload => true) @@ -18,7 +18,7 @@ export const jwtPayloadSchema = z export const jwtHeaderSchema = z .object({ typ: z.literal("JWT"), - alg: z.enum(jwtAlgorithms) + alg: z.enum(jwtAlgorithms), }) .passthrough() .refine((val): val is JwtHeader => true) @@ -27,5 +27,5 @@ export const jwtStringSchema = z .string() .regex(/^[a-zA-Z0-9-_]+\.[a-zA-Z0-9-_]+\.[a-zA-Z0-9-_]+$/) .refine((input) => isJwtString(input), { - message: "Invalid JWT string" + message: "Invalid JWT string", }) diff --git a/packages/jwt/src/schemas/zod/v4.ts b/packages/jwt/src/schemas/zod/v4.ts index aee58ff..78baf7d 100644 --- a/packages/jwt/src/schemas/zod/v4.ts +++ b/packages/jwt/src/schemas/zod/v4.ts @@ -10,14 +10,14 @@ export const jwtPayloadSchema = z aud: z.optional(z.union([z.string(), z.array(z.string())])), iat: z.optional(z.number()), nbf: z.optional(z.number()), - exp: z.optional(z.number()) + exp: z.optional(z.number()), }) .refine((val): val is JwtPayload => true) export const jwtHeaderSchema = z .looseObject({ typ: z.literal("JWT"), - alg: z.enum(jwtAlgorithms) + alg: z.enum(jwtAlgorithms), }) .refine((val): val is JwtHeader => true) @@ -25,5 +25,5 @@ export const jwtStringSchema = z .string() .regex(/^[a-zA-Z0-9-_]+\.[a-zA-Z0-9-_]+\.[a-zA-Z0-9-_]+$/) .refine((input) => isJwtString(input), { - message: "Invalid JWT string" + message: "Invalid JWT string", }) diff --git a/packages/jwt/src/verify.test.ts b/packages/jwt/src/verify.test.ts index 0c31154..9851648 100644 --- a/packages/jwt/src/verify.test.ts +++ b/packages/jwt/src/verify.test.ts @@ -10,7 +10,7 @@ vi.mock("did-jwt", async () => { const actual = await vi.importActual("did-jwt") return { ...actual, - verifyJWT: vi.fn() + verifyJWT: vi.fn(), } }) @@ -27,12 +27,12 @@ describe("verifyJwt()", () => { const jwt = await createJwt( { sub: "did:example:subject", - aud: "did:example:audience" + aud: "did:example:audience", }, { issuer: "did:example:issuer", - signer - } + signer, + }, ) const mockVerifiedResult: JWTVerified = { @@ -40,21 +40,21 @@ describe("verifyJwt()", () => { payload: { iss: "did:example:issuer", sub: "did:example:subject", - aud: "did:example:audience" + aud: "did:example:audience", }, didResolutionResult: { didResolutionMetadata: {}, didDocument: null, - didDocumentMetadata: {} + didDocumentMetadata: {}, }, issuer: "did:example:issuer", signer: { id: "did:example:issuer#key-1", type: "Multikey", controller: "did:example:issuer", - publicKeyHex: "02..." + publicKeyHex: "02...", }, - jwt + jwt, } vi.mocked(verifyJWT).mockResolvedValueOnce(mockVerifiedResult) @@ -70,39 +70,39 @@ describe("verifyJwt()", () => { const jwt = await createJwt( { iss: "did:example:issuer", - sub: "did:example:subject" + sub: "did:example:subject", }, { issuer: "did:example:issuer", - signer - } + signer, + }, ) const mockVerifiedResult: JWTVerified = { verified: true, payload: { iss: "did:example:issuer", - sub: "did:example:subject" + sub: "did:example:subject", }, didResolutionResult: { didResolutionMetadata: {}, didDocument: null, - didDocumentMetadata: {} + didDocumentMetadata: {}, }, issuer: "did:example:issuer", signer: { id: "did:example:issuer#key-1", type: "Multikey", controller: "did:example:issuer", - publicKeyHex: "02..." + publicKeyHex: "02...", }, - jwt + jwt, } vi.mocked(verifyJWT).mockResolvedValueOnce(mockVerifiedResult) const result = await verifyJwt(jwt, { - issuer: "did:example:issuer" + issuer: "did:example:issuer", }) expect(result.payload.iss).toBe("did:example:issuer") @@ -112,43 +112,43 @@ describe("verifyJwt()", () => { const jwt = await createJwt( { iss: "did:example:issuer", - sub: "did:example:subject" + sub: "did:example:subject", }, { issuer: "did:example:issuer", - signer - } + signer, + }, ) const mockVerifiedResult: JWTVerified = { verified: true, payload: { iss: "did:example:issuer", - sub: "did:example:subject" + sub: "did:example:subject", }, didResolutionResult: { didResolutionMetadata: {}, didDocument: null, - didDocumentMetadata: {} + didDocumentMetadata: {}, }, issuer: "did:example:issuer", signer: { id: "did:example:issuer#key-1", type: "Multikey", controller: "did:example:issuer", - publicKeyHex: "02..." + publicKeyHex: "02...", }, - jwt + jwt, } vi.mocked(verifyJWT).mockResolvedValueOnce(mockVerifiedResult) await expect( verifyJwt(jwt, { - issuer: "did:example:different" - }) + issuer: "did:example:different", + }), ).rejects.toThrow( - "Expected issuer did:example:different, got did:example:issuer" + "Expected issuer did:example:different, got did:example:issuer", ) }) }) diff --git a/packages/jwt/src/verify.ts b/packages/jwt/src/verify.ts index b50b53a..4d5f9ec 100644 --- a/packages/jwt/src/verify.ts +++ b/packages/jwt/src/verify.ts @@ -11,7 +11,7 @@ export type VerifyJwtOptions = JWTVerifyOptions & { */ export async function verifyJwt( jwt: string, - { issuer, ...options }: VerifyJwtOptions = {} + { issuer, ...options }: VerifyJwtOptions = {}, ): Promise { const result = await verifyJWT(jwt, options) diff --git a/packages/jwt/tsdown.config.ts b/packages/jwt/tsdown.config.ts index 06262db..b3f56b0 100644 --- a/packages/jwt/tsdown.config.ts +++ b/packages/jwt/tsdown.config.ts @@ -5,8 +5,8 @@ export default defineConfig({ "src/index.ts", "src/schemas/zod/v3.ts", "src/schemas/zod/v4.ts", - "src/schemas/valibot.ts" + "src/schemas/valibot.ts", ], dts: true, - silent: true + silent: true, }) diff --git a/packages/jwt/vitest.config.ts b/packages/jwt/vitest.config.ts index 6a8b09e..7972f77 100644 --- a/packages/jwt/vitest.config.ts +++ b/packages/jwt/vitest.config.ts @@ -3,6 +3,6 @@ import { defineConfig } from "vitest/config" export default defineConfig({ test: { passWithNoTests: true, - watch: false - } + watch: false, + }, }) diff --git a/packages/keys/README.md b/packages/keys/README.md index 08560a9..ea3503a 100644 --- a/packages/keys/README.md +++ b/packages/keys/README.md @@ -18,7 +18,7 @@ pnpm add @agentcommercekit/keys import { encodePublicKeyFromKeypair, generateKeypair, - keypairToJwk + keypairToJwk, } from "@agentcommercekit/keys" // Generate and format keypairs diff --git a/packages/keys/eslint.config.js b/packages/keys/eslint.config.js index 4299bdb..b689843 100644 --- a/packages/keys/eslint.config.js +++ b/packages/keys/eslint.config.js @@ -4,12 +4,12 @@ import { config } from "@repo/eslint-config/base" export default [ ...config({ - root: import.meta.dirname + root: import.meta.dirname, }), { files: ["**/*.test.ts"], rules: { - "@cspell/spellchecker": "off" - } - } + "@cspell/spellchecker": "off", + }, + }, ] diff --git a/packages/keys/src/curves/ed25519.ts b/packages/keys/src/curves/ed25519.ts index 93c5207..46bd852 100644 --- a/packages/keys/src/curves/ed25519.ts +++ b/packages/keys/src/curves/ed25519.ts @@ -19,14 +19,14 @@ export function getPublicKeyBytes(privateKeyBytes: Uint8Array): Uint8Array { * Generate a keypair */ export async function generateKeypair( - privateKeyBytes = generatePrivateKeyBytes() + privateKeyBytes = generatePrivateKeyBytes(), ): Promise { const publicKeyBytes = getPublicKeyBytes(privateKeyBytes) return Promise.resolve({ publicKey: publicKeyBytes, privateKey: privateKeyBytes, - curve: "Ed25519" + curve: "Ed25519", }) } diff --git a/packages/keys/src/curves/secp256k1.test.ts b/packages/keys/src/curves/secp256k1.test.ts index ab6494f..19b1089 100644 --- a/packages/keys/src/curves/secp256k1.test.ts +++ b/packages/keys/src/curves/secp256k1.test.ts @@ -3,7 +3,7 @@ import { hexStringToBytes } from "../encoding/hex" import { generateKeypair, getPublicKeyBytes, - isValidPublicKey + isValidPublicKey, } from "./secp256k1" describe("secp256k1", () => { @@ -29,7 +29,7 @@ describe("secp256k1", () => { test("generates a Keypair from valid private key", async () => { const privateKeyBytes = hexStringToBytes( - "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef" + "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", ) const keypair = await generateKeypair(privateKeyBytes) diff --git a/packages/keys/src/curves/secp256k1.ts b/packages/keys/src/curves/secp256k1.ts index b00e08b..715e2da 100644 --- a/packages/keys/src/curves/secp256k1.ts +++ b/packages/keys/src/curves/secp256k1.ts @@ -13,7 +13,7 @@ export function generatePrivateKeyBytes(): Uint8Array { */ export function getPublicKeyBytes( privateKeyBytes: Uint8Array, - compressed = false + compressed = false, ): Uint8Array { return secp256k1.getPublicKey(privateKeyBytes, compressed) } @@ -22,14 +22,14 @@ export function getPublicKeyBytes( * Generate a keypair */ export async function generateKeypair( - privateKeyBytes = generatePrivateKeyBytes() + privateKeyBytes = generatePrivateKeyBytes(), ): Promise { const publicKeyBytes = getPublicKeyBytes(privateKeyBytes, false) return Promise.resolve({ publicKey: publicKeyBytes, privateKey: privateKeyBytes, - curve: "secp256k1" + curve: "secp256k1", }) } diff --git a/packages/keys/src/curves/secp256r1.test.ts b/packages/keys/src/curves/secp256r1.test.ts index d9ad0cd..254f940 100644 --- a/packages/keys/src/curves/secp256r1.test.ts +++ b/packages/keys/src/curves/secp256r1.test.ts @@ -3,7 +3,7 @@ import { hexStringToBytes } from "../encoding/hex" import { generateKeypair, getPublicKeyBytes, - isValidPublicKey + isValidPublicKey, } from "./secp256r1" describe("secp256r1", () => { @@ -29,7 +29,7 @@ describe("secp256r1", () => { test("generates a Keypair from valid private key", async () => { const privateKeyBytes = hexStringToBytes( - "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef" + "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", ) const keypair = await generateKeypair(privateKeyBytes) diff --git a/packages/keys/src/curves/secp256r1.ts b/packages/keys/src/curves/secp256r1.ts index 986d33d..f2fdc86 100644 --- a/packages/keys/src/curves/secp256r1.ts +++ b/packages/keys/src/curves/secp256r1.ts @@ -13,7 +13,7 @@ export function generatePrivateKeyBytes(): Uint8Array { */ export function getPublicKeyBytes( privateKeyBytes: Uint8Array, - compressed = false + compressed = false, ): Uint8Array { return secp256r1.getPublicKey(privateKeyBytes, compressed) } @@ -22,14 +22,14 @@ export function getPublicKeyBytes( * Generate a keypair */ export async function generateKeypair( - privateKeyBytes = generatePrivateKeyBytes() + privateKeyBytes = generatePrivateKeyBytes(), ): Promise { const publicKeyBytes = getPublicKeyBytes(privateKeyBytes, false) return Promise.resolve({ publicKey: publicKeyBytes, privateKey: privateKeyBytes, - curve: "secp256r1" + curve: "secp256r1", }) } diff --git a/packages/keys/src/encoding/base58.test.ts b/packages/keys/src/encoding/base58.test.ts index fd4a01e..cbf12c1 100644 --- a/packages/keys/src/encoding/base58.test.ts +++ b/packages/keys/src/encoding/base58.test.ts @@ -3,7 +3,7 @@ import { base58btcToBytes, base58ToBytes, bytesToBase58, - bytesToBase58btc + bytesToBase58btc, } from "./base58" describe("base58btc encoding and decoding (used for DID:key)", () => { diff --git a/packages/keys/src/encoding/jwk.test.ts b/packages/keys/src/encoding/jwk.test.ts index 8654e90..9514b4a 100644 --- a/packages/keys/src/encoding/jwk.test.ts +++ b/packages/keys/src/encoding/jwk.test.ts @@ -6,7 +6,7 @@ import { publicKeyBytesToJwk, publicKeyJwkToBytes, type PublicKeyJwkEd25519, - type PublicKeyJwkSecp256k1 + type PublicKeyJwkSecp256k1, } from "./jwk" describe("JWK encoding", () => { @@ -25,12 +25,12 @@ describe("JWK encoding", () => { test("converts Ed25519 public key to JWK", () => { const jwk = publicKeyBytesToJwk( Ed25519Bytes, - "Ed25519" + "Ed25519", ) as PublicKeyJwkEd25519 expect(jwk).toEqual({ kty: "OKP", crv: "Ed25519", - x: expect.any(String) as unknown + x: expect.any(String) as unknown, }) expect(isBase64url(jwk.x)).toBe(true) }) @@ -38,13 +38,13 @@ describe("JWK encoding", () => { test("converts secp256k1 public key to JWK", () => { const jwk = publicKeyBytesToJwk( secp256k1Bytes, - "secp256k1" + "secp256k1", ) as PublicKeyJwkSecp256k1 expect(jwk).toEqual({ kty: "EC", crv: "secp256k1", x: expect.any(String) as unknown, - y: expect.any(String) as unknown + y: expect.any(String) as unknown, }) expect(isBase64url(jwk.x)).toBe(true) expect(isBase64url(jwk.y)).toBe(true) @@ -56,7 +56,7 @@ describe("JWK encoding", () => { const jwk: PublicKeyJwkEd25519 = { kty: "OKP", crv: "Ed25519", - x: base64String + x: base64String, } const bytes = publicKeyJwkToBytes(jwk) expect(bytes).toEqual(Ed25519Bytes) @@ -67,7 +67,7 @@ describe("JWK encoding", () => { kty: "EC", crv: "secp256k1", x: base64String, - y: base64String2 + y: base64String2, } const bytes = publicKeyJwkToBytes(jwk) expect(bytes).toEqual(secp256k1Bytes) @@ -79,7 +79,7 @@ describe("JWK encoding", () => { const jwk: PublicKeyJwkEd25519 = { kty: "OKP", crv: "Ed25519", - x: base64String + x: base64String, } expect(isPublicKeyJwk(jwk)).toBe(true) }) @@ -88,7 +88,7 @@ describe("JWK encoding", () => { const invalid = { kty: "RSA", crv: "Ed25519", - x: base64String + x: base64String, } as const expect(isPublicKeyJwk(invalid)).toBe(false) }) @@ -97,7 +97,7 @@ describe("JWK encoding", () => { const invalid = { kty: "OKP", crv: "P-256", - x: base64String + x: base64String, } as const expect(isPublicKeyJwk(invalid)).toBe(false) }) @@ -106,7 +106,7 @@ describe("JWK encoding", () => { const invalid = { kty: "OKP", crv: "Ed25519", - x: "" + x: "", } as const expect(isPublicKeyJwk(invalid)).toBe(false) }) @@ -115,7 +115,7 @@ describe("JWK encoding", () => { const invalid = { kty: "EC", crv: "secp256k1", - x: base64String + x: base64String, } as const expect(isPublicKeyJwk(invalid)).toBe(false) }) @@ -125,7 +125,7 @@ describe("JWK encoding", () => { kty: "OKP", crv: "Ed25519", x: base64String, - y: base64String + y: base64String, } as const expect(isPublicKeyJwk(invalid)).toBe(false) }) @@ -145,7 +145,7 @@ describe("JWK encoding", () => { crv: "secp256k1" as const, x: "base64x", y: "base64y", - d: "base64d" + d: "base64d", } expect(isPrivateKeyJwk(validJwk)).toBe(true) }) @@ -155,7 +155,7 @@ describe("JWK encoding", () => { kty: "OKP" as const, crv: "Ed25519" as const, x: "base64x", - d: "base64d" + d: "base64d", } expect(isPrivateKeyJwk(validJwk)).toBe(true) }) @@ -165,7 +165,7 @@ describe("JWK encoding", () => { kty: "EC" as const, crv: "secp256k1" as const, x: "base64x", - y: "base64y" + y: "base64y", // missing d } expect(isPrivateKeyJwk(invalidJwk)).toBe(false) @@ -176,7 +176,7 @@ describe("JWK encoding", () => { test("roundtrips Ed25519 public key through JWK", () => { const jwk = publicKeyBytesToJwk( Ed25519Bytes, - "Ed25519" + "Ed25519", ) as PublicKeyJwkEd25519 const bytes = publicKeyJwkToBytes(jwk) expect(bytes).toEqual(Ed25519Bytes) @@ -185,7 +185,7 @@ describe("JWK encoding", () => { test("roundtrips secp256k1 public key through JWK", () => { const jwk = publicKeyBytesToJwk( secp256k1Bytes, - "secp256k1" + "secp256k1", ) as PublicKeyJwkSecp256k1 const bytes = publicKeyJwkToBytes(jwk) expect(bytes).toEqual(secp256k1Bytes) diff --git a/packages/keys/src/encoding/jwk.ts b/packages/keys/src/encoding/jwk.ts index e4a998a..d7892ed 100644 --- a/packages/keys/src/encoding/jwk.ts +++ b/packages/keys/src/encoding/jwk.ts @@ -74,7 +74,7 @@ export type PrivateKeyJwk = */ function isJwkSecp256( jwk: unknown, - crv: "secp256k1" | "secp256r1" + crv: "secp256k1" | "secp256r1", ): jwk is JwkSecp256k1 | JwkSecp256r1 { if (typeof jwk !== "object" || jwk === null) { return false @@ -157,19 +157,19 @@ export function isPublicKeyJwk(jwk: unknown): jwk is PublicKeyJwk { } export function isPublicKeyJwkSecp256k1( - jwk: unknown + jwk: unknown, ): jwk is PublicKeyJwkSecp256k1 { return isJwkSecp256k1(jwk) && isPublicKeyJwk(jwk) } export function isPublicKeyJwkSecp256r1( - jwk: unknown + jwk: unknown, ): jwk is PublicKeyJwkSecp256r1 { return isJwkSecp256r1(jwk) && isPublicKeyJwk(jwk) } export function isPublicKeyJwkEd25519( - jwk: unknown + jwk: unknown, ): jwk is PublicKeyJwkEd25519 { return isJwkEd25519(jwk) && isPublicKeyJwk(jwk) } @@ -182,19 +182,19 @@ export function isPrivateKeyJwk(jwk: unknown): jwk is PrivateKeyJwk { } export function isPrivateKeyJwkSecp256k1( - jwk: unknown + jwk: unknown, ): jwk is PrivateKeyJwkSecp256k1 { return isJwkSecp256k1(jwk) && isPrivateKeyJwk(jwk) } export function isPrivateKeyJwkSecp256r1( - jwk: unknown + jwk: unknown, ): jwk is PrivateKeyJwkSecp256r1 { return isJwkSecp256r1(jwk) && isPrivateKeyJwk(jwk) } export function isPrivateKeyJwkEd25519( - jwk: unknown + jwk: unknown, ): jwk is PrivateKeyJwkEd25519 { return isJwkEd25519(jwk) && isPrivateKeyJwk(jwk) } @@ -206,7 +206,7 @@ export function isPrivateKeyJwkEd25519( * @returns The public key JWK */ export function getPublicKeyJwk( - jwk: PrivateKeyJwk | PublicKeyJwk + jwk: PrivateKeyJwk | PublicKeyJwk, ): PublicKeyJwk { if (isPrivateKeyJwk(jwk)) { const { d: _d, ...publicKeyJwk } = jwk @@ -221,14 +221,14 @@ export function getPublicKeyJwk( */ export function publicKeyBytesToJwk( bytes: Uint8Array, - curve: KeyCurve + curve: KeyCurve, ): PublicKeyJwk { switch (curve) { case "Ed25519": return { kty: "OKP", crv: "Ed25519", - x: bytesToBase64url(bytes) + x: bytesToBase64url(bytes), } as const case "secp256k1": @@ -244,7 +244,7 @@ export function publicKeyBytesToJwk( kty: "EC", crv: curve, x: bytesToBase64url(xBytes), - y: bytesToBase64url(yBytes) + y: bytesToBase64url(yBytes), } as const } @@ -255,14 +255,14 @@ export function publicKeyBytesToJwk( export function privateKeyBytesToJwk( bytes: Uint8Array, - curve: KeyCurve + curve: KeyCurve, ): PrivateKeyJwk { const publicKeyBytes = getPublicKeyFromPrivateKey(bytes, curve) const publicKeyJwk = publicKeyBytesToJwk(publicKeyBytes, curve) return { ...publicKeyJwk, - d: bytesToBase64url(bytes) + d: bytesToBase64url(bytes), } } diff --git a/packages/keys/src/encoding/multibase.test.ts b/packages/keys/src/encoding/multibase.test.ts index e15c9a1..93f4589 100644 --- a/packages/keys/src/encoding/multibase.test.ts +++ b/packages/keys/src/encoding/multibase.test.ts @@ -4,7 +4,7 @@ import { getMultibaseEncoding, isMultibase, multibaseToBytes, - type MultibaseEncoding + type MultibaseEncoding, } from "./multibase" describe("multibase", () => { @@ -13,7 +13,7 @@ describe("multibase", () => { const testMultibases = { base58btc: "z72k1xXWG59fYdzSNoA", base64url: "uSGVsbG8sIFdvcmxkIQ", - base16: "f48656c6c6f2c20576f726c6421" + base16: "f48656c6c6f2c20576f726c6421", } as const describe("bytesToMultibase", () => { @@ -27,10 +27,10 @@ describe("multibase", () => { (encoding, expected) => { const result = bytesToMultibase( testBytes, - encoding as MultibaseEncoding + encoding as MultibaseEncoding, ) expect(result).toBe(expected) - } + }, ) }) @@ -40,7 +40,7 @@ describe("multibase", () => { (encoding, multibase) => { const result = multibaseToBytes(multibase) expect(result).toEqual(testBytes) - } + }, ) it("throws on empty string", () => { @@ -49,7 +49,7 @@ describe("multibase", () => { it("throws on invalid prefix", () => { expect(() => multibaseToBytes("xinvalid")).toThrow( - "Unsupported multibase prefix" + "Unsupported multibase prefix", ) }) @@ -64,7 +64,7 @@ describe("multibase", () => { (encoding, multibase) => { const result = getMultibaseEncoding(multibase) expect(result).toBe(encoding) - } + }, ) it("returns undefined for empty string", () => { @@ -81,7 +81,7 @@ describe("multibase", () => { "validates %s multibase string", (encoding, multibase) => { expect(isMultibase(multibase)).toBe(true) - } + }, ) it("rejects non-string values", () => { @@ -111,7 +111,7 @@ describe("multibase", () => { const bytes = multibaseToBytes(multibase) const result = bytesToMultibase(bytes, encoding as MultibaseEncoding) expect(result).toBe(multibase) - } + }, ) }) }) diff --git a/packages/keys/src/encoding/multibase.ts b/packages/keys/src/encoding/multibase.ts index 086d5c6..3af5151 100644 --- a/packages/keys/src/encoding/multibase.ts +++ b/packages/keys/src/encoding/multibase.ts @@ -8,7 +8,7 @@ import { base64url } from "multiformats/bases/base64" const MULTIBASE_PREFIX = { base58btc: "z", // Bitcoin's base58 (default) base64url: "u", // URL-safe base64 - base16: "f" // hex + base16: "f", // hex } as const export type MultibaseEncoding = keyof typeof MULTIBASE_PREFIX @@ -24,7 +24,7 @@ export type MultibaseString = T extends "base58btc" const multibaseEncoders = { base58btc, base64url, - base16 + base16, } as const /** @@ -35,7 +35,7 @@ const multibaseEncoders = { */ export function bytesToMultibase( bytes: Uint8Array, - encoding?: T + encoding?: T, ): MultibaseString { const actualEncoding = (encoding ?? "base58btc") as T const encoder = multibaseEncoders[actualEncoding] @@ -70,7 +70,7 @@ export function multibaseToBytes(multibase: string): Uint8Array { * @returns The encoding type or undefined if invalid */ export function getMultibaseEncoding( - multibase: string + multibase: string, ): MultibaseEncoding | undefined { if (multibase.length === 0) return undefined diff --git a/packages/keys/src/keypair.test.ts b/packages/keys/src/keypair.test.ts index 764deb2..4546a44 100644 --- a/packages/keys/src/keypair.test.ts +++ b/packages/keys/src/keypair.test.ts @@ -35,7 +35,7 @@ describe("generateKeypair()", () => { test("generates a Keypair from valid private key for both algorithms", async () => { const privateKeyBytes = hexStringToBytes( - "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef" + "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef", ) const secpKeypair = await generateKeypair("secp256k1", privateKeyBytes) @@ -54,10 +54,10 @@ describe("generateKeypair()", () => { const invalidPrivateKey = new Uint8Array([1, 2, 3]) await expect( - generateKeypair("secp256k1", invalidPrivateKey) + generateKeypair("secp256k1", invalidPrivateKey), ).rejects.toThrow() await expect( - generateKeypair("Ed25519", invalidPrivateKey) + generateKeypair("Ed25519", invalidPrivateKey), ).rejects.toThrow() }) }) diff --git a/packages/keys/src/keypair.ts b/packages/keys/src/keypair.ts index 36c4f44..652f368 100644 --- a/packages/keys/src/keypair.ts +++ b/packages/keys/src/keypair.ts @@ -6,7 +6,7 @@ import { getPublicKeyJwk, privateKeyBytesToJwk, publicKeyJwkToBytes, - type PrivateKeyJwk + type PrivateKeyJwk, } from "./encoding/jwk" import type { KeyCurve } from "./key-curves" @@ -37,7 +37,7 @@ export function generatePrivateKeyBytes(curve: KeyCurve): Uint8Array { */ export async function generateKeypair( curve: KeyCurve, - privateKeyBytes?: Uint8Array + privateKeyBytes?: Uint8Array, ): Promise { if (curve === "secp256k1") { return secp256k1.generateKeypair(privateKeyBytes) @@ -72,6 +72,6 @@ export function jwkToKeypair(jwk: PrivateKeyJwk): Keypair { return { publicKey: publicKeyJwkToBytes(publicKeyJwk), privateKey: base64urlToBytes(jwk.d), - curve: jwk.crv + curve: jwk.crv, } } diff --git a/packages/keys/src/public-key.test.ts b/packages/keys/src/public-key.test.ts index effeefa..a10c012 100644 --- a/packages/keys/src/public-key.test.ts +++ b/packages/keys/src/public-key.test.ts @@ -5,7 +5,7 @@ import { isHexString } from "./encoding/hex" import { isPublicKeyJwkEd25519, isPublicKeyJwkSecp256k1, - isPublicKeyJwkSecp256r1 + isPublicKeyJwkSecp256r1, } from "./encoding/jwk" import { isMultibase } from "./encoding/multibase" import { keyCurves } from "./key-curves" @@ -13,7 +13,7 @@ import { generateKeypair } from "./keypair" import { encodePublicKeyFromKeypair, isValidPublicKey, - publicKeyEncodings + publicKeyEncodings, } from "./public-key" describe("public-key methods", () => { @@ -25,7 +25,7 @@ describe("public-key methods", () => { const tooShort = keypair.publicKey.slice( 0, - keypair.publicKey.length - 1 + keypair.publicKey.length - 1, ) expect(isValidPublicKey(tooShort, curve)).toBe(false) }) @@ -48,7 +48,7 @@ describe("public-key methods", () => { !isPublicKeyJwkSecp256r1(publicKeyValue) ) { throw new Error( - `Invalid JWK: ${JSON.stringify(publicKeyValue)}` + `Invalid JWK: ${JSON.stringify(publicKeyValue)}`, ) } @@ -56,7 +56,7 @@ describe("public-key methods", () => { kty: "EC", crv: curve, x: expect.any(String) as unknown, - y: expect.any(String) as unknown + y: expect.any(String) as unknown, }) expect(isBase64url(publicKeyValue.x)).toBe(true) expect(isBase64url(publicKeyValue.y)).toBe(true) @@ -72,7 +72,7 @@ describe("public-key methods", () => { expect(publicKeyValue).toEqual({ kty: "OKP", crv: "Ed25519", - x: expect.any(String) as unknown + x: expect.any(String) as unknown, }) expect(isBase64url(publicKeyValue.x)).toBe(true) const xBytes = base64urlToBytes(publicKeyValue.x) @@ -106,13 +106,13 @@ describe("public-key methods", () => { kty: "EC", crv: curve, x: expect.any(String) as unknown, - y: expect.any(String) as unknown + y: expect.any(String) as unknown, }) } else { expect(jwk.value).toEqual({ kty: "OKP", crv: "Ed25519", - x: expect.any(String) as unknown + x: expect.any(String) as unknown, }) } }) diff --git a/packages/keys/src/public-key.ts b/packages/keys/src/public-key.ts index b0c9743..85b1cad 100644 --- a/packages/keys/src/public-key.ts +++ b/packages/keys/src/public-key.ts @@ -42,7 +42,7 @@ export type PublicKeyWithEncoding = { export function getPublicKeyFromPrivateKey( privateKey: Uint8Array, curve: KeyCurve, - compressed = false + compressed = false, ): Uint8Array { if (curve === "secp256k1") { return secp256k1.getPublicKeyBytes(privateKey, compressed) @@ -67,7 +67,7 @@ export function getCompressedPublicKey(keypair: Keypair): Uint8Array { */ export function isValidPublicKey( publicKey: Uint8Array, - curve: KeyCurve + curve: KeyCurve, ): boolean { if (curve === "secp256k1") { return secp256k1.isValidPublicKey(publicKey) @@ -85,12 +85,12 @@ export function isValidPublicKey( */ function encodePublicKeyMultibase( publicKey: Uint8Array, - curve: KeyCurve + curve: KeyCurve, ): PublicKeyWithEncoding & { encoding: "multibase" } { return { encoding: "multibase", curve, - value: bytesToMultibase(publicKey) + value: bytesToMultibase(publicKey), } } @@ -99,12 +99,12 @@ function encodePublicKeyMultibase( */ function encodePublicKeyJwk( publicKey: Uint8Array, - curve: KeyCurve + curve: KeyCurve, ): PublicKeyWithEncoding & { encoding: "jwk" } { return { encoding: "jwk", curve, - value: publicKeyBytesToJwk(publicKey, curve) + value: publicKeyBytesToJwk(publicKey, curve), } } @@ -113,12 +113,12 @@ function encodePublicKeyJwk( */ function encodePublicKeyHex( publicKey: Uint8Array, - curve: KeyCurve + curve: KeyCurve, ): PublicKeyWithEncoding & { encoding: "hex" } { return { encoding: "hex", curve, - value: bytesToHexString(publicKey) + value: bytesToHexString(publicKey), } } @@ -127,12 +127,12 @@ function encodePublicKeyHex( */ function encodePublicKeyBase58( publicKey: Uint8Array, - curve: KeyCurve + curve: KeyCurve, ): PublicKeyWithEncoding & { encoding: "base58" } { return { encoding: "base58", curve, - value: bytesToBase58(publicKey) + value: bytesToBase58(publicKey), } } @@ -142,13 +142,13 @@ function encodePublicKeyBase58( const publicKeyEncoders: { [K in PublicKeyEncoding]: ( publicKey: Uint8Array, - curve: KeyCurve + curve: KeyCurve, ) => PublicKeyWithEncoding & { encoding: K } } = { hex: encodePublicKeyHex, jwk: encodePublicKeyJwk, multibase: encodePublicKeyMultibase, - base58: encodePublicKeyBase58 + base58: encodePublicKeyBase58, } as const /** @@ -157,7 +157,7 @@ const publicKeyEncoders: { export function encodePublicKey( encoding: T, publicKey: Uint8Array, - curve: KeyCurve + curve: KeyCurve, ): PublicKeyWithEncoding & { encoding: T } { return publicKeyEncoders[encoding](publicKey, curve) } @@ -167,7 +167,7 @@ export function encodePublicKey( */ export function encodePublicKeyFromKeypair( encoding: T, - keypair: Keypair + keypair: Keypair, ): PublicKeyWithEncoding & { encoding: T } { return encodePublicKey(encoding, keypair.publicKey, keypair.curve) } diff --git a/packages/keys/tsdown.config.ts b/packages/keys/tsdown.config.ts index 3a9868e..a0b930a 100644 --- a/packages/keys/tsdown.config.ts +++ b/packages/keys/tsdown.config.ts @@ -5,8 +5,8 @@ export default defineConfig({ "src/index.ts", "src/encoding/index.ts", "src/curves/ed25519.ts", - "src/curves/secp256k1.ts" + "src/curves/secp256k1.ts", ], dts: true, - silent: true + silent: true, }) diff --git a/packages/keys/vitest.config.ts b/packages/keys/vitest.config.ts index 6a8b09e..7972f77 100644 --- a/packages/keys/vitest.config.ts +++ b/packages/keys/vitest.config.ts @@ -3,6 +3,6 @@ import { defineConfig } from "vitest/config" export default defineConfig({ test: { passWithNoTests: true, - watch: false - } + watch: false, + }, }) diff --git a/packages/vc/README.md b/packages/vc/README.md index d1620e1..837355b 100644 --- a/packages/vc/README.md +++ b/packages/vc/README.md @@ -30,8 +30,8 @@ const credential = createCredential({ issuer: issuerDid, subject: "did:example:subject", attestation: { - claim: "value" - } + claim: "value", + }, }) // Sign credential @@ -42,7 +42,7 @@ const signer = createJwtSigner(issuerKeypair) const { jwt, verifiableCredential } = await signCredential(credential, { did: issuerDid, signer, - resolver + resolver, }) // jwt - signed credential in jwt form @@ -54,7 +54,7 @@ const { jwt, verifiableCredential } = await signCredential(credential, { ```ts import { parsedJwtCredential, - verifyParsedCredential + verifyParsedCredential, } from "@agentcommercekit/vc" // Parse JWT credential @@ -63,7 +63,7 @@ const parsed = await parsedJwtCredential(jwt, resolver) // Verify credential await verifyParsedCredential(credential, { resolver, - trustedIssuers: ["did:example:issuer"] + trustedIssuers: ["did:example:issuer"], }) ``` diff --git a/packages/vc/eslint.config.js b/packages/vc/eslint.config.js index 0979926..13fe2a3 100644 --- a/packages/vc/eslint.config.js +++ b/packages/vc/eslint.config.js @@ -3,5 +3,5 @@ import { config } from "@repo/eslint-config/base" export default config({ - root: import.meta.dirname + root: import.meta.dirname, }) diff --git a/packages/vc/src/create-credential.test.ts b/packages/vc/src/create-credential.test.ts index b1f3dfc..2cc05c0 100644 --- a/packages/vc/src/create-credential.test.ts +++ b/packages/vc/src/create-credential.test.ts @@ -14,7 +14,7 @@ describe("createCredential", () => { it("creates a basic credential with required fields", () => { const credential = createCredential({ issuer: mockIssuer, - subject: mockSubject + subject: mockSubject, }) expect(credential).toEqual({ @@ -22,7 +22,7 @@ describe("createCredential", () => { type: ["VerifiableCredential"], issuer: { id: mockIssuer }, credentialSubject: { id: mockSubject }, - issuanceDate: date.toISOString() + issuanceDate: date.toISOString(), }) }) @@ -30,12 +30,12 @@ describe("createCredential", () => { const credential = createCredential({ issuer: mockIssuer, subject: mockSubject, - attestation: mockAttestation + attestation: mockAttestation, }) expect(credential.credentialSubject).toEqual({ id: mockSubject, - ...mockAttestation + ...mockAttestation, }) }) @@ -44,7 +44,7 @@ describe("createCredential", () => { const credential = createCredential({ issuer: mockIssuer, subject: mockSubject, - type: customType + type: customType, }) expect(credential.type).toEqual(["VerifiableCredential", customType]) @@ -55,7 +55,7 @@ describe("createCredential", () => { const credential = createCredential({ issuer: mockIssuer, subject: mockSubject, - type: types + type: types, }) expect(credential.type).toEqual(["VerifiableCredential", ...types]) @@ -66,7 +66,7 @@ describe("createCredential", () => { const credential = createCredential({ issuer: mockIssuer, subject: mockSubject, - issuanceDate + issuanceDate, }) expect(credential.issuanceDate).toBe(issuanceDate.toISOString()) @@ -77,7 +77,7 @@ describe("createCredential", () => { const credential = createCredential({ id: customId, issuer: mockIssuer, - subject: mockSubject + subject: mockSubject, }) expect(credential.id).toBe(customId) diff --git a/packages/vc/src/create-credential.ts b/packages/vc/src/create-credential.ts index 1d76fe6..1dc3525 100644 --- a/packages/vc/src/create-credential.ts +++ b/packages/vc/src/create-credential.ts @@ -44,7 +44,7 @@ export function createCredential({ subject, attestation, issuanceDate, - expirationDate + expirationDate, }: CreateCredentialParams): T { const credentialTypes = [type] .flat() @@ -57,6 +57,6 @@ export function createCredential({ issuer: { id: issuer }, credentialSubject: { id: subject, ...attestation }, issuanceDate: (issuanceDate ?? new Date()).toISOString(), - expirationDate: expirationDate?.toISOString() + expirationDate: expirationDate?.toISOString(), } as T } diff --git a/packages/vc/src/create-presentation.test.ts b/packages/vc/src/create-presentation.test.ts index 0553f8a..7ee72f1 100644 --- a/packages/vc/src/create-presentation.test.ts +++ b/packages/vc/src/create-presentation.test.ts @@ -12,37 +12,37 @@ describe("createPresentation", () => { credentialSubject: { id: "did:example:subject" }, issuanceDate: new Date().toISOString(), proof: { - type: "Ed25519Signature2018" - } + type: "Ed25519Signature2018", + }, } it("creates a basic presentation with required fields", () => { const presentation = createPresentation({ credentials: [mockCredential], - holder: mockHolder + holder: mockHolder, }) expect(presentation).toEqual({ "@context": ["https://www.w3.org/2018/credentials/v1"], type: ["VerifiablePresentation"], holder: mockHolder, - verifiableCredential: [mockCredential] + verifiableCredential: [mockCredential], }) }) it("handles multiple credentials", () => { const secondCredential = { ...mockCredential, - credentialSubject: { id: "did:example:subject2" } + credentialSubject: { id: "did:example:subject2" }, } const presentation = createPresentation({ credentials: [mockCredential, secondCredential], - holder: mockHolder + holder: mockHolder, }) expect(presentation.verifiableCredential).toEqual([ mockCredential, - secondCredential + secondCredential, ]) }) @@ -51,7 +51,7 @@ describe("createPresentation", () => { const presentation = createPresentation({ credentials: [mockCredential], holder: mockHolder, - type: customType + type: customType, }) expect(presentation.type).toEqual(["VerifiablePresentation", customType]) @@ -62,7 +62,7 @@ describe("createPresentation", () => { const presentation = createPresentation({ credentials: [mockCredential], holder: mockHolder, - type: types + type: types, }) expect(presentation.type).toEqual(["VerifiablePresentation", ...types]) @@ -73,7 +73,7 @@ describe("createPresentation", () => { const presentation = createPresentation({ credentials: [mockCredential], holder: mockHolder, - issuanceDate + issuanceDate, }) expect(presentation.issuanceDate).toBe(issuanceDate.toISOString()) @@ -84,7 +84,7 @@ describe("createPresentation", () => { const presentation = createPresentation({ credentials: [mockCredential], holder: mockHolder, - expirationDate + expirationDate, }) expect(presentation.expirationDate).toBe(expirationDate.toISOString()) @@ -95,7 +95,7 @@ describe("createPresentation", () => { const presentation = createPresentation({ id: customId, credentials: [mockCredential], - holder: mockHolder + holder: mockHolder, }) expect(presentation.id).toBe(customId) diff --git a/packages/vc/src/create-presentation.ts b/packages/vc/src/create-presentation.ts index 3af09bc..5c38bad 100644 --- a/packages/vc/src/create-presentation.ts +++ b/packages/vc/src/create-presentation.ts @@ -34,7 +34,7 @@ export function createPresentation({ id, type, issuanceDate, - expirationDate + expirationDate, }: CreatePresentationParams): W3CPresentation { const credentialTypes = [type] .flat() @@ -47,6 +47,6 @@ export function createPresentation({ holder, verifiableCredential: credentials, issuanceDate: issuanceDate?.toISOString(), - expirationDate: expirationDate?.toISOString() + expirationDate: expirationDate?.toISOString(), } } diff --git a/packages/vc/src/revocation/is-status-list-credential.ts b/packages/vc/src/revocation/is-status-list-credential.ts index 0e42991..e14cf05 100644 --- a/packages/vc/src/revocation/is-status-list-credential.ts +++ b/packages/vc/src/revocation/is-status-list-credential.ts @@ -5,7 +5,7 @@ import type { CredentialSubject } from "../types" import type { BitstringStatusListCredential } from "./types" function isStatusListClaim( - credentialSubject: CredentialSubject + credentialSubject: CredentialSubject, ): credentialSubject is v.InferOutput { return v.is(bitstringStatusListClaimSchema, credentialSubject) } @@ -17,7 +17,7 @@ function isStatusListClaim( * @returns `true` if the credential is a status list credential, `false` otherwise */ export function isStatusListCredential( - credential: unknown + credential: unknown, ): credential is BitstringStatusListCredential { if (!isCredential(credential)) { return false diff --git a/packages/vc/src/revocation/make-revocable.test.ts b/packages/vc/src/revocation/make-revocable.test.ts index e6c9004..ad37c36 100644 --- a/packages/vc/src/revocation/make-revocable.test.ts +++ b/packages/vc/src/revocation/make-revocable.test.ts @@ -8,7 +8,7 @@ describe("makeRevocable", () => { type: ["VerifiableCredential"], issuer: { id: "did:example:issuer" }, credentialSubject: { id: "did:example:subject" }, - issuanceDate: new Date().toISOString() + issuanceDate: new Date().toISOString(), } const mockStatusListId = "https://example.com/status/1" @@ -19,7 +19,7 @@ describe("makeRevocable", () => { const revocableCredential = makeRevocable(mockCredential, { id: mockStatusListId, statusListIndex: mockStatusListIndex, - statusListUrl: mockStatusListUrl + statusListUrl: mockStatusListUrl, }) expect(revocableCredential.credentialStatus).toEqual({ @@ -27,7 +27,7 @@ describe("makeRevocable", () => { type: "BitstringStatusListEntry", statusPurpose: "revocation", statusListIndex: mockStatusListIndex.toString(), - statusListCredential: mockStatusListUrl + statusListCredential: mockStatusListUrl, }) }) }) diff --git a/packages/vc/src/revocation/make-revocable.ts b/packages/vc/src/revocation/make-revocable.ts index da19e68..6e6d093 100644 --- a/packages/vc/src/revocation/make-revocable.ts +++ b/packages/vc/src/revocation/make-revocable.ts @@ -25,7 +25,7 @@ type RevocationOptions = { */ export function makeRevocable( credential: T, - { id, statusListIndex, statusListUrl }: RevocationOptions + { id, statusListIndex, statusListUrl }: RevocationOptions, ): Revocable { return { ...credential, @@ -34,7 +34,7 @@ export function makeRevocable( type: "BitstringStatusListEntry", statusPurpose: "revocation", statusListIndex: statusListIndex.toString(), - statusListCredential: statusListUrl - } + statusListCredential: statusListUrl, + }, } } diff --git a/packages/vc/src/revocation/status-list-credential.test.ts b/packages/vc/src/revocation/status-list-credential.test.ts index 2c7b880..1392d25 100644 --- a/packages/vc/src/revocation/status-list-credential.test.ts +++ b/packages/vc/src/revocation/status-list-credential.test.ts @@ -8,7 +8,7 @@ describe("createStatusListCredential", () => { const params = { url: "https://example.com/status-list", encodedList: "mockEncodedList", - issuer + issuer, } const credential = createStatusListCredential(params) diff --git a/packages/vc/src/revocation/status-list-credential.ts b/packages/vc/src/revocation/status-list-credential.ts index bda32f7..6b06109 100644 --- a/packages/vc/src/revocation/status-list-credential.ts +++ b/packages/vc/src/revocation/status-list-credential.ts @@ -25,7 +25,7 @@ type CreateStatusListCredentialParams = { export function createStatusListCredential({ url, encodedList, - issuer + issuer, }: CreateStatusListCredentialParams): BitstringStatusListCredential { return createCredential({ id: url, @@ -35,7 +35,7 @@ export function createStatusListCredential({ attestation: { type: "BitstringStatusList", statusPurpose: "revocation", - encodedList - } + encodedList, + }, }) } diff --git a/packages/vc/src/schemas/valibot.ts b/packages/vc/src/schemas/valibot.ts index d61d6c0..dba256b 100644 --- a/packages/vc/src/schemas/valibot.ts +++ b/packages/vc/src/schemas/valibot.ts @@ -6,8 +6,8 @@ const baseSchema = v.object({ credentialStatus: v.optional( v.object({ id: v.string(), - type: v.string() - }) + type: v.string(), + }), ), credentialSubject: v.looseObject({ id: v.optional(v.string()) }), expirationDate: v.optional(v.string()), @@ -15,7 +15,7 @@ const baseSchema = v.object({ issuanceDate: v.string(), issuer: v.union([v.string(), v.object({ id: v.string() })]), type: v.array(v.string()), - proof: v.optional(v.looseObject({ type: v.optional(v.string()) })) + proof: v.optional(v.looseObject({ type: v.optional(v.string()) })), }) export const credentialSchema = v.pipe( @@ -26,19 +26,19 @@ export const credentialSchema = v.pipe( return { ...input, - issuer + issuer, } as W3CCredential - }) + }), ) export const jwtProofSchema = v.object({ type: v.literal("JwtProof2020"), - jwt: v.string() + jwt: v.string(), }) export const bitstringStatusListClaimSchema = v.object({ id: v.string(), type: v.literal("BitstringStatusList"), statusPurpose: v.string(), - encodedList: v.string() + encodedList: v.string(), }) diff --git a/packages/vc/src/schemas/zod/v3.ts b/packages/vc/src/schemas/zod/v3.ts index efa22a4..ff01bae 100644 --- a/packages/vc/src/schemas/zod/v3.ts +++ b/packages/vc/src/schemas/zod/v3.ts @@ -7,7 +7,7 @@ export const credentialSchema = z credentialStatus: z .object({ id: z.string(), - type: z.string() + type: z.string(), }) .optional(), credentialSubject: z.object({ id: z.string().optional() }).passthrough(), @@ -18,28 +18,28 @@ export const credentialSchema = z type: z.array(z.string()), proof: z .object({ - type: z.string().optional() + type: z.string().optional(), }) .passthrough() - .optional() + .optional(), }) .transform((v) => { const issuer = typeof v.issuer === "string" ? { id: v.issuer } : v.issuer return { ...v, - issuer + issuer, } as W3CCredential }) export const jwtProofSchema = z.object({ type: z.literal("JwtProof2020"), - jwt: z.string() + jwt: z.string(), }) export const bitstringStatusListClaimSchema = z.object({ id: z.string(), type: z.literal("BitstringStatusList"), statusPurpose: z.string(), - encodedList: z.string() + encodedList: z.string(), }) diff --git a/packages/vc/src/schemas/zod/v4.ts b/packages/vc/src/schemas/zod/v4.ts index da556ce..8130c32 100644 --- a/packages/vc/src/schemas/zod/v4.ts +++ b/packages/vc/src/schemas/zod/v4.ts @@ -7,7 +7,7 @@ export const credentialSchema = z credentialStatus: z .object({ id: z.string(), - type: z.string() + type: z.string(), }) .optional(), credentialSubject: z.looseObject({ id: z.string().optional() }), @@ -18,27 +18,27 @@ export const credentialSchema = z type: z.array(z.string()), proof: z .looseObject({ - type: z.string().optional() + type: z.string().optional(), }) - .optional() + .optional(), }) .transform((v) => { const issuer = typeof v.issuer === "string" ? { id: v.issuer } : v.issuer return { ...v, - issuer + issuer, } as W3CCredential }) export const jwtProofSchema = z.object({ type: z.literal("JwtProof2020"), - jwt: z.string() + jwt: z.string(), }) export const bitstringStatusListClaimSchema = z.object({ id: z.string(), type: z.literal("BitstringStatusList"), statusPurpose: z.string(), - encodedList: z.string() + encodedList: z.string(), }) diff --git a/packages/vc/src/signing/sign-credential.test.ts b/packages/vc/src/signing/sign-credential.test.ts index e452923..b59535f 100644 --- a/packages/vc/src/signing/sign-credential.test.ts +++ b/packages/vc/src/signing/sign-credential.test.ts @@ -1,7 +1,7 @@ import { createDidDocumentFromKeypair, createDidWebUri, - getDidResolver + getDidResolver, } from "@agentcommercekit/did" import { createJwtSigner, verifyJwt } from "@agentcommercekit/jwt" import { generateKeypair } from "@agentcommercekit/keys" @@ -20,8 +20,8 @@ test("signCredential creates a valid JWT and verifiable credential", async () => issuerDid, createDidDocumentFromKeypair({ did: issuerDid, - keypair: issuerKeypair - }) + keypair: issuerKeypair, + }), ) const subjectDid = createDidWebUri("https://subject.example.com") @@ -34,20 +34,20 @@ test("signCredential creates a valid JWT and verifiable credential", async () => issuer: issuerDid, subject: subjectDid, attestation: { - test: "test" - } + test: "test", + }, }) // Sign the credential const jwt = await signCredential(credential, { did: issuerDid, signer: createJwtSigner(issuerKeypair), - alg: "ES256K" + alg: "ES256K", }) // Verify the JWT using did-jwt verifier const result = await verifyJwt(jwt, { - resolver + resolver, }) // Verify the basic structure of the decoded payload diff --git a/packages/vc/src/signing/sign-credential.ts b/packages/vc/src/signing/sign-credential.ts index eff5fc2..e642871 100644 --- a/packages/vc/src/signing/sign-credential.ts +++ b/packages/vc/src/signing/sign-credential.ts @@ -12,7 +12,7 @@ import type { Signer } from "./types" */ export async function signCredential( credential: W3CCredential, - signer: Signer + signer: Signer, ): Promise { // options.alg is already a JwtAlgorithm, no conversion needed const jwt = await createVerifiableCredentialJwt(credential, signer) diff --git a/packages/vc/src/signing/sign-presentation.test.ts b/packages/vc/src/signing/sign-presentation.test.ts index a926412..357b174 100644 --- a/packages/vc/src/signing/sign-presentation.test.ts +++ b/packages/vc/src/signing/sign-presentation.test.ts @@ -1,7 +1,7 @@ import { createDidDocumentFromKeypair, createDidWebUri, - getDidResolver + getDidResolver, } from "@agentcommercekit/did" import { createJwtSigner, verifyJwt } from "@agentcommercekit/jwt" import { generateKeypair } from "@agentcommercekit/keys" @@ -19,14 +19,14 @@ resolver.addToCache( holderDid, createDidDocumentFromKeypair({ did: holderDid, - keypair: holderKeypair - }) + keypair: holderKeypair, + }), ) const signer: Signer = { did: holderDid, signer: createJwtSigner(holderKeypair), - alg: "ES256K" + alg: "ES256K", } // Create a mock credential for the presentation @@ -37,8 +37,8 @@ const mockCredential: Verifiable = { credentialSubject: { id: "did:example:subject" }, issuanceDate: new Date().toISOString(), proof: { - type: "Ed25519Signature2018" - } + type: "Ed25519Signature2018", + }, } // Generate an unsigned presentation @@ -46,7 +46,7 @@ const presentation = createPresentation({ credentials: [mockCredential], holder: holderDid, id: "test-presentation", - type: "TestPresentation" + type: "TestPresentation", }) describe("signPresentation", () => { @@ -56,7 +56,7 @@ describe("signPresentation", () => { // Verify the JWT using did-jwt verifier const result = await verifyJwt(jwt, { - resolver + resolver, }) expect(result.payload.iss).toBe(holderDid) @@ -68,14 +68,14 @@ describe("signPresentation", () => { it("includes a challenge and domain", async () => { const jwt = await signPresentation(presentation, signer, { challenge: "test-challenge", - domain: "https://example.com" + domain: "https://example.com", }) const result = await verifyJwt(jwt, { resolver, policies: { - aud: false - } + aud: false, + }, }) expect(result.payload.nonce).toBe("test-challenge") diff --git a/packages/vc/src/signing/sign-presentation.ts b/packages/vc/src/signing/sign-presentation.ts index e5d1a49..abc713d 100644 --- a/packages/vc/src/signing/sign-presentation.ts +++ b/packages/vc/src/signing/sign-presentation.ts @@ -18,12 +18,12 @@ type SignPresentationOptions = { export async function signPresentation( presentation: W3CPresentation, signer: Signer, - options: SignPresentationOptions = {} + options: SignPresentationOptions = {}, ): Promise { const jwt = await createVerifiablePresentationJwt( presentation, signer, - options + options, ) if (!isJwtString(jwt)) { diff --git a/packages/vc/src/verification/is-expired.test.ts b/packages/vc/src/verification/is-expired.test.ts index e240f44..dc8184a 100644 --- a/packages/vc/src/verification/is-expired.test.ts +++ b/packages/vc/src/verification/is-expired.test.ts @@ -13,7 +13,7 @@ describe("isExpired", () => { pastDate.setFullYear(pastDate.getFullYear() - 1) const credential = { - expirationDate: pastDate.toISOString() + expirationDate: pastDate.toISOString(), } as Verifiable expect(isExpired(credential)).toBe(true) @@ -24,7 +24,7 @@ describe("isExpired", () => { futureDate.setFullYear(futureDate.getFullYear() + 1) const credential = { - expirationDate: futureDate.toISOString() + expirationDate: futureDate.toISOString(), } as Verifiable expect(isExpired(credential)).toBe(false) @@ -33,7 +33,7 @@ describe("isExpired", () => { it("handles expiration date exactly at current time", () => { const now = new Date() const credential = { - expirationDate: now.toISOString() + expirationDate: now.toISOString(), } as Verifiable vi.setSystemTime(now) @@ -43,7 +43,7 @@ describe("isExpired", () => { it("handles invalid date strings gracefully", () => { const credential = { - expirationDate: "invalid-date" + expirationDate: "invalid-date", } as Verifiable expect(isExpired(credential)).toBe(false) diff --git a/packages/vc/src/verification/is-revoked.test.ts b/packages/vc/src/verification/is-revoked.test.ts index 170b5af..513760d 100644 --- a/packages/vc/src/verification/is-revoked.test.ts +++ b/packages/vc/src/verification/is-revoked.test.ts @@ -7,7 +7,7 @@ import { isRevocable, isRevoked } from "./is-revoked" describe("isRevocable", () => { it("returns false if no credential status is present", () => { const credential = { - credentialStatus: undefined + credentialStatus: undefined, } as Verifiable expect(isRevocable(credential)).toBe(false) @@ -16,8 +16,8 @@ describe("isRevocable", () => { it("returns false if status list not present", () => { const credential = { credentialStatus: { - statusListIndex: "0" - } + statusListIndex: "0", + }, } as unknown as Verifiable expect(isRevocable(credential)).toBe(false) @@ -26,8 +26,8 @@ describe("isRevocable", () => { it("returns false if index is not present", () => { const credential = { credentialStatus: { - statusListCredential: "https://example.com/status-list/1" - } + statusListCredential: "https://example.com/status-list/1", + }, } as unknown as Verifiable expect(isRevocable(credential)).toBe(false) @@ -37,8 +37,8 @@ describe("isRevocable", () => { const credential = { credentialStatus: { statusListIndex: "0", - statusListCredential: "https://example.com/status-list/1" - } + statusListCredential: "https://example.com/status-list/1", + }, } as unknown as Verifiable expect(isRevocable(credential)).toBe(true) @@ -56,7 +56,7 @@ describe("isRevoked", () => { return createStatusListCredential({ url: "https://example.com/status-list/1", encodedList: bitBuffer.toBitstring(), - issuer: "did:example:123" + issuer: "did:example:123", }) } @@ -71,11 +71,11 @@ describe("isRevoked", () => { it("returns false for non-revocable credentials", async () => { const credential = { - credentialStatus: undefined + credentialStatus: undefined, } as Verifiable mockFetch.mockResolvedValueOnce({ - json: () => Promise.resolve(getStatusListCredential()) + json: () => Promise.resolve(getStatusListCredential()), }) expect(await isRevoked(credential)).toBe(false) @@ -85,8 +85,8 @@ describe("isRevoked", () => { const credential = { credentialStatus: { statusListIndex: "0", - statusListCredential: "https://example.com/status-list/1" - } + statusListCredential: "https://example.com/status-list/1", + }, } as unknown as Verifiable mockFetch.mockRejectedValueOnce(new Error("Network error")) @@ -98,12 +98,12 @@ describe("isRevoked", () => { const credential = { credentialStatus: { statusListIndex: "5", - statusListCredential: "https://example.com/status-list/1" - } + statusListCredential: "https://example.com/status-list/1", + }, } as unknown as Verifiable mockFetch.mockResolvedValueOnce({ - json: () => Promise.resolve(getStatusListCredential()) + json: () => Promise.resolve(getStatusListCredential()), }) expect(await isRevoked(credential)).toBe(false) @@ -113,12 +113,12 @@ describe("isRevoked", () => { const credential = { credentialStatus: { statusListIndex: "5", - statusListCredential: "https://example.com/status-list/1" - } + statusListCredential: "https://example.com/status-list/1", + }, } as unknown as Verifiable mockFetch.mockResolvedValueOnce({ - json: () => Promise.resolve(getStatusListCredential(5)) + json: () => Promise.resolve(getStatusListCredential(5)), }) expect(await isRevoked(credential)).toBe(true) diff --git a/packages/vc/src/verification/is-revoked.ts b/packages/vc/src/verification/is-revoked.ts index 1b1fe19..260a4f7 100644 --- a/packages/vc/src/verification/is-revoked.ts +++ b/packages/vc/src/verification/is-revoked.ts @@ -2,7 +2,7 @@ import { BitBuffer } from "bit-buffers" import { isStatusListCredential } from "../revocation/is-status-list-credential" import type { BitstringStatusListCredential, - Revocable + Revocable, } from "../revocation/types" import type { W3CCredential } from "../types" @@ -13,7 +13,7 @@ import type { W3CCredential } from "../types" * @returns `true` if the credential is revocable, `false` otherwise */ export function isRevocable( - credential: T + credential: T, ): credential is Revocable { return ( credential.credentialStatus !== undefined && @@ -23,7 +23,7 @@ export function isRevocable( } async function fetchStatusList( - credential: Revocable + credential: Revocable, ): Promise { const statusListUrl = credential.credentialStatus.statusListCredential @@ -60,7 +60,7 @@ export async function isRevoked(credential: W3CCredential): Promise { } const statusList = BitBuffer.fromBitstring( - statusListVc.credentialSubject.encodedList + statusListVc.credentialSubject.encodedList, ) const index = parseInt(credential.credentialStatus.statusListIndex, 10) diff --git a/packages/vc/src/verification/parse-jwt-credential.test.ts b/packages/vc/src/verification/parse-jwt-credential.test.ts index 7cbec42..eadd8fb 100644 --- a/packages/vc/src/verification/parse-jwt-credential.test.ts +++ b/packages/vc/src/verification/parse-jwt-credential.test.ts @@ -1,7 +1,7 @@ import { createDidDocumentFromKeypair, createDidWebUri, - getDidResolver + getDidResolver, } from "@agentcommercekit/did" import { createJwtSigner } from "@agentcommercekit/jwt" import { generateKeypair } from "@agentcommercekit/keys" @@ -20,8 +20,8 @@ test("parseJwtCredential should parse a valid credential", async () => { issuerDid, createDidDocumentFromKeypair({ did: issuerDid, - keypair: issuerKeypair - }) + keypair: issuerKeypair, + }), ) const subjectDid = createDidWebUri("https://subject.example.com") @@ -33,14 +33,14 @@ test("parseJwtCredential should parse a valid credential", async () => { issuer: issuerDid, subject: subjectDid, attestation: { - test: "test" - } + test: "test", + }, }) const jwt = await signCredential(credential, { did: issuerDid, signer: createJwtSigner(issuerKeypair), - alg: "ES256K" + alg: "ES256K", }) const vc = await parseJwtCredential(jwt, resolver) @@ -55,6 +55,6 @@ test("verifyCredentialJwt should throw for invalid credential", async () => { const invalidCredential = "invalid.jwt.token" await expect( - parseJwtCredential(invalidCredential, resolver) + parseJwtCredential(invalidCredential, resolver), ).rejects.toThrow() }) diff --git a/packages/vc/src/verification/parse-jwt-credential.ts b/packages/vc/src/verification/parse-jwt-credential.ts index 1b4303c..cb24b46 100644 --- a/packages/vc/src/verification/parse-jwt-credential.ts +++ b/packages/vc/src/verification/parse-jwt-credential.ts @@ -11,7 +11,7 @@ import type { Verifiable, W3CCredential } from "../types" */ export async function parseJwtCredential( jwt: string, - resolver: Resolvable + resolver: Resolvable, ): Promise> { const result = await verifyCredential(jwt, resolver) diff --git a/packages/vc/src/verification/types.ts b/packages/vc/src/verification/types.ts index f6ce5ab..3776d48 100644 --- a/packages/vc/src/verification/types.ts +++ b/packages/vc/src/verification/types.ts @@ -5,6 +5,6 @@ export type ClaimVerifier = { accepts(type: string[]): boolean verify( credentialSubject: CredentialSubject, - resolver: Resolvable + resolver: Resolvable, ): Promise } diff --git a/packages/vc/src/verification/verify-parsed-credential.test.ts b/packages/vc/src/verification/verify-parsed-credential.test.ts index 02ab6aa..2513056 100644 --- a/packages/vc/src/verification/verify-parsed-credential.test.ts +++ b/packages/vc/src/verification/verify-parsed-credential.test.ts @@ -1,7 +1,7 @@ import { createDidDocumentFromKeypair, createDidWebUri, - getDidResolver + getDidResolver, } from "@agentcommercekit/did" import { generateKeypair } from "@agentcommercekit/keys" import { afterEach, beforeEach, describe, expect, it, vi } from "vitest" @@ -12,7 +12,7 @@ import { CredentialRevokedError, InvalidProofError, UnsupportedCredentialTypeError, - UntrustedIssuerError + UntrustedIssuerError, } from "./errors" import { isExpired } from "./is-expired" import { isRevoked } from "./is-revoked" @@ -20,15 +20,15 @@ import { verifyParsedCredential } from "./verify-parsed-credential" import { verifyProof } from "./verify-proof" vi.mock("./is-expired", () => ({ - isExpired: vi.fn() + isExpired: vi.fn(), })) vi.mock("./is-revoked", () => ({ - isRevoked: vi.fn() + isRevoked: vi.fn(), })) vi.mock("./verify-proof", () => ({ - verifyProof: vi.fn() + verifyProof: vi.fn(), })) async function setup() { @@ -41,8 +41,8 @@ async function setup() { issuerDid, createDidDocumentFromKeypair({ did: issuerDid, - keypair: issuerKeypair - }) + keypair: issuerKeypair, + }), ) // Generate an unsigned attestation @@ -52,12 +52,12 @@ async function setup() { subject: subjectDid, issuer: issuerDid, attestation: { - test: "test" - } + test: "test", + }, }) credential.issuer = { - id: issuerDid + id: issuerDid, } const vc = { @@ -65,8 +65,8 @@ async function setup() { // just dummy fields, we mock the actual proof verification proof: { type: "JwtProof2020", - jwt: "test.jwt.token" - } + jwt: "test.jwt.token", + }, } as unknown as Verifiable return { vc, issuerDid, resolver } @@ -88,14 +88,14 @@ describe("verifyParsedCredential", () => { const vc = { ...baseVc, - proof: undefined + proof: undefined, } await expect( verifyParsedCredential(vc, { trustedIssuers: [issuerDid], - resolver - }) + resolver, + }), ).rejects.toThrow(InvalidProofError) }) @@ -107,8 +107,8 @@ describe("verifyParsedCredential", () => { await expect( verifyParsedCredential(vc, { trustedIssuers: [issuerDid], - resolver - }) + resolver, + }), ).rejects.toThrow(CredentialExpiredError) }) @@ -120,8 +120,8 @@ describe("verifyParsedCredential", () => { await expect( verifyParsedCredential(vc, { trustedIssuers: [issuerDid], - resolver - }) + resolver, + }), ).rejects.toThrow(CredentialRevokedError) }) @@ -131,8 +131,8 @@ describe("verifyParsedCredential", () => { await expect( verifyParsedCredential(vc, { trustedIssuers: ["did:example:123"], - resolver - }) + resolver, + }), ).rejects.toThrow(UntrustedIssuerError) }) @@ -144,8 +144,8 @@ describe("verifyParsedCredential", () => { await expect( verifyParsedCredential(vc, { trustedIssuers: [issuerDid], - resolver - }) + resolver, + }), ).rejects.toThrow(InvalidProofError) }) @@ -159,15 +159,15 @@ describe("verifyParsedCredential", () => { verifiers: [ { accepts: () => true, - verify: () => Promise.resolve() + verify: () => Promise.resolve(), }, { accepts: () => true, verify: () => - Promise.reject(new Error("Invalid credential subject")) - } - ] - }) + Promise.reject(new Error("Invalid credential subject")), + }, + ], + }), ).rejects.toThrow("Invalid credential subject") }) @@ -181,10 +181,10 @@ describe("verifyParsedCredential", () => { verifiers: [ { accepts: () => false, - verify: () => Promise.resolve() - } - ] - }) + verify: () => Promise.resolve(), + }, + ], + }), ).rejects.toThrow(UnsupportedCredentialTypeError) }) @@ -198,10 +198,10 @@ describe("verifyParsedCredential", () => { verifiers: [ { accepts: () => true, - verify: () => Promise.resolve() - } - ] - }) + verify: () => Promise.resolve(), + }, + ], + }), ).resolves.not.toThrow() }) @@ -211,8 +211,8 @@ describe("verifyParsedCredential", () => { await expect( verifyParsedCredential(vc, { trustedIssuers: [issuerDid], - resolver - }) + resolver, + }), ).resolves.not.toThrow() }) @@ -225,10 +225,10 @@ describe("verifyParsedCredential", () => { verifiers: [ { accepts: () => true, - verify: () => Promise.resolve() - } - ] - }) + verify: () => Promise.resolve(), + }, + ], + }), ).resolves.not.toThrow() }) }) diff --git a/packages/vc/src/verification/verify-parsed-credential.ts b/packages/vc/src/verification/verify-parsed-credential.ts index 8a68034..3fb3570 100644 --- a/packages/vc/src/verification/verify-parsed-credential.ts +++ b/packages/vc/src/verification/verify-parsed-credential.ts @@ -5,7 +5,7 @@ import { CredentialRevokedError, InvalidProofError, UnsupportedCredentialTypeError, - UntrustedIssuerError + UntrustedIssuerError, } from "./errors" import { isExpired } from "./is-expired" import { isRevoked } from "./is-revoked" @@ -28,7 +28,7 @@ type VerifyCredentialOptions = { } function isVerifiable( - credential: W3CCredential + credential: W3CCredential, ): credential is Verifiable { return ( "proof" in credential && @@ -51,7 +51,7 @@ function isVerifiable( */ export async function verifyParsedCredential( credential: W3CCredential, - options: VerifyCredentialOptions + options: VerifyCredentialOptions, ): Promise { if (!isVerifiable(credential)) { throw new InvalidProofError("Credential does not contain a proof") @@ -74,19 +74,19 @@ export async function verifyParsedCredential( !options.trustedIssuers.includes(credential.issuer.id) ) { throw new UntrustedIssuerError( - `Issuer is not trusted '${credential.issuer.id}'` + `Issuer is not trusted '${credential.issuer.id}'`, ) } // If verifiers are provided, we verify the credential against them. if (options.verifiers?.length) { const verifiers = options.verifiers.filter((v) => - v.accepts(credential.type) + v.accepts(credential.type), ) if (!verifiers.length) { throw new UnsupportedCredentialTypeError( - `Unsupported credential type: ${credential.type.join(", ")}` + `Unsupported credential type: ${credential.type.join(", ")}`, ) } diff --git a/packages/vc/src/verification/verify-proof.test.ts b/packages/vc/src/verification/verify-proof.test.ts index b5732a6..4ad4c92 100644 --- a/packages/vc/src/verification/verify-proof.test.ts +++ b/packages/vc/src/verification/verify-proof.test.ts @@ -8,57 +8,57 @@ vi.mock("did-jwt-vc", async () => { const actual = await vi.importActual("did-jwt-vc") return { ...actual, - verifyCredential: vi.fn() + verifyCredential: vi.fn(), } }) vi.mock("./verify-credential-jwt", () => ({ - verifyCredentialJwt: vi.fn() + verifyCredentialJwt: vi.fn(), })) describe("verifyProof", () => { const mockResolver = { - resolve: vi.fn() + resolve: vi.fn(), } as unknown as Resolvable it("throws for invalid proof payload", async () => { const invalidProof = { - type: "JwtProof2020" + type: "JwtProof2020", // Missing jwt field } await expect(verifyProof(invalidProof, mockResolver)).rejects.toThrow( - InvalidProofError + InvalidProofError, ) }) it("throws for unsupported proof type", async () => { const unsupportedProof = { type: "UnsupportedProofType", - jwt: "some.jwt.token" + jwt: "some.jwt.token", } await expect(verifyProof(unsupportedProof, mockResolver)).rejects.toThrow( - UnsupportedProofTypeError + UnsupportedProofTypeError, ) }) it("handles verification errors from verifyCredentialJwt", async () => { const proofWithInvalidJwt = { type: "JwtProof2020", - jwt: "invalid.jwt.token" + jwt: "invalid.jwt.token", } vi.mocked(verifyCredential).mockRejectedValueOnce(new Error("invalid_jwt")) await expect( - verifyProof(proofWithInvalidJwt, mockResolver) + verifyProof(proofWithInvalidJwt, mockResolver), ).rejects.toThrow(InvalidProofError) }) it("successfully verifies a valid JwtProof2020", async () => { const validProof = { type: "JwtProof2020", - jwt: "valid.jwt.token" + jwt: "valid.jwt.token", } vi.mocked(verifyCredential).mockResolvedValueOnce({} as VerifiedCredential) diff --git a/packages/vc/src/verification/verify-proof.ts b/packages/vc/src/verification/verify-proof.ts index c8d74e6..4f90139 100644 --- a/packages/vc/src/verification/verify-proof.ts +++ b/packages/vc/src/verification/verify-proof.ts @@ -27,7 +27,7 @@ export function isJwtProof(proof: unknown): proof is JwtProof { async function verifyJwtProof( proof: Verifiable["proof"], - resolver: Resolvable + resolver: Resolvable, ): Promise { if (!isJwtProof(proof)) { throw new InvalidProofError() @@ -48,14 +48,14 @@ async function verifyJwtProof( */ export async function verifyProof( proof: Verifiable["proof"], - resolver: Resolvable + resolver: Resolvable, ): Promise { switch (proof.type) { case "JwtProof2020": return verifyJwtProof(proof, resolver) default: throw new UnsupportedProofTypeError( - `Unsupported proof type: ${proof.type}` + `Unsupported proof type: ${proof.type}`, ) } } diff --git a/packages/vc/tsdown.config.ts b/packages/vc/tsdown.config.ts index 06262db..b3f56b0 100644 --- a/packages/vc/tsdown.config.ts +++ b/packages/vc/tsdown.config.ts @@ -5,8 +5,8 @@ export default defineConfig({ "src/index.ts", "src/schemas/zod/v3.ts", "src/schemas/zod/v4.ts", - "src/schemas/valibot.ts" + "src/schemas/valibot.ts", ], dts: true, - silent: true + silent: true, }) diff --git a/packages/vc/vitest.config.ts b/packages/vc/vitest.config.ts index 6a8b09e..7972f77 100644 --- a/packages/vc/vitest.config.ts +++ b/packages/vc/vitest.config.ts @@ -3,6 +3,6 @@ import { defineConfig } from "vitest/config" export default defineConfig({ test: { passWithNoTests: true, - watch: false - } + watch: false, + }, }) diff --git a/prettier.config.js b/prettier.config.js index 5225ab3..36bae3b 100644 --- a/prettier.config.js +++ b/prettier.config.js @@ -7,17 +7,17 @@ const config = { "@prettier/plugin-oxc", // must be first "@ianvs/prettier-plugin-sort-imports", "prettier-plugin-packagejson", - "prettier-plugin-jsdoc" + "prettier-plugin-jsdoc", ], // General config semi: false, singleQuote: false, tabWidth: 2, - trailingComma: "none", + trailingComma: "all", // @ianvs/prettier-plugin-sort-imports - importOrderTypeScriptVersion: "5.0.0" + importOrderTypeScriptVersion: "5.0.0", } export default config diff --git a/tools/api-utils/eslint.config.js b/tools/api-utils/eslint.config.js index 0979926..13fe2a3 100644 --- a/tools/api-utils/eslint.config.js +++ b/tools/api-utils/eslint.config.js @@ -3,5 +3,5 @@ import { config } from "@repo/eslint-config/base" export default config({ - root: import.meta.dirname + root: import.meta.dirname, }) diff --git a/tools/api-utils/src/api-response.ts b/tools/api-utils/src/api-response.ts index 9e2303e..ef131dd 100644 --- a/tools/api-utils/src/api-response.ts +++ b/tools/api-utils/src/api-response.ts @@ -16,7 +16,7 @@ export type ApiSuccessResponse = { export function apiSuccessResponse(data: T): ApiSuccessResponse { return { ok: true, - data + data, } } @@ -28,19 +28,19 @@ export type ApiErrorResponse = { export function formatErrorResponse( error: Error, - message?: string + message?: string, ): ApiErrorResponse { if (error instanceof DidResolutionError) { return { ok: false, - error: message ?? error.message + error: message ?? error.message, } } if (error instanceof CredentialVerificationError) { return { ok: false, - error: message ?? error.message + error: message ?? error.message, } } @@ -48,12 +48,12 @@ export function formatErrorResponse( return { ok: false, error: message ?? "Invalid request", - issues: error.issues + issues: error.issues, } } return { ok: false, - error: message ?? error.message + error: message ?? error.message, } } diff --git a/tools/api-utils/src/exceptions.ts b/tools/api-utils/src/exceptions.ts index 6ae1bd6..8cdba94 100644 --- a/tools/api-utils/src/exceptions.ts +++ b/tools/api-utils/src/exceptions.ts @@ -6,24 +6,24 @@ import { HTTPException } from "hono/http-exception" export function badRequest(message = "Bad Request"): never { throw new HTTPException(400, { - message + message, }) } export function unauthorized(message = "Unauthorized"): never { throw new HTTPException(401, { - message + message, }) } export function notFound(message = "Not Found"): never { throw new HTTPException(404, { - message + message, }) } export function internalServerError(message = "Internal Server Error"): never { throw new HTTPException(500, { - message + message, }) } diff --git a/tools/api-utils/src/middleware/signed-payload-validator.ts b/tools/api-utils/src/middleware/signed-payload-validator.ts index 8558414..34c1b04 100644 --- a/tools/api-utils/src/middleware/signed-payload-validator.ts +++ b/tools/api-utils/src/middleware/signed-payload-validator.ts @@ -14,8 +14,8 @@ interface ValidatedSignedPayload { const signedPayloadSchema = v.object({ payload: v.custom( (v: unknown) => typeof v === "string" && isJwtString(v), - "Invalid JWT format" - ) + "Invalid JWT format", + ), }) /** @@ -35,7 +35,7 @@ const signedPayloadSchema = v.object({ */ export const signedPayloadValidator = ( target: keyof ValidationTargets, - schema: v.GenericSchema + schema: v.GenericSchema, ) => validator(target, async (value, c): Promise> => { const didResolver = c.get("resolver") as Resolvable | undefined @@ -45,7 +45,7 @@ export const signedPayloadValidator = ( const { parsed, body } = await validatePayload( data.payload, schema, - didResolver + didResolver, ) // Enforces a DID for the issuer @@ -55,7 +55,7 @@ export const signedPayloadValidator = ( return { issuer: parsed.issuer, - body + body, } } catch (error) { /** @@ -68,7 +68,7 @@ export const signedPayloadValidator = ( if (isDidUri(issuer) && parsedPayload.success) { return { issuer, - body: parsedPayload.output + body: parsedPayload.output, } } } diff --git a/tools/api-utils/src/validate-payload.test.ts b/tools/api-utils/src/validate-payload.test.ts index 621a9e1..4c0c759 100644 --- a/tools/api-utils/src/validate-payload.test.ts +++ b/tools/api-utils/src/validate-payload.test.ts @@ -2,13 +2,13 @@ import { createDidWebDocumentFromKeypair, DidResolver, getDidResolver, - type createDidWebDocument + type createDidWebDocument, } from "@agentcommercekit/did" import { createJwt, createJwtSigner, type JwtSigner, - type JwtString + type JwtString, } from "@agentcommercekit/jwt" import { generateKeypair, type Keypair } from "@agentcommercekit/keys" import * as v from "valibot" @@ -16,7 +16,7 @@ import { beforeEach, describe, expect, it } from "vitest" import { validatePayload } from "./validate-payload" const testBodySchema = v.object({ - test: v.string() + test: v.string(), }) describe("validatePayload", () => { @@ -25,14 +25,14 @@ describe("validatePayload", () => { let signer: JwtSigner const payload: v.InferOutput = { - test: "testValue" + test: "testValue", } beforeEach(async () => { keypair = await generateKeypair("secp256k1") did = createDidWebDocumentFromKeypair({ keypair, - baseUrl: "https://test.example.com" + baseUrl: "https://test.example.com", }) signer = createJwtSigner(keypair) }) @@ -43,14 +43,14 @@ describe("validatePayload", () => { const jwt = await createJwt(payload, { issuer: did.did, - signer + signer, }) // Validate the JWT const { parsed, body } = await validatePayload( jwt, testBodySchema, - resolver + resolver, ) expect(parsed.issuer).toBe(did.did) @@ -62,7 +62,7 @@ describe("validatePayload", () => { const resolver = new DidResolver() await expect( - validatePayload(invalidJwt, testBodySchema, resolver) + validatePayload(invalidJwt, testBodySchema, resolver), ).rejects.toThrow("Invalid payload") }) @@ -71,11 +71,11 @@ describe("validatePayload", () => { const jwt = await createJwt(payload, { issuer: did.did, - signer + signer, }) await expect( - validatePayload(jwt, testBodySchema, resolver) + validatePayload(jwt, testBodySchema, resolver), ).rejects.toThrow("Invalid payload") }) @@ -86,7 +86,7 @@ describe("validatePayload", () => { // Create a JWT const payload = { sub: "did:example:123", - aud: "did:example:456" + aud: "did:example:456", } const differentKeypair = await generateKeypair("secp256k1") @@ -94,11 +94,11 @@ describe("validatePayload", () => { const jwt = await createJwt(payload, { issuer: did.did, - signer: differentSigner + signer: differentSigner, }) await expect( - validatePayload(jwt, testBodySchema, resolver) + validatePayload(jwt, testBodySchema, resolver), ).rejects.toThrow("Invalid payload") }) @@ -107,16 +107,16 @@ describe("validatePayload", () => { resolver.addToCache(did.did, did.didDocument) const payload = { - invalid: "invalid" + invalid: "invalid", } const jwt = await createJwt(payload, { issuer: did.did, - signer + signer, }) await expect( - validatePayload(jwt, testBodySchema, resolver) + validatePayload(jwt, testBodySchema, resolver), ).rejects.toBeInstanceOf(v.ValiError) }) }) diff --git a/tools/api-utils/src/validate-payload.ts b/tools/api-utils/src/validate-payload.ts index d51f36d..5ac306a 100644 --- a/tools/api-utils/src/validate-payload.ts +++ b/tools/api-utils/src/validate-payload.ts @@ -2,7 +2,7 @@ import type { Resolvable } from "@agentcommercekit/did" import { verifyJwt, type JwtString, - type JwtVerified + type JwtVerified, } from "@agentcommercekit/jwt" import * as v from "valibot" import { unauthorized } from "./exceptions" @@ -21,7 +21,7 @@ export type ParsedPayload = { export async function validatePayload( payload: JwtString, bodySchema: v.GenericSchema, - resolver?: Resolvable + resolver?: Resolvable, ): Promise> { let parsed: JwtVerified @@ -29,8 +29,8 @@ export async function validatePayload( parsed = await verifyJwt(payload, { resolver, policies: { - aud: false - } + aud: false, + }, }) } catch (_e) { unauthorized("Invalid payload") @@ -40,6 +40,6 @@ export async function validatePayload( return { parsed, - body + body, } } diff --git a/tools/api-utils/vitest.config.ts b/tools/api-utils/vitest.config.ts index 6a8b09e..7972f77 100644 --- a/tools/api-utils/vitest.config.ts +++ b/tools/api-utils/vitest.config.ts @@ -3,6 +3,6 @@ import { defineConfig } from "vitest/config" export default defineConfig({ test: { passWithNoTests: true, - watch: false - } + watch: false, + }, }) diff --git a/tools/cli-tools/eslint.config.js b/tools/cli-tools/eslint.config.js index 0979926..13fe2a3 100644 --- a/tools/cli-tools/eslint.config.js +++ b/tools/cli-tools/eslint.config.js @@ -3,5 +3,5 @@ import { config } from "@repo/eslint-config/base" export default config({ - root: import.meta.dirname + root: import.meta.dirname, }) diff --git a/tools/cli-tools/src/formatters.ts b/tools/cli-tools/src/formatters.ts index 7e711a2..617c724 100644 --- a/tools/cli-tools/src/formatters.ts +++ b/tools/cli-tools/src/formatters.ts @@ -8,8 +8,8 @@ export function demoHeader(message: string) { figlet.textSync(message, { font: "Standard", horizontalLayout: "full", - verticalLayout: "full" - }) + verticalLayout: "full", + }), ) } @@ -17,9 +17,9 @@ export function demoFooter(message: string) { return colors.bold( colors.cyan( figlet.textSync(message, { - font: "Small" - }) - ) + font: "Small", + }), + ), ) } @@ -28,11 +28,11 @@ export function demoFooter(message: string) { */ export function sectionHeader( message: string, - { step }: { step?: number } = {} + { step }: { step?: number } = {}, ) { const stepMessage = [ step ? colors.bold(`Step ${step}:`) : undefined, - message + message, ].filter(Boolean) const stepMessageLength = stripAnsi(stepMessage.join(" ")).length diff --git a/tools/cli-tools/src/logger.ts b/tools/cli-tools/src/logger.ts index e8ca4a1..37f9c1e 100644 --- a/tools/cli-tools/src/logger.ts +++ b/tools/cli-tools/src/logger.ts @@ -4,7 +4,7 @@ export function createLogger(name: string, color: colors.Format = colors.gray) { return { log: (...args: Parameters) => { console.log(color(`[${name}]`), ...args) - } + }, } } diff --git a/tools/cli-tools/src/prompts.ts b/tools/cli-tools/src/prompts.ts index 875999a..948ebff 100644 --- a/tools/cli-tools/src/prompts.ts +++ b/tools/cli-tools/src/prompts.ts @@ -7,7 +7,7 @@ import { wordWrap } from "./formatters" */ export async function waitForEnter( message = "Press Enter to continue...", - color = yellow + color = yellow, ) { await input({ message: color(message) }) console.log("") @@ -36,7 +36,7 @@ export function log(...args: (string | LogOptions)[]) { let options: Required = { wrap: true, spacing: 1, - width: 80 + width: 80, } if (typeof args[args.length - 1] === "object") { diff --git a/tools/cli-tools/src/update-env-file.ts b/tools/cli-tools/src/update-env-file.ts index 86a1667..2a5e64e 100644 --- a/tools/cli-tools/src/update-env-file.ts +++ b/tools/cli-tools/src/update-env-file.ts @@ -5,7 +5,7 @@ import { errorMessage, successMessage } from "@repo/cli-tools" // Helper function to update .env file export async function updateEnvFile( newValues: Record, - envPath: string + envPath: string, ) { try { let envContent = "" @@ -53,8 +53,8 @@ export async function updateEnvFile( await fs.writeFile(envPath, finalContent) console.log( successMessage( - `Successfully updated ${path.basename(envPath)} with new keys. ✨` - ) + `Successfully updated ${path.basename(envPath)} with new keys. ✨`, + ), ) } catch (error) { console.error(errorMessage(`Failed to update .env file: ${error}`)) diff --git a/tools/cli-tools/vitest.config.ts b/tools/cli-tools/vitest.config.ts index 6a8b09e..7972f77 100644 --- a/tools/cli-tools/vitest.config.ts +++ b/tools/cli-tools/vitest.config.ts @@ -3,6 +3,6 @@ import { defineConfig } from "vitest/config" export default defineConfig({ test: { passWithNoTests: true, - watch: false - } + watch: false, + }, }) diff --git a/tools/eslint-config/base.js b/tools/eslint-config/base.js index a22e2b4..0f2983c 100644 --- a/tools/eslint-config/base.js +++ b/tools/eslint-config/base.js @@ -15,7 +15,7 @@ export function config({ root }) { return tseslint.config( { - ignores: ["dist/**", ".wrangler/**"] + ignores: ["dist/**", ".wrangler/**"], }, /** @@ -25,9 +25,9 @@ export function config({ root }) { extends: [cspell.recommended], settings: { cspell: { - configFile: "../../cspell.config.yaml" - } - } + configFile: "../../cspell.config.yaml", + }, + }, }, /** @@ -36,7 +36,7 @@ export function config({ root }) { { extends: [markdown.configs.recommended], files: ["**/*.md"], - language: "markdown/gfm" + language: "markdown/gfm", }, /** @@ -45,7 +45,7 @@ export function config({ root }) { { extends: [json.configs.recommended], files: ["**/*.json"], - language: "json/json" + language: "json/json", }, /** @@ -58,14 +58,14 @@ export function config({ root }) { tseslint.configs.strictTypeChecked, tseslint.configs.stylisticTypeChecked, importX.flatConfigs.recommended, - importX.flatConfigs.typescript + importX.flatConfigs.typescript, ], settings: { "import-x/resolver-next": [ createTypeScriptImportResolver({ - project: tsconfigPath - }) - ] + project: tsconfigPath, + }), + ], }, rules: { "@typescript-eslint/consistent-type-definitions": "off", @@ -73,22 +73,22 @@ export function config({ root }) { "warn", { prefer: "type-imports", - fixStyle: "separate-type-imports" // Enforces: import type { Foo } (top-level) - } + fixStyle: "separate-type-imports", // Enforces: import type { Foo } (top-level) + }, ], "@typescript-eslint/no-misused-promises": [ "error", { - checksVoidReturn: false - } + checksVoidReturn: false, + }, ], "@typescript-eslint/no-unused-vars": [ "warn", { argsIgnorePattern: "^_", varsIgnorePattern: "^_", - caughtErrorsIgnorePattern: "^_" - } + caughtErrorsIgnorePattern: "^_", + }, ], "@typescript-eslint/restrict-template-expressions": ["off"], // Disabled: Redundant with @typescript-eslint/consistent-type-imports @@ -96,22 +96,25 @@ export function config({ root }) { // Disabled: Handled by @ianvs/prettier-plugin-sort-imports "import-x/order": "off", // Disabled: Handled by @ianvs/prettier-plugin-sort-imports - "sort-imports": "off" - } + "sort-imports": "off", + }, }, { files: ["**/*.md/*.{js,ts}"], - extends: [markdown.configs.processor, tseslint.configs.disableTypeChecked] + extends: [ + markdown.configs.processor, + tseslint.configs.disableTypeChecked, + ], }, { languageOptions: { parserOptions: { projectService: true, - warnOnUnsupportedTypeScriptVersion: false - } - } + warnOnUnsupportedTypeScriptVersion: false, + }, + }, }, /** @@ -119,11 +122,11 @@ export function config({ root }) { */ { plugins: { - turbo + turbo, }, rules: { - "turbo/no-undeclared-env-vars": "off" - } + "turbo/no-undeclared-env-vars": "off", + }, }, /** @@ -133,8 +136,8 @@ export function config({ root }) { files: ["**/*.test.*"], rules: { "@cspell/spellchecker": "off", - "@typescript-eslint/no-non-null-assertion": "off" - } + "@typescript-eslint/no-non-null-assertion": "off", + }, }, /** @@ -144,13 +147,13 @@ export function config({ root }) { */ { files: ["**/*.js"], - extends: [tseslint.configs.disableTypeChecked] + extends: [tseslint.configs.disableTypeChecked], }, /** * Disable rules that could conflict with prettier. * This should be the last rule. */ - prettier + prettier, ) } diff --git a/turbo.json b/turbo.json index 9e66760..56140a5 100644 --- a/turbo.json +++ b/turbo.json @@ -3,6 +3,9 @@ "ui": "stream", "concurrency": "15", "tasks": { + "//#check:format": {}, + "//#check:packages": {}, + "//#format": {}, "build": { "dependsOn": ["^build"], "inputs": ["$TURBO_DEFAULT$", ".env*"], @@ -18,7 +21,7 @@ ] }, "check:types": { - "dependsOn": ["^check:types", "^build"] + "dependsOn": ["^build"] }, "clean": { "dependsOn": ["^clean"] @@ -32,21 +35,18 @@ "dependsOn": ["lint:fix", "//#format"] }, "lint": { - "dependsOn": ["^lint", "^build"] + "dependsOn": ["^build"] }, "lint:fix": { - "dependsOn": ["^lint:fix", "^build"] + "dependsOn": ["^build"] }, "setup": { "dependsOn": ["^setup"], "cache": false }, "test": { - "dependsOn": ["^test", "^build"] - }, - "//#check:format": {}, - "//#check:packages": {}, - "//#format": {} + "dependsOn": ["^build"] + } }, "globalEnv": ["NODE_ENV"] } From c1e3ffdd2da7dc124886bd342498f2b41e6842c4 Mon Sep 17 00:00:00 2001 From: Matt Venables Date: Wed, 29 Oct 2025 07:27:08 -0400 Subject: [PATCH 6/6] Move shared dev dependencies to root --- demos/e2e/package.json | 6 +- demos/identity-a2a/package.json | 7 +- demos/identity/package.json | 8 +- demos/payments/package.json | 8 +- demos/skyfire-kya/package.json | 6 +- examples/issuer/package.json | 7 +- examples/local-did-host/package.json | 6 +- examples/verifier/package.json | 6 +- package.json | 8 +- packages/ack-id/package.json | 4 - packages/ack-pay/package.json | 4 - packages/agentcommercekit/package.json | 4 - packages/caip/package.json | 4 - packages/did/package.json | 4 - packages/jwt/package.json | 4 - packages/keys/package.json | 6 +- packages/vc/package.json | 4 - pnpm-lock.yaml | 228 ++----------------------- 18 files changed, 34 insertions(+), 290 deletions(-) diff --git a/demos/e2e/package.json b/demos/e2e/package.json index cafb831..1727f0e 100644 --- a/demos/e2e/package.json +++ b/demos/e2e/package.json @@ -32,10 +32,6 @@ }, "devDependencies": { "@repo/eslint-config": "workspace:*", - "@repo/typescript-config": "workspace:*", - "eslint": "9.27.0", - "tsx": "4.19.4", - "typescript": "5.7.3", - "vitest": "3.2.4" + "@repo/typescript-config": "workspace:*" } } diff --git a/demos/identity-a2a/package.json b/demos/identity-a2a/package.json index f3b32f2..7116b8b 100644 --- a/demos/identity-a2a/package.json +++ b/demos/identity-a2a/package.json @@ -36,11 +36,6 @@ "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "@types/express": "5.0.3", - "@types/node": "22.18.13", - "eslint": "9.27.0", - "tsx": "4.19.4", - "typescript": "5.7.3", - "vitest": "3.2.4" + "@types/express": "5.0.3" } } diff --git a/demos/identity/package.json b/demos/identity/package.json index f0bd95a..8866959 100644 --- a/demos/identity/package.json +++ b/demos/identity/package.json @@ -40,12 +40,6 @@ }, "devDependencies": { "@repo/eslint-config": "workspace:*", - "@repo/typescript-config": "workspace:*", - "@types/node": "22.18.13", - "dotenv-cli": "8.0.0", - "eslint": "9.27.0", - "tsx": "4.19.4", - "typescript": "5.7.3", - "vitest": "3.2.4" + "@repo/typescript-config": "workspace:*" } } diff --git a/demos/payments/package.json b/demos/payments/package.json index c9b8a92..f01d2ef 100644 --- a/demos/payments/package.json +++ b/demos/payments/package.json @@ -36,12 +36,6 @@ }, "devDependencies": { "@repo/eslint-config": "workspace:*", - "@repo/typescript-config": "workspace:*", - "@types/node": "22.18.13", - "dotenv-cli": "8.0.0", - "eslint": "9.27.0", - "tsx": "4.19.4", - "typescript": "5.7.3", - "vitest": "3.2.4" + "@repo/typescript-config": "workspace:*" } } diff --git a/demos/skyfire-kya/package.json b/demos/skyfire-kya/package.json index 55c2538..85038a5 100644 --- a/demos/skyfire-kya/package.json +++ b/demos/skyfire-kya/package.json @@ -31,10 +31,6 @@ }, "devDependencies": { "@repo/eslint-config": "workspace:*", - "@repo/typescript-config": "workspace:*", - "eslint": "9.27.0", - "tsx": "4.19.4", - "typescript": "5.7.3", - "vitest": "3.2.4" + "@repo/typescript-config": "workspace:*" } } diff --git a/examples/issuer/package.json b/examples/issuer/package.json index eaf67c8..5f41b3c 100644 --- a/examples/issuer/package.json +++ b/examples/issuer/package.json @@ -40,12 +40,7 @@ "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", "@types/better-sqlite3": "7.6.13", - "@types/node": "22.18.13", - "dotenv-cli": "8.0.0", "drizzle-kit": "0.31.1", - "eslint": "9.27.0", - "tsx": "4.19.4", - "vite-tsconfig-paths": "5.1.4", - "vitest": "3.2.4" + "vite-tsconfig-paths": "5.1.4" } } diff --git a/examples/local-did-host/package.json b/examples/local-did-host/package.json index d554fae..2e01c99 100644 --- a/examples/local-did-host/package.json +++ b/examples/local-did-host/package.json @@ -37,10 +37,6 @@ }, "devDependencies": { "@repo/eslint-config": "workspace:*", - "@repo/typescript-config": "workspace:*", - "dotenv-cli": "8.0.0", - "eslint": "9.27.0", - "tsx": "4.19.4", - "vitest": "3.2.4" + "@repo/typescript-config": "workspace:*" } } diff --git a/examples/verifier/package.json b/examples/verifier/package.json index b7b350d..9379423 100644 --- a/examples/verifier/package.json +++ b/examples/verifier/package.json @@ -35,10 +35,6 @@ }, "devDependencies": { "@repo/eslint-config": "workspace:*", - "@repo/typescript-config": "workspace:*", - "dotenv-cli": "8.0.0", - "eslint": "9.27.0", - "tsx": "4.19.4", - "vitest": "3.2.4" + "@repo/typescript-config": "workspace:*" } } diff --git a/package.json b/package.json index 8579ae4..908e83a 100644 --- a/package.json +++ b/package.json @@ -45,11 +45,17 @@ "@ianvs/prettier-plugin-sort-imports": "4.7.0", "@prettier/plugin-oxc": "0.0.4", "@repo/typescript-config": "workspace:*", + "@types/node": "22.18.13", + "dotenv-cli": "8.0.0", + "eslint": "9.27.0", "prettier": "3.6.2", "prettier-plugin-jsdoc": "1.3.3", "prettier-plugin-packagejson": "2.5.19", + "tsdown": "0.11.12", + "tsx": "4.19.4", "turbo": "2.5.3", - "typescript": "5.7.3" + "typescript": "5.7.3", + "vitest": "3.2.4" }, "packageManager": "pnpm@10.11.0", "engines": { diff --git a/packages/ack-id/package.json b/packages/ack-id/package.json index c180415..5fe5dda 100644 --- a/packages/ack-id/package.json +++ b/packages/ack-id/package.json @@ -87,10 +87,6 @@ "@a2a-js/sdk": "0.2.2", "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "eslint": "9.27.0", - "tsdown": "0.11.12", - "typescript": "5.7.3", - "vitest": "3.2.4", "zod": "3.25.4" }, "peerDependencies": { diff --git a/packages/ack-pay/package.json b/packages/ack-pay/package.json index 3370f4c..3554b0c 100644 --- a/packages/ack-pay/package.json +++ b/packages/ack-pay/package.json @@ -64,10 +64,6 @@ "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "eslint": "9.27.0", - "tsdown": "0.11.12", - "typescript": "5.7.3", - "vitest": "3.2.4", "zod": "3.25.4" }, "peerDependencies": { diff --git a/packages/agentcommercekit/package.json b/packages/agentcommercekit/package.json index fb4b1c0..4888253 100644 --- a/packages/agentcommercekit/package.json +++ b/packages/agentcommercekit/package.json @@ -87,11 +87,7 @@ "@a2a-js/sdk": "0.2.2", "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "eslint": "9.27.0", - "tsdown": "0.11.12", - "typescript": "5.7.3", "valibot": "1.1.0", - "vitest": "3.2.4", "zod": "3.25.4" }, "peerDependencies": { diff --git a/packages/caip/package.json b/packages/caip/package.json index 07e6a80..f79e401 100644 --- a/packages/caip/package.json +++ b/packages/caip/package.json @@ -54,12 +54,8 @@ "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "eslint": "9.27.0", "standard-parse": "0.3.0", - "tsdown": "0.11.12", - "typescript": "5.7.3", "valibot": "1.1.0", - "vitest": "3.2.4", "zod": "3.25.4" }, "peerDependencies": { diff --git a/packages/did/package.json b/packages/did/package.json index d3cc8ac..7a7965a 100644 --- a/packages/did/package.json +++ b/packages/did/package.json @@ -67,11 +67,7 @@ "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", "@types/varint": "6.0.3", - "eslint": "9.27.0", "standard-parse": "0.3.0", - "tsdown": "0.11.12", - "typescript": "5.7.3", - "vitest": "3.2.4", "zod": "3.25.4" }, "peerDependencies": { diff --git a/packages/jwt/package.json b/packages/jwt/package.json index d1078aa..fdc1c19 100644 --- a/packages/jwt/package.json +++ b/packages/jwt/package.json @@ -61,11 +61,7 @@ "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "eslint": "9.27.0", - "tsdown": "0.11.12", - "typescript": "5.7.3", "valibot": "1.1.0", - "vitest": "3.2.4", "zod": "3.25.4" }, "peerDependencies": { diff --git a/packages/keys/package.json b/packages/keys/package.json index 39266cc..eda0dbf 100644 --- a/packages/keys/package.json +++ b/packages/keys/package.json @@ -62,11 +62,7 @@ }, "devDependencies": { "@repo/eslint-config": "workspace:*", - "@repo/typescript-config": "workspace:*", - "eslint": "9.27.0", - "tsdown": "0.11.12", - "typescript": "5.7.3", - "vitest": "3.2.4" + "@repo/typescript-config": "workspace:*" }, "publishConfig": { "access": "public" diff --git a/packages/vc/package.json b/packages/vc/package.json index 0e17f54..1d8a746 100644 --- a/packages/vc/package.json +++ b/packages/vc/package.json @@ -65,10 +65,6 @@ "devDependencies": { "@repo/eslint-config": "workspace:*", "@repo/typescript-config": "workspace:*", - "eslint": "9.27.0", - "tsdown": "0.11.12", - "typescript": "5.7.3", - "vitest": "3.2.4", "zod": "3.25.4" }, "peerDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c355fea..aabc2f8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,6 +23,15 @@ importers: '@repo/typescript-config': specifier: workspace:* version: link:tools/typescript-config + '@types/node': + specifier: 22.18.13 + version: 22.18.13 + dotenv-cli: + specifier: 8.0.0 + version: 8.0.0 + eslint: + specifier: 9.27.0 + version: 9.27.0(jiti@2.6.1) prettier: specifier: 3.6.2 version: 3.6.2 @@ -32,12 +41,21 @@ importers: prettier-plugin-packagejson: specifier: 2.5.19 version: 2.5.19(prettier@3.6.2) + tsdown: + specifier: 0.11.12 + version: 0.11.12(typescript@5.7.3) + tsx: + specifier: 4.19.4 + version: 4.19.4 turbo: specifier: 2.5.3 version: 2.5.3 typescript: specifier: 5.7.3 version: 5.7.3 + vitest: + specifier: 3.2.4 + version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) demos/e2e: dependencies: @@ -60,18 +78,6 @@ importers: '@repo/typescript-config': specifier: workspace:* version: link:../../tools/typescript-config - eslint: - specifier: 9.27.0 - version: 9.27.0(jiti@2.6.1) - tsx: - specifier: 4.19.4 - version: 4.19.4 - typescript: - specifier: 5.7.3 - version: 5.7.3 - vitest: - specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) demos/identity: dependencies: @@ -115,24 +121,6 @@ importers: '@repo/typescript-config': specifier: workspace:* version: link:../../tools/typescript-config - '@types/node': - specifier: 22.18.13 - version: 22.18.13 - dotenv-cli: - specifier: 8.0.0 - version: 8.0.0 - eslint: - specifier: 9.27.0 - version: 9.27.0(jiti@2.6.1) - tsx: - specifier: 4.19.4 - version: 4.19.4 - typescript: - specifier: 5.7.3 - version: 5.7.3 - vitest: - specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) demos/identity-a2a: dependencies: @@ -170,21 +158,6 @@ importers: '@types/express': specifier: 5.0.3 version: 5.0.3 - '@types/node': - specifier: 22.18.13 - version: 22.18.13 - eslint: - specifier: 9.27.0 - version: 9.27.0(jiti@2.6.1) - tsx: - specifier: 4.19.4 - version: 4.19.4 - typescript: - specifier: 5.7.3 - version: 5.7.3 - vitest: - specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) demos/payments: dependencies: @@ -216,24 +189,6 @@ importers: '@repo/typescript-config': specifier: workspace:* version: link:../../tools/typescript-config - '@types/node': - specifier: 22.18.13 - version: 22.18.13 - dotenv-cli: - specifier: 8.0.0 - version: 8.0.0 - eslint: - specifier: 9.27.0 - version: 9.27.0(jiti@2.6.1) - tsx: - specifier: 4.19.4 - version: 4.19.4 - typescript: - specifier: 5.7.3 - version: 5.7.3 - vitest: - specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) demos/skyfire-kya: dependencies: @@ -256,18 +211,6 @@ importers: '@repo/typescript-config': specifier: workspace:* version: link:../../tools/typescript-config - eslint: - specifier: 9.27.0 - version: 9.27.0(jiti@2.6.1) - tsx: - specifier: 4.19.4 - version: 4.19.4 - typescript: - specifier: 5.7.3 - version: 5.7.3 - vitest: - specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) docs: devDependencies: @@ -311,27 +254,12 @@ importers: '@types/better-sqlite3': specifier: 7.6.13 version: 7.6.13 - '@types/node': - specifier: 22.18.13 - version: 22.18.13 - dotenv-cli: - specifier: 8.0.0 - version: 8.0.0 drizzle-kit: specifier: 0.31.1 version: 0.31.1 - eslint: - specifier: 9.27.0 - version: 9.27.0(jiti@2.6.1) - tsx: - specifier: 4.19.4 - version: 4.19.4 vite-tsconfig-paths: specifier: 5.1.4 version: 5.1.4(typescript@5.7.3)(vite@7.1.12(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1)) - vitest: - specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) examples/local-did-host: dependencies: @@ -366,18 +294,6 @@ importers: '@repo/typescript-config': specifier: workspace:* version: link:../../tools/typescript-config - dotenv-cli: - specifier: 8.0.0 - version: 8.0.0 - eslint: - specifier: 9.27.0 - version: 9.27.0(jiti@2.6.1) - tsx: - specifier: 4.19.4 - version: 4.19.4 - vitest: - specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) examples/verifier: dependencies: @@ -406,18 +322,6 @@ importers: '@repo/typescript-config': specifier: workspace:* version: link:../../tools/typescript-config - dotenv-cli: - specifier: 8.0.0 - version: 8.0.0 - eslint: - specifier: 9.27.0 - version: 9.27.0(jiti@2.6.1) - tsx: - specifier: 4.19.4 - version: 4.19.4 - vitest: - specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) packages/ack-id: dependencies: @@ -452,18 +356,6 @@ importers: '@repo/typescript-config': specifier: workspace:* version: link:../../tools/typescript-config - eslint: - specifier: 9.27.0 - version: 9.27.0(jiti@2.6.1) - tsdown: - specifier: 0.11.12 - version: 0.11.12(typescript@5.7.3) - typescript: - specifier: 5.7.3 - version: 5.7.3 - vitest: - specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) zod: specifier: 3.25.4 version: 3.25.4 @@ -492,18 +384,6 @@ importers: '@repo/typescript-config': specifier: workspace:* version: link:../../tools/typescript-config - eslint: - specifier: 9.27.0 - version: 9.27.0(jiti@2.6.1) - tsdown: - specifier: 0.11.12 - version: 0.11.12(typescript@5.7.3) - typescript: - specifier: 5.7.3 - version: 5.7.3 - vitest: - specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) zod: specifier: 3.25.4 version: 3.25.4 @@ -541,21 +421,9 @@ importers: '@repo/typescript-config': specifier: workspace:* version: link:../../tools/typescript-config - eslint: - specifier: 9.27.0 - version: 9.27.0(jiti@2.6.1) - tsdown: - specifier: 0.11.12 - version: 0.11.12(typescript@5.7.3) - typescript: - specifier: 5.7.3 - version: 5.7.3 valibot: specifier: 1.1.0 version: 1.1.0(typescript@5.7.3) - vitest: - specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) zod: specifier: 3.25.4 version: 3.25.4 @@ -568,24 +436,12 @@ importers: '@repo/typescript-config': specifier: workspace:* version: link:../../tools/typescript-config - eslint: - specifier: 9.27.0 - version: 9.27.0(jiti@2.6.1) standard-parse: specifier: 0.3.0 version: 0.3.0(valibot@1.1.0(typescript@5.7.3))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1))(zod@3.25.4) - tsdown: - specifier: 0.11.12 - version: 0.11.12(typescript@5.7.3) - typescript: - specifier: 5.7.3 - version: 5.7.3 valibot: specifier: 1.1.0 version: 1.1.0(typescript@5.7.3) - vitest: - specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) zod: specifier: 3.25.4 version: 3.25.4 @@ -623,21 +479,9 @@ importers: '@types/varint': specifier: 6.0.3 version: 6.0.3 - eslint: - specifier: 9.27.0 - version: 9.27.0(jiti@2.6.1) standard-parse: specifier: 0.3.0 version: 0.3.0(valibot@1.1.0(typescript@5.7.3))(vitest@3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1))(zod@3.25.4) - tsdown: - specifier: 0.11.12 - version: 0.11.12(typescript@5.7.3) - typescript: - specifier: 5.7.3 - version: 5.7.3 - vitest: - specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) zod: specifier: 3.25.4 version: 3.25.4 @@ -657,21 +501,9 @@ importers: '@repo/typescript-config': specifier: workspace:* version: link:../../tools/typescript-config - eslint: - specifier: 9.27.0 - version: 9.27.0(jiti@2.6.1) - tsdown: - specifier: 0.11.12 - version: 0.11.12(typescript@5.7.3) - typescript: - specifier: 5.7.3 - version: 5.7.3 valibot: specifier: 1.1.0 version: 1.1.0(typescript@5.7.3) - vitest: - specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) zod: specifier: 3.25.4 version: 3.25.4 @@ -697,18 +529,6 @@ importers: '@repo/typescript-config': specifier: workspace:* version: link:../../tools/typescript-config - eslint: - specifier: 9.27.0 - version: 9.27.0(jiti@2.6.1) - tsdown: - specifier: 0.11.12 - version: 0.11.12(typescript@5.7.3) - typescript: - specifier: 5.7.3 - version: 5.7.3 - vitest: - specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) packages/vc: dependencies: @@ -737,18 +557,6 @@ importers: '@repo/typescript-config': specifier: workspace:* version: link:../../tools/typescript-config - eslint: - specifier: 9.27.0 - version: 9.27.0(jiti@2.6.1) - tsdown: - specifier: 0.11.12 - version: 0.11.12(typescript@5.7.3) - typescript: - specifier: 5.7.3 - version: 5.7.3 - vitest: - specifier: 3.2.4 - version: 3.2.4(@types/debug@4.1.12)(@types/node@22.18.13)(jiti@2.6.1)(tsx@4.19.4)(yaml@2.8.1) zod: specifier: 3.25.4 version: 3.25.4