mongodb-dynamic-api 2.10.1 → 2.12.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 +14 -0
- package/package.json +1 -1
- package/src/dynamic-api.module.d.ts +1 -1
- package/src/dynamic-api.module.js +2 -2
- package/src/dynamic-api.module.js.map +1 -1
- package/src/gateways/base.gateway.js +2 -2
- package/src/gateways/base.gateway.js.map +1 -1
- package/src/guards/base-policies.guard.d.ts +13 -1
- package/src/guards/base-policies.guard.js +52 -2
- package/src/guards/base-policies.guard.js.map +1 -1
- package/src/guards/index.d.ts +1 -0
- package/src/guards/index.js +1 -0
- package/src/guards/index.js.map +1 -1
- package/src/guards/jwt-socket.guard.d.ts +11 -0
- package/src/guards/jwt-socket.guard.js +70 -0
- package/src/guards/jwt-socket.guard.js.map +1 -0
- package/src/helpers/format.helper.d.ts +1 -1
- package/src/helpers/format.helper.js +1 -1
- package/src/helpers/format.helper.js.map +1 -1
- package/src/index.d.ts +1 -0
- package/src/index.js +1 -0
- package/src/index.js.map +1 -1
- package/src/interfaces/dynamic-api-controller-options.interface.d.ts +2 -1
- package/src/interfaces/dynamic-api-options.interface.d.ts +4 -1
- package/src/interfaces/dynamic-api-options.interface.js.map +1 -1
- package/src/interfaces/dynamic-api-route-config.interface.d.ts +2 -1
- package/src/logger/index.d.ts +1 -0
- package/src/logger/index.js +18 -0
- package/src/logger/index.js.map +1 -0
- package/src/logger/mongo-dynamic-api.logger.d.ts +10 -0
- package/src/logger/mongo-dynamic-api.logger.js +44 -0
- package/src/logger/mongo-dynamic-api.logger.js.map +1 -0
- package/src/mixins/index.d.ts +1 -1
- package/src/mixins/index.js +1 -1
- package/src/mixins/index.js.map +1 -1
- package/src/mixins/policies-guard.mixin.d.ts +7 -0
- package/src/mixins/{create-policies-guard.mixin.js → policies-guard.mixin.js} +28 -4
- package/src/mixins/policies-guard.mixin.js.map +1 -0
- package/src/modules/auth/guards/jwt-socket-auth/jwt-socket-auth.guard.js +2 -1
- package/src/modules/auth/guards/jwt-socket-auth/jwt-socket-auth.guard.js.map +1 -1
- package/src/modules/auth/services/base-auth.service.js +2 -1
- package/src/modules/auth/services/base-auth.service.js.map +1 -1
- package/src/routes/aggregate/aggregate-controller.mixin.js +1 -1
- package/src/routes/aggregate/aggregate-controller.mixin.js.map +1 -1
- package/src/routes/aggregate/aggregate-gateway.mixin.js +7 -3
- package/src/routes/aggregate/aggregate-gateway.mixin.js.map +1 -1
- package/src/routes/create-many/create-many-controller.mixin.d.ts +1 -1
- package/src/routes/create-many/create-many-controller.mixin.js +3 -2
- package/src/routes/create-many/create-many-controller.mixin.js.map +1 -1
- package/src/routes/create-many/create-many-gateway.mixin.d.ts +1 -1
- package/src/routes/create-many/create-many-gateway.mixin.js +9 -4
- package/src/routes/create-many/create-many-gateway.mixin.js.map +1 -1
- package/src/routes/create-many/create-many.helper.d.ts +2 -2
- package/src/routes/create-many/create-many.helper.js +4 -3
- package/src/routes/create-many/create-many.helper.js.map +1 -1
- package/src/routes/create-many/create-many.module.d.ts +2 -2
- package/src/routes/create-many/create-many.module.js +4 -3
- package/src/routes/create-many/create-many.module.js.map +1 -1
- package/src/routes/create-one/create-one-controller.mixin.d.ts +1 -1
- package/src/routes/create-one/create-one-controller.mixin.js +3 -2
- package/src/routes/create-one/create-one-controller.mixin.js.map +1 -1
- package/src/routes/create-one/create-one-gateway.mixin.d.ts +1 -1
- package/src/routes/create-one/create-one-gateway.mixin.js +8 -4
- package/src/routes/create-one/create-one-gateway.mixin.js.map +1 -1
- package/src/routes/create-one/create-one.helper.d.ts +2 -2
- package/src/routes/create-one/create-one.helper.js +4 -3
- package/src/routes/create-one/create-one.helper.js.map +1 -1
- package/src/routes/create-one/create-one.module.d.ts +2 -2
- package/src/routes/create-one/create-one.module.js +4 -3
- package/src/routes/create-one/create-one.module.js.map +1 -1
- package/src/routes/delete-many/delete-many-controller.mixin.d.ts +1 -1
- package/src/routes/delete-many/delete-many-controller.mixin.js +3 -2
- package/src/routes/delete-many/delete-many-controller.mixin.js.map +1 -1
- package/src/routes/delete-many/delete-many-gateway.mixin.d.ts +1 -1
- package/src/routes/delete-many/delete-many-gateway.mixin.js +9 -4
- package/src/routes/delete-many/delete-many-gateway.mixin.js.map +1 -1
- package/src/routes/delete-many/delete-many.helper.d.ts +2 -2
- package/src/routes/delete-many/delete-many.helper.js +4 -3
- package/src/routes/delete-many/delete-many.helper.js.map +1 -1
- package/src/routes/delete-many/delete-many.module.d.ts +2 -2
- package/src/routes/delete-many/delete-many.module.js +4 -3
- package/src/routes/delete-many/delete-many.module.js.map +1 -1
- package/src/routes/delete-one/delete-one-controller.mixin.d.ts +1 -1
- package/src/routes/delete-one/delete-one-controller.mixin.js +3 -2
- package/src/routes/delete-one/delete-one-controller.mixin.js.map +1 -1
- package/src/routes/delete-one/delete-one-gateway.mixin.d.ts +1 -1
- package/src/routes/delete-one/delete-one-gateway.mixin.js +9 -4
- package/src/routes/delete-one/delete-one-gateway.mixin.js.map +1 -1
- package/src/routes/delete-one/delete-one.helper.d.ts +2 -2
- package/src/routes/delete-one/delete-one.helper.js +4 -3
- package/src/routes/delete-one/delete-one.helper.js.map +1 -1
- package/src/routes/delete-one/delete-one.module.d.ts +2 -2
- package/src/routes/delete-one/delete-one.module.js +4 -3
- package/src/routes/delete-one/delete-one.module.js.map +1 -1
- package/src/routes/duplicate-many/duplicate-many-controller.mixin.d.ts +1 -1
- package/src/routes/duplicate-many/duplicate-many-controller.mixin.js +3 -2
- package/src/routes/duplicate-many/duplicate-many-controller.mixin.js.map +1 -1
- package/src/routes/duplicate-many/duplicate-many-gateway.mixin.d.ts +1 -1
- package/src/routes/duplicate-many/duplicate-many-gateway.mixin.js +8 -4
- package/src/routes/duplicate-many/duplicate-many-gateway.mixin.js.map +1 -1
- package/src/routes/duplicate-many/duplicate-many.helper.d.ts +2 -2
- package/src/routes/duplicate-many/duplicate-many.helper.js +4 -3
- package/src/routes/duplicate-many/duplicate-many.helper.js.map +1 -1
- package/src/routes/duplicate-many/duplicate-many.module.d.ts +2 -2
- package/src/routes/duplicate-many/duplicate-many.module.js +4 -3
- package/src/routes/duplicate-many/duplicate-many.module.js.map +1 -1
- package/src/routes/duplicate-one/duplicate-one-controller.mixin.d.ts +1 -1
- package/src/routes/duplicate-one/duplicate-one-controller.mixin.js +3 -2
- package/src/routes/duplicate-one/duplicate-one-controller.mixin.js.map +1 -1
- package/src/routes/duplicate-one/duplicate-one-gateway.mixin.d.ts +1 -1
- package/src/routes/duplicate-one/duplicate-one-gateway.mixin.js +8 -4
- package/src/routes/duplicate-one/duplicate-one-gateway.mixin.js.map +1 -1
- package/src/routes/duplicate-one/duplicate-one.helper.d.ts +2 -2
- package/src/routes/duplicate-one/duplicate-one.helper.js +4 -3
- package/src/routes/duplicate-one/duplicate-one.helper.js.map +1 -1
- package/src/routes/duplicate-one/duplicate-one.module.d.ts +2 -2
- package/src/routes/duplicate-one/duplicate-one.module.js +4 -3
- package/src/routes/duplicate-one/duplicate-one.module.js.map +1 -1
- package/src/routes/get-many/get-many-controller.mixin.d.ts +1 -1
- package/src/routes/get-many/get-many-controller.mixin.js +3 -2
- package/src/routes/get-many/get-many-controller.mixin.js.map +1 -1
- package/src/routes/get-many/get-many-gateway.mixin.d.ts +1 -1
- package/src/routes/get-many/get-many-gateway.mixin.js +8 -4
- package/src/routes/get-many/get-many-gateway.mixin.js.map +1 -1
- package/src/routes/get-many/get-many.helper.d.ts +2 -2
- package/src/routes/get-many/get-many.helper.js +4 -3
- package/src/routes/get-many/get-many.helper.js.map +1 -1
- package/src/routes/get-many/get-many.module.d.ts +2 -2
- package/src/routes/get-many/get-many.module.js +4 -3
- package/src/routes/get-many/get-many.module.js.map +1 -1
- package/src/routes/get-one/get-one-controller.mixin.d.ts +1 -1
- package/src/routes/get-one/get-one-controller.mixin.js +3 -2
- package/src/routes/get-one/get-one-controller.mixin.js.map +1 -1
- package/src/routes/get-one/get-one-gateway.mixin.d.ts +1 -1
- package/src/routes/get-one/get-one-gateway.mixin.js +8 -4
- package/src/routes/get-one/get-one-gateway.mixin.js.map +1 -1
- package/src/routes/get-one/get-one.helper.d.ts +2 -2
- package/src/routes/get-one/get-one.helper.js +4 -3
- package/src/routes/get-one/get-one.helper.js.map +1 -1
- package/src/routes/get-one/get-one.module.d.ts +2 -2
- package/src/routes/get-one/get-one.module.js +4 -3
- package/src/routes/get-one/get-one.module.js.map +1 -1
- package/src/routes/replace-one/replace-one-controller.mixin.d.ts +1 -1
- package/src/routes/replace-one/replace-one-controller.mixin.js +3 -2
- package/src/routes/replace-one/replace-one-controller.mixin.js.map +1 -1
- package/src/routes/replace-one/replace-one-gateway.mixin.d.ts +1 -1
- package/src/routes/replace-one/replace-one-gateway.mixin.js +8 -4
- package/src/routes/replace-one/replace-one-gateway.mixin.js.map +1 -1
- package/src/routes/replace-one/replace-one.helper.d.ts +2 -2
- package/src/routes/replace-one/replace-one.helper.js +4 -3
- package/src/routes/replace-one/replace-one.helper.js.map +1 -1
- package/src/routes/replace-one/replace-one.module.d.ts +2 -2
- package/src/routes/replace-one/replace-one.module.js +4 -3
- package/src/routes/replace-one/replace-one.module.js.map +1 -1
- package/src/routes/update-many/update-many-controller.mixin.d.ts +1 -1
- package/src/routes/update-many/update-many-controller.mixin.js +3 -2
- package/src/routes/update-many/update-many-controller.mixin.js.map +1 -1
- package/src/routes/update-many/update-many-gateway.mixin.d.ts +1 -1
- package/src/routes/update-many/update-many-gateway.mixin.js +8 -4
- package/src/routes/update-many/update-many-gateway.mixin.js.map +1 -1
- package/src/routes/update-many/update-many.helper.d.ts +2 -2
- package/src/routes/update-many/update-many.helper.js +4 -3
- package/src/routes/update-many/update-many.helper.js.map +1 -1
- package/src/routes/update-many/update-many.module.d.ts +2 -2
- package/src/routes/update-many/update-many.module.js +4 -3
- package/src/routes/update-many/update-many.module.js.map +1 -1
- package/src/routes/update-one/update-one-controller.mixin.d.ts +1 -1
- package/src/routes/update-one/update-one-controller.mixin.js +3 -2
- package/src/routes/update-one/update-one-controller.mixin.js.map +1 -1
- package/src/routes/update-one/update-one-gateway.mixin.d.ts +1 -1
- package/src/routes/update-one/update-one-gateway.mixin.js +8 -4
- package/src/routes/update-one/update-one-gateway.mixin.js.map +1 -1
- package/src/routes/update-one/update-one.helper.d.ts +2 -2
- package/src/routes/update-one/update-one.helper.js +4 -3
- package/src/routes/update-one/update-one.helper.js.map +1 -1
- package/src/routes/update-one/update-one.module.d.ts +2 -2
- package/src/routes/update-one/update-one.module.js +4 -3
- package/src/routes/update-one/update-one.module.js.map +1 -1
- package/src/services/base/base.service.d.ts +1 -0
- package/src/services/base/base.service.js +22 -0
- package/src/services/base/base.service.js.map +1 -1
- package/src/version.json +1 -1
- package/test/dynamic-api-for-feature.e2e-spec.js +0 -26
- package/test/dynamic-api-for-feature.e2e-spec.js.map +1 -1
- package/tsconfig.tsbuildinfo +1 -1
- package/src/mixins/create-policies-guard.mixin.d.ts +0 -6
- package/src/mixins/create-policies-guard.mixin.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
Changelog
|
|
2
2
|
|
|
3
|
+
## [2.12.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v2.11.0...v2.12.0) (2025-10-19)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### interceptors
|
|
7
|
+
|
|
8
|
+
* **interceptors:** add the possibility to use class/method interceptors ([977f3de](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/977f3deccabaf4d5a87f76eca5c9012ab05c3d48))
|
|
9
|
+
|
|
10
|
+
## [2.11.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v2.10.1...v2.11.0) (2025-07-27)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### socket
|
|
14
|
+
|
|
15
|
+
* **socket:** add policies guard mixin ([bc739b4](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/bc739b4b8ea5e026fc93a5c70e1dfae454323c4f))
|
|
16
|
+
|
|
3
17
|
## [2.10.1](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v2.10.0...v2.10.1) (2025-07-19)
|
|
4
18
|
|
|
5
19
|
## [2.10.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v2.9.0...v2.10.0) (2025-02-22)
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@ import { DynamicApiGlobalStateService } from './services';
|
|
|
5
5
|
export declare class DynamicApiModule {
|
|
6
6
|
static readonly state: DynamicApiGlobalStateService;
|
|
7
7
|
static forRoot<Entity extends BaseEntity = any>(uri: string, { useGlobalCache, cacheOptions, useAuth, routesConfig, webSocket, }?: DynamicApiForRootOptions<Entity>): DynamicModule;
|
|
8
|
-
static forFeature<Entity extends BaseEntity>({ entity, controllerOptions, routes, webSocket: featureWebSocket, }: DynamicApiForFeatureOptions<Entity>): Promise<DynamicModule>;
|
|
8
|
+
static forFeature<Entity extends BaseEntity>({ entity, controllerOptions, routes, webSocket: featureWebSocket, extraImports, extraProviders, extraControllers, }: DynamicApiForFeatureOptions<Entity>): Promise<DynamicModule>;
|
|
9
9
|
private static buildStateFromOptions;
|
|
10
10
|
private static setDefaultRoutes;
|
|
11
11
|
}
|
|
@@ -42,7 +42,7 @@ let DynamicApiModule = DynamicApiModule_1 = class DynamicApiModule {
|
|
|
42
42
|
exports: [modules_1.DynamicApiConfigModule],
|
|
43
43
|
};
|
|
44
44
|
}
|
|
45
|
-
static forFeature({ entity, controllerOptions, routes, webSocket: featureWebSocket, }) {
|
|
45
|
+
static forFeature({ entity, controllerOptions, routes, webSocket: featureWebSocket, extraImports, extraProviders, extraControllers, }) {
|
|
46
46
|
const schema = (0, helpers_1.buildSchemaFromEntity)(entity);
|
|
47
47
|
const databaseModule = mongoose_1.MongooseModule.forFeature([{ name: entity.name, schema }], this.state.get('connectionName'));
|
|
48
48
|
services_1.DynamicApiGlobalStateService.addEntitySchema(entity, schema);
|
|
@@ -89,7 +89,7 @@ let DynamicApiModule = DynamicApiModule_1 = class DynamicApiModule {
|
|
|
89
89
|
return;
|
|
90
90
|
}
|
|
91
91
|
const validationPipeOptions = routeValidationPipeOptions ?? controllerValidationPipeOptions;
|
|
92
|
-
return module.forFeature(databaseModule, entity, controllerOptions, { ...routeConfig, description }, version, validationPipeOptions ?? { transform: true }, routeWebSocket ?? featureWebSocket);
|
|
92
|
+
return module.forFeature(databaseModule, entity, controllerOptions, { ...routeConfig, description }, version, validationPipeOptions ?? { transform: true }, routeWebSocket ?? featureWebSocket, extraImports, extraProviders, extraControllers);
|
|
93
93
|
}),
|
|
94
94
|
],
|
|
95
95
|
providers: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-api.module.js","sourceRoot":"","sources":["../../libs/dynamic-api/src/dynamic-api.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,yDAAmE;AACnE,2CAAuD;AACvD,uCAAqE;AACrE,8EAAyE;AACzE,+CAAkD;AAElD,qCAAkD;AAClD,uCAKmB;AACnB,iDAA4D;AAC5D,6CAWsB;AAEtB,uCAAsF;AACtF,qCAYkB;AAClB,yCAA0D;AAQnD,IAAM,gBAAgB,wBAAtB,MAAM,gBAAgB;IAc3B,MAAM,CAAC,OAAO,CACZ,GAAW,EACX,EACE,cAAc,GAAG,IAAI,EACrB,YAAY,GAAG,EAAE,EACjB,OAAO,EACP,YAAY,EACZ,SAAS,MAC2B,EAAE;QAExC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CACb,uFAAuF,CACxF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;YACb,SAAS;YACT,IAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,CAAC;SAChG,CAAC,CAAC;QAEH,OAAO;YACL,MAAM,EAAE,kBAAgB;YACxB,OAAO,EAAE;gBACP,gCAAsB,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;gBACjD,2BAAW,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,YAAY,EAAE,CAAC;gBACzD,yBAAc,CAAC,OAAO,CACpB,GAAG,EACH,EAAE,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CACrD;gBACD,GAAG,CACD,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;oBACpB,oBAAU,CAAC,OAAO,CAAS,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,SAAS,EAAE,CAAC;iBACtF,CAAC,CAAC,CAAC,EAAE,CACP;aACF;YACD,OAAO,EAAE,CAAC,gCAAsB,CAAC;SAClC,CAAC;IACJ,CAAC;IAQD,MAAM,CAAC,UAAU,CAA4B,EAC3C,MAAM,EACN,iBAAiB,EACjB,MAAM,EACN,SAAS,EAAE,gBAAgB,
|
|
1
|
+
{"version":3,"file":"dynamic-api.module.js","sourceRoot":"","sources":["../../libs/dynamic-api/src/dynamic-api.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.BaseGateway = void 0;
|
|
4
|
-
const common_1 = require("@nestjs/common");
|
|
5
4
|
const websockets_1 = require("@nestjs/websockets");
|
|
6
5
|
const lodash_1 = require("lodash");
|
|
7
6
|
const dynamic_api_module_1 = require("../dynamic-api.module");
|
|
7
|
+
const logger_1 = require("../logger");
|
|
8
8
|
class BaseGateway {
|
|
9
9
|
constructor(jwtService) {
|
|
10
10
|
this.jwtService = jwtService;
|
|
11
|
-
this.logger = new
|
|
11
|
+
this.logger = new logger_1.MongoDBDynamicApiLogger(BaseGateway.name);
|
|
12
12
|
}
|
|
13
13
|
addUserToSocket(socket, isPublic) {
|
|
14
14
|
const isAuthEnabled = dynamic_api_module_1.DynamicApiModule.state.get('isAuthEnabled');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.gateway.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/gateways/base.gateway.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"base.gateway.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/gateways/base.gateway.ts"],"names":[],"mappings":";;;AACA,mDAAiD;AACjD,mCAAiC;AAEjC,8DAAyD;AAEzD,sCAAoD;AAGpD,MAAsB,WAAW;IAG/B,YAAyC,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;QAF9C,WAAM,GAAG,IAAI,gCAAuB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAEN,CAAC;IAEzD,eAAe,CAAC,MAA8B,EAAE,QAAiB;QACzE,MAAM,aAAa,GAAG,qCAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAElE,IAAI,CAAC,aAAa,IAAI,QAAQ,EAAE,CAAC;YAC/B,OAAO;QACT,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,WAAqB,CAAC;QACjE,IAAI,QAAyD,CAAC;QAE9D,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE;oBAC7C,MAAM,EAAE,qCAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;iBAChD,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;gBACzC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YACxC,CAAC;YAGD,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,QAAQ,IAAI,EAAE,CAAC;YAE7C,MAAM,CAAC,IAAI,GAAG,CAAC,IAAA,gBAAO,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAyB,CAAC,CAAC,CAAC,SAAS,CAAC;QACvE,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,QAAQ,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;YACzD,OAAO;QACT,CAAC;QAED,MAAM,IAAI,wBAAW,CAAC,cAAc,CAAC,CAAC;IACxC,CAAC;IAES,eAAe,CAAmB,IAAO;QACjD,OAAO,OAAO,CAAC,KAAK,IAAI,IAAI;YAC1B,KAAK,CAAC,OAAO,CACX,IACD,CAAC,GAAG,CAAC;YAEJ,IACD,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAClB,CAAC;CACF;AA/CD,kCA+CC"}
|
|
@@ -28,7 +28,7 @@ import { Model } from 'mongoose';
|
|
|
28
28
|
import { AbilityPredicate, RouteType } from '../interfaces';
|
|
29
29
|
import { BaseEntity } from '../models';
|
|
30
30
|
import { BaseService } from '../services';
|
|
31
|
-
|
|
31
|
+
declare abstract class BasePoliciesGuard<Entity extends BaseEntity> extends BaseService<Entity> implements CanActivate {
|
|
32
32
|
protected readonly model: Model<Entity>;
|
|
33
33
|
protected routeType: RouteType;
|
|
34
34
|
protected entity: Type<Entity>;
|
|
@@ -37,3 +37,15 @@ export declare abstract class BasePoliciesGuard<Entity extends BaseEntity> exten
|
|
|
37
37
|
protected constructor(model: Model<Entity>);
|
|
38
38
|
canActivate(context: ExecutionContext): Promise<boolean>;
|
|
39
39
|
}
|
|
40
|
+
declare abstract class BaseSocketPoliciesGuard<Entity extends BaseEntity> extends BaseService<Entity> implements CanActivate {
|
|
41
|
+
protected readonly model: Model<Entity>;
|
|
42
|
+
protected routeType: RouteType;
|
|
43
|
+
protected abilityPredicate: AbilityPredicate<Entity> | undefined;
|
|
44
|
+
protected entity: Type<Entity>;
|
|
45
|
+
protected queryToPipeline?: (query: unknown) => PipelineStage[];
|
|
46
|
+
protected isPublic: boolean | undefined;
|
|
47
|
+
private logger;
|
|
48
|
+
protected constructor(model: Model<Entity>);
|
|
49
|
+
canActivate(context: ExecutionContext): Promise<boolean>;
|
|
50
|
+
}
|
|
51
|
+
export { BasePoliciesGuard, BaseSocketPoliciesGuard };
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BasePoliciesGuard = void 0;
|
|
3
|
+
exports.BaseSocketPoliciesGuard = exports.BasePoliciesGuard = void 0;
|
|
4
4
|
const common_1 = require("@nestjs/common");
|
|
5
|
+
const websockets_1 = require("@nestjs/websockets");
|
|
6
|
+
const logger_1 = require("../logger");
|
|
5
7
|
const services_1 = require("../services");
|
|
6
8
|
class BasePoliciesGuard extends services_1.BaseService {
|
|
7
9
|
constructor(model) {
|
|
@@ -9,7 +11,7 @@ class BasePoliciesGuard extends services_1.BaseService {
|
|
|
9
11
|
this.model = model;
|
|
10
12
|
}
|
|
11
13
|
async canActivate(context) {
|
|
12
|
-
|
|
14
|
+
const { user, query, params } = context.switchToHttp().getRequest();
|
|
13
15
|
if (this.abilityPredicate) {
|
|
14
16
|
if (!user) {
|
|
15
17
|
throw new common_1.ForbiddenException('Access Denied');
|
|
@@ -29,4 +31,52 @@ class BasePoliciesGuard extends services_1.BaseService {
|
|
|
29
31
|
}
|
|
30
32
|
}
|
|
31
33
|
exports.BasePoliciesGuard = BasePoliciesGuard;
|
|
34
|
+
class BaseSocketPoliciesGuard extends services_1.BaseService {
|
|
35
|
+
constructor(model) {
|
|
36
|
+
super(model);
|
|
37
|
+
this.model = model;
|
|
38
|
+
}
|
|
39
|
+
async canActivate(context) {
|
|
40
|
+
this.logger = new logger_1.MongoDBDynamicApiLogger(`SocketPoliciesGuard-${this.routeType}-${this.entity?.name}`);
|
|
41
|
+
const [socket, data, _, _event] = context.getArgs();
|
|
42
|
+
this.logger.debug('canActivate', {
|
|
43
|
+
socketId: socket.id,
|
|
44
|
+
socketUser: socket.user,
|
|
45
|
+
data,
|
|
46
|
+
event: _event,
|
|
47
|
+
isPublic: this.isPublic,
|
|
48
|
+
abilityPredicate: !!this.abilityPredicate,
|
|
49
|
+
});
|
|
50
|
+
if (!this.isPublic) {
|
|
51
|
+
if (!socket.user) {
|
|
52
|
+
this.logger.warn('No user data in socket');
|
|
53
|
+
throw new websockets_1.WsException('Access Denied');
|
|
54
|
+
}
|
|
55
|
+
if (this.abilityPredicate) {
|
|
56
|
+
try {
|
|
57
|
+
this.user = socket.user;
|
|
58
|
+
const { id } = data || {};
|
|
59
|
+
if (id) {
|
|
60
|
+
this.logger.debug(`Finding one document with id: ${id} and ability predicate`);
|
|
61
|
+
await this.findOneDocumentWithAbilityPredicate(id);
|
|
62
|
+
}
|
|
63
|
+
else if (this.routeType === 'Aggregate' && data && this.queryToPipeline) {
|
|
64
|
+
this.logger.debug('Aggregating documents with ability predicate');
|
|
65
|
+
await this.aggregateDocumentsWithAbilityPredicate(this.queryToPipeline(data));
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
this.logger.debug('Finding many documents with ability predicate');
|
|
69
|
+
await this.findManyDocumentsWithAbilityPredicate(data);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
this.logger.error('Error in canActivate', error);
|
|
74
|
+
throw new websockets_1.WsException(error.message);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.BaseSocketPoliciesGuard = BaseSocketPoliciesGuard;
|
|
32
82
|
//# sourceMappingURL=base-policies.guard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-policies.guard.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/guards/base-policies.guard.ts"],"names":[],"mappings":";;;AAAA,2CAAyF;
|
|
1
|
+
{"version":3,"file":"base-policies.guard.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/guards/base-policies.guard.ts"],"names":[],"mappings":"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"}
|
package/src/guards/index.d.ts
CHANGED
package/src/guards/index.js
CHANGED
|
@@ -16,4 +16,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./base-policies.guard"), exports);
|
|
18
18
|
__exportStar(require("./dynamic-api-jwt-auth.guard"), exports);
|
|
19
|
+
__exportStar(require("./jwt-socket.guard"), exports);
|
|
19
20
|
//# sourceMappingURL=index.js.map
|
package/src/guards/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/guards/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,+DAA6C"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/guards/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,+DAA6C;AAC7C,qDAAmC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CanActivate, ExecutionContext } from '@nestjs/common';
|
|
2
|
+
import { Socket } from 'socket.io';
|
|
3
|
+
export declare class JwtSocketGuard implements CanActivate {
|
|
4
|
+
protected readonly isPublic: boolean;
|
|
5
|
+
private readonly logger;
|
|
6
|
+
constructor(isPublic?: boolean);
|
|
7
|
+
canActivate(context: ExecutionContext): Promise<boolean>;
|
|
8
|
+
protected getUserFromSocket(socket: Socket): Promise<unknown>;
|
|
9
|
+
private getAccessTokenFromSocketQuery;
|
|
10
|
+
private extractUserFromToken;
|
|
11
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.JwtSocketGuard = void 0;
|
|
4
|
+
const jwt_1 = require("@nestjs/jwt");
|
|
5
|
+
const websockets_1 = require("@nestjs/websockets");
|
|
6
|
+
const lodash_1 = require("lodash");
|
|
7
|
+
const dynamic_api_module_1 = require("../dynamic-api.module");
|
|
8
|
+
const logger_1 = require("../logger");
|
|
9
|
+
class JwtSocketGuard {
|
|
10
|
+
constructor(isPublic = false) {
|
|
11
|
+
this.isPublic = isPublic;
|
|
12
|
+
this.logger = new logger_1.MongoDBDynamicApiLogger(JwtSocketGuard.name);
|
|
13
|
+
}
|
|
14
|
+
async canActivate(context) {
|
|
15
|
+
const [socket] = context.getArgs();
|
|
16
|
+
this.logger.debug('canActivate', {
|
|
17
|
+
isPublic: this.isPublic,
|
|
18
|
+
socketId: socket?.id,
|
|
19
|
+
});
|
|
20
|
+
if (!this.isPublic) {
|
|
21
|
+
this.logger.debug('Checking user from socket query');
|
|
22
|
+
const user = await this.getUserFromSocket(socket);
|
|
23
|
+
if ((0, lodash_1.isEmpty)(user)) {
|
|
24
|
+
this.logger.warn('No user data');
|
|
25
|
+
throw new websockets_1.WsException('Unauthorized');
|
|
26
|
+
}
|
|
27
|
+
socket.user = user;
|
|
28
|
+
}
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
async getUserFromSocket(socket) {
|
|
32
|
+
const accessToken = this.getAccessTokenFromSocketQuery(socket);
|
|
33
|
+
return this.extractUserFromToken(accessToken);
|
|
34
|
+
}
|
|
35
|
+
getAccessTokenFromSocketQuery(socket) {
|
|
36
|
+
const accessToken = socket.handshake.query.accessToken;
|
|
37
|
+
this.logger.debug('getAccessTokenFromSocketQuery', {
|
|
38
|
+
accessToken: !!accessToken,
|
|
39
|
+
});
|
|
40
|
+
if (!accessToken) {
|
|
41
|
+
this.logger.warn('No access token provided in socket query');
|
|
42
|
+
throw new websockets_1.WsException('Unauthorized');
|
|
43
|
+
}
|
|
44
|
+
return accessToken;
|
|
45
|
+
}
|
|
46
|
+
async extractUserFromToken(accessToken) {
|
|
47
|
+
this.logger.debug('extractUserFromToken', { accessToken: !!accessToken });
|
|
48
|
+
const jwtService = new jwt_1.JwtService({
|
|
49
|
+
secret: dynamic_api_module_1.DynamicApiModule.state.get('jwtSecret'),
|
|
50
|
+
signOptions: {
|
|
51
|
+
expiresIn: dynamic_api_module_1.DynamicApiModule.state.get('jwtExpirationTime'),
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
try {
|
|
55
|
+
const { iat, exp, ...user } = await jwtService.verifyAsync(accessToken, {
|
|
56
|
+
secret: dynamic_api_module_1.DynamicApiModule.state.get('jwtSecret'),
|
|
57
|
+
ignoreExpiration: false,
|
|
58
|
+
});
|
|
59
|
+
this.logger.debug('User extracted from token', { userEmail: user?.email });
|
|
60
|
+
return user;
|
|
61
|
+
}
|
|
62
|
+
catch (e) {
|
|
63
|
+
this.logger.warn('extractUserFromToken jwtService.verify error');
|
|
64
|
+
this.logger.warn(e.message);
|
|
65
|
+
throw new websockets_1.WsException('Unauthorized');
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.JwtSocketGuard = JwtSocketGuard;
|
|
70
|
+
//# sourceMappingURL=jwt-socket.guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jwt-socket.guard.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/guards/jwt-socket.guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import { RouteType } from '../interfaces';
|
|
|
2
2
|
declare function pascalCase(str?: string): string;
|
|
3
3
|
declare function isValidVersion(version: string): boolean;
|
|
4
4
|
declare function getDisplayedName(apiTag: string | undefined, entityName: string, subPath: string | undefined): string;
|
|
5
|
-
declare function provideName(routeType: RouteType, displayedName: string, version: string | undefined, suffix: 'Service' | 'Controller' | 'PoliciesGuard' | 'Gateway'): string;
|
|
5
|
+
declare function provideName(routeType: RouteType, displayedName: string, version: string | undefined, suffix: 'Service' | 'Controller' | 'PoliciesGuard' | 'Gateway' | 'SocketPoliciesGuard'): string;
|
|
6
6
|
declare function isEmptyObject(obj?: unknown): boolean;
|
|
7
7
|
declare function isNotEmptyObject(obj?: unknown): boolean;
|
|
8
8
|
export { pascalCase, isValidVersion, getDisplayedName, provideName, isEmptyObject, isNotEmptyObject, };
|
|
@@ -4,7 +4,7 @@ exports.isNotEmptyObject = exports.isEmptyObject = exports.provideName = exports
|
|
|
4
4
|
const lodash_1 = require("lodash");
|
|
5
5
|
const versioning_config_helper_1 = require("./versioning-config.helper");
|
|
6
6
|
function getNamePrefix(routeType, displayedName, version) {
|
|
7
|
-
return `${routeType}${displayedName}${(0, versioning_config_helper_1.addVersionSuffix)(version)}`;
|
|
7
|
+
return `${routeType}${displayedName}${version ? (0, versioning_config_helper_1.addVersionSuffix)(version) : ''}`;
|
|
8
8
|
}
|
|
9
9
|
function pascalCase(str) {
|
|
10
10
|
return str ? (0, lodash_1.upperFirst)((0, lodash_1.camelCase)(str)) : undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.helper.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/helpers/format.helper.ts"],"names":[],"mappings":";;;AAAA,mCAA+C;AAE/C,yEAA8D;AAE9D,SAAS,aAAa,CAAC,SAAoB,EAAE,aAAqB,EAAE,OAA2B;IAC7F,OAAO,GAAG,SAAS,GAAG,aAAa,GAAG,IAAA,2CAAgB,EAAC,OAAO,CAAC,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"format.helper.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/helpers/format.helper.ts"],"names":[],"mappings":";;;AAAA,mCAA+C;AAE/C,yEAA8D;AAE9D,SAAS,aAAa,CAAC,SAAoB,EAAE,aAAqB,EAAE,OAA2B;IAC7F,OAAO,GAAG,SAAS,GAAG,aAAa,GAAG,OAAO,CAAC,CAAC,CAAC,IAAA,2CAAgB,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AACnF,CAAC;AAED,SAAS,UAAU,CAAC,GAAY;IAC9B,OAAO,GAAG,CAAC,CAAC,CAAC,IAAA,mBAAU,EAAC,IAAA,kBAAS,EAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACtD,CAAC;AA4BC,gCAAU;AA1BZ,SAAS,cAAc,CAAC,OAAe;IACrC,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC/B,CAAC;AAyBC,wCAAc;AAvBhB,SAAS,gBAAgB,CAAC,MAA0B,EAAE,UAAkB,EAAE,OAA2B;IACnG,OAAO,UAAU,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,IAAI,UAAU,EAAE,CAAC,CAAC;AAC9E,CAAC;AAsBC,4CAAgB;AApBlB,SAAS,WAAW,CAClB,SAAoB,EACpB,aAAqB,EACrB,OAA2B,EAC3B,MAAsF;IAEtF,OAAO,GAAG,aAAa,CAAC,SAAS,EAAE,aAAa,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC;AACxE,CAAC;AAcC,kCAAW;AAZb,SAAS,aAAa,CAAC,GAAa;IAClC,OAAO,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/E,CAAC;AAWC,sCAAa;AATf,SAAS,gBAAgB,CAAC,GAAa;IACrC,OAAO,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAQC,4CAAgB"}
|
package/src/index.d.ts
CHANGED
package/src/index.js
CHANGED
|
@@ -23,6 +23,7 @@ __exportStar(require("./guards"), exports);
|
|
|
23
23
|
__exportStar(require("./helpers"), exports);
|
|
24
24
|
__exportStar(require("./interceptors"), exports);
|
|
25
25
|
__exportStar(require("./interfaces"), exports);
|
|
26
|
+
__exportStar(require("./logger"), exports);
|
|
26
27
|
__exportStar(require("./mixins"), exports);
|
|
27
28
|
__exportStar(require("./models"), exports);
|
|
28
29
|
__exportStar(require("./routes"), exports);
|
package/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../libs/dynamic-api/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,+CAA6B;AAC7B,yCAAuB;AACvB,4CAA0B;AAC1B,6CAA2B;AAC3B,2CAAyB;AACzB,4CAA0B;AAC1B,iDAA+B;AAC/B,+CAA6B;AAC7B,2CAAyB;AACzB,2CAAyB;AACzB,2CAAyB;AACzB,6CAA2B;AAC3B,0CAAwB;AACxB,uDAAqC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../libs/dynamic-api/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6CAA2B;AAC3B,+CAA6B;AAC7B,yCAAuB;AACvB,4CAA0B;AAC1B,6CAA2B;AAC3B,2CAAyB;AACzB,4CAA0B;AAC1B,iDAA+B;AAC/B,+CAA6B;AAC7B,2CAAyB;AACzB,2CAAyB;AACzB,2CAAyB;AACzB,2CAAyB;AACzB,6CAA2B;AAC3B,0CAAwB;AACxB,uDAAqC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ValidationPipeOptions } from '@nestjs/common';
|
|
1
|
+
import { NestInterceptor, Type, ValidationPipeOptions } from '@nestjs/common';
|
|
2
2
|
import { BaseEntity } from '../models';
|
|
3
3
|
import { ControllerAbilityPredicate } from './dynamic-api-ability.interface';
|
|
4
4
|
import { RoutesConfig } from './dynamic-api-global-state.interface';
|
|
@@ -10,5 +10,6 @@ interface DynamicApiControllerOptions<Entity extends BaseEntity> {
|
|
|
10
10
|
validationPipeOptions?: ValidationPipeOptions;
|
|
11
11
|
abilityPredicates?: ControllerAbilityPredicate<Entity>[];
|
|
12
12
|
routesConfig?: Partial<RoutesConfig>;
|
|
13
|
+
useInterceptors?: Type<NestInterceptor>[];
|
|
13
14
|
}
|
|
14
15
|
export { DynamicApiControllerOptions };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Type } from '@nestjs/common';
|
|
1
|
+
import { ModuleMetadata, Type } from '@nestjs/common';
|
|
2
2
|
import { BaseEntity } from '../models';
|
|
3
3
|
import { DynamicApiAuthOptions } from '../modules';
|
|
4
4
|
import { DynamicApiControllerOptions } from './dynamic-api-controller-options.interface';
|
|
@@ -19,5 +19,8 @@ interface DynamicApiForFeatureOptions<Entity extends BaseEntity> {
|
|
|
19
19
|
controllerOptions: DynamicApiControllerOptions<Entity>;
|
|
20
20
|
routes?: DynamicAPIRouteConfig<Entity>[];
|
|
21
21
|
webSocket?: DynamicApiWebSocketOptions;
|
|
22
|
+
extraImports?: ModuleMetadata['imports'];
|
|
23
|
+
extraProviders?: ModuleMetadata['providers'];
|
|
24
|
+
extraControllers?: ModuleMetadata['controllers'];
|
|
22
25
|
}
|
|
23
26
|
export { DynamicApiForFeatureOptions, DynamicApiForRootOptions, DYNAMIC_API_GLOBAL_STATE };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-api-options.interface.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/interfaces/dynamic-api-options.interface.ts"],"names":[],"mappings":";;;AASA,MAAM,wBAAwB,GAAG,MAAM,CAAC,0BAA0B,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"dynamic-api-options.interface.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/interfaces/dynamic-api-options.interface.ts"],"names":[],"mappings":";;;AASA,MAAM,wBAAwB,GAAG,MAAM,CAAC,0BAA0B,CAAC,CAAC;AAoBJ,4DAAwB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ValidationPipeOptions } from '@nestjs/common';
|
|
1
|
+
import { NestInterceptor, Type, ValidationPipeOptions } from '@nestjs/common';
|
|
2
2
|
import { BaseEntity } from '../models';
|
|
3
3
|
import { AbilityPredicate } from './dynamic-api-ability.interface';
|
|
4
4
|
import { DTOsBundle } from './dynamic-api-route-dtos-bundle.type';
|
|
@@ -20,5 +20,6 @@ interface DynamicAPIRouteConfig<Entity extends BaseEntity> {
|
|
|
20
20
|
webSocket?: DynamicApiWebSocketOptions;
|
|
21
21
|
eventName?: string;
|
|
22
22
|
isArrayResponse?: boolean;
|
|
23
|
+
useInterceptors?: Type<NestInterceptor>[];
|
|
23
24
|
}
|
|
24
25
|
export { DynamicAPIRouteConfig };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './mongo-dynamic-api.logger';
|
|
@@ -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("./mongo-dynamic-api.logger"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/logger/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,6DAA2C"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Logger } from '@nestjs/common';
|
|
2
|
+
export declare class MongoDBDynamicApiLogger extends Logger {
|
|
3
|
+
private readonly isEnabled;
|
|
4
|
+
private readonly logLevel;
|
|
5
|
+
constructor(context: string);
|
|
6
|
+
debug(...args: Logger['debug']['arguments']): void;
|
|
7
|
+
log(...args: Logger['log']['arguments']): void;
|
|
8
|
+
warn(...args: Logger['warn']['arguments']): void;
|
|
9
|
+
error(...args: Logger['error']['arguments']): void;
|
|
10
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MongoDBDynamicApiLogger = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const process = require("node:process");
|
|
6
|
+
const logLevelsDictionary = {
|
|
7
|
+
debug: ['DEBUG'],
|
|
8
|
+
log: ['INFO', 'DEBUG'],
|
|
9
|
+
warn: ['WARN', 'INFO', 'DEBUG'],
|
|
10
|
+
error: ['ERROR', 'WARN', 'INFO', 'DEBUG'],
|
|
11
|
+
};
|
|
12
|
+
class MongoDBDynamicApiLogger extends common_1.Logger {
|
|
13
|
+
constructor(context) {
|
|
14
|
+
super(context);
|
|
15
|
+
this.isEnabled = !!process.env.MONGODB_DYNAMIC_API_LOGGER;
|
|
16
|
+
this.logLevel = (process.env.MONGODB_DYNAMIC_API_LOGGER || 'ERROR');
|
|
17
|
+
}
|
|
18
|
+
debug(...args) {
|
|
19
|
+
if (!this.isEnabled || !logLevelsDictionary['debug'].includes(this.logLevel)) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
super.debug(...args);
|
|
23
|
+
}
|
|
24
|
+
log(...args) {
|
|
25
|
+
if (!this.isEnabled || !logLevelsDictionary['log'].includes(this.logLevel)) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
super.log(...args);
|
|
29
|
+
}
|
|
30
|
+
warn(...args) {
|
|
31
|
+
if (!this.isEnabled || !logLevelsDictionary['warn'].includes(this.logLevel)) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
super.warn(...args);
|
|
35
|
+
}
|
|
36
|
+
error(...args) {
|
|
37
|
+
if (!this.isEnabled || !logLevelsDictionary['error'].includes(this.logLevel)) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
super.error(...args);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.MongoDBDynamicApiLogger = MongoDBDynamicApiLogger;
|
|
44
|
+
//# sourceMappingURL=mongo-dynamic-api.logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongo-dynamic-api.logger.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/logger/mongo-dynamic-api.logger.ts"],"names":[],"mappings":";;;AAAA,2CAAwC;AACxC,wCAAwC;AAKxC,MAAM,mBAAmB,GAAuE;IAC9F,KAAK,EAAE,CAAC,OAAO,CAAC;IAChB,GAAG,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;IACtB,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;IAC/B,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC;CAC1C,CAAA;AAED,MAAa,uBAAwB,SAAQ,eAAM;IAIjD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QAJA,cAAS,GAAY,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;QAC9D,aAAQ,GAA8B,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,IAAI,OAAO,CAA8B,CAAC;IAIxI,CAAC;IAED,KAAK,CAAC,GAAG,IAAkC;QACzC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7E,OAAO;QACT,CAAC;QAGD,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,CAAC;IAED,GAAG,CAAC,GAAG,IAAgC;QACrC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3E,OAAO;QACT,CAAC;QAGD,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACrB,CAAC;IAED,IAAI,CAAC,GAAG,IAAiC;QACvC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5E,OAAO;QACT,CAAC;QAGD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,KAAK,CAAC,GAAG,IAAkC;QACzC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7E,OAAO;QACT,CAAC;QAGD,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;IACvB,CAAC;CACF;AA3CD,0DA2CC"}
|
package/src/mixins/index.d.ts
CHANGED
package/src/mixins/index.js
CHANGED
|
@@ -14,7 +14,7 @@ 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("./
|
|
17
|
+
__exportStar(require("./policies-guard.mixin"), exports);
|
|
18
18
|
__exportStar(require("./entity-body.mixin"), exports);
|
|
19
19
|
__exportStar(require("./entity-presenter.mixin"), exports);
|
|
20
20
|
//# sourceMappingURL=index.js.map
|
package/src/mixins/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/mixins/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/mixins/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAuC;AACvC,sDAAoC;AACpC,2DAAyC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Type } from '@nestjs/common';
|
|
2
|
+
import { PipelineStage } from 'mongodb-pipeline-builder';
|
|
3
|
+
import { AbilityPredicate, AuthAbilityPredicate, PoliciesGuardConstructor, RouteType } from '../interfaces';
|
|
4
|
+
import { BaseEntity } from '../models';
|
|
5
|
+
declare function RoutePoliciesGuardMixin<Entity extends BaseEntity>(entity: Type<Entity>, routeType: RouteType, displayedName: string, version: string | undefined, abilityPredicate: AbilityPredicate<Entity> | undefined, queryToPipeline?: (query: unknown) => PipelineStage[]): PoliciesGuardConstructor<Entity>;
|
|
6
|
+
declare function SocketPoliciesGuardMixin<Entity extends BaseEntity>(entity: Type<Entity>, routeType: RouteType, event: string, version: string | undefined, abilityPredicate: AuthAbilityPredicate | undefined, isPublic: boolean | undefined, queryToPipeline?: (query: unknown) => PipelineStage[]): PoliciesGuardConstructor<Entity>;
|
|
7
|
+
export { RoutePoliciesGuardMixin, SocketPoliciesGuardMixin };
|
|
@@ -12,14 +12,14 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
|
12
12
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.
|
|
15
|
+
exports.SocketPoliciesGuardMixin = exports.RoutePoliciesGuardMixin = void 0;
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const mongoose_1 = require("@nestjs/mongoose");
|
|
18
18
|
const mongoose_2 = require("mongoose");
|
|
19
19
|
const dynamic_api_module_1 = require("../dynamic-api.module");
|
|
20
20
|
const guards_1 = require("../guards");
|
|
21
21
|
const helpers_1 = require("../helpers");
|
|
22
|
-
function
|
|
22
|
+
function RoutePoliciesGuardMixin(entity, routeType, displayedName, version, abilityPredicate, queryToPipeline) {
|
|
23
23
|
let RoutePoliciesGuard = class RoutePoliciesGuard extends guards_1.BasePoliciesGuard {
|
|
24
24
|
constructor(model) {
|
|
25
25
|
super(model);
|
|
@@ -41,5 +41,29 @@ function CreatePoliciesGuardMixin(entity, routeType, displayedName, version, abi
|
|
|
41
41
|
});
|
|
42
42
|
return RoutePoliciesGuard;
|
|
43
43
|
}
|
|
44
|
-
exports.
|
|
45
|
-
|
|
44
|
+
exports.RoutePoliciesGuardMixin = RoutePoliciesGuardMixin;
|
|
45
|
+
function SocketPoliciesGuardMixin(entity, routeType, event, version, abilityPredicate, isPublic, queryToPipeline) {
|
|
46
|
+
let SocketPoliciesGuard = class SocketPoliciesGuard extends guards_1.BaseSocketPoliciesGuard {
|
|
47
|
+
constructor(model) {
|
|
48
|
+
super(model);
|
|
49
|
+
this.model = model;
|
|
50
|
+
this.routeType = routeType;
|
|
51
|
+
this.entity = entity;
|
|
52
|
+
this.abilityPredicate = abilityPredicate;
|
|
53
|
+
this.queryToPipeline = queryToPipeline;
|
|
54
|
+
this.isPublic = isPublic;
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
SocketPoliciesGuard = __decorate([
|
|
58
|
+
(0, common_1.Injectable)(),
|
|
59
|
+
__param(0, (0, mongoose_1.InjectModel)(entity.name, dynamic_api_module_1.DynamicApiModule.state.get('connectionName'))),
|
|
60
|
+
__metadata("design:paramtypes", [mongoose_2.Model])
|
|
61
|
+
], SocketPoliciesGuard);
|
|
62
|
+
Object.defineProperty(SocketPoliciesGuard, 'name', {
|
|
63
|
+
value: `${(0, helpers_1.provideName)(routeType, (0, helpers_1.pascalCase)(event), version, 'SocketPoliciesGuard')}`,
|
|
64
|
+
writable: false,
|
|
65
|
+
});
|
|
66
|
+
return SocketPoliciesGuard;
|
|
67
|
+
}
|
|
68
|
+
exports.SocketPoliciesGuardMixin = SocketPoliciesGuardMixin;
|
|
69
|
+
//# sourceMappingURL=policies-guard.mixin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policies-guard.mixin.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/mixins/policies-guard.mixin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAkD;AAClD,+CAA+C;AAE/C,uCAAiC;AACjC,8DAAyD;AACzD,sCAAuE;AACvE,wCAAqD;AASrD,SAAS,uBAAuB,CAC9B,MAAoB,EACpB,SAAoB,EACpB,aAAqB,EACrB,OAA2B,EAC3B,gBAAsD,EACtD,eAAqD;IAErD,IACM,kBAAkB,GADxB,MACM,kBAAmB,SAAQ,0BAAyB;QAMxD,YAKE,KAAuC;YAEvC,KAAK,CAAC,KAAK,CAAC,CAAC;YAFM,UAAK,GAAL,KAAK,CAAe;YAV/B,cAAS,GAAG,SAAS,CAAC;YACtB,WAAM,GAAG,MAAM,CAAC;YAChB,qBAAgB,GAAyC,gBAAgB,CAAC;YAC1E,oBAAe,GAAG,eAAe,CAAC;QAU5C,CAAC;KACF,CAAA;IAfK,kBAAkB;QADvB,IAAA,mBAAU,GAAE;QAQR,WAAA,IAAA,sBAAW,EACV,MAAM,CAAC,IAAI,EACX,qCAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAC7C,CAAA;yCACyB,gBAAK;OAX7B,kBAAkB,CAevB;IAED,MAAM,CAAC,cAAc,CAAC,kBAAkB,EAAE,MAAM,EAAE;QAChD,KAAK,EAAE,GAAG,IAAA,qBAAW,EAAC,SAAS,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE;QAC3E,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IAEH,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAsCQ,0DAAuB;AApChC,SAAS,wBAAwB,CAC/B,MAAoB,EACpB,SAAoB,EACpB,KAAa,EACb,OAA2B,EAC3B,gBAAkD,EAClD,QAA6B,EAC7B,eAAqD;IAErD,IACM,mBAAmB,GADzB,MACM,mBAAoB,SAAQ,gCAA+B;QAO/D,YAKE,KAAuC;YAEvC,KAAK,CAAC,KAAK,CAAC,CAAC;YAFM,UAAK,GAAL,KAAK,CAAe;YAX/B,cAAS,GAAG,SAAS,CAAC;YACtB,WAAM,GAAG,MAAM,CAAC;YAChB,qBAAgB,GAAG,gBAAgB,CAAC;YACpC,oBAAe,GAAG,eAAe,CAAC;YAClC,aAAQ,GAAG,QAAQ,CAAC;QAU9B,CAAC;KACF,CAAA;IAhBK,mBAAmB;QADxB,IAAA,mBAAU,GAAE;QASR,WAAA,IAAA,sBAAW,EACV,MAAM,CAAC,IAAI,EACX,qCAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAC7C,CAAA;yCACyB,gBAAK;OAZ7B,mBAAmB,CAgBxB;IAED,MAAM,CAAC,cAAc,CAAC,mBAAmB,EAAE,MAAM,EAAE;QACjD,KAAK,EAAE,GAAG,IAAA,qBAAW,EAAC,SAAS,EAAE,IAAA,oBAAU,EAAC,KAAK,CAAC,EAAE,OAAO,EAAE,qBAAqB,CAAC,EAAE;QACrF,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IAEH,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAEiC,4DAAwB"}
|