@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,114 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { CapabilityKind } from '../../types/enums.js';
|
|
4
|
+
import { createTestContext } from '../context.js';
|
|
5
|
+
import { runCapability } from '../run-capability.js';
|
|
6
|
+
// ── Test Capability Factories ──
|
|
7
|
+
function echoCapability() {
|
|
8
|
+
return {
|
|
9
|
+
name: 'echo',
|
|
10
|
+
kind: CapabilityKind.Query,
|
|
11
|
+
domain: 'test',
|
|
12
|
+
input: z.object({ message: z.string() }),
|
|
13
|
+
output: z.object({ echo: z.string() }),
|
|
14
|
+
access: { roles: ['user', 'admin'] },
|
|
15
|
+
effects: { data: [], events: [], external: [], ai: false },
|
|
16
|
+
handler: async (_ctx, input) => ({ echo: input.message }),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function adminOnlyCapability() {
|
|
20
|
+
return {
|
|
21
|
+
name: 'admin-action',
|
|
22
|
+
kind: CapabilityKind.Action,
|
|
23
|
+
domain: 'test',
|
|
24
|
+
input: z.object({ value: z.number() }),
|
|
25
|
+
output: z.object({ ok: z.boolean() }),
|
|
26
|
+
access: { roles: ['admin'] },
|
|
27
|
+
effects: { data: [], events: [], external: [], ai: false },
|
|
28
|
+
handler: async () => ({ ok: true }),
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
function failingCapability() {
|
|
32
|
+
return {
|
|
33
|
+
name: 'failing',
|
|
34
|
+
kind: CapabilityKind.Action,
|
|
35
|
+
domain: 'test',
|
|
36
|
+
input: z.object({}),
|
|
37
|
+
output: z.object({}),
|
|
38
|
+
access: { public: true },
|
|
39
|
+
effects: { data: [], events: [], external: [], ai: false },
|
|
40
|
+
handler: async () => {
|
|
41
|
+
throw new Error('handler exploded');
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
// ── Tests ──
|
|
46
|
+
describe('runCapability', () => {
|
|
47
|
+
it('executes a capability with valid input and returns success', async () => {
|
|
48
|
+
const result = await runCapability(echoCapability(), { message: 'hello' });
|
|
49
|
+
expect(result.success).toBe(true);
|
|
50
|
+
if (result.success) {
|
|
51
|
+
expect(result.data).toEqual({ echo: 'hello' });
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
it('returns validation error for invalid input', async () => {
|
|
55
|
+
const result = await runCapability(echoCapability(), { message: 42 }); // message should be string
|
|
56
|
+
expect(result.success).toBe(false);
|
|
57
|
+
if (!result.success) {
|
|
58
|
+
expect(result.error.code).toBe('validation');
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
it('returns forbidden error when user lacks required role', async () => {
|
|
62
|
+
const result = await runCapability(adminOnlyCapability(), { value: 1 }, {
|
|
63
|
+
auth: { roles: ['user'] }, // not admin
|
|
64
|
+
});
|
|
65
|
+
expect(result.success).toBe(false);
|
|
66
|
+
if (!result.success) {
|
|
67
|
+
expect(result.error.code).toBe('forbidden');
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
it('succeeds when user has required role', async () => {
|
|
71
|
+
const result = await runCapability(adminOnlyCapability(), { value: 1 }, {
|
|
72
|
+
auth: { roles: ['admin'] },
|
|
73
|
+
});
|
|
74
|
+
expect(result.success).toBe(true);
|
|
75
|
+
if (result.success) {
|
|
76
|
+
expect(result.data).toEqual({ ok: true });
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
it('handles handler errors gracefully', async () => {
|
|
80
|
+
const result = await runCapability(failingCapability(), {});
|
|
81
|
+
expect(result.success).toBe(false);
|
|
82
|
+
});
|
|
83
|
+
it('accepts a pre-built context', async () => {
|
|
84
|
+
const ctx = createTestContext({ auth: { roles: ['admin'] } });
|
|
85
|
+
const result = await runCapability(adminOnlyCapability(), { value: 5 }, { ctx });
|
|
86
|
+
expect(result.success).toBe(true);
|
|
87
|
+
});
|
|
88
|
+
it('records audit events during execution', async () => {
|
|
89
|
+
const result = await runCapability({
|
|
90
|
+
...echoCapability(),
|
|
91
|
+
audit: { enabled: true, event: 'echo.executed' },
|
|
92
|
+
}, { message: 'test' });
|
|
93
|
+
expect(result.success).toBe(true);
|
|
94
|
+
});
|
|
95
|
+
it('validates output schema', async () => {
|
|
96
|
+
// Create capability that returns wrong output type
|
|
97
|
+
const badOutput = {
|
|
98
|
+
name: 'bad-output',
|
|
99
|
+
kind: CapabilityKind.Query,
|
|
100
|
+
domain: 'test',
|
|
101
|
+
input: z.object({}),
|
|
102
|
+
output: z.object({ required: z.string() }),
|
|
103
|
+
access: { public: true },
|
|
104
|
+
effects: { data: [], events: [], external: [], ai: false },
|
|
105
|
+
handler: async () => ({ wrong: 123 }), // doesn't match output schema
|
|
106
|
+
};
|
|
107
|
+
const result = await runCapability(badOutput, {});
|
|
108
|
+
expect(result.success).toBe(false);
|
|
109
|
+
if (!result.success) {
|
|
110
|
+
expect(result.error.code).toBe('internal');
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
//# sourceMappingURL=run-capability.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-capability.test.js","sourceRoot":"","sources":["../../../src/testing/__tests__/run-capability.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,kCAAkC;AAElC,SAAS,cAAc;IAIrB,OAAO;QACL,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,cAAc,CAAC,KAAK;QAC1B,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACxC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACtC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;QACpC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE;QAC1D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;KAC1D,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB;IAC1B,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,cAAc,CAAC,MAAM;QAC3B,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACtC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QACrC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE;QAC5B,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE;QAC1D,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;KACpC,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB;IACxB,OAAO;QACL,IAAI,EAAE,SAAS;QACf,IAAI,EAAE,cAAc,CAAC,MAAM;QAC3B,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACnB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;QACpB,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;QACxB,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE;QAC1D,OAAO,EAAE,KAAK,IAAI,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,cAAc;AAEd,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,cAAc,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;QAC3E,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC1D,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,cAAc,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,2BAA2B;QAClG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACrE,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC,mBAAmB,EAAE,EACrB,EAAE,KAAK,EAAE,CAAC,EAAE,EACZ;YACE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY;SACxC,CACF,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACpD,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC,mBAAmB,EAAE,EACrB,EAAE,KAAK,EAAE,CAAC,EAAE,EACZ;YACE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE;SAC3B,CACF,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,iBAAiB,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,GAAG,GAAG,iBAAiB,CAAC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,mBAAmB,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;QACjF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC;YACE,GAAG,cAAc,EAAE;YACnB,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,eAAe,EAAE;SACjD,EACD,EAAE,OAAO,EAAE,MAAM,EAAE,CACpB,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACvC,mDAAmD;QACnD,MAAM,SAAS,GAAuB;YACpC,IAAI,EAAE,YAAY;YAClB,IAAI,EAAE,cAAc,CAAC,KAAK;YAC1B,MAAM,EAAE,MAAM;YACd,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;YACnB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1C,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;YACxB,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE;YAC1D,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,8BAA8B;SACtE,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAClD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffolding.test.d.ts","sourceRoot":"","sources":["../../../src/testing/__tests__/scaffolding.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { generateCapabilityTest, generateFlowTest, generateGovernanceTest, generateSecurityTest, } from '../scaffolding.js';
|
|
3
|
+
describe('generateCapabilityTest', () => {
|
|
4
|
+
it('generates valid test file content', () => {
|
|
5
|
+
const output = generateCapabilityTest('create-order', 'orders');
|
|
6
|
+
expect(output).toContain('import { describe, it, expect }');
|
|
7
|
+
expect(output).toContain('from "vitest"');
|
|
8
|
+
expect(output).toContain('from "@plumbus/core/testing"');
|
|
9
|
+
expect(output).toContain('runCapability');
|
|
10
|
+
expect(output).toContain('createOrder');
|
|
11
|
+
expect(output).toContain('CreateOrder');
|
|
12
|
+
});
|
|
13
|
+
it('includes success, validation, and auth test cases', () => {
|
|
14
|
+
const output = generateCapabilityTest('list-users', 'users');
|
|
15
|
+
expect(output).toContain('executes successfully with valid input');
|
|
16
|
+
expect(output).toContain('rejects invalid input');
|
|
17
|
+
expect(output).toContain('denies access to unauthorized users');
|
|
18
|
+
expect(output).toContain('allows access for authorized roles');
|
|
19
|
+
});
|
|
20
|
+
it('imports the capability by camelCase name', () => {
|
|
21
|
+
const output = generateCapabilityTest('get-user-profile', 'users');
|
|
22
|
+
expect(output).toContain('getUserProfile');
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
describe('generateFlowTest', () => {
|
|
26
|
+
it('generates valid flow test content', () => {
|
|
27
|
+
const output = generateFlowTest('order-processing', 'orders');
|
|
28
|
+
expect(output).toContain('simulateFlow');
|
|
29
|
+
expect(output).toContain('orderProcessingFlow');
|
|
30
|
+
expect(output).toContain('OrderProcessing Flow');
|
|
31
|
+
});
|
|
32
|
+
it('includes completion and failure test cases', () => {
|
|
33
|
+
const output = generateFlowTest('payment-flow', 'payments');
|
|
34
|
+
expect(output).toContain('completes all steps successfully');
|
|
35
|
+
expect(output).toContain('tracks step execution history');
|
|
36
|
+
expect(output).toContain('handles capability step failure');
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
describe('generateSecurityTest', () => {
|
|
40
|
+
it('generates valid security test content', () => {
|
|
41
|
+
const output = generateSecurityTest('update-profile', 'users');
|
|
42
|
+
expect(output).toContain('assertCapabilityDenied');
|
|
43
|
+
expect(output).toContain('assertCapabilityAllowed');
|
|
44
|
+
expect(output).toContain('assertTenantIsolation');
|
|
45
|
+
expect(output).toContain('UpdateProfile Security');
|
|
46
|
+
expect(output).toContain('updateProfile');
|
|
47
|
+
});
|
|
48
|
+
it('includes tenant isolation and auth test cases', () => {
|
|
49
|
+
const output = generateSecurityTest('delete-record', 'records');
|
|
50
|
+
expect(output).toContain('denies unauthenticated access');
|
|
51
|
+
expect(output).toContain('allows admin access');
|
|
52
|
+
expect(output).toContain('enforces tenant isolation');
|
|
53
|
+
});
|
|
54
|
+
});
|
|
55
|
+
describe('generateGovernanceTest', () => {
|
|
56
|
+
it('generates valid governance test content', () => {
|
|
57
|
+
const output = generateGovernanceTest('orders');
|
|
58
|
+
expect(output).toContain('evaluateGovernance');
|
|
59
|
+
expect(output).toContain('emptyInventory');
|
|
60
|
+
expect(output).toContain('assertPolicyCompliance');
|
|
61
|
+
expect(output).toContain('Orders Governance');
|
|
62
|
+
});
|
|
63
|
+
it('includes security, privacy, and policy test cases', () => {
|
|
64
|
+
const output = generateGovernanceTest('payments');
|
|
65
|
+
expect(output).toContain('passes security rules');
|
|
66
|
+
expect(output).toContain('passes privacy rules');
|
|
67
|
+
expect(output).toContain('complies with internal security baseline');
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
//# sourceMappingURL=scaffolding.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scaffolding.test.js","sourceRoot":"","sources":["../../../src/testing/__tests__/scaffolding.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.test.d.ts","sourceRoot":"","sources":["../../../src/testing/__tests__/security.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { CapabilityKind } from '../../types/enums.js';
|
|
4
|
+
import { createTestAuth } from '../context.js';
|
|
5
|
+
import { runCapability } from '../run-capability.js';
|
|
6
|
+
import { adminAuth, assertAccessAllowed, assertAccessDenied, assertCapabilityAllowed, assertCapabilityDenied, assertPlumbusError, assertTenantIsolation, assertValidationError, serviceAccountAuth, unauthenticated, } from '../security.js';
|
|
7
|
+
// ── Test Helpers ──
|
|
8
|
+
function roleProtectedCapability(roles) {
|
|
9
|
+
return {
|
|
10
|
+
name: 'protected',
|
|
11
|
+
kind: CapabilityKind.Action,
|
|
12
|
+
domain: 'test',
|
|
13
|
+
input: z.object({ value: z.string() }),
|
|
14
|
+
output: z.object({ ok: z.boolean() }),
|
|
15
|
+
access: { roles },
|
|
16
|
+
effects: { data: [], events: [], external: [], ai: false },
|
|
17
|
+
handler: async () => ({ ok: true }),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function publicCapability() {
|
|
21
|
+
return {
|
|
22
|
+
name: 'public-cap',
|
|
23
|
+
kind: CapabilityKind.Query,
|
|
24
|
+
domain: 'test',
|
|
25
|
+
input: z.object({}),
|
|
26
|
+
output: z.object({ data: z.string() }),
|
|
27
|
+
access: { public: true },
|
|
28
|
+
effects: { data: [], events: [], external: [], ai: false },
|
|
29
|
+
handler: async () => ({ data: 'public' }),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function tenantScopedCapability() {
|
|
33
|
+
return {
|
|
34
|
+
name: 'tenant-scoped',
|
|
35
|
+
kind: CapabilityKind.Query,
|
|
36
|
+
domain: 'test',
|
|
37
|
+
input: z.object({}),
|
|
38
|
+
output: z.object({ ok: z.boolean() }),
|
|
39
|
+
access: { roles: ['admin'], tenantScoped: true },
|
|
40
|
+
effects: { data: [], events: [], external: [], ai: false },
|
|
41
|
+
handler: async () => ({ ok: true }),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
// ── assertAccessAllowed / assertAccessDenied ──
|
|
45
|
+
describe('assertAccessAllowed', () => {
|
|
46
|
+
it('passes when role matches', () => {
|
|
47
|
+
const policy = { roles: ['admin'] };
|
|
48
|
+
const auth = createTestAuth({ roles: ['admin'] });
|
|
49
|
+
expect(() => assertAccessAllowed(policy, auth)).not.toThrow();
|
|
50
|
+
});
|
|
51
|
+
it('throws when role does not match', () => {
|
|
52
|
+
const policy = { roles: ['admin'] };
|
|
53
|
+
const auth = createTestAuth({ roles: ['user'] });
|
|
54
|
+
expect(() => assertAccessAllowed(policy, auth)).toThrow('DENIED');
|
|
55
|
+
});
|
|
56
|
+
it('passes for public policy', () => {
|
|
57
|
+
const policy = { public: true };
|
|
58
|
+
const auth = createTestAuth({ roles: [] });
|
|
59
|
+
expect(() => assertAccessAllowed(policy, auth)).not.toThrow();
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
describe('assertAccessDenied', () => {
|
|
63
|
+
it('passes when role does not match', () => {
|
|
64
|
+
const policy = { roles: ['admin'] };
|
|
65
|
+
const auth = createTestAuth({ roles: ['user'] });
|
|
66
|
+
expect(() => assertAccessDenied(policy, auth)).not.toThrow();
|
|
67
|
+
});
|
|
68
|
+
it('throws when access is allowed', () => {
|
|
69
|
+
const policy = { roles: ['admin'] };
|
|
70
|
+
const auth = createTestAuth({ roles: ['admin'] });
|
|
71
|
+
expect(() => assertAccessDenied(policy, auth)).toThrow('ALLOWED');
|
|
72
|
+
});
|
|
73
|
+
it('passes when no policy (deny by default)', () => {
|
|
74
|
+
const auth = createTestAuth({ roles: ['admin'] });
|
|
75
|
+
expect(() => assertAccessDenied(undefined, auth)).not.toThrow();
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
// ── assertCapabilityDenied / assertCapabilityAllowed ──
|
|
79
|
+
describe('assertCapabilityDenied', () => {
|
|
80
|
+
it('passes when user lacks required role', async () => {
|
|
81
|
+
const result = await assertCapabilityDenied(roleProtectedCapability(['admin']), { value: 'test' }, { auth: { roles: ['user'] } });
|
|
82
|
+
expect(result.success).toBe(false);
|
|
83
|
+
});
|
|
84
|
+
it('throws when capability succeeds', async () => {
|
|
85
|
+
await expect(assertCapabilityDenied(roleProtectedCapability(['admin']), { value: 'test' }, { auth: { roles: ['admin'] } })).rejects.toThrow('DENY');
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
describe('assertCapabilityAllowed', () => {
|
|
89
|
+
it('passes when user has required role', async () => {
|
|
90
|
+
const result = await assertCapabilityAllowed(roleProtectedCapability(['admin']), { value: 'test' }, { auth: { roles: ['admin'] } });
|
|
91
|
+
expect(result.success).toBe(true);
|
|
92
|
+
});
|
|
93
|
+
it('throws when capability returns forbidden', async () => {
|
|
94
|
+
await expect(assertCapabilityAllowed(roleProtectedCapability(['admin']), { value: 'test' }, { auth: { roles: ['user'] } })).rejects.toThrow('ALLOW');
|
|
95
|
+
});
|
|
96
|
+
it('does not throw for non-forbidden errors (e.g., validation)', async () => {
|
|
97
|
+
// Public capability but with validation error
|
|
98
|
+
const result = await assertCapabilityAllowed(publicCapability(), { invalid: true });
|
|
99
|
+
// Should not throw — it's not a forbidden error
|
|
100
|
+
// But result may be a failure:
|
|
101
|
+
if (!result.success) {
|
|
102
|
+
expect(result.error.code).not.toBe('forbidden');
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
// ── assertTenantIsolation ──
|
|
107
|
+
describe('assertTenantIsolation', () => {
|
|
108
|
+
it('returns same-tenant and cross-tenant results', async () => {
|
|
109
|
+
const { sameTenantResult, crossTenantResult } = await assertTenantIsolation(tenantScopedCapability(), {}, 'tenant-1');
|
|
110
|
+
// Same tenant should succeed (admin role + matching tenant)
|
|
111
|
+
expect(sameTenantResult).toBeDefined();
|
|
112
|
+
// Cross tenant should fail if tenantScoped
|
|
113
|
+
expect(crossTenantResult).toBeDefined();
|
|
114
|
+
});
|
|
115
|
+
it('same-tenant result succeeds with admin role', async () => {
|
|
116
|
+
const { sameTenantResult } = await assertTenantIsolation(tenantScopedCapability(), {}, 'tenant-1');
|
|
117
|
+
expect(sameTenantResult.success).toBe(true);
|
|
118
|
+
});
|
|
119
|
+
it('cross-tenant result uses different tenant id', async () => {
|
|
120
|
+
const { crossTenantResult } = await assertTenantIsolation(tenantScopedCapability(), {}, 'tenant-1');
|
|
121
|
+
// The cross-tenant result runs with a different tenant ID
|
|
122
|
+
// In real apps, the handler would enforce tenant isolation on data access;
|
|
123
|
+
// here we just verify both results are returned
|
|
124
|
+
expect(crossTenantResult).toBeDefined();
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
// ── assertValidationError ──
|
|
128
|
+
describe('assertValidationError', () => {
|
|
129
|
+
it('passes when result is a validation error', async () => {
|
|
130
|
+
const result = await runCapability(roleProtectedCapability(['admin']), { value: 123 }, // should be string
|
|
131
|
+
{ auth: { roles: ['admin'] } });
|
|
132
|
+
expect(() => assertValidationError(result)).not.toThrow();
|
|
133
|
+
});
|
|
134
|
+
it('throws when result is success', () => {
|
|
135
|
+
expect(() => assertValidationError({ success: true, data: {} })).toThrow('succeeded');
|
|
136
|
+
});
|
|
137
|
+
it('throws when error is not validation', () => {
|
|
138
|
+
expect(() => assertValidationError({
|
|
139
|
+
success: false,
|
|
140
|
+
error: { code: 'forbidden', message: 'no access' },
|
|
141
|
+
})).toThrow('validation');
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
// ── assertPlumbusError ──
|
|
145
|
+
describe('assertPlumbusError', () => {
|
|
146
|
+
it('passes when error code matches', () => {
|
|
147
|
+
const result = { success: false, error: { code: 'not_found', message: 'missing' } };
|
|
148
|
+
expect(() => assertPlumbusError(result, 'not_found')).not.toThrow();
|
|
149
|
+
});
|
|
150
|
+
it('throws when error code does not match', () => {
|
|
151
|
+
const result = { success: false, error: { code: 'forbidden', message: 'denied' } };
|
|
152
|
+
expect(() => assertPlumbusError(result, 'not_found')).toThrow('not_found');
|
|
153
|
+
});
|
|
154
|
+
it('throws when result is success', () => {
|
|
155
|
+
expect(() => assertPlumbusError({ success: true, data: {} }, 'any')).toThrow('succeeded');
|
|
156
|
+
});
|
|
157
|
+
});
|
|
158
|
+
// ── Auth Scenario Builders ──
|
|
159
|
+
describe('unauthenticated', () => {
|
|
160
|
+
it('returns auth with no roles and no tenant', () => {
|
|
161
|
+
const auth = unauthenticated();
|
|
162
|
+
expect(auth.roles).toEqual([]);
|
|
163
|
+
expect(auth.tenantId).toBeUndefined();
|
|
164
|
+
expect(auth.userId).toBeUndefined();
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
describe('adminAuth', () => {
|
|
168
|
+
it('returns admin auth with admin role', () => {
|
|
169
|
+
const auth = adminAuth();
|
|
170
|
+
expect(auth.userId).toBe('admin-user');
|
|
171
|
+
expect(auth.roles).toEqual(['admin']);
|
|
172
|
+
});
|
|
173
|
+
it('accepts a custom tenantId', () => {
|
|
174
|
+
const auth = adminAuth('my-tenant');
|
|
175
|
+
expect(auth.tenantId).toBe('my-tenant');
|
|
176
|
+
});
|
|
177
|
+
});
|
|
178
|
+
describe('serviceAccountAuth', () => {
|
|
179
|
+
it('returns service account auth', () => {
|
|
180
|
+
const auth = serviceAccountAuth('svc-123');
|
|
181
|
+
expect(auth.userId).toBe('svc-123');
|
|
182
|
+
expect(auth.roles).toEqual([]);
|
|
183
|
+
expect(auth.provider).toBe('service-account');
|
|
184
|
+
});
|
|
185
|
+
});
|
|
186
|
+
//# sourceMappingURL=security.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.test.js","sourceRoot":"","sources":["../../../src/testing/__tests__/security.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simulate-flow.test.d.ts","sourceRoot":"","sources":["../../../src/testing/__tests__/simulate-flow.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { FlowStatus, StepStatus } from '../../flows/state-machine.js';
|
|
4
|
+
import { FlowStepType } from '../../types/enums.js';
|
|
5
|
+
import { simulateFlow } from '../simulate-flow.js';
|
|
6
|
+
// ── Test Flow Factories ──
|
|
7
|
+
function simpleFlow() {
|
|
8
|
+
return {
|
|
9
|
+
name: 'simple-flow',
|
|
10
|
+
domain: 'test',
|
|
11
|
+
input: z.object({ value: z.string() }),
|
|
12
|
+
steps: [
|
|
13
|
+
{ name: 'step1', type: FlowStepType.Capability },
|
|
14
|
+
{ name: 'step2', type: FlowStepType.Capability },
|
|
15
|
+
],
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function conditionalFlow() {
|
|
19
|
+
return {
|
|
20
|
+
name: 'conditional-flow',
|
|
21
|
+
domain: 'test',
|
|
22
|
+
input: z.object({}),
|
|
23
|
+
steps: [
|
|
24
|
+
{
|
|
25
|
+
name: 'check',
|
|
26
|
+
type: FlowStepType.Conditional,
|
|
27
|
+
if: 'shouldProceed',
|
|
28
|
+
then: 'proceed',
|
|
29
|
+
else: 'fallback',
|
|
30
|
+
},
|
|
31
|
+
{ name: 'proceed', type: FlowStepType.Capability },
|
|
32
|
+
{ name: 'fallback', type: FlowStepType.Capability },
|
|
33
|
+
],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function delayFlow() {
|
|
37
|
+
return {
|
|
38
|
+
name: 'delay-flow',
|
|
39
|
+
domain: 'test',
|
|
40
|
+
input: z.object({}),
|
|
41
|
+
steps: [
|
|
42
|
+
{ name: 'step1', type: FlowStepType.Capability },
|
|
43
|
+
{ name: 'wait', type: FlowStepType.Delay, duration: '5m' },
|
|
44
|
+
{ name: 'step2', type: FlowStepType.Capability },
|
|
45
|
+
],
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function waitFlow() {
|
|
49
|
+
return {
|
|
50
|
+
name: 'wait-flow',
|
|
51
|
+
domain: 'test',
|
|
52
|
+
input: z.object({}),
|
|
53
|
+
steps: [
|
|
54
|
+
{ name: 'step1', type: FlowStepType.Capability },
|
|
55
|
+
{ name: 'waitForApproval', type: FlowStepType.Wait, event: 'approval.received' },
|
|
56
|
+
{ name: 'step2', type: FlowStepType.Capability },
|
|
57
|
+
],
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function parallelFlow() {
|
|
61
|
+
return {
|
|
62
|
+
name: 'parallel-flow',
|
|
63
|
+
domain: 'test',
|
|
64
|
+
input: z.object({}),
|
|
65
|
+
steps: [
|
|
66
|
+
{ name: 'fanout', type: FlowStepType.Parallel, branches: ['branchA', 'branchB'] },
|
|
67
|
+
{ name: 'branchA', type: FlowStepType.Capability },
|
|
68
|
+
{ name: 'branchB', type: FlowStepType.Capability },
|
|
69
|
+
{ name: 'merge', type: FlowStepType.Capability },
|
|
70
|
+
],
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
function eventEmitFlow() {
|
|
74
|
+
return {
|
|
75
|
+
name: 'event-emit-flow',
|
|
76
|
+
domain: 'test',
|
|
77
|
+
input: z.object({}),
|
|
78
|
+
steps: [
|
|
79
|
+
{ name: 'doWork', type: FlowStepType.Capability },
|
|
80
|
+
{ name: 'notify', type: FlowStepType.EventEmit, event: 'work.done' },
|
|
81
|
+
],
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
// ── Tests ──
|
|
85
|
+
describe('simulateFlow', () => {
|
|
86
|
+
it('completes a simple linear flow', async () => {
|
|
87
|
+
const result = await simulateFlow(simpleFlow(), { value: 'test' });
|
|
88
|
+
expect(result.status).toBe(FlowStatus.Completed);
|
|
89
|
+
expect(result.history).toHaveLength(2);
|
|
90
|
+
expect(result.history[0]?.step).toBe('step1');
|
|
91
|
+
expect(result.history[1]?.step).toBe('step2');
|
|
92
|
+
});
|
|
93
|
+
it('records step results by name', async () => {
|
|
94
|
+
const result = await simulateFlow(simpleFlow(), { value: 'test' });
|
|
95
|
+
expect(result.stepResults.get('step1')).toBeDefined();
|
|
96
|
+
expect(result.stepResults.get('step2')).toBeDefined();
|
|
97
|
+
expect(result.stepResults.get('step1')?.status).toBe(StepStatus.Completed);
|
|
98
|
+
});
|
|
99
|
+
it('fails flow when a capability step fails', async () => {
|
|
100
|
+
const result = await simulateFlow(simpleFlow(), { value: 'test' }, {
|
|
101
|
+
capabilityResults: {
|
|
102
|
+
step1: { success: false, error: 'step1 failed' },
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
expect(result.status).toBe(FlowStatus.Failed);
|
|
106
|
+
expect(result.error).toBe('step1 failed');
|
|
107
|
+
expect(result.history).toHaveLength(1); // Only step1 ran
|
|
108
|
+
});
|
|
109
|
+
it('handles conditional branching (then branch)', async () => {
|
|
110
|
+
const result = await simulateFlow(conditionalFlow(), {}, {
|
|
111
|
+
conditionResults: { shouldProceed: true },
|
|
112
|
+
});
|
|
113
|
+
expect(result.status).toBe(FlowStatus.Completed);
|
|
114
|
+
// Should have navigated to "proceed" step
|
|
115
|
+
const stepNames = result.history.map((h) => h.step);
|
|
116
|
+
expect(stepNames).toContain('check');
|
|
117
|
+
expect(stepNames).toContain('proceed');
|
|
118
|
+
});
|
|
119
|
+
it('handles conditional branching (else branch)', async () => {
|
|
120
|
+
const result = await simulateFlow(conditionalFlow(), {}, {
|
|
121
|
+
conditionResults: { shouldProceed: false },
|
|
122
|
+
});
|
|
123
|
+
expect(result.status).toBe(FlowStatus.Completed);
|
|
124
|
+
const stepNames = result.history.map((h) => h.step);
|
|
125
|
+
expect(stepNames).toContain('check');
|
|
126
|
+
expect(stepNames).toContain('fallback');
|
|
127
|
+
});
|
|
128
|
+
it('skips delays in simulation', async () => {
|
|
129
|
+
const result = await simulateFlow(delayFlow(), {});
|
|
130
|
+
expect(result.status).toBe(FlowStatus.Completed);
|
|
131
|
+
expect(result.history).toHaveLength(3);
|
|
132
|
+
const stepNames = result.history.map((h) => h.step);
|
|
133
|
+
expect(stepNames).toEqual(['step1', 'wait', 'step2']);
|
|
134
|
+
});
|
|
135
|
+
it('stops at wait-for-event step', async () => {
|
|
136
|
+
const result = await simulateFlow(waitFlow(), {});
|
|
137
|
+
expect(result.status).toBe(FlowStatus.Waiting);
|
|
138
|
+
expect(result.history).toHaveLength(2); // step1 + waitForApproval
|
|
139
|
+
expect(result.history[1]?.step).toBe('waitForApproval');
|
|
140
|
+
});
|
|
141
|
+
it('executes parallel branches', async () => {
|
|
142
|
+
const result = await simulateFlow(parallelFlow(), {});
|
|
143
|
+
expect(result.status).toBe(FlowStatus.Completed);
|
|
144
|
+
const stepNames = result.history.map((h) => h.step);
|
|
145
|
+
expect(stepNames).toContain('branchA');
|
|
146
|
+
expect(stepNames).toContain('branchB');
|
|
147
|
+
});
|
|
148
|
+
it('fails when parallel branch fails', async () => {
|
|
149
|
+
const result = await simulateFlow(parallelFlow(), {}, {
|
|
150
|
+
capabilityResults: {
|
|
151
|
+
branchB: { success: false, error: 'branch B failed' },
|
|
152
|
+
},
|
|
153
|
+
});
|
|
154
|
+
expect(result.status).toBe(FlowStatus.Failed);
|
|
155
|
+
expect(result.error).toBe('branch B failed');
|
|
156
|
+
});
|
|
157
|
+
it('handles event emit steps', async () => {
|
|
158
|
+
const result = await simulateFlow(eventEmitFlow(), {});
|
|
159
|
+
expect(result.status).toBe(FlowStatus.Completed);
|
|
160
|
+
expect(result.history).toHaveLength(2);
|
|
161
|
+
});
|
|
162
|
+
it('enforces max step limit', async () => {
|
|
163
|
+
// Create a flow that would loop if conditional always goes to step 1
|
|
164
|
+
const loopFlow = {
|
|
165
|
+
name: 'loop',
|
|
166
|
+
domain: 'test',
|
|
167
|
+
input: z.object({}),
|
|
168
|
+
steps: [
|
|
169
|
+
{ name: 'doWork', type: FlowStepType.Capability },
|
|
170
|
+
{ name: 'checkMore', type: FlowStepType.Conditional, if: 'hasMore', then: 'doWork' },
|
|
171
|
+
],
|
|
172
|
+
};
|
|
173
|
+
const result = await simulateFlow(loopFlow, {}, {
|
|
174
|
+
maxSteps: 5,
|
|
175
|
+
conditionResults: { hasMore: true },
|
|
176
|
+
});
|
|
177
|
+
expect(result.status).toBe(FlowStatus.Failed);
|
|
178
|
+
expect(result.error).toContain('maximum step limit');
|
|
179
|
+
});
|
|
180
|
+
it('passes state through to steps', async () => {
|
|
181
|
+
const result = await simulateFlow(simpleFlow(), { value: 'initial' });
|
|
182
|
+
expect(result.state).toEqual({ value: 'initial' });
|
|
183
|
+
});
|
|
184
|
+
it('uses custom step executor dependencies', async () => {
|
|
185
|
+
const executed = [];
|
|
186
|
+
const result = await simulateFlow(simpleFlow(), { value: 'test' }, {
|
|
187
|
+
stepDeps: {
|
|
188
|
+
executeCapability: async (name) => {
|
|
189
|
+
executed.push(name);
|
|
190
|
+
return { success: true, data: {} };
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
});
|
|
194
|
+
expect(result.status).toBe(FlowStatus.Completed);
|
|
195
|
+
expect(executed).toEqual(['step1', 'step2']);
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
//# sourceMappingURL=simulate-flow.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simulate-flow.test.js","sourceRoot":"","sources":["../../../src/testing/__tests__/simulate-flow.test.ts"],"names":[],"mappings":"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"}
|