@plumbus/core 0.3.3 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/bin/plumbus.js +16 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/ai/ai-service.d.ts.map +1 -1
- package/dist/ai/ai-service.js +8 -3
- package/dist/ai/ai-service.js.map +1 -1
- package/dist/ai/provider.d.ts.map +1 -1
- package/dist/ai/provider.js +1 -2
- package/dist/ai/provider.js.map +1 -1
- package/dist/ai/rag/pipeline.d.ts +4 -0
- package/dist/ai/rag/pipeline.d.ts.map +1 -1
- package/dist/ai/rag/pipeline.js +17 -2
- package/dist/ai/rag/pipeline.js.map +1 -1
- package/dist/api/route-generator.d.ts.map +1 -1
- package/dist/api/route-generator.js +10 -6
- package/dist/api/route-generator.js.map +1 -1
- package/dist/auth/adapter.d.ts +0 -4
- package/dist/auth/adapter.d.ts.map +1 -1
- package/dist/auth/adapter.js +4 -0
- package/dist/auth/adapter.js.map +1 -1
- package/dist/cli/cli.d.ts.map +1 -1
- package/dist/cli/cli.js +2 -1
- package/dist/cli/cli.js.map +1 -1
- package/dist/cli/commands/dev.d.ts +4 -1
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +21 -30
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts +6 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +146 -2
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +18 -0
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.d.ts.map +1 -1
- package/dist/cli/commands/index.js +1 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/init.d.ts +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +113 -3
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/mcp.d.ts +9 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +125 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +2 -1
- package/dist/cli/commands/migrate.js.map +1 -1
- package/dist/cli/commands/start.d.ts +4 -1
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +20 -29
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/commands/translation.d.ts.map +1 -1
- package/dist/cli/commands/translation.js +22 -10
- package/dist/cli/commands/translation.js.map +1 -1
- package/dist/cli/mcp-serve-context.d.ts +13 -0
- package/dist/cli/mcp-serve-context.d.ts.map +1 -0
- package/dist/cli/mcp-serve-context.js +119 -0
- package/dist/cli/mcp-serve-context.js.map +1 -0
- package/dist/cli/migrate-snapshot-schema.d.ts +15 -0
- package/dist/cli/migrate-snapshot-schema.d.ts.map +1 -0
- package/dist/cli/migrate-snapshot-schema.js +23 -0
- package/dist/cli/migrate-snapshot-schema.js.map +1 -0
- package/dist/cli/project-root.d.ts +9 -0
- package/dist/cli/project-root.d.ts.map +1 -0
- package/dist/cli/project-root.js +41 -0
- package/dist/cli/project-root.js.map +1 -0
- package/dist/cli/templates/resources.d.ts.map +1 -1
- package/dist/cli/templates/resources.js +7 -1
- package/dist/cli/templates/resources.js.map +1 -1
- package/dist/config/loader.d.ts +1 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +46 -27
- package/dist/config/loader.js.map +1 -1
- package/dist/data/connection.d.ts +16 -0
- package/dist/data/connection.d.ts.map +1 -0
- package/dist/data/connection.js +27 -0
- package/dist/data/connection.js.map +1 -0
- package/dist/data/index.d.ts +1 -0
- package/dist/data/index.d.ts.map +1 -1
- package/dist/data/index.js +1 -0
- package/dist/data/index.js.map +1 -1
- package/dist/data/migration.d.ts.map +1 -1
- package/dist/data/migration.js +24 -0
- package/dist/data/migration.js.map +1 -1
- package/dist/data/repository.d.ts.map +1 -1
- package/dist/data/repository.js +26 -9
- package/dist/data/repository.js.map +1 -1
- package/dist/define/defineCapability.d.ts +4 -2
- package/dist/define/defineCapability.d.ts.map +1 -1
- package/dist/define/defineCapability.js +68 -8
- package/dist/define/defineCapability.js.map +1 -1
- package/dist/define/defineEntity.d.ts.map +1 -1
- package/dist/define/defineEntity.js +8 -4
- package/dist/define/defineEntity.js.map +1 -1
- package/dist/define/defineEvent.d.ts.map +1 -1
- package/dist/define/defineEvent.js +7 -3
- package/dist/define/defineEvent.js.map +1 -1
- package/dist/define/defineFlow.d.ts.map +1 -1
- package/dist/define/defineFlow.js +11 -5
- package/dist/define/defineFlow.js.map +1 -1
- package/dist/define/definePrompt.d.ts.map +1 -1
- package/dist/define/definePrompt.js +11 -5
- package/dist/define/definePrompt.js.map +1 -1
- package/dist/define/defineTranslation.d.ts.map +1 -1
- package/dist/define/defineTranslation.js +12 -10
- package/dist/define/defineTranslation.js.map +1 -1
- package/dist/define/validation-error.d.ts +2 -0
- package/dist/define/validation-error.d.ts.map +1 -0
- package/dist/define/validation-error.js +9 -0
- package/dist/define/validation-error.js.map +1 -0
- package/dist/errors/hints.d.ts +13 -0
- package/dist/errors/hints.d.ts.map +1 -0
- package/dist/errors/hints.js +15 -0
- package/dist/errors/hints.js.map +1 -0
- package/dist/errors/hook-log.d.ts +3 -0
- package/dist/errors/hook-log.d.ts.map +1 -0
- package/dist/errors/hook-log.js +6 -0
- package/dist/errors/hook-log.js.map +1 -0
- package/dist/errors/http.d.ts +18 -0
- package/dist/errors/http.d.ts.map +1 -1
- package/dist/errors/http.js +32 -2
- package/dist/errors/http.js.map +1 -1
- package/dist/errors/safe-metadata.d.ts +5 -0
- package/dist/errors/safe-metadata.d.ts.map +1 -0
- package/dist/errors/safe-metadata.js +24 -0
- package/dist/errors/safe-metadata.js.map +1 -0
- package/dist/execution/auth-roles.d.ts +6 -0
- package/dist/execution/auth-roles.d.ts.map +1 -0
- package/dist/execution/auth-roles.js +12 -0
- package/dist/execution/auth-roles.js.map +1 -0
- package/dist/execution/authorization.d.ts.map +1 -1
- package/dist/execution/authorization.js +3 -5
- package/dist/execution/authorization.js.map +1 -1
- package/dist/execution/context-factory.d.ts +2 -17
- package/dist/execution/context-factory.d.ts.map +1 -1
- package/dist/execution/context-factory.js +1 -0
- package/dist/execution/context-factory.js.map +1 -1
- package/dist/flows/engine.js +1 -1
- package/dist/flows/engine.js.map +1 -1
- package/dist/flows/evaluate-condition.d.ts +19 -0
- package/dist/flows/evaluate-condition.d.ts.map +1 -0
- package/dist/flows/evaluate-condition.js +276 -0
- package/dist/flows/evaluate-condition.js.map +1 -0
- package/dist/flows/index.d.ts +1 -0
- package/dist/flows/index.d.ts.map +1 -1
- package/dist/flows/index.js +2 -0
- package/dist/flows/index.js.map +1 -1
- package/dist/flows/step-executor.d.ts.map +1 -1
- package/dist/flows/step-executor.js +9 -2
- package/dist/flows/step-executor.js.map +1 -1
- package/dist/governance/rules/architecture.d.ts.map +1 -1
- package/dist/governance/rules/architecture.js +2 -0
- package/dist/governance/rules/architecture.js.map +1 -1
- package/dist/governance/rules/index.d.ts +1 -0
- package/dist/governance/rules/index.d.ts.map +1 -1
- package/dist/governance/rules/index.js +1 -0
- package/dist/governance/rules/index.js.map +1 -1
- package/dist/governance/rules/mcp.d.ts +5 -0
- package/dist/governance/rules/mcp.d.ts.map +1 -0
- package/dist/governance/rules/mcp.js +34 -0
- package/dist/governance/rules/mcp.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/exposure.d.ts +4 -0
- package/dist/mcp/exposure.d.ts.map +1 -0
- package/dist/mcp/exposure.js +5 -0
- package/dist/mcp/exposure.js.map +1 -0
- package/dist/mcp/index.d.ts +4 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +6 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/manifest-generator.d.ts +19 -0
- package/dist/mcp/manifest-generator.d.ts.map +1 -0
- package/dist/mcp/manifest-generator.js +29 -0
- package/dist/mcp/manifest-generator.js.map +1 -0
- package/dist/mcp/skill-generator.d.ts +4 -0
- package/dist/mcp/skill-generator.d.ts.map +1 -0
- package/dist/mcp/skill-generator.js +59 -0
- package/dist/mcp/skill-generator.js.map +1 -0
- package/dist/schema/zod-input-to-json-schema.d.ts +4 -0
- package/dist/schema/zod-input-to-json-schema.d.ts.map +1 -0
- package/dist/schema/zod-input-to-json-schema.js +6 -0
- package/dist/schema/zod-input-to-json-schema.js.map +1 -0
- package/dist/server/bootstrap.d.ts.map +1 -1
- package/dist/server/bootstrap.js +5 -2
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/testing/context.d.ts +2 -0
- package/dist/testing/context.d.ts.map +1 -1
- package/dist/testing/context.js +1 -0
- package/dist/testing/context.js.map +1 -1
- package/dist/testing/e2e.js +1 -1
- package/dist/testing/e2e.js.map +1 -1
- package/dist/types/capability.d.ts +13 -0
- package/dist/types/capability.d.ts.map +1 -1
- package/dist/types/config.d.ts +9 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/context.d.ts +31 -0
- package/dist/types/context.d.ts.map +1 -1
- package/dist/types/deep-freeze.d.ts +6 -0
- package/dist/types/deep-freeze.d.ts.map +1 -0
- package/dist/types/deep-freeze.js +38 -0
- package/dist/types/deep-freeze.js.map +1 -0
- package/dist/types/enums.d.ts +5 -0
- package/dist/types/enums.d.ts.map +1 -1
- package/dist/types/enums.js +5 -0
- package/dist/types/enums.js.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/security.d.ts +3 -1
- package/dist/types/security.d.ts.map +1 -1
- package/instructions/capabilities.md +36 -0
- package/instructions/cli.md +44 -0
- package/instructions/framework.md +20 -4
- package/instructions/mcp.md +20 -0
- package/package.json +18 -2
- package/dist/ai/__tests__/ai-service.test.d.ts +0 -2
- package/dist/ai/__tests__/ai-service.test.d.ts.map +0 -1
- package/dist/ai/__tests__/ai-service.test.js +0 -1078
- package/dist/ai/__tests__/ai-service.test.js.map +0 -1
- package/dist/ai/__tests__/chunking.test.d.ts +0 -2
- package/dist/ai/__tests__/chunking.test.d.ts.map +0 -1
- package/dist/ai/__tests__/chunking.test.js +0 -78
- package/dist/ai/__tests__/chunking.test.js.map +0 -1
- package/dist/ai/__tests__/cost-tracker.test.d.ts +0 -2
- package/dist/ai/__tests__/cost-tracker.test.d.ts.map +0 -1
- package/dist/ai/__tests__/cost-tracker.test.js +0 -201
- package/dist/ai/__tests__/cost-tracker.test.js.map +0 -1
- package/dist/ai/__tests__/explainability.test.d.ts +0 -2
- package/dist/ai/__tests__/explainability.test.d.ts.map +0 -1
- package/dist/ai/__tests__/explainability.test.js +0 -100
- package/dist/ai/__tests__/explainability.test.js.map +0 -1
- package/dist/ai/__tests__/model-pricing.test.d.ts +0 -2
- package/dist/ai/__tests__/model-pricing.test.d.ts.map +0 -1
- package/dist/ai/__tests__/model-pricing.test.js +0 -156
- package/dist/ai/__tests__/model-pricing.test.js.map +0 -1
- package/dist/ai/__tests__/prompt-registry.test.d.ts +0 -2
- package/dist/ai/__tests__/prompt-registry.test.d.ts.map +0 -1
- package/dist/ai/__tests__/prompt-registry.test.js +0 -56
- package/dist/ai/__tests__/prompt-registry.test.js.map +0 -1
- package/dist/ai/__tests__/provider.test.d.ts +0 -3
- package/dist/ai/__tests__/provider.test.d.ts.map +0 -1
- package/dist/ai/__tests__/provider.test.js +0 -979
- package/dist/ai/__tests__/provider.test.js.map +0 -1
- package/dist/ai/__tests__/rag-pipeline.test.d.ts +0 -2
- package/dist/ai/__tests__/rag-pipeline.test.d.ts.map +0 -1
- package/dist/ai/__tests__/rag-pipeline.test.js +0 -174
- package/dist/ai/__tests__/rag-pipeline.test.js.map +0 -1
- package/dist/ai/__tests__/security.test.d.ts +0 -2
- package/dist/ai/__tests__/security.test.d.ts.map +0 -1
- package/dist/ai/__tests__/security.test.js +0 -89
- package/dist/ai/__tests__/security.test.js.map +0 -1
- package/dist/ai/__tests__/usage-client.test.d.ts +0 -2
- package/dist/ai/__tests__/usage-client.test.d.ts.map +0 -1
- package/dist/ai/__tests__/usage-client.test.js +0 -120
- package/dist/ai/__tests__/usage-client.test.js.map +0 -1
- package/dist/ai/__tests__/validation.test.d.ts +0 -2
- package/dist/ai/__tests__/validation.test.d.ts.map +0 -1
- package/dist/ai/__tests__/validation.test.js +0 -384
- package/dist/ai/__tests__/validation.test.js.map +0 -1
- package/dist/ai/__tests__/zod-to-provider-schema.test.d.ts +0 -2
- package/dist/ai/__tests__/zod-to-provider-schema.test.d.ts.map +0 -1
- package/dist/ai/__tests__/zod-to-provider-schema.test.js +0 -60
- package/dist/ai/__tests__/zod-to-provider-schema.test.js.map +0 -1
- package/dist/api/__tests__/route-generator.test.d.ts +0 -2
- package/dist/api/__tests__/route-generator.test.d.ts.map +0 -1
- package/dist/api/__tests__/route-generator.test.js +0 -216
- package/dist/api/__tests__/route-generator.test.js.map +0 -1
- package/dist/audit/__tests__/service.test.d.ts +0 -2
- package/dist/audit/__tests__/service.test.d.ts.map +0 -1
- package/dist/audit/__tests__/service.test.js +0 -97
- package/dist/audit/__tests__/service.test.js.map +0 -1
- package/dist/auth/__tests__/adapter.test.d.ts +0 -2
- package/dist/auth/__tests__/adapter.test.d.ts.map +0 -1
- package/dist/auth/__tests__/adapter.test.js +0 -218
- package/dist/auth/__tests__/adapter.test.js.map +0 -1
- package/dist/auth/__tests__/oidc-adapter.test.d.ts +0 -2
- package/dist/auth/__tests__/oidc-adapter.test.d.ts.map +0 -1
- package/dist/auth/__tests__/oidc-adapter.test.js +0 -232
- package/dist/auth/__tests__/oidc-adapter.test.js.map +0 -1
- package/dist/auth/__tests__/password.test.d.ts +0 -2
- package/dist/auth/__tests__/password.test.d.ts.map +0 -1
- package/dist/auth/__tests__/password.test.js +0 -30
- package/dist/auth/__tests__/password.test.js.map +0 -1
- package/dist/auth/__tests__/saml-adapter.test.d.ts +0 -2
- package/dist/auth/__tests__/saml-adapter.test.d.ts.map +0 -1
- package/dist/auth/__tests__/saml-adapter.test.js +0 -188
- package/dist/auth/__tests__/saml-adapter.test.js.map +0 -1
- package/dist/auth/__tests__/scim.test.d.ts +0 -2
- package/dist/auth/__tests__/scim.test.d.ts.map +0 -1
- package/dist/auth/__tests__/scim.test.js +0 -306
- package/dist/auth/__tests__/scim.test.js.map +0 -1
- package/dist/cli/__tests__/agent.test.d.ts +0 -2
- package/dist/cli/__tests__/agent.test.d.ts.map +0 -1
- package/dist/cli/__tests__/agent.test.js +0 -63
- package/dist/cli/__tests__/agent.test.js.map +0 -1
- package/dist/cli/__tests__/certify.test.d.ts +0 -2
- package/dist/cli/__tests__/certify.test.d.ts.map +0 -1
- package/dist/cli/__tests__/certify.test.js +0 -97
- package/dist/cli/__tests__/certify.test.js.map +0 -1
- package/dist/cli/__tests__/cli.test.d.ts +0 -2
- package/dist/cli/__tests__/cli.test.d.ts.map +0 -1
- package/dist/cli/__tests__/cli.test.js +0 -123
- package/dist/cli/__tests__/cli.test.js.map +0 -1
- package/dist/cli/__tests__/create.test.d.ts +0 -2
- package/dist/cli/__tests__/create.test.d.ts.map +0 -1
- package/dist/cli/__tests__/create.test.js +0 -183
- package/dist/cli/__tests__/create.test.js.map +0 -1
- package/dist/cli/__tests__/dev.test.d.ts +0 -2
- package/dist/cli/__tests__/dev.test.d.ts.map +0 -1
- package/dist/cli/__tests__/dev.test.js +0 -132
- package/dist/cli/__tests__/dev.test.js.map +0 -1
- package/dist/cli/__tests__/discover.test.d.ts +0 -2
- package/dist/cli/__tests__/discover.test.d.ts.map +0 -1
- package/dist/cli/__tests__/discover.test.js +0 -48
- package/dist/cli/__tests__/discover.test.js.map +0 -1
- package/dist/cli/__tests__/doctor.test.d.ts +0 -2
- package/dist/cli/__tests__/doctor.test.d.ts.map +0 -1
- package/dist/cli/__tests__/doctor.test.js +0 -172
- package/dist/cli/__tests__/doctor.test.js.map +0 -1
- package/dist/cli/__tests__/generate.test.d.ts +0 -2
- package/dist/cli/__tests__/generate.test.d.ts.map +0 -1
- package/dist/cli/__tests__/generate.test.js +0 -478
- package/dist/cli/__tests__/generate.test.js.map +0 -1
- package/dist/cli/__tests__/init.test.d.ts +0 -2
- package/dist/cli/__tests__/init.test.d.ts.map +0 -1
- package/dist/cli/__tests__/init.test.js +0 -236
- package/dist/cli/__tests__/init.test.js.map +0 -1
- package/dist/cli/__tests__/migrate.test.d.ts +0 -2
- package/dist/cli/__tests__/migrate.test.d.ts.map +0 -1
- package/dist/cli/__tests__/migrate.test.js +0 -442
- package/dist/cli/__tests__/migrate.test.js.map +0 -1
- package/dist/cli/__tests__/start.test.d.ts +0 -2
- package/dist/cli/__tests__/start.test.d.ts.map +0 -1
- package/dist/cli/__tests__/start.test.js +0 -91
- package/dist/cli/__tests__/start.test.js.map +0 -1
- package/dist/cli/__tests__/templates.test.d.ts +0 -2
- package/dist/cli/__tests__/templates.test.d.ts.map +0 -1
- package/dist/cli/__tests__/templates.test.js +0 -49
- package/dist/cli/__tests__/templates.test.js.map +0 -1
- package/dist/cli/__tests__/test.test.d.ts +0 -2
- package/dist/cli/__tests__/test.test.d.ts.map +0 -1
- package/dist/cli/__tests__/test.test.js +0 -40
- package/dist/cli/__tests__/test.test.js.map +0 -1
- package/dist/cli/__tests__/ui.test.d.ts +0 -2
- package/dist/cli/__tests__/ui.test.d.ts.map +0 -1
- package/dist/cli/__tests__/ui.test.js +0 -76
- package/dist/cli/__tests__/ui.test.js.map +0 -1
- package/dist/cli/__tests__/upgrade.test.d.ts +0 -2
- package/dist/cli/__tests__/upgrade.test.d.ts.map +0 -1
- package/dist/cli/__tests__/upgrade.test.js +0 -20
- package/dist/cli/__tests__/upgrade.test.js.map +0 -1
- package/dist/cli/__tests__/utils.test.d.ts +0 -2
- package/dist/cli/__tests__/utils.test.d.ts.map +0 -1
- package/dist/cli/__tests__/utils.test.js +0 -255
- package/dist/cli/__tests__/utils.test.js.map +0 -1
- package/dist/cli/__tests__/verify.test.d.ts +0 -2
- package/dist/cli/__tests__/verify.test.d.ts.map +0 -1
- package/dist/cli/__tests__/verify.test.js +0 -138
- package/dist/cli/__tests__/verify.test.js.map +0 -1
- package/dist/cli/commands/__tests__/commands.test.d.ts +0 -2
- package/dist/cli/commands/__tests__/commands.test.d.ts.map +0 -1
- package/dist/cli/commands/__tests__/commands.test.js +0 -185
- package/dist/cli/commands/__tests__/commands.test.js.map +0 -1
- package/dist/config/__tests__/loader.test.d.ts +0 -2
- package/dist/config/__tests__/loader.test.d.ts.map +0 -1
- package/dist/config/__tests__/loader.test.js +0 -462
- package/dist/config/__tests__/loader.test.js.map +0 -1
- package/dist/data/__tests__/drift-inspector.test.d.ts +0 -2
- package/dist/data/__tests__/drift-inspector.test.d.ts.map +0 -1
- package/dist/data/__tests__/drift-inspector.test.js +0 -170
- package/dist/data/__tests__/drift-inspector.test.js.map +0 -1
- package/dist/data/__tests__/framework-migration-rewriter.test.d.ts +0 -2
- package/dist/data/__tests__/framework-migration-rewriter.test.d.ts.map +0 -1
- package/dist/data/__tests__/framework-migration-rewriter.test.js +0 -329
- package/dist/data/__tests__/framework-migration-rewriter.test.js.map +0 -1
- package/dist/data/__tests__/migration.test.d.ts +0 -2
- package/dist/data/__tests__/migration.test.d.ts.map +0 -1
- package/dist/data/__tests__/migration.test.js +0 -145
- package/dist/data/__tests__/migration.test.js.map +0 -1
- package/dist/data/__tests__/registry.test.d.ts +0 -2
- package/dist/data/__tests__/registry.test.d.ts.map +0 -1
- package/dist/data/__tests__/registry.test.js +0 -70
- package/dist/data/__tests__/registry.test.js.map +0 -1
- package/dist/data/__tests__/repository.test.d.ts +0 -2
- package/dist/data/__tests__/repository.test.d.ts.map +0 -1
- package/dist/data/__tests__/repository.test.js +0 -559
- package/dist/data/__tests__/repository.test.js.map +0 -1
- package/dist/data/__tests__/schema-generator.test.d.ts +0 -2
- package/dist/data/__tests__/schema-generator.test.d.ts.map +0 -1
- package/dist/data/__tests__/schema-generator.test.js +0 -112
- package/dist/data/__tests__/schema-generator.test.js.map +0 -1
- package/dist/define/__tests__/defineCapability.test.d.ts +0 -2
- package/dist/define/__tests__/defineCapability.test.d.ts.map +0 -1
- package/dist/define/__tests__/defineCapability.test.js +0 -66
- package/dist/define/__tests__/defineCapability.test.js.map +0 -1
- package/dist/define/__tests__/defineEntity.test.d.ts +0 -2
- package/dist/define/__tests__/defineEntity.test.d.ts.map +0 -1
- package/dist/define/__tests__/defineEntity.test.js +0 -50
- package/dist/define/__tests__/defineEntity.test.js.map +0 -1
- package/dist/define/__tests__/defineEvent.test.d.ts +0 -2
- package/dist/define/__tests__/defineEvent.test.d.ts.map +0 -1
- package/dist/define/__tests__/defineEvent.test.js +0 -35
- package/dist/define/__tests__/defineEvent.test.js.map +0 -1
- package/dist/define/__tests__/defineFlow.test.d.ts +0 -2
- package/dist/define/__tests__/defineFlow.test.d.ts.map +0 -1
- package/dist/define/__tests__/defineFlow.test.js +0 -49
- package/dist/define/__tests__/defineFlow.test.js.map +0 -1
- package/dist/define/__tests__/definePrompt.test.d.ts +0 -2
- package/dist/define/__tests__/definePrompt.test.d.ts.map +0 -1
- package/dist/define/__tests__/definePrompt.test.js +0 -77
- package/dist/define/__tests__/definePrompt.test.js.map +0 -1
- package/dist/define/__tests__/defineTranslation.test.d.ts +0 -2
- package/dist/define/__tests__/defineTranslation.test.d.ts.map +0 -1
- package/dist/define/__tests__/defineTranslation.test.js +0 -90
- package/dist/define/__tests__/defineTranslation.test.js.map +0 -1
- package/dist/errors/__tests__/errors.test.d.ts +0 -2
- package/dist/errors/__tests__/errors.test.d.ts.map +0 -1
- package/dist/errors/__tests__/errors.test.js +0 -70
- package/dist/errors/__tests__/errors.test.js.map +0 -1
- package/dist/errors/__tests__/http.test.d.ts +0 -2
- package/dist/errors/__tests__/http.test.d.ts.map +0 -1
- package/dist/errors/__tests__/http.test.js +0 -35
- package/dist/errors/__tests__/http.test.js.map +0 -1
- package/dist/events/__tests__/consumer-registry.test.d.ts +0 -2
- package/dist/events/__tests__/consumer-registry.test.d.ts.map +0 -1
- package/dist/events/__tests__/consumer-registry.test.js +0 -68
- package/dist/events/__tests__/consumer-registry.test.js.map +0 -1
- package/dist/events/__tests__/dispatcher.test.d.ts +0 -2
- package/dist/events/__tests__/dispatcher.test.d.ts.map +0 -1
- package/dist/events/__tests__/dispatcher.test.js +0 -168
- package/dist/events/__tests__/dispatcher.test.js.map +0 -1
- package/dist/events/__tests__/event-emitter.test.d.ts +0 -2
- package/dist/events/__tests__/event-emitter.test.d.ts.map +0 -1
- package/dist/events/__tests__/event-emitter.test.js +0 -172
- package/dist/events/__tests__/event-emitter.test.js.map +0 -1
- package/dist/events/__tests__/event-registry.test.d.ts +0 -2
- package/dist/events/__tests__/event-registry.test.d.ts.map +0 -1
- package/dist/events/__tests__/event-registry.test.js +0 -55
- package/dist/events/__tests__/event-registry.test.js.map +0 -1
- package/dist/events/__tests__/event-worker.test.d.ts +0 -2
- package/dist/events/__tests__/event-worker.test.d.ts.map +0 -1
- package/dist/events/__tests__/event-worker.test.js +0 -174
- package/dist/events/__tests__/event-worker.test.js.map +0 -1
- package/dist/events/__tests__/queue.test.d.ts +0 -2
- package/dist/events/__tests__/queue.test.d.ts.map +0 -1
- package/dist/events/__tests__/queue.test.js +0 -73
- package/dist/events/__tests__/queue.test.js.map +0 -1
- package/dist/execution/__tests__/authorization.test.d.ts +0 -2
- package/dist/execution/__tests__/authorization.test.d.ts.map +0 -1
- package/dist/execution/__tests__/authorization.test.js +0 -99
- package/dist/execution/__tests__/authorization.test.js.map +0 -1
- package/dist/execution/__tests__/capability-executor.test.d.ts +0 -2
- package/dist/execution/__tests__/capability-executor.test.d.ts.map +0 -1
- package/dist/execution/__tests__/capability-executor.test.js +0 -212
- package/dist/execution/__tests__/capability-executor.test.js.map +0 -1
- package/dist/execution/__tests__/capability-registry.test.d.ts +0 -2
- package/dist/execution/__tests__/capability-registry.test.d.ts.map +0 -1
- package/dist/execution/__tests__/capability-registry.test.js +0 -50
- package/dist/execution/__tests__/capability-registry.test.js.map +0 -1
- package/dist/execution/__tests__/context-factory.test.d.ts +0 -2
- package/dist/execution/__tests__/context-factory.test.d.ts.map +0 -1
- package/dist/execution/__tests__/context-factory.test.js +0 -133
- package/dist/execution/__tests__/context-factory.test.js.map +0 -1
- package/dist/explanation/__tests__/tracker.test.d.ts +0 -2
- package/dist/explanation/__tests__/tracker.test.d.ts.map +0 -1
- package/dist/explanation/__tests__/tracker.test.js +0 -169
- package/dist/explanation/__tests__/tracker.test.js.map +0 -1
- package/dist/fields/__tests__/fields.test.d.ts +0 -2
- package/dist/fields/__tests__/fields.test.d.ts.map +0 -1
- package/dist/fields/__tests__/fields.test.js +0 -60
- package/dist/fields/__tests__/fields.test.js.map +0 -1
- package/dist/flows/__tests__/flow-engine.test.d.ts +0 -2
- package/dist/flows/__tests__/flow-engine.test.d.ts.map +0 -1
- package/dist/flows/__tests__/flow-engine.test.js +0 -797
- package/dist/flows/__tests__/flow-engine.test.js.map +0 -1
- package/dist/flows/__tests__/flow-registry.test.d.ts +0 -2
- package/dist/flows/__tests__/flow-registry.test.d.ts.map +0 -1
- package/dist/flows/__tests__/flow-registry.test.js +0 -69
- package/dist/flows/__tests__/flow-registry.test.js.map +0 -1
- package/dist/flows/__tests__/flow-service.test.d.ts +0 -2
- package/dist/flows/__tests__/flow-service.test.d.ts.map +0 -1
- package/dist/flows/__tests__/flow-service.test.js +0 -55
- package/dist/flows/__tests__/flow-service.test.js.map +0 -1
- package/dist/flows/__tests__/scheduler.test.d.ts +0 -2
- package/dist/flows/__tests__/scheduler.test.d.ts.map +0 -1
- package/dist/flows/__tests__/scheduler.test.js +0 -120
- package/dist/flows/__tests__/scheduler.test.js.map +0 -1
- package/dist/flows/__tests__/state-machine.test.d.ts +0 -2
- package/dist/flows/__tests__/state-machine.test.d.ts.map +0 -1
- package/dist/flows/__tests__/state-machine.test.js +0 -62
- package/dist/flows/__tests__/state-machine.test.js.map +0 -1
- package/dist/flows/__tests__/step-executor.test.d.ts +0 -2
- package/dist/flows/__tests__/step-executor.test.d.ts.map +0 -1
- package/dist/flows/__tests__/step-executor.test.js +0 -201
- package/dist/flows/__tests__/step-executor.test.js.map +0 -1
- package/dist/flows/__tests__/triggers.test.d.ts +0 -2
- package/dist/flows/__tests__/triggers.test.d.ts.map +0 -1
- package/dist/flows/__tests__/triggers.test.js +0 -98
- package/dist/flows/__tests__/triggers.test.js.map +0 -1
- package/dist/governance/__tests__/overrides.test.d.ts +0 -2
- package/dist/governance/__tests__/overrides.test.d.ts.map +0 -1
- package/dist/governance/__tests__/overrides.test.js +0 -123
- package/dist/governance/__tests__/overrides.test.js.map +0 -1
- package/dist/governance/__tests__/policies.test.d.ts +0 -2
- package/dist/governance/__tests__/policies.test.d.ts.map +0 -1
- package/dist/governance/__tests__/policies.test.js +0 -203
- package/dist/governance/__tests__/policies.test.js.map +0 -1
- package/dist/governance/__tests__/rules.test.d.ts +0 -2
- package/dist/governance/__tests__/rules.test.d.ts.map +0 -1
- package/dist/governance/__tests__/rules.test.js +0 -342
- package/dist/governance/__tests__/rules.test.js.map +0 -1
- package/dist/observability/__tests__/metrics.test.d.ts +0 -2
- package/dist/observability/__tests__/metrics.test.d.ts.map +0 -1
- package/dist/observability/__tests__/metrics.test.js +0 -301
- package/dist/observability/__tests__/metrics.test.js.map +0 -1
- package/dist/server/__tests__/bootstrap.test.d.ts +0 -2
- package/dist/server/__tests__/bootstrap.test.d.ts.map +0 -1
- package/dist/server/__tests__/bootstrap.test.js +0 -381
- package/dist/server/__tests__/bootstrap.test.js.map +0 -1
- package/dist/testing/__tests__/context.test.d.ts +0 -2
- package/dist/testing/__tests__/context.test.d.ts.map +0 -1
- package/dist/testing/__tests__/context.test.js +0 -341
- package/dist/testing/__tests__/context.test.js.map +0 -1
- package/dist/testing/__tests__/e2e.test.d.ts +0 -2
- package/dist/testing/__tests__/e2e.test.d.ts.map +0 -1
- package/dist/testing/__tests__/e2e.test.js +0 -119
- package/dist/testing/__tests__/e2e.test.js.map +0 -1
- package/dist/testing/__tests__/field-validation.test.d.ts +0 -2
- package/dist/testing/__tests__/field-validation.test.d.ts.map +0 -1
- package/dist/testing/__tests__/field-validation.test.js +0 -178
- package/dist/testing/__tests__/field-validation.test.js.map +0 -1
- package/dist/testing/__tests__/governance.test.d.ts +0 -2
- package/dist/testing/__tests__/governance.test.d.ts.map +0 -1
- package/dist/testing/__tests__/governance.test.js +0 -222
- package/dist/testing/__tests__/governance.test.js.map +0 -1
- package/dist/testing/__tests__/run-capability.test.d.ts +0 -2
- package/dist/testing/__tests__/run-capability.test.d.ts.map +0 -1
- package/dist/testing/__tests__/run-capability.test.js +0 -114
- package/dist/testing/__tests__/run-capability.test.js.map +0 -1
- package/dist/testing/__tests__/scaffolding.test.d.ts +0 -2
- package/dist/testing/__tests__/scaffolding.test.d.ts.map +0 -1
- package/dist/testing/__tests__/scaffolding.test.js +0 -70
- package/dist/testing/__tests__/scaffolding.test.js.map +0 -1
- package/dist/testing/__tests__/security.test.d.ts +0 -2
- package/dist/testing/__tests__/security.test.d.ts.map +0 -1
- package/dist/testing/__tests__/security.test.js +0 -186
- package/dist/testing/__tests__/security.test.js.map +0 -1
- package/dist/testing/__tests__/simulate-flow.test.d.ts +0 -2
- package/dist/testing/__tests__/simulate-flow.test.d.ts.map +0 -1
- package/dist/testing/__tests__/simulate-flow.test.js +0 -230
- package/dist/testing/__tests__/simulate-flow.test.js.map +0 -1
- package/dist/translations/__tests__/translation-resolver.test.d.ts +0 -2
- package/dist/translations/__tests__/translation-resolver.test.d.ts.map +0 -1
- package/dist/translations/__tests__/translation-resolver.test.js +0 -140
- package/dist/translations/__tests__/translation-resolver.test.js.map +0 -1
- package/dist/types/__tests__/registry.test.d.ts +0 -2
- package/dist/types/__tests__/registry.test.d.ts.map +0 -1
- package/dist/types/__tests__/registry.test.js +0 -34
- package/dist/types/__tests__/registry.test.js.map +0 -1
- package/dist/worker/__tests__/bootstrap.test.d.ts +0 -2
- package/dist/worker/__tests__/bootstrap.test.d.ts.map +0 -1
- package/dist/worker/__tests__/bootstrap.test.js +0 -268
- package/dist/worker/__tests__/bootstrap.test.js.map +0 -1
- package/dist/worker/__tests__/flow-service-wiring.test.d.ts +0 -2
- package/dist/worker/__tests__/flow-service-wiring.test.d.ts.map +0 -1
- package/dist/worker/__tests__/flow-service-wiring.test.js +0 -64
- package/dist/worker/__tests__/flow-service-wiring.test.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scaffolding.test.js","sourceRoot":"","sources":["../../../src/testing/__tests__/scaffolding.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"security.test.d.ts","sourceRoot":"","sources":["../../../src/testing/__tests__/security.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,186 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"security.test.js","sourceRoot":"","sources":["../../../src/testing/__tests__/security.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"simulate-flow.test.d.ts","sourceRoot":"","sources":["../../../src/testing/__tests__/simulate-flow.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,230 +0,0 @@
|
|
|
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 { createTestContext, mockEvents } from '../context.js';
|
|
6
|
-
import { simulateFlow } from '../simulate-flow.js';
|
|
7
|
-
// ── Test Flow Factories ──
|
|
8
|
-
function simpleFlow() {
|
|
9
|
-
return {
|
|
10
|
-
name: 'simple-flow',
|
|
11
|
-
domain: 'test',
|
|
12
|
-
input: z.object({ value: z.string() }),
|
|
13
|
-
steps: [
|
|
14
|
-
{ name: 'step1', type: FlowStepType.Capability },
|
|
15
|
-
{ name: 'step2', type: FlowStepType.Capability },
|
|
16
|
-
],
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
function conditionalFlow() {
|
|
20
|
-
return {
|
|
21
|
-
name: 'conditional-flow',
|
|
22
|
-
domain: 'test',
|
|
23
|
-
input: z.object({}),
|
|
24
|
-
steps: [
|
|
25
|
-
{
|
|
26
|
-
name: 'check',
|
|
27
|
-
type: FlowStepType.Conditional,
|
|
28
|
-
if: 'shouldProceed',
|
|
29
|
-
then: 'proceed',
|
|
30
|
-
else: 'fallback',
|
|
31
|
-
},
|
|
32
|
-
{ name: 'proceed', type: FlowStepType.Capability },
|
|
33
|
-
{ name: 'fallback', type: FlowStepType.Capability },
|
|
34
|
-
],
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
function delayFlow() {
|
|
38
|
-
return {
|
|
39
|
-
name: 'delay-flow',
|
|
40
|
-
domain: 'test',
|
|
41
|
-
input: z.object({}),
|
|
42
|
-
steps: [
|
|
43
|
-
{ name: 'step1', type: FlowStepType.Capability },
|
|
44
|
-
{ name: 'wait', type: FlowStepType.Delay, duration: '5m' },
|
|
45
|
-
{ name: 'step2', type: FlowStepType.Capability },
|
|
46
|
-
],
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
function waitFlow() {
|
|
50
|
-
return {
|
|
51
|
-
name: 'wait-flow',
|
|
52
|
-
domain: 'test',
|
|
53
|
-
input: z.object({}),
|
|
54
|
-
steps: [
|
|
55
|
-
{ name: 'step1', type: FlowStepType.Capability },
|
|
56
|
-
{ name: 'waitForApproval', type: FlowStepType.Wait, event: 'approval.received' },
|
|
57
|
-
{ name: 'step2', type: FlowStepType.Capability },
|
|
58
|
-
],
|
|
59
|
-
};
|
|
60
|
-
}
|
|
61
|
-
function parallelFlow() {
|
|
62
|
-
return {
|
|
63
|
-
name: 'parallel-flow',
|
|
64
|
-
domain: 'test',
|
|
65
|
-
input: z.object({}),
|
|
66
|
-
steps: [
|
|
67
|
-
{ name: 'fanout', type: FlowStepType.Parallel, branches: ['branchA', 'branchB'] },
|
|
68
|
-
{ name: 'branchA', type: FlowStepType.Capability },
|
|
69
|
-
{ name: 'branchB', type: FlowStepType.Capability },
|
|
70
|
-
{ name: 'merge', type: FlowStepType.Capability },
|
|
71
|
-
],
|
|
72
|
-
};
|
|
73
|
-
}
|
|
74
|
-
function eventEmitFlow() {
|
|
75
|
-
return {
|
|
76
|
-
name: 'event-emit-flow',
|
|
77
|
-
domain: 'test',
|
|
78
|
-
input: z.object({ projectId: z.string() }),
|
|
79
|
-
state: z.object({ manuscriptId: z.string().default(''), versionNumber: z.number().default(0) }),
|
|
80
|
-
steps: [
|
|
81
|
-
{ name: 'doWork', type: FlowStepType.Capability },
|
|
82
|
-
{ name: 'notify', type: FlowStepType.EventEmit, event: 'work.done' },
|
|
83
|
-
],
|
|
84
|
-
};
|
|
85
|
-
}
|
|
86
|
-
// ── Tests ──
|
|
87
|
-
describe('simulateFlow', () => {
|
|
88
|
-
it('completes a simple linear flow', async () => {
|
|
89
|
-
const result = await simulateFlow(simpleFlow(), { value: 'test' });
|
|
90
|
-
expect(result.status).toBe(FlowStatus.Completed);
|
|
91
|
-
expect(result.history).toHaveLength(2);
|
|
92
|
-
expect(result.history[0]?.step).toBe('step1');
|
|
93
|
-
expect(result.history[1]?.step).toBe('step2');
|
|
94
|
-
});
|
|
95
|
-
it('records step results by name', async () => {
|
|
96
|
-
const result = await simulateFlow(simpleFlow(), { value: 'test' });
|
|
97
|
-
expect(result.stepResults.get('step1')).toBeDefined();
|
|
98
|
-
expect(result.stepResults.get('step2')).toBeDefined();
|
|
99
|
-
expect(result.stepResults.get('step1')?.status).toBe(StepStatus.Completed);
|
|
100
|
-
});
|
|
101
|
-
it('fails flow when a capability step fails', async () => {
|
|
102
|
-
const result = await simulateFlow(simpleFlow(), { value: 'test' }, {
|
|
103
|
-
capabilityResults: {
|
|
104
|
-
step1: { success: false, error: 'step1 failed' },
|
|
105
|
-
},
|
|
106
|
-
});
|
|
107
|
-
expect(result.status).toBe(FlowStatus.Failed);
|
|
108
|
-
expect(result.error).toBe('step1 failed');
|
|
109
|
-
expect(result.history).toHaveLength(1); // Only step1 ran
|
|
110
|
-
});
|
|
111
|
-
it('handles conditional branching (then branch)', async () => {
|
|
112
|
-
const result = await simulateFlow(conditionalFlow(), {}, {
|
|
113
|
-
conditionResults: { shouldProceed: true },
|
|
114
|
-
});
|
|
115
|
-
expect(result.status).toBe(FlowStatus.Completed);
|
|
116
|
-
// Should have navigated to "proceed" step
|
|
117
|
-
const stepNames = result.history.map((h) => h.step);
|
|
118
|
-
expect(stepNames).toContain('check');
|
|
119
|
-
expect(stepNames).toContain('proceed');
|
|
120
|
-
});
|
|
121
|
-
it('handles conditional branching (else branch)', async () => {
|
|
122
|
-
const result = await simulateFlow(conditionalFlow(), {}, {
|
|
123
|
-
conditionResults: { shouldProceed: false },
|
|
124
|
-
});
|
|
125
|
-
expect(result.status).toBe(FlowStatus.Completed);
|
|
126
|
-
const stepNames = result.history.map((h) => h.step);
|
|
127
|
-
expect(stepNames).toContain('check');
|
|
128
|
-
expect(stepNames).toContain('fallback');
|
|
129
|
-
});
|
|
130
|
-
it('skips delays in simulation', async () => {
|
|
131
|
-
const result = await simulateFlow(delayFlow(), {});
|
|
132
|
-
expect(result.status).toBe(FlowStatus.Completed);
|
|
133
|
-
expect(result.history).toHaveLength(3);
|
|
134
|
-
const stepNames = result.history.map((h) => h.step);
|
|
135
|
-
expect(stepNames).toEqual(['step1', 'wait', 'step2']);
|
|
136
|
-
});
|
|
137
|
-
it('stops at wait-for-event step', async () => {
|
|
138
|
-
const result = await simulateFlow(waitFlow(), {});
|
|
139
|
-
expect(result.status).toBe(FlowStatus.Waiting);
|
|
140
|
-
expect(result.history).toHaveLength(2); // step1 + waitForApproval
|
|
141
|
-
expect(result.history[1]?.step).toBe('waitForApproval');
|
|
142
|
-
});
|
|
143
|
-
it('executes parallel branches', async () => {
|
|
144
|
-
const result = await simulateFlow(parallelFlow(), {});
|
|
145
|
-
expect(result.status).toBe(FlowStatus.Completed);
|
|
146
|
-
const stepNames = result.history.map((h) => h.step);
|
|
147
|
-
expect(stepNames).toContain('branchA');
|
|
148
|
-
expect(stepNames).toContain('branchB');
|
|
149
|
-
});
|
|
150
|
-
it('does not double-execute parallel branch steps', async () => {
|
|
151
|
-
const result = await simulateFlow(parallelFlow(), {});
|
|
152
|
-
expect(result.status).toBe(FlowStatus.Completed);
|
|
153
|
-
const stepNames = result.history.map((h) => h.step);
|
|
154
|
-
// fanout + branchA + branchB + merge = 4 entries
|
|
155
|
-
expect(stepNames).toEqual(['fanout', 'branchA', 'branchB', 'merge']);
|
|
156
|
-
// Branches should appear exactly once each
|
|
157
|
-
expect(stepNames.filter((n) => n === 'branchA')).toHaveLength(1);
|
|
158
|
-
expect(stepNames.filter((n) => n === 'branchB')).toHaveLength(1);
|
|
159
|
-
});
|
|
160
|
-
it('fails when parallel branch fails', async () => {
|
|
161
|
-
const result = await simulateFlow(parallelFlow(), {}, {
|
|
162
|
-
capabilityResults: {
|
|
163
|
-
branchB: { success: false, error: 'branch B failed' },
|
|
164
|
-
},
|
|
165
|
-
});
|
|
166
|
-
expect(result.status).toBe(FlowStatus.Failed);
|
|
167
|
-
expect(result.error).toBe('branch B failed');
|
|
168
|
-
});
|
|
169
|
-
it('handles event emit steps', async () => {
|
|
170
|
-
const events = mockEvents();
|
|
171
|
-
const ctx = createTestContext({ events });
|
|
172
|
-
const result = await simulateFlow(eventEmitFlow(), { projectId: 'proj-1' }, {
|
|
173
|
-
ctx,
|
|
174
|
-
capabilityResults: {
|
|
175
|
-
doWork: {
|
|
176
|
-
success: true,
|
|
177
|
-
data: { manuscriptId: 'manuscript-1', versionNumber: 2 },
|
|
178
|
-
},
|
|
179
|
-
},
|
|
180
|
-
});
|
|
181
|
-
expect(result.status).toBe(FlowStatus.Completed);
|
|
182
|
-
expect(result.history).toHaveLength(2);
|
|
183
|
-
expect(events.emitted).toEqual([
|
|
184
|
-
{
|
|
185
|
-
eventName: 'work.done',
|
|
186
|
-
payload: {
|
|
187
|
-
projectId: 'proj-1',
|
|
188
|
-
manuscriptId: 'manuscript-1',
|
|
189
|
-
versionNumber: 2,
|
|
190
|
-
},
|
|
191
|
-
},
|
|
192
|
-
]);
|
|
193
|
-
});
|
|
194
|
-
it('enforces max step limit', async () => {
|
|
195
|
-
// Create a flow that would loop if conditional always goes to step 1
|
|
196
|
-
const loopFlow = {
|
|
197
|
-
name: 'loop',
|
|
198
|
-
domain: 'test',
|
|
199
|
-
input: z.object({}),
|
|
200
|
-
steps: [
|
|
201
|
-
{ name: 'doWork', type: FlowStepType.Capability },
|
|
202
|
-
{ name: 'checkMore', type: FlowStepType.Conditional, if: 'hasMore', then: 'doWork' },
|
|
203
|
-
],
|
|
204
|
-
};
|
|
205
|
-
const result = await simulateFlow(loopFlow, {}, {
|
|
206
|
-
maxSteps: 5,
|
|
207
|
-
conditionResults: { hasMore: true },
|
|
208
|
-
});
|
|
209
|
-
expect(result.status).toBe(FlowStatus.Failed);
|
|
210
|
-
expect(result.error).toContain('maximum step limit');
|
|
211
|
-
});
|
|
212
|
-
it('passes state through to steps', async () => {
|
|
213
|
-
const result = await simulateFlow(simpleFlow(), { value: 'initial' });
|
|
214
|
-
expect(result.state).toEqual({ value: 'initial' });
|
|
215
|
-
});
|
|
216
|
-
it('uses custom step executor dependencies', async () => {
|
|
217
|
-
const executed = [];
|
|
218
|
-
const result = await simulateFlow(simpleFlow(), { value: 'test' }, {
|
|
219
|
-
stepDeps: {
|
|
220
|
-
executeCapability: async (name) => {
|
|
221
|
-
executed.push(name);
|
|
222
|
-
return { success: true, data: {} };
|
|
223
|
-
},
|
|
224
|
-
},
|
|
225
|
-
});
|
|
226
|
-
expect(result.status).toBe(FlowStatus.Completed);
|
|
227
|
-
expect(executed).toEqual(['step1', 'step2']);
|
|
228
|
-
});
|
|
229
|
-
});
|
|
230
|
-
//# sourceMappingURL=simulate-flow.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"simulate-flow.test.js","sourceRoot":"","sources":["../../../src/testing/__tests__/simulate-flow.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"translation-resolver.test.d.ts","sourceRoot":"","sources":["../../../src/translations/__tests__/translation-resolver.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'vitest';
|
|
2
|
-
import { defineTranslation } from '../../define/defineTranslation.js';
|
|
3
|
-
import { createTranslationResolver, createTranslationService, TranslationRegistry, } from '../index.js';
|
|
4
|
-
const commonTranslation = defineTranslation({
|
|
5
|
-
name: 'common',
|
|
6
|
-
defaultLocale: 'en',
|
|
7
|
-
locales: ['en', 'he'],
|
|
8
|
-
messages: {
|
|
9
|
-
en: {
|
|
10
|
-
greeting: 'Hello {name}',
|
|
11
|
-
farewell: 'Goodbye',
|
|
12
|
-
items: '{count, plural, one {# item} other {# items}}',
|
|
13
|
-
itemsWithZero: '{count, plural, zero {No items} one {# item} other {# items}}',
|
|
14
|
-
role: '{gender, select, male {He is an admin} female {She is an admin} other {They are an admin}}',
|
|
15
|
-
},
|
|
16
|
-
he: {
|
|
17
|
-
greeting: 'שלום {name}',
|
|
18
|
-
farewell: 'להתראות',
|
|
19
|
-
items: '{count, plural, one {פריט #} two {# פריטים} other {# פריטים}}',
|
|
20
|
-
itemsWithZero: '{count, plural, zero {אין פריטים} one {פריט #} other {# פריטים}}',
|
|
21
|
-
role: '{gender, select, male {הוא מנהל} female {היא מנהלת} other {מנהל/ת}}',
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
});
|
|
25
|
-
const errorsTranslation = defineTranslation({
|
|
26
|
-
name: 'errors',
|
|
27
|
-
defaultLocale: 'en',
|
|
28
|
-
locales: ['en', 'he'],
|
|
29
|
-
messages: {
|
|
30
|
-
en: {
|
|
31
|
-
notFound: 'Not found',
|
|
32
|
-
forbidden: 'Access denied',
|
|
33
|
-
},
|
|
34
|
-
he: {
|
|
35
|
-
notFound: 'לא נמצא',
|
|
36
|
-
forbidden: 'הגישה נדחתה',
|
|
37
|
-
},
|
|
38
|
-
},
|
|
39
|
-
});
|
|
40
|
-
describe('TranslationRegistry', () => {
|
|
41
|
-
it('resolves simple key in requested locale', () => {
|
|
42
|
-
const registry = new TranslationRegistry();
|
|
43
|
-
registry.register(commonTranslation);
|
|
44
|
-
expect(registry.t('he', 'common.farewell')).toBe('להתראות');
|
|
45
|
-
});
|
|
46
|
-
it('resolves key with interpolation', () => {
|
|
47
|
-
const registry = new TranslationRegistry();
|
|
48
|
-
registry.register(commonTranslation);
|
|
49
|
-
expect(registry.t('en', 'common.greeting', { name: 'World' })).toBe('Hello World');
|
|
50
|
-
expect(registry.t('he', 'common.greeting', { name: 'עולם' })).toBe('שלום עולם');
|
|
51
|
-
});
|
|
52
|
-
it('resolves plural — one', () => {
|
|
53
|
-
const registry = new TranslationRegistry();
|
|
54
|
-
registry.register(commonTranslation);
|
|
55
|
-
expect(registry.t('en', 'common.items', { count: 1 })).toBe('1 item');
|
|
56
|
-
});
|
|
57
|
-
it('resolves plural — other', () => {
|
|
58
|
-
const registry = new TranslationRegistry();
|
|
59
|
-
registry.register(commonTranslation);
|
|
60
|
-
expect(registry.t('en', 'common.items', { count: 5 })).toBe('5 items');
|
|
61
|
-
});
|
|
62
|
-
it('resolves plural — zero', () => {
|
|
63
|
-
const registry = new TranslationRegistry();
|
|
64
|
-
registry.register(commonTranslation);
|
|
65
|
-
expect(registry.t('en', 'common.itemsWithZero', { count: 0 })).toBe('No items');
|
|
66
|
-
});
|
|
67
|
-
it('resolves plural — Hebrew dual', () => {
|
|
68
|
-
const registry = new TranslationRegistry();
|
|
69
|
-
registry.register(commonTranslation);
|
|
70
|
-
expect(registry.t('he', 'common.items', { count: 2 })).toBe('2 פריטים');
|
|
71
|
-
});
|
|
72
|
-
it('resolves select', () => {
|
|
73
|
-
const registry = new TranslationRegistry();
|
|
74
|
-
registry.register(commonTranslation);
|
|
75
|
-
expect(registry.t('en', 'common.role', { gender: 'male' })).toBe('He is an admin');
|
|
76
|
-
expect(registry.t('en', 'common.role', { gender: 'female' })).toBe('She is an admin');
|
|
77
|
-
expect(registry.t('en', 'common.role', { gender: 'unknown' })).toBe('They are an admin');
|
|
78
|
-
});
|
|
79
|
-
it('falls back to default locale when requested locale is missing', () => {
|
|
80
|
-
const registry = new TranslationRegistry();
|
|
81
|
-
registry.register(commonTranslation);
|
|
82
|
-
expect(registry.t('fr', 'common.farewell')).toBe('Goodbye');
|
|
83
|
-
});
|
|
84
|
-
it('returns key as-is when namespace is unknown', () => {
|
|
85
|
-
const registry = new TranslationRegistry();
|
|
86
|
-
registry.register(commonTranslation);
|
|
87
|
-
expect(registry.t('en', 'unknown.key')).toBe('unknown.key');
|
|
88
|
-
});
|
|
89
|
-
it('returns key as-is when key has no namespace', () => {
|
|
90
|
-
const registry = new TranslationRegistry();
|
|
91
|
-
registry.register(commonTranslation);
|
|
92
|
-
expect(registry.t('en', 'plainkey')).toBe('plainkey');
|
|
93
|
-
});
|
|
94
|
-
it('registers multiple namespaces', () => {
|
|
95
|
-
const registry = new TranslationRegistry();
|
|
96
|
-
registry.registerAll([commonTranslation, errorsTranslation]);
|
|
97
|
-
expect(registry.t('en', 'common.farewell')).toBe('Goodbye');
|
|
98
|
-
expect(registry.t('he', 'errors.notFound')).toBe('לא נמצא');
|
|
99
|
-
});
|
|
100
|
-
it('getNamespaces returns all registered names', () => {
|
|
101
|
-
const registry = new TranslationRegistry();
|
|
102
|
-
registry.registerAll([commonTranslation, errorsTranslation]);
|
|
103
|
-
expect(registry.getNamespaces().sort()).toEqual(['common', 'errors']);
|
|
104
|
-
});
|
|
105
|
-
it('getDefinition returns specific definition', () => {
|
|
106
|
-
const registry = new TranslationRegistry();
|
|
107
|
-
registry.register(commonTranslation);
|
|
108
|
-
expect(registry.getDefinition('common')?.name).toBe('common');
|
|
109
|
-
expect(registry.getDefinition('unknown')).toBeUndefined();
|
|
110
|
-
});
|
|
111
|
-
it('getAllDefinitions returns all', () => {
|
|
112
|
-
const registry = new TranslationRegistry();
|
|
113
|
-
registry.registerAll([commonTranslation, errorsTranslation]);
|
|
114
|
-
expect(registry.getAllDefinitions()).toHaveLength(2);
|
|
115
|
-
});
|
|
116
|
-
});
|
|
117
|
-
describe('createTranslationResolver', () => {
|
|
118
|
-
it('creates a resolver from definitions', () => {
|
|
119
|
-
const resolver = createTranslationResolver([commonTranslation, errorsTranslation]);
|
|
120
|
-
expect(resolver.t('en', 'common.farewell')).toBe('Goodbye');
|
|
121
|
-
expect(resolver.t('he', 'errors.forbidden')).toBe('הגישה נדחתה');
|
|
122
|
-
});
|
|
123
|
-
});
|
|
124
|
-
describe('createTranslationService', () => {
|
|
125
|
-
it('creates a locale-bound service', () => {
|
|
126
|
-
const registry = new TranslationRegistry();
|
|
127
|
-
registry.registerAll([commonTranslation, errorsTranslation]);
|
|
128
|
-
const service = createTranslationService(registry, 'he');
|
|
129
|
-
expect(service.locale).toBe('he');
|
|
130
|
-
expect(service.t('common.farewell')).toBe('להתראות');
|
|
131
|
-
expect(service.t('errors.notFound')).toBe('לא נמצא');
|
|
132
|
-
});
|
|
133
|
-
it('locale-bound service still uses interpolation', () => {
|
|
134
|
-
const registry = new TranslationRegistry();
|
|
135
|
-
registry.register(commonTranslation);
|
|
136
|
-
const service = createTranslationService(registry, 'en');
|
|
137
|
-
expect(service.t('common.greeting', { name: 'Alice' })).toBe('Hello Alice');
|
|
138
|
-
});
|
|
139
|
-
});
|
|
140
|
-
//# sourceMappingURL=translation-resolver.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"translation-resolver.test.js","sourceRoot":"","sources":["../../../src/translations/__tests__/translation-resolver.test.ts"],"names":[],"mappings":"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"}
|