@buenojs/bueno 0.8.5 → 0.8.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/settings.local.json +9 -0
- package/README.md +259 -15
- package/dist/cache/index.d.ts +187 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cli/bin.d.ts +8 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +484 -156
- package/dist/cli/commands/add-frontend.d.ts +7 -0
- package/dist/cli/commands/add-frontend.d.ts.map +1 -0
- package/dist/cli/commands/build.d.ts +7 -0
- package/dist/cli/commands/build.d.ts.map +1 -0
- package/dist/cli/commands/dev.d.ts +7 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/generate.d.ts +7 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/help.d.ts +7 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/index.d.ts +59 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/migration.d.ts +7 -0
- package/dist/cli/commands/migration.d.ts.map +1 -0
- package/dist/cli/commands/new.d.ts +7 -0
- package/dist/cli/commands/new.d.ts.map +1 -0
- package/dist/cli/commands/start.d.ts +7 -0
- package/dist/cli/commands/start.d.ts.map +1 -0
- package/dist/cli/core/args.d.ts +61 -0
- package/dist/cli/core/args.d.ts.map +1 -0
- package/dist/cli/core/console.d.ts +135 -0
- package/dist/cli/core/console.d.ts.map +1 -0
- package/dist/cli/core/index.d.ts +10 -0
- package/dist/cli/core/index.d.ts.map +1 -0
- package/dist/cli/core/prompt.d.ts +63 -0
- package/dist/cli/core/prompt.d.ts.map +1 -0
- package/dist/cli/core/spinner.d.ts +111 -0
- package/dist/cli/core/spinner.d.ts.map +1 -0
- package/dist/cli/index.d.ts +47 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/templates/database/index.d.ts +24 -0
- package/dist/cli/templates/database/index.d.ts.map +1 -0
- package/dist/cli/templates/database/mysql.d.ts +6 -0
- package/dist/cli/templates/database/mysql.d.ts.map +1 -0
- package/dist/cli/templates/database/none.d.ts +8 -0
- package/dist/cli/templates/database/none.d.ts.map +1 -0
- package/dist/cli/templates/database/postgresql.d.ts +6 -0
- package/dist/cli/templates/database/postgresql.d.ts.map +1 -0
- package/dist/cli/templates/database/sqlite.d.ts +6 -0
- package/dist/cli/templates/database/sqlite.d.ts.map +1 -0
- package/dist/cli/templates/deploy.d.ts +41 -0
- package/dist/cli/templates/deploy.d.ts.map +1 -0
- package/dist/cli/templates/docker.d.ts +30 -0
- package/dist/cli/templates/docker.d.ts.map +1 -0
- package/dist/cli/templates/frontend/index.d.ts +25 -0
- package/dist/cli/templates/frontend/index.d.ts.map +1 -0
- package/dist/cli/templates/frontend/none.d.ts +8 -0
- package/dist/cli/templates/frontend/none.d.ts.map +1 -0
- package/dist/cli/templates/frontend/react.d.ts +6 -0
- package/dist/cli/templates/frontend/react.d.ts.map +1 -0
- package/dist/cli/templates/frontend/solid.d.ts +6 -0
- package/dist/cli/templates/frontend/solid.d.ts.map +1 -0
- package/dist/cli/templates/frontend/svelte.d.ts +6 -0
- package/dist/cli/templates/frontend/svelte.d.ts.map +1 -0
- package/dist/cli/templates/frontend/vue.d.ts +6 -0
- package/dist/cli/templates/frontend/vue.d.ts.map +1 -0
- package/dist/cli/templates/generators/index.d.ts +29 -0
- package/dist/cli/templates/generators/index.d.ts.map +1 -0
- package/dist/cli/templates/generators/types.d.ts +32 -0
- package/dist/cli/templates/generators/types.d.ts.map +1 -0
- package/dist/cli/templates/index.d.ts +12 -0
- package/dist/cli/templates/index.d.ts.map +1 -0
- package/dist/cli/templates/project/api.d.ts +6 -0
- package/dist/cli/templates/project/api.d.ts.map +1 -0
- package/dist/cli/templates/project/default.d.ts +6 -0
- package/dist/cli/templates/project/default.d.ts.map +1 -0
- package/dist/cli/templates/project/fullstack.d.ts +14 -0
- package/dist/cli/templates/project/fullstack.d.ts.map +1 -0
- package/dist/cli/templates/project/index.d.ts +26 -0
- package/dist/cli/templates/project/index.d.ts.map +1 -0
- package/dist/cli/templates/project/minimal.d.ts +6 -0
- package/dist/cli/templates/project/minimal.d.ts.map +1 -0
- package/dist/cli/templates/project/types.d.ts +80 -0
- package/dist/cli/templates/project/types.d.ts.map +1 -0
- package/dist/cli/templates/project/website.d.ts +8 -0
- package/dist/cli/templates/project/website.d.ts.map +1 -0
- package/dist/cli/utils/fs.d.ts +137 -0
- package/dist/cli/utils/fs.d.ts.map +1 -0
- package/dist/cli/utils/index.d.ts +9 -0
- package/dist/cli/utils/index.d.ts.map +1 -0
- package/dist/cli/utils/strings.d.ts +86 -0
- package/dist/cli/utils/strings.d.ts.map +1 -0
- package/dist/cli/utils/version.d.ts +15 -0
- package/dist/cli/utils/version.d.ts.map +1 -0
- package/dist/config/env-validation.d.ts +49 -0
- package/dist/config/env-validation.d.ts.map +1 -0
- package/dist/config/env.d.ts +167 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/index.d.ts +168 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/loader.d.ts +81 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/merge.d.ts +66 -0
- package/dist/config/merge.d.ts.map +1 -0
- package/dist/config/types.d.ts +322 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/validation.d.ts +100 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/container/forward-ref.d.ts +116 -0
- package/dist/container/forward-ref.d.ts.map +1 -0
- package/dist/container/index.d.ts +95 -0
- package/dist/container/index.d.ts.map +1 -0
- package/dist/container/index.js +26 -3
- package/dist/context/index.d.ts +143 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/database/index.d.ts +219 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/migrations/index.d.ts +146 -0
- package/dist/database/migrations/index.d.ts.map +1 -0
- package/dist/database/orm/builder.d.ts +122 -0
- package/dist/database/orm/builder.d.ts.map +1 -0
- package/dist/database/orm/casts/index.d.ts +16 -0
- package/dist/database/orm/casts/index.d.ts.map +1 -0
- package/dist/database/orm/casts/types.d.ts +16 -0
- package/dist/database/orm/casts/types.d.ts.map +1 -0
- package/dist/database/orm/compiler.d.ts +90 -0
- package/dist/database/orm/compiler.d.ts.map +1 -0
- package/dist/database/orm/hooks/index.d.ts +53 -0
- package/dist/database/orm/hooks/index.d.ts.map +1 -0
- package/dist/database/orm/index.d.ts +21 -0
- package/dist/database/orm/index.d.ts.map +1 -0
- package/dist/database/orm/model-registry.d.ts +33 -0
- package/dist/database/orm/model-registry.d.ts.map +1 -0
- package/dist/database/orm/model.d.ts +245 -0
- package/dist/database/orm/model.d.ts.map +1 -0
- package/dist/database/orm/relationships/base.d.ts +69 -0
- package/dist/database/orm/relationships/base.d.ts.map +1 -0
- package/dist/database/orm/relationships/belongs-to-many.d.ts +47 -0
- package/dist/database/orm/relationships/belongs-to-many.d.ts.map +1 -0
- package/dist/database/orm/relationships/belongs-to.d.ts +17 -0
- package/dist/database/orm/relationships/belongs-to.d.ts.map +1 -0
- package/dist/database/orm/relationships/has-many.d.ts +14 -0
- package/dist/database/orm/relationships/has-many.d.ts.map +1 -0
- package/dist/database/orm/relationships/has-one.d.ts +14 -0
- package/dist/database/orm/relationships/has-one.d.ts.map +1 -0
- package/dist/database/orm/relationships/index.d.ts +10 -0
- package/dist/database/orm/relationships/index.d.ts.map +1 -0
- package/dist/database/orm/scopes/index.d.ts +36 -0
- package/dist/database/orm/scopes/index.d.ts.map +1 -0
- package/dist/database/schema/index.d.ts +155 -0
- package/dist/database/schema/index.d.ts.map +1 -0
- package/dist/events/__tests__/event-system.test.d.ts +2 -0
- package/dist/events/__tests__/event-system.test.d.ts.map +1 -0
- package/dist/events/config.d.ts +16 -0
- package/dist/events/config.d.ts.map +1 -0
- package/dist/events/example-usage.d.ts +12 -0
- package/dist/events/example-usage.d.ts.map +1 -0
- package/dist/events/index.d.ts +27 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/manager.d.ts +33 -0
- package/dist/events/manager.d.ts.map +1 -0
- package/dist/events/registry.d.ts +31 -0
- package/dist/events/registry.d.ts.map +1 -0
- package/dist/events/types.d.ts +105 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/frontend/api-routes.d.ts +189 -0
- package/dist/frontend/api-routes.d.ts.map +1 -0
- package/dist/frontend/bundler.d.ts +99 -0
- package/dist/frontend/bundler.d.ts.map +1 -0
- package/dist/frontend/console-client.d.ts +11 -0
- package/dist/frontend/console-client.d.ts.map +1 -0
- package/dist/frontend/console-stream.d.ts +138 -0
- package/dist/frontend/console-stream.d.ts.map +1 -0
- package/dist/frontend/dev-server.d.ts +174 -0
- package/dist/frontend/dev-server.d.ts.map +1 -0
- package/dist/frontend/file-router.d.ts +170 -0
- package/dist/frontend/file-router.d.ts.map +1 -0
- package/dist/frontend/frameworks/index.d.ts +41 -0
- package/dist/frontend/frameworks/index.d.ts.map +1 -0
- package/dist/frontend/frameworks/react.d.ts +32 -0
- package/dist/frontend/frameworks/react.d.ts.map +1 -0
- package/dist/frontend/frameworks/solid.d.ts +42 -0
- package/dist/frontend/frameworks/solid.d.ts.map +1 -0
- package/dist/frontend/frameworks/svelte.d.ts +57 -0
- package/dist/frontend/frameworks/svelte.d.ts.map +1 -0
- package/dist/frontend/frameworks/vue.d.ts +36 -0
- package/dist/frontend/frameworks/vue.d.ts.map +1 -0
- package/dist/frontend/hmr-client.d.ts +22 -0
- package/dist/frontend/hmr-client.d.ts.map +1 -0
- package/dist/frontend/hmr.d.ts +185 -0
- package/dist/frontend/hmr.d.ts.map +1 -0
- package/dist/frontend/index.d.ts +34 -0
- package/dist/frontend/index.d.ts.map +1 -0
- package/dist/frontend/islands.d.ts +135 -0
- package/dist/frontend/islands.d.ts.map +1 -0
- package/dist/frontend/isr.d.ts +143 -0
- package/dist/frontend/isr.d.ts.map +1 -0
- package/dist/frontend/layout.d.ts +140 -0
- package/dist/frontend/layout.d.ts.map +1 -0
- package/dist/frontend/ssr/react.d.ts +118 -0
- package/dist/frontend/ssr/react.d.ts.map +1 -0
- package/dist/frontend/ssr/solid.d.ts +141 -0
- package/dist/frontend/ssr/solid.d.ts.map +1 -0
- package/dist/frontend/ssr/svelte.d.ts +158 -0
- package/dist/frontend/ssr/svelte.d.ts.map +1 -0
- package/dist/frontend/ssr/vue.d.ts +161 -0
- package/dist/frontend/ssr/vue.d.ts.map +1 -0
- package/dist/frontend/ssr.d.ts +147 -0
- package/dist/frontend/ssr.d.ts.map +1 -0
- package/dist/frontend/types.d.ts +1902 -0
- package/dist/frontend/types.d.ts.map +1 -0
- package/dist/graphql/built-in-engine.d.ts +36 -0
- package/dist/graphql/built-in-engine.d.ts.map +1 -0
- package/dist/graphql/context-builder.d.ts +44 -0
- package/dist/graphql/context-builder.d.ts.map +1 -0
- package/dist/graphql/decorators.d.ts +162 -0
- package/dist/graphql/decorators.d.ts.map +1 -0
- package/dist/graphql/execution-pipeline.d.ts +67 -0
- package/dist/graphql/execution-pipeline.d.ts.map +1 -0
- package/dist/graphql/graphql-module.d.ts +70 -0
- package/dist/graphql/graphql-module.d.ts.map +1 -0
- package/dist/graphql/index.d.ts +48 -0
- package/dist/graphql/index.d.ts.map +1 -0
- package/dist/graphql/index.js +2156 -0
- package/dist/graphql/metadata.d.ts +37 -0
- package/dist/graphql/metadata.d.ts.map +1 -0
- package/dist/graphql/schema-builder.d.ts +34 -0
- package/dist/graphql/schema-builder.d.ts.map +1 -0
- package/dist/graphql/subscription-handler.d.ts +47 -0
- package/dist/graphql/subscription-handler.d.ts.map +1 -0
- package/dist/graphql/types.d.ts +252 -0
- package/dist/graphql/types.d.ts.map +1 -0
- package/dist/health/index.d.ts +176 -0
- package/dist/health/index.d.ts.map +1 -0
- package/dist/i18n/engine.d.ts +105 -0
- package/dist/i18n/engine.d.ts.map +1 -0
- package/dist/i18n/index.d.ts +13 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/loader.d.ts +79 -0
- package/dist/i18n/loader.d.ts.map +1 -0
- package/dist/i18n/middleware.d.ts +96 -0
- package/dist/i18n/middleware.d.ts.map +1 -0
- package/dist/i18n/negotiator.d.ts +84 -0
- package/dist/i18n/negotiator.d.ts.map +1 -0
- package/dist/i18n/types.d.ts +129 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +520 -434
- package/dist/jobs/drivers/memory.d.ts +38 -0
- package/dist/jobs/drivers/memory.d.ts.map +1 -0
- package/dist/jobs/drivers/redis.d.ts +34 -0
- package/dist/jobs/drivers/redis.d.ts.map +1 -0
- package/dist/jobs/index.d.ts +12 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/queue.d.ts +93 -0
- package/dist/jobs/queue.d.ts.map +1 -0
- package/dist/jobs/types.d.ts +193 -0
- package/dist/jobs/types.d.ts.map +1 -0
- package/dist/jobs/worker.d.ts +91 -0
- package/dist/jobs/worker.d.ts.map +1 -0
- package/dist/lock/index.d.ts +141 -0
- package/dist/lock/index.d.ts.map +1 -0
- package/dist/logger/index.d.ts +156 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/transports/index.d.ts +371 -0
- package/dist/logger/transports/index.d.ts.map +1 -0
- package/dist/metrics/index.d.ts +163 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/middleware/built-in.d.ts +50 -0
- package/dist/middleware/built-in.d.ts.map +1 -0
- package/dist/middleware/index.d.ts +40 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/migrations/index.d.ts +10 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/modules/filters.d.ts +150 -0
- package/dist/modules/filters.d.ts.map +1 -0
- package/dist/modules/guards.d.ts +188 -0
- package/dist/modules/guards.d.ts.map +1 -0
- package/dist/modules/index.d.ts +266 -0
- package/dist/modules/index.d.ts.map +1 -0
- package/dist/modules/index.js +514 -449
- package/dist/modules/interceptors.d.ts +242 -0
- package/dist/modules/interceptors.d.ts.map +1 -0
- package/dist/modules/lazy.d.ts +187 -0
- package/dist/modules/lazy.d.ts.map +1 -0
- package/dist/modules/lifecycle.d.ts +221 -0
- package/dist/modules/lifecycle.d.ts.map +1 -0
- package/dist/modules/metadata.d.ts +32 -0
- package/dist/modules/metadata.d.ts.map +1 -0
- package/dist/modules/pipes.d.ts +287 -0
- package/dist/modules/pipes.d.ts.map +1 -0
- package/dist/notification/channels/base.d.ts +32 -0
- package/dist/notification/channels/base.d.ts.map +1 -0
- package/dist/notification/channels/email.d.ts +37 -0
- package/dist/notification/channels/email.d.ts.map +1 -0
- package/dist/notification/channels/push.d.ts +37 -0
- package/dist/notification/channels/push.d.ts.map +1 -0
- package/dist/notification/channels/sms.d.ts +37 -0
- package/dist/notification/channels/sms.d.ts.map +1 -0
- package/dist/notification/channels/whatsapp.d.ts +37 -0
- package/dist/notification/channels/whatsapp.d.ts.map +1 -0
- package/dist/notification/index.d.ts +15 -0
- package/dist/notification/index.d.ts.map +1 -0
- package/dist/notification/service.d.ts +100 -0
- package/dist/notification/service.d.ts.map +1 -0
- package/dist/notification/types.d.ts +253 -0
- package/dist/notification/types.d.ts.map +1 -0
- package/dist/observability/__tests__/observability.test.d.ts +2 -0
- package/dist/observability/__tests__/observability.test.d.ts.map +1 -0
- package/dist/observability/breadcrumbs.d.ts +48 -0
- package/dist/observability/breadcrumbs.d.ts.map +1 -0
- package/dist/observability/index.d.ts +95 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/interceptor.d.ts +19 -0
- package/dist/observability/interceptor.d.ts.map +1 -0
- package/dist/observability/service.d.ts +101 -0
- package/dist/observability/service.d.ts.map +1 -0
- package/dist/observability/trace.d.ts +21 -0
- package/dist/observability/trace.d.ts.map +1 -0
- package/dist/observability/types.d.ts +172 -0
- package/dist/observability/types.d.ts.map +1 -0
- package/dist/openapi/__tests__/decorators.test.d.ts +2 -0
- package/dist/openapi/__tests__/decorators.test.d.ts.map +1 -0
- package/dist/openapi/__tests__/document-builder.test.d.ts +2 -0
- package/dist/openapi/__tests__/document-builder.test.d.ts.map +1 -0
- package/dist/openapi/__tests__/route-scanner.test.d.ts +2 -0
- package/dist/openapi/__tests__/route-scanner.test.d.ts.map +1 -0
- package/dist/openapi/__tests__/schema-generator.test.d.ts +2 -0
- package/dist/openapi/__tests__/schema-generator.test.d.ts.map +1 -0
- package/dist/openapi/decorators.d.ts +173 -0
- package/dist/openapi/decorators.d.ts.map +1 -0
- package/dist/openapi/document-builder.d.ts +82 -0
- package/dist/openapi/document-builder.d.ts.map +1 -0
- package/dist/openapi/index.d.ts +48 -0
- package/dist/openapi/index.d.ts.map +1 -0
- package/dist/openapi/index.js +59 -40
- package/dist/openapi/metadata.d.ts +36 -0
- package/dist/openapi/metadata.d.ts.map +1 -0
- package/dist/openapi/route-scanner.d.ts +34 -0
- package/dist/openapi/route-scanner.d.ts.map +1 -0
- package/dist/openapi/schema-generator.d.ts +53 -0
- package/dist/openapi/schema-generator.d.ts.map +1 -0
- package/dist/openapi/swagger-module.d.ts +57 -0
- package/dist/openapi/swagger-module.d.ts.map +1 -0
- package/dist/openapi/types.d.ts +344 -0
- package/dist/openapi/types.d.ts.map +1 -0
- package/dist/orm/index.d.ts +10 -0
- package/dist/orm/index.d.ts.map +1 -0
- package/dist/router/index.d.ts +73 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/linear.d.ts +54 -0
- package/dist/router/linear.d.ts.map +1 -0
- package/dist/router/regex.d.ts +49 -0
- package/dist/router/regex.d.ts.map +1 -0
- package/dist/router/tree.d.ts +112 -0
- package/dist/router/tree.d.ts.map +1 -0
- package/dist/rpc/index.d.ts +321 -0
- package/dist/rpc/index.d.ts.map +1 -0
- package/dist/schema/index.d.ts +10 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/security/index.d.ts +126 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/ssg/index.d.ts +73 -0
- package/dist/ssg/index.d.ts.map +1 -0
- package/dist/storage/index.d.ts +99 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/telemetry/index.d.ts +376 -0
- package/dist/telemetry/index.d.ts.map +1 -0
- package/dist/template/index.d.ts +7 -0
- package/dist/template/index.d.ts.map +1 -0
- package/dist/templates/engine.d.ts +60 -0
- package/dist/templates/engine.d.ts.map +1 -0
- package/dist/templates/index.d.ts +9 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/loader.d.ts +45 -0
- package/dist/templates/loader.d.ts.map +1 -0
- package/dist/templates/renderers/markdown.d.ts +46 -0
- package/dist/templates/renderers/markdown.d.ts.map +1 -0
- package/dist/templates/renderers/simple.d.ts +35 -0
- package/dist/templates/renderers/simple.d.ts.map +1 -0
- package/dist/templates/types.d.ts +138 -0
- package/dist/templates/types.d.ts.map +1 -0
- package/dist/testing/index.d.ts +539 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +116 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/validation/index.d.ts +89 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/schemas.d.ts +243 -0
- package/dist/validation/schemas.d.ts.map +1 -0
- package/dist/websocket/index.d.ts +252 -0
- package/dist/websocket/index.d.ts.map +1 -0
- package/llms.txt +231 -0
- package/package.json +6 -2
- package/src/cli/ARCHITECTURE.md +3 -3
- package/src/cli/commands/add-frontend.ts +444 -0
- package/src/cli/commands/new.ts +23 -0
- package/src/cli/index.ts +1 -0
- package/src/cli/templates/frontend/react.ts +2 -1
- package/src/cli/templates/frontend/solid.ts +2 -1
- package/src/cli/templates/frontend/svelte.ts +2 -1
- package/src/cli/templates/frontend/vue.ts +2 -1
- package/src/cli/templates/project/api.ts +1 -1
- package/src/cli/templates/project/default.ts +1 -1
- package/src/cli/templates/project/fullstack.ts +14 -104
- package/src/cli/templates/project/website.ts +63 -12
- package/src/config/types.ts +21 -0
- package/src/graphql/built-in-engine.ts +598 -0
- package/src/graphql/context-builder.ts +110 -0
- package/src/graphql/decorators.ts +358 -0
- package/src/graphql/execution-pipeline.ts +227 -0
- package/src/graphql/graphql-module.ts +563 -0
- package/src/graphql/index.ts +101 -0
- package/src/graphql/metadata.ts +237 -0
- package/src/graphql/schema-builder.ts +319 -0
- package/src/graphql/subscription-handler.ts +283 -0
- package/src/graphql/types.ts +324 -0
- package/src/index.ts +3 -0
- package/src/modules/index.ts +48 -1
- package/tests/integration/cli.test.ts +19 -19
- package/tests/unit/cli.test.ts +1 -1
- package/tests/unit/graphql.test.ts +991 -0
- package/tsconfig.declaration.json +14 -0
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Notification System Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* Flexible multi-channel notification system with support for email, SMS,
|
|
5
|
+
* WhatsApp, push notifications, and custom channels. Uses registry pattern
|
|
6
|
+
* for dynamic channel registration.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Supported notification channels
|
|
10
|
+
*/
|
|
11
|
+
export type NotificationChannel = "email" | "sms" | "whatsapp" | "push" | string;
|
|
12
|
+
/**
|
|
13
|
+
* Base notification message interface
|
|
14
|
+
* All notification types must extend this
|
|
15
|
+
*/
|
|
16
|
+
export interface NotificationMessage {
|
|
17
|
+
/** Channel identifier */
|
|
18
|
+
channel: NotificationChannel;
|
|
19
|
+
/** Recipient identifier (email, phone, device ID, etc) */
|
|
20
|
+
recipient: string;
|
|
21
|
+
/** Optional metadata */
|
|
22
|
+
metadata?: Record<string, unknown>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Reference to a template file with rendering data.
|
|
26
|
+
* Used in message fields that support template rendering.
|
|
27
|
+
* The NotificationService will resolve this to a rendered string before sending.
|
|
28
|
+
*/
|
|
29
|
+
export interface TemplateRef {
|
|
30
|
+
/** Template identifier (path without extension, e.g. "emails/welcome") */
|
|
31
|
+
templateId: string;
|
|
32
|
+
/** Data to pass to the template renderer */
|
|
33
|
+
data: Record<string, unknown>;
|
|
34
|
+
/** Optional variant override (e.g. "email", "sms"). Auto-detected from channel if omitted. */
|
|
35
|
+
variant?: string;
|
|
36
|
+
/** Output format: "html" or "text". Defaults based on field context. */
|
|
37
|
+
outputFormat?: "html" | "text";
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Type guard for TemplateRef
|
|
41
|
+
*/
|
|
42
|
+
export declare function isTemplateRef(value: unknown): value is TemplateRef;
|
|
43
|
+
export interface EmailRecipient {
|
|
44
|
+
name?: string;
|
|
45
|
+
email: string;
|
|
46
|
+
}
|
|
47
|
+
export type EmailRecipients = string | EmailRecipient | (string | EmailRecipient)[];
|
|
48
|
+
export interface EmailAttachment {
|
|
49
|
+
filename: string;
|
|
50
|
+
content: string | Buffer;
|
|
51
|
+
contentType?: string;
|
|
52
|
+
encoding?: string;
|
|
53
|
+
contentDisposition?: "attachment" | "inline";
|
|
54
|
+
cid?: string;
|
|
55
|
+
}
|
|
56
|
+
export interface EmailMessage extends NotificationMessage {
|
|
57
|
+
channel: "email";
|
|
58
|
+
recipient: string;
|
|
59
|
+
subject: string;
|
|
60
|
+
html?: string | TemplateRef;
|
|
61
|
+
text?: string | TemplateRef;
|
|
62
|
+
cc?: EmailRecipients;
|
|
63
|
+
bcc?: EmailRecipients;
|
|
64
|
+
replyTo?: string;
|
|
65
|
+
from?: string;
|
|
66
|
+
attachments?: EmailAttachment[];
|
|
67
|
+
headers?: Record<string, string>;
|
|
68
|
+
messageId?: string;
|
|
69
|
+
references?: string[];
|
|
70
|
+
inReplyTo?: string;
|
|
71
|
+
tags?: string[];
|
|
72
|
+
priority?: "high" | "normal" | "low";
|
|
73
|
+
scheduledAt?: Date;
|
|
74
|
+
}
|
|
75
|
+
export interface SMSMessage extends NotificationMessage {
|
|
76
|
+
channel: "sms";
|
|
77
|
+
recipient: string;
|
|
78
|
+
message: string | TemplateRef;
|
|
79
|
+
senderId?: string;
|
|
80
|
+
scheduledAt?: Date;
|
|
81
|
+
}
|
|
82
|
+
export interface WhatsAppMessage extends NotificationMessage {
|
|
83
|
+
channel: "whatsapp";
|
|
84
|
+
recipient: string;
|
|
85
|
+
templateId: string;
|
|
86
|
+
parameters?: Record<string, string>;
|
|
87
|
+
mediaUrl?: string;
|
|
88
|
+
}
|
|
89
|
+
export interface PushNotificationMessage extends NotificationMessage {
|
|
90
|
+
channel: "push";
|
|
91
|
+
recipient: string;
|
|
92
|
+
title: string | TemplateRef;
|
|
93
|
+
body: string | TemplateRef;
|
|
94
|
+
actionUrl?: string;
|
|
95
|
+
imageUrl?: string;
|
|
96
|
+
data?: Record<string, unknown>;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Union of all built-in notification types
|
|
100
|
+
*/
|
|
101
|
+
export type BuiltInNotification = EmailMessage | SMSMessage | WhatsAppMessage | PushNotificationMessage;
|
|
102
|
+
/**
|
|
103
|
+
* Interface for composable notification messages
|
|
104
|
+
* Implement this interface to create reusable notification templates
|
|
105
|
+
*/
|
|
106
|
+
export interface Notifiable {
|
|
107
|
+
/**
|
|
108
|
+
* Build notification message(s)
|
|
109
|
+
* Can return single message or array of messages for multi-channel
|
|
110
|
+
* @returns NotificationMessage or Promise<NotificationMessage>
|
|
111
|
+
*/
|
|
112
|
+
build(channel?: NotificationChannel): NotificationMessage | Promise<NotificationMessage>;
|
|
113
|
+
/**
|
|
114
|
+
* Optional: Build multiple channel notifications at once
|
|
115
|
+
*/
|
|
116
|
+
buildAll?(): Record<NotificationChannel, NotificationMessage | Promise<NotificationMessage>>;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Health status for channel services
|
|
120
|
+
*/
|
|
121
|
+
export interface ChannelHealth {
|
|
122
|
+
status: "healthy" | "degraded" | "unhealthy";
|
|
123
|
+
message: string;
|
|
124
|
+
checkedAt: Date;
|
|
125
|
+
error?: string;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Base interface for all channel services
|
|
129
|
+
*/
|
|
130
|
+
export interface ChannelService<T extends NotificationMessage = NotificationMessage> {
|
|
131
|
+
/** Channel name/identifier */
|
|
132
|
+
readonly name: NotificationChannel;
|
|
133
|
+
/** Configuration schema validator (optional) */
|
|
134
|
+
readonly configSchema?: StandardSchema;
|
|
135
|
+
/**
|
|
136
|
+
* Validate message structure at runtime
|
|
137
|
+
* Should throw if message is invalid
|
|
138
|
+
*/
|
|
139
|
+
validate(message: unknown): asserts message is T;
|
|
140
|
+
/**
|
|
141
|
+
* Send a notification message
|
|
142
|
+
* @returns Message ID or undefined if not trackable
|
|
143
|
+
*/
|
|
144
|
+
send(message: T): Promise<string | undefined>;
|
|
145
|
+
/**
|
|
146
|
+
* Get channel health status
|
|
147
|
+
*/
|
|
148
|
+
getHealth?(): Promise<ChannelHealth>;
|
|
149
|
+
/**
|
|
150
|
+
* Get channel metrics (optional)
|
|
151
|
+
*/
|
|
152
|
+
getMetrics?(): Promise<ChannelMetrics>;
|
|
153
|
+
}
|
|
154
|
+
export interface BaseChannelConfig {
|
|
155
|
+
/** Enable this channel */
|
|
156
|
+
enabled?: boolean;
|
|
157
|
+
/** Dry-run mode (log instead of sending) */
|
|
158
|
+
dryRun?: boolean;
|
|
159
|
+
/** Enable metrics collection */
|
|
160
|
+
enableMetrics?: boolean;
|
|
161
|
+
}
|
|
162
|
+
export interface EmailChannelConfig extends BaseChannelConfig {
|
|
163
|
+
driver: "smtp" | "sendgrid" | "brevo" | "resend";
|
|
164
|
+
from: string;
|
|
165
|
+
fromName?: string;
|
|
166
|
+
smtp?: {
|
|
167
|
+
host: string;
|
|
168
|
+
port: number;
|
|
169
|
+
secure?: boolean;
|
|
170
|
+
username?: string;
|
|
171
|
+
password?: string;
|
|
172
|
+
};
|
|
173
|
+
apiKey?: string;
|
|
174
|
+
}
|
|
175
|
+
export interface SMSChannelConfig extends BaseChannelConfig {
|
|
176
|
+
driver: "twilio" | "aws-sns" | "custom";
|
|
177
|
+
accountSid?: string;
|
|
178
|
+
authToken?: string;
|
|
179
|
+
fromNumber?: string;
|
|
180
|
+
apiKey?: string;
|
|
181
|
+
}
|
|
182
|
+
export interface WhatsAppChannelConfig extends BaseChannelConfig {
|
|
183
|
+
driver: "twilio" | "custom";
|
|
184
|
+
accountSid?: string;
|
|
185
|
+
authToken?: string;
|
|
186
|
+
businessPhoneNumber?: string;
|
|
187
|
+
apiKey?: string;
|
|
188
|
+
}
|
|
189
|
+
export interface PushChannelConfig extends BaseChannelConfig {
|
|
190
|
+
driver: "firebase" | "apns" | "custom";
|
|
191
|
+
serverKey?: string;
|
|
192
|
+
certificatePath?: string;
|
|
193
|
+
apiKey?: string;
|
|
194
|
+
}
|
|
195
|
+
export type ChannelConfig = EmailChannelConfig | SMSChannelConfig | WhatsAppChannelConfig | PushChannelConfig | Record<string, unknown>;
|
|
196
|
+
export interface NotificationServiceConfig {
|
|
197
|
+
/** Channels configuration */
|
|
198
|
+
channels?: Record<NotificationChannel, ChannelConfig>;
|
|
199
|
+
/** Default channel for sending */
|
|
200
|
+
defaultChannel?: NotificationChannel;
|
|
201
|
+
/** Queue system for async sending */
|
|
202
|
+
queue?: boolean;
|
|
203
|
+
/** Enable metrics collection */
|
|
204
|
+
enableMetrics?: boolean;
|
|
205
|
+
/** Optional template engine for rendering TemplateRef fields */
|
|
206
|
+
templateEngine?: import("../templates/engine").TemplateEngine;
|
|
207
|
+
}
|
|
208
|
+
export interface ChannelMetrics {
|
|
209
|
+
/** Total messages sent */
|
|
210
|
+
sent: number;
|
|
211
|
+
/** Total messages failed */
|
|
212
|
+
failed: number;
|
|
213
|
+
/** Successful send rate (0-1) */
|
|
214
|
+
successRate: number;
|
|
215
|
+
/** Average send time in ms */
|
|
216
|
+
avgSendTime: number;
|
|
217
|
+
/** Total time spent sending */
|
|
218
|
+
totalSendTime: number;
|
|
219
|
+
/** Last updated timestamp */
|
|
220
|
+
updatedAt: Date;
|
|
221
|
+
}
|
|
222
|
+
export type NotificationEventType = "notification.sent" | "notification.failed" | "notification.queued" | "notification.bounced" | "notification.delivered";
|
|
223
|
+
export interface NotificationEvent {
|
|
224
|
+
type: NotificationEventType;
|
|
225
|
+
channel: NotificationChannel;
|
|
226
|
+
messageId?: string;
|
|
227
|
+
recipient?: string;
|
|
228
|
+
timestamp: Date;
|
|
229
|
+
data?: Record<string, unknown>;
|
|
230
|
+
}
|
|
231
|
+
export interface NotificationValidationResult {
|
|
232
|
+
valid: boolean;
|
|
233
|
+
errors: string[];
|
|
234
|
+
warnings: string[];
|
|
235
|
+
}
|
|
236
|
+
export interface StandardSchema<T = unknown> {
|
|
237
|
+
"~standard": {
|
|
238
|
+
version: number;
|
|
239
|
+
types?: {
|
|
240
|
+
input: unknown;
|
|
241
|
+
output: T;
|
|
242
|
+
};
|
|
243
|
+
validate: (value: unknown) => Promise<{
|
|
244
|
+
issues?: Array<{
|
|
245
|
+
message: string;
|
|
246
|
+
path?: Array<PropertyKey | {
|
|
247
|
+
key: PropertyKey;
|
|
248
|
+
}>;
|
|
249
|
+
}>;
|
|
250
|
+
}>;
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/notification/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observability.test.d.ts","sourceRoot":"","sources":["../../../src/observability/__tests__/observability.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Breadcrumb Collector
|
|
3
|
+
*
|
|
4
|
+
* Ring-buffer implementation for tracking recent events leading up to an error.
|
|
5
|
+
* When the buffer is full, the oldest entry is evicted to make room for new ones.
|
|
6
|
+
*/
|
|
7
|
+
import type { BreadcrumbEntry } from "./types";
|
|
8
|
+
/**
|
|
9
|
+
* Fixed-size ring buffer for breadcrumb entries.
|
|
10
|
+
* Thread-safe for single-threaded Bun environments.
|
|
11
|
+
*/
|
|
12
|
+
export declare class BreadcrumbCollector {
|
|
13
|
+
private readonly _buffer;
|
|
14
|
+
private readonly _maxSize;
|
|
15
|
+
private _head;
|
|
16
|
+
private _size;
|
|
17
|
+
constructor(maxSize?: number);
|
|
18
|
+
/**
|
|
19
|
+
* Add a breadcrumb to the ring buffer.
|
|
20
|
+
* If the buffer is full, the oldest entry is evicted.
|
|
21
|
+
*/
|
|
22
|
+
add(entry: BreadcrumbEntry): void;
|
|
23
|
+
/**
|
|
24
|
+
* Return all breadcrumbs in chronological order (oldest first).
|
|
25
|
+
*/
|
|
26
|
+
getAll(): BreadcrumbEntry[];
|
|
27
|
+
/**
|
|
28
|
+
* Clear all breadcrumbs.
|
|
29
|
+
*/
|
|
30
|
+
clear(): void;
|
|
31
|
+
/**
|
|
32
|
+
* Current number of stored breadcrumbs.
|
|
33
|
+
*/
|
|
34
|
+
get size(): number;
|
|
35
|
+
/**
|
|
36
|
+
* Maximum capacity of this collector.
|
|
37
|
+
*/
|
|
38
|
+
get maxSize(): number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Convenience helper to build a breadcrumb entry from HTTP request info.
|
|
42
|
+
*/
|
|
43
|
+
export declare function httpBreadcrumb(method: string, path: string, statusCode?: number, durationMs?: number): BreadcrumbEntry;
|
|
44
|
+
/**
|
|
45
|
+
* Convenience helper to build a log breadcrumb.
|
|
46
|
+
*/
|
|
47
|
+
export declare function logBreadcrumb(level: BreadcrumbEntry["level"], message: string, data?: Record<string, unknown>): BreadcrumbEntry;
|
|
48
|
+
//# sourceMappingURL=breadcrumbs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breadcrumbs.d.ts","sourceRoot":"","sources":["../../src/observability/breadcrumbs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C;;;GAGG;AACH,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,KAAK,CAAK;IAClB,OAAO,CAAC,KAAK,CAAK;gBAEN,OAAO,SAAK;IAMxB;;;OAGG;IACH,GAAG,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAYjC;;OAEG;IACH,MAAM,IAAI,eAAe,EAAE;IAQ3B;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,CAEpB;CACD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC7B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,MAAM,GACjB,eAAe,CAajB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC5B,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,EAC/B,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,eAAe,CAQjB"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Observability Module
|
|
3
|
+
*
|
|
4
|
+
* Provides structured error tracking and observability integration for Bueno.
|
|
5
|
+
* Implement ErrorReporter to send events to Sentry, Bugsnag, Datadog, or any
|
|
6
|
+
* custom backend — zero SDK dependencies shipped by the framework.
|
|
7
|
+
*
|
|
8
|
+
* ## Quick Start
|
|
9
|
+
*
|
|
10
|
+
* ```typescript
|
|
11
|
+
* import { createApp } from '@buenojs/bueno';
|
|
12
|
+
* import { ObservabilityModule } from '@buenojs/bueno/observability';
|
|
13
|
+
*
|
|
14
|
+
* const app = createApp(AppModule);
|
|
15
|
+
*
|
|
16
|
+
* // Wire everything with a single call
|
|
17
|
+
* const obs = ObservabilityModule.setup(app, {
|
|
18
|
+
* reporter: new MyReporter(),
|
|
19
|
+
* breadcrumbsSize: 20,
|
|
20
|
+
* ignoreStatusCodes: [404, 401],
|
|
21
|
+
* tags: { environment: 'production' },
|
|
22
|
+
* });
|
|
23
|
+
*
|
|
24
|
+
* await app.listen(3000);
|
|
25
|
+
* ```
|
|
26
|
+
*
|
|
27
|
+
* ## Writing a reporter (Sentry example)
|
|
28
|
+
*
|
|
29
|
+
* ```typescript
|
|
30
|
+
* import * as Sentry from '@sentry/node';
|
|
31
|
+
* import type { ErrorReporter, ErrorEvent } from '@buenojs/bueno/observability';
|
|
32
|
+
*
|
|
33
|
+
* class SentryReporter implements ErrorReporter {
|
|
34
|
+
* constructor(dsn: string) { Sentry.init({ dsn }); }
|
|
35
|
+
*
|
|
36
|
+
* captureError(event: ErrorEvent) {
|
|
37
|
+
* Sentry.withScope(scope => {
|
|
38
|
+
* if (event.user) scope.setUser(event.user);
|
|
39
|
+
* if (event.traceId) scope.setTag('traceId', event.traceId);
|
|
40
|
+
* event.breadcrumbs.forEach(b => scope.addBreadcrumb(b));
|
|
41
|
+
* Sentry.captureException(event.error);
|
|
42
|
+
* });
|
|
43
|
+
* }
|
|
44
|
+
*
|
|
45
|
+
* async flush() { await Sentry.flush(2000); }
|
|
46
|
+
* }
|
|
47
|
+
*
|
|
48
|
+
* ObservabilityModule.setup(app, {
|
|
49
|
+
* reporter: new SentryReporter(process.env.SENTRY_DSN),
|
|
50
|
+
* });
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
import type { Application } from "../modules";
|
|
54
|
+
import { ObservabilityService } from "./service";
|
|
55
|
+
import type { ObservabilityOptions } from "./types";
|
|
56
|
+
/**
|
|
57
|
+
* Static module class for configuring observability.
|
|
58
|
+
* Use `ObservabilityModule.setup(app, options)` for the simplest setup.
|
|
59
|
+
*/
|
|
60
|
+
export declare class ObservabilityModule {
|
|
61
|
+
/**
|
|
62
|
+
* One-call setup: creates the ObservabilityService, registers the global
|
|
63
|
+
* interceptor for trace ID injection and breadcrumb tracking, and wires
|
|
64
|
+
* process-level shutdown flush.
|
|
65
|
+
*
|
|
66
|
+
* Call this before `app.listen()`.
|
|
67
|
+
*
|
|
68
|
+
* @param app - The Bueno Application instance (from `createApp()`)
|
|
69
|
+
* @param options - Observability configuration including the reporter
|
|
70
|
+
* @returns The ObservabilityService — use for manual captureError / addBreadcrumb
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* const obs = ObservabilityModule.setup(app, {
|
|
75
|
+
* reporter: new SentryReporter(process.env.SENTRY_DSN),
|
|
76
|
+
* ignoreStatusCodes: [404, 401],
|
|
77
|
+
* tags: { environment: 'production', version: '1.2.3' },
|
|
78
|
+
* });
|
|
79
|
+
*
|
|
80
|
+
* // Later, in a background job:
|
|
81
|
+
* obs.captureError(new Error('Job failed'));
|
|
82
|
+
*
|
|
83
|
+
* // Add a manual breadcrumb:
|
|
84
|
+
* obs.addBreadcrumb({ type: 'custom', level: 'info', message: 'Checkout started' });
|
|
85
|
+
* ```
|
|
86
|
+
*/
|
|
87
|
+
static setup(app: Application, options: ObservabilityOptions): ObservabilityService;
|
|
88
|
+
}
|
|
89
|
+
export type { BreadcrumbEntry, ErrorEvent, ErrorRequestContext, ErrorUserContext, MessageEvent, ErrorReporter, ObservabilityOptions, ObservabilityConfig, } from "./types";
|
|
90
|
+
export { ObservabilityService } from "./service";
|
|
91
|
+
export { extractTraceContext } from "./service";
|
|
92
|
+
export { ObservabilityInterceptor } from "./interceptor";
|
|
93
|
+
export { BreadcrumbCollector, httpBreadcrumb, logBreadcrumb, } from "./breadcrumbs";
|
|
94
|
+
export { generateTraceId, generateSpanId, buildTraceparent } from "./trace";
|
|
95
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAEjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAEpD;;;GAGG;AACH,qBAAa,mBAAmB;IAC/B;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACH,MAAM,CAAC,KAAK,CACX,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,oBAAoB,GAC3B,oBAAoB;CAYvB;AAKD,YAAY,EACX,eAAe,EACf,UAAU,EACV,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,mBAAmB,GACnB,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAGhD,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAGzD,OAAO,EACN,mBAAmB,EACnB,cAAc,EACd,aAAa,GACb,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObservabilityInterceptor
|
|
3
|
+
*
|
|
4
|
+
* Global interceptor that enriches every request with:
|
|
5
|
+
* 1. Trace/span IDs — extracted from W3C `traceparent` header or generated fresh
|
|
6
|
+
* 2. Breadcrumbs — records request entry and exit (with status + duration)
|
|
7
|
+
* 3. Error capture — calls ObservabilityService when a route handler throws
|
|
8
|
+
*
|
|
9
|
+
* Register via ObservabilityModule.setup() (done automatically).
|
|
10
|
+
*/
|
|
11
|
+
import type { Context } from "../context";
|
|
12
|
+
import type { CallHandler, NestInterceptor } from "../modules";
|
|
13
|
+
import type { ObservabilityService } from "./service";
|
|
14
|
+
export declare class ObservabilityInterceptor implements NestInterceptor {
|
|
15
|
+
private readonly service;
|
|
16
|
+
constructor(service: ObservabilityService);
|
|
17
|
+
intercept(context: Context, next: CallHandler): Promise<unknown>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=interceptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interceptor.d.ts","sourceRoot":"","sources":["../../src/observability/interceptor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AAkBtD,qBAAa,wBAAyB,YAAW,eAAe;IACnD,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,oBAAoB;IAEpD,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;CAgDtE"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ObservabilityService
|
|
3
|
+
*
|
|
4
|
+
* Central service that assembles ErrorEvents and dispatches them to the
|
|
5
|
+
* configured ErrorReporter. Error capture happens through the
|
|
6
|
+
* ObservabilityInterceptor which calls captureFromContext() directly.
|
|
7
|
+
*
|
|
8
|
+
* Exposes addBreadcrumb() and captureError() for manual instrumentation
|
|
9
|
+
* throughout the application.
|
|
10
|
+
*/
|
|
11
|
+
import type { Context } from "../context";
|
|
12
|
+
import { BreadcrumbCollector } from "./breadcrumbs";
|
|
13
|
+
import type { BreadcrumbEntry, ErrorEvent, MessageEvent, ObservabilityOptions } from "./types";
|
|
14
|
+
/**
|
|
15
|
+
* ObservabilityService manages error reporting and breadcrumb tracking.
|
|
16
|
+
*
|
|
17
|
+
* Use ObservabilityModule.setup(app, options) to wire it to the application,
|
|
18
|
+
* or instantiate directly for contexts where the full module isn't needed.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* // Via ObservabilityModule (recommended):
|
|
23
|
+
* const obs = ObservabilityModule.setup(app, {
|
|
24
|
+
* reporter: new SentryReporter(),
|
|
25
|
+
* });
|
|
26
|
+
*
|
|
27
|
+
* // Manual breadcrumb:
|
|
28
|
+
* obs.addBreadcrumb({
|
|
29
|
+
* type: 'custom',
|
|
30
|
+
* level: 'info',
|
|
31
|
+
* message: 'User completed checkout',
|
|
32
|
+
* data: { orderId: '123' }
|
|
33
|
+
* });
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare class ObservabilityService {
|
|
37
|
+
private readonly reporter;
|
|
38
|
+
private readonly breadcrumbs;
|
|
39
|
+
private readonly options;
|
|
40
|
+
constructor(options: ObservabilityOptions);
|
|
41
|
+
/**
|
|
42
|
+
* Called by ObservabilityInterceptor when an HTTP route throws.
|
|
43
|
+
* Assembles a full ErrorEvent with request context and dispatches it.
|
|
44
|
+
* Non-blocking — never delays the HTTP response.
|
|
45
|
+
*/
|
|
46
|
+
captureFromContext(context: Context, error: Error): void;
|
|
47
|
+
/**
|
|
48
|
+
* Register flush on process shutdown.
|
|
49
|
+
* Called automatically by ObservabilityModule.setup().
|
|
50
|
+
*/
|
|
51
|
+
registerShutdown(): void;
|
|
52
|
+
/**
|
|
53
|
+
* Manually capture an error outside the HTTP pipeline.
|
|
54
|
+
* Useful inside background jobs, event listeners, scheduled tasks.
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* obs.captureError(new Error('Payment failed'), 'error');
|
|
58
|
+
*/
|
|
59
|
+
captureError(error: Error, level?: ErrorEvent["level"]): void;
|
|
60
|
+
/**
|
|
61
|
+
* Manually capture a non-error message.
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* obs.captureMessage('Deployment completed', 'info', { version: '2.0.0' });
|
|
65
|
+
*/
|
|
66
|
+
captureMessage(message: string, level?: MessageEvent["level"], extra?: Record<string, unknown>): void;
|
|
67
|
+
/**
|
|
68
|
+
* Add a breadcrumb to the ring buffer.
|
|
69
|
+
* Breadcrumbs recorded here are included in the next error event.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* obs.addBreadcrumb({
|
|
73
|
+
* type: 'custom',
|
|
74
|
+
* level: 'info',
|
|
75
|
+
* message: 'Fetched user from database',
|
|
76
|
+
* data: { userId: 42 }
|
|
77
|
+
* });
|
|
78
|
+
*/
|
|
79
|
+
addBreadcrumb(entry: Omit<BreadcrumbEntry, "timestamp"> & {
|
|
80
|
+
timestamp?: Date;
|
|
81
|
+
}): void;
|
|
82
|
+
/**
|
|
83
|
+
* Access the underlying BreadcrumbCollector.
|
|
84
|
+
* Used internally by ObservabilityInterceptor.
|
|
85
|
+
*/
|
|
86
|
+
getBreadcrumbCollector(): BreadcrumbCollector;
|
|
87
|
+
private assembleEvent;
|
|
88
|
+
private shouldIgnore;
|
|
89
|
+
private dispatchAsync;
|
|
90
|
+
private dispatchMessageAsync;
|
|
91
|
+
private setupUnhandledCapture;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Extract traceId and spanId from the W3C traceparent header.
|
|
95
|
+
* Format: 00-<traceId>-<spanId>-<flags>
|
|
96
|
+
*/
|
|
97
|
+
export declare function extractTraceContext(context: Context): {
|
|
98
|
+
traceId?: string;
|
|
99
|
+
spanId?: string;
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/observability/service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAkB,MAAM,eAAe,CAAC;AACpE,OAAO,KAAK,EACX,eAAe,EACf,UAAU,EAGV,YAAY,EACZ,oBAAoB,EACpB,MAAM,SAAS,CAAC;AAoCjB;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,oBAAoB;IAChC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAsB;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAMtB;gBAEU,OAAO,EAAE,oBAAoB;IAkBzC;;;;OAIG;IACH,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAYxD;;;OAGG;IACH,gBAAgB,IAAI,IAAI;IAkBxB;;;;;;OAMG;IACH,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,GAAE,UAAU,CAAC,OAAO,CAAW,GAAG,IAAI;IAMtE;;;;;OAKG;IACH,cAAc,CACb,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,YAAY,CAAC,OAAO,CAAU,EACrC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,IAAI;IAYP;;;;;;;;;;;OAWG;IACH,aAAa,CACZ,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,GAAG;QAAE,SAAS,CAAC,EAAE,IAAI,CAAA;KAAE,GAC9D,IAAI;IAOP;;;OAGG;IACH,sBAAsB,IAAI,mBAAmB;IAM7C,OAAO,CAAC,aAAa;IA+BrB,OAAO,CAAC,YAAY;IAapB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,oBAAoB;IAU5B,OAAO,CAAC,qBAAqB;CAa7B;AAID;;;GAGG;AACH,wBAAgB,mBAAmB,CAClC,OAAO,EAAE,OAAO,GACd;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAMvC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Trace ID generation helpers
|
|
3
|
+
*
|
|
4
|
+
* Generates W3C TraceContext-compatible IDs using the Web Crypto API.
|
|
5
|
+
* These are intentionally kept separate from src/telemetry to avoid
|
|
6
|
+
* coupling the observability module to the OTLP tracing module.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Generate a W3C-compatible trace ID (32 hex characters / 16 bytes)
|
|
10
|
+
*/
|
|
11
|
+
export declare function generateTraceId(): string;
|
|
12
|
+
/**
|
|
13
|
+
* Generate a W3C-compatible span ID (16 hex characters / 8 bytes)
|
|
14
|
+
*/
|
|
15
|
+
export declare function generateSpanId(): string;
|
|
16
|
+
/**
|
|
17
|
+
* Build a W3C `traceparent` header value from traceId + spanId.
|
|
18
|
+
* Format: 00-<traceId>-<spanId>-01
|
|
19
|
+
*/
|
|
20
|
+
export declare function buildTraceparent(traceId: string, spanId: string): string;
|
|
21
|
+
//# sourceMappingURL=trace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/observability/trace.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAMxC;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAMvC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAExE"}
|