agentic-qe 3.3.4 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/v3/qe-queen-coordinator.md +332 -166
- package/.claude/helpers/statusline-v3.cjs +85 -42
- package/.claude/skills/qcsd-ideation-swarm/SKILL.md +7 -4
- package/README.md +71 -2
- package/package.json +1 -1
- package/scripts/cloud-db-config.json +10 -5
- package/scripts/merge-v3-to-root.sql +48 -0
- package/v3/CHANGELOG.md +156 -0
- package/v3/README.md +118 -1
- package/v3/assets/agents/v3/qe-queen-coordinator.md +332 -166
- package/v3/assets/skills/qcsd-ideation-swarm/SKILL.md +7 -4
- package/v3/dist/adapters/a2a/agent-cards/generator.d.ts +153 -0
- package/v3/dist/adapters/a2a/agent-cards/generator.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/agent-cards/generator.js +478 -0
- package/v3/dist/adapters/a2a/agent-cards/generator.js.map +1 -0
- package/v3/dist/adapters/a2a/agent-cards/schema.d.ts +274 -0
- package/v3/dist/adapters/a2a/agent-cards/schema.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/agent-cards/schema.js +135 -0
- package/v3/dist/adapters/a2a/agent-cards/schema.js.map +1 -0
- package/v3/dist/adapters/a2a/agent-cards/validator.d.ts +514 -0
- package/v3/dist/adapters/a2a/agent-cards/validator.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/agent-cards/validator.js +555 -0
- package/v3/dist/adapters/a2a/agent-cards/validator.js.map +1 -0
- package/v3/dist/adapters/a2a/auth/index.d.ts +23 -0
- package/v3/dist/adapters/a2a/auth/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/auth/index.js +85 -0
- package/v3/dist/adapters/a2a/auth/index.js.map +1 -0
- package/v3/dist/adapters/a2a/auth/jwt-utils.d.ts +215 -0
- package/v3/dist/adapters/a2a/auth/jwt-utils.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/auth/jwt-utils.js +314 -0
- package/v3/dist/adapters/a2a/auth/jwt-utils.js.map +1 -0
- package/v3/dist/adapters/a2a/auth/middleware.d.ts +173 -0
- package/v3/dist/adapters/a2a/auth/middleware.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/auth/middleware.js +300 -0
- package/v3/dist/adapters/a2a/auth/middleware.js.map +1 -0
- package/v3/dist/adapters/a2a/auth/oauth-provider.d.ts +308 -0
- package/v3/dist/adapters/a2a/auth/oauth-provider.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/auth/oauth-provider.js +573 -0
- package/v3/dist/adapters/a2a/auth/oauth-provider.js.map +1 -0
- package/v3/dist/adapters/a2a/auth/routes.d.ts +244 -0
- package/v3/dist/adapters/a2a/auth/routes.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/auth/routes.js +496 -0
- package/v3/dist/adapters/a2a/auth/routes.js.map +1 -0
- package/v3/dist/adapters/a2a/auth/scopes.d.ts +219 -0
- package/v3/dist/adapters/a2a/auth/scopes.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/auth/scopes.js +292 -0
- package/v3/dist/adapters/a2a/auth/scopes.js.map +1 -0
- package/v3/dist/adapters/a2a/auth/token-store.d.ts +278 -0
- package/v3/dist/adapters/a2a/auth/token-store.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/auth/token-store.js +453 -0
- package/v3/dist/adapters/a2a/auth/token-store.js.map +1 -0
- package/v3/dist/adapters/a2a/discovery/agent-health.d.ts +226 -0
- package/v3/dist/adapters/a2a/discovery/agent-health.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/discovery/agent-health.js +426 -0
- package/v3/dist/adapters/a2a/discovery/agent-health.js.map +1 -0
- package/v3/dist/adapters/a2a/discovery/discovery-service.d.ts +296 -0
- package/v3/dist/adapters/a2a/discovery/discovery-service.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/discovery/discovery-service.js +520 -0
- package/v3/dist/adapters/a2a/discovery/discovery-service.js.map +1 -0
- package/v3/dist/adapters/a2a/discovery/file-watcher.d.ts +166 -0
- package/v3/dist/adapters/a2a/discovery/file-watcher.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/discovery/file-watcher.js +385 -0
- package/v3/dist/adapters/a2a/discovery/file-watcher.js.map +1 -0
- package/v3/dist/adapters/a2a/discovery/hot-reload-service.d.ts +226 -0
- package/v3/dist/adapters/a2a/discovery/hot-reload-service.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/discovery/hot-reload-service.js +433 -0
- package/v3/dist/adapters/a2a/discovery/hot-reload-service.js.map +1 -0
- package/v3/dist/adapters/a2a/discovery/index.d.ts +18 -0
- package/v3/dist/adapters/a2a/discovery/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/discovery/index.js +54 -0
- package/v3/dist/adapters/a2a/discovery/index.js.map +1 -0
- package/v3/dist/adapters/a2a/discovery/metrics.d.ts +200 -0
- package/v3/dist/adapters/a2a/discovery/metrics.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/discovery/metrics.js +371 -0
- package/v3/dist/adapters/a2a/discovery/metrics.js.map +1 -0
- package/v3/dist/adapters/a2a/discovery/routes.d.ts +184 -0
- package/v3/dist/adapters/a2a/discovery/routes.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/discovery/routes.js +453 -0
- package/v3/dist/adapters/a2a/discovery/routes.js.map +1 -0
- package/v3/dist/adapters/a2a/index.d.ts +18 -0
- package/v3/dist/adapters/a2a/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/index.js +139 -0
- package/v3/dist/adapters/a2a/index.js.map +1 -0
- package/v3/dist/adapters/a2a/jsonrpc/envelope.d.ts +312 -0
- package/v3/dist/adapters/a2a/jsonrpc/envelope.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/jsonrpc/envelope.js +554 -0
- package/v3/dist/adapters/a2a/jsonrpc/envelope.js.map +1 -0
- package/v3/dist/adapters/a2a/jsonrpc/errors.d.ts +244 -0
- package/v3/dist/adapters/a2a/jsonrpc/errors.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/jsonrpc/errors.js +365 -0
- package/v3/dist/adapters/a2a/jsonrpc/errors.js.map +1 -0
- package/v3/dist/adapters/a2a/jsonrpc/index.d.ts +14 -0
- package/v3/dist/adapters/a2a/jsonrpc/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/jsonrpc/index.js +59 -0
- package/v3/dist/adapters/a2a/jsonrpc/index.js.map +1 -0
- package/v3/dist/adapters/a2a/jsonrpc/methods.d.ts +400 -0
- package/v3/dist/adapters/a2a/jsonrpc/methods.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/jsonrpc/methods.js +249 -0
- package/v3/dist/adapters/a2a/jsonrpc/methods.js.map +1 -0
- package/v3/dist/adapters/a2a/notifications/index.d.ts +60 -0
- package/v3/dist/adapters/a2a/notifications/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/notifications/index.js +99 -0
- package/v3/dist/adapters/a2a/notifications/index.js.map +1 -0
- package/v3/dist/adapters/a2a/notifications/retry-queue.d.ts +225 -0
- package/v3/dist/adapters/a2a/notifications/retry-queue.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/notifications/retry-queue.js +449 -0
- package/v3/dist/adapters/a2a/notifications/retry-queue.js.map +1 -0
- package/v3/dist/adapters/a2a/notifications/signature.d.ts +133 -0
- package/v3/dist/adapters/a2a/notifications/signature.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/notifications/signature.js +244 -0
- package/v3/dist/adapters/a2a/notifications/signature.js.map +1 -0
- package/v3/dist/adapters/a2a/notifications/subscription-store.d.ts +243 -0
- package/v3/dist/adapters/a2a/notifications/subscription-store.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/notifications/subscription-store.js +486 -0
- package/v3/dist/adapters/a2a/notifications/subscription-store.js.map +1 -0
- package/v3/dist/adapters/a2a/notifications/webhook-service.d.ts +257 -0
- package/v3/dist/adapters/a2a/notifications/webhook-service.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/notifications/webhook-service.js +542 -0
- package/v3/dist/adapters/a2a/notifications/webhook-service.js.map +1 -0
- package/v3/dist/adapters/a2a/tasks/index.d.ts +16 -0
- package/v3/dist/adapters/a2a/tasks/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/tasks/index.js +33 -0
- package/v3/dist/adapters/a2a/tasks/index.js.map +1 -0
- package/v3/dist/adapters/a2a/tasks/task-manager.d.ts +306 -0
- package/v3/dist/adapters/a2a/tasks/task-manager.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/tasks/task-manager.js +562 -0
- package/v3/dist/adapters/a2a/tasks/task-manager.js.map +1 -0
- package/v3/dist/adapters/a2a/tasks/task-router.d.ts +270 -0
- package/v3/dist/adapters/a2a/tasks/task-router.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/tasks/task-router.js +574 -0
- package/v3/dist/adapters/a2a/tasks/task-router.js.map +1 -0
- package/v3/dist/adapters/a2a/tasks/task-store.d.ts +251 -0
- package/v3/dist/adapters/a2a/tasks/task-store.d.ts.map +1 -0
- package/v3/dist/adapters/a2a/tasks/task-store.js +468 -0
- package/v3/dist/adapters/a2a/tasks/task-store.js.map +1 -0
- package/v3/dist/adapters/a2ui/accessibility/aria-attributes.d.ts +294 -0
- package/v3/dist/adapters/a2ui/accessibility/aria-attributes.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/accessibility/aria-attributes.js +447 -0
- package/v3/dist/adapters/a2ui/accessibility/aria-attributes.js.map +1 -0
- package/v3/dist/adapters/a2ui/accessibility/index.d.ts +83 -0
- package/v3/dist/adapters/a2ui/accessibility/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/accessibility/index.js +155 -0
- package/v3/dist/adapters/a2ui/accessibility/index.js.map +1 -0
- package/v3/dist/adapters/a2ui/accessibility/keyboard-nav.d.ts +177 -0
- package/v3/dist/adapters/a2ui/accessibility/keyboard-nav.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/accessibility/keyboard-nav.js +638 -0
- package/v3/dist/adapters/a2ui/accessibility/keyboard-nav.js.map +1 -0
- package/v3/dist/adapters/a2ui/accessibility/wcag-validator.d.ts +186 -0
- package/v3/dist/adapters/a2ui/accessibility/wcag-validator.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/accessibility/wcag-validator.js +816 -0
- package/v3/dist/adapters/a2ui/accessibility/wcag-validator.js.map +1 -0
- package/v3/dist/adapters/a2ui/catalog/component-schemas.d.ts +227 -0
- package/v3/dist/adapters/a2ui/catalog/component-schemas.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/catalog/component-schemas.js +1090 -0
- package/v3/dist/adapters/a2ui/catalog/component-schemas.js.map +1 -0
- package/v3/dist/adapters/a2ui/catalog/index.d.ts +55 -0
- package/v3/dist/adapters/a2ui/catalog/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/catalog/index.js +100 -0
- package/v3/dist/adapters/a2ui/catalog/index.js.map +1 -0
- package/v3/dist/adapters/a2ui/catalog/qe-catalog.d.ts +456 -0
- package/v3/dist/adapters/a2ui/catalog/qe-catalog.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/catalog/qe-catalog.js +413 -0
- package/v3/dist/adapters/a2ui/catalog/qe-catalog.js.map +1 -0
- package/v3/dist/adapters/a2ui/catalog/standard-catalog.d.ts +581 -0
- package/v3/dist/adapters/a2ui/catalog/standard-catalog.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/catalog/standard-catalog.js +409 -0
- package/v3/dist/adapters/a2ui/catalog/standard-catalog.js.map +1 -0
- package/v3/dist/adapters/a2ui/data/bound-value.d.ts +252 -0
- package/v3/dist/adapters/a2ui/data/bound-value.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/data/bound-value.js +403 -0
- package/v3/dist/adapters/a2ui/data/bound-value.js.map +1 -0
- package/v3/dist/adapters/a2ui/data/index.d.ts +14 -0
- package/v3/dist/adapters/a2ui/data/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/data/index.js +41 -0
- package/v3/dist/adapters/a2ui/data/index.js.map +1 -0
- package/v3/dist/adapters/a2ui/data/json-pointer-resolver.d.ts +187 -0
- package/v3/dist/adapters/a2ui/data/json-pointer-resolver.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/data/json-pointer-resolver.js +425 -0
- package/v3/dist/adapters/a2ui/data/json-pointer-resolver.js.map +1 -0
- package/v3/dist/adapters/a2ui/data/reactive-store.d.ts +241 -0
- package/v3/dist/adapters/a2ui/data/reactive-store.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/data/reactive-store.js +461 -0
- package/v3/dist/adapters/a2ui/data/reactive-store.js.map +1 -0
- package/v3/dist/adapters/a2ui/index.d.ts +17 -0
- package/v3/dist/adapters/a2ui/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/index.js +119 -0
- package/v3/dist/adapters/a2ui/index.js.map +1 -0
- package/v3/dist/adapters/a2ui/integration/agui-sync.d.ts +259 -0
- package/v3/dist/adapters/a2ui/integration/agui-sync.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/integration/agui-sync.js +559 -0
- package/v3/dist/adapters/a2ui/integration/agui-sync.js.map +1 -0
- package/v3/dist/adapters/a2ui/integration/index.d.ts +11 -0
- package/v3/dist/adapters/a2ui/integration/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/integration/index.js +23 -0
- package/v3/dist/adapters/a2ui/integration/index.js.map +1 -0
- package/v3/dist/adapters/a2ui/integration/surface-state-bridge.d.ts +209 -0
- package/v3/dist/adapters/a2ui/integration/surface-state-bridge.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/integration/surface-state-bridge.js +545 -0
- package/v3/dist/adapters/a2ui/integration/surface-state-bridge.js.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/component-builder.d.ts +227 -0
- package/v3/dist/adapters/a2ui/renderer/component-builder.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/component-builder.js +488 -0
- package/v3/dist/adapters/a2ui/renderer/component-builder.js.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/index.d.ts +16 -0
- package/v3/dist/adapters/a2ui/renderer/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/index.js +50 -0
- package/v3/dist/adapters/a2ui/renderer/index.js.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/message-types.d.ts +299 -0
- package/v3/dist/adapters/a2ui/renderer/message-types.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/message-types.js +187 -0
- package/v3/dist/adapters/a2ui/renderer/message-types.js.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/surface-generator.d.ts +210 -0
- package/v3/dist/adapters/a2ui/renderer/surface-generator.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/surface-generator.js +586 -0
- package/v3/dist/adapters/a2ui/renderer/surface-generator.js.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/templates/accessibility-surface.d.ts +149 -0
- package/v3/dist/adapters/a2ui/renderer/templates/accessibility-surface.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/templates/accessibility-surface.js +414 -0
- package/v3/dist/adapters/a2ui/renderer/templates/accessibility-surface.js.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/templates/coverage-surface.d.ts +95 -0
- package/v3/dist/adapters/a2ui/renderer/templates/coverage-surface.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/templates/coverage-surface.js +231 -0
- package/v3/dist/adapters/a2ui/renderer/templates/coverage-surface.js.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/templates/index.d.ts +12 -0
- package/v3/dist/adapters/a2ui/renderer/templates/index.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/templates/index.js +16 -0
- package/v3/dist/adapters/a2ui/renderer/templates/index.js.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/templates/security-surface.d.ts +121 -0
- package/v3/dist/adapters/a2ui/renderer/templates/security-surface.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/templates/security-surface.js +367 -0
- package/v3/dist/adapters/a2ui/renderer/templates/security-surface.js.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/templates/test-results-surface.d.ts +104 -0
- package/v3/dist/adapters/a2ui/renderer/templates/test-results-surface.d.ts.map +1 -0
- package/v3/dist/adapters/a2ui/renderer/templates/test-results-surface.js +294 -0
- package/v3/dist/adapters/a2ui/renderer/templates/test-results-surface.js.map +1 -0
- package/v3/dist/adapters/ag-ui/backpressure-handler.d.ts +201 -0
- package/v3/dist/adapters/ag-ui/backpressure-handler.d.ts.map +1 -0
- package/v3/dist/adapters/ag-ui/backpressure-handler.js +399 -0
- package/v3/dist/adapters/ag-ui/backpressure-handler.js.map +1 -0
- package/v3/dist/adapters/ag-ui/event-adapter.d.ts +360 -0
- package/v3/dist/adapters/ag-ui/event-adapter.d.ts.map +1 -0
- package/v3/dist/adapters/ag-ui/event-adapter.js +1083 -0
- package/v3/dist/adapters/ag-ui/event-adapter.js.map +1 -0
- package/v3/dist/adapters/ag-ui/event-batcher.d.ts +242 -0
- package/v3/dist/adapters/ag-ui/event-batcher.d.ts.map +1 -0
- package/v3/dist/adapters/ag-ui/event-batcher.js +444 -0
- package/v3/dist/adapters/ag-ui/event-batcher.js.map +1 -0
- package/v3/dist/adapters/ag-ui/event-types.d.ts +450 -0
- package/v3/dist/adapters/ag-ui/event-types.d.ts.map +1 -0
- package/v3/dist/adapters/ag-ui/event-types.js +173 -0
- package/v3/dist/adapters/ag-ui/event-types.js.map +1 -0
- package/v3/dist/adapters/ag-ui/index.d.ts +17 -0
- package/v3/dist/adapters/ag-ui/index.d.ts.map +1 -0
- package/v3/dist/adapters/ag-ui/index.js +47 -0
- package/v3/dist/adapters/ag-ui/index.js.map +1 -0
- package/v3/dist/adapters/ag-ui/json-patch-utils.d.ts +136 -0
- package/v3/dist/adapters/ag-ui/json-patch-utils.d.ts.map +1 -0
- package/v3/dist/adapters/ag-ui/json-patch-utils.js +574 -0
- package/v3/dist/adapters/ag-ui/json-patch-utils.js.map +1 -0
- package/v3/dist/adapters/ag-ui/json-patch.d.ts +241 -0
- package/v3/dist/adapters/ag-ui/json-patch.d.ts.map +1 -0
- package/v3/dist/adapters/ag-ui/json-patch.js +726 -0
- package/v3/dist/adapters/ag-ui/json-patch.js.map +1 -0
- package/v3/dist/adapters/ag-ui/state-delta-cache.d.ts +218 -0
- package/v3/dist/adapters/ag-ui/state-delta-cache.d.ts.map +1 -0
- package/v3/dist/adapters/ag-ui/state-delta-cache.js +422 -0
- package/v3/dist/adapters/ag-ui/state-delta-cache.js.map +1 -0
- package/v3/dist/adapters/ag-ui/state-manager.d.ts +249 -0
- package/v3/dist/adapters/ag-ui/state-manager.d.ts.map +1 -0
- package/v3/dist/adapters/ag-ui/state-manager.js +511 -0
- package/v3/dist/adapters/ag-ui/state-manager.js.map +1 -0
- package/v3/dist/adapters/ag-ui/stream-controller.d.ts +195 -0
- package/v3/dist/adapters/ag-ui/stream-controller.d.ts.map +1 -0
- package/v3/dist/adapters/ag-ui/stream-controller.js +481 -0
- package/v3/dist/adapters/ag-ui/stream-controller.js.map +1 -0
- package/v3/dist/adapters/index.d.ts +4 -0
- package/v3/dist/adapters/index.d.ts.map +1 -1
- package/v3/dist/adapters/index.js +89 -0
- package/v3/dist/adapters/index.js.map +1 -1
- package/v3/dist/cli/bundle.js +1507 -425
- package/v3/dist/coordination/consensus/providers/claude-provider.js +1 -1
- package/v3/dist/coordination/consensus/providers/gemini-provider.js +1 -1
- package/v3/dist/coordination/consensus/providers/openai-provider.js +1 -1
- package/v3/dist/init/init-wizard.d.ts.map +1 -1
- package/v3/dist/init/init-wizard.js +19 -4
- package/v3/dist/init/init-wizard.js.map +1 -1
- package/v3/dist/init/migration/config-migrator.d.ts.map +1 -1
- package/v3/dist/init/migration/config-migrator.js +15 -1
- package/v3/dist/init/migration/config-migrator.js.map +1 -1
- package/v3/dist/init/phases/05-learning.js +1 -1
- package/v3/dist/init/phases/05-learning.js.map +1 -1
- package/v3/dist/init/self-configurator.d.ts +7 -0
- package/v3/dist/init/self-configurator.d.ts.map +1 -1
- package/v3/dist/init/self-configurator.js +23 -27
- package/v3/dist/init/self-configurator.js.map +1 -1
- package/v3/dist/integrations/ruvector/interfaces.js +1 -1
- package/v3/dist/integrations/ruvector/interfaces.js.map +1 -1
- package/v3/dist/kernel/index.d.ts +1 -1
- package/v3/dist/kernel/index.d.ts.map +1 -1
- package/v3/dist/kernel/index.js +3 -1
- package/v3/dist/kernel/index.js.map +1 -1
- package/v3/dist/kernel/plugin-loader.d.ts.map +1 -1
- package/v3/dist/kernel/plugin-loader.js +6 -1
- package/v3/dist/kernel/plugin-loader.js.map +1 -1
- package/v3/dist/kernel/unified-memory.d.ts +123 -0
- package/v3/dist/kernel/unified-memory.d.ts.map +1 -1
- package/v3/dist/kernel/unified-memory.js +258 -2
- package/v3/dist/kernel/unified-memory.js.map +1 -1
- package/v3/dist/learning/qe-unified-memory.js +1 -1
- package/v3/dist/learning/qe-unified-memory.js.map +1 -1
- package/v3/dist/learning/real-qe-reasoning-bank.js +2 -2
- package/v3/dist/learning/real-qe-reasoning-bank.js.map +1 -1
- package/v3/dist/learning/sqlite-persistence.d.ts +1 -1
- package/v3/dist/learning/sqlite-persistence.js +1 -1
- package/v3/dist/learning/sqlite-persistence.js.map +1 -1
- package/v3/dist/learning/v2-to-v3-migration.d.ts +2 -2
- package/v3/dist/learning/v2-to-v3-migration.d.ts.map +1 -1
- package/v3/dist/learning/v2-to-v3-migration.js +2 -2
- package/v3/dist/learning/v2-to-v3-migration.js.map +1 -1
- package/v3/dist/mcp/bundle.js +63075 -53304
- package/v3/dist/mcp/entry.d.ts +5 -0
- package/v3/dist/mcp/entry.d.ts.map +1 -1
- package/v3/dist/mcp/entry.js +36 -0
- package/v3/dist/mcp/entry.js.map +1 -1
- package/v3/dist/mcp/http-server.d.ts +95 -0
- package/v3/dist/mcp/http-server.d.ts.map +1 -0
- package/v3/dist/mcp/http-server.js +833 -0
- package/v3/dist/mcp/http-server.js.map +1 -0
- package/v3/dist/mcp/protocol-server.d.ts +6 -0
- package/v3/dist/mcp/protocol-server.d.ts.map +1 -1
- package/v3/dist/mcp/protocol-server.js +40 -0
- package/v3/dist/mcp/protocol-server.js.map +1 -1
- package/v3/dist/mcp/transport/index.d.ts +25 -3
- package/v3/dist/mcp/transport/index.d.ts.map +1 -1
- package/v3/dist/mcp/transport/index.js +22 -4
- package/v3/dist/mcp/transport/index.js.map +1 -1
- package/v3/dist/mcp/transport/sse/connection-manager.d.ts +84 -0
- package/v3/dist/mcp/transport/sse/connection-manager.d.ts.map +1 -0
- package/v3/dist/mcp/transport/sse/connection-manager.js +271 -0
- package/v3/dist/mcp/transport/sse/connection-manager.js.map +1 -0
- package/v3/dist/mcp/transport/sse/index.d.ts +10 -0
- package/v3/dist/mcp/transport/sse/index.d.ts.map +1 -0
- package/v3/dist/mcp/transport/sse/index.js +15 -0
- package/v3/dist/mcp/transport/sse/index.js.map +1 -0
- package/v3/dist/mcp/transport/sse/sse-transport.d.ts +56 -0
- package/v3/dist/mcp/transport/sse/sse-transport.d.ts.map +1 -0
- package/v3/dist/mcp/transport/sse/sse-transport.js +381 -0
- package/v3/dist/mcp/transport/sse/sse-transport.js.map +1 -0
- package/v3/dist/mcp/transport/sse/types.d.ts +237 -0
- package/v3/dist/mcp/transport/sse/types.d.ts.map +1 -0
- package/v3/dist/mcp/transport/sse/types.js +37 -0
- package/v3/dist/mcp/transport/sse/types.js.map +1 -0
- package/v3/dist/mcp/transport/websocket/connection-manager.d.ts +143 -0
- package/v3/dist/mcp/transport/websocket/connection-manager.d.ts.map +1 -0
- package/v3/dist/mcp/transport/websocket/connection-manager.js +522 -0
- package/v3/dist/mcp/transport/websocket/connection-manager.js.map +1 -0
- package/v3/dist/mcp/transport/websocket/index.d.ts +10 -0
- package/v3/dist/mcp/transport/websocket/index.d.ts.map +1 -0
- package/v3/dist/mcp/transport/websocket/index.js +19 -0
- package/v3/dist/mcp/transport/websocket/index.js.map +1 -0
- package/v3/dist/mcp/transport/websocket/types.d.ts +354 -0
- package/v3/dist/mcp/transport/websocket/types.d.ts.map +1 -0
- package/v3/dist/mcp/transport/websocket/types.js +49 -0
- package/v3/dist/mcp/transport/websocket/types.js.map +1 -0
- package/v3/dist/mcp/transport/websocket/websocket-transport.d.ts +77 -0
- package/v3/dist/mcp/transport/websocket/websocket-transport.d.ts.map +1 -0
- package/v3/dist/mcp/transport/websocket/websocket-transport.js +622 -0
- package/v3/dist/mcp/transport/websocket/websocket-transport.js.map +1 -0
- package/v3/dist/memory/crdt/convergence-tracker.d.ts +59 -0
- package/v3/dist/memory/crdt/convergence-tracker.d.ts.map +1 -0
- package/v3/dist/memory/crdt/convergence-tracker.js +325 -0
- package/v3/dist/memory/crdt/convergence-tracker.js.map +1 -0
- package/v3/dist/memory/crdt/crdt-store.d.ts +55 -0
- package/v3/dist/memory/crdt/crdt-store.d.ts.map +1 -0
- package/v3/dist/memory/crdt/crdt-store.js +582 -0
- package/v3/dist/memory/crdt/crdt-store.js.map +1 -0
- package/v3/dist/memory/crdt/g-counter.d.ts +47 -0
- package/v3/dist/memory/crdt/g-counter.d.ts.map +1 -0
- package/v3/dist/memory/crdt/g-counter.js +134 -0
- package/v3/dist/memory/crdt/g-counter.js.map +1 -0
- package/v3/dist/memory/crdt/index.d.ts +52 -0
- package/v3/dist/memory/crdt/index.d.ts.map +1 -0
- package/v3/dist/memory/crdt/index.js +66 -0
- package/v3/dist/memory/crdt/index.js.map +1 -0
- package/v3/dist/memory/crdt/lww-register.d.ts +40 -0
- package/v3/dist/memory/crdt/lww-register.d.ts.map +1 -0
- package/v3/dist/memory/crdt/lww-register.js +133 -0
- package/v3/dist/memory/crdt/lww-register.js.map +1 -0
- package/v3/dist/memory/crdt/or-set.d.ts +62 -0
- package/v3/dist/memory/crdt/or-set.d.ts.map +1 -0
- package/v3/dist/memory/crdt/or-set.js +336 -0
- package/v3/dist/memory/crdt/or-set.js.map +1 -0
- package/v3/dist/memory/crdt/pn-counter.d.ts +53 -0
- package/v3/dist/memory/crdt/pn-counter.d.ts.map +1 -0
- package/v3/dist/memory/crdt/pn-counter.js +147 -0
- package/v3/dist/memory/crdt/pn-counter.js.map +1 -0
- package/v3/dist/memory/crdt/types.d.ts +397 -0
- package/v3/dist/memory/crdt/types.d.ts.map +1 -0
- package/v3/dist/memory/crdt/types.js +12 -0
- package/v3/dist/memory/crdt/types.js.map +1 -0
- package/v3/dist/memory/index.d.ts +5 -2
- package/v3/dist/memory/index.d.ts.map +1 -1
- package/v3/dist/memory/index.js +5 -2
- package/v3/dist/memory/index.js.map +1 -1
- package/v3/dist/performance/benchmarks.d.ts +215 -0
- package/v3/dist/performance/benchmarks.d.ts.map +1 -0
- package/v3/dist/performance/benchmarks.js +516 -0
- package/v3/dist/performance/benchmarks.js.map +1 -0
- package/v3/dist/performance/ci-gates.d.ts +149 -0
- package/v3/dist/performance/ci-gates.d.ts.map +1 -0
- package/v3/dist/performance/ci-gates.js +425 -0
- package/v3/dist/performance/ci-gates.js.map +1 -0
- package/v3/dist/performance/index.d.ts +18 -0
- package/v3/dist/performance/index.d.ts.map +1 -0
- package/v3/dist/performance/index.js +26 -0
- package/v3/dist/performance/index.js.map +1 -0
- package/v3/dist/performance/optimizer.d.ts +323 -0
- package/v3/dist/performance/optimizer.d.ts.map +1 -0
- package/v3/dist/performance/optimizer.js +592 -0
- package/v3/dist/performance/optimizer.js.map +1 -0
- package/v3/dist/performance/profiler.d.ts +195 -0
- package/v3/dist/performance/profiler.d.ts.map +1 -0
- package/v3/dist/performance/profiler.js +369 -0
- package/v3/dist/performance/profiler.js.map +1 -0
- package/v3/dist/performance/run-gates.d.ts +23 -0
- package/v3/dist/performance/run-gates.d.ts.map +1 -0
- package/v3/dist/performance/run-gates.js +122 -0
- package/v3/dist/performance/run-gates.js.map +1 -0
- package/v3/dist/sync/claude-flow-bridge.d.ts +1 -1
- package/v3/dist/sync/claude-flow-bridge.js +1 -1
- package/v3/dist/sync/interfaces.d.ts +6 -0
- package/v3/dist/sync/interfaces.d.ts.map +1 -1
- package/v3/dist/sync/interfaces.js +34 -47
- package/v3/dist/sync/interfaces.js.map +1 -1
- package/v3/dist/sync/readers/sqlite-reader.d.ts +1 -1
- package/v3/dist/sync/readers/sqlite-reader.js +1 -1
- package/v3/dist/testing/index.d.ts +6 -0
- package/v3/dist/testing/index.d.ts.map +1 -0
- package/v3/dist/testing/index.js +7 -0
- package/v3/dist/testing/index.js.map +1 -0
- package/v3/dist/testing/load/agent-load-tester.d.ts +221 -0
- package/v3/dist/testing/load/agent-load-tester.d.ts.map +1 -0
- package/v3/dist/testing/load/agent-load-tester.js +566 -0
- package/v3/dist/testing/load/agent-load-tester.js.map +1 -0
- package/v3/dist/testing/load/bottleneck-analyzer.d.ts +150 -0
- package/v3/dist/testing/load/bottleneck-analyzer.d.ts.map +1 -0
- package/v3/dist/testing/load/bottleneck-analyzer.js +442 -0
- package/v3/dist/testing/load/bottleneck-analyzer.js.map +1 -0
- package/v3/dist/testing/load/index.d.ts +17 -0
- package/v3/dist/testing/load/index.d.ts.map +1 -0
- package/v3/dist/testing/load/index.js +23 -0
- package/v3/dist/testing/load/index.js.map +1 -0
- package/v3/dist/testing/load/metrics-collector.d.ts +275 -0
- package/v3/dist/testing/load/metrics-collector.d.ts.map +1 -0
- package/v3/dist/testing/load/metrics-collector.js +475 -0
- package/v3/dist/testing/load/metrics-collector.js.map +1 -0
- package/v3/package.json +5 -1
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A2A OAuth 2.0 JWT Middleware
|
|
3
|
+
*
|
|
4
|
+
* JWT validation middleware for protecting A2A endpoints.
|
|
5
|
+
* Supports Bearer token authentication, scope validation, and optional auth.
|
|
6
|
+
*
|
|
7
|
+
* @module adapters/a2a/auth/middleware
|
|
8
|
+
* @see https://datatracker.ietf.org/doc/html/rfc6750
|
|
9
|
+
*/
|
|
10
|
+
import type { HttpRequest, HttpResponse, NextFunction, AuthenticatedRequest } from '../discovery/routes.js';
|
|
11
|
+
/**
|
|
12
|
+
* Token claims extracted from JWT
|
|
13
|
+
*/
|
|
14
|
+
export interface TokenClaims {
|
|
15
|
+
/** Subject (user/client ID) */
|
|
16
|
+
readonly sub: string;
|
|
17
|
+
/** Issuer */
|
|
18
|
+
readonly iss?: string;
|
|
19
|
+
/** Audience */
|
|
20
|
+
readonly aud?: string | string[];
|
|
21
|
+
/** Expiration time (Unix timestamp) */
|
|
22
|
+
readonly exp?: number;
|
|
23
|
+
/** Issued at (Unix timestamp) */
|
|
24
|
+
readonly iat?: number;
|
|
25
|
+
/** Not before (Unix timestamp) */
|
|
26
|
+
readonly nbf?: number;
|
|
27
|
+
/** JWT ID */
|
|
28
|
+
readonly jti?: string;
|
|
29
|
+
/** OAuth 2.0 scopes (space-separated or array) */
|
|
30
|
+
readonly scope?: string | string[];
|
|
31
|
+
/** Client ID for client credentials grant */
|
|
32
|
+
readonly client_id?: string;
|
|
33
|
+
/** Additional custom claims */
|
|
34
|
+
readonly [key: string]: unknown;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* JWT verifier interface
|
|
38
|
+
* Allows plugging in different JWT verification implementations
|
|
39
|
+
*/
|
|
40
|
+
export interface JWTVerifier {
|
|
41
|
+
/**
|
|
42
|
+
* Verify a JWT token and return the claims
|
|
43
|
+
* @throws Error if token is invalid
|
|
44
|
+
*/
|
|
45
|
+
verify(token: string): Promise<TokenClaims>;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Extended request with authentication info
|
|
49
|
+
*/
|
|
50
|
+
export interface JWTAuthenticatedRequest extends AuthenticatedRequest {
|
|
51
|
+
/** Token claims */
|
|
52
|
+
claims?: TokenClaims;
|
|
53
|
+
/** Parsed scopes from token */
|
|
54
|
+
scopes?: string[];
|
|
55
|
+
/** Raw token (for forwarding) */
|
|
56
|
+
token?: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Middleware options
|
|
60
|
+
*/
|
|
61
|
+
export interface JWTMiddlewareOptions {
|
|
62
|
+
/** JWT verifier instance */
|
|
63
|
+
readonly verifier: JWTVerifier;
|
|
64
|
+
/** Allow requests without Authorization header (sets user to undefined) */
|
|
65
|
+
readonly optional?: boolean;
|
|
66
|
+
/** Required audience claim */
|
|
67
|
+
readonly audience?: string;
|
|
68
|
+
/** Required issuer claim */
|
|
69
|
+
readonly issuer?: string;
|
|
70
|
+
/** Clock tolerance in seconds for exp/nbf validation */
|
|
71
|
+
readonly clockTolerance?: number;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Scope requirement options
|
|
75
|
+
*/
|
|
76
|
+
export interface ScopeOptions {
|
|
77
|
+
/** Require all scopes (AND) vs any scope (OR) */
|
|
78
|
+
readonly requireAll?: boolean;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* OAuth 2.0 error types as defined in RFC 6749
|
|
82
|
+
*/
|
|
83
|
+
export type OAuthErrorType = 'invalid_request' | 'invalid_client' | 'invalid_grant' | 'unauthorized_client' | 'unsupported_grant_type' | 'invalid_scope' | 'access_denied' | 'invalid_token' | 'insufficient_scope';
|
|
84
|
+
/**
|
|
85
|
+
* OAuth 2.0 error response
|
|
86
|
+
*/
|
|
87
|
+
export interface OAuthError {
|
|
88
|
+
readonly error: OAuthErrorType;
|
|
89
|
+
readonly error_description?: string;
|
|
90
|
+
readonly error_uri?: string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Create an OAuth 2.0 error response
|
|
94
|
+
*/
|
|
95
|
+
export declare function createOAuthError(type: OAuthErrorType, description?: string, uri?: string): OAuthError;
|
|
96
|
+
/**
|
|
97
|
+
* Extract Bearer token from Authorization header
|
|
98
|
+
* @param req HTTP request
|
|
99
|
+
* @returns Token string or null if not present/invalid
|
|
100
|
+
*/
|
|
101
|
+
export declare function extractBearerToken(req: HttpRequest): string | null;
|
|
102
|
+
/**
|
|
103
|
+
* Parse scope string or array into array of scopes
|
|
104
|
+
*/
|
|
105
|
+
export declare function parseScopes(scope: string | string[] | undefined): string[];
|
|
106
|
+
/**
|
|
107
|
+
* Create JWT authentication middleware
|
|
108
|
+
*
|
|
109
|
+
* @param options Middleware options
|
|
110
|
+
* @returns Express-compatible middleware function
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* ```typescript
|
|
114
|
+
* const authMiddleware = createJWTMiddleware({
|
|
115
|
+
* verifier: myJWTVerifier,
|
|
116
|
+
* issuer: 'https://auth.example.com',
|
|
117
|
+
* audience: 'api://my-api',
|
|
118
|
+
* });
|
|
119
|
+
*
|
|
120
|
+
* app.use('/api', authMiddleware);
|
|
121
|
+
* ```
|
|
122
|
+
*/
|
|
123
|
+
export declare function createJWTMiddleware(options: JWTMiddlewareOptions): (req: HttpRequest, res: HttpResponse, next?: NextFunction) => Promise<void>;
|
|
124
|
+
/**
|
|
125
|
+
* Shorthand factory for JWT auth middleware
|
|
126
|
+
*/
|
|
127
|
+
export declare function jwtAuthMiddleware(options: JWTMiddlewareOptions): (req: HttpRequest, res: HttpResponse, next?: NextFunction) => Promise<void>;
|
|
128
|
+
/**
|
|
129
|
+
* Create scope validation middleware
|
|
130
|
+
*
|
|
131
|
+
* Must be used after JWT authentication middleware
|
|
132
|
+
*
|
|
133
|
+
* @param requiredScopes Scopes to require
|
|
134
|
+
* @param options Scope options
|
|
135
|
+
* @returns Express-compatible middleware function
|
|
136
|
+
*
|
|
137
|
+
* @example
|
|
138
|
+
* ```typescript
|
|
139
|
+
* // Require all scopes
|
|
140
|
+
* app.post('/tasks', authMiddleware, requireScopes('tasks:write', 'tasks:read'));
|
|
141
|
+
*
|
|
142
|
+
* // Require any scope
|
|
143
|
+
* app.get('/tasks', authMiddleware, requireScopes('tasks:read', 'tasks:admin', { requireAll: false }));
|
|
144
|
+
* ```
|
|
145
|
+
*/
|
|
146
|
+
export declare function requireScopes(...args: [...string[], ScopeOptions] | string[]): (req: HttpRequest, res: HttpResponse, next?: NextFunction) => void;
|
|
147
|
+
/**
|
|
148
|
+
* Check if request has a specific scope
|
|
149
|
+
* Utility function for conditional logic in handlers
|
|
150
|
+
*/
|
|
151
|
+
export declare function hasScope(req: HttpRequest, scope: string): boolean;
|
|
152
|
+
/**
|
|
153
|
+
* Check if request has any of the specified scopes
|
|
154
|
+
*/
|
|
155
|
+
export declare function hasAnyScope(req: HttpRequest, scopes: string[]): boolean;
|
|
156
|
+
/**
|
|
157
|
+
* Check if request has all of the specified scopes
|
|
158
|
+
*/
|
|
159
|
+
export declare function hasAllScopes(req: HttpRequest, scopes: string[]): boolean;
|
|
160
|
+
/**
|
|
161
|
+
* Create optional authentication middleware
|
|
162
|
+
* Same as jwtAuthMiddleware with optional: true
|
|
163
|
+
*/
|
|
164
|
+
export declare function optionalAuth(options: Omit<JWTMiddlewareOptions, 'optional'>): (req: HttpRequest, res: HttpResponse, next?: NextFunction) => Promise<void>;
|
|
165
|
+
/**
|
|
166
|
+
* No-op authentication middleware for testing/development
|
|
167
|
+
* Sets a mock user on the request
|
|
168
|
+
*/
|
|
169
|
+
export declare function mockAuthMiddleware(mockUser?: {
|
|
170
|
+
id: string;
|
|
171
|
+
scopes?: string[];
|
|
172
|
+
}): (req: HttpRequest, res: HttpResponse, next?: NextFunction) => void;
|
|
173
|
+
//# sourceMappingURL=middleware.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../../../../src/adapters/a2a/auth/middleware.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A2A OAuth 2.0 JWT Middleware
|
|
3
|
+
*
|
|
4
|
+
* JWT validation middleware for protecting A2A endpoints.
|
|
5
|
+
* Supports Bearer token authentication, scope validation, and optional auth.
|
|
6
|
+
*
|
|
7
|
+
* @module adapters/a2a/auth/middleware
|
|
8
|
+
* @see https://datatracker.ietf.org/doc/html/rfc6750
|
|
9
|
+
*/
|
|
10
|
+
import { A2A_ERRORS, A2A_ERROR_MESSAGES, getHttpStatusCode, } from '../jsonrpc/errors.js';
|
|
11
|
+
/**
|
|
12
|
+
* Create an OAuth 2.0 error response
|
|
13
|
+
*/
|
|
14
|
+
export function createOAuthError(type, description, uri) {
|
|
15
|
+
const error = { error: type };
|
|
16
|
+
if (description) {
|
|
17
|
+
error.error_description = description;
|
|
18
|
+
}
|
|
19
|
+
if (uri) {
|
|
20
|
+
error.error_uri = uri;
|
|
21
|
+
}
|
|
22
|
+
return error;
|
|
23
|
+
}
|
|
24
|
+
// ============================================================================
|
|
25
|
+
// Token Extraction
|
|
26
|
+
// ============================================================================
|
|
27
|
+
/**
|
|
28
|
+
* Extract Bearer token from Authorization header
|
|
29
|
+
* @param req HTTP request
|
|
30
|
+
* @returns Token string or null if not present/invalid
|
|
31
|
+
*/
|
|
32
|
+
export function extractBearerToken(req) {
|
|
33
|
+
const authHeader = req.header('Authorization');
|
|
34
|
+
if (!authHeader) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
// RFC 6750: Bearer token must be in "Bearer <token>" format
|
|
38
|
+
const parts = authHeader.split(' ');
|
|
39
|
+
if (parts.length !== 2 || parts[0].toLowerCase() !== 'bearer') {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
const token = parts[1];
|
|
43
|
+
// Basic validation: token should not be empty
|
|
44
|
+
if (!token || token.length === 0) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
return token;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Parse scope string or array into array of scopes
|
|
51
|
+
*/
|
|
52
|
+
export function parseScopes(scope) {
|
|
53
|
+
if (!scope) {
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
if (Array.isArray(scope)) {
|
|
57
|
+
return scope;
|
|
58
|
+
}
|
|
59
|
+
// OAuth 2.0 uses space-separated scopes
|
|
60
|
+
return scope.split(' ').filter((s) => s.length > 0);
|
|
61
|
+
}
|
|
62
|
+
// ============================================================================
|
|
63
|
+
// JWT Middleware
|
|
64
|
+
// ============================================================================
|
|
65
|
+
/**
|
|
66
|
+
* Create JWT authentication middleware
|
|
67
|
+
*
|
|
68
|
+
* @param options Middleware options
|
|
69
|
+
* @returns Express-compatible middleware function
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* const authMiddleware = createJWTMiddleware({
|
|
74
|
+
* verifier: myJWTVerifier,
|
|
75
|
+
* issuer: 'https://auth.example.com',
|
|
76
|
+
* audience: 'api://my-api',
|
|
77
|
+
* });
|
|
78
|
+
*
|
|
79
|
+
* app.use('/api', authMiddleware);
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export function createJWTMiddleware(options) {
|
|
83
|
+
const { verifier, optional = false, audience, issuer, clockTolerance = 0 } = options;
|
|
84
|
+
return async (req, res, next) => {
|
|
85
|
+
const authReq = req;
|
|
86
|
+
try {
|
|
87
|
+
// Extract token
|
|
88
|
+
const token = extractBearerToken(req);
|
|
89
|
+
if (!token) {
|
|
90
|
+
if (optional) {
|
|
91
|
+
// Allow request without auth
|
|
92
|
+
authReq.user = undefined;
|
|
93
|
+
authReq.claims = undefined;
|
|
94
|
+
authReq.scopes = [];
|
|
95
|
+
if (next)
|
|
96
|
+
next();
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
// Return 401 with WWW-Authenticate header (RFC 6750)
|
|
100
|
+
res.setHeader('WWW-Authenticate', 'Bearer realm="a2a"');
|
|
101
|
+
res
|
|
102
|
+
.status(getHttpStatusCode(A2A_ERRORS.AUTHENTICATION_REQUIRED))
|
|
103
|
+
.json(createOAuthError('invalid_request', 'Missing Authorization header'));
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
// Verify token
|
|
107
|
+
let claims;
|
|
108
|
+
try {
|
|
109
|
+
claims = await verifier.verify(token);
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
const message = error instanceof Error ? error.message : 'Token verification failed';
|
|
113
|
+
res.setHeader('WWW-Authenticate', `Bearer realm="a2a", error="invalid_token", error_description="${message}"`);
|
|
114
|
+
res
|
|
115
|
+
.status(getHttpStatusCode(A2A_ERRORS.AUTHENTICATION_REQUIRED))
|
|
116
|
+
.json(createOAuthError('invalid_token', message));
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
// Validate expiration
|
|
120
|
+
const now = Math.floor(Date.now() / 1000);
|
|
121
|
+
if (claims.exp !== undefined && claims.exp + clockTolerance < now) {
|
|
122
|
+
res.setHeader('WWW-Authenticate', 'Bearer realm="a2a", error="invalid_token", error_description="Token expired"');
|
|
123
|
+
res
|
|
124
|
+
.status(getHttpStatusCode(A2A_ERRORS.AUTHENTICATION_REQUIRED))
|
|
125
|
+
.json(createOAuthError('invalid_token', 'Token expired'));
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
// Validate not-before
|
|
129
|
+
if (claims.nbf !== undefined && claims.nbf - clockTolerance > now) {
|
|
130
|
+
res.setHeader('WWW-Authenticate', 'Bearer realm="a2a", error="invalid_token", error_description="Token not yet valid"');
|
|
131
|
+
res
|
|
132
|
+
.status(getHttpStatusCode(A2A_ERRORS.AUTHENTICATION_REQUIRED))
|
|
133
|
+
.json(createOAuthError('invalid_token', 'Token not yet valid'));
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
// Validate issuer
|
|
137
|
+
if (issuer && claims.iss !== issuer) {
|
|
138
|
+
res.setHeader('WWW-Authenticate', 'Bearer realm="a2a", error="invalid_token", error_description="Invalid issuer"');
|
|
139
|
+
res
|
|
140
|
+
.status(getHttpStatusCode(A2A_ERRORS.AUTHENTICATION_REQUIRED))
|
|
141
|
+
.json(createOAuthError('invalid_token', 'Invalid issuer'));
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
// Validate audience
|
|
145
|
+
if (audience) {
|
|
146
|
+
const tokenAudience = Array.isArray(claims.aud) ? claims.aud : [claims.aud];
|
|
147
|
+
if (!tokenAudience.includes(audience)) {
|
|
148
|
+
res.setHeader('WWW-Authenticate', 'Bearer realm="a2a", error="invalid_token", error_description="Invalid audience"');
|
|
149
|
+
res
|
|
150
|
+
.status(getHttpStatusCode(A2A_ERRORS.AUTHENTICATION_REQUIRED))
|
|
151
|
+
.json(createOAuthError('invalid_token', 'Invalid audience'));
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Parse scopes
|
|
156
|
+
const scopes = parseScopes(claims.scope);
|
|
157
|
+
// Attach to request
|
|
158
|
+
authReq.token = token;
|
|
159
|
+
authReq.claims = claims;
|
|
160
|
+
authReq.scopes = scopes;
|
|
161
|
+
authReq.user = {
|
|
162
|
+
id: claims.sub,
|
|
163
|
+
scopes,
|
|
164
|
+
};
|
|
165
|
+
if (next)
|
|
166
|
+
next();
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
const message = error instanceof Error ? error.message : 'Authentication error';
|
|
170
|
+
res
|
|
171
|
+
.status(500)
|
|
172
|
+
.json({
|
|
173
|
+
error: {
|
|
174
|
+
code: A2A_ERRORS.AUTHENTICATION_REQUIRED,
|
|
175
|
+
message: A2A_ERROR_MESSAGES[A2A_ERRORS.AUTHENTICATION_REQUIRED],
|
|
176
|
+
data: { details: message },
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Shorthand factory for JWT auth middleware
|
|
184
|
+
*/
|
|
185
|
+
export function jwtAuthMiddleware(options) {
|
|
186
|
+
return createJWTMiddleware(options);
|
|
187
|
+
}
|
|
188
|
+
// ============================================================================
|
|
189
|
+
// Scope Validation Middleware
|
|
190
|
+
// ============================================================================
|
|
191
|
+
/**
|
|
192
|
+
* Create scope validation middleware
|
|
193
|
+
*
|
|
194
|
+
* Must be used after JWT authentication middleware
|
|
195
|
+
*
|
|
196
|
+
* @param requiredScopes Scopes to require
|
|
197
|
+
* @param options Scope options
|
|
198
|
+
* @returns Express-compatible middleware function
|
|
199
|
+
*
|
|
200
|
+
* @example
|
|
201
|
+
* ```typescript
|
|
202
|
+
* // Require all scopes
|
|
203
|
+
* app.post('/tasks', authMiddleware, requireScopes('tasks:write', 'tasks:read'));
|
|
204
|
+
*
|
|
205
|
+
* // Require any scope
|
|
206
|
+
* app.get('/tasks', authMiddleware, requireScopes('tasks:read', 'tasks:admin', { requireAll: false }));
|
|
207
|
+
* ```
|
|
208
|
+
*/
|
|
209
|
+
export function requireScopes(...args) {
|
|
210
|
+
// Parse arguments
|
|
211
|
+
let requiredScopes;
|
|
212
|
+
let options = { requireAll: true };
|
|
213
|
+
const lastArg = args[args.length - 1];
|
|
214
|
+
if (typeof lastArg === 'object' && lastArg !== null) {
|
|
215
|
+
options = lastArg;
|
|
216
|
+
requiredScopes = args.slice(0, -1);
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
requiredScopes = args;
|
|
220
|
+
}
|
|
221
|
+
return (req, res, next) => {
|
|
222
|
+
const authReq = req;
|
|
223
|
+
// Check if authenticated
|
|
224
|
+
if (!authReq.user || !authReq.scopes) {
|
|
225
|
+
res.setHeader('WWW-Authenticate', 'Bearer realm="a2a"');
|
|
226
|
+
res
|
|
227
|
+
.status(getHttpStatusCode(A2A_ERRORS.AUTHENTICATION_REQUIRED))
|
|
228
|
+
.json(createOAuthError('invalid_request', 'Authentication required'));
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
const userScopes = new Set(authReq.scopes);
|
|
232
|
+
// Check scopes
|
|
233
|
+
const hasScopes = options.requireAll
|
|
234
|
+
? requiredScopes.every((scope) => userScopes.has(scope))
|
|
235
|
+
: requiredScopes.some((scope) => userScopes.has(scope));
|
|
236
|
+
if (!hasScopes) {
|
|
237
|
+
const scopeList = requiredScopes.join(' ');
|
|
238
|
+
res.setHeader('WWW-Authenticate', `Bearer realm="a2a", scope="${scopeList}", error="insufficient_scope"`);
|
|
239
|
+
res
|
|
240
|
+
.status(getHttpStatusCode(A2A_ERRORS.AUTHORIZATION_FAILED))
|
|
241
|
+
.json(createOAuthError('insufficient_scope', `Required scope(s): ${scopeList}`));
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
if (next)
|
|
245
|
+
next();
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Check if request has a specific scope
|
|
250
|
+
* Utility function for conditional logic in handlers
|
|
251
|
+
*/
|
|
252
|
+
export function hasScope(req, scope) {
|
|
253
|
+
const authReq = req;
|
|
254
|
+
return authReq.scopes?.includes(scope) ?? false;
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Check if request has any of the specified scopes
|
|
258
|
+
*/
|
|
259
|
+
export function hasAnyScope(req, scopes) {
|
|
260
|
+
const authReq = req;
|
|
261
|
+
const userScopes = new Set(authReq.scopes ?? []);
|
|
262
|
+
return scopes.some((scope) => userScopes.has(scope));
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Check if request has all of the specified scopes
|
|
266
|
+
*/
|
|
267
|
+
export function hasAllScopes(req, scopes) {
|
|
268
|
+
const authReq = req;
|
|
269
|
+
const userScopes = new Set(authReq.scopes ?? []);
|
|
270
|
+
return scopes.every((scope) => userScopes.has(scope));
|
|
271
|
+
}
|
|
272
|
+
// ============================================================================
|
|
273
|
+
// Utility Middleware
|
|
274
|
+
// ============================================================================
|
|
275
|
+
/**
|
|
276
|
+
* Create optional authentication middleware
|
|
277
|
+
* Same as jwtAuthMiddleware with optional: true
|
|
278
|
+
*/
|
|
279
|
+
export function optionalAuth(options) {
|
|
280
|
+
return createJWTMiddleware({ ...options, optional: true });
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* No-op authentication middleware for testing/development
|
|
284
|
+
* Sets a mock user on the request
|
|
285
|
+
*/
|
|
286
|
+
export function mockAuthMiddleware(mockUser) {
|
|
287
|
+
const user = mockUser ?? { id: 'mock-user', scopes: ['*'] };
|
|
288
|
+
return (req, _res, next) => {
|
|
289
|
+
const authReq = req;
|
|
290
|
+
authReq.user = user;
|
|
291
|
+
authReq.scopes = user.scopes ?? [];
|
|
292
|
+
authReq.claims = {
|
|
293
|
+
sub: user.id,
|
|
294
|
+
scope: user.scopes?.join(' '),
|
|
295
|
+
};
|
|
296
|
+
if (next)
|
|
297
|
+
next();
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
//# sourceMappingURL=middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"middleware.js","sourceRoot":"","sources":["../../../../src/adapters/a2a/auth/middleware.ts"],"names":[],"mappings":"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"}
|