agentic-qe 3.3.5 → 3.4.1
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/helpers/statusline-v3.cjs +47 -0
- package/.claude/skills/qcsd-ideation-swarm/SKILL.md +7 -4
- package/CHANGELOG.md +23 -0
- package/README.md +69 -0
- package/package.json +1 -1
- package/v3/CHANGELOG.md +91 -0
- package/v3/README.md +117 -0
- 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 +7412 -3749
- package/v3/dist/init/init-wizard.d.ts.map +1 -1
- package/v3/dist/init/init-wizard.js +16 -1
- 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/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/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 +97 -0
- package/v3/dist/kernel/unified-memory.d.ts.map +1 -1
- package/v3/dist/kernel/unified-memory.js +204 -0
- package/v3/dist/kernel/unified-memory.js.map +1 -1
- package/v3/dist/mcp/bundle.js +121759 -105597
- 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/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,573 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A2A OAuth 2.0 Provider
|
|
3
|
+
*
|
|
4
|
+
* Implements OAuth 2.0 authorization server functionality including:
|
|
5
|
+
* - Authorization Code Flow (with PKCE support)
|
|
6
|
+
* - Client Credentials Flow
|
|
7
|
+
* - Token refresh
|
|
8
|
+
* - Token revocation
|
|
9
|
+
*
|
|
10
|
+
* @module adapters/a2a/auth/oauth-provider
|
|
11
|
+
* @see https://datatracker.ietf.org/doc/html/rfc6749
|
|
12
|
+
* @see https://datatracker.ietf.org/doc/html/rfc7636 (PKCE)
|
|
13
|
+
*/
|
|
14
|
+
import { createTokenStore } from './token-store.js';
|
|
15
|
+
import { signAccessToken, verifyJWT, JWTError, } from './jwt-utils.js';
|
|
16
|
+
import { validateScopes, normalizeScopes, DEFAULT_CLIENT_SCOPES, } from './scopes.js';
|
|
17
|
+
/**
|
|
18
|
+
* Default OAuth 2.0 configuration values
|
|
19
|
+
*/
|
|
20
|
+
export const DEFAULT_OAUTH2_CONFIG = {
|
|
21
|
+
tokenTTL: 3600,
|
|
22
|
+
refreshTokenTTL: 2592000,
|
|
23
|
+
authorizationCodeTTL: 600,
|
|
24
|
+
requirePKCE: false,
|
|
25
|
+
allowRefreshTokens: true,
|
|
26
|
+
};
|
|
27
|
+
// ============================================================================
|
|
28
|
+
// OAuth 2.0 Error Class
|
|
29
|
+
// ============================================================================
|
|
30
|
+
/**
|
|
31
|
+
* OAuth 2.0 error
|
|
32
|
+
*/
|
|
33
|
+
export class OAuth2ProviderError extends Error {
|
|
34
|
+
error;
|
|
35
|
+
errorDescription;
|
|
36
|
+
httpStatus;
|
|
37
|
+
constructor(error, description) {
|
|
38
|
+
super(description || error);
|
|
39
|
+
this.name = 'OAuth2ProviderError';
|
|
40
|
+
this.error = error;
|
|
41
|
+
this.errorDescription = description;
|
|
42
|
+
this.httpStatus = this.getHttpStatus(error);
|
|
43
|
+
if (Error.captureStackTrace) {
|
|
44
|
+
Error.captureStackTrace(this, OAuth2ProviderError);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
getHttpStatus(error) {
|
|
48
|
+
switch (error) {
|
|
49
|
+
case 'invalid_client':
|
|
50
|
+
case 'access_denied':
|
|
51
|
+
return 401;
|
|
52
|
+
case 'unauthorized_client':
|
|
53
|
+
return 403;
|
|
54
|
+
case 'server_error':
|
|
55
|
+
return 500;
|
|
56
|
+
default:
|
|
57
|
+
return 400;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Convert to OAuth 2.0 error response format
|
|
62
|
+
*/
|
|
63
|
+
toResponse() {
|
|
64
|
+
const response = {
|
|
65
|
+
error: this.error,
|
|
66
|
+
};
|
|
67
|
+
if (this.errorDescription) {
|
|
68
|
+
return { ...response, error_description: this.errorDescription };
|
|
69
|
+
}
|
|
70
|
+
return response;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* OAuth 2.0 Authorization Server Provider
|
|
75
|
+
*
|
|
76
|
+
* Implements OAuth 2.0 token issuance and validation for the A2A protocol.
|
|
77
|
+
*/
|
|
78
|
+
export class OAuth2Provider {
|
|
79
|
+
config;
|
|
80
|
+
tokenStore;
|
|
81
|
+
constructor(config) {
|
|
82
|
+
this.config = {
|
|
83
|
+
...DEFAULT_OAUTH2_CONFIG,
|
|
84
|
+
...config,
|
|
85
|
+
};
|
|
86
|
+
this.tokenStore = createTokenStore(config.tokenStoreConfig);
|
|
87
|
+
}
|
|
88
|
+
// ============================================================================
|
|
89
|
+
// Client Management
|
|
90
|
+
// ============================================================================
|
|
91
|
+
/**
|
|
92
|
+
* Register a new client
|
|
93
|
+
*
|
|
94
|
+
* @param clientId - The client ID
|
|
95
|
+
* @param credentials - The client credentials
|
|
96
|
+
*/
|
|
97
|
+
registerClient(clientId, credentials) {
|
|
98
|
+
this.config.clientCredentials.set(clientId, credentials);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Remove a client
|
|
102
|
+
*
|
|
103
|
+
* @param clientId - The client ID
|
|
104
|
+
* @returns True if the client was removed
|
|
105
|
+
*/
|
|
106
|
+
removeClient(clientId) {
|
|
107
|
+
// Revoke all tokens for this client
|
|
108
|
+
this.tokenStore.revokeTokensByClient(clientId);
|
|
109
|
+
return this.config.clientCredentials.delete(clientId);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Validate client credentials
|
|
113
|
+
*
|
|
114
|
+
* @param clientId - The client ID
|
|
115
|
+
* @param clientSecret - The client secret (optional for public clients)
|
|
116
|
+
* @returns True if the credentials are valid
|
|
117
|
+
*/
|
|
118
|
+
validateClient(clientId, clientSecret) {
|
|
119
|
+
const credentials = this.config.clientCredentials.get(clientId);
|
|
120
|
+
if (!credentials) {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
if (credentials.active === false) {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
// Public clients don't need a secret
|
|
127
|
+
if (!credentials.confidential && !clientSecret) {
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
// Confidential clients need a valid secret
|
|
131
|
+
if (credentials.confidential && !clientSecret) {
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
// Compare secrets
|
|
135
|
+
// Note: In production, use constant-time comparison and hashed secrets
|
|
136
|
+
return clientSecret === credentials.clientSecret;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Get client credentials
|
|
140
|
+
*
|
|
141
|
+
* @param clientId - The client ID
|
|
142
|
+
* @returns The client credentials or undefined
|
|
143
|
+
*/
|
|
144
|
+
getClient(clientId) {
|
|
145
|
+
return this.config.clientCredentials.get(clientId);
|
|
146
|
+
}
|
|
147
|
+
// ============================================================================
|
|
148
|
+
// Authorization Code Flow
|
|
149
|
+
// ============================================================================
|
|
150
|
+
/**
|
|
151
|
+
* Generate an authorization code
|
|
152
|
+
*
|
|
153
|
+
* @param clientId - The client ID
|
|
154
|
+
* @param redirectUri - The redirect URI
|
|
155
|
+
* @param scope - Requested scopes
|
|
156
|
+
* @param state - Optional state parameter
|
|
157
|
+
* @param codeChallenge - PKCE code challenge
|
|
158
|
+
* @param codeChallengeMethod - PKCE method (S256 or plain)
|
|
159
|
+
* @returns The authorization code
|
|
160
|
+
*/
|
|
161
|
+
generateAuthorizationCode(clientId, redirectUri, scope, state, codeChallenge, codeChallengeMethod) {
|
|
162
|
+
const credentials = this.config.clientCredentials.get(clientId);
|
|
163
|
+
if (!credentials) {
|
|
164
|
+
throw new OAuth2ProviderError('invalid_client', 'Client not found');
|
|
165
|
+
}
|
|
166
|
+
if (credentials.active === false) {
|
|
167
|
+
throw new OAuth2ProviderError('invalid_client', 'Client is not active');
|
|
168
|
+
}
|
|
169
|
+
// Validate redirect URI
|
|
170
|
+
if (credentials.redirectUris && !credentials.redirectUris.includes(redirectUri)) {
|
|
171
|
+
throw new OAuth2ProviderError('invalid_request', 'Invalid redirect URI');
|
|
172
|
+
}
|
|
173
|
+
// Validate PKCE if required
|
|
174
|
+
if (this.config.requirePKCE && !codeChallenge) {
|
|
175
|
+
throw new OAuth2ProviderError('invalid_request', 'PKCE code challenge required');
|
|
176
|
+
}
|
|
177
|
+
// Validate scopes
|
|
178
|
+
const requestedScopes = normalizeScopes(scope);
|
|
179
|
+
const validScopes = requestedScopes.filter((s) => credentials.allowedScopes.includes(s) || validateScopes([s], credentials.allowedScopes));
|
|
180
|
+
if (validScopes.length === 0) {
|
|
181
|
+
throw new OAuth2ProviderError('invalid_scope', 'No valid scopes requested');
|
|
182
|
+
}
|
|
183
|
+
// Generate authorization code
|
|
184
|
+
const code = this.generateSecureCode();
|
|
185
|
+
const now = Math.floor(Date.now() / 1000);
|
|
186
|
+
const expiresAt = now + this.config.authorizationCodeTTL;
|
|
187
|
+
// Store the authorization code
|
|
188
|
+
this.tokenStore.storeAuthorizationCode(code, {
|
|
189
|
+
clientId,
|
|
190
|
+
scopes: validScopes,
|
|
191
|
+
redirectUri,
|
|
192
|
+
state,
|
|
193
|
+
codeChallenge,
|
|
194
|
+
codeChallengeMethod,
|
|
195
|
+
issuedAt: now,
|
|
196
|
+
expiresAt,
|
|
197
|
+
});
|
|
198
|
+
return {
|
|
199
|
+
code,
|
|
200
|
+
clientId,
|
|
201
|
+
redirectUri,
|
|
202
|
+
scopes: validScopes,
|
|
203
|
+
state,
|
|
204
|
+
expiresAt: new Date(expiresAt * 1000),
|
|
205
|
+
codeChallenge,
|
|
206
|
+
codeChallengeMethod,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Exchange an authorization code for tokens
|
|
211
|
+
*
|
|
212
|
+
* @param code - The authorization code
|
|
213
|
+
* @param clientId - The client ID
|
|
214
|
+
* @param clientSecret - The client secret
|
|
215
|
+
* @param redirectUri - The redirect URI (must match original)
|
|
216
|
+
* @param codeVerifier - PKCE code verifier
|
|
217
|
+
* @returns Token pair
|
|
218
|
+
*/
|
|
219
|
+
async exchangeCodeForTokens(code, clientId, clientSecret, redirectUri, codeVerifier) {
|
|
220
|
+
// Validate client
|
|
221
|
+
if (!this.validateClient(clientId, clientSecret)) {
|
|
222
|
+
throw new OAuth2ProviderError('invalid_client', 'Invalid client credentials');
|
|
223
|
+
}
|
|
224
|
+
// Get and consume authorization code
|
|
225
|
+
const authCode = this.tokenStore.consumeAuthorizationCode(code);
|
|
226
|
+
if (!authCode) {
|
|
227
|
+
throw new OAuth2ProviderError('invalid_grant', 'Invalid or expired authorization code');
|
|
228
|
+
}
|
|
229
|
+
// Validate client ID matches
|
|
230
|
+
if (authCode.clientId !== clientId) {
|
|
231
|
+
throw new OAuth2ProviderError('invalid_grant', 'Authorization code was not issued to this client');
|
|
232
|
+
}
|
|
233
|
+
// Validate redirect URI
|
|
234
|
+
if (authCode.redirectUri !== redirectUri) {
|
|
235
|
+
throw new OAuth2ProviderError('invalid_grant', 'Redirect URI does not match');
|
|
236
|
+
}
|
|
237
|
+
// Validate PKCE
|
|
238
|
+
if (authCode.codeChallenge) {
|
|
239
|
+
if (!codeVerifier) {
|
|
240
|
+
throw new OAuth2ProviderError('invalid_grant', 'Code verifier required');
|
|
241
|
+
}
|
|
242
|
+
const isValid = await this.verifyCodeChallenge(codeVerifier, authCode.codeChallenge, authCode.codeChallengeMethod || 'S256');
|
|
243
|
+
if (!isValid) {
|
|
244
|
+
throw new OAuth2ProviderError('invalid_grant', 'Code verifier is invalid');
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
// Generate tokens
|
|
248
|
+
return this.generateTokenPair(clientId, authCode.scopes);
|
|
249
|
+
}
|
|
250
|
+
// ============================================================================
|
|
251
|
+
// Client Credentials Flow
|
|
252
|
+
// ============================================================================
|
|
253
|
+
/**
|
|
254
|
+
* Issue tokens using client credentials grant
|
|
255
|
+
*
|
|
256
|
+
* @param clientId - The client ID
|
|
257
|
+
* @param clientSecret - The client secret
|
|
258
|
+
* @param scope - Requested scopes
|
|
259
|
+
* @returns Token pair
|
|
260
|
+
*/
|
|
261
|
+
async clientCredentialsGrant(clientId, clientSecret, scope) {
|
|
262
|
+
// Validate client
|
|
263
|
+
if (!this.validateClient(clientId, clientSecret)) {
|
|
264
|
+
throw new OAuth2ProviderError('invalid_client', 'Invalid client credentials');
|
|
265
|
+
}
|
|
266
|
+
const credentials = this.config.clientCredentials.get(clientId);
|
|
267
|
+
// Determine scopes
|
|
268
|
+
let grantedScopes = credentials.allowedScopes;
|
|
269
|
+
if (scope && scope.length > 0) {
|
|
270
|
+
// Validate requested scopes
|
|
271
|
+
const requestedScopes = normalizeScopes(scope);
|
|
272
|
+
const invalidScopes = requestedScopes.filter((s) => !credentials.allowedScopes.includes(s) && !validateScopes([s], credentials.allowedScopes));
|
|
273
|
+
if (invalidScopes.length > 0) {
|
|
274
|
+
throw new OAuth2ProviderError('invalid_scope', `Invalid scopes: ${invalidScopes.join(', ')}`);
|
|
275
|
+
}
|
|
276
|
+
grantedScopes = requestedScopes;
|
|
277
|
+
}
|
|
278
|
+
// Generate tokens
|
|
279
|
+
return this.generateTokenPair(clientId, grantedScopes);
|
|
280
|
+
}
|
|
281
|
+
// ============================================================================
|
|
282
|
+
// Token Refresh
|
|
283
|
+
// ============================================================================
|
|
284
|
+
/**
|
|
285
|
+
* Refresh an access token
|
|
286
|
+
*
|
|
287
|
+
* @param refreshToken - The refresh token
|
|
288
|
+
* @param scope - Optional new scope (must be subset of original)
|
|
289
|
+
* @returns New token pair
|
|
290
|
+
*/
|
|
291
|
+
async refreshAccessToken(refreshToken, scope) {
|
|
292
|
+
if (!this.config.allowRefreshTokens) {
|
|
293
|
+
throw new OAuth2ProviderError('unsupported_grant_type', 'Refresh tokens are not supported');
|
|
294
|
+
}
|
|
295
|
+
// Get refresh token claims
|
|
296
|
+
const claims = this.tokenStore.getRefreshTokenClaims(refreshToken);
|
|
297
|
+
if (!claims) {
|
|
298
|
+
throw new OAuth2ProviderError('invalid_grant', 'Invalid or expired refresh token');
|
|
299
|
+
}
|
|
300
|
+
// Determine new scopes
|
|
301
|
+
let grantedScopes = claims.scopes;
|
|
302
|
+
if (scope && scope.length > 0) {
|
|
303
|
+
// New scopes must be a subset of original scopes
|
|
304
|
+
const requestedScopes = normalizeScopes(scope);
|
|
305
|
+
const invalidScopes = requestedScopes.filter((s) => !claims.scopes.includes(s));
|
|
306
|
+
if (invalidScopes.length > 0) {
|
|
307
|
+
throw new OAuth2ProviderError('invalid_scope', 'Cannot request scopes beyond original grant');
|
|
308
|
+
}
|
|
309
|
+
grantedScopes = requestedScopes;
|
|
310
|
+
}
|
|
311
|
+
// Increment refresh token use count
|
|
312
|
+
this.tokenStore.incrementRefreshTokenUseCount(refreshToken);
|
|
313
|
+
// Revoke old refresh token and issue new tokens (rotation)
|
|
314
|
+
this.tokenStore.revokeToken(refreshToken);
|
|
315
|
+
return this.generateTokenPair(claims.clientId, grantedScopes);
|
|
316
|
+
}
|
|
317
|
+
// ============================================================================
|
|
318
|
+
// Token Revocation
|
|
319
|
+
// ============================================================================
|
|
320
|
+
/**
|
|
321
|
+
* Revoke a token
|
|
322
|
+
*
|
|
323
|
+
* @param token - The token to revoke
|
|
324
|
+
* @param tokenTypeHint - Optional hint about token type
|
|
325
|
+
*/
|
|
326
|
+
revokeToken(token, tokenTypeHint) {
|
|
327
|
+
this.tokenStore.revokeToken(token);
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Revoke all tokens for a client
|
|
331
|
+
*
|
|
332
|
+
* @param clientId - The client ID
|
|
333
|
+
* @returns Number of tokens revoked
|
|
334
|
+
*/
|
|
335
|
+
revokeClientTokens(clientId) {
|
|
336
|
+
return this.tokenStore.revokeTokensByClient(clientId);
|
|
337
|
+
}
|
|
338
|
+
// ============================================================================
|
|
339
|
+
// Token Validation
|
|
340
|
+
// ============================================================================
|
|
341
|
+
/**
|
|
342
|
+
* Validate an access token
|
|
343
|
+
*
|
|
344
|
+
* @param token - The access token
|
|
345
|
+
* @param requiredScopes - Required scopes (optional)
|
|
346
|
+
* @returns The token payload if valid
|
|
347
|
+
*/
|
|
348
|
+
async validateAccessToken(token, requiredScopes) {
|
|
349
|
+
// Check if revoked
|
|
350
|
+
if (this.tokenStore.isRevoked(token)) {
|
|
351
|
+
throw new OAuth2ProviderError('invalid_grant', 'Token has been revoked');
|
|
352
|
+
}
|
|
353
|
+
try {
|
|
354
|
+
// Verify JWT signature and claims
|
|
355
|
+
const payload = await verifyJWT(token, this.config.signingSecret, {
|
|
356
|
+
issuer: this.config.issuer,
|
|
357
|
+
});
|
|
358
|
+
// Check token type
|
|
359
|
+
if (payload.token_type !== 'access') {
|
|
360
|
+
throw new OAuth2ProviderError('invalid_grant', 'Invalid token type');
|
|
361
|
+
}
|
|
362
|
+
// Check required scopes
|
|
363
|
+
if (requiredScopes && requiredScopes.length > 0) {
|
|
364
|
+
const tokenScopes = payload.scope?.split(' ') || [];
|
|
365
|
+
if (!validateScopes(requiredScopes, tokenScopes)) {
|
|
366
|
+
throw new OAuth2ProviderError('access_denied', 'Insufficient scope');
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
return payload;
|
|
370
|
+
}
|
|
371
|
+
catch (error) {
|
|
372
|
+
if (error instanceof JWTError) {
|
|
373
|
+
if (error.code === 'TOKEN_EXPIRED') {
|
|
374
|
+
throw new OAuth2ProviderError('invalid_grant', 'Token has expired');
|
|
375
|
+
}
|
|
376
|
+
throw new OAuth2ProviderError('invalid_grant', 'Invalid token');
|
|
377
|
+
}
|
|
378
|
+
if (error instanceof OAuth2ProviderError) {
|
|
379
|
+
throw error;
|
|
380
|
+
}
|
|
381
|
+
throw new OAuth2ProviderError('server_error', 'Token validation failed');
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Introspect a token
|
|
386
|
+
*
|
|
387
|
+
* @param token - The token to introspect
|
|
388
|
+
* @returns Token introspection response
|
|
389
|
+
*/
|
|
390
|
+
async introspectToken(token) {
|
|
391
|
+
try {
|
|
392
|
+
const payload = await this.validateAccessToken(token);
|
|
393
|
+
return {
|
|
394
|
+
active: true,
|
|
395
|
+
scope: payload.scope,
|
|
396
|
+
client_id: payload.client_id,
|
|
397
|
+
exp: payload.exp,
|
|
398
|
+
iat: payload.iat,
|
|
399
|
+
sub: payload.sub,
|
|
400
|
+
token_type: 'Bearer',
|
|
401
|
+
};
|
|
402
|
+
}
|
|
403
|
+
catch {
|
|
404
|
+
return { active: false };
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
// ============================================================================
|
|
408
|
+
// Token Generation (Private)
|
|
409
|
+
// ============================================================================
|
|
410
|
+
/**
|
|
411
|
+
* Generate a token pair
|
|
412
|
+
*/
|
|
413
|
+
async generateTokenPair(clientId, scopes) {
|
|
414
|
+
const now = Math.floor(Date.now() / 1000);
|
|
415
|
+
const accessTokenJti = crypto.randomUUID();
|
|
416
|
+
// Generate access token
|
|
417
|
+
const accessToken = await signAccessToken(clientId, scopes, this.config.signingSecret, {
|
|
418
|
+
issuer: this.config.issuer,
|
|
419
|
+
expiresIn: this.config.tokenTTL,
|
|
420
|
+
jti: accessTokenJti,
|
|
421
|
+
});
|
|
422
|
+
// Store access token
|
|
423
|
+
this.tokenStore.storeAccessToken(accessToken, {
|
|
424
|
+
clientId,
|
|
425
|
+
scopes,
|
|
426
|
+
issuedAt: now,
|
|
427
|
+
expiresAt: now + this.config.tokenTTL,
|
|
428
|
+
jti: accessTokenJti,
|
|
429
|
+
});
|
|
430
|
+
const result = {
|
|
431
|
+
accessToken,
|
|
432
|
+
tokenType: 'Bearer',
|
|
433
|
+
expiresIn: this.config.tokenTTL,
|
|
434
|
+
scope: scopes.join(' '),
|
|
435
|
+
};
|
|
436
|
+
// Generate refresh token if allowed
|
|
437
|
+
if (this.config.allowRefreshTokens) {
|
|
438
|
+
const refreshToken = this.generateSecureCode();
|
|
439
|
+
this.tokenStore.storeRefreshToken(refreshToken, {
|
|
440
|
+
clientId,
|
|
441
|
+
scopes,
|
|
442
|
+
tokenId: crypto.randomUUID(),
|
|
443
|
+
accessTokenJti,
|
|
444
|
+
useCount: 0,
|
|
445
|
+
issuedAt: now,
|
|
446
|
+
expiresAt: now + this.config.refreshTokenTTL,
|
|
447
|
+
});
|
|
448
|
+
return {
|
|
449
|
+
...result,
|
|
450
|
+
refreshToken,
|
|
451
|
+
refreshExpiresIn: this.config.refreshTokenTTL,
|
|
452
|
+
};
|
|
453
|
+
}
|
|
454
|
+
return result;
|
|
455
|
+
}
|
|
456
|
+
/**
|
|
457
|
+
* Generate a secure random code
|
|
458
|
+
*/
|
|
459
|
+
generateSecureCode() {
|
|
460
|
+
// Generate 32 random bytes and encode as base64url
|
|
461
|
+
const bytes = new Uint8Array(32);
|
|
462
|
+
crypto.getRandomValues(bytes);
|
|
463
|
+
return btoa(String.fromCharCode(...bytes))
|
|
464
|
+
.replace(/\+/g, '-')
|
|
465
|
+
.replace(/\//g, '_')
|
|
466
|
+
.replace(/=/g, '');
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* Verify PKCE code challenge
|
|
470
|
+
*/
|
|
471
|
+
async verifyCodeChallenge(codeVerifier, codeChallenge, method) {
|
|
472
|
+
if (method === 'plain') {
|
|
473
|
+
return codeVerifier === codeChallenge;
|
|
474
|
+
}
|
|
475
|
+
// S256: SHA-256 hash of verifier
|
|
476
|
+
const encoder = new TextEncoder();
|
|
477
|
+
const data = encoder.encode(codeVerifier);
|
|
478
|
+
const hash = await crypto.subtle.digest('SHA-256', data);
|
|
479
|
+
const hashArray = new Uint8Array(hash);
|
|
480
|
+
const computed = btoa(String.fromCharCode(...hashArray))
|
|
481
|
+
.replace(/\+/g, '-')
|
|
482
|
+
.replace(/\//g, '_')
|
|
483
|
+
.replace(/=/g, '');
|
|
484
|
+
return computed === codeChallenge;
|
|
485
|
+
}
|
|
486
|
+
// ============================================================================
|
|
487
|
+
// Discovery Metadata
|
|
488
|
+
// ============================================================================
|
|
489
|
+
/**
|
|
490
|
+
* Get OAuth 2.0 authorization server metadata
|
|
491
|
+
*
|
|
492
|
+
* @returns OpenID Connect Discovery metadata
|
|
493
|
+
*/
|
|
494
|
+
getMetadata() {
|
|
495
|
+
return {
|
|
496
|
+
issuer: this.config.issuer,
|
|
497
|
+
authorization_endpoint: this.config.authorizationEndpoint,
|
|
498
|
+
token_endpoint: this.config.tokenEndpoint,
|
|
499
|
+
token_endpoint_auth_methods_supported: ['client_secret_basic', 'client_secret_post'],
|
|
500
|
+
grant_types_supported: [
|
|
501
|
+
'authorization_code',
|
|
502
|
+
'client_credentials',
|
|
503
|
+
...(this.config.allowRefreshTokens ? ['refresh_token'] : []),
|
|
504
|
+
],
|
|
505
|
+
response_types_supported: ['code'],
|
|
506
|
+
scopes_supported: Object.keys(DEFAULT_CLIENT_SCOPES),
|
|
507
|
+
code_challenge_methods_supported: ['S256', 'plain'],
|
|
508
|
+
};
|
|
509
|
+
}
|
|
510
|
+
// ============================================================================
|
|
511
|
+
// Lifecycle
|
|
512
|
+
// ============================================================================
|
|
513
|
+
/**
|
|
514
|
+
* Get provider statistics
|
|
515
|
+
*/
|
|
516
|
+
getStats() {
|
|
517
|
+
return {
|
|
518
|
+
tokenStats: this.tokenStore.getStats(),
|
|
519
|
+
clientCount: this.config.clientCredentials.size,
|
|
520
|
+
};
|
|
521
|
+
}
|
|
522
|
+
/**
|
|
523
|
+
* Clean up expired tokens
|
|
524
|
+
*/
|
|
525
|
+
cleanup() {
|
|
526
|
+
return this.tokenStore.cleanup();
|
|
527
|
+
}
|
|
528
|
+
/**
|
|
529
|
+
* Destroy the provider
|
|
530
|
+
*/
|
|
531
|
+
destroy() {
|
|
532
|
+
this.tokenStore.destroy();
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
// ============================================================================
|
|
536
|
+
// Factory Function
|
|
537
|
+
// ============================================================================
|
|
538
|
+
/**
|
|
539
|
+
* Create a new OAuth2Provider instance
|
|
540
|
+
*
|
|
541
|
+
* @param config - Provider configuration
|
|
542
|
+
* @returns A new OAuth2Provider
|
|
543
|
+
*/
|
|
544
|
+
export function createOAuth2Provider(config) {
|
|
545
|
+
return new OAuth2Provider(config);
|
|
546
|
+
}
|
|
547
|
+
/**
|
|
548
|
+
* Create a simple OAuth2Provider for testing
|
|
549
|
+
*
|
|
550
|
+
* @param signingSecret - The JWT signing secret
|
|
551
|
+
* @returns A configured OAuth2Provider
|
|
552
|
+
*/
|
|
553
|
+
export function createTestOAuth2Provider(signingSecret = 'test-secret') {
|
|
554
|
+
return new OAuth2Provider({
|
|
555
|
+
issuer: 'http://localhost:3000',
|
|
556
|
+
tokenEndpoint: 'http://localhost:3000/oauth/token',
|
|
557
|
+
authorizationEndpoint: 'http://localhost:3000/oauth/authorize',
|
|
558
|
+
clientCredentials: new Map([
|
|
559
|
+
[
|
|
560
|
+
'test-client',
|
|
561
|
+
{
|
|
562
|
+
clientSecret: 'test-secret',
|
|
563
|
+
name: 'Test Client',
|
|
564
|
+
allowedScopes: ['platform:read', 'agent:read', 'task:read', 'task:create'],
|
|
565
|
+
confidential: true,
|
|
566
|
+
active: true,
|
|
567
|
+
},
|
|
568
|
+
],
|
|
569
|
+
]),
|
|
570
|
+
signingSecret,
|
|
571
|
+
});
|
|
572
|
+
}
|
|
573
|
+
//# sourceMappingURL=oauth-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-provider.js","sourceRoot":"","sources":["../../../../src/adapters/a2a/auth/oauth-provider.ts"],"names":[],"mappings":"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"}
|