@plumbus/core 0.1.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/bin/plumbus.js +11 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/ai/__tests__/ai-service.test.d.ts +2 -0
- package/dist/ai/__tests__/ai-service.test.d.ts.map +1 -0
- package/dist/ai/__tests__/ai-service.test.js +347 -0
- package/dist/ai/__tests__/ai-service.test.js.map +1 -0
- package/dist/ai/__tests__/chunking.test.d.ts +2 -0
- package/dist/ai/__tests__/chunking.test.d.ts.map +1 -0
- package/dist/ai/__tests__/chunking.test.js +44 -0
- package/dist/ai/__tests__/chunking.test.js.map +1 -0
- package/dist/ai/__tests__/cost-tracker.test.d.ts +2 -0
- package/dist/ai/__tests__/cost-tracker.test.d.ts.map +1 -0
- package/dist/ai/__tests__/cost-tracker.test.js +201 -0
- package/dist/ai/__tests__/cost-tracker.test.js.map +1 -0
- package/dist/ai/__tests__/explainability.test.d.ts +2 -0
- package/dist/ai/__tests__/explainability.test.d.ts.map +1 -0
- package/dist/ai/__tests__/explainability.test.js +100 -0
- package/dist/ai/__tests__/explainability.test.js.map +1 -0
- package/dist/ai/__tests__/prompt-registry.test.d.ts +2 -0
- package/dist/ai/__tests__/prompt-registry.test.d.ts.map +1 -0
- package/dist/ai/__tests__/prompt-registry.test.js +56 -0
- package/dist/ai/__tests__/prompt-registry.test.js.map +1 -0
- package/dist/ai/__tests__/provider.test.d.ts +3 -0
- package/dist/ai/__tests__/provider.test.d.ts.map +1 -0
- package/dist/ai/__tests__/provider.test.js +151 -0
- package/dist/ai/__tests__/provider.test.js.map +1 -0
- package/dist/ai/__tests__/rag-pipeline.test.d.ts +2 -0
- package/dist/ai/__tests__/rag-pipeline.test.d.ts.map +1 -0
- package/dist/ai/__tests__/rag-pipeline.test.js +128 -0
- package/dist/ai/__tests__/rag-pipeline.test.js.map +1 -0
- package/dist/ai/__tests__/security.test.d.ts +2 -0
- package/dist/ai/__tests__/security.test.d.ts.map +1 -0
- package/dist/ai/__tests__/security.test.js +89 -0
- package/dist/ai/__tests__/security.test.js.map +1 -0
- package/dist/ai/__tests__/usage-client.test.d.ts +2 -0
- package/dist/ai/__tests__/usage-client.test.d.ts.map +1 -0
- package/dist/ai/__tests__/usage-client.test.js +120 -0
- package/dist/ai/__tests__/usage-client.test.js.map +1 -0
- package/dist/ai/__tests__/validation.test.d.ts +2 -0
- package/dist/ai/__tests__/validation.test.d.ts.map +1 -0
- package/dist/ai/__tests__/validation.test.js +114 -0
- package/dist/ai/__tests__/validation.test.js.map +1 -0
- package/dist/ai/ai-service.d.ts +36 -0
- package/dist/ai/ai-service.d.ts.map +1 -0
- package/dist/ai/ai-service.js +258 -0
- package/dist/ai/ai-service.js.map +1 -0
- package/dist/ai/cost-tracker.d.ts +53 -0
- package/dist/ai/cost-tracker.d.ts.map +1 -0
- package/dist/ai/cost-tracker.js +114 -0
- package/dist/ai/cost-tracker.js.map +1 -0
- package/dist/ai/explainability.d.ts +41 -0
- package/dist/ai/explainability.d.ts.map +1 -0
- package/dist/ai/explainability.js +38 -0
- package/dist/ai/explainability.js.map +1 -0
- package/dist/ai/index.d.ts +10 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +25 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/prompt-registry.d.ts +16 -0
- package/dist/ai/prompt-registry.d.ts.map +1 -0
- package/dist/ai/prompt-registry.js +69 -0
- package/dist/ai/prompt-registry.js.map +1 -0
- package/dist/ai/provider.d.ts +73 -0
- package/dist/ai/provider.d.ts.map +1 -0
- package/dist/ai/provider.js +322 -0
- package/dist/ai/provider.js.map +1 -0
- package/dist/ai/rag/chunking.d.ts +18 -0
- package/dist/ai/rag/chunking.d.ts.map +1 -0
- package/dist/ai/rag/chunking.js +58 -0
- package/dist/ai/rag/chunking.js.map +1 -0
- package/dist/ai/rag/index.d.ts +4 -0
- package/dist/ai/rag/index.d.ts.map +1 -0
- package/dist/ai/rag/index.js +5 -0
- package/dist/ai/rag/index.js.map +1 -0
- package/dist/ai/rag/pipeline.d.ts +69 -0
- package/dist/ai/rag/pipeline.d.ts.map +1 -0
- package/dist/ai/rag/pipeline.js +135 -0
- package/dist/ai/rag/pipeline.js.map +1 -0
- package/dist/ai/rag/schema.d.ts +320 -0
- package/dist/ai/rag/schema.d.ts.map +1 -0
- package/dist/ai/rag/schema.js +31 -0
- package/dist/ai/rag/schema.js.map +1 -0
- package/dist/ai/security.d.ts +28 -0
- package/dist/ai/security.d.ts.map +1 -0
- package/dist/ai/security.js +78 -0
- package/dist/ai/security.js.map +1 -0
- package/dist/ai/usage-client.d.ts +31 -0
- package/dist/ai/usage-client.d.ts.map +1 -0
- package/dist/ai/usage-client.js +106 -0
- package/dist/ai/usage-client.js.map +1 -0
- package/dist/ai/validation.d.ts +20 -0
- package/dist/ai/validation.d.ts.map +1 -0
- package/dist/ai/validation.js +39 -0
- package/dist/ai/validation.js.map +1 -0
- package/dist/api/__tests__/route-generator.test.d.ts +2 -0
- package/dist/api/__tests__/route-generator.test.d.ts.map +1 -0
- package/dist/api/__tests__/route-generator.test.js +101 -0
- package/dist/api/__tests__/route-generator.test.js.map +1 -0
- package/dist/api/index.d.ts +3 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +7 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/route-generator.d.ts +24 -0
- package/dist/api/route-generator.d.ts.map +1 -0
- package/dist/api/route-generator.js +77 -0
- package/dist/api/route-generator.js.map +1 -0
- package/dist/audit/__tests__/service.test.d.ts +2 -0
- package/dist/audit/__tests__/service.test.d.ts.map +1 -0
- package/dist/audit/__tests__/service.test.js +97 -0
- package/dist/audit/__tests__/service.test.js.map +1 -0
- package/dist/audit/index.d.ts +4 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/index.js +8 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/audit/schema.d.ts +164 -0
- package/dist/audit/schema.d.ts.map +1 -0
- package/dist/audit/schema.js +16 -0
- package/dist/audit/schema.js.map +1 -0
- package/dist/audit/service.d.ts +14 -0
- package/dist/audit/service.d.ts.map +1 -0
- package/dist/audit/service.js +28 -0
- package/dist/audit/service.js.map +1 -0
- package/dist/auth/__tests__/adapter.test.d.ts +2 -0
- package/dist/auth/__tests__/adapter.test.d.ts.map +1 -0
- package/dist/auth/__tests__/adapter.test.js +218 -0
- package/dist/auth/__tests__/adapter.test.js.map +1 -0
- package/dist/auth/__tests__/oidc-adapter.test.d.ts +2 -0
- package/dist/auth/__tests__/oidc-adapter.test.d.ts.map +1 -0
- package/dist/auth/__tests__/oidc-adapter.test.js +232 -0
- package/dist/auth/__tests__/oidc-adapter.test.js.map +1 -0
- package/dist/auth/__tests__/password.test.d.ts +2 -0
- package/dist/auth/__tests__/password.test.d.ts.map +1 -0
- package/dist/auth/__tests__/password.test.js +30 -0
- package/dist/auth/__tests__/password.test.js.map +1 -0
- package/dist/auth/__tests__/saml-adapter.test.d.ts +2 -0
- package/dist/auth/__tests__/saml-adapter.test.d.ts.map +1 -0
- package/dist/auth/__tests__/saml-adapter.test.js +188 -0
- package/dist/auth/__tests__/saml-adapter.test.js.map +1 -0
- package/dist/auth/__tests__/scim.test.d.ts +2 -0
- package/dist/auth/__tests__/scim.test.d.ts.map +1 -0
- package/dist/auth/__tests__/scim.test.js +306 -0
- package/dist/auth/__tests__/scim.test.js.map +1 -0
- package/dist/auth/adapter.d.ts +60 -0
- package/dist/auth/adapter.d.ts.map +1 -0
- package/dist/auth/adapter.js +144 -0
- package/dist/auth/adapter.js.map +1 -0
- package/dist/auth/index.d.ts +11 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +9 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/oidc-adapter.d.ts +32 -0
- package/dist/auth/oidc-adapter.d.ts.map +1 -0
- package/dist/auth/oidc-adapter.js +169 -0
- package/dist/auth/oidc-adapter.js.map +1 -0
- package/dist/auth/password.d.ts +13 -0
- package/dist/auth/password.d.ts.map +1 -0
- package/dist/auth/password.js +33 -0
- package/dist/auth/password.js.map +1 -0
- package/dist/auth/saml-adapter.d.ts +38 -0
- package/dist/auth/saml-adapter.d.ts.map +1 -0
- package/dist/auth/saml-adapter.js +209 -0
- package/dist/auth/saml-adapter.js.map +1 -0
- package/dist/auth/scim.d.ts +134 -0
- package/dist/auth/scim.d.ts.map +1 -0
- package/dist/auth/scim.js +207 -0
- package/dist/auth/scim.js.map +1 -0
- package/dist/cli/__tests__/agent.test.d.ts +2 -0
- package/dist/cli/__tests__/agent.test.d.ts.map +1 -0
- package/dist/cli/__tests__/agent.test.js +63 -0
- package/dist/cli/__tests__/agent.test.js.map +1 -0
- package/dist/cli/__tests__/certify.test.d.ts +2 -0
- package/dist/cli/__tests__/certify.test.d.ts.map +1 -0
- package/dist/cli/__tests__/certify.test.js +97 -0
- package/dist/cli/__tests__/certify.test.js.map +1 -0
- package/dist/cli/__tests__/cli.test.d.ts +2 -0
- package/dist/cli/__tests__/cli.test.d.ts.map +1 -0
- package/dist/cli/__tests__/cli.test.js +30 -0
- package/dist/cli/__tests__/cli.test.js.map +1 -0
- package/dist/cli/__tests__/create.test.d.ts +2 -0
- package/dist/cli/__tests__/create.test.d.ts.map +1 -0
- package/dist/cli/__tests__/create.test.js +46 -0
- package/dist/cli/__tests__/create.test.js.map +1 -0
- package/dist/cli/__tests__/dev.test.d.ts +2 -0
- package/dist/cli/__tests__/dev.test.d.ts.map +1 -0
- package/dist/cli/__tests__/dev.test.js +132 -0
- package/dist/cli/__tests__/dev.test.js.map +1 -0
- package/dist/cli/__tests__/discover.test.d.ts +2 -0
- package/dist/cli/__tests__/discover.test.d.ts.map +1 -0
- package/dist/cli/__tests__/discover.test.js +48 -0
- package/dist/cli/__tests__/discover.test.js.map +1 -0
- package/dist/cli/__tests__/doctor.test.d.ts +2 -0
- package/dist/cli/__tests__/doctor.test.d.ts.map +1 -0
- package/dist/cli/__tests__/doctor.test.js +56 -0
- package/dist/cli/__tests__/doctor.test.js.map +1 -0
- package/dist/cli/__tests__/generate.test.d.ts +2 -0
- package/dist/cli/__tests__/generate.test.d.ts.map +1 -0
- package/dist/cli/__tests__/generate.test.js +68 -0
- package/dist/cli/__tests__/generate.test.js.map +1 -0
- package/dist/cli/__tests__/init.test.d.ts +2 -0
- package/dist/cli/__tests__/init.test.d.ts.map +1 -0
- package/dist/cli/__tests__/init.test.js +75 -0
- package/dist/cli/__tests__/init.test.js.map +1 -0
- package/dist/cli/__tests__/migrate.test.d.ts +2 -0
- package/dist/cli/__tests__/migrate.test.d.ts.map +1 -0
- package/dist/cli/__tests__/migrate.test.js +285 -0
- package/dist/cli/__tests__/migrate.test.js.map +1 -0
- package/dist/cli/__tests__/templates.test.d.ts +2 -0
- package/dist/cli/__tests__/templates.test.d.ts.map +1 -0
- package/dist/cli/__tests__/templates.test.js +49 -0
- package/dist/cli/__tests__/templates.test.js.map +1 -0
- package/dist/cli/__tests__/test.test.d.ts +2 -0
- package/dist/cli/__tests__/test.test.d.ts.map +1 -0
- package/dist/cli/__tests__/test.test.js +40 -0
- package/dist/cli/__tests__/test.test.js.map +1 -0
- package/dist/cli/__tests__/ui.test.d.ts +2 -0
- package/dist/cli/__tests__/ui.test.d.ts.map +1 -0
- package/dist/cli/__tests__/ui.test.js +62 -0
- package/dist/cli/__tests__/ui.test.js.map +1 -0
- package/dist/cli/__tests__/utils.test.d.ts +2 -0
- package/dist/cli/__tests__/utils.test.d.ts.map +1 -0
- package/dist/cli/__tests__/utils.test.js +30 -0
- package/dist/cli/__tests__/utils.test.js.map +1 -0
- package/dist/cli/__tests__/verify.test.d.ts +2 -0
- package/dist/cli/__tests__/verify.test.d.ts.map +1 -0
- package/dist/cli/__tests__/verify.test.js +138 -0
- package/dist/cli/__tests__/verify.test.js.map +1 -0
- package/dist/cli/cli.d.ts +3 -0
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/cli/cli.js +33 -0
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/commands/__tests__/commands.test.d.ts +2 -0
- package/dist/cli/commands/__tests__/commands.test.d.ts.map +1 -0
- package/dist/cli/commands/__tests__/commands.test.js +180 -0
- package/dist/cli/commands/__tests__/commands.test.js.map +1 -0
- package/dist/cli/commands/agent.d.ts +17 -0
- package/dist/cli/commands/agent.d.ts.map +1 -0
- package/dist/cli/commands/agent.js +154 -0
- package/dist/cli/commands/agent.js.map +1 -0
- package/dist/cli/commands/capability.d.ts +7 -0
- package/dist/cli/commands/capability.d.ts.map +1 -0
- package/dist/cli/commands/capability.js +27 -0
- package/dist/cli/commands/capability.js.map +1 -0
- package/dist/cli/commands/certify.d.ts +24 -0
- package/dist/cli/commands/certify.d.ts.map +1 -0
- package/dist/cli/commands/certify.js +228 -0
- package/dist/cli/commands/certify.js.map +1 -0
- package/dist/cli/commands/create.d.ts +13 -0
- package/dist/cli/commands/create.d.ts.map +1 -0
- package/dist/cli/commands/create.js +190 -0
- package/dist/cli/commands/create.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +36 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/dev.js +178 -0
- package/dist/cli/commands/dev.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +31 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +233 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/e2e.d.ts +3 -0
- package/dist/cli/commands/e2e.d.ts.map +1 -0
- package/dist/cli/commands/e2e.js +165 -0
- package/dist/cli/commands/e2e.js.map +1 -0
- package/dist/cli/commands/entity.d.ts +3 -0
- package/dist/cli/commands/entity.d.ts.map +1 -0
- package/dist/cli/commands/entity.js +21 -0
- package/dist/cli/commands/entity.js.map +1 -0
- package/dist/cli/commands/event.d.ts +3 -0
- package/dist/cli/commands/event.d.ts.map +1 -0
- package/dist/cli/commands/event.js +21 -0
- package/dist/cli/commands/event.js.map +1 -0
- package/dist/cli/commands/flow.d.ts +3 -0
- package/dist/cli/commands/flow.d.ts.map +1 -0
- package/dist/cli/commands/flow.js +25 -0
- package/dist/cli/commands/flow.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +17 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +175 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/index.d.ts +20 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +45 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +20 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +261 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/migrate.d.ts +7 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -0
- package/dist/cli/commands/migrate.js +523 -0
- package/dist/cli/commands/migrate.js.map +1 -0
- package/dist/cli/commands/prompt.d.ts +3 -0
- package/dist/cli/commands/prompt.d.ts.map +1 -0
- package/dist/cli/commands/prompt.js +21 -0
- package/dist/cli/commands/prompt.js.map +1 -0
- package/dist/cli/commands/rag.d.ts +13 -0
- package/dist/cli/commands/rag.d.ts.map +1 -0
- package/dist/cli/commands/rag.js +100 -0
- package/dist/cli/commands/rag.js.map +1 -0
- package/dist/cli/commands/seed.d.ts +19 -0
- package/dist/cli/commands/seed.d.ts.map +1 -0
- package/dist/cli/commands/seed.js +183 -0
- package/dist/cli/commands/seed.js.map +1 -0
- package/dist/cli/commands/test.d.ts +17 -0
- package/dist/cli/commands/test.d.ts.map +1 -0
- package/dist/cli/commands/test.js +128 -0
- package/dist/cli/commands/test.js.map +1 -0
- package/dist/cli/commands/ui.d.ts +53 -0
- package/dist/cli/commands/ui.d.ts.map +1 -0
- package/dist/cli/commands/ui.js +291 -0
- package/dist/cli/commands/ui.js.map +1 -0
- package/dist/cli/commands/verify.d.ts +21 -0
- package/dist/cli/commands/verify.d.ts.map +1 -0
- package/dist/cli/commands/verify.js +153 -0
- package/dist/cli/commands/verify.js.map +1 -0
- package/dist/cli/discover.d.ts +26 -0
- package/dist/cli/discover.d.ts.map +1 -0
- package/dist/cli/discover.js +127 -0
- package/dist/cli/discover.js.map +1 -0
- package/dist/cli/index.d.ts +12 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +21 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/templates/resources.d.ts +8 -0
- package/dist/cli/templates/resources.d.ts.map +1 -0
- package/dist/cli/templates/resources.js +157 -0
- package/dist/cli/templates/resources.js.map +1 -0
- package/dist/cli/utils.d.ts +27 -0
- package/dist/cli/utils.d.ts.map +1 -0
- package/dist/cli/utils.js +69 -0
- package/dist/cli/utils.js.map +1 -0
- package/dist/config/__tests__/loader.test.d.ts +2 -0
- package/dist/config/__tests__/loader.test.d.ts.map +1 -0
- package/dist/config/__tests__/loader.test.js +462 -0
- package/dist/config/__tests__/loader.test.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +7 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +21 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +190 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/data/__tests__/registry.test.d.ts +2 -0
- package/dist/data/__tests__/registry.test.d.ts.map +1 -0
- package/dist/data/__tests__/registry.test.js +55 -0
- package/dist/data/__tests__/registry.test.js.map +1 -0
- package/dist/data/__tests__/repository.test.d.ts +2 -0
- package/dist/data/__tests__/repository.test.d.ts.map +1 -0
- package/dist/data/__tests__/repository.test.js +197 -0
- package/dist/data/__tests__/repository.test.js.map +1 -0
- package/dist/data/__tests__/schema-generator.test.d.ts +2 -0
- package/dist/data/__tests__/schema-generator.test.d.ts.map +1 -0
- package/dist/data/__tests__/schema-generator.test.js +112 -0
- package/dist/data/__tests__/schema-generator.test.js.map +1 -0
- package/dist/data/index.d.ts +5 -0
- package/dist/data/index.d.ts.map +1 -0
- package/dist/data/index.js +10 -0
- package/dist/data/index.js.map +1 -0
- package/dist/data/migration.d.ts +35 -0
- package/dist/data/migration.d.ts.map +1 -0
- package/dist/data/migration.js +55 -0
- package/dist/data/migration.js.map +1 -0
- package/dist/data/registry.d.ts +49 -0
- package/dist/data/registry.d.ts.map +1 -0
- package/dist/data/registry.js +74 -0
- package/dist/data/registry.js.map +1 -0
- package/dist/data/repository.d.ts +22 -0
- package/dist/data/repository.d.ts.map +1 -0
- package/dist/data/repository.js +170 -0
- package/dist/data/repository.js.map +1 -0
- package/dist/data/schema-generator.d.ts +12 -0
- package/dist/data/schema-generator.d.ts.map +1 -0
- package/dist/data/schema-generator.js +123 -0
- package/dist/data/schema-generator.js.map +1 -0
- package/dist/define/__tests__/defineCapability.test.d.ts +2 -0
- package/dist/define/__tests__/defineCapability.test.d.ts.map +1 -0
- package/dist/define/__tests__/defineCapability.test.js +66 -0
- package/dist/define/__tests__/defineCapability.test.js.map +1 -0
- package/dist/define/__tests__/defineEntity.test.d.ts +2 -0
- package/dist/define/__tests__/defineEntity.test.d.ts.map +1 -0
- package/dist/define/__tests__/defineEntity.test.js +50 -0
- package/dist/define/__tests__/defineEntity.test.js.map +1 -0
- package/dist/define/__tests__/defineEvent.test.d.ts +2 -0
- package/dist/define/__tests__/defineEvent.test.d.ts.map +1 -0
- package/dist/define/__tests__/defineEvent.test.js +35 -0
- package/dist/define/__tests__/defineEvent.test.js.map +1 -0
- package/dist/define/__tests__/defineFlow.test.d.ts +2 -0
- package/dist/define/__tests__/defineFlow.test.d.ts.map +1 -0
- package/dist/define/__tests__/defineFlow.test.js +49 -0
- package/dist/define/__tests__/defineFlow.test.js.map +1 -0
- package/dist/define/__tests__/definePrompt.test.d.ts +2 -0
- package/dist/define/__tests__/definePrompt.test.d.ts.map +1 -0
- package/dist/define/__tests__/definePrompt.test.js +40 -0
- package/dist/define/__tests__/definePrompt.test.js.map +1 -0
- package/dist/define/defineCapability.d.ts +38 -0
- package/dist/define/defineCapability.d.ts.map +1 -0
- package/dist/define/defineCapability.js +33 -0
- package/dist/define/defineCapability.js.map +1 -0
- package/dist/define/defineEntity.d.ts +16 -0
- package/dist/define/defineEntity.d.ts.map +1 -0
- package/dist/define/defineEntity.js +21 -0
- package/dist/define/defineEntity.js.map +1 -0
- package/dist/define/defineEvent.d.ts +13 -0
- package/dist/define/defineEvent.d.ts.map +1 -0
- package/dist/define/defineEvent.js +17 -0
- package/dist/define/defineEvent.js.map +1 -0
- package/dist/define/defineFlow.d.ts +17 -0
- package/dist/define/defineFlow.d.ts.map +1 -0
- package/dist/define/defineFlow.js +23 -0
- package/dist/define/defineFlow.js.map +1 -0
- package/dist/define/definePrompt.d.ts +15 -0
- package/dist/define/definePrompt.d.ts.map +1 -0
- package/dist/define/definePrompt.js +20 -0
- package/dist/define/definePrompt.js.map +1 -0
- package/dist/define/index.d.ts +6 -0
- package/dist/define/index.d.ts.map +1 -0
- package/dist/define/index.js +10 -0
- package/dist/define/index.js.map +1 -0
- package/dist/errors/__tests__/errors.test.d.ts +2 -0
- package/dist/errors/__tests__/errors.test.d.ts.map +1 -0
- package/dist/errors/__tests__/errors.test.js +42 -0
- package/dist/errors/__tests__/errors.test.js.map +1 -0
- package/dist/errors/__tests__/http.test.d.ts +2 -0
- package/dist/errors/__tests__/http.test.d.ts.map +1 -0
- package/dist/errors/__tests__/http.test.js +32 -0
- package/dist/errors/__tests__/http.test.js.map +1 -0
- package/dist/errors/http.d.ts +13 -0
- package/dist/errors/http.d.ts.map +1 -0
- package/dist/errors/http.js +26 -0
- package/dist/errors/http.js.map +1 -0
- package/dist/errors/index.d.ts +4 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +22 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/events/__tests__/consumer-registry.test.d.ts +2 -0
- package/dist/events/__tests__/consumer-registry.test.d.ts.map +1 -0
- package/dist/events/__tests__/consumer-registry.test.js +68 -0
- package/dist/events/__tests__/consumer-registry.test.js.map +1 -0
- package/dist/events/__tests__/dispatcher.test.d.ts +2 -0
- package/dist/events/__tests__/dispatcher.test.d.ts.map +1 -0
- package/dist/events/__tests__/dispatcher.test.js +168 -0
- package/dist/events/__tests__/dispatcher.test.js.map +1 -0
- package/dist/events/__tests__/event-emitter.test.d.ts +2 -0
- package/dist/events/__tests__/event-emitter.test.d.ts.map +1 -0
- package/dist/events/__tests__/event-emitter.test.js +100 -0
- package/dist/events/__tests__/event-emitter.test.js.map +1 -0
- package/dist/events/__tests__/event-registry.test.d.ts +2 -0
- package/dist/events/__tests__/event-registry.test.d.ts.map +1 -0
- package/dist/events/__tests__/event-registry.test.js +55 -0
- package/dist/events/__tests__/event-registry.test.js.map +1 -0
- package/dist/events/__tests__/event-worker.test.d.ts +2 -0
- package/dist/events/__tests__/event-worker.test.d.ts.map +1 -0
- package/dist/events/__tests__/event-worker.test.js +174 -0
- package/dist/events/__tests__/event-worker.test.js.map +1 -0
- package/dist/events/__tests__/queue.test.d.ts +2 -0
- package/dist/events/__tests__/queue.test.d.ts.map +1 -0
- package/dist/events/__tests__/queue.test.js +73 -0
- package/dist/events/__tests__/queue.test.js.map +1 -0
- package/dist/events/consumer-registry.d.ts +47 -0
- package/dist/events/consumer-registry.d.ts.map +1 -0
- package/dist/events/consumer-registry.js +79 -0
- package/dist/events/consumer-registry.js.map +1 -0
- package/dist/events/dispatcher.d.ts +31 -0
- package/dist/events/dispatcher.d.ts.map +1 -0
- package/dist/events/dispatcher.js +149 -0
- package/dist/events/dispatcher.js.map +1 -0
- package/dist/events/emitter.d.ts +22 -0
- package/dist/events/emitter.d.ts.map +1 -0
- package/dist/events/emitter.js +58 -0
- package/dist/events/emitter.js.map +1 -0
- package/dist/events/idempotency.d.ts +13 -0
- package/dist/events/idempotency.d.ts.map +1 -0
- package/dist/events/idempotency.js +25 -0
- package/dist/events/idempotency.js.map +1 -0
- package/dist/events/index.d.ts +15 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +23 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/outbox.d.ts +475 -0
- package/dist/events/outbox.d.ts.map +1 -0
- package/dist/events/outbox.js +48 -0
- package/dist/events/outbox.js.map +1 -0
- package/dist/events/queue.d.ts +58 -0
- package/dist/events/queue.d.ts.map +1 -0
- package/dist/events/queue.js +135 -0
- package/dist/events/queue.js.map +1 -0
- package/dist/events/registry.d.ts +36 -0
- package/dist/events/registry.d.ts.map +1 -0
- package/dist/events/registry.js +59 -0
- package/dist/events/registry.js.map +1 -0
- package/dist/events/worker.d.ts +34 -0
- package/dist/events/worker.d.ts.map +1 -0
- package/dist/events/worker.js +88 -0
- package/dist/events/worker.js.map +1 -0
- package/dist/execution/__tests__/authorization.test.d.ts +2 -0
- package/dist/execution/__tests__/authorization.test.d.ts.map +1 -0
- package/dist/execution/__tests__/authorization.test.js +88 -0
- package/dist/execution/__tests__/authorization.test.js.map +1 -0
- package/dist/execution/__tests__/capability-executor.test.d.ts +2 -0
- package/dist/execution/__tests__/capability-executor.test.d.ts.map +1 -0
- package/dist/execution/__tests__/capability-executor.test.js +184 -0
- package/dist/execution/__tests__/capability-executor.test.js.map +1 -0
- package/dist/execution/__tests__/capability-registry.test.d.ts +2 -0
- package/dist/execution/__tests__/capability-registry.test.d.ts.map +1 -0
- package/dist/execution/__tests__/capability-registry.test.js +50 -0
- package/dist/execution/__tests__/capability-registry.test.js.map +1 -0
- package/dist/execution/__tests__/context-factory.test.d.ts +2 -0
- package/dist/execution/__tests__/context-factory.test.d.ts.map +1 -0
- package/dist/execution/__tests__/context-factory.test.js +116 -0
- package/dist/execution/__tests__/context-factory.test.js.map +1 -0
- package/dist/execution/authorization.d.ts +11 -0
- package/dist/execution/authorization.d.ts.map +1 -0
- package/dist/execution/authorization.js +50 -0
- package/dist/execution/authorization.js.map +1 -0
- package/dist/execution/capability-executor.d.ts +23 -0
- package/dist/execution/capability-executor.d.ts.map +1 -0
- package/dist/execution/capability-executor.js +91 -0
- package/dist/execution/capability-executor.js.map +1 -0
- package/dist/execution/capability-registry.d.ts +33 -0
- package/dist/execution/capability-registry.d.ts.map +1 -0
- package/dist/execution/capability-registry.js +49 -0
- package/dist/execution/capability-registry.js.map +1 -0
- package/dist/execution/context-factory.d.ts +20 -0
- package/dist/execution/context-factory.d.ts.map +1 -0
- package/dist/execution/context-factory.js +98 -0
- package/dist/execution/context-factory.js.map +1 -0
- package/dist/execution/index.d.ts +8 -0
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/index.js +10 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/explanation/__tests__/tracker.test.d.ts +2 -0
- package/dist/explanation/__tests__/tracker.test.d.ts.map +1 -0
- package/dist/explanation/__tests__/tracker.test.js +169 -0
- package/dist/explanation/__tests__/tracker.test.js.map +1 -0
- package/dist/explanation/index.d.ts +3 -0
- package/dist/explanation/index.d.ts.map +1 -0
- package/dist/explanation/index.js +7 -0
- package/dist/explanation/index.js.map +1 -0
- package/dist/explanation/tracker.d.ts +81 -0
- package/dist/explanation/tracker.d.ts.map +1 -0
- package/dist/explanation/tracker.js +100 -0
- package/dist/explanation/tracker.js.map +1 -0
- package/dist/fields/__tests__/fields.test.d.ts +2 -0
- package/dist/fields/__tests__/fields.test.d.ts.map +1 -0
- package/dist/fields/__tests__/fields.test.js +60 -0
- package/dist/fields/__tests__/fields.test.js.map +1 -0
- package/dist/fields/index.d.ts +18 -0
- package/dist/fields/index.d.ts.map +1 -0
- package/dist/fields/index.js +51 -0
- package/dist/fields/index.js.map +1 -0
- package/dist/flows/__tests__/flow-engine.test.d.ts +2 -0
- package/dist/flows/__tests__/flow-engine.test.d.ts.map +1 -0
- package/dist/flows/__tests__/flow-engine.test.js +189 -0
- package/dist/flows/__tests__/flow-engine.test.js.map +1 -0
- package/dist/flows/__tests__/flow-registry.test.d.ts +2 -0
- package/dist/flows/__tests__/flow-registry.test.d.ts.map +1 -0
- package/dist/flows/__tests__/flow-registry.test.js +69 -0
- package/dist/flows/__tests__/flow-registry.test.js.map +1 -0
- package/dist/flows/__tests__/flow-service.test.d.ts +2 -0
- package/dist/flows/__tests__/flow-service.test.d.ts.map +1 -0
- package/dist/flows/__tests__/flow-service.test.js +47 -0
- package/dist/flows/__tests__/flow-service.test.js.map +1 -0
- package/dist/flows/__tests__/scheduler.test.d.ts +2 -0
- package/dist/flows/__tests__/scheduler.test.d.ts.map +1 -0
- package/dist/flows/__tests__/scheduler.test.js +120 -0
- package/dist/flows/__tests__/scheduler.test.js.map +1 -0
- package/dist/flows/__tests__/state-machine.test.d.ts +2 -0
- package/dist/flows/__tests__/state-machine.test.d.ts.map +1 -0
- package/dist/flows/__tests__/state-machine.test.js +62 -0
- package/dist/flows/__tests__/state-machine.test.js.map +1 -0
- package/dist/flows/__tests__/step-executor.test.d.ts +2 -0
- package/dist/flows/__tests__/step-executor.test.d.ts.map +1 -0
- package/dist/flows/__tests__/step-executor.test.js +139 -0
- package/dist/flows/__tests__/step-executor.test.js.map +1 -0
- package/dist/flows/__tests__/triggers.test.d.ts +2 -0
- package/dist/flows/__tests__/triggers.test.d.ts.map +1 -0
- package/dist/flows/__tests__/triggers.test.js +98 -0
- package/dist/flows/__tests__/triggers.test.js.map +1 -0
- package/dist/flows/dead-letter.d.ts +12 -0
- package/dist/flows/dead-letter.d.ts.map +1 -0
- package/dist/flows/dead-letter.js +63 -0
- package/dist/flows/dead-letter.js.map +1 -0
- package/dist/flows/engine.d.ts +35 -0
- package/dist/flows/engine.d.ts.map +1 -0
- package/dist/flows/engine.js +402 -0
- package/dist/flows/engine.js.map +1 -0
- package/dist/flows/flow-service.d.ts +10 -0
- package/dist/flows/flow-service.d.ts.map +1 -0
- package/dist/flows/flow-service.js +22 -0
- package/dist/flows/flow-service.js.map +1 -0
- package/dist/flows/index.d.ts +14 -0
- package/dist/flows/index.d.ts.map +1 -0
- package/dist/flows/index.js +25 -0
- package/dist/flows/index.js.map +1 -0
- package/dist/flows/registry.d.ts +47 -0
- package/dist/flows/registry.d.ts.map +1 -0
- package/dist/flows/registry.js +108 -0
- package/dist/flows/registry.js.map +1 -0
- package/dist/flows/scheduler.d.ts +41 -0
- package/dist/flows/scheduler.d.ts.map +1 -0
- package/dist/flows/scheduler.js +242 -0
- package/dist/flows/scheduler.js.map +1 -0
- package/dist/flows/schema.d.ts +627 -0
- package/dist/flows/schema.d.ts.map +1 -0
- package/dist/flows/schema.js +60 -0
- package/dist/flows/schema.js.map +1 -0
- package/dist/flows/state-machine.d.ts +41 -0
- package/dist/flows/state-machine.d.ts.map +1 -0
- package/dist/flows/state-machine.js +56 -0
- package/dist/flows/state-machine.js.map +1 -0
- package/dist/flows/step-executor.d.ts +36 -0
- package/dist/flows/step-executor.d.ts.map +1 -0
- package/dist/flows/step-executor.js +109 -0
- package/dist/flows/step-executor.js.map +1 -0
- package/dist/flows/triggers.d.ts +15 -0
- package/dist/flows/triggers.d.ts.map +1 -0
- package/dist/flows/triggers.js +36 -0
- package/dist/flows/triggers.js.map +1 -0
- package/dist/governance/__tests__/overrides.test.d.ts +2 -0
- package/dist/governance/__tests__/overrides.test.d.ts.map +1 -0
- package/dist/governance/__tests__/overrides.test.js +123 -0
- package/dist/governance/__tests__/overrides.test.js.map +1 -0
- package/dist/governance/__tests__/policies.test.d.ts +2 -0
- package/dist/governance/__tests__/policies.test.d.ts.map +1 -0
- package/dist/governance/__tests__/policies.test.js +203 -0
- package/dist/governance/__tests__/policies.test.js.map +1 -0
- package/dist/governance/__tests__/rules.test.d.ts +2 -0
- package/dist/governance/__tests__/rules.test.d.ts.map +1 -0
- package/dist/governance/__tests__/rules.test.js +342 -0
- package/dist/governance/__tests__/rules.test.js.map +1 -0
- package/dist/governance/index.d.ts +10 -0
- package/dist/governance/index.d.ts.map +1 -0
- package/dist/governance/index.js +12 -0
- package/dist/governance/index.js.map +1 -0
- package/dist/governance/overrides.d.ts +24 -0
- package/dist/governance/overrides.d.ts.map +1 -0
- package/dist/governance/overrides.js +74 -0
- package/dist/governance/overrides.js.map +1 -0
- package/dist/governance/policies.d.ts +22 -0
- package/dist/governance/policies.d.ts.map +1 -0
- package/dist/governance/policies.js +279 -0
- package/dist/governance/policies.js.map +1 -0
- package/dist/governance/reports.d.ts +15 -0
- package/dist/governance/reports.d.ts.map +1 -0
- package/dist/governance/reports.js +79 -0
- package/dist/governance/reports.js.map +1 -0
- package/dist/governance/rule-engine.d.ts +45 -0
- package/dist/governance/rule-engine.d.ts.map +1 -0
- package/dist/governance/rule-engine.js +60 -0
- package/dist/governance/rule-engine.js.map +1 -0
- package/dist/governance/rules/ai.d.ts +11 -0
- package/dist/governance/rules/ai.d.ts.map +1 -0
- package/dist/governance/rules/ai.js +88 -0
- package/dist/governance/rules/ai.js.map +1 -0
- package/dist/governance/rules/architecture.d.ts +13 -0
- package/dist/governance/rules/architecture.d.ts.map +1 -0
- package/dist/governance/rules/architecture.js +114 -0
- package/dist/governance/rules/architecture.js.map +1 -0
- package/dist/governance/rules/index.d.ts +5 -0
- package/dist/governance/rules/index.d.ts.map +1 -0
- package/dist/governance/rules/index.js +6 -0
- package/dist/governance/rules/index.js.map +1 -0
- package/dist/governance/rules/privacy.d.ts +11 -0
- package/dist/governance/rules/privacy.d.ts.map +1 -0
- package/dist/governance/rules/privacy.js +97 -0
- package/dist/governance/rules/privacy.js.map +1 -0
- package/dist/governance/rules/security.d.ts +11 -0
- package/dist/governance/rules/security.d.ts.map +1 -0
- package/dist/governance/rules/security.js +83 -0
- package/dist/governance/rules/security.js.map +1 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/observability/__tests__/metrics.test.d.ts +2 -0
- package/dist/observability/__tests__/metrics.test.d.ts.map +1 -0
- package/dist/observability/__tests__/metrics.test.js +301 -0
- package/dist/observability/__tests__/metrics.test.js.map +1 -0
- package/dist/observability/index.d.ts +3 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +7 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/metrics.d.ts +130 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +255 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/server/__tests__/bootstrap.test.d.ts +2 -0
- package/dist/server/__tests__/bootstrap.test.d.ts.map +1 -0
- package/dist/server/__tests__/bootstrap.test.js +223 -0
- package/dist/server/__tests__/bootstrap.test.js.map +1 -0
- package/dist/server/bootstrap.d.ts +44 -0
- package/dist/server/bootstrap.d.ts.map +1 -0
- package/dist/server/bootstrap.js +153 -0
- package/dist/server/bootstrap.js.map +1 -0
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +6 -0
- package/dist/server/index.js.map +1 -0
- package/dist/testing/__tests__/context.test.d.ts +2 -0
- package/dist/testing/__tests__/context.test.d.ts.map +1 -0
- package/dist/testing/__tests__/context.test.js +341 -0
- package/dist/testing/__tests__/context.test.js.map +1 -0
- package/dist/testing/__tests__/e2e.test.d.ts +2 -0
- package/dist/testing/__tests__/e2e.test.d.ts.map +1 -0
- package/dist/testing/__tests__/e2e.test.js +119 -0
- package/dist/testing/__tests__/e2e.test.js.map +1 -0
- package/dist/testing/__tests__/field-validation.test.d.ts +2 -0
- package/dist/testing/__tests__/field-validation.test.d.ts.map +1 -0
- package/dist/testing/__tests__/field-validation.test.js +178 -0
- package/dist/testing/__tests__/field-validation.test.js.map +1 -0
- package/dist/testing/__tests__/governance.test.d.ts +2 -0
- package/dist/testing/__tests__/governance.test.d.ts.map +1 -0
- package/dist/testing/__tests__/governance.test.js +222 -0
- package/dist/testing/__tests__/governance.test.js.map +1 -0
- package/dist/testing/__tests__/run-capability.test.d.ts +2 -0
- package/dist/testing/__tests__/run-capability.test.d.ts.map +1 -0
- package/dist/testing/__tests__/run-capability.test.js +114 -0
- package/dist/testing/__tests__/run-capability.test.js.map +1 -0
- package/dist/testing/__tests__/scaffolding.test.d.ts +2 -0
- package/dist/testing/__tests__/scaffolding.test.d.ts.map +1 -0
- package/dist/testing/__tests__/scaffolding.test.js +70 -0
- package/dist/testing/__tests__/scaffolding.test.js.map +1 -0
- package/dist/testing/__tests__/security.test.d.ts +2 -0
- package/dist/testing/__tests__/security.test.d.ts.map +1 -0
- package/dist/testing/__tests__/security.test.js +186 -0
- package/dist/testing/__tests__/security.test.js.map +1 -0
- package/dist/testing/__tests__/simulate-flow.test.d.ts +2 -0
- package/dist/testing/__tests__/simulate-flow.test.d.ts.map +1 -0
- package/dist/testing/__tests__/simulate-flow.test.js +198 -0
- package/dist/testing/__tests__/simulate-flow.test.js.map +1 -0
- package/dist/testing/context.d.ts +90 -0
- package/dist/testing/context.d.ts.map +1 -0
- package/dist/testing/context.js +230 -0
- package/dist/testing/context.js.map +1 -0
- package/dist/testing/e2e.d.ts +58 -0
- package/dist/testing/e2e.d.ts.map +1 -0
- package/dist/testing/e2e.js +118 -0
- package/dist/testing/e2e.js.map +1 -0
- package/dist/testing/field-validation.d.ts +18 -0
- package/dist/testing/field-validation.d.ts.map +1 -0
- package/dist/testing/field-validation.js +99 -0
- package/dist/testing/field-validation.js.map +1 -0
- package/dist/testing/governance.d.ts +38 -0
- package/dist/testing/governance.d.ts.map +1 -0
- package/dist/testing/governance.js +104 -0
- package/dist/testing/governance.js.map +1 -0
- package/dist/testing/index.d.ts +18 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +29 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/run-capability.d.ts +20 -0
- package/dist/testing/run-capability.d.ts.map +1 -0
- package/dist/testing/run-capability.js +19 -0
- package/dist/testing/run-capability.js.map +1 -0
- package/dist/testing/scaffolding.d.ts +46 -0
- package/dist/testing/scaffolding.d.ts.map +1 -0
- package/dist/testing/scaffolding.js +266 -0
- package/dist/testing/scaffolding.js.map +1 -0
- package/dist/testing/security.d.ts +42 -0
- package/dist/testing/security.d.ts.map +1 -0
- package/dist/testing/security.js +102 -0
- package/dist/testing/security.js.map +1 -0
- package/dist/testing/simulate-flow.d.ts +45 -0
- package/dist/testing/simulate-flow.d.ts.map +1 -0
- package/dist/testing/simulate-flow.js +136 -0
- package/dist/testing/simulate-flow.js.map +1 -0
- package/dist/types/audit.d.ts +15 -0
- package/dist/types/audit.d.ts.map +1 -0
- package/dist/types/audit.js +2 -0
- package/dist/types/audit.js.map +1 -0
- package/dist/types/capability.d.ts +38 -0
- package/dist/types/capability.d.ts.map +1 -0
- package/dist/types/capability.js +2 -0
- package/dist/types/capability.js.map +1 -0
- package/dist/types/config.d.ts +60 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/context.d.ts +90 -0
- package/dist/types/context.d.ts.map +1 -0
- package/dist/types/context.js +2 -0
- package/dist/types/context.js.map +1 -0
- package/dist/types/entity.d.ts +16 -0
- package/dist/types/entity.d.ts.map +1 -0
- package/dist/types/entity.js +2 -0
- package/dist/types/entity.js.map +1 -0
- package/dist/types/enums.d.ts +66 -0
- package/dist/types/enums.d.ts.map +1 -0
- package/dist/types/enums.js +66 -0
- package/dist/types/enums.js.map +1 -0
- package/dist/types/errors.d.ts +14 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +2 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/event.d.ts +21 -0
- package/dist/types/event.d.ts.map +1 -0
- package/dist/types/event.js +2 -0
- package/dist/types/event.js.map +1 -0
- package/dist/types/fields.d.ts +51 -0
- package/dist/types/fields.d.ts.map +1 -0
- package/dist/types/fields.js +2 -0
- package/dist/types/fields.js.map +1 -0
- package/dist/types/flow.d.ts +54 -0
- package/dist/types/flow.d.ts.map +1 -0
- package/dist/types/flow.js +2 -0
- package/dist/types/flow.js.map +1 -0
- package/dist/types/governance.d.ts +30 -0
- package/dist/types/governance.d.ts.map +1 -0
- package/dist/types/governance.js +2 -0
- package/dist/types/governance.js.map +1 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/prompt.d.ts +18 -0
- package/dist/types/prompt.d.ts.map +1 -0
- package/dist/types/prompt.js +2 -0
- package/dist/types/prompt.js.map +1 -0
- package/dist/types/security.d.ts +17 -0
- package/dist/types/security.d.ts.map +1 -0
- package/dist/types/security.js +2 -0
- package/dist/types/security.js.map +1 -0
- package/dist/vitest/index.d.ts +2 -0
- package/dist/vitest/index.d.ts.map +1 -0
- package/dist/vitest/index.js +5 -0
- package/dist/vitest/index.js.map +1 -0
- package/dist/worker/__tests__/bootstrap.test.d.ts +2 -0
- package/dist/worker/__tests__/bootstrap.test.d.ts.map +1 -0
- package/dist/worker/__tests__/bootstrap.test.js +211 -0
- package/dist/worker/__tests__/bootstrap.test.js.map +1 -0
- package/dist/worker/bootstrap.d.ts +51 -0
- package/dist/worker/bootstrap.d.ts.map +1 -0
- package/dist/worker/bootstrap.js +166 -0
- package/dist/worker/bootstrap.js.map +1 -0
- package/dist/worker/index.d.ts +3 -0
- package/dist/worker/index.d.ts.map +1 -0
- package/dist/worker/index.js +6 -0
- package/dist/worker/index.js.map +1 -0
- package/dist/zod/index.d.ts +2 -0
- package/dist/zod/index.d.ts.map +1 -0
- package/dist/zod/index.js +5 -0
- package/dist/zod/index.js.map +1 -0
- package/instructions/ai.md +183 -0
- package/instructions/capabilities.md +171 -0
- package/instructions/cli.md +113 -0
- package/instructions/entities.md +94 -0
- package/instructions/events.md +93 -0
- package/instructions/flows.md +114 -0
- package/instructions/framework.md +86 -0
- package/instructions/governance.md +78 -0
- package/instructions/patterns.md +107 -0
- package/instructions/security.md +79 -0
- package/instructions/testing.md +244 -0
- package/package.json +76 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outbox.d.ts","sourceRoot":"","sources":["../../src/events/outbox.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqBvB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAS5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAU1B,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { index, jsonb, pgTable, text, timestamp, uuid } from 'drizzle-orm/pg-core';
|
|
2
|
+
/**
|
|
3
|
+
* Outbox table — stores events written atomically alongside business data.
|
|
4
|
+
* A background dispatcher polls pending rows and publishes them to the queue.
|
|
5
|
+
*/
|
|
6
|
+
export const outboxTable = pgTable('event_outbox', {
|
|
7
|
+
id: uuid('id').defaultRandom().primaryKey(),
|
|
8
|
+
eventType: text('event_type').notNull(),
|
|
9
|
+
version: text('version').notNull().default('1'),
|
|
10
|
+
payload: jsonb('payload').notNull(),
|
|
11
|
+
actor: text('actor').notNull(),
|
|
12
|
+
tenantId: text('tenant_id'),
|
|
13
|
+
correlationId: text('correlation_id').notNull(),
|
|
14
|
+
causationId: text('causation_id'),
|
|
15
|
+
occurredAt: timestamp('occurred_at', { withTimezone: true }).defaultNow().notNull(),
|
|
16
|
+
status: text('status').notNull().default('pending'), // pending | processing | retry | dispatched | dead_lettered
|
|
17
|
+
dispatchedAt: timestamp('dispatched_at', { withTimezone: true }),
|
|
18
|
+
retryCount: text('retry_count').notNull().default('0'),
|
|
19
|
+
lastError: text('last_error'),
|
|
20
|
+
}, (table) => [
|
|
21
|
+
index('event_outbox_status_idx').on(table.status),
|
|
22
|
+
index('event_outbox_occurred_at_idx').on(table.occurredAt),
|
|
23
|
+
]);
|
|
24
|
+
/**
|
|
25
|
+
* Idempotency table — tracks which event+consumer pairs have been processed
|
|
26
|
+
* to support at-least-once delivery with consumer deduplication.
|
|
27
|
+
*/
|
|
28
|
+
export const idempotencyTable = pgTable('event_idempotency', {
|
|
29
|
+
id: uuid('id').defaultRandom().primaryKey(),
|
|
30
|
+
eventId: text('event_id').notNull(),
|
|
31
|
+
consumerId: text('consumer_id').notNull(),
|
|
32
|
+
processedAt: timestamp('processed_at', { withTimezone: true }).defaultNow().notNull(),
|
|
33
|
+
}, (table) => [index('event_idempotency_event_consumer_idx').on(table.eventId, table.consumerId)]);
|
|
34
|
+
/**
|
|
35
|
+
* Dead-letter table — events that exhausted retries.
|
|
36
|
+
*/
|
|
37
|
+
export const deadLetterTable = pgTable('event_dead_letter', {
|
|
38
|
+
id: uuid('id').defaultRandom().primaryKey(),
|
|
39
|
+
eventId: text('event_id').notNull(),
|
|
40
|
+
eventType: text('event_type').notNull(),
|
|
41
|
+
payload: jsonb('payload').notNull(),
|
|
42
|
+
consumerId: text('consumer_id'),
|
|
43
|
+
lastError: text('last_error'),
|
|
44
|
+
retryCount: text('retry_count').notNull(),
|
|
45
|
+
failedAt: timestamp('failed_at', { withTimezone: true }).defaultNow().notNull(),
|
|
46
|
+
metadata: jsonb('metadata'),
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=outbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outbox.js","sourceRoot":"","sources":["../../src/events/outbox.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { EventEnvelope } from '../types/event.js';
|
|
2
|
+
/**
|
|
3
|
+
* Abstract queue interface for publishing and consuming event envelopes.
|
|
4
|
+
* Implementations can back this with in-memory arrays (dev/test),
|
|
5
|
+
* Redis/BullMQ, SQS, etc.
|
|
6
|
+
*/
|
|
7
|
+
export interface EventQueue {
|
|
8
|
+
/** Enqueue an event for delivery to consumers */
|
|
9
|
+
publish(envelope: EventEnvelope): Promise<void>;
|
|
10
|
+
/** Subscribe to incoming events. Returns an unsubscribe function. */
|
|
11
|
+
subscribe(handler: (envelope: EventEnvelope) => Promise<void>): () => void;
|
|
12
|
+
/** Drain / shutdown the queue gracefully */
|
|
13
|
+
close(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Simple in-memory queue for development and testing.
|
|
17
|
+
* Events are delivered asynchronously to all subscribers.
|
|
18
|
+
*/
|
|
19
|
+
export declare function createInMemoryQueue(): EventQueue;
|
|
20
|
+
export interface RedisQueueConfig {
|
|
21
|
+
/** Redis connection URL (e.g., redis://localhost:6379) */
|
|
22
|
+
url?: string;
|
|
23
|
+
/** Redis host (default: "localhost") */
|
|
24
|
+
host?: string;
|
|
25
|
+
/** Redis port (default: 6379) */
|
|
26
|
+
port?: number;
|
|
27
|
+
/** Redis password */
|
|
28
|
+
password?: string;
|
|
29
|
+
/** Queue key prefix (default: "plumbus:events") */
|
|
30
|
+
prefix?: string;
|
|
31
|
+
/** Poll interval in ms for subscriber polling (default: 1000) */
|
|
32
|
+
pollIntervalMs?: number;
|
|
33
|
+
/** Visibility timeout in seconds — how long a message is hidden after dequeue (default: 30) */
|
|
34
|
+
visibilityTimeoutSec?: number;
|
|
35
|
+
}
|
|
36
|
+
/** Minimal Redis client interface — compatible with ioredis and node-redis */
|
|
37
|
+
export interface RedisClient {
|
|
38
|
+
lpush(key: string, ...values: string[]): Promise<number>;
|
|
39
|
+
brpoplpush?(source: string, destination: string, timeout: number): Promise<string | null>;
|
|
40
|
+
rpoplpush?(source: string, destination: string): Promise<string | null>;
|
|
41
|
+
lrem(key: string, count: number, value: string): Promise<number>;
|
|
42
|
+
lrange(key: string, start: number, stop: number): Promise<string[]>;
|
|
43
|
+
quit(): Promise<unknown>;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create a Redis-backed event queue.
|
|
47
|
+
*
|
|
48
|
+
* Uses a simple list-based pattern:
|
|
49
|
+
* - Publish: LPUSH events to the queue list
|
|
50
|
+
* - Subscribe: Poll with RPOPLPUSH to a processing list
|
|
51
|
+
* - Ack: LREM from processing list after successful handling
|
|
52
|
+
*
|
|
53
|
+
* This provides at-least-once delivery with crash recovery:
|
|
54
|
+
* if the consumer crashes, unacknowledged events remain in the
|
|
55
|
+
* processing list and can be recovered.
|
|
56
|
+
*/
|
|
57
|
+
export declare function createRedisQueue(client: RedisClient, config?: Partial<RedisQueueConfig>): EventQueue;
|
|
58
|
+
//# sourceMappingURL=queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../src/events/queue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,iDAAiD;IACjD,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,qEAAqE;IACrE,SAAS,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC;IAC3E,4CAA4C;IAC5C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,UAAU,CA+BhD;AAOD,MAAM,WAAW,gBAAgB;IAC/B,0DAA0D;IAC1D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mDAAmD;IACnD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iEAAiE;IACjE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+FAA+F;IAC/F,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,8EAA8E;AAC9E,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACzD,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC1F,SAAS,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACpE,IAAI,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CAC1B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,EACnB,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GACjC,UAAU,CAwFZ"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple in-memory queue for development and testing.
|
|
3
|
+
* Events are delivered asynchronously to all subscribers.
|
|
4
|
+
*/
|
|
5
|
+
export function createInMemoryQueue() {
|
|
6
|
+
const subscribers = [];
|
|
7
|
+
let closed = false;
|
|
8
|
+
const pending = [];
|
|
9
|
+
return {
|
|
10
|
+
async publish(envelope) {
|
|
11
|
+
if (closed)
|
|
12
|
+
throw new Error('Queue is closed');
|
|
13
|
+
for (const handler of subscribers) {
|
|
14
|
+
const p = handler(envelope).catch(() => {
|
|
15
|
+
/* delivery errors handled by worker */
|
|
16
|
+
});
|
|
17
|
+
pending.push(p);
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
subscribe(handler) {
|
|
21
|
+
if (closed)
|
|
22
|
+
throw new Error('Queue is closed');
|
|
23
|
+
subscribers.push(handler);
|
|
24
|
+
return () => {
|
|
25
|
+
const idx = subscribers.indexOf(handler);
|
|
26
|
+
if (idx !== -1)
|
|
27
|
+
subscribers.splice(idx, 1);
|
|
28
|
+
};
|
|
29
|
+
},
|
|
30
|
+
async close() {
|
|
31
|
+
closed = true;
|
|
32
|
+
await Promise.allSettled(pending);
|
|
33
|
+
subscribers.length = 0;
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Create a Redis-backed event queue.
|
|
39
|
+
*
|
|
40
|
+
* Uses a simple list-based pattern:
|
|
41
|
+
* - Publish: LPUSH events to the queue list
|
|
42
|
+
* - Subscribe: Poll with RPOPLPUSH to a processing list
|
|
43
|
+
* - Ack: LREM from processing list after successful handling
|
|
44
|
+
*
|
|
45
|
+
* This provides at-least-once delivery with crash recovery:
|
|
46
|
+
* if the consumer crashes, unacknowledged events remain in the
|
|
47
|
+
* processing list and can be recovered.
|
|
48
|
+
*/
|
|
49
|
+
export function createRedisQueue(client, config) {
|
|
50
|
+
const prefix = config?.prefix ?? 'plumbus:events';
|
|
51
|
+
const pollIntervalMs = config?.pollIntervalMs ?? 1000;
|
|
52
|
+
const queueKey = `${prefix}:pending`;
|
|
53
|
+
const processingKey = `${prefix}:processing`;
|
|
54
|
+
const subscribers = [];
|
|
55
|
+
let closed = false;
|
|
56
|
+
let pollTimer = null;
|
|
57
|
+
let polling = false;
|
|
58
|
+
async function pollOnce() {
|
|
59
|
+
if (closed || polling || subscribers.length === 0)
|
|
60
|
+
return;
|
|
61
|
+
polling = true;
|
|
62
|
+
try {
|
|
63
|
+
// Move one item from pending to processing atomically
|
|
64
|
+
let raw = null;
|
|
65
|
+
if (client.rpoplpush) {
|
|
66
|
+
raw = await client.rpoplpush(queueKey, processingKey);
|
|
67
|
+
}
|
|
68
|
+
else if (client.brpoplpush) {
|
|
69
|
+
raw = await client.brpoplpush(queueKey, processingKey, 0);
|
|
70
|
+
}
|
|
71
|
+
if (!raw) {
|
|
72
|
+
polling = false;
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const envelope = JSON.parse(raw);
|
|
76
|
+
// Restore Date object
|
|
77
|
+
if (typeof envelope.occurredAt === 'string') {
|
|
78
|
+
envelope.occurredAt = new Date(envelope.occurredAt);
|
|
79
|
+
}
|
|
80
|
+
// Deliver to all subscribers
|
|
81
|
+
const results = await Promise.allSettled(subscribers.map((handler) => handler(envelope)));
|
|
82
|
+
// If at least one subscriber succeeded, acknowledge the message
|
|
83
|
+
const anySuccess = results.some((r) => r.status === 'fulfilled');
|
|
84
|
+
if (anySuccess) {
|
|
85
|
+
await client.lrem(processingKey, 1, raw);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
// Poll errors are transient — will retry next cycle
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
polling = false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function startPolling() {
|
|
96
|
+
if (pollTimer)
|
|
97
|
+
return;
|
|
98
|
+
pollTimer = setInterval(() => {
|
|
99
|
+
void pollOnce();
|
|
100
|
+
}, pollIntervalMs);
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
async publish(envelope) {
|
|
104
|
+
if (closed)
|
|
105
|
+
throw new Error('Queue is closed');
|
|
106
|
+
const serialized = JSON.stringify(envelope);
|
|
107
|
+
await client.lpush(queueKey, serialized);
|
|
108
|
+
},
|
|
109
|
+
subscribe(handler) {
|
|
110
|
+
if (closed)
|
|
111
|
+
throw new Error('Queue is closed');
|
|
112
|
+
subscribers.push(handler);
|
|
113
|
+
startPolling();
|
|
114
|
+
return () => {
|
|
115
|
+
const idx = subscribers.indexOf(handler);
|
|
116
|
+
if (idx !== -1)
|
|
117
|
+
subscribers.splice(idx, 1);
|
|
118
|
+
if (subscribers.length === 0 && pollTimer) {
|
|
119
|
+
clearInterval(pollTimer);
|
|
120
|
+
pollTimer = null;
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
},
|
|
124
|
+
async close() {
|
|
125
|
+
closed = true;
|
|
126
|
+
if (pollTimer) {
|
|
127
|
+
clearInterval(pollTimer);
|
|
128
|
+
pollTimer = null;
|
|
129
|
+
}
|
|
130
|
+
subscribers.length = 0;
|
|
131
|
+
await client.quit();
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
//# sourceMappingURL=queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/events/queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { EventDefinition } from '../types/event.js';
|
|
2
|
+
/**
|
|
3
|
+
* Registry that holds all discovered/registered event definitions,
|
|
4
|
+
* indexed by name (and optionally version) for schema validation
|
|
5
|
+
* during emission and consumer routing.
|
|
6
|
+
*/
|
|
7
|
+
export declare class EventRegistry {
|
|
8
|
+
private events;
|
|
9
|
+
/**
|
|
10
|
+
* Register an event definition. Throws on duplicate names.
|
|
11
|
+
* Stores under both the plain name and the versioned key (name@version).
|
|
12
|
+
*/
|
|
13
|
+
register(event: EventDefinition): void;
|
|
14
|
+
/**
|
|
15
|
+
* Register multiple event definitions at once.
|
|
16
|
+
*/
|
|
17
|
+
registerAll(events: EventDefinition[]): void;
|
|
18
|
+
/**
|
|
19
|
+
* Get an event definition by name (and optional version).
|
|
20
|
+
*/
|
|
21
|
+
get(name: string, version?: string): EventDefinition | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* Check if an event is registered.
|
|
24
|
+
*/
|
|
25
|
+
has(name: string, version?: string): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Return all registered event definitions.
|
|
28
|
+
*/
|
|
29
|
+
getAll(): EventDefinition[];
|
|
30
|
+
/**
|
|
31
|
+
* Return all events for a specific domain.
|
|
32
|
+
*/
|
|
33
|
+
getByDomain(domain: string): EventDefinition[];
|
|
34
|
+
private key;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/events/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD;;;;GAIG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAsC;IAEpD;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAYtC;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI;IAM5C;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAIhE;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;IAI5C;;OAEG;IACH,MAAM,IAAI,eAAe,EAAE;IAI3B;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,EAAE;IAI9C,OAAO,CAAC,GAAG;CAGZ"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registry that holds all discovered/registered event definitions,
|
|
3
|
+
* indexed by name (and optionally version) for schema validation
|
|
4
|
+
* during emission and consumer routing.
|
|
5
|
+
*/
|
|
6
|
+
export class EventRegistry {
|
|
7
|
+
events = new Map();
|
|
8
|
+
/**
|
|
9
|
+
* Register an event definition. Throws on duplicate names.
|
|
10
|
+
* Stores under both the plain name and the versioned key (name@version).
|
|
11
|
+
*/
|
|
12
|
+
register(event) {
|
|
13
|
+
const key = this.key(event.name, event.version);
|
|
14
|
+
if (this.events.has(key)) {
|
|
15
|
+
throw new Error(`Event "${key}" is already registered`);
|
|
16
|
+
}
|
|
17
|
+
this.events.set(key, event);
|
|
18
|
+
// Also store under the plain name for version-agnostic lookups
|
|
19
|
+
if (event.version && !this.events.has(event.name)) {
|
|
20
|
+
this.events.set(event.name, event);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Register multiple event definitions at once.
|
|
25
|
+
*/
|
|
26
|
+
registerAll(events) {
|
|
27
|
+
for (const event of events) {
|
|
28
|
+
this.register(event);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get an event definition by name (and optional version).
|
|
33
|
+
*/
|
|
34
|
+
get(name, version) {
|
|
35
|
+
return this.events.get(this.key(name, version));
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Check if an event is registered.
|
|
39
|
+
*/
|
|
40
|
+
has(name, version) {
|
|
41
|
+
return this.events.has(this.key(name, version));
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Return all registered event definitions.
|
|
45
|
+
*/
|
|
46
|
+
getAll() {
|
|
47
|
+
return Array.from(this.events.values());
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Return all events for a specific domain.
|
|
51
|
+
*/
|
|
52
|
+
getByDomain(domain) {
|
|
53
|
+
return this.getAll().filter((e) => e.domain === domain);
|
|
54
|
+
}
|
|
55
|
+
key(name, version) {
|
|
56
|
+
return version ? `${name}@${version}` : name;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/events/registry.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,OAAO,aAAa;IAChB,MAAM,GAAG,IAAI,GAAG,EAA2B,CAAC;IAEpD;;;OAGG;IACH,QAAQ,CAAC,KAAsB;QAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAChD,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,UAAU,GAAG,yBAAyB,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5B,+DAA+D;QAC/D,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,MAAyB;QACnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY,EAAE,OAAgB;QAChC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,IAAY,EAAE,OAAgB;QAChC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,MAAM;QACJ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,MAAc;QACxB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IAC1D,CAAC;IAEO,GAAG,CAAC,IAAY,EAAE,OAAgB;QACxC,OAAO,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/C,CAAC;CACF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { PostgresJsDatabase } from 'drizzle-orm/postgres-js';
|
|
2
|
+
import type { EventEnvelope } from '../types/event.js';
|
|
3
|
+
import type { ConsumerRegistry } from './consumer-registry.js';
|
|
4
|
+
import type { IdempotencyService } from './idempotency.js';
|
|
5
|
+
import type { EventQueue } from './queue.js';
|
|
6
|
+
export interface WorkerConfig {
|
|
7
|
+
db: PostgresJsDatabase;
|
|
8
|
+
queue: EventQueue;
|
|
9
|
+
consumers: ConsumerRegistry;
|
|
10
|
+
idempotency: IdempotencyService;
|
|
11
|
+
/** Default max retries per consumer (default: 3) */
|
|
12
|
+
defaultMaxRetries?: number;
|
|
13
|
+
/** Base delay in ms for exponential backoff between retries (default: 100) */
|
|
14
|
+
retryBackoffBaseMs?: number;
|
|
15
|
+
/** Max backoff delay in ms (default: 5000) */
|
|
16
|
+
retryBackoffMaxMs?: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Creates an event delivery worker that subscribes to the queue,
|
|
20
|
+
* routes events to registered consumers with idempotency checks,
|
|
21
|
+
* and dead-letters events that exhaust retries.
|
|
22
|
+
*
|
|
23
|
+
* Returns start/stop controls.
|
|
24
|
+
*/
|
|
25
|
+
export declare function createEventWorker(config: WorkerConfig): {
|
|
26
|
+
/** Process a single envelope (useful for testing) */
|
|
27
|
+
deliver: (envelope: EventEnvelope) => Promise<void>;
|
|
28
|
+
/** Start subscribing to the queue */
|
|
29
|
+
start(): void;
|
|
30
|
+
/** Stop the worker */
|
|
31
|
+
stop(): void;
|
|
32
|
+
readonly isRunning: boolean;
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.d.ts","sourceRoot":"","sources":["../../src/events/worker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,kBAAkB,CAAC;IACvB,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,gBAAgB,CAAC;IAC5B,WAAW,EAAE,kBAAkB,CAAC;IAChC,oDAAoD;IACpD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,8EAA8E;IAC9E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,8CAA8C;IAC9C,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,YAAY;IA0ElD,qDAAqD;wBAlDtB,aAAa,KAAG,OAAO,CAAC,IAAI,CAAC;IAqD5D,qCAAqC;aAC5B,IAAI;IAKb,sBAAsB;YACd,IAAI;wBAOK,OAAO;EAI3B"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { deadLetterTable } from './outbox.js';
|
|
2
|
+
/**
|
|
3
|
+
* Creates an event delivery worker that subscribes to the queue,
|
|
4
|
+
* routes events to registered consumers with idempotency checks,
|
|
5
|
+
* and dead-letters events that exhaust retries.
|
|
6
|
+
*
|
|
7
|
+
* Returns start/stop controls.
|
|
8
|
+
*/
|
|
9
|
+
export function createEventWorker(config) {
|
|
10
|
+
const { db, queue, consumers, idempotency, defaultMaxRetries = 3, retryBackoffBaseMs = 100, retryBackoffMaxMs = 5000, } = config;
|
|
11
|
+
let unsubscribe = null;
|
|
12
|
+
/** Compute exponential backoff with jitter */
|
|
13
|
+
function computeRetryDelay(attempt) {
|
|
14
|
+
const base = Math.min(retryBackoffBaseMs * 2 ** attempt, retryBackoffMaxMs);
|
|
15
|
+
// Add jitter: random value between 0 and base
|
|
16
|
+
return base + Math.floor(Math.random() * base * 0.5);
|
|
17
|
+
}
|
|
18
|
+
function sleep(ms) {
|
|
19
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
20
|
+
}
|
|
21
|
+
async function deliver(envelope) {
|
|
22
|
+
const matched = consumers.getConsumers(envelope.eventType, envelope.version);
|
|
23
|
+
for (const consumer of matched) {
|
|
24
|
+
const maxRetries = consumer.maxRetries ?? defaultMaxRetries;
|
|
25
|
+
// Idempotency guard
|
|
26
|
+
const alreadyProcessed = await idempotency.isProcessed(envelope.id, consumer.id);
|
|
27
|
+
if (alreadyProcessed)
|
|
28
|
+
continue;
|
|
29
|
+
let lastError;
|
|
30
|
+
let attempt = 0;
|
|
31
|
+
let succeeded = false;
|
|
32
|
+
while (attempt < maxRetries && !succeeded) {
|
|
33
|
+
attempt++;
|
|
34
|
+
try {
|
|
35
|
+
await consumer.handler(envelope);
|
|
36
|
+
succeeded = true;
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
lastError = err instanceof Error ? err.message : String(err);
|
|
40
|
+
if (attempt < maxRetries) {
|
|
41
|
+
await sleep(computeRetryDelay(attempt - 1));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
if (succeeded) {
|
|
46
|
+
await idempotency.markProcessed(envelope.id, consumer.id);
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
// Dead-letter
|
|
50
|
+
await db.insert(deadLetterTable).values({
|
|
51
|
+
eventId: envelope.id,
|
|
52
|
+
eventType: envelope.eventType,
|
|
53
|
+
payload: envelope.payload,
|
|
54
|
+
consumerId: consumer.id,
|
|
55
|
+
lastError: lastError ?? 'Unknown error',
|
|
56
|
+
retryCount: String(attempt),
|
|
57
|
+
metadata: {
|
|
58
|
+
correlationId: envelope.correlationId,
|
|
59
|
+
causationId: envelope.causationId,
|
|
60
|
+
actor: envelope.actor,
|
|
61
|
+
tenantId: envelope.tenantId,
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
/** Process a single envelope (useful for testing) */
|
|
69
|
+
deliver,
|
|
70
|
+
/** Start subscribing to the queue */
|
|
71
|
+
start() {
|
|
72
|
+
if (unsubscribe)
|
|
73
|
+
return;
|
|
74
|
+
unsubscribe = queue.subscribe(deliver);
|
|
75
|
+
},
|
|
76
|
+
/** Stop the worker */
|
|
77
|
+
stop() {
|
|
78
|
+
if (unsubscribe) {
|
|
79
|
+
unsubscribe();
|
|
80
|
+
unsubscribe = null;
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
get isRunning() {
|
|
84
|
+
return unsubscribe !== null;
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=worker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/events/worker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorization.test.d.ts","sourceRoot":"","sources":["../../../src/execution/__tests__/authorization.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { evaluateAccess } from '../authorization.js';
|
|
3
|
+
function makeAuth(overrides = {}) {
|
|
4
|
+
return {
|
|
5
|
+
userId: 'user-1',
|
|
6
|
+
roles: ['editor'],
|
|
7
|
+
scopes: ['read', 'write'],
|
|
8
|
+
provider: 'test',
|
|
9
|
+
tenantId: 'tenant-1',
|
|
10
|
+
...overrides,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
describe('evaluateAccess', () => {
|
|
14
|
+
it('denies when no policy is provided', () => {
|
|
15
|
+
const result = evaluateAccess(undefined, makeAuth());
|
|
16
|
+
expect(result.allowed).toBe(false);
|
|
17
|
+
expect(result.reason).toContain('No access policy');
|
|
18
|
+
});
|
|
19
|
+
it('allows public capabilities without authentication', () => {
|
|
20
|
+
const policy = { public: true };
|
|
21
|
+
const result = evaluateAccess(policy, makeAuth({ userId: undefined }));
|
|
22
|
+
expect(result.allowed).toBe(true);
|
|
23
|
+
});
|
|
24
|
+
it('denies unauthenticated non-public access', () => {
|
|
25
|
+
const policy = { roles: ['admin'] };
|
|
26
|
+
const result = evaluateAccess(policy, makeAuth({ userId: undefined }));
|
|
27
|
+
expect(result.allowed).toBe(false);
|
|
28
|
+
expect(result.reason).toContain('Authentication required');
|
|
29
|
+
});
|
|
30
|
+
it('allows when caller has a required role', () => {
|
|
31
|
+
const policy = { roles: ['editor', 'admin'] };
|
|
32
|
+
const result = evaluateAccess(policy, makeAuth({ roles: ['editor'] }));
|
|
33
|
+
expect(result.allowed).toBe(true);
|
|
34
|
+
});
|
|
35
|
+
it('denies when caller lacks required roles', () => {
|
|
36
|
+
const policy = { roles: ['admin'] };
|
|
37
|
+
const result = evaluateAccess(policy, makeAuth({ roles: ['viewer'] }));
|
|
38
|
+
expect(result.allowed).toBe(false);
|
|
39
|
+
expect(result.reason).toContain('Required roles');
|
|
40
|
+
});
|
|
41
|
+
it('allows when caller has all required scopes', () => {
|
|
42
|
+
const policy = { scopes: ['read', 'write'] };
|
|
43
|
+
const result = evaluateAccess(policy, makeAuth({ scopes: ['read', 'write', 'delete'] }));
|
|
44
|
+
expect(result.allowed).toBe(true);
|
|
45
|
+
});
|
|
46
|
+
it('denies when caller is missing a required scope', () => {
|
|
47
|
+
const policy = { scopes: ['read', 'admin'] };
|
|
48
|
+
const result = evaluateAccess(policy, makeAuth({ scopes: ['read'] }));
|
|
49
|
+
expect(result.allowed).toBe(false);
|
|
50
|
+
expect(result.reason).toContain('Missing scopes: admin');
|
|
51
|
+
});
|
|
52
|
+
it('denies tenant-scoped access without tenantId', () => {
|
|
53
|
+
const policy = { tenantScoped: true };
|
|
54
|
+
const result = evaluateAccess(policy, makeAuth({ tenantId: undefined }));
|
|
55
|
+
expect(result.allowed).toBe(false);
|
|
56
|
+
expect(result.reason).toContain('Tenant context required');
|
|
57
|
+
});
|
|
58
|
+
it('allows tenant-scoped access with tenantId', () => {
|
|
59
|
+
const policy = { tenantScoped: true };
|
|
60
|
+
const result = evaluateAccess(policy, makeAuth({ tenantId: 't-1' }));
|
|
61
|
+
expect(result.allowed).toBe(true);
|
|
62
|
+
});
|
|
63
|
+
it('allows recognized service accounts', () => {
|
|
64
|
+
const policy = {
|
|
65
|
+
serviceAccounts: ['svc-worker'],
|
|
66
|
+
roles: ['admin'],
|
|
67
|
+
};
|
|
68
|
+
const result = evaluateAccess(policy, makeAuth({ userId: 'svc-worker', roles: [] }));
|
|
69
|
+
expect(result.allowed).toBe(true);
|
|
70
|
+
});
|
|
71
|
+
it('falls through to role check for non-service accounts', () => {
|
|
72
|
+
const policy = {
|
|
73
|
+
serviceAccounts: ['svc-worker'],
|
|
74
|
+
roles: ['admin'],
|
|
75
|
+
};
|
|
76
|
+
const result = evaluateAccess(policy, makeAuth({ userId: 'regular-user', roles: ['viewer'] }));
|
|
77
|
+
expect(result.allowed).toBe(false);
|
|
78
|
+
});
|
|
79
|
+
it('allows when both roles and scopes match', () => {
|
|
80
|
+
const policy = {
|
|
81
|
+
roles: ['editor'],
|
|
82
|
+
scopes: ['write'],
|
|
83
|
+
};
|
|
84
|
+
const result = evaluateAccess(policy, makeAuth({ roles: ['editor'], scopes: ['read', 'write'] }));
|
|
85
|
+
expect(result.allowed).toBe(true);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
//# sourceMappingURL=authorization.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorization.test.js","sourceRoot":"","sources":["../../../src/execution/__tests__/authorization.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability-executor.test.d.ts","sourceRoot":"","sources":["../../../src/execution/__tests__/capability-executor.test.ts"],"names":[],"mappings":""}
|