@decaf-ts/for-nest 0.12.0 → 0.12.2-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 +30 -4
- package/dist/for-nest.cjs +2610 -2
- package/dist/for-nest.js +2723 -2
- package/lib/cjs/auth/AuthInterceptor.cjs +5 -13
- package/lib/cjs/auth/AuthMiddleware.cjs +51 -0
- package/lib/cjs/auth/DecafAuthHandler.cjs +10 -5
- package/lib/cjs/auth/DecafAuthModule.cjs +8 -3
- package/lib/cjs/auth/constants.cjs +5 -3
- package/lib/cjs/auth/decorators.cjs +6 -2
- package/lib/cjs/auth/index.cjs +3 -2
- package/lib/cjs/bin/cli.cjs +2 -2
- package/lib/cjs/cli-module.cjs +2 -2
- package/lib/cjs/constants.cjs +2 -2
- package/lib/cjs/controllers.cjs +2 -2
- package/lib/cjs/core-module.cjs +2 -2
- package/lib/cjs/decaf-model/DecafModelModule.cjs +2 -2
- package/lib/cjs/decaf-model/FromModelController.cjs +8 -2
- package/lib/cjs/decaf-model/decorators/ApiOperationFromModel.cjs +2 -2
- package/lib/cjs/decaf-model/decorators/ApiParamsFromModel.cjs +2 -2
- package/lib/cjs/decaf-model/decorators/DecafBody.cjs +2 -2
- package/lib/cjs/decaf-model/decorators/DecafParams.cjs +2 -2
- package/lib/cjs/decaf-model/decorators/controller-config.cjs +2 -2
- package/lib/cjs/decaf-model/decorators/decorators.cjs +2 -2
- package/lib/cjs/decaf-model/decorators/expose.cjs +2 -2
- package/lib/cjs/decaf-model/decorators/index.cjs +2 -2
- package/lib/cjs/decaf-model/decorators/types.cjs +2 -2
- package/lib/cjs/decaf-model/decorators/utils.cjs +2 -2
- package/lib/cjs/decaf-model/index.cjs +2 -2
- package/lib/cjs/decaf-model/types.cjs +2 -2
- package/lib/cjs/decaf-model/utils.cjs +2 -2
- package/lib/cjs/decoration.cjs +2 -2
- package/lib/cjs/decorators.cjs +2 -2
- package/lib/cjs/events-module/DecafStreamModule.cjs +15 -4
- package/lib/cjs/events-module/EventsController.cjs +30 -7
- package/lib/cjs/events-module/EventsSubscriptionController.cjs +81 -0
- package/lib/cjs/events-module/ObserverSubscriptionRegistry.cjs +51 -0
- package/lib/cjs/events-module/constant.cjs +4 -3
- package/lib/cjs/events-module/index.cjs +5 -2
- package/lib/cjs/events-module/utils.cjs +2 -2
- package/lib/cjs/factory/NestBootstraper.cjs +2 -2
- package/lib/cjs/factory/errors/cors.cjs +2 -2
- package/lib/cjs/factory/errors/index.cjs +2 -2
- package/lib/cjs/factory/errors/throttling.cjs +2 -2
- package/lib/cjs/factory/exceptions/DecafErrorFilter.cjs +2 -2
- package/lib/cjs/factory/exceptions/decorators.cjs +2 -2
- package/lib/cjs/factory/exceptions/index.cjs +2 -2
- package/lib/cjs/factory/index.cjs +2 -2
- package/lib/cjs/factory/openapi/DtoBuilder.cjs +2 -2
- package/lib/cjs/factory/openapi/SwaggerBuilder.cjs +2 -2
- package/lib/cjs/factory/openapi/SwaggerCustomUI.cjs +2 -2
- package/lib/cjs/factory/openapi/constants.cjs +2 -2
- package/lib/cjs/factory/openapi/index.cjs +2 -2
- package/lib/cjs/index.cjs +5 -5
- package/lib/cjs/interceptors/DecafRequestHandlerInterceptor.cjs +5 -33
- package/lib/cjs/interceptors/index.cjs +2 -2
- package/lib/cjs/module.cjs +3 -3
- package/lib/cjs/overrides/Adapter.cjs +2 -2
- package/lib/cjs/overrides/ModelBuilderExtensions.cjs +2 -2
- package/lib/cjs/overrides/constants.cjs +2 -2
- package/lib/cjs/overrides/decoration.cjs +2 -2
- package/lib/cjs/overrides/helpers.cjs +2 -2
- package/lib/cjs/overrides/index.cjs +2 -2
- package/lib/cjs/overrides/logging.cjs +2 -2
- package/lib/cjs/overrides/overrides.cjs +2 -2
- package/lib/cjs/request/DecafAuthHandler.cjs +2 -2
- package/lib/cjs/request/DecafHandlerExecutor.cjs +2 -2
- package/lib/cjs/request/DecafRequestContext.cjs +2 -2
- package/lib/cjs/request/DecafResponseInterceptor.cjs +2 -2
- package/lib/cjs/request/contextualize.cjs +46 -0
- package/lib/cjs/request/index.cjs +3 -2
- package/lib/cjs/swagger-types.cjs +2 -2
- package/lib/cjs/types.cjs +2 -2
- package/lib/cjs/utils.cjs +2 -2
- package/lib/cjs/webhooks/DecafWebhookModule.cjs +2 -2
- package/lib/cjs/webhooks/controllers.cjs +2 -2
- package/lib/cjs/webhooks/index.cjs +2 -2
- package/lib/cjs/webhooks/types.cjs +2 -2
- package/lib/esm/auth/AuthInterceptor.js +5 -13
- package/lib/esm/auth/AuthMiddleware.js +42 -0
- package/lib/esm/auth/DecafAuthHandler.js +9 -4
- package/lib/esm/auth/DecafAuthModule.js +8 -3
- package/lib/esm/auth/constants.js +3 -1
- package/lib/esm/auth/decorators.js +5 -2
- package/lib/esm/auth/index.js +2 -1
- package/lib/esm/bin/cli.js +1 -1
- package/lib/esm/cli-module.js +1 -1
- package/lib/esm/constants.js +1 -1
- package/lib/esm/controllers.js +1 -1
- package/lib/esm/core-module.js +1 -1
- package/lib/esm/decaf-model/DecafModelModule.js +1 -1
- package/lib/esm/decaf-model/FromModelController.js +9 -3
- package/lib/esm/decaf-model/decorators/ApiOperationFromModel.js +1 -1
- package/lib/esm/decaf-model/decorators/ApiParamsFromModel.js +1 -1
- package/lib/esm/decaf-model/decorators/DecafBody.js +1 -1
- package/lib/esm/decaf-model/decorators/DecafParams.js +1 -1
- package/lib/esm/decaf-model/decorators/controller-config.js +1 -1
- package/lib/esm/decaf-model/decorators/decorators.js +1 -1
- package/lib/esm/decaf-model/decorators/expose.js +1 -1
- package/lib/esm/decaf-model/decorators/index.js +1 -1
- package/lib/esm/decaf-model/decorators/types.js +1 -1
- package/lib/esm/decaf-model/decorators/utils.js +1 -1
- package/lib/esm/decaf-model/index.js +1 -1
- package/lib/esm/decaf-model/types.js +1 -1
- package/lib/esm/decaf-model/utils.js +1 -1
- package/lib/esm/decoration.js +1 -1
- package/lib/esm/decorators.js +1 -1
- package/lib/esm/events-module/DecafStreamModule.js +15 -4
- package/lib/esm/events-module/EventsController.js +31 -8
- package/lib/esm/events-module/EventsSubscriptionController.js +72 -0
- package/lib/esm/events-module/ObserverSubscriptionRegistry.js +43 -0
- package/lib/esm/events-module/constant.js +2 -1
- package/lib/esm/events-module/index.js +4 -1
- package/lib/esm/events-module/utils.js +1 -1
- package/lib/esm/factory/NestBootstraper.js +1 -1
- package/lib/esm/factory/errors/cors.js +1 -1
- package/lib/esm/factory/errors/index.js +1 -1
- package/lib/esm/factory/errors/throttling.js +1 -1
- package/lib/esm/factory/exceptions/DecafErrorFilter.js +1 -1
- package/lib/esm/factory/exceptions/decorators.js +1 -1
- package/lib/esm/factory/exceptions/index.js +1 -1
- package/lib/esm/factory/index.js +1 -1
- package/lib/esm/factory/openapi/DtoBuilder.js +1 -1
- package/lib/esm/factory/openapi/SwaggerBuilder.js +1 -1
- package/lib/esm/factory/openapi/SwaggerCustomUI.js +1 -1
- package/lib/esm/factory/openapi/constants.js +1 -1
- package/lib/esm/factory/openapi/index.js +1 -1
- package/lib/esm/index.js +4 -4
- package/lib/esm/interceptors/DecafRequestHandlerInterceptor.js +4 -32
- package/lib/esm/interceptors/index.js +1 -1
- package/lib/esm/module.js +2 -2
- package/lib/esm/overrides/Adapter.js +1 -1
- package/lib/esm/overrides/ModelBuilderExtensions.js +1 -1
- package/lib/esm/overrides/constants.js +1 -1
- package/lib/esm/overrides/decoration.js +1 -1
- package/lib/esm/overrides/helpers.js +1 -1
- package/lib/esm/overrides/index.js +1 -1
- package/lib/esm/overrides/logging.js +1 -1
- package/lib/esm/overrides/overrides.js +1 -1
- package/lib/esm/request/DecafAuthHandler.js +1 -1
- package/lib/esm/request/DecafHandlerExecutor.js +1 -1
- package/lib/esm/request/DecafRequestContext.js +1 -1
- package/lib/esm/request/DecafResponseInterceptor.js +1 -1
- package/lib/esm/request/contextualize.js +42 -0
- package/lib/esm/request/index.js +2 -1
- package/lib/esm/swagger-types.js +1 -1
- package/lib/esm/types.js +1 -1
- package/lib/esm/utils.js +1 -1
- package/lib/esm/webhooks/DecafWebhookModule.js +1 -1
- package/lib/esm/webhooks/controllers.js +1 -1
- package/lib/esm/webhooks/index.js +1 -1
- package/lib/esm/webhooks/types.js +1 -1
- package/lib/types/auth/AuthMiddleware.d.cts +9 -0
- package/lib/types/auth/AuthMiddleware.d.mts +9 -0
- package/lib/types/auth/DecafAuthHandler.d.cts +6 -4
- package/lib/types/auth/DecafAuthHandler.d.mts +6 -4
- package/lib/types/auth/DecafAuthModule.d.cts +3 -2
- package/lib/types/auth/DecafAuthModule.d.mts +3 -2
- package/lib/types/auth/constants.d.cts +2 -0
- package/lib/types/auth/constants.d.mts +2 -0
- package/lib/types/auth/decorators.d.cts +1 -0
- package/lib/types/auth/decorators.d.mts +1 -0
- package/lib/types/auth/index.d.cts +1 -0
- package/lib/types/auth/index.d.mts +1 -0
- package/lib/types/events-module/DecafStreamModule.d.cts +2 -1
- package/lib/types/events-module/DecafStreamModule.d.mts +2 -1
- package/lib/types/events-module/EventsController.d.cts +6 -2
- package/lib/types/events-module/EventsController.d.mts +6 -2
- package/lib/types/events-module/EventsSubscriptionController.d.cts +17 -0
- package/lib/types/events-module/EventsSubscriptionController.d.mts +17 -0
- package/lib/types/events-module/ObserverSubscriptionRegistry.d.cts +13 -0
- package/lib/types/events-module/ObserverSubscriptionRegistry.d.mts +13 -0
- package/lib/types/events-module/constant.d.cts +1 -0
- package/lib/types/events-module/constant.d.mts +1 -0
- package/lib/types/events-module/index.d.cts +3 -0
- package/lib/types/events-module/index.d.mts +3 -0
- package/lib/types/index.d.cts +3 -3
- package/lib/types/index.d.mts +3 -3
- package/lib/types/request/contextualize.d.cts +2 -0
- package/lib/types/request/contextualize.d.mts +2 -0
- package/lib/types/request/index.d.cts +1 -0
- package/lib/types/request/index.d.mts +1 -0
- package/lib/types/types.d.cts +7 -2
- package/lib/types/types.d.mts +7 -2
- package/package.json +1 -1
- package/dist/for-nest.cjs.map +0 -1
- package/dist/for-nest.js.map +0 -1
- package/lib/cjs/auth/AuthInterceptor.cjs.map +0 -1
- package/lib/cjs/auth/DecafAuthHandler.cjs.map +0 -1
- package/lib/cjs/auth/DecafAuthModule.cjs.map +0 -1
- package/lib/cjs/auth/constants.cjs.map +0 -1
- package/lib/cjs/auth/decorators.cjs.map +0 -1
- package/lib/cjs/auth/index.cjs.map +0 -1
- package/lib/cjs/bin/cli.cjs.map +0 -1
- package/lib/cjs/cli-module.cjs.map +0 -1
- package/lib/cjs/constants.cjs.map +0 -1
- package/lib/cjs/controllers.cjs.map +0 -1
- package/lib/cjs/core-module.cjs.map +0 -1
- package/lib/cjs/decaf-model/DecafModelModule.cjs.map +0 -1
- package/lib/cjs/decaf-model/FromModelController.cjs.map +0 -1
- package/lib/cjs/decaf-model/decorators/ApiOperationFromModel.cjs.map +0 -1
- package/lib/cjs/decaf-model/decorators/ApiParamsFromModel.cjs.map +0 -1
- package/lib/cjs/decaf-model/decorators/DecafBody.cjs.map +0 -1
- package/lib/cjs/decaf-model/decorators/DecafParams.cjs.map +0 -1
- package/lib/cjs/decaf-model/decorators/controller-config.cjs.map +0 -1
- package/lib/cjs/decaf-model/decorators/decorators.cjs.map +0 -1
- package/lib/cjs/decaf-model/decorators/expose.cjs.map +0 -1
- package/lib/cjs/decaf-model/decorators/index.cjs.map +0 -1
- package/lib/cjs/decaf-model/decorators/types.cjs.map +0 -1
- package/lib/cjs/decaf-model/decorators/utils.cjs.map +0 -1
- package/lib/cjs/decaf-model/index.cjs.map +0 -1
- package/lib/cjs/decaf-model/types.cjs.map +0 -1
- package/lib/cjs/decaf-model/utils.cjs.map +0 -1
- package/lib/cjs/decoration.cjs.map +0 -1
- package/lib/cjs/decorators.cjs.map +0 -1
- package/lib/cjs/events-module/DecafStreamModule.cjs.map +0 -1
- package/lib/cjs/events-module/EventsController.cjs.map +0 -1
- package/lib/cjs/events-module/constant.cjs.map +0 -1
- package/lib/cjs/events-module/index.cjs.map +0 -1
- package/lib/cjs/events-module/utils.cjs.map +0 -1
- package/lib/cjs/factory/NestBootstraper.cjs.map +0 -1
- package/lib/cjs/factory/errors/cors.cjs.map +0 -1
- package/lib/cjs/factory/errors/index.cjs.map +0 -1
- package/lib/cjs/factory/errors/throttling.cjs.map +0 -1
- package/lib/cjs/factory/exceptions/DecafErrorFilter.cjs.map +0 -1
- package/lib/cjs/factory/exceptions/decorators.cjs.map +0 -1
- package/lib/cjs/factory/exceptions/index.cjs.map +0 -1
- package/lib/cjs/factory/index.cjs.map +0 -1
- package/lib/cjs/factory/openapi/DtoBuilder.cjs.map +0 -1
- package/lib/cjs/factory/openapi/SwaggerBuilder.cjs.map +0 -1
- package/lib/cjs/factory/openapi/SwaggerCustomUI.cjs.map +0 -1
- package/lib/cjs/factory/openapi/constants.cjs.map +0 -1
- package/lib/cjs/factory/openapi/index.cjs.map +0 -1
- package/lib/cjs/index.cjs.map +0 -1
- package/lib/cjs/interceptors/DecafRequestHandlerInterceptor.cjs.map +0 -1
- package/lib/cjs/interceptors/index.cjs.map +0 -1
- package/lib/cjs/module.cjs.map +0 -1
- package/lib/cjs/overrides/Adapter.cjs.map +0 -1
- package/lib/cjs/overrides/ModelBuilderExtensions.cjs.map +0 -1
- package/lib/cjs/overrides/constants.cjs.map +0 -1
- package/lib/cjs/overrides/decoration.cjs.map +0 -1
- package/lib/cjs/overrides/helpers.cjs.map +0 -1
- package/lib/cjs/overrides/index.cjs.map +0 -1
- package/lib/cjs/overrides/logging.cjs.map +0 -1
- package/lib/cjs/overrides/overrides.cjs.map +0 -1
- package/lib/cjs/request/DecafAuthHandler.cjs.map +0 -1
- package/lib/cjs/request/DecafHandlerExecutor.cjs.map +0 -1
- package/lib/cjs/request/DecafRequestContext.cjs.map +0 -1
- package/lib/cjs/request/DecafResponseInterceptor.cjs.map +0 -1
- package/lib/cjs/request/index.cjs.map +0 -1
- package/lib/cjs/swagger-types.cjs.map +0 -1
- package/lib/cjs/types.cjs.map +0 -1
- package/lib/cjs/utils.cjs.map +0 -1
- package/lib/cjs/webhooks/DecafWebhookModule.cjs.map +0 -1
- package/lib/cjs/webhooks/controllers.cjs.map +0 -1
- package/lib/cjs/webhooks/index.cjs.map +0 -1
- package/lib/cjs/webhooks/types.cjs.map +0 -1
- package/lib/esm/auth/AuthInterceptor.js.map +0 -1
- package/lib/esm/auth/DecafAuthHandler.js.map +0 -1
- package/lib/esm/auth/DecafAuthModule.js.map +0 -1
- package/lib/esm/auth/constants.js.map +0 -1
- package/lib/esm/auth/decorators.js.map +0 -1
- package/lib/esm/auth/index.js.map +0 -1
- package/lib/esm/bin/cli.js.map +0 -1
- package/lib/esm/cli-module.js.map +0 -1
- package/lib/esm/constants.js.map +0 -1
- package/lib/esm/controllers.js.map +0 -1
- package/lib/esm/core-module.js.map +0 -1
- package/lib/esm/decaf-model/DecafModelModule.js.map +0 -1
- package/lib/esm/decaf-model/FromModelController.js.map +0 -1
- package/lib/esm/decaf-model/decorators/ApiOperationFromModel.js.map +0 -1
- package/lib/esm/decaf-model/decorators/ApiParamsFromModel.js.map +0 -1
- package/lib/esm/decaf-model/decorators/DecafBody.js.map +0 -1
- package/lib/esm/decaf-model/decorators/DecafParams.js.map +0 -1
- package/lib/esm/decaf-model/decorators/controller-config.js.map +0 -1
- package/lib/esm/decaf-model/decorators/decorators.js.map +0 -1
- package/lib/esm/decaf-model/decorators/expose.js.map +0 -1
- package/lib/esm/decaf-model/decorators/index.js.map +0 -1
- package/lib/esm/decaf-model/decorators/types.js.map +0 -1
- package/lib/esm/decaf-model/decorators/utils.js.map +0 -1
- package/lib/esm/decaf-model/index.js.map +0 -1
- package/lib/esm/decaf-model/types.js.map +0 -1
- package/lib/esm/decaf-model/utils.js.map +0 -1
- package/lib/esm/decoration.js.map +0 -1
- package/lib/esm/decorators.js.map +0 -1
- package/lib/esm/events-module/DecafStreamModule.js.map +0 -1
- package/lib/esm/events-module/EventsController.js.map +0 -1
- package/lib/esm/events-module/constant.js.map +0 -1
- package/lib/esm/events-module/index.js.map +0 -1
- package/lib/esm/events-module/utils.js.map +0 -1
- package/lib/esm/factory/NestBootstraper.js.map +0 -1
- package/lib/esm/factory/errors/cors.js.map +0 -1
- package/lib/esm/factory/errors/index.js.map +0 -1
- package/lib/esm/factory/errors/throttling.js.map +0 -1
- package/lib/esm/factory/exceptions/DecafErrorFilter.js.map +0 -1
- package/lib/esm/factory/exceptions/decorators.js.map +0 -1
- package/lib/esm/factory/exceptions/index.js.map +0 -1
- package/lib/esm/factory/index.js.map +0 -1
- package/lib/esm/factory/openapi/DtoBuilder.js.map +0 -1
- package/lib/esm/factory/openapi/SwaggerBuilder.js.map +0 -1
- package/lib/esm/factory/openapi/SwaggerCustomUI.js.map +0 -1
- package/lib/esm/factory/openapi/constants.js.map +0 -1
- package/lib/esm/factory/openapi/index.js.map +0 -1
- package/lib/esm/index.js.map +0 -1
- package/lib/esm/interceptors/DecafRequestHandlerInterceptor.js.map +0 -1
- package/lib/esm/interceptors/index.js.map +0 -1
- package/lib/esm/module.js.map +0 -1
- package/lib/esm/overrides/Adapter.js.map +0 -1
- package/lib/esm/overrides/ModelBuilderExtensions.js.map +0 -1
- package/lib/esm/overrides/constants.js.map +0 -1
- package/lib/esm/overrides/decoration.js.map +0 -1
- package/lib/esm/overrides/helpers.js.map +0 -1
- package/lib/esm/overrides/index.js.map +0 -1
- package/lib/esm/overrides/logging.js.map +0 -1
- package/lib/esm/overrides/overrides.js.map +0 -1
- package/lib/esm/request/DecafAuthHandler.js.map +0 -1
- package/lib/esm/request/DecafHandlerExecutor.js.map +0 -1
- package/lib/esm/request/DecafRequestContext.js.map +0 -1
- package/lib/esm/request/DecafResponseInterceptor.js.map +0 -1
- package/lib/esm/request/index.js.map +0 -1
- package/lib/esm/swagger-types.js.map +0 -1
- package/lib/esm/types.js.map +0 -1
- package/lib/esm/utils.js.map +0 -1
- package/lib/esm/webhooks/DecafWebhookModule.js.map +0 -1
- package/lib/esm/webhooks/controllers.js.map +0 -1
- package/lib/esm/webhooks/index.js.map +0 -1
- package/lib/esm/webhooks/types.js.map +0 -1
package/README.md
CHANGED
|
@@ -127,7 +127,9 @@ Applied at the **class level** to every auto-generated controller for that model
|
|
|
127
127
|
|---|---|---|---|
|
|
128
128
|
| `public` | `boolean` | `false` | When `true`, applies `@Public()` — the `AuthInterceptor` skips authorization entirely. |
|
|
129
129
|
| `roles` | `string[]` | — | When provided, applies `@RequireRoles(...roles)` — the auth handler validates the user has all listed roles. |
|
|
130
|
+
| `namespaces` | `string[]` | — | When provided, applies `@RequireNamespaces(...namespaces)` — the auth handler validates the user has all listed namespace scopes. |
|
|
130
131
|
| `skipModelRoles` | `boolean` | `false` | When `true`, sets `SKIP_MODEL_ROLES_KEY` metadata — the `AuthInterceptor` passes `undefined` as the model to `authHandler.authorize()`, so model-level `@roles()` checks are skipped. Route-level roles (if set) still apply. |
|
|
132
|
+
| `skipModelNamespaces` | `boolean` | `false` | When `true`, sets `SKIP_MODEL_NAMESPACES_KEY` metadata — the `AuthInterceptor` skips model-level `@namespace()` checks while still enforcing route-level namespaces. |
|
|
131
133
|
|
|
132
134
|
If `auth` is omitted, `@Auth(Model)` is applied by default (requires authentication + model-level role checks).
|
|
133
135
|
|
|
@@ -226,6 +228,16 @@ Requires the user to have all listed roles. Applies `ApiSecurity("bearer")`, `Se
|
|
|
226
228
|
update() {}
|
|
227
229
|
```
|
|
228
230
|
|
|
231
|
+
### `@RequireNamespaces(...namespaces)`
|
|
232
|
+
|
|
233
|
+
Namespace-scope counterpart to `@RequireRoles(...)`. Requires the user to have all listed namespace scopes. Applies `ApiSecurity("bearer")`, `SetMetadata(REQUIRED_NAMESPACES_KEY, namespaces)`, and `UseInterceptors(AuthInterceptor)`.
|
|
234
|
+
|
|
235
|
+
```ts
|
|
236
|
+
@RequireNamespaces("tenant:acme", "org:engineering")
|
|
237
|
+
@Get("tenant-data")
|
|
238
|
+
listTenantData() {}
|
|
239
|
+
```
|
|
240
|
+
|
|
229
241
|
### `@SkipFabricIdentity()` *(application-specific)*
|
|
230
242
|
|
|
231
243
|
Application-level decorator (e.g. in ew-backend) that sets metadata to skip Fabric identity re-enrollment for specific routes. Not part of `for-nest`.
|
|
@@ -242,7 +254,7 @@ Abstract base class from `@decaf-ts/for-http/server`. Concrete handlers extend i
|
|
|
242
254
|
|---|---|---|
|
|
243
255
|
| `extractFromAuth(ctx: EC): D \| Promise<D>` | Yes | Pulls auth data (user, roles, organization) from the platform execution context. MUST throw `AuthorizationError` when unauthenticated. |
|
|
244
256
|
| `bindToContext(ctx: C, data: D)` | Yes* | Binds auth data to the request context. Default implementation calls `ctx.accumulate(data)`. Override to add adapter-specific keys (e.g. `UUID`, `organization`). |
|
|
245
|
-
| `validate(data, routeRoles, model, ...args)` | No | Default validates route roles
|
|
257
|
+
| `validate(data, routeRoles, routeNamespaces, skipModelNamespaces, model, ...args)` | No | Default validates route roles, route namespaces, model-level roles, and model-level namespaces (from `@namespace()`). Override for custom logic. |
|
|
246
258
|
|
|
247
259
|
\* The default `bindToContext` exists but every concrete handler typically overrides it.
|
|
248
260
|
|
|
@@ -264,12 +276,26 @@ class CustomAuthHandler extends AuthHandler {
|
|
|
264
276
|
}
|
|
265
277
|
```
|
|
266
278
|
|
|
279
|
+
## Namespace authorization
|
|
280
|
+
|
|
281
|
+
Use the `namespace(...)` decorator exported from `@decaf-ts/integrations/nest` on models to attach namespace scopes in the same way `@roles(...)` attaches model roles. The `AuthInterceptor` forwards those scopes to `AuthHandler.authorize(...)`, and the base auth handler checks them against the authenticated principal.
|
|
282
|
+
|
|
283
|
+
```ts
|
|
284
|
+
import { namespace } from "@decaf-ts/integrations/nest";
|
|
285
|
+
|
|
286
|
+
@namespace(["tenant:acme", "org:engineering"])
|
|
287
|
+
class Product extends Model {}
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
Route-level namespace guards can be layered with `@RequireNamespaces(...)` and skipped at the model level with `skipModelNamespaces: true` in `AuthConfig`.
|
|
291
|
+
|
|
267
292
|
### `AuthData` / `UserData`
|
|
268
293
|
|
|
269
294
|
| Field | Type | Description |
|
|
270
295
|
|---|---|---|
|
|
271
296
|
| `user` | `string` | Authenticated user identifier. |
|
|
272
297
|
| `roles` | `string[]` | Roles granted to the user. |
|
|
298
|
+
| `namespaces` | `string[]` | Namespace scopes granted to the user. |
|
|
273
299
|
| `organization` | `string` | Organization / tenant / MSP. |
|
|
274
300
|
|
|
275
301
|
---
|
|
@@ -282,9 +308,9 @@ Request → AuthInterceptor → DecafRequestHandlerInterceptor → Controller
|
|
|
282
308
|
|
|
283
309
|
1. **`AuthInterceptor`** (request-scoped):
|
|
284
310
|
- Reads `IS_PUBLIC_KEY` — if `true`, skips auth.
|
|
285
|
-
- Reads `AUTH_META_KEY` (model name)
|
|
286
|
-
- Reads `SKIP_MODEL_ROLES_KEY`
|
|
287
|
-
- Calls `authHandler.authorize(ctx, effectiveModel, requiredRoles, requestContext)`.
|
|
311
|
+
- Reads `AUTH_META_KEY` (model name), `REQUIRED_ROLES_KEY` (route roles), and `REQUIRED_NAMESPACES_KEY` (route namespaces).
|
|
312
|
+
- Reads `SKIP_MODEL_ROLES_KEY` and `SKIP_MODEL_NAMESPACES_KEY` to selectively skip model-level role or namespace checks.
|
|
313
|
+
- Calls `authHandler.authorize(ctx, effectiveModel, requiredRoles, requiredNamespaces, skipModelNamespaces, requestContext)`.
|
|
288
314
|
- Runs `applyTransformers()` — iterates `Adapter.flavoursToTransform()`, instantiates each `RequestToContextTransformer` if needed, calls `transformer.from(requestContext)`, and accumulates the result.
|
|
289
315
|
- Enriches the logger with `user` / `organization` if present.
|
|
290
316
|
|