mongodb-dynamic-api 4.2.1 → 4.3.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/decorators/disable-cache.decorator.d.ts +3 -0
- package/src/decorators/disable-cache.decorator.js +9 -0
- package/src/decorators/disable-cache.decorator.js.map +1 -0
- package/src/decorators/index.d.ts +1 -0
- package/src/decorators/index.js +1 -0
- package/src/decorators/index.js.map +1 -1
- package/src/dynamic-api.module.js +6 -0
- package/src/dynamic-api.module.js.map +1 -1
- package/src/helpers/mixin-data.helper.d.ts +2 -1
- package/src/helpers/mixin-data.helper.js +12 -1
- package/src/helpers/mixin-data.helper.js.map +1 -1
- package/src/interceptors/dynamic-api-cache.interceptor.d.ts +1 -0
- package/src/interceptors/dynamic-api-cache.interceptor.js +19 -3
- package/src/interceptors/dynamic-api-cache.interceptor.js.map +1 -1
- package/src/interfaces/dynamic-api-controller-options.interface.d.ts +1 -0
- package/src/interfaces/dynamic-api-route-config.interface.d.ts +1 -0
- package/src/routes/aggregate/aggregate-controller.mixin.js +3 -1
- package/src/routes/aggregate/aggregate-controller.mixin.js.map +1 -1
- package/src/routes/cache-purge/cache-purge.helper.d.ts +8 -0
- package/src/routes/cache-purge/cache-purge.helper.js +74 -0
- package/src/routes/cache-purge/cache-purge.helper.js.map +1 -0
- package/src/routes/cache-purge/index.d.ts +1 -0
- package/src/routes/cache-purge/index.js +18 -0
- package/src/routes/cache-purge/index.js.map +1 -0
- package/src/routes/get-many/get-many-controller.mixin.js +3 -1
- package/src/routes/get-many/get-many-controller.mixin.js.map +1 -1
- package/src/routes/get-one/get-one-controller.mixin.js +3 -1
- package/src/routes/get-one/get-one-controller.mixin.js.map +1 -1
- package/src/routes/index.d.ts +1 -0
- package/src/routes/index.js +1 -0
- package/src/routes/index.js.map +1 -1
- package/src/version.json +1 -1
- package/test/for-root/auth-api-login.e2e-spec.js +63 -0
- package/test/for-root/auth-api-login.e2e-spec.js.map +1 -1
- package/tsconfig.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
Changelog
|
|
2
2
|
|
|
3
|
+
## [4.3.0](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v4.2.1...v4.3.0) (2026-03-17)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### cache
|
|
7
|
+
|
|
8
|
+
* **cache:** add auto-generated cache purge endpoint per feature ([9504506](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/95045067862a25a4f6dbb1b7331b5c53d231235d))
|
|
9
|
+
* **cache:** add DisableCache decorator and metadata key ([cf2b074](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/cf2b074de08e7c652c5a8ace789029126f1fada9))
|
|
10
|
+
* **cache:** add disableCache option to controller and route interfaces ([935279b](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/935279bc40039e509c711ca13c2c45a72989f4b8))
|
|
11
|
+
* **cache:** apply disableCache metadata on read route controller mixins ([948ea95](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/948ea9510ee3cc00a5b9e2750cb5b075130fb128))
|
|
12
|
+
* **cache:** bypass cache directly in intercept() for non-cacheable requests ([d822e49](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/d822e499a64e69748cf6cc39047ecb86a43cea74))
|
|
13
|
+
* **cache:** check disableCache metadata and auto-purge on write operations ([2cb3e14](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/2cb3e14e5feb04274ede45f8cd3790a17aafa9ab))
|
|
14
|
+
* **cache:** exclude auth routes from cache regardless of global prefix or versioning ([062810c](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/062810cc1f9a4e77248daf29b78415ea8524121a))
|
|
15
|
+
* **cache:** resolve disableCache in getMixinData with route > controller priority ([2bf58a1](https://github.com/MikeDev75015/mongodb-dynamic-api/commit/2bf58a17c3a13fc5a560579195eba15f3a04f3f5))
|
|
16
|
+
|
|
3
17
|
## [4.2.1](https://github.com/MikeDev75015/mongodb-dynamic-api/compare/v4.2.0...v4.2.1) (2026-03-17)
|
|
4
18
|
|
|
5
19
|
|
package/package.json
CHANGED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DisableCache = exports.DISABLE_CACHE_KEY = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const DISABLE_CACHE_KEY = 'dynamicApiDisableCache';
|
|
6
|
+
exports.DISABLE_CACHE_KEY = DISABLE_CACHE_KEY;
|
|
7
|
+
const DisableCache = () => (0, common_1.SetMetadata)(DISABLE_CACHE_KEY, true);
|
|
8
|
+
exports.DisableCache = DisableCache;
|
|
9
|
+
//# sourceMappingURL=disable-cache.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"disable-cache.decorator.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/decorators/disable-cache.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAE7C,MAAM,iBAAiB,GAAG,wBAAwB,CAAC;AAG1C,8CAAiB;AAF1B,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,IAAA,oBAAW,EAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;AAEpC,oCAAY"}
|
package/src/decorators/index.js
CHANGED
|
@@ -15,6 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./api-endpoint-visibility.decorator"), exports);
|
|
18
|
+
__exportStar(require("./disable-cache.decorator"), exports);
|
|
18
19
|
__exportStar(require("./public.decorator"), exports);
|
|
19
20
|
__exportStar(require("./schema-options.decorator"), exports);
|
|
20
21
|
__exportStar(require("./validator-pipe.decorator"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/decorators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sEAAoD;AACpD,qDAAmC;AACnC,6DAA2C;AAC3C,6DAA2C"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/decorators/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sEAAoD;AACpD,4DAA0C;AAC1C,qDAAmC;AACnC,6DAA2C;AAC3C,6DAA2C"}
|
|
@@ -85,6 +85,7 @@ let DynamicApiModule = DynamicApiModule_1 = class DynamicApiModule {
|
|
|
85
85
|
[castType('Aggregate'), castModule(routes_1.AggregateModule)],
|
|
86
86
|
]);
|
|
87
87
|
routes = this.setDefaultRoutes(this.state.get('routesConfig'), controllerRoutesConfig, routes);
|
|
88
|
+
const isCacheEnabledForFeature = this.state.get('isGlobalCacheEnabled') && !controllerOptions.disableCache;
|
|
88
89
|
const apiModule = {
|
|
89
90
|
module: DynamicApiModule_1,
|
|
90
91
|
imports: [
|
|
@@ -102,6 +103,11 @@ let DynamicApiModule = DynamicApiModule_1 = class DynamicApiModule {
|
|
|
102
103
|
return module.forFeature(databaseModule, entity, controllerOptions, { ...routeConfig, description }, version, validationPipeOptions ?? { transform: true }, routeWebSocket ?? featureWebSocket, extraImports, extraProviders, extraControllers);
|
|
103
104
|
}),
|
|
104
105
|
],
|
|
106
|
+
controllers: [
|
|
107
|
+
...(isCacheEnabledForFeature
|
|
108
|
+
? [(0, routes_1.createCachePurgeController)(entity, controllerOptions)]
|
|
109
|
+
: []),
|
|
110
|
+
],
|
|
105
111
|
providers: [
|
|
106
112
|
{
|
|
107
113
|
provide: core_1.APP_INTERCEPTOR,
|
|
@@ -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,yCAA8D;AAC9D,qCAAkD;AAClD,uCAA2H;AAC3H,iDAA4D;AAC5D,6CAAuQ;AAEvQ,uCAAsF;AACtF,
|
|
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,11 +1,12 @@
|
|
|
1
1
|
import { Type } from '@nestjs/common';
|
|
2
2
|
import { AbilityPredicate, DynamicApiControllerOptions, DynamicAPIRouteConfig, RouteType } from '../interfaces';
|
|
3
3
|
import { BaseEntity } from '../models';
|
|
4
|
-
declare function getMixinData<Entity extends BaseEntity>(entity: Type<Entity>, { apiTag, isPublic: isPublicController, abilityPredicates: controllerAbilityPredicates, }: DynamicApiControllerOptions<Entity>, { type: routeType, subPath, description, isPublic: isPublicRoute, abilityPredicate: routeAbilityPredicate, eventName, }: DynamicAPIRouteConfig<Entity>, isGateway?: boolean): {
|
|
4
|
+
declare function getMixinData<Entity extends BaseEntity>(entity: Type<Entity>, { apiTag, isPublic: isPublicController, disableCache: disableCacheController, abilityPredicates: controllerAbilityPredicates, }: DynamicApiControllerOptions<Entity>, { type: routeType, subPath, description, isPublic: isPublicRoute, disableCache: disableCacheRoute, abilityPredicate: routeAbilityPredicate, eventName, }: DynamicAPIRouteConfig<Entity>, isGateway?: boolean): {
|
|
5
5
|
routeType: RouteType;
|
|
6
6
|
displayedName: string;
|
|
7
7
|
description: string;
|
|
8
8
|
isPublic: boolean;
|
|
9
|
+
disableCache: boolean;
|
|
9
10
|
abilityPredicate: AbilityPredicate<Entity>;
|
|
10
11
|
event: string;
|
|
11
12
|
};
|
|
@@ -4,7 +4,7 @@ exports.getMixinData = getMixinData;
|
|
|
4
4
|
const lodash_1 = require("lodash");
|
|
5
5
|
const controller_ability_predicates_helper_1 = require("./controller-ability-predicates.helper");
|
|
6
6
|
const format_helper_1 = require("./format.helper");
|
|
7
|
-
function getMixinData(entity, { apiTag, isPublic: isPublicController, abilityPredicates: controllerAbilityPredicates, }, { type: routeType, subPath, description, isPublic: isPublicRoute, abilityPredicate: routeAbilityPredicate, eventName, }, isGateway = false) {
|
|
7
|
+
function getMixinData(entity, { apiTag, isPublic: isPublicController, disableCache: disableCacheController, abilityPredicates: controllerAbilityPredicates, }, { type: routeType, subPath, description, isPublic: isPublicRoute, disableCache: disableCacheRoute, abilityPredicate: routeAbilityPredicate, eventName, }, isGateway = false) {
|
|
8
8
|
const displayedName = (0, format_helper_1.getDisplayedName)(apiTag, entity.name, subPath);
|
|
9
9
|
let isPublic;
|
|
10
10
|
if (typeof isPublicRoute === 'boolean') {
|
|
@@ -16,6 +16,16 @@ function getMixinData(entity, { apiTag, isPublic: isPublicController, abilityPre
|
|
|
16
16
|
else {
|
|
17
17
|
isPublic = false;
|
|
18
18
|
}
|
|
19
|
+
let disableCache;
|
|
20
|
+
if (typeof disableCacheRoute === 'boolean') {
|
|
21
|
+
disableCache = disableCacheRoute;
|
|
22
|
+
}
|
|
23
|
+
else if (typeof disableCacheController === 'boolean') {
|
|
24
|
+
disableCache = disableCacheController;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
disableCache = false;
|
|
28
|
+
}
|
|
19
29
|
const abilityPredicate = routeAbilityPredicate ?? (0, controller_ability_predicates_helper_1.getPredicateFromControllerAbilityPredicates)(controllerAbilityPredicates, routeType);
|
|
20
30
|
const event = eventName ?? (0, lodash_1.kebabCase)(`${routeType}/${displayedName}`);
|
|
21
31
|
return {
|
|
@@ -23,6 +33,7 @@ function getMixinData(entity, { apiTag, isPublic: isPublicController, abilityPre
|
|
|
23
33
|
displayedName,
|
|
24
34
|
description,
|
|
25
35
|
isPublic,
|
|
36
|
+
disableCache,
|
|
26
37
|
abilityPredicate,
|
|
27
38
|
event,
|
|
28
39
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mixin-data.helper.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/helpers/mixin-data.helper.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"mixin-data.helper.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/helpers/mixin-data.helper.ts"],"names":[],"mappings":";;AA8ES,oCAAY;AA7ErB,mCAAmC;AAQnC,iGAAqG;AACrG,mDAAmD;AAGnD,SAAS,YAAY,CACnB,MAAoB,EACpB,EACE,MAAM,EACN,QAAQ,EAAE,kBAAkB,EAC5B,YAAY,EAAE,sBAAsB,EACpC,iBAAiB,EAAE,2BAA2B,GACV,EACtC,EACE,IAAI,EAAE,SAAS,EACf,OAAO,EACP,WAAW,EACX,QAAQ,EAAE,aAAa,EACvB,YAAY,EAAE,iBAAiB,EAC/B,gBAAgB,EAAE,qBAAqB,EACvC,SAAS,GACqB,EAChC,SAAS,GAAG,KAAK;IAUjB,MAAM,aAAa,GAAG,IAAA,gCAAgB,EAAC,MAAM,EAAG,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAEtE,IAAI,QAAiB,CAAC;IACtB,IAAI,OAAO,aAAa,KAAK,SAAS,EAAE,CAAC;QACvC,QAAQ,GAAG,aAAa,CAAC;IAC3B,CAAC;SAAM,IAAI,OAAO,kBAAkB,KAAK,SAAS,EAAE,CAAC;QACnD,QAAQ,GAAG,kBAAkB,CAAC;IAChC,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,KAAK,CAAC;IACnB,CAAC;IAED,IAAI,YAAqB,CAAC;IAC1B,IAAI,OAAO,iBAAiB,KAAK,SAAS,EAAE,CAAC;QAC3C,YAAY,GAAG,iBAAiB,CAAC;IACnC,CAAC;SAAM,IAAI,OAAO,sBAAsB,KAAK,SAAS,EAAE,CAAC;QACvD,YAAY,GAAG,sBAAsB,CAAC;IACxC,CAAC;SAAM,CAAC;QACN,YAAY,GAAG,KAAK,CAAC;IACvB,CAAC;IAED,MAAM,gBAAgB,GAAG,qBAAqB,IAAI,IAAA,kFAA2C,EAC3F,2BAA2B,EAC3B,SAAS,CACV,CAAC;IAEF,MAAM,KAAK,GAAG,SAAS,IAAI,IAAA,kBAAS,EAAC,GAAG,SAAS,IAAI,aAAa,EAAE,CAAC,CAAC;IAEtE,OAAO;QACL,SAAS;QACT,aAAa;QACb,WAAW;QACX,QAAQ;QACR,YAAY;QACZ,gBAAgB;QAChB,KAAK;KACN,CAAC;AACJ,CAAC"}
|
|
@@ -13,5 +13,6 @@ export declare class DynamicApiCacheInterceptor extends CacheInterceptor {
|
|
|
13
13
|
private readonly excludePaths;
|
|
14
14
|
constructor(cacheManager: Cache, reflector: Reflector, httpAdapterHost: HttpAdapterHost, state: DynamicApiGlobalState);
|
|
15
15
|
intercept(context: ExecutionContext, next: CallHandler): Promise<Observable<any>>;
|
|
16
|
+
private static readonly AUTH_PATH_PATTERN;
|
|
16
17
|
isRequestCacheable(context: ExecutionContext): boolean;
|
|
17
18
|
}
|
|
@@ -11,13 +11,16 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
11
11
|
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
12
|
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
13
|
};
|
|
14
|
+
var DynamicApiCacheInterceptor_1;
|
|
14
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
16
|
exports.DynamicApiCacheInterceptor = void 0;
|
|
16
17
|
const cache_manager_1 = require("@nestjs/cache-manager");
|
|
17
18
|
const common_1 = require("@nestjs/common");
|
|
18
19
|
const core_1 = require("@nestjs/core");
|
|
19
20
|
const http_adapter_host_1 = require("@nestjs/core/helpers/http-adapter-host");
|
|
20
|
-
|
|
21
|
+
const rxjs_1 = require("rxjs");
|
|
22
|
+
const decorators_1 = require("../decorators");
|
|
23
|
+
let DynamicApiCacheInterceptor = DynamicApiCacheInterceptor_1 = class DynamicApiCacheInterceptor extends cache_manager_1.CacheInterceptor {
|
|
21
24
|
constructor(cacheManager, reflector, httpAdapterHost, state) {
|
|
22
25
|
super(cacheManager, reflector);
|
|
23
26
|
this.cacheManager = cacheManager;
|
|
@@ -34,18 +37,31 @@ let DynamicApiCacheInterceptor = class DynamicApiCacheInterceptor extends cache_
|
|
|
34
37
|
if (!this.state.isGlobalCacheEnabled) {
|
|
35
38
|
return Promise.resolve(next.handle());
|
|
36
39
|
}
|
|
40
|
+
const req = context.switchToHttp().getRequest();
|
|
41
|
+
const isWriteOperation = !this.allowedMethods.includes(req.method);
|
|
42
|
+
if (isWriteOperation) {
|
|
43
|
+
return Promise.resolve(next.handle().pipe((0, rxjs_1.tap)(() => { this.cacheManager.clear(); })));
|
|
44
|
+
}
|
|
45
|
+
if (!this.isRequestCacheable(context)) {
|
|
46
|
+
return Promise.resolve(next.handle());
|
|
47
|
+
}
|
|
37
48
|
return super.intercept(context, next);
|
|
38
49
|
}
|
|
39
50
|
isRequestCacheable(context) {
|
|
51
|
+
const disableCache = this.reflector.get(decorators_1.DISABLE_CACHE_KEY, context.getHandler());
|
|
52
|
+
if (disableCache === true) {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
40
55
|
const req = context.switchToHttp().getRequest();
|
|
41
56
|
return (this.state.isGlobalCacheEnabled &&
|
|
42
57
|
this.allowedMethods.includes(req.method) &&
|
|
43
58
|
!this.excludePaths.includes(req.url) &&
|
|
44
|
-
!(this.state.isAuthEnabled && req.url
|
|
59
|
+
!(this.state.isAuthEnabled && DynamicApiCacheInterceptor_1.AUTH_PATH_PATTERN.test(req.url)));
|
|
45
60
|
}
|
|
46
61
|
};
|
|
47
62
|
exports.DynamicApiCacheInterceptor = DynamicApiCacheInterceptor;
|
|
48
|
-
|
|
63
|
+
DynamicApiCacheInterceptor.AUTH_PATH_PATTERN = /\/auth(\/|$|\?)/;
|
|
64
|
+
exports.DynamicApiCacheInterceptor = DynamicApiCacheInterceptor = DynamicApiCacheInterceptor_1 = __decorate([
|
|
49
65
|
(0, common_1.Injectable)(),
|
|
50
66
|
__param(0, (0, common_1.Inject)(cache_manager_1.CACHE_MANAGER)),
|
|
51
67
|
__metadata("design:paramtypes", [Object, core_1.Reflector,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dynamic-api-cache.interceptor.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/interceptors/dynamic-api-cache.interceptor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dynamic-api-cache.interceptor.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/interceptors/dynamic-api-cache.interceptor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAwE;AACxE,2CAAmF;AACnF,uCAAyC;AACzC,8EAAyE;AAEzE,+BAAuC;AACvC,8CAAkD;AAK3C,IAAM,0BAA0B,kCAAhC,MAAM,0BAA2B,SAAQ,gCAAgB;IAM9D,YACyB,YAAsC,EAC1C,SAAoB,EACpB,eAAgC,EAClC,KAA4B;QAE7C,KAAK,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QALW,iBAAY,GAAZ,YAAY,CAAO;QAC1C,cAAS,GAAT,SAAS,CAAW;QACpB,oBAAe,GAAf,eAAe,CAAiB;QAClC,UAAK,GAAL,KAAK,CAAuB;QAT9B,iBAAY,GAAG;YAC9B,GAAG;YACH,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB;SACjC,CAAC;QASA,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,CAAC;IAEM,SAAS,CAAC,OAAyB,EAAE,IAAiB;QAC3D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,CAAC;YACrC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QAChD,MAAM,gBAAgB,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAEnE,IAAI,gBAAgB,EAAE,CAAC;YACrB,OAAO,OAAO,CAAC,OAAO,CACpB,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAChB,IAAA,UAAG,EAAC,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAC1C,CACF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IAID,kBAAkB,CAAC,OAAyB;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAU,8BAAiB,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1F,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QAChD,OAAO,CACL,IAAI,CAAC,KAAK,CAAC,oBAAoB;YAC/B,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;YACxC,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;YACpC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,4BAA0B,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAC1F,CAAC;IACJ,CAAC;;AAtDU,gEAA0B;AAuCb,4CAAiB,GAAG,iBAAiB,AAApB,CAAqB;qCAvCnD,0BAA0B;IAFtC,IAAA,mBAAU,GAAE;IASR,WAAA,IAAA,eAAM,EAAC,6BAAa,CAAC,CAAA;6CACQ,gBAAS;QACH,mCAAe;GAT1C,0BAA0B,CAuDtC"}
|
|
@@ -7,6 +7,7 @@ interface DynamicApiControllerOptions<Entity extends BaseEntity> {
|
|
|
7
7
|
apiTag?: string;
|
|
8
8
|
version?: string;
|
|
9
9
|
isPublic?: boolean;
|
|
10
|
+
disableCache?: boolean;
|
|
10
11
|
validationPipeOptions?: ValidationPipeOptions;
|
|
11
12
|
abilityPredicates?: ControllerAbilityPredicate<Entity>[];
|
|
12
13
|
routesConfig?: Partial<RoutesConfig>;
|
|
@@ -10,6 +10,7 @@ import { DynamicApiWebSocketOptions } from './dynamic-api-web-socket.interface';
|
|
|
10
10
|
interface DynamicApiRouteConfig<Entity extends BaseEntity> {
|
|
11
11
|
type: RouteType;
|
|
12
12
|
isPublic?: boolean;
|
|
13
|
+
disableCache?: boolean;
|
|
13
14
|
description?: string;
|
|
14
15
|
version?: string;
|
|
15
16
|
subPath?: string;
|
|
@@ -16,11 +16,12 @@ exports.AggregateControllerMixin = AggregateControllerMixin;
|
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const class_transformer_1 = require("class-transformer");
|
|
18
18
|
const builders_1 = require("../../builders");
|
|
19
|
+
const decorators_1 = require("../../decorators");
|
|
19
20
|
const helpers_1 = require("../../helpers");
|
|
20
21
|
const mixins_1 = require("../../mixins");
|
|
21
22
|
const aggregate_presenter_mixin_1 = require("./aggregate-presenter.mixin");
|
|
22
23
|
function AggregateControllerMixin(entity, controllerOptions, { dTOs, useInterceptors = [], isArrayResponse, ...routeConfig }, version) {
|
|
23
|
-
const { routeType, displayedName, description, isPublic, abilityPredicate, } = (0, helpers_1.getMixinData)(entity, controllerOptions, routeConfig);
|
|
24
|
+
const { routeType, displayedName, description, isPublic, disableCache, abilityPredicate, } = (0, helpers_1.getMixinData)(entity, controllerOptions, routeConfig);
|
|
24
25
|
if (!dTOs?.query) {
|
|
25
26
|
throw new common_1.BadRequestException('Query DTO is required');
|
|
26
27
|
}
|
|
@@ -67,6 +68,7 @@ function AggregateControllerMixin(entity, controllerOptions, { dTOs, useIntercep
|
|
|
67
68
|
(0, helpers_1.RouteDecoratorsHelper)(routeDecoratorsBuilder),
|
|
68
69
|
(0, common_1.UseGuards)(AggregatePoliciesGuard),
|
|
69
70
|
(0, common_1.UseInterceptors)(...useInterceptors),
|
|
71
|
+
(0, common_1.SetMetadata)(decorators_1.DISABLE_CACHE_KEY, disableCache),
|
|
70
72
|
__param(0, (0, common_1.Query)()),
|
|
71
73
|
__metadata("design:type", Function),
|
|
72
74
|
__metadata("design:paramtypes", [AggregateQuery]),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregate-controller.mixin.js","sourceRoot":"","sources":["../../../../libs/dynamic-api/src/routes/aggregate/aggregate-controller.mixin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"aggregate-controller.mixin.js","sourceRoot":"","sources":["../../../../libs/dynamic-api/src/routes/aggregate/aggregate-controller.mixin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Type } from '@nestjs/common';
|
|
2
|
+
import { DynamicApiControllerOptions } from '../../interfaces';
|
|
3
|
+
import { BaseEntity } from '../../models';
|
|
4
|
+
declare class CachePurgePresenter {
|
|
5
|
+
purged: boolean;
|
|
6
|
+
}
|
|
7
|
+
declare function createCachePurgeController<Entity extends BaseEntity>(entity: Type<Entity>, { path, apiTag, version, isPublic }: DynamicApiControllerOptions<Entity>): Type;
|
|
8
|
+
export { CachePurgePresenter, createCachePurgeController };
|
|
@@ -0,0 +1,74 @@
|
|
|
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
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.CachePurgePresenter = void 0;
|
|
16
|
+
exports.createCachePurgeController = createCachePurgeController;
|
|
17
|
+
const cache_manager_1 = require("@nestjs/cache-manager");
|
|
18
|
+
const common_1 = require("@nestjs/common");
|
|
19
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
20
|
+
const decorators_1 = require("../../decorators");
|
|
21
|
+
const dynamic_api_module_1 = require("../../dynamic-api.module");
|
|
22
|
+
class CachePurgePresenter {
|
|
23
|
+
}
|
|
24
|
+
exports.CachePurgePresenter = CachePurgePresenter;
|
|
25
|
+
__decorate([
|
|
26
|
+
(0, swagger_1.ApiProperty)({ type: Boolean }),
|
|
27
|
+
__metadata("design:type", Boolean)
|
|
28
|
+
], CachePurgePresenter.prototype, "purged", void 0);
|
|
29
|
+
function createCachePurgeController(entity, { path, apiTag, version, isPublic }) {
|
|
30
|
+
const tag = apiTag || entity.name;
|
|
31
|
+
const isAuthEnabled = dynamic_api_module_1.DynamicApiModule.state.get('isAuthEnabled');
|
|
32
|
+
let CachePurgeController = class CachePurgeController {
|
|
33
|
+
constructor(cacheManager) {
|
|
34
|
+
this.cacheManager = cacheManager;
|
|
35
|
+
}
|
|
36
|
+
async purgeCache() {
|
|
37
|
+
await this.cacheManager.clear();
|
|
38
|
+
return { purged: true };
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
__decorate([
|
|
42
|
+
(0, common_1.Delete)('cache'),
|
|
43
|
+
__metadata("design:type", Function),
|
|
44
|
+
__metadata("design:paramtypes", []),
|
|
45
|
+
__metadata("design:returntype", Promise)
|
|
46
|
+
], CachePurgeController.prototype, "purgeCache", null);
|
|
47
|
+
CachePurgeController = __decorate([
|
|
48
|
+
(0, common_1.Controller)({ path, version }),
|
|
49
|
+
(0, swagger_1.ApiTags)(tag),
|
|
50
|
+
(0, common_1.UseInterceptors)(common_1.ClassSerializerInterceptor),
|
|
51
|
+
__param(0, (0, common_1.Inject)(cache_manager_1.CACHE_MANAGER)),
|
|
52
|
+
__metadata("design:paramtypes", [Object])
|
|
53
|
+
], CachePurgeController);
|
|
54
|
+
const descriptor = Object.getOwnPropertyDescriptor(CachePurgeController.prototype, 'purgeCache');
|
|
55
|
+
(0, swagger_1.ApiOperation)({
|
|
56
|
+
operationId: `purgeCache${tag}${version ? 'V' + version : ''}`,
|
|
57
|
+
summary: `Purge cache for ${tag}`,
|
|
58
|
+
})(CachePurgeController.prototype, 'purgeCache', descriptor);
|
|
59
|
+
(0, swagger_1.ApiResponse)({
|
|
60
|
+
type: CachePurgePresenter,
|
|
61
|
+
})(CachePurgeController.prototype, 'purgeCache', descriptor);
|
|
62
|
+
if (isPublic) {
|
|
63
|
+
(0, decorators_1.Public)()(CachePurgeController.prototype, 'purgeCache', descriptor);
|
|
64
|
+
}
|
|
65
|
+
else if (isAuthEnabled) {
|
|
66
|
+
(0, swagger_1.ApiBearerAuth)()(CachePurgeController.prototype, 'purgeCache', descriptor);
|
|
67
|
+
}
|
|
68
|
+
Object.defineProperty(CachePurgeController, 'name', {
|
|
69
|
+
value: `CachePurge${tag}${version ? 'V' + version : ''}Controller`,
|
|
70
|
+
writable: false,
|
|
71
|
+
});
|
|
72
|
+
return CachePurgeController;
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=cache-purge.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache-purge.helper.js","sourceRoot":"","sources":["../../../../libs/dynamic-api/src/routes/cache-purge/cache-purge.helper.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAoE8B,gEAA0B;AApExD,yDAAsD;AACtD,2CAOwB;AACxB,6CAAiG;AAEjG,iDAA0C;AAC1C,iEAA4D;AAI5D,MAAM,mBAAmB;CAGxB;AAiDQ,kDAAmB;AAlD1B;IADC,IAAA,qBAAW,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;;mDACf;AAGlB,SAAS,0BAA0B,CACjC,MAAoB,EACpB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAuC;IAExE,MAAM,GAAG,GAAG,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC;IAClC,MAAM,aAAa,GAAG,qCAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAElE,IAGM,oBAAoB,GAH1B,MAGM,oBAAoB;QACxB,YAC0C,YAAmB;YAAnB,iBAAY,GAAZ,YAAY,CAAO;QAC1D,CAAC;QAGE,AAAN,KAAK,CAAC,UAAU;YACd,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YAChC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QAC1B,CAAC;KACF,CAAA;IAJO;QADL,IAAA,eAAM,EAAC,OAAO,CAAC;;;;0DAIf;IATG,oBAAoB;QAHzB,IAAA,mBAAU,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;QAC7B,IAAA,iBAAO,EAAC,GAAG,CAAC;QACZ,IAAA,wBAAe,EAAC,mCAA0B,CAAC;QAGvC,WAAA,IAAA,eAAM,EAAC,6BAAa,CAAC,CAAA;;OAFpB,oBAAoB,CAUzB;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,oBAAoB,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;IAEjG,IAAA,sBAAY,EAAC;QACX,WAAW,EAAE,aAAa,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QAC9D,OAAO,EAAE,mBAAmB,GAAG,EAAE;KAClC,CAAC,CAAC,oBAAoB,CAAC,SAAS,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IAE7D,IAAA,qBAAW,EAAC;QACV,IAAI,EAAE,mBAAmB;KAC1B,CAAC,CAAC,oBAAoB,CAAC,SAAS,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IAE7D,IAAI,QAAQ,EAAE,CAAC;QACb,IAAA,mBAAM,GAAE,CAAC,oBAAoB,CAAC,SAAS,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IACrE,CAAC;SAAM,IAAI,aAAa,EAAE,CAAC;QACzB,IAAA,uBAAa,GAAE,CAAC,oBAAoB,CAAC,SAAS,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC;IAC5E,CAAC;IAED,MAAM,CAAC,cAAc,CAAC,oBAAoB,EAAE,MAAM,EAAE;QAClD,KAAK,EAAE,aAAa,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY;QAClE,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IAEH,OAAO,oBAAoB,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './cache-purge.helper';
|
|
@@ -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("./cache-purge.helper"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/dynamic-api/src/routes/cache-purge/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC"}
|
|
@@ -15,11 +15,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.GetManyControllerMixin = GetManyControllerMixin;
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const builders_1 = require("../../builders");
|
|
18
|
+
const decorators_1 = require("../../decorators");
|
|
18
19
|
const dtos_1 = require("../../dtos");
|
|
19
20
|
const helpers_1 = require("../../helpers");
|
|
20
21
|
const mixins_1 = require("../../mixins");
|
|
21
22
|
function GetManyControllerMixin(entity, controllerOptions, { dTOs, useInterceptors = [], ...routeConfig }, version) {
|
|
22
|
-
const { routeType, displayedName, description, isPublic, abilityPredicate, } = (0, helpers_1.getMixinData)(entity, controllerOptions, routeConfig);
|
|
23
|
+
const { routeType, displayedName, description, isPublic, disableCache, abilityPredicate, } = (0, helpers_1.getMixinData)(entity, controllerOptions, routeConfig);
|
|
23
24
|
class GetManyQuery extends (dTOs?.query ?? dtos_1.EntityQuery) {
|
|
24
25
|
}
|
|
25
26
|
Object.defineProperty(GetManyQuery, 'name', {
|
|
@@ -58,6 +59,7 @@ function GetManyControllerMixin(entity, controllerOptions, { dTOs, useIntercepto
|
|
|
58
59
|
(0, helpers_1.RouteDecoratorsHelper)(routeDecoratorsBuilder),
|
|
59
60
|
(0, common_1.UseGuards)(GetManyPoliciesGuard),
|
|
60
61
|
(0, common_1.UseInterceptors)(...useInterceptors),
|
|
62
|
+
(0, common_1.SetMetadata)(decorators_1.DISABLE_CACHE_KEY, disableCache),
|
|
61
63
|
__param(0, (0, common_1.Query)()),
|
|
62
64
|
__metadata("design:type", Function),
|
|
63
65
|
__metadata("design:paramtypes", [GetManyQuery]),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-many-controller.mixin.js","sourceRoot":"","sources":["../../../../libs/dynamic-api/src/routes/get-many/get-many-controller.mixin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"get-many-controller.mixin.js","sourceRoot":"","sources":["../../../../libs/dynamic-api/src/routes/get-many/get-many-controller.mixin.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,11 +15,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.GetOneControllerMixin = GetOneControllerMixin;
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const builders_1 = require("../../builders");
|
|
18
|
+
const decorators_1 = require("../../decorators");
|
|
18
19
|
const dtos_1 = require("../../dtos");
|
|
19
20
|
const helpers_1 = require("../../helpers");
|
|
20
21
|
const mixins_1 = require("../../mixins");
|
|
21
22
|
function GetOneControllerMixin(entity, controllerOptions, { dTOs, useInterceptors = [], ...routeConfig }, version) {
|
|
22
|
-
const { routeType, displayedName, description, isPublic, abilityPredicate, } = (0, helpers_1.getMixinData)(entity, controllerOptions, routeConfig);
|
|
23
|
+
const { routeType, displayedName, description, isPublic, disableCache, abilityPredicate, } = (0, helpers_1.getMixinData)(entity, controllerOptions, routeConfig);
|
|
23
24
|
class GetOnePresenter extends (dTOs?.presenter ?? (0, mixins_1.EntityPresenterMixin)(entity)) {
|
|
24
25
|
}
|
|
25
26
|
Object.defineProperty(GetOnePresenter, 'name', {
|
|
@@ -49,6 +50,7 @@ function GetOneControllerMixin(entity, controllerOptions, { dTOs, useInterceptor
|
|
|
49
50
|
(0, helpers_1.RouteDecoratorsHelper)(routeDecoratorsBuilder),
|
|
50
51
|
(0, common_1.UseGuards)(GetOnePoliciesGuard),
|
|
51
52
|
(0, common_1.UseInterceptors)(...useInterceptors),
|
|
53
|
+
(0, common_1.SetMetadata)(decorators_1.DISABLE_CACHE_KEY, disableCache),
|
|
52
54
|
__param(0, (0, common_1.Param)('id')),
|
|
53
55
|
__metadata("design:type", Function),
|
|
54
56
|
__metadata("design:paramtypes", [String]),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-one-controller.mixin.js","sourceRoot":"","sources":["../../../../libs/dynamic-api/src/routes/get-one/get-one-controller.mixin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"get-one-controller.mixin.js","sourceRoot":"","sources":["../../../../libs/dynamic-api/src/routes/get-one/get-one-controller.mixin.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AA2FS,sDAAqB;AA3F9B,2CAAsF;AACtF,6CAAwD;AACxD,iDAAqD;AACrD,qCAAyC;AACzC,2CAAmG;AAEnG,yCAA6E;AAK7E,SAAS,qBAAqB,CAC5B,MAAoB,EACpB,iBAAsD,EACtD,EAAE,IAAI,EAAE,eAAe,GAAG,EAAE,EAAE,GAAG,WAAW,EAAiC,EAC7E,OAAgB;IAEhB,MAAM,EACJ,SAAS,EACT,aAAa,EACb,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,gBAAgB,GACjB,GAAG,IAAA,sBAAY,EACd,MAAM,EACN,iBAAiB,EACjB,WAAW,CACZ,CAAC;IAEF,MAAM,eAAgB,SAAQ,CAC5B,IAAI,EAAE,SAAS,IAAI,IAAA,6BAAoB,EAAC,MAAM,CAAC,CAChD;KAAG;IAEJ,MAAM,CAAC,cAAc,CAAC,eAAe,EAAE,MAAM,EAAE;QAC7C,KAAK,EAAE,IAAI,EAAE,SAAS;YACpB,CAAC,CAAC,SAAS,aAAa,GAAG,IAAA,0BAAgB,EAAC,OAAO,CAAC,WAAW;YAC/D,CAAC,CAAC,GAAG,aAAa,GAAG,IAAA,0BAAgB,EAAC,OAAO,CAAC,WAAW;QAC3D,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IAEH,MAAM,sBAAsB,GAAG,IAAI,iCAAsB,CACvD,SAAS,EACT,MAAM,EACN,WAAW,CAAC,OAAO,EACnB,OAAO,EACP,WAAW,EACX,QAAQ,EACR;QACE,KAAK,EAAE,kBAAW;QAClB,SAAS,EAAE,eAAe;KAC3B,CACF,CAAC;IAEF,MAAM,mBAAoB,SAAQ,IAAA,gCAAuB,EACvD,MAAM,EACN,SAAS,EACT,aAAa,EACb,OAAO,EACP,gBAAgB,CACjB;KAAG;IAEJ,MAAM,oBAAoB;QAGxB,YAA+B,OAA8B;YAA9B,YAAO,GAAP,OAAO,CAAuB;YAF1C,WAAM,GAAG,MAAM,CAAC;QAGnC,CAAC;QAMK,AAAN,KAAK,CAAC,MAAM,CAAc,EAAU;YAClC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAE7C,MAAM,UAAU,GACd,eACD,CAAC,UAAU,CAAC;YAEb,OAAO,UAAU,CAAC,CAAC,CAAC,UAAU,CAAkB,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACnE,CAAC;KACF;IATO;QAJL,IAAA,+BAAqB,EAAC,sBAAsB,CAAC;QAC7C,IAAA,kBAAS,EAAC,mBAAmB,CAAC;QAC9B,IAAA,wBAAe,EAAC,GAAG,eAAe,CAAC;QACnC,IAAA,oBAAW,EAAC,8BAAiB,EAAE,YAAY,CAAC;QAC/B,WAAA,IAAA,cAAK,EAAC,IAAI,CAAC,CAAA;;;;sDAQxB;IAGH,MAAM,CAAC,cAAc,CAAC,oBAAoB,EAAE,MAAM,EAAE;QAClD,KAAK,EAAE,OAAO,IAAA,qBAAW,EAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE;QAC3E,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IAEH,OAAO,oBAAoB,CAAC;AAC9B,CAAC"}
|
package/src/routes/index.d.ts
CHANGED
package/src/routes/index.js
CHANGED
|
@@ -15,6 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./aggregate"), exports);
|
|
18
|
+
__exportStar(require("./cache-purge"), exports);
|
|
18
19
|
__exportStar(require("./create-many"), exports);
|
|
19
20
|
__exportStar(require("./create-one"), exports);
|
|
20
21
|
__exportStar(require("./delete-many"), exports);
|
package/src/routes/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/routes/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,gDAA8B;AAC9B,+CAA6B;AAC7B,gDAA8B;AAC9B,+CAA6B;AAC7B,mDAAiC;AACjC,kDAAgC;AAChC,6CAA2B;AAC3B,4CAA0B;AAC1B,gDAA8B;AAC9B,gDAA8B;AAC9B,+CAA6B"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../libs/dynamic-api/src/routes/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,gDAA8B;AAC9B,gDAA8B;AAC9B,+CAA6B;AAC7B,gDAA8B;AAC9B,+CAA6B;AAC7B,mDAAiC;AACjC,kDAAgC;AAChC,6CAA2B;AAC3B,4CAA0B;AAC1B,gDAA8B;AAC9B,gDAA8B;AAC9B,+CAA6B"}
|
package/src/version.json
CHANGED
|
@@ -336,4 +336,67 @@ describe('DynamicApiModule forRoot - POST /auth/login with useStrategy (e2e)', (
|
|
|
336
336
|
});
|
|
337
337
|
});
|
|
338
338
|
});
|
|
339
|
+
describe('DynamicApiModule forRoot - POST /auth/login with two users each retrieves own account (e2e)', () => {
|
|
340
|
+
const User = (0, shared_1.createLoginUserEntity)();
|
|
341
|
+
const userA = { username: 'alice', pass: 'alice-pass', role: 'admin', isVerified: true };
|
|
342
|
+
const userB = { username: 'bob', pass: 'bob-pass', role: 'user', isVerified: true };
|
|
343
|
+
beforeEach(() => {
|
|
344
|
+
src_1.DynamicApiModule.state['resetState']();
|
|
345
|
+
});
|
|
346
|
+
afterEach(async () => {
|
|
347
|
+
await (0, e2e_setup_1.closeTestingApp)(mongoose_1.default.connections);
|
|
348
|
+
});
|
|
349
|
+
beforeEach(async () => {
|
|
350
|
+
const bcryptService = new src_1.BcryptService();
|
|
351
|
+
const fixtures = async (_) => {
|
|
352
|
+
const model = await (0, utils_1.getModelFromEntity)(User);
|
|
353
|
+
await model.insertMany([
|
|
354
|
+
{ ...userA, pass: await bcryptService.hashPassword(userA.pass) },
|
|
355
|
+
{ ...userB, pass: await bcryptService.hashPassword(userB.pass) },
|
|
356
|
+
]);
|
|
357
|
+
};
|
|
358
|
+
await (0, shared_1.initModule)({
|
|
359
|
+
useAuth: {
|
|
360
|
+
userEntity: User,
|
|
361
|
+
login: {
|
|
362
|
+
loginField: 'username',
|
|
363
|
+
passwordField: 'pass',
|
|
364
|
+
additionalFields: ['role', 'isVerified'],
|
|
365
|
+
},
|
|
366
|
+
},
|
|
367
|
+
}, fixtures);
|
|
368
|
+
});
|
|
369
|
+
it('should return each user their own account when two users login', async () => {
|
|
370
|
+
const { body: bodyA, status: statusA } = await e2e_setup_1.server.post('/auth/login', {
|
|
371
|
+
username: userA.username,
|
|
372
|
+
pass: userA.pass,
|
|
373
|
+
});
|
|
374
|
+
expect(statusA).toBe(200);
|
|
375
|
+
expect(bodyA).toHaveProperty('accessToken');
|
|
376
|
+
const { body: bodyB, status: statusB } = await e2e_setup_1.server.post('/auth/login', {
|
|
377
|
+
username: userB.username,
|
|
378
|
+
pass: userB.pass,
|
|
379
|
+
});
|
|
380
|
+
expect(statusB).toBe(200);
|
|
381
|
+
expect(bodyB).toHaveProperty('accessToken');
|
|
382
|
+
const { body: accountA, status: accountStatusA } = await e2e_setup_1.server.get('/auth/account', { headers: { Authorization: `Bearer ${bodyA.accessToken}` } });
|
|
383
|
+
expect(accountStatusA).toBe(200);
|
|
384
|
+
expect(accountA).toEqual({
|
|
385
|
+
id: expect.any(String),
|
|
386
|
+
username: 'alice',
|
|
387
|
+
role: 'admin',
|
|
388
|
+
isVerified: true,
|
|
389
|
+
});
|
|
390
|
+
const { body: accountB, status: accountStatusB } = await e2e_setup_1.server.get('/auth/account', { headers: { Authorization: `Bearer ${bodyB.accessToken}` } });
|
|
391
|
+
expect(accountStatusB).toBe(200);
|
|
392
|
+
expect(accountB).toEqual({
|
|
393
|
+
id: expect.any(String),
|
|
394
|
+
username: 'bob',
|
|
395
|
+
role: 'user',
|
|
396
|
+
isVerified: true,
|
|
397
|
+
});
|
|
398
|
+
expect(accountA.id).not.toEqual(accountB.id);
|
|
399
|
+
expect(accountA.username).not.toEqual(accountB.username);
|
|
400
|
+
});
|
|
401
|
+
});
|
|
339
402
|
//# sourceMappingURL=auth-api-login.e2e-spec.js.map
|