mongodb-dynamic-api 1.3.2 → 1.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/CHANGELOG.md +20 -0
- package/README.md +410 -1
- package/package.json +11 -1
- package/src/builders/casl/casl-ability.builder.d.ts +5 -0
- package/src/builders/casl/casl-ability.builder.js +14 -0
- package/src/builders/index.d.ts +3 -1
- package/src/builders/index.js +3 -1
- package/src/builders/route-decorators/auth-decorators.builder.d.ts +7 -0
- package/src/builders/route-decorators/auth-decorators.builder.js +14 -0
- package/src/builders/route-decorators/route-decorators.builder.d.ts +23 -0
- package/src/builders/{route-decorators.builder.js → route-decorators/route-decorators.builder.js} +45 -23
- package/src/decorators/check-policies.decorator.d.ts +5 -0
- package/src/decorators/check-policies.decorator.js +8 -0
- package/src/decorators/index.d.ts +2 -0
- package/src/decorators/index.js +2 -0
- package/src/decorators/public.decorator.d.ts +3 -0
- package/src/decorators/public.decorator.js +8 -0
- package/src/dynamic-api.module.d.ts +5 -4
- package/src/dynamic-api.module.js +132 -90
- package/src/guards/base-policies.guard.d.ts +13 -0
- package/src/guards/base-policies.guard.js +32 -0
- package/src/guards/dynamic-api-jwt-auth.guard.d.ts +11 -0
- package/src/guards/dynamic-api-jwt-auth.guard.js +38 -0
- package/src/guards/index.d.ts +2 -0
- package/src/guards/index.js +18 -0
- package/src/helpers/controller-ability-predicates.helper.d.ts +4 -0
- package/src/helpers/controller-ability-predicates.helper.js +23 -0
- package/src/helpers/index.d.ts +1 -0
- package/src/helpers/index.js +1 -0
- package/src/helpers/route-decorators.helper.d.ts +2 -2
- package/src/helpers/schema.helper.d.ts +28 -0
- package/src/helpers/schema.helper.js +22 -0
- package/src/helpers/swagger-config.helper.js +2 -1
- package/src/index.d.ts +3 -1
- package/src/index.js +3 -1
- package/src/interceptors/dynamic-api-cache.interceptor.d.ts +16 -0
- package/src/interceptors/dynamic-api-cache.interceptor.js +48 -0
- package/src/interceptors/index.d.ts +1 -0
- package/src/interceptors/index.js +17 -0
- package/src/interfaces/controller-options.interface.d.ts +5 -1
- package/src/interfaces/decorator-builder.interface.d.ts +5 -0
- package/src/interfaces/dynamic-api-cache-options.interface.d.ts +1 -0
- package/src/interfaces/dynamic-api-casl-ability.interface.d.ts +17 -0
- package/src/interfaces/dynamic-api-casl-ability.interface.js +11 -0
- package/src/interfaces/dynamic-api-global-state.interface.d.ts +16 -0
- package/src/interfaces/dynamic-api-options.interface.d.ts +5 -2
- package/src/interfaces/dynamic-api-options.interface.js +3 -0
- package/src/interfaces/dynamic-api-policy-handler.interface.d.ts +16 -0
- package/src/interfaces/dynamic-api-route-config.interface.d.ts +7 -9
- package/src/interfaces/dynamic-api-route-dtos-bundle.type.d.ts +8 -0
- package/src/interfaces/dynamic-api-route-module.type.d.ts +3 -0
- package/src/interfaces/dynamic-api-route-type.type.d.ts +2 -0
- package/src/interfaces/index.d.ts +11 -2
- package/src/interfaces/index.js +11 -2
- package/src/mixins/create-policies-guard.mixin.d.ts +5 -0
- package/src/mixins/create-policies-guard.mixin.js +37 -0
- package/src/mixins/index.d.ts +1 -0
- package/src/mixins/index.js +1 -0
- package/src/modules/auth/auth.helper.d.ts +10 -0
- package/src/modules/auth/auth.helper.js +103 -0
- package/src/modules/auth/auth.module.d.ts +12 -0
- package/src/modules/auth/auth.module.js +55 -0
- package/src/modules/auth/guards/index.d.ts +2 -0
- package/src/modules/auth/guards/index.js +18 -0
- package/src/modules/auth/guards/jwt-auth.guard.d.ts +4 -0
- package/src/modules/auth/guards/jwt-auth.guard.js +17 -0
- package/src/modules/auth/guards/local-auth.guard.d.ts +4 -0
- package/src/modules/auth/guards/local-auth.guard.js +17 -0
- package/src/modules/auth/index.d.ts +7 -0
- package/src/modules/auth/index.js +23 -0
- package/src/modules/auth/interfaces/auth-controller.interface.d.ts +9 -0
- package/src/modules/auth/interfaces/auth-options.interface.d.ts +22 -0
- package/src/modules/auth/interfaces/auth-service.interface.d.ts +12 -0
- package/src/modules/auth/interfaces/index.d.ts +3 -0
- package/src/modules/auth/interfaces/index.js +19 -0
- package/src/modules/auth/mixins/auth-controller.mixin.d.ts +6 -0
- package/src/modules/auth/mixins/auth-controller.mixin.js +101 -0
- package/src/modules/auth/mixins/auth-register-policies-guard.mixin.d.ts +6 -0
- package/src/modules/auth/mixins/auth-register-policies-guard.mixin.js +59 -0
- package/src/modules/auth/mixins/index.d.ts +2 -0
- package/src/modules/auth/mixins/index.js +18 -0
- package/src/modules/auth/services/base-auth.service.d.ts +51 -0
- package/src/modules/auth/services/base-auth.service.js +64 -0
- package/src/modules/auth/services/index.d.ts +1 -0
- package/src/modules/auth/services/index.js +17 -0
- package/src/modules/auth/strategies/index.d.ts +1 -0
- package/src/modules/auth/strategies/index.js +17 -0
- package/src/modules/auth/strategies/jwt.strategy.d.ts +8 -0
- package/src/modules/auth/strategies/jwt.strategy.js +35 -0
- package/src/modules/dynamic-api-config/dynamic-api-config.module.d.ts +5 -0
- package/src/modules/dynamic-api-config/dynamic-api-config.module.js +31 -0
- package/src/modules/dynamic-api-config/index.d.ts +1 -0
- package/src/modules/dynamic-api-config/index.js +17 -0
- package/src/modules/index.d.ts +2 -8
- package/src/modules/index.js +2 -8
- package/src/routes/create-many/create-many-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/create-many/create-many-controller.mixin.js +26 -4
- package/src/{modules → routes}/create-many/create-many.helper.d.ts +2 -2
- package/src/{modules → routes}/create-many/create-many.helper.js +6 -4
- package/src/{modules → routes}/create-many/create-many.module.d.ts +1 -1
- package/src/{modules → routes}/create-many/create-many.module.js +2 -2
- package/src/routes/create-one/create-one-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/create-one/create-one-controller.mixin.js +25 -3
- package/src/{modules → routes}/create-one/create-one.helper.d.ts +2 -2
- package/src/{modules → routes}/create-one/create-one.helper.js +6 -4
- package/src/routes/create-one/create-one.module.d.ts +6 -0
- package/src/{modules → routes}/create-one/create-one.module.js +3 -3
- package/src/routes/delete-many/delete-many-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/delete-many/delete-many-controller.mixin.js +26 -3
- package/src/{modules → routes}/delete-many/delete-many.helper.d.ts +2 -2
- package/src/{modules → routes}/delete-many/delete-many.helper.js +6 -4
- package/src/routes/delete-many/delete-many.module.d.ts +6 -0
- package/src/{modules → routes}/delete-many/delete-many.module.js +3 -3
- package/src/routes/delete-one/delete-one-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/delete-one/delete-one-controller.mixin.js +26 -3
- package/src/{modules → routes}/delete-one/delete-one.helper.d.ts +2 -2
- package/src/{modules → routes}/delete-one/delete-one.helper.js +6 -4
- package/src/routes/delete-one/delete-one.module.d.ts +6 -0
- package/src/{modules → routes}/delete-one/delete-one.module.js +3 -3
- package/src/routes/duplicate-many/duplicate-many-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/duplicate-many/duplicate-many-controller.mixin.js +25 -3
- package/src/{modules → routes}/duplicate-many/duplicate-many.helper.d.ts +2 -2
- package/src/{modules → routes}/duplicate-many/duplicate-many.helper.js +6 -4
- package/src/routes/duplicate-many/duplicate-many.module.d.ts +6 -0
- package/src/{modules → routes}/duplicate-many/duplicate-many.module.js +3 -3
- package/src/routes/duplicate-one/duplicate-one-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/duplicate-one/duplicate-one-controller.mixin.js +25 -3
- package/src/{modules → routes}/duplicate-one/duplicate-one.helper.d.ts +2 -2
- package/src/{modules → routes}/duplicate-one/duplicate-one.helper.js +6 -4
- package/src/routes/duplicate-one/duplicate-one.module.d.ts +6 -0
- package/src/{modules → routes}/duplicate-one/duplicate-one.module.js +3 -3
- package/src/routes/get-many/get-many-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/get-many/get-many-controller.mixin.js +28 -6
- package/src/routes/get-many/get-many-service.interface.js +2 -0
- package/src/{modules → routes}/get-many/get-many.helper.d.ts +2 -2
- package/src/{modules → routes}/get-many/get-many.helper.js +6 -4
- package/src/routes/get-many/get-many.module.d.ts +6 -0
- package/src/{modules → routes}/get-many/get-many.module.js +3 -3
- package/src/routes/get-one/get-one-controller.interface.js +2 -0
- package/src/routes/get-one/get-one-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/get-one/get-one-controller.mixin.js +25 -3
- package/src/routes/get-one/get-one-service.interface.js +2 -0
- package/src/{modules → routes}/get-one/get-one.helper.d.ts +2 -2
- package/src/{modules → routes}/get-one/get-one.helper.js +6 -4
- package/src/routes/get-one/get-one.module.d.ts +6 -0
- package/src/{modules → routes}/get-one/get-one.module.js +3 -3
- package/src/routes/index.d.ts +11 -0
- package/src/routes/index.js +27 -0
- package/src/routes/replace-one/replace-one-controller.interface.js +2 -0
- package/src/routes/replace-one/replace-one-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/replace-one/replace-one-controller.mixin.js +25 -3
- package/src/routes/replace-one/replace-one-service.interface.js +2 -0
- package/src/{modules → routes}/replace-one/replace-one.helper.d.ts +2 -2
- package/src/{modules → routes}/replace-one/replace-one.helper.js +6 -4
- package/src/routes/replace-one/replace-one.module.d.ts +6 -0
- package/src/{modules → routes}/replace-one/replace-one.module.js +3 -3
- package/src/routes/update-many/update-many-controller.interface.js +2 -0
- package/src/routes/update-many/update-many-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/update-many/update-many-controller.mixin.js +25 -3
- package/src/routes/update-many/update-many-service.interface.js +2 -0
- package/src/{modules → routes}/update-many/update-many.helper.d.ts +2 -2
- package/src/{modules → routes}/update-many/update-many.helper.js +6 -4
- package/src/routes/update-many/update-many.module.d.ts +6 -0
- package/src/{modules → routes}/update-many/update-many.module.js +3 -3
- package/src/routes/update-one/update-one-controller.interface.js +2 -0
- package/src/routes/update-one/update-one-controller.mixin.d.ts +6 -0
- package/src/{modules → routes}/update-one/update-one-controller.mixin.js +25 -3
- package/src/routes/update-one/update-one-service.interface.js +2 -0
- package/src/{modules → routes}/update-one/update-one.helper.d.ts +2 -2
- package/src/{modules → routes}/update-one/update-one.helper.js +6 -4
- package/src/routes/update-one/update-one.module.d.ts +6 -0
- package/src/{modules → routes}/update-one/update-one.module.js +3 -3
- package/src/services/{base.service.d.ts → base/base.service.d.ts} +1 -1
- package/src/services/{base.service.js → base/base.service.js} +2 -2
- package/src/services/bcrypt/bcrypt.service.d.ts +5 -0
- package/src/services/bcrypt/bcrypt.service.js +26 -0
- package/src/services/dynamic-api-global-state/dynamic-api-global-state.service.d.ts +11 -0
- package/src/services/dynamic-api-global-state/dynamic-api-global-state.service.js +36 -0
- package/src/services/index.d.ts +3 -1
- package/src/services/index.js +3 -1
- package/src/version.json +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/src/builders/route-decorators.builder.d.ts +0 -20
- package/src/modules/create-many/create-many-controller.mixin.d.ts +0 -6
- package/src/modules/create-one/create-one-controller.mixin.d.ts +0 -6
- package/src/modules/create-one/create-one.module.d.ts +0 -6
- package/src/modules/delete-many/delete-many-controller.mixin.d.ts +0 -6
- package/src/modules/delete-many/delete-many.module.d.ts +0 -6
- package/src/modules/delete-one/delete-one-controller.mixin.d.ts +0 -6
- package/src/modules/delete-one/delete-one.module.d.ts +0 -6
- package/src/modules/duplicate-many/duplicate-many-controller.mixin.d.ts +0 -6
- package/src/modules/duplicate-many/duplicate-many.module.d.ts +0 -6
- package/src/modules/duplicate-one/duplicate-one-controller.mixin.d.ts +0 -6
- package/src/modules/duplicate-one/duplicate-one.module.d.ts +0 -6
- package/src/modules/get-many/get-many-controller.mixin.d.ts +0 -6
- package/src/modules/get-many/get-many.module.d.ts +0 -6
- package/src/modules/get-one/get-one-controller.mixin.d.ts +0 -6
- package/src/modules/get-one/get-one.module.d.ts +0 -6
- package/src/modules/replace-one/replace-one-controller.mixin.d.ts +0 -6
- package/src/modules/replace-one/replace-one.module.d.ts +0 -6
- package/src/modules/update-many/update-many-controller.mixin.d.ts +0 -6
- package/src/modules/update-many/update-many.module.d.ts +0 -6
- package/src/modules/update-one/update-one-controller.mixin.d.ts +0 -6
- package/src/modules/update-one/update-one.module.d.ts +0 -6
- /package/src/{modules/create-many/create-many-controller.interface.js → interfaces/decorator-builder.interface.js} +0 -0
- /package/src/{modules/create-many/create-many-service.interface.js → interfaces/dynamic-api-global-state.interface.js} +0 -0
- /package/src/{modules/create-one/create-one-controller.interface.js → interfaces/dynamic-api-policy-handler.interface.js} +0 -0
- /package/src/{modules/create-one/create-one-service.interface.js → interfaces/dynamic-api-route-dtos-bundle.type.js} +0 -0
- /package/src/{modules/delete-many/delete-many-controller.interface.js → interfaces/dynamic-api-route-module.type.js} +0 -0
- /package/src/{modules/delete-many/delete-many-service.interface.js → interfaces/dynamic-api-route-type.type.js} +0 -0
- /package/src/modules/{delete-one/delete-one-controller.interface.js → auth/interfaces/auth-controller.interface.js} +0 -0
- /package/src/modules/{delete-one/delete-one-service.interface.js → auth/interfaces/auth-options.interface.js} +0 -0
- /package/src/modules/{duplicate-many/duplicate-many-controller.interface.js → auth/interfaces/auth-service.interface.js} +0 -0
- /package/src/{modules → routes}/create-many/base-create-many.service.d.ts +0 -0
- /package/src/{modules → routes}/create-many/base-create-many.service.js +0 -0
- /package/src/{modules → routes}/create-many/create-many-controller.interface.d.ts +0 -0
- /package/src/{modules/duplicate-many/duplicate-many-service.interface.js → routes/create-many/create-many-controller.interface.js} +0 -0
- /package/src/{modules → routes}/create-many/create-many-service.interface.d.ts +0 -0
- /package/src/{modules/duplicate-one/duplicate-one-controller.interface.js → routes/create-many/create-many-service.interface.js} +0 -0
- /package/src/{modules → routes}/create-many/index.d.ts +0 -0
- /package/src/{modules → routes}/create-many/index.js +0 -0
- /package/src/{modules → routes}/create-one/base-create-one.service.d.ts +0 -0
- /package/src/{modules → routes}/create-one/base-create-one.service.js +0 -0
- /package/src/{modules → routes}/create-one/create-one-controller.interface.d.ts +0 -0
- /package/src/{modules/duplicate-one/duplicate-one-service.interface.js → routes/create-one/create-one-controller.interface.js} +0 -0
- /package/src/{modules → routes}/create-one/create-one-service.interface.d.ts +0 -0
- /package/src/{modules/get-many/get-many-controller.interface.js → routes/create-one/create-one-service.interface.js} +0 -0
- /package/src/{modules → routes}/create-one/index.d.ts +0 -0
- /package/src/{modules → routes}/create-one/index.js +0 -0
- /package/src/{modules → routes}/delete-many/base-delete-many.service.d.ts +0 -0
- /package/src/{modules → routes}/delete-many/base-delete-many.service.js +0 -0
- /package/src/{modules → routes}/delete-many/delete-many-controller.interface.d.ts +0 -0
- /package/src/{modules/get-many/get-many-service.interface.js → routes/delete-many/delete-many-controller.interface.js} +0 -0
- /package/src/{modules → routes}/delete-many/delete-many-service.interface.d.ts +0 -0
- /package/src/{modules/get-one/get-one-controller.interface.js → routes/delete-many/delete-many-service.interface.js} +0 -0
- /package/src/{modules → routes}/delete-many/delete-many.presenter.d.ts +0 -0
- /package/src/{modules → routes}/delete-many/delete-many.presenter.js +0 -0
- /package/src/{modules → routes}/delete-many/index.d.ts +0 -0
- /package/src/{modules → routes}/delete-many/index.js +0 -0
- /package/src/{modules → routes}/delete-one/base-delete-one.service.d.ts +0 -0
- /package/src/{modules → routes}/delete-one/base-delete-one.service.js +0 -0
- /package/src/{modules → routes}/delete-one/delete-one-controller.interface.d.ts +0 -0
- /package/src/{modules/get-one/get-one-service.interface.js → routes/delete-one/delete-one-controller.interface.js} +0 -0
- /package/src/{modules → routes}/delete-one/delete-one-service.interface.d.ts +0 -0
- /package/src/{modules/replace-one/replace-one-controller.interface.js → routes/delete-one/delete-one-service.interface.js} +0 -0
- /package/src/{modules → routes}/delete-one/delete-one.presenter.d.ts +0 -0
- /package/src/{modules → routes}/delete-one/delete-one.presenter.js +0 -0
- /package/src/{modules → routes}/delete-one/index.d.ts +0 -0
- /package/src/{modules → routes}/delete-one/index.js +0 -0
- /package/src/{modules → routes}/duplicate-many/base-duplicate-many.service.d.ts +0 -0
- /package/src/{modules → routes}/duplicate-many/base-duplicate-many.service.js +0 -0
- /package/src/{modules → routes}/duplicate-many/duplicate-many-controller.interface.d.ts +0 -0
- /package/src/{modules/replace-one/replace-one-service.interface.js → routes/duplicate-many/duplicate-many-controller.interface.js} +0 -0
- /package/src/{modules → routes}/duplicate-many/duplicate-many-service.interface.d.ts +0 -0
- /package/src/{modules/update-many/update-many-controller.interface.js → routes/duplicate-many/duplicate-many-service.interface.js} +0 -0
- /package/src/{modules → routes}/duplicate-many/index.d.ts +0 -0
- /package/src/{modules → routes}/duplicate-many/index.js +0 -0
- /package/src/{modules → routes}/duplicate-one/base-duplicate-one.service.d.ts +0 -0
- /package/src/{modules → routes}/duplicate-one/base-duplicate-one.service.js +0 -0
- /package/src/{modules → routes}/duplicate-one/duplicate-one-controller.interface.d.ts +0 -0
- /package/src/{modules/update-many/update-many-service.interface.js → routes/duplicate-one/duplicate-one-controller.interface.js} +0 -0
- /package/src/{modules → routes}/duplicate-one/duplicate-one-service.interface.d.ts +0 -0
- /package/src/{modules/update-one/update-one-controller.interface.js → routes/duplicate-one/duplicate-one-service.interface.js} +0 -0
- /package/src/{modules → routes}/duplicate-one/index.d.ts +0 -0
- /package/src/{modules → routes}/duplicate-one/index.js +0 -0
- /package/src/{modules → routes}/get-many/base-get-many.service.d.ts +0 -0
- /package/src/{modules → routes}/get-many/base-get-many.service.js +0 -0
- /package/src/{modules → routes}/get-many/get-many-controller.interface.d.ts +0 -0
- /package/src/{modules/update-one/update-one-service.interface.js → routes/get-many/get-many-controller.interface.js} +0 -0
- /package/src/{modules → routes}/get-many/get-many-service.interface.d.ts +0 -0
- /package/src/{modules → routes}/get-many/index.d.ts +0 -0
- /package/src/{modules → routes}/get-many/index.js +0 -0
- /package/src/{modules → routes}/get-one/base-get-one.service.d.ts +0 -0
- /package/src/{modules → routes}/get-one/base-get-one.service.js +0 -0
- /package/src/{modules → routes}/get-one/get-one-controller.interface.d.ts +0 -0
- /package/src/{modules → routes}/get-one/get-one-service.interface.d.ts +0 -0
- /package/src/{modules → routes}/get-one/index.d.ts +0 -0
- /package/src/{modules → routes}/get-one/index.js +0 -0
- /package/src/{modules → routes}/replace-one/base-replace-one.service.d.ts +0 -0
- /package/src/{modules → routes}/replace-one/base-replace-one.service.js +0 -0
- /package/src/{modules → routes}/replace-one/index.d.ts +0 -0
- /package/src/{modules → routes}/replace-one/index.js +0 -0
- /package/src/{modules → routes}/replace-one/replace-one-controller.interface.d.ts +0 -0
- /package/src/{modules → routes}/replace-one/replace-one-service.interface.d.ts +0 -0
- /package/src/{modules → routes}/update-many/base-update-many.service.d.ts +0 -0
- /package/src/{modules → routes}/update-many/base-update-many.service.js +0 -0
- /package/src/{modules → routes}/update-many/index.d.ts +0 -0
- /package/src/{modules → routes}/update-many/index.js +0 -0
- /package/src/{modules → routes}/update-many/update-many-controller.interface.d.ts +0 -0
- /package/src/{modules → routes}/update-many/update-many-service.interface.d.ts +0 -0
- /package/src/{modules → routes}/update-one/base-update-one.service.d.ts +0 -0
- /package/src/{modules → routes}/update-one/base-update-one.service.js +0 -0
- /package/src/{modules → routes}/update-one/index.d.ts +0 -0
- /package/src/{modules → routes}/update-one/index.js +0 -0
- /package/src/{modules → routes}/update-one/update-one-controller.interface.d.ts +0 -0
- /package/src/{modules → routes}/update-one/update-one-service.interface.d.ts +0 -0
package/src/builders/{route-decorators.builder.js → route-decorators/route-decorators.builder.js}
RENAMED
|
@@ -4,16 +4,16 @@ exports.RouteDecoratorsBuilder = void 0;
|
|
|
4
4
|
const common_1 = require("@nestjs/common");
|
|
5
5
|
const swagger_1 = require("@nestjs/swagger");
|
|
6
6
|
const lodash_1 = require("lodash");
|
|
7
|
+
const decorators_1 = require("../../decorators");
|
|
8
|
+
const dynamic_api_module_1 = require("../../dynamic-api.module");
|
|
7
9
|
class RouteDecoratorsBuilder {
|
|
8
|
-
constructor(routeType, entity, version, description,
|
|
10
|
+
constructor(routeType, entity, version, description, isPublic, dTOs = {}) {
|
|
9
11
|
this.routeType = routeType;
|
|
10
12
|
this.entity = entity;
|
|
11
13
|
this.version = version;
|
|
12
14
|
this.description = description;
|
|
13
|
-
this.
|
|
14
|
-
this.
|
|
15
|
-
this.body = body;
|
|
16
|
-
this.presenter = presenter;
|
|
15
|
+
this.isPublic = isPublic;
|
|
16
|
+
this.dTOs = dTOs;
|
|
17
17
|
this.responseRouteTypeIsArray = [
|
|
18
18
|
'GetMany',
|
|
19
19
|
'CreateMany',
|
|
@@ -25,39 +25,59 @@ class RouteDecoratorsBuilder {
|
|
|
25
25
|
];
|
|
26
26
|
}
|
|
27
27
|
build() {
|
|
28
|
-
const [paramKey] = this.param ? (0, lodash_1.keys)(new this.param()) : [];
|
|
28
|
+
const [paramKey] = this.dTOs.param ? (0, lodash_1.keys)(new this.dTOs.param()) : [];
|
|
29
29
|
return [
|
|
30
30
|
...this.getRouteDecorators(paramKey),
|
|
31
31
|
...this.getApiDecorators(paramKey),
|
|
32
32
|
];
|
|
33
33
|
}
|
|
34
34
|
getRouteDecorators(paramKey) {
|
|
35
|
+
let routeDecorators = [];
|
|
36
|
+
const isAuthEnabled = dynamic_api_module_1.DynamicApiModule.state.get('isAuthEnabled');
|
|
37
|
+
if (this.isPublic) {
|
|
38
|
+
routeDecorators.push((0, decorators_1.Public)());
|
|
39
|
+
}
|
|
40
|
+
else if (isAuthEnabled) {
|
|
41
|
+
routeDecorators.push((0, swagger_1.ApiBearerAuth)());
|
|
42
|
+
}
|
|
35
43
|
switch (this.routeType) {
|
|
36
44
|
case 'GetMany':
|
|
37
|
-
|
|
45
|
+
routeDecorators.push((0, common_1.Get)());
|
|
46
|
+
break;
|
|
38
47
|
case 'GetOne':
|
|
39
|
-
|
|
48
|
+
routeDecorators.push((0, common_1.Get)(`:${paramKey}`));
|
|
49
|
+
break;
|
|
40
50
|
case 'CreateMany':
|
|
41
|
-
|
|
51
|
+
routeDecorators.push((0, common_1.Post)('many'));
|
|
52
|
+
break;
|
|
42
53
|
case 'CreateOne':
|
|
43
|
-
|
|
54
|
+
routeDecorators.push((0, common_1.Post)());
|
|
55
|
+
break;
|
|
44
56
|
case 'UpdateMany':
|
|
45
|
-
|
|
57
|
+
routeDecorators.push((0, common_1.Patch)());
|
|
58
|
+
break;
|
|
46
59
|
case 'UpdateOne':
|
|
47
|
-
|
|
60
|
+
routeDecorators.push((0, common_1.Patch)(`:${paramKey}`));
|
|
61
|
+
break;
|
|
48
62
|
case 'ReplaceOne':
|
|
49
|
-
|
|
63
|
+
routeDecorators.push((0, common_1.Put)(`:${paramKey}`));
|
|
64
|
+
break;
|
|
50
65
|
case 'DuplicateMany':
|
|
51
|
-
|
|
66
|
+
routeDecorators.push((0, common_1.Post)(`duplicate`));
|
|
67
|
+
break;
|
|
52
68
|
case 'DuplicateOne':
|
|
53
|
-
|
|
69
|
+
routeDecorators.push((0, common_1.Post)(`duplicate/:${paramKey}`));
|
|
70
|
+
break;
|
|
54
71
|
case 'DeleteMany':
|
|
55
|
-
|
|
72
|
+
routeDecorators.push((0, common_1.Delete)());
|
|
73
|
+
break;
|
|
56
74
|
case 'DeleteOne':
|
|
57
|
-
|
|
75
|
+
routeDecorators.push((0, common_1.Delete)(`:${paramKey}`));
|
|
76
|
+
break;
|
|
58
77
|
default:
|
|
59
78
|
throw new Error(`Unexpected route type! Cannot build route decorators. Received: ${this.routeType}`);
|
|
60
79
|
}
|
|
80
|
+
return routeDecorators;
|
|
61
81
|
}
|
|
62
82
|
getApiDecorators(paramKey) {
|
|
63
83
|
return [
|
|
@@ -67,17 +87,19 @@ class RouteDecoratorsBuilder {
|
|
|
67
87
|
`${(0, lodash_1.upperFirst)((0, lodash_1.lowerCase)(this.routeType))} ${(0, lodash_1.lowerCase)(this.entity.name)}`,
|
|
68
88
|
}),
|
|
69
89
|
(0, swagger_1.ApiResponse)({
|
|
70
|
-
type: this.presenter ?? this.entity,
|
|
90
|
+
type: this.dTOs.presenter ?? this.entity,
|
|
71
91
|
isArray: this.responseRouteTypeIsArray.includes(this.routeType),
|
|
72
92
|
}),
|
|
73
|
-
...(this.body ? [
|
|
74
|
-
|
|
93
|
+
...(this.dTOs.body ? [
|
|
94
|
+
(0, swagger_1.ApiBody)({
|
|
95
|
+
type: this.dTOs.body,
|
|
75
96
|
required: !this.bodyRouteTypeIsOptional.includes(this.routeType),
|
|
76
|
-
})
|
|
77
|
-
|
|
97
|
+
}),
|
|
98
|
+
] : []),
|
|
99
|
+
...(this.dTOs.param && paramKey
|
|
78
100
|
? [
|
|
79
101
|
(0, swagger_1.ApiParam)({
|
|
80
|
-
type: typeof new this.param()[paramKey],
|
|
102
|
+
type: typeof new this.dTOs.param()[paramKey],
|
|
81
103
|
name: paramKey,
|
|
82
104
|
}),
|
|
83
105
|
]
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { PolicyHandler } from '../interfaces';
|
|
2
|
+
import { BaseEntity } from '../models';
|
|
3
|
+
declare const CHECK_POLICIES_KEY = "check_policy";
|
|
4
|
+
declare const CheckPolicies: <Entity extends BaseEntity>(...handlers: PolicyHandler<Entity>[]) => import("@nestjs/common").CustomDecorator<string>;
|
|
5
|
+
export { CheckPolicies, CHECK_POLICIES_KEY };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CHECK_POLICIES_KEY = exports.CheckPolicies = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const CHECK_POLICIES_KEY = 'check_policy';
|
|
6
|
+
exports.CHECK_POLICIES_KEY = CHECK_POLICIES_KEY;
|
|
7
|
+
const CheckPolicies = (...handlers) => (0, common_1.SetMetadata)(CHECK_POLICIES_KEY, handlers);
|
|
8
|
+
exports.CheckPolicies = CheckPolicies;
|
package/src/decorators/index.js
CHANGED
|
@@ -14,4 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./check-policies.decorator"), exports);
|
|
18
|
+
__exportStar(require("./public.decorator"), exports);
|
|
17
19
|
__exportStar(require("./schema-options.decorator"), exports);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Public = exports.IS_PUBLIC_KEY = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const IS_PUBLIC_KEY = 'isPublic';
|
|
6
|
+
exports.IS_PUBLIC_KEY = IS_PUBLIC_KEY;
|
|
7
|
+
const Public = () => (0, common_1.SetMetadata)(IS_PUBLIC_KEY, true);
|
|
8
|
+
exports.Public = Public;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { DynamicModule } from '@nestjs/common';
|
|
2
2
|
import { DynamicApiForFeatureOptions, DynamicApiForRootOptions } from './interfaces';
|
|
3
3
|
import { BaseEntity } from './models';
|
|
4
|
+
import { DynamicApiGlobalStateService } from './services';
|
|
4
5
|
export declare class DynamicApiModule {
|
|
5
|
-
static readonly
|
|
6
|
-
static
|
|
7
|
-
static
|
|
8
|
-
static
|
|
6
|
+
static readonly state: DynamicApiGlobalStateService;
|
|
7
|
+
static forRoot(uri: string, { useGlobalCache, cacheOptions, useAuth, }?: DynamicApiForRootOptions): DynamicModule;
|
|
8
|
+
static forFeature<Entity extends BaseEntity>({ entity, controllerOptions, routes, }: DynamicApiForFeatureOptions<Entity>): Promise<DynamicModule>;
|
|
9
|
+
private static setDefaultRoutesIfNotConfigured;
|
|
9
10
|
}
|
|
@@ -11,46 +11,143 @@ exports.DynamicApiModule = void 0;
|
|
|
11
11
|
const cache_manager_1 = require("@nestjs/cache-manager");
|
|
12
12
|
const common_1 = require("@nestjs/common");
|
|
13
13
|
const core_1 = require("@nestjs/core");
|
|
14
|
+
const http_adapter_host_1 = require("@nestjs/core/helpers/http-adapter-host");
|
|
14
15
|
const mongoose_1 = require("@nestjs/mongoose");
|
|
15
|
-
const
|
|
16
|
+
const rxjs_1 = require("rxjs");
|
|
17
|
+
const guards_1 = require("./guards");
|
|
16
18
|
const helpers_1 = require("./helpers");
|
|
19
|
+
const interceptors_1 = require("./interceptors");
|
|
20
|
+
const interfaces_1 = require("./interfaces");
|
|
17
21
|
const modules_1 = require("./modules");
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
const update_many_1 = require("./modules/update-many");
|
|
22
|
+
const routes_1 = require("./routes");
|
|
23
|
+
const services_1 = require("./services");
|
|
21
24
|
let DynamicApiModule = DynamicApiModule_1 = class DynamicApiModule {
|
|
22
|
-
static forRoot(uri, { useGlobalCache = true, cacheOptions = {} } = {}) {
|
|
25
|
+
static forRoot(uri, { useGlobalCache = true, cacheOptions = {}, useAuth, } = {}) {
|
|
23
26
|
if (!uri) {
|
|
24
27
|
throw new Error('You must provide a valid mongodb uri in the forRoot method to use MongoDB Dynamic API');
|
|
25
28
|
}
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
+
this.state.set([
|
|
30
|
+
'partial', {
|
|
31
|
+
initialized: true,
|
|
32
|
+
isGlobalCacheEnabled: useGlobalCache,
|
|
33
|
+
...(cacheOptions?.excludePaths ? { cacheExcludedPaths: cacheOptions?.excludePaths } : {}),
|
|
34
|
+
...(useAuth?.user ? {
|
|
35
|
+
isAuthEnabled: true,
|
|
36
|
+
credentials: {
|
|
37
|
+
loginField: !useAuth.user.loginField ? 'email' : String(useAuth.user.loginField),
|
|
38
|
+
passwordField: !useAuth.user.passwordField ? 'password' : String(useAuth.user.passwordField),
|
|
39
|
+
},
|
|
40
|
+
jwtSecret: useAuth.jwt?.secret ?? 'dynamic-api-jwt-secret',
|
|
41
|
+
} : {}),
|
|
42
|
+
},
|
|
43
|
+
]);
|
|
29
44
|
return {
|
|
30
45
|
module: DynamicApiModule_1,
|
|
31
46
|
imports: [
|
|
32
|
-
|
|
33
|
-
|
|
47
|
+
modules_1.DynamicApiConfigModule.register(this.state.get()),
|
|
48
|
+
cache_manager_1.CacheModule.register({ isGlobal: true, ...cacheOptions }),
|
|
49
|
+
mongoose_1.MongooseModule.forRoot(uri, { connectionName: this.state.get('connectionName') }),
|
|
50
|
+
...(useAuth?.user ? [
|
|
51
|
+
modules_1.AuthModule.forRoot({
|
|
52
|
+
user: {
|
|
53
|
+
entity: useAuth.user.entity,
|
|
54
|
+
loginField: useAuth.user.loginField ?? 'email',
|
|
55
|
+
passwordField: useAuth.user.passwordField ?? 'password',
|
|
56
|
+
additionalFields: useAuth.user.additionalFields ?? {
|
|
57
|
+
toRegister: [],
|
|
58
|
+
toRequest: [],
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
jwt: {
|
|
62
|
+
secret: useAuth.jwt?.secret ?? 'dynamic-api-jwt-secret',
|
|
63
|
+
expiresIn: useAuth.jwt?.expiresIn ?? '1d',
|
|
64
|
+
},
|
|
65
|
+
protectRegister: useAuth.protectRegister ?? false,
|
|
66
|
+
registerAbilityPredicate: useAuth.registerAbilityPredicate,
|
|
67
|
+
}),
|
|
68
|
+
] : []),
|
|
34
69
|
],
|
|
70
|
+
exports: [modules_1.DynamicApiConfigModule],
|
|
35
71
|
};
|
|
36
72
|
}
|
|
37
|
-
static forFeature({ entity, controllerOptions
|
|
38
|
-
const {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
73
|
+
static forFeature({ entity, controllerOptions, routes = [], }) {
|
|
74
|
+
const databaseModule = mongoose_1.MongooseModule.forFeature([{ name: entity.name, schema: (0, helpers_1.buildSchemaFromEntity)(entity) }], this.state.get('connectionName'));
|
|
75
|
+
routes = this.setDefaultRoutesIfNotConfigured([...routes]);
|
|
76
|
+
return new Promise((resolve, reject) => {
|
|
77
|
+
const waitInitializedStateInterval = setInterval(async () => {
|
|
78
|
+
const stateInitialized = await (0, rxjs_1.firstValueFrom)(this.state.get().onInitialized());
|
|
79
|
+
if (!stateInitialized) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
if (waitForState) {
|
|
83
|
+
clearTimeout(waitForState);
|
|
84
|
+
}
|
|
85
|
+
clearInterval(waitInitializedStateInterval);
|
|
86
|
+
const { version: controllerVersion, validationPipeOptions: controllerValidationPipeOptions, } = controllerOptions;
|
|
87
|
+
const castType = (t) => t;
|
|
88
|
+
const castModule = (m) => m;
|
|
89
|
+
const moduleByRouteType = new Map([
|
|
90
|
+
[castType('CreateMany'), castModule(routes_1.CreateManyModule)],
|
|
91
|
+
[castType('CreateOne'), castModule(routes_1.CreateOneModule)],
|
|
92
|
+
[castType('DeleteMany'), castModule(routes_1.DeleteManyModule)],
|
|
93
|
+
[castType('DeleteOne'), castModule(routes_1.DeleteOneModule)],
|
|
94
|
+
[castType('DuplicateMany'), castModule(routes_1.DuplicateManyModule)],
|
|
95
|
+
[castType('DuplicateOne'), castModule(routes_1.DuplicateOneModule)],
|
|
96
|
+
[castType('GetMany'), castModule(routes_1.GetManyModule)],
|
|
97
|
+
[castType('GetOne'), castModule(routes_1.GetOneModule)],
|
|
98
|
+
[castType('ReplaceOne'), castModule(routes_1.ReplaceOneModule)],
|
|
99
|
+
[castType('UpdateMany'), castModule(routes_1.UpdateManyModule)],
|
|
100
|
+
[castType('UpdateOne'), castModule(routes_1.UpdateOneModule)],
|
|
101
|
+
]);
|
|
102
|
+
const apiModule = {
|
|
103
|
+
module: DynamicApiModule_1,
|
|
104
|
+
imports: [
|
|
105
|
+
...routes.map((routeConfig) => {
|
|
106
|
+
const { type, description: routeDescription, version: routeVersion, validationPipeOptions: routeValidationPipeOptions, } = routeConfig;
|
|
107
|
+
const module = moduleByRouteType.get(type);
|
|
108
|
+
if (!module) {
|
|
109
|
+
reject(new Error(`Route module for ${type} not found`));
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const description = routeDescription ?? (0, helpers_1.getDefaultRouteDescription)(type, entity.name);
|
|
113
|
+
const version = routeVersion ?? controllerVersion;
|
|
114
|
+
if (version && !(0, helpers_1.isValidVersion)(version)) {
|
|
115
|
+
reject(new Error(`Invalid version ${version} for ${type} route.`
|
|
116
|
+
+ ' Version must be a string that matches numeric format, e.g. 1, 2, 3, ..., 99.'));
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
const validationPipeOptions = routeValidationPipeOptions ?? controllerValidationPipeOptions;
|
|
120
|
+
return module.forFeature(databaseModule, entity, controllerOptions, { ...routeConfig, description }, version, validationPipeOptions ?? { transform: true });
|
|
121
|
+
}),
|
|
122
|
+
],
|
|
123
|
+
providers: [
|
|
124
|
+
{
|
|
125
|
+
provide: core_1.APP_INTERCEPTOR,
|
|
126
|
+
inject: [cache_manager_1.CACHE_MANAGER, core_1.Reflector, http_adapter_host_1.HttpAdapterHost, interfaces_1.DYNAMIC_API_GLOBAL_STATE],
|
|
127
|
+
useFactory: (cacheManager, reflector, httpAdapterHost, state) => {
|
|
128
|
+
return new interceptors_1.DynamicApiCacheInterceptor(cacheManager, reflector, httpAdapterHost, state);
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
provide: core_1.APP_GUARD,
|
|
133
|
+
inject: [core_1.Reflector, interfaces_1.DYNAMIC_API_GLOBAL_STATE],
|
|
134
|
+
useFactory: (reflector, state) => {
|
|
135
|
+
return new guards_1.DynamicApiJwtAuthGuard(reflector, state);
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
],
|
|
139
|
+
};
|
|
140
|
+
resolve(apiModule);
|
|
141
|
+
}, 500);
|
|
142
|
+
const waitForState = setTimeout(() => {
|
|
143
|
+
clearInterval(waitInitializedStateInterval);
|
|
144
|
+
reject(new Error('Dynamic API state could not be initialized. Please check your configuration.'));
|
|
145
|
+
}, 5000);
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
static setDefaultRoutesIfNotConfigured(routes) {
|
|
52
149
|
if (!routes.length) {
|
|
53
|
-
|
|
150
|
+
return [
|
|
54
151
|
{ type: 'GetMany' },
|
|
55
152
|
{ type: 'GetOne' },
|
|
56
153
|
{ type: 'CreateMany' },
|
|
@@ -64,73 +161,18 @@ let DynamicApiModule = DynamicApiModule_1 = class DynamicApiModule {
|
|
|
64
161
|
{ type: 'DeleteOne' },
|
|
65
162
|
];
|
|
66
163
|
}
|
|
67
|
-
return
|
|
68
|
-
module: DynamicApiModule_1,
|
|
69
|
-
imports: [
|
|
70
|
-
...routes
|
|
71
|
-
.map(({ type, dTOs, description: routeDescription, version: routeVersion, validationPipeOptions: routeValidationPipeOptions, }) => {
|
|
72
|
-
let module;
|
|
73
|
-
switch (type) {
|
|
74
|
-
case 'CreateMany':
|
|
75
|
-
module = modules_1.CreateManyModule;
|
|
76
|
-
break;
|
|
77
|
-
case 'CreateOne':
|
|
78
|
-
module = modules_1.CreateOneModule;
|
|
79
|
-
break;
|
|
80
|
-
case 'DeleteMany':
|
|
81
|
-
module = delete_many_1.DeleteManyModule;
|
|
82
|
-
break;
|
|
83
|
-
case 'DeleteOne':
|
|
84
|
-
module = modules_1.DeleteOneModule;
|
|
85
|
-
break;
|
|
86
|
-
case 'DuplicateMany':
|
|
87
|
-
module = duplicate_many_1.DuplicateManyModule;
|
|
88
|
-
break;
|
|
89
|
-
case 'DuplicateOne':
|
|
90
|
-
module = modules_1.DuplicateOneModule;
|
|
91
|
-
break;
|
|
92
|
-
case 'GetMany':
|
|
93
|
-
module = modules_1.GetManyModule;
|
|
94
|
-
break;
|
|
95
|
-
case 'GetOne':
|
|
96
|
-
module = modules_1.GetOneModule;
|
|
97
|
-
break;
|
|
98
|
-
case 'ReplaceOne':
|
|
99
|
-
module = modules_1.ReplaceOneModule;
|
|
100
|
-
break;
|
|
101
|
-
case 'UpdateMany':
|
|
102
|
-
module = update_many_1.UpdateManyModule;
|
|
103
|
-
break;
|
|
104
|
-
case 'UpdateOne':
|
|
105
|
-
module = modules_1.UpdateOneModule;
|
|
106
|
-
break;
|
|
107
|
-
default:
|
|
108
|
-
throw new Error(`Route for ${type} is not implemented`);
|
|
109
|
-
}
|
|
110
|
-
const description = routeDescription ?? (0, helpers_1.getDefaultRouteDescription)(type, entity.name);
|
|
111
|
-
const version = routeVersion ?? controllerVersion;
|
|
112
|
-
if (version && !(0, helpers_1.isValidVersion)(version)) {
|
|
113
|
-
throw new Error(`Invalid version ${version} for ${type} route. Version must be a string that matches numeric format, e.g. 1, 2, 3, ..., 99.`);
|
|
114
|
-
}
|
|
115
|
-
const validationPipeOptions = routeValidationPipeOptions ?? controllerValidationPipeOptions;
|
|
116
|
-
return module.forFeature(databaseModule, entity, { path, apiTag }, { description, dTOs }, version, validationPipeOptions);
|
|
117
|
-
})
|
|
118
|
-
.filter((module) => module),
|
|
119
|
-
],
|
|
120
|
-
providers: [
|
|
121
|
-
...(DynamicApiModule_1.isGlobalCacheEnabled ? [
|
|
122
|
-
{
|
|
123
|
-
provide: core_1.APP_INTERCEPTOR,
|
|
124
|
-
useClass: cache_manager_1.CacheInterceptor,
|
|
125
|
-
},
|
|
126
|
-
] : []),
|
|
127
|
-
],
|
|
128
|
-
};
|
|
164
|
+
return routes;
|
|
129
165
|
}
|
|
130
166
|
};
|
|
131
167
|
exports.DynamicApiModule = DynamicApiModule;
|
|
132
|
-
DynamicApiModule.
|
|
133
|
-
|
|
168
|
+
DynamicApiModule.state = new services_1.DynamicApiGlobalStateService({
|
|
169
|
+
connectionName: 'dynamic-api-connection',
|
|
170
|
+
isGlobalCacheEnabled: true,
|
|
171
|
+
isAuthEnabled: false,
|
|
172
|
+
credentials: null,
|
|
173
|
+
jwtSecret: undefined,
|
|
174
|
+
cacheExcludedPaths: [],
|
|
175
|
+
});
|
|
134
176
|
exports.DynamicApiModule = DynamicApiModule = DynamicApiModule_1 = __decorate([
|
|
135
177
|
(0, common_1.Module)({})
|
|
136
178
|
], DynamicApiModule);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { CanActivate, ExecutionContext, Type } from '@nestjs/common';
|
|
2
|
+
import { Reflector } from '@nestjs/core';
|
|
3
|
+
import { DynamicApiRouteCaslAbilityPredicate, RouteType } from '../interfaces';
|
|
4
|
+
import { BaseEntity } from '../models';
|
|
5
|
+
export declare abstract class BasePoliciesGuard<Entity extends BaseEntity> implements CanActivate {
|
|
6
|
+
protected readonly reflector: Reflector;
|
|
7
|
+
protected routeType: RouteType;
|
|
8
|
+
protected entity: Type<Entity>;
|
|
9
|
+
protected abilityPredicate: DynamicApiRouteCaslAbilityPredicate<Entity> | undefined;
|
|
10
|
+
protected constructor(reflector: Reflector);
|
|
11
|
+
canActivate(context: ExecutionContext): boolean;
|
|
12
|
+
private execPolicyHandler;
|
|
13
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BasePoliciesGuard = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const builders_1 = require("../builders");
|
|
6
|
+
const decorators_1 = require("../decorators");
|
|
7
|
+
class BasePoliciesGuard {
|
|
8
|
+
constructor(reflector) {
|
|
9
|
+
this.reflector = reflector;
|
|
10
|
+
}
|
|
11
|
+
canActivate(context) {
|
|
12
|
+
const policyHandlers = this.reflector.get(decorators_1.CHECK_POLICIES_KEY, context.getHandler());
|
|
13
|
+
if (!policyHandlers || !this.abilityPredicate) {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
let { user } = context.switchToHttp().getRequest();
|
|
17
|
+
if (!user) {
|
|
18
|
+
throw new common_1.ForbiddenException('Forbidden resource');
|
|
19
|
+
}
|
|
20
|
+
const ability = (0, builders_1.CaslAbilityBuilder)(this.entity, this.routeType, this.abilityPredicate, user);
|
|
21
|
+
return policyHandlers.every((handler) => {
|
|
22
|
+
return this.execPolicyHandler(handler, ability);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
execPolicyHandler(handler, ability) {
|
|
26
|
+
if (typeof handler === 'function') {
|
|
27
|
+
return handler(ability);
|
|
28
|
+
}
|
|
29
|
+
return handler.handle(ability);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
exports.BasePoliciesGuard = BasePoliciesGuard;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ExecutionContext } from '@nestjs/common';
|
|
2
|
+
import { Reflector } from '@nestjs/core';
|
|
3
|
+
import { DynamicApiGlobalState } from '../interfaces';
|
|
4
|
+
declare const DynamicApiJwtAuthGuard_base: import("@nestjs/passport").Type<import("@nestjs/passport").IAuthGuard>;
|
|
5
|
+
export declare class DynamicApiJwtAuthGuard extends DynamicApiJwtAuthGuard_base {
|
|
6
|
+
private reflector;
|
|
7
|
+
private readonly state;
|
|
8
|
+
constructor(reflector: Reflector, state: DynamicApiGlobalState);
|
|
9
|
+
canActivate(context: ExecutionContext): boolean | Promise<boolean> | import("rxjs").Observable<boolean>;
|
|
10
|
+
}
|
|
11
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.DynamicApiJwtAuthGuard = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const core_1 = require("@nestjs/core");
|
|
15
|
+
const passport_1 = require("@nestjs/passport");
|
|
16
|
+
const decorators_1 = require("../decorators");
|
|
17
|
+
let DynamicApiJwtAuthGuard = class DynamicApiJwtAuthGuard extends (0, passport_1.AuthGuard)('jwt') {
|
|
18
|
+
constructor(reflector, state) {
|
|
19
|
+
super();
|
|
20
|
+
this.reflector = reflector;
|
|
21
|
+
this.state = state;
|
|
22
|
+
}
|
|
23
|
+
canActivate(context) {
|
|
24
|
+
const isPublic = this.reflector.getAllAndOverride(decorators_1.IS_PUBLIC_KEY, [
|
|
25
|
+
context.getHandler(),
|
|
26
|
+
context.getClass(),
|
|
27
|
+
]);
|
|
28
|
+
if (isPublic || !this.state.isAuthEnabled) {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
return super.canActivate(context);
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
exports.DynamicApiJwtAuthGuard = DynamicApiJwtAuthGuard;
|
|
35
|
+
exports.DynamicApiJwtAuthGuard = DynamicApiJwtAuthGuard = __decorate([
|
|
36
|
+
(0, common_1.Injectable)(),
|
|
37
|
+
__metadata("design:paramtypes", [core_1.Reflector, Object])
|
|
38
|
+
], DynamicApiJwtAuthGuard);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./base-policies.guard"), exports);
|
|
18
|
+
__exportStar(require("./dynamic-api-jwt-auth.guard"), exports);
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { DynamicApiControllerCaslAbilityPredicate, DynamicApiRouteCaslAbilityPredicate, RouteType } from '../interfaces';
|
|
2
|
+
import { BaseEntity } from '../models';
|
|
3
|
+
declare function getPredicateFromControllerAbilityPredicates<Entity extends BaseEntity>(controllerAbilityPredicates: DynamicApiControllerCaslAbilityPredicate<Entity>[], route: RouteType): DynamicApiRouteCaslAbilityPredicate<Entity>;
|
|
4
|
+
export { getPredicateFromControllerAbilityPredicates };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPredicateFromControllerAbilityPredicates = void 0;
|
|
4
|
+
function getPredicateFromControllerAbilityPredicates(controllerAbilityPredicates, route) {
|
|
5
|
+
let routePredicate;
|
|
6
|
+
if (!controllerAbilityPredicates?.length) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
for (const controllerAbilityPredicate of controllerAbilityPredicates) {
|
|
10
|
+
const { targets, predicate } = controllerAbilityPredicate;
|
|
11
|
+
if (Array.isArray(targets) && targets.includes(route)) {
|
|
12
|
+
routePredicate = predicate;
|
|
13
|
+
break;
|
|
14
|
+
}
|
|
15
|
+
targets.forEach((routes) => {
|
|
16
|
+
if (routes.includes(route) && !routePredicate) {
|
|
17
|
+
routePredicate = predicate;
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
return routePredicate;
|
|
22
|
+
}
|
|
23
|
+
exports.getPredicateFromControllerAbilityPredicates = getPredicateFromControllerAbilityPredicates;
|
package/src/helpers/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from './format.helper';
|
|
2
2
|
export * from './route-decorators.helper';
|
|
3
3
|
export * from './route-description.helper';
|
|
4
|
+
export * from './schema.helper';
|
|
4
5
|
export * from './swagger-config.helper';
|
|
5
6
|
export * from './validation-config.helper';
|
|
6
7
|
export * from './versioning-config.helper';
|
package/src/helpers/index.js
CHANGED
|
@@ -17,6 +17,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./format.helper"), exports);
|
|
18
18
|
__exportStar(require("./route-decorators.helper"), exports);
|
|
19
19
|
__exportStar(require("./route-description.helper"), exports);
|
|
20
|
+
__exportStar(require("./schema.helper"), exports);
|
|
20
21
|
__exportStar(require("./swagger-config.helper"), exports);
|
|
21
22
|
__exportStar(require("./validation-config.helper"), exports);
|
|
22
23
|
__exportStar(require("./versioning-config.helper"), exports);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DecoratorBuilder } from '../interfaces';
|
|
2
2
|
import { BaseEntity } from '../models';
|
|
3
|
-
declare function RouteDecoratorsHelper<Entity extends BaseEntity>(routeDecorators:
|
|
3
|
+
declare function RouteDecoratorsHelper<Entity extends BaseEntity>(routeDecorators: DecoratorBuilder<Entity>): <TFunction extends Function, Y>(target: object | TFunction, propertyKey?: string | symbol, descriptor?: TypedPropertyDescriptor<Y>) => void;
|
|
4
4
|
export { RouteDecoratorsHelper };
|