@dismissible/nestjs-api 2.0.1 → 2.0.2-alpha.72996f5.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.
@@ -19,6 +19,9 @@ cors:
19
19
  storage:
20
20
  # postgres | dynamodb | memory
21
21
  type: ${DISMISSIBLE_STORAGE_TYPE:-memory}
22
+ memory:
23
+ maxItems: ${DISMISSIBLE_STORAGE_MEMORY_MAX_ITEMS:-5000}
24
+ ttlMs: ${DISMISSIBLE_STORAGE_MEMORY_TTL_MS:-21600000}
22
25
  postgres:
23
26
  connectionString: postgresql://postgres:postgres@localhost:5432/dismissible
24
27
  dynamodb:
@@ -31,6 +34,16 @@ storage:
31
34
  jwtAuth:
32
35
  enabled: false
33
36
 
37
+ rateLimiter:
38
+ enabled: true
39
+ points: ${DISMISSIBLE_RATE_LIMITER_POINTS:-10000}
40
+ duration: ${DISMISSIBLE_RATE_LIMITER_DURATION:-1}
41
+ blockDuration: ${DISMISSIBLE_RATE_LIMITER_BLOCK_DURATION:-1}
42
+ keyType: ${DISMISSIBLE_RATE_LIMITER_KEY_TYPE:-ip,origin,referrer}
43
+ keyMode: ${DISMISSIBLE_RATE_LIMITER_KEY_MODE:-any}
44
+ ignoredKeys: ${DISMISSIBLE_RATE_LIMITER_IGNORED_KEYS:-}
45
+ priority: ${DISMISSIBLE_RATE_LIMITER_PRIORITY:--101}
46
+
34
47
  validation:
35
48
  disableErrorMessages: false
36
49
  whitelist: false
package/config/.env.yaml CHANGED
@@ -24,6 +24,9 @@ cors:
24
24
  storage:
25
25
  # postgres | dynamodb | memory
26
26
  type: ${DISMISSIBLE_STORAGE_TYPE:-memory}
27
+ memory:
28
+ maxItems: ${DISMISSIBLE_STORAGE_MEMORY_MAX_ITEMS:-5000}
29
+ ttlMs: ${DISMISSIBLE_STORAGE_MEMORY_TTL_MS:-21600000}
27
30
  postgres:
28
31
  connectionString: ${DISMISSIBLE_STORAGE_POSTGRES_CONNECTION_STRING:-}
29
32
  dynamodb:
@@ -48,6 +51,23 @@ jwtAuth:
48
51
  userIdMatchRegex: ${DISMISSIBLE_JWT_AUTH_USER_ID_MATCH_REGEX:-}
49
52
  userIdClaim: ${DISMISSIBLE_JWT_AUTH_USER_ID_CLAIM:-sub}
50
53
 
54
+ rateLimiter:
55
+ enabled: ${DISMISSIBLE_RATE_LIMITER_ENABLED:-false}
56
+ # Number of requests allowed per duration window
57
+ points: ${DISMISSIBLE_RATE_LIMITER_POINTS:-1000}
58
+ # Time window in seconds for rate limiting
59
+ duration: ${DISMISSIBLE_RATE_LIMITER_DURATION:-1}
60
+ # Optional: Duration in seconds to block requests after limit is exceeded (if not set, requests are allowed again after the duration window resets)
61
+ blockDuration: ${DISMISSIBLE_RATE_LIMITER_BLOCK_DURATION:-60}
62
+ # Key type(s) for rate limiting: 'ip' (by IP address), 'origin' (by Origin header), 'referrer' (by Referer header). Can be comma-separated to combine types (e.g., 'ip,origin')
63
+ keyType: ${DISMISSIBLE_RATE_LIMITER_KEY_TYPE:-ip,origin,referrer}
64
+ # Mode for combining key types: 'and' (combine all), 'or' (use first available), 'any' (check all independently)
65
+ keyMode: ${DISMISSIBLE_RATE_LIMITER_KEY_MODE:-any}
66
+ # Optional: Comma-separated keys to bypass rate limiting. Matching is exact after trim+lowercase. For Origin/Referer, the URL hostname is matched (e.g. "https://google.com/search" matches "google.com").
67
+ ignoredKeys: ${DISMISSIBLE_RATE_LIMITER_IGNORED_KEYS:-}
68
+ # Hook priority (lower numbers run first)
69
+ priority: ${DISMISSIBLE_RATE_LIMITER_PRIORITY:--101}
70
+
51
71
  validation:
52
72
  disableErrorMessages: ${DISMISSIBLE_VALIDATION_DISABLE_ERROR_MESSAGES:-true}
53
73
  whitelist: ${DISMISSIBLE_VALIDATION_WHITELIST:-true}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dismissible/nestjs-api",
3
- "version": "2.0.1",
3
+ "version": "2.0.2-alpha.72996f5.0",
4
4
  "description": "Dismissible API application",
5
5
  "main": "./src/index.js",
6
6
  "types": "./src/index.d.ts",
@@ -30,25 +30,26 @@
30
30
  "storage:setup:dynamodb": "npx dismissible-dynamodb-setup"
31
31
  },
32
32
  "dependencies": {
33
- "@dismissible/nestjs-core": "^2.0.1",
34
- "@dismissible/nestjs-item": "^2.0.1",
35
- "@dismissible/nestjs-jwt-auth-hook": "^2.0.1",
36
- "@dismissible/nestjs-storage": "^2.0.1",
37
- "@dismissible/nestjs-postgres-storage": "^2.0.1",
38
- "@dismissible/nestjs-dynamodb-storage": "^2.0.1",
39
- "@dismissible/nestjs-logger": "^2.0.1",
40
- "@nestjs/common": "^11.1.11",
41
- "@nestjs/core": "^11.1.11",
42
- "@nestjs/platform-fastify": "^11.1.11",
43
- "fastify": "^5.6.2",
44
- "@fastify/helmet": "^13.0.2",
45
- "@fastify/static": "^8.3.0",
46
- "@nestjs/swagger": "^11.2.3",
47
- "class-transformer": "^0.5.1",
48
- "class-validator": "^0.14.3",
49
- "nest-typed-config": "^2.10.1",
50
- "reflect-metadata": "^0.2.2",
51
- "rxjs": "^7.8.2"
33
+ "@dismissible/nestjs-core": "2.0.2-alpha.72996f5.0",
34
+ "@dismissible/nestjs-item": "2.0.2-alpha.72996f5.0",
35
+ "@dismissible/nestjs-jwt-auth-hook": "2.0.2-alpha.72996f5.0",
36
+ "@dismissible/nestjs-storage": "2.0.2-alpha.72996f5.0",
37
+ "@dismissible/nestjs-postgres-storage": "2.0.2-alpha.72996f5.0",
38
+ "@dismissible/nestjs-dynamodb-storage": "2.0.2-alpha.72996f5.0",
39
+ "@dismissible/nestjs-logger": "2.0.2-alpha.72996f5.0",
40
+ "@dismissible/nestjs-rate-limiter-hook": "2.0.2-alpha.72996f5.0",
41
+ "@nestjs/common": "11.1.11",
42
+ "@nestjs/core": "11.1.11",
43
+ "@nestjs/platform-fastify": "11.1.11",
44
+ "fastify": "5.6.2",
45
+ "@fastify/helmet": "13.0.2",
46
+ "@fastify/static": "8.3.0",
47
+ "@nestjs/swagger": "11.2.3",
48
+ "class-transformer": "0.5.1",
49
+ "class-validator": "0.14.3",
50
+ "nest-typed-config": "2.10.1",
51
+ "reflect-metadata": "0.2.2",
52
+ "rxjs": "7.8.2"
52
53
  },
53
54
  "keywords": [
54
55
  "nestjs",
@@ -64,4 +65,4 @@
64
65
  "access": "public"
65
66
  },
66
67
  "type": "commonjs"
67
- }
68
+ }
@@ -1,11 +1,15 @@
1
1
  import { DynamicModule, ModuleMetadata, Type } from '@nestjs/common';
2
+ import { IDismissibleLifecycleHook } from '@dismissible/nestjs-core';
2
3
  import { IDismissibleLogger } from '@dismissible/nestjs-logger';
3
4
  import { DefaultAppConfig } from './config/default-app.config';
5
+ import { StorageType } from './storage/storage.config';
4
6
  export type AppModuleOptions = {
5
7
  configPath?: string;
6
8
  schema?: new () => DefaultAppConfig;
7
9
  logger?: Type<IDismissibleLogger>;
8
10
  imports?: DynamicModule[];
11
+ hooks?: Type<IDismissibleLifecycleHook>[];
12
+ storage?: StorageType;
9
13
  };
10
14
  export declare class AppModule {
11
15
  static forRoot(options?: AppModuleOptions): {
package/src/app.module.js CHANGED
@@ -11,6 +11,8 @@ const path_1 = require("path");
11
11
  const nestjs_core_1 = require("@dismissible/nestjs-core");
12
12
  const dynamic_storage_module_1 = require("./storage/dynamic-storage.module");
13
13
  const nestjs_jwt_auth_hook_1 = require("@dismissible/nestjs-jwt-auth-hook");
14
+ const nestjs_rate_limiter_hook_1 = require("@dismissible/nestjs-rate-limiter-hook");
15
+ const class_transformer_1 = require("class-transformer");
14
16
  let AppModule = AppModule_1 = class AppModule {
15
17
  static forRoot(options) {
16
18
  return {
@@ -27,19 +29,25 @@ let AppModule = AppModule_1 = class AppModule {
27
29
  }),
28
30
  health_1.HealthModule,
29
31
  ...(options?.imports ?? []),
32
+ nestjs_rate_limiter_hook_1.RateLimiterHookModule.forRootAsync({
33
+ useFactory: (config) => {
34
+ return config.rateLimiter ?? (0, class_transformer_1.plainToClass)(nestjs_rate_limiter_hook_1.RateLimiterHookConfig, { enabled: false });
35
+ },
36
+ inject: [options?.schema ?? app_config_1.AppConfig],
37
+ }),
30
38
  nestjs_jwt_auth_hook_1.JwtAuthHookModule.forRootAsync({
31
39
  useFactory: (config) => config,
32
40
  inject: [nestjs_jwt_auth_hook_1.JwtAuthHookConfig],
33
41
  }),
34
42
  nestjs_core_1.DismissibleModule.forRoot({
35
43
  logger: options?.logger,
36
- hooks: [nestjs_jwt_auth_hook_1.JwtAuthHook],
44
+ hooks: [nestjs_jwt_auth_hook_1.JwtAuthHook, nestjs_rate_limiter_hook_1.RateLimiterHook, ...(options?.hooks ?? [])],
37
45
  storage: dynamic_storage_module_1.DynamicStorageModule.forRootAsync({
38
46
  // TODO: nestjs doesn't support optional dynamic modules.
39
47
  // So instead, we are just using the env vars to switch between modules.
40
48
  // This isn't ideal, but there's not a great option. I will look to see
41
49
  // if we can raise an issue similar to this: https://github.com/nestjs/nest/issues/9868
42
- storage: process.env.DISMISSIBLE_STORAGE_TYPE,
50
+ storage: options?.storage ?? process.env.DISMISSIBLE_STORAGE_TYPE,
43
51
  }),
44
52
  }),
45
53
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"app.module.js","sourceRoot":"","sources":["../../../api/src/app.module.ts"],"names":[],"mappings":";;;;;AAAA,2CAA6E;AAC7E,qCAAwC;AACxC,qCAAwC;AACxC,oDAAgD;AAChD,+BAA4B;AAC5B,0DAA6D;AAG7D,6EAAwE;AACxE,4EAI2C;AAWpC,IAAM,SAAS,iBAAf,MAAM,SAAS;IACpB,MAAM,CAAC,OAAO,CAAC,OAA0B;QACvC,OAAO;YACL,MAAM,EAAE,WAAS;YACjB,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;SACnC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,OAA0B;QACjD,OAAO;YACL,OAAO,EAAE;gBACP,qBAAY,CAAC,OAAO,CAAC;oBACnB,IAAI,EAAE,OAAO,EAAE,UAAU,IAAI,IAAA,WAAI,EAAC,SAAS,EAAE,WAAW,CAAC;oBACzD,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,sBAAS;iBACrC,CAAC;gBACF,qBAAY;gBACZ,GAAG,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;gBAC3B,wCAAiB,CAAC,YAAY,CAAC;oBAC7B,UAAU,EAAE,CAAC,MAAyB,EAAE,EAAE,CAAC,MAAM;oBACjD,MAAM,EAAE,CAAC,wCAAiB,CAAC;iBAC5B,CAAC;gBACF,+BAAiB,CAAC,OAAO,CAAC;oBACxB,MAAM,EAAE,OAAO,EAAE,MAAM;oBACvB,KAAK,EAAE,CAAC,kCAAW,CAAC;oBACpB,OAAO,EAAE,6CAAoB,CAAC,YAAY,CAAC;wBACzC,yDAAyD;wBACzD,0EAA0E;wBAC1E,yEAAyE;wBACzE,yFAAyF;wBACzF,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAuC;qBAC7D,CAAC;iBACH,CAAC;aACH;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAnCY,8BAAS;oBAAT,SAAS;IADrB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,SAAS,CAmCrB"}
1
+ {"version":3,"file":"app.module.js","sourceRoot":"","sources":["../../../api/src/app.module.ts"],"names":[],"mappings":";;;;;AAAA,2CAA6E;AAC7E,qCAAwC;AACxC,qCAAwC;AACxC,oDAAgD;AAChD,+BAA4B;AAC5B,0DAAwF;AAGxF,6EAAwE;AACxE,4EAI2C;AAE3C,oFAI+C;AAC/C,yDAAiD;AAY1C,IAAM,SAAS,iBAAf,MAAM,SAAS;IACpB,MAAM,CAAC,OAAO,CAAC,OAA0B;QACvC,OAAO;YACL,MAAM,EAAE,WAAS;YACjB,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC;SACnC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,OAA0B;QACjD,OAAO;YACL,OAAO,EAAE;gBACP,qBAAY,CAAC,OAAO,CAAC;oBACnB,IAAI,EAAE,OAAO,EAAE,UAAU,IAAI,IAAA,WAAI,EAAC,SAAS,EAAE,WAAW,CAAC;oBACzD,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,sBAAS;iBACrC,CAAC;gBACF,qBAAY;gBACZ,GAAG,CAAC,OAAO,EAAE,OAAO,IAAI,EAAE,CAAC;gBAC3B,gDAAqB,CAAC,YAAY,CAAC;oBACjC,UAAU,EAAE,CAAC,MAAwB,EAAE,EAAE;wBACvC,OAAO,MAAM,CAAC,WAAW,IAAI,IAAA,gCAAY,EAAC,gDAAqB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;oBACvF,CAAC;oBACD,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,IAAI,sBAAS,CAAC;iBACvC,CAAC;gBACF,wCAAiB,CAAC,YAAY,CAAC;oBAC7B,UAAU,EAAE,CAAC,MAAyB,EAAE,EAAE,CAAC,MAAM;oBACjD,MAAM,EAAE,CAAC,wCAAiB,CAAC;iBAC5B,CAAC;gBACF,+BAAiB,CAAC,OAAO,CAAC;oBACxB,MAAM,EAAE,OAAO,EAAE,MAAM;oBACvB,KAAK,EAAE,CAAC,kCAAW,EAAE,0CAAe,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;oBAChE,OAAO,EAAE,6CAAoB,CAAC,YAAY,CAAC;wBACzC,yDAAyD;wBACzD,0EAA0E;wBAC1E,yEAAyE;wBACzE,yFAAyF;wBACzF,OAAO,EAAE,OAAO,EAAE,OAAO,IAAK,OAAO,CAAC,GAAG,CAAC,wBAAwC;qBACnF,CAAC;iBACH,CAAC;aACH;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAzCY,8BAAS;oBAAT,SAAS;IADrB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,SAAS,CAyCrB"}
package/src/app.setup.js CHANGED
@@ -8,8 +8,8 @@ const validation_1 = require("./validation");
8
8
  const nestjs_logger_1 = require("@dismissible/nestjs-logger");
9
9
  async function configureApp(app) {
10
10
  const logger = app.get(nestjs_logger_1.DISMISSIBLE_LOGGER);
11
- logger.setContext('AppSetup');
12
- logger.info('Configuring application');
11
+ app.useLogger(logger);
12
+ logger.log('Configuring application');
13
13
  await (0, helmet_1.configureAppWithHelmet)(app);
14
14
  (0, cors_1.configureAppWithCors)(app);
15
15
  (0, validation_1.configureAppWithValidation)(app);
@@ -1 +1 @@
1
- {"version":3,"file":"app.setup.js","sourceRoot":"","sources":["../../../api/src/app.setup.ts"],"names":[],"mappings":";;AAOA,oCASC;AAfD,uCAAoD;AACpD,iCAA8C;AAC9C,qCAAkD;AAClD,6CAA0D;AAC1D,8DAAoF;AAE7E,KAAK,UAAU,YAAY,CAAC,GAAqB;IACtD,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAqB,kCAAkB,CAAC,CAAC;IAC/D,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;IAC9B,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;IAEvC,MAAM,IAAA,+BAAsB,EAAC,GAAG,CAAC,CAAC;IAClC,IAAA,2BAAoB,EAAC,GAAG,CAAC,CAAC;IAC1B,IAAA,uCAA0B,EAAC,GAAG,CAAC,CAAC;IAChC,IAAA,iCAAuB,EAAC,GAAG,CAAC,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"app.setup.js","sourceRoot":"","sources":["../../../api/src/app.setup.ts"],"names":[],"mappings":";;AAOA,oCASC;AAfD,uCAAoD;AACpD,iCAA8C;AAC9C,qCAAkD;AAClD,6CAA0D;AAC1D,8DAAoF;AAE7E,KAAK,UAAU,YAAY,CAAC,GAAqB;IACtD,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAqB,kCAAkB,CAAC,CAAC;IAC/D,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACtB,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAEtC,MAAM,IAAA,+BAAsB,EAAC,GAAG,CAAC,CAAC;IAClC,IAAA,2BAAoB,EAAC,GAAG,CAAC,CAAC;IAC1B,IAAA,uCAA0B,EAAC,GAAG,CAAC,CAAC;IAChC,IAAA,iCAAuB,EAAC,GAAG,CAAC,CAAC;AAC/B,CAAC"}
@@ -1,9 +1,7 @@
1
1
  import { SwaggerConfig } from '../swagger';
2
2
  import { DefaultAppConfig } from './default-app.config';
3
3
  import { JwtAuthHookConfig } from '@dismissible/nestjs-jwt-auth-hook';
4
- import { StorageConfig } from '../storage/storage.config';
5
4
  export declare class AppConfig extends DefaultAppConfig {
6
5
  readonly swagger: SwaggerConfig;
7
- readonly storage: StorageConfig;
8
6
  readonly jwtAuth: JwtAuthHookConfig;
9
7
  }
@@ -7,7 +7,6 @@ const class_transformer_1 = require("class-transformer");
7
7
  const swagger_1 = require("../swagger");
8
8
  const default_app_config_1 = require("./default-app.config");
9
9
  const nestjs_jwt_auth_hook_1 = require("@dismissible/nestjs-jwt-auth-hook");
10
- const storage_config_1 = require("../storage/storage.config");
11
10
  class AppConfig extends default_app_config_1.DefaultAppConfig {
12
11
  }
13
12
  exports.AppConfig = AppConfig;
@@ -17,12 +16,6 @@ tslib_1.__decorate([
17
16
  (0, class_transformer_1.Type)(() => swagger_1.SwaggerConfig),
18
17
  tslib_1.__metadata("design:type", swagger_1.SwaggerConfig)
19
18
  ], AppConfig.prototype, "swagger", void 0);
20
- tslib_1.__decorate([
21
- (0, class_validator_1.ValidateNested)(),
22
- (0, class_validator_1.IsDefined)(),
23
- (0, class_transformer_1.Type)(() => storage_config_1.StorageConfig),
24
- tslib_1.__metadata("design:type", storage_config_1.StorageConfig)
25
- ], AppConfig.prototype, "storage", void 0);
26
19
  tslib_1.__decorate([
27
20
  (0, class_validator_1.ValidateNested)(),
28
21
  (0, class_validator_1.IsDefined)(),
@@ -1 +1 @@
1
- {"version":3,"file":"app.config.js","sourceRoot":"","sources":["../../../../api/src/config/app.config.ts"],"names":[],"mappings":";;;;AAAA,qDAA4D;AAC5D,yDAAyC;AACzC,wCAA2C;AAC3C,6DAAwD;AACxD,4EAAsE;AACtE,8DAA0D;AAE1D,MAAa,SAAU,SAAQ,qCAAgB;CAe9C;AAfD,8BAeC;AAXiB;IAHf,IAAA,gCAAc,GAAE;IAChB,IAAA,2BAAS,GAAE;IACX,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,uBAAa,CAAC;sCACA,uBAAa;0CAAC;AAKxB;IAHf,IAAA,gCAAc,GAAE;IAChB,IAAA,2BAAS,GAAE;IACX,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,8BAAa,CAAC;sCACA,8BAAa;0CAAC;AAKxB;IAHf,IAAA,gCAAc,GAAE;IAChB,IAAA,2BAAS,GAAE;IACX,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,wCAAiB,CAAC;sCACJ,wCAAiB;0CAAC"}
1
+ {"version":3,"file":"app.config.js","sourceRoot":"","sources":["../../../../api/src/config/app.config.ts"],"names":[],"mappings":";;;;AAAA,qDAA4D;AAC5D,yDAAyC;AACzC,wCAA2C;AAC3C,6DAAwD;AACxD,4EAAsE;AAEtE,MAAa,SAAU,SAAQ,qCAAgB;CAU9C;AAVD,8BAUC;AANiB;IAHf,IAAA,gCAAc,GAAE;IAChB,IAAA,2BAAS,GAAE;IACX,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,uBAAa,CAAC;sCACA,uBAAa;0CAAC;AAKxB;IAHf,IAAA,gCAAc,GAAE;IAChB,IAAA,2BAAS,GAAE;IACX,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,wCAAiB,CAAC;sCACJ,wCAAiB;0CAAC"}
@@ -2,9 +2,13 @@ import { ServerConfig } from '../server/server.config';
2
2
  import { CorsConfig } from '../cors';
3
3
  import { HelmetConfig } from '../helmet';
4
4
  import { ValidationConfig } from '../validation';
5
+ import { RateLimiterHookConfig } from '@dismissible/nestjs-rate-limiter-hook';
6
+ import { StorageConfig } from '../storage/storage.config';
5
7
  export declare class DefaultAppConfig {
6
8
  readonly server: ServerConfig;
9
+ readonly rateLimiter?: RateLimiterHookConfig;
7
10
  readonly cors: CorsConfig;
8
11
  readonly helmet: HelmetConfig;
12
+ readonly storage: StorageConfig;
9
13
  readonly validation: ValidationConfig;
10
14
  }
@@ -8,26 +8,44 @@ const server_config_1 = require("../server/server.config");
8
8
  const cors_1 = require("../cors");
9
9
  const helmet_1 = require("../helmet");
10
10
  const validation_1 = require("../validation");
11
+ const nestjs_rate_limiter_hook_1 = require("@dismissible/nestjs-rate-limiter-hook");
12
+ const storage_config_1 = require("../storage/storage.config");
11
13
  class DefaultAppConfig {
12
14
  }
13
15
  exports.DefaultAppConfig = DefaultAppConfig;
14
16
  tslib_1.__decorate([
15
17
  (0, class_validator_1.ValidateNested)(),
18
+ (0, class_validator_1.IsDefined)(),
16
19
  (0, class_transformer_1.Type)(() => server_config_1.ServerConfig),
17
20
  tslib_1.__metadata("design:type", server_config_1.ServerConfig)
18
21
  ], DefaultAppConfig.prototype, "server", void 0);
19
22
  tslib_1.__decorate([
23
+ (0, class_validator_1.IsOptional)(),
20
24
  (0, class_validator_1.ValidateNested)(),
25
+ (0, class_transformer_1.Type)(() => nestjs_rate_limiter_hook_1.RateLimiterHookConfig),
26
+ tslib_1.__metadata("design:type", nestjs_rate_limiter_hook_1.RateLimiterHookConfig)
27
+ ], DefaultAppConfig.prototype, "rateLimiter", void 0);
28
+ tslib_1.__decorate([
29
+ (0, class_validator_1.ValidateNested)(),
30
+ (0, class_validator_1.IsDefined)(),
21
31
  (0, class_transformer_1.Type)(() => cors_1.CorsConfig),
22
32
  tslib_1.__metadata("design:type", cors_1.CorsConfig)
23
33
  ], DefaultAppConfig.prototype, "cors", void 0);
24
34
  tslib_1.__decorate([
25
35
  (0, class_validator_1.ValidateNested)(),
36
+ (0, class_validator_1.IsDefined)(),
26
37
  (0, class_transformer_1.Type)(() => helmet_1.HelmetConfig),
27
38
  tslib_1.__metadata("design:type", helmet_1.HelmetConfig)
28
39
  ], DefaultAppConfig.prototype, "helmet", void 0);
29
40
  tslib_1.__decorate([
30
41
  (0, class_validator_1.ValidateNested)(),
42
+ (0, class_validator_1.IsDefined)(),
43
+ (0, class_transformer_1.Type)(() => storage_config_1.StorageConfig),
44
+ tslib_1.__metadata("design:type", storage_config_1.StorageConfig)
45
+ ], DefaultAppConfig.prototype, "storage", void 0);
46
+ tslib_1.__decorate([
47
+ (0, class_validator_1.ValidateNested)(),
48
+ (0, class_validator_1.IsDefined)(),
31
49
  (0, class_transformer_1.Type)(() => validation_1.ValidationConfig),
32
50
  tslib_1.__metadata("design:type", validation_1.ValidationConfig)
33
51
  ], DefaultAppConfig.prototype, "validation", void 0);
@@ -1 +1 @@
1
- {"version":3,"file":"default-app.config.js","sourceRoot":"","sources":["../../../../api/src/config/default-app.config.ts"],"names":[],"mappings":";;;;AAAA,qDAAiD;AACjD,yDAAyC;AACzC,2DAAuD;AACvD,kCAAqC;AACrC,sCAAyC;AACzC,8CAAiD;AAEjD,MAAa,gBAAgB;CAgB5B;AAhBD,4CAgBC;AAbiB;IAFf,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,4BAAY,CAAC;sCACA,4BAAY;gDAAC;AAItB;IAFf,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,iBAAU,CAAC;sCACA,iBAAU;8CAAC;AAIlB;IAFf,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,qBAAY,CAAC;sCACA,qBAAY;gDAAC;AAItB;IAFf,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,6BAAgB,CAAC;sCACA,6BAAgB;oDAAC"}
1
+ {"version":3,"file":"default-app.config.js","sourceRoot":"","sources":["../../../../api/src/config/default-app.config.ts"],"names":[],"mappings":";;;;AAAA,qDAAwE;AACxE,yDAAyC;AACzC,2DAAuD;AACvD,kCAAqC;AACrC,sCAAyC;AACzC,8CAAiD;AACjD,oFAA8E;AAC9E,8DAA0D;AAE1D,MAAa,gBAAgB;CA8B5B;AA9BD,4CA8BC;AA1BiB;IAHf,IAAA,gCAAc,GAAE;IAChB,IAAA,2BAAS,GAAE;IACX,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,4BAAY,CAAC;sCACA,4BAAY;gDAAC;AAKtB;IAHf,IAAA,4BAAU,GAAE;IACZ,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,gDAAqB,CAAC;sCACJ,gDAAqB;qDAAC;AAKpC;IAHf,IAAA,gCAAc,GAAE;IAChB,IAAA,2BAAS,GAAE;IACX,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,iBAAU,CAAC;sCACA,iBAAU;8CAAC;AAKlB;IAHf,IAAA,gCAAc,GAAE;IAChB,IAAA,2BAAS,GAAE;IACX,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,qBAAY,CAAC;sCACA,qBAAY;gDAAC;AAKtB;IAHf,IAAA,gCAAc,GAAE;IAChB,IAAA,2BAAS,GAAE;IACX,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,8BAAa,CAAC;sCACA,8BAAa;iDAAC;AAKxB;IAHf,IAAA,gCAAc,GAAE;IAChB,IAAA,2BAAS,GAAE;IACX,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,6BAAgB,CAAC;sCACA,6BAAgB;oDAAC"}
@@ -5,7 +5,6 @@ const cors_config_1 = require("./cors.config");
5
5
  const nestjs_logger_1 = require("@dismissible/nestjs-logger");
6
6
  function configureAppWithCors(app) {
7
7
  const logger = app.get(nestjs_logger_1.DISMISSIBLE_LOGGER);
8
- logger.setContext('CORS');
9
8
  const corsConfig = app.get(cors_config_1.CorsConfig);
10
9
  if (corsConfig.enabled) {
11
10
  // origins is guaranteed to be non-empty when enabled via @ValidateIf + @ArrayNotEmpty
@@ -20,10 +19,10 @@ function configureAppWithCors(app) {
20
19
  credentials: corsConfig.credentials ?? true,
21
20
  maxAge: corsConfig.maxAge ?? 86400,
22
21
  });
23
- logger.info('CORS is enabled', { corsConfig });
22
+ logger.log('CORS is enabled', { corsConfig });
24
23
  }
25
24
  else {
26
- logger.info('CORS is disabled');
25
+ logger.log('CORS is disabled');
27
26
  }
28
27
  }
29
28
  //# sourceMappingURL=cors.factory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cors.factory.js","sourceRoot":"","sources":["../../../../api/src/cors/cors.factory.ts"],"names":[],"mappings":";;AAIA,oDAsBC;AAzBD,+CAA2C;AAC3C,8DAAoF;AAEpF,SAAgB,oBAAoB,CAAC,GAAqB;IACxD,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAqB,kCAAkB,CAAC,CAAC;IAC/D,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC1B,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,wBAAU,CAAC,CAAC;IAEvC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,sFAAsF;QACtF,GAAG,CAAC,UAAU,CAAC;YACb,MAAM,EAAE,UAAU,CAAC,OAAQ;YAC3B,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC;YACnE,cAAc,EAAE,UAAU,CAAC,cAAc,IAAI;gBAC3C,cAAc;gBACd,eAAe;gBACf,cAAc;aACf;YACD,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI,IAAI;YAC3C,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,KAAK;SACnC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IACjD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAClC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"cors.factory.js","sourceRoot":"","sources":["../../../../api/src/cors/cors.factory.ts"],"names":[],"mappings":";;AAIA,oDAqBC;AAxBD,+CAA2C;AAC3C,8DAAoF;AAEpF,SAAgB,oBAAoB,CAAC,GAAqB;IACxD,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAqB,kCAAkB,CAAC,CAAC;IAC/D,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,wBAAU,CAAC,CAAC;IAEvC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,sFAAsF;QACtF,GAAG,CAAC,UAAU,CAAC;YACb,MAAM,EAAE,UAAU,CAAC,OAAQ;YAC3B,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,CAAC;YACnE,cAAc,EAAE,UAAU,CAAC,cAAc,IAAI;gBAC3C,cAAc;gBACd,eAAe;gBACf,cAAc;aACf;YACD,WAAW,EAAE,UAAU,CAAC,WAAW,IAAI,IAAI;YAC3C,MAAM,EAAE,UAAU,CAAC,MAAM,IAAI,KAAK;SACnC,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;IAChD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACjC,CAAC;AACH,CAAC"}
@@ -2,6 +2,8 @@ import { INestApplication } from '@nestjs/common';
2
2
  import { DefaultAppConfig } from './config/default-app.config';
3
3
  import { IDismissibleLogger } from '@dismissible/nestjs-logger';
4
4
  import { Type, DynamicModule } from '@nestjs/common';
5
+ import { IDismissibleLifecycleHook } from '@dismissible/nestjs-hooks';
6
+ import { StorageType } from './storage/storage.config';
5
7
  export interface IDismissibleNestApplication {
6
8
  getNestApplication(): INestApplication;
7
9
  start(): Promise<void>;
@@ -11,6 +13,8 @@ export interface IDismissibleNestFactoryOptions {
11
13
  schema?: new () => DefaultAppConfig;
12
14
  logger?: Type<IDismissibleLogger>;
13
15
  imports?: DynamicModule[];
16
+ hooks?: Type<IDismissibleLifecycleHook>[];
17
+ storage?: StorageType;
14
18
  }
15
19
  export declare class DismissibleNestFactory {
16
20
  static create(options?: IDismissibleNestFactoryOptions): Promise<IDismissibleNestApplication>;
@@ -1 +1 @@
1
- {"version":3,"file":"dismissible-nest-factory.js","sourceRoot":"","sources":["../../../api/src/dismissible-nest-factory.ts"],"names":[],"mappings":";;;AACA,uCAA2C;AAC3C,+DAAkF;AAClF,6CAAyC;AACzC,0DAAsD;AACtD,2CAA2C;AAiB3C,MAAM,0BAA0B;IAC9B,YAA6B,GAA2B;QAA3B,QAAG,GAAH,GAAG,CAAwB;IAAG,CAAC;IAE5D,KAAK,CAAC,KAAK;QACT,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,4BAAY,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC;QACvC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,kDAAkD,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;CACF;AAED,MAAa,sBAAsB;IACjC,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,OAAwC;QAExC,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAClC,sBAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAC1B,IAAI,iCAAc,CAAC;YACjB,SAAS,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO;SAC9B,CAAC,CACH,CAAC;QACF,MAAM,IAAA,wBAAY,EAAC,GAAG,CAAC,CAAC;QAExB,OAAO,IAAI,0BAA0B,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;CACF;AAdD,wDAcC"}
1
+ {"version":3,"file":"dismissible-nest-factory.js","sourceRoot":"","sources":["../../../api/src/dismissible-nest-factory.ts"],"names":[],"mappings":";;;AACA,uCAA2C;AAC3C,+DAAkF;AAClF,6CAAyC;AACzC,0DAAsD;AACtD,2CAA2C;AAqB3C,MAAM,0BAA0B;IAC9B,YAA6B,GAA2B;QAA3B,QAAG,GAAH,GAAG,CAAwB;IAAG,CAAC;IAE5D,KAAK,CAAC,KAAK;QACT,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,4BAAY,CAAC,CAAC;QAChD,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC;QACvC,MAAM,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,kDAAkD,IAAI,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB,CAAC;CACF;AAED,MAAa,sBAAsB;IACjC,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,OAAwC;QAExC,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAClC,sBAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAC1B,IAAI,iCAAc,CAAC;YACjB,SAAS,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO;SAC9B,CAAC,CACH,CAAC;QACF,MAAM,IAAA,wBAAY,EAAC,GAAG,CAAC,CAAC;QAExB,OAAO,IAAI,0BAA0B,CAAC,GAAG,CAAC,CAAC;IAC7C,CAAC;CACF;AAdD,wDAcC"}
@@ -7,7 +7,6 @@ const helmet_config_1 = require("./helmet.config");
7
7
  const nestjs_logger_1 = require("@dismissible/nestjs-logger");
8
8
  async function configureAppWithHelmet(app) {
9
9
  const logger = app.get(nestjs_logger_1.DISMISSIBLE_LOGGER);
10
- logger.setContext('Helmet');
11
10
  const helmetConfig = app.get(helmet_config_1.HelmetConfig);
12
11
  if (helmetConfig.enabled) {
13
12
  const fastifyApp = app;
@@ -20,10 +19,10 @@ async function configureAppWithHelmet(app) {
20
19
  preload: helmetConfig.hstsPreload ?? false,
21
20
  },
22
21
  });
23
- logger.info('Helmet is enabled', { helmetConfig });
22
+ logger.log('Helmet is enabled', { helmetConfig });
24
23
  }
25
24
  else {
26
- logger.info('Helmet is disabled');
25
+ logger.log('Helmet is disabled');
27
26
  }
28
27
  }
29
28
  //# sourceMappingURL=helmet.factory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helmet.factory.js","sourceRoot":"","sources":["../../../../api/src/helmet/helmet.factory.ts"],"names":[],"mappings":";;AAMA,wDAoBC;;AAxBD,qEAA4C;AAC5C,mDAA+C;AAC/C,8DAAoF;AAE7E,KAAK,UAAU,sBAAsB,CAAC,GAAqB;IAChE,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAqB,kCAAkB,CAAC,CAAC;IAC/D,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC5B,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,4BAAY,CAAC,CAAC;IAE3C,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,GAA6B,CAAC;QACjD,MAAM,UAAU,CAAC,QAAQ,CAAC,gBAAa,EAAE;YACvC,qBAAqB,EAAE,YAAY,CAAC,qBAAqB,IAAI,IAAI;YACjE,yBAAyB,EAAE,YAAY,CAAC,yBAAyB,IAAI,IAAI;YACzE,IAAI,EAAE;gBACJ,MAAM,EAAE,YAAY,CAAC,UAAU,IAAI,QAAQ;gBAC3C,iBAAiB,EAAE,YAAY,CAAC,qBAAqB,IAAI,IAAI;gBAC7D,OAAO,EAAE,YAAY,CAAC,WAAW,IAAI,KAAK;aAC3C;SACF,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;IACrD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACpC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"helmet.factory.js","sourceRoot":"","sources":["../../../../api/src/helmet/helmet.factory.ts"],"names":[],"mappings":";;AAMA,wDAmBC;;AAvBD,qEAA4C;AAC5C,mDAA+C;AAC/C,8DAAoF;AAE7E,KAAK,UAAU,sBAAsB,CAAC,GAAqB;IAChE,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAqB,kCAAkB,CAAC,CAAC;IAC/D,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,4BAAY,CAAC,CAAC;IAE3C,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,GAA6B,CAAC;QACjD,MAAM,UAAU,CAAC,QAAQ,CAAC,gBAAa,EAAE;YACvC,qBAAqB,EAAE,YAAY,CAAC,qBAAqB,IAAI,IAAI;YACjE,yBAAyB,EAAE,YAAY,CAAC,yBAAyB,IAAI,IAAI;YACzE,IAAI,EAAE;gBACJ,MAAM,EAAE,YAAY,CAAC,UAAU,IAAI,QAAQ;gBAC3C,iBAAiB,EAAE,YAAY,CAAC,qBAAqB,IAAI,IAAI;gBAC7D,OAAO,EAAE,YAAY,CAAC,WAAW,IAAI,KAAK;aAC3C;SACF,CAAC,CAAC;QACH,MAAM,CAAC,GAAG,CAAC,mBAAmB,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IACnC,CAAC;AACH,CAAC"}
@@ -22,7 +22,10 @@ let DynamicStorageModule = class DynamicStorageModule {
22
22
  });
23
23
  case storage_config_1.StorageType.MEMORY:
24
24
  default:
25
- return nestjs_storage_1.MemoryStorageModule.forRoot();
25
+ return nestjs_storage_1.MemoryStorageModule.forRootAsync({
26
+ useFactory: (config) => config?.memory || {},
27
+ inject: [storage_config_1.StorageConfig],
28
+ });
26
29
  }
27
30
  }
28
31
  };
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic-storage.module.js","sourceRoot":"","sources":["../../../../api/src/storage/dynamic-storage.module.ts"],"names":[],"mappings":";;;;AAAA,2CAAuD;AACvD,kFAA6E;AAC7E,qDAA8D;AAC9D,kFAA6E;AAC7E,gEAAkE;AAO3D,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAA+B;QAC1D,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,4BAAW,CAAC,QAAQ;gBACvB,OAAO,+CAAqB,CAAC,YAAY,CAAC;oBACxC,UAAU,EAAE,CAAC,MAAqB,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ;oBACtD,MAAM,EAAE,CAAC,8BAAa,CAAC;iBACxB,CAAC,CAAC;YACL,KAAK,4BAAW,CAAC,QAAQ;gBACvB,OAAO,+CAAqB,CAAC,YAAY,CAAC;oBACxC,UAAU,EAAE,CAAC,MAAqB,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ;oBACtD,MAAM,EAAE,CAAC,8BAAa,CAAC;iBACxB,CAAC,CAAC;YACL,KAAK,4BAAW,CAAC,MAAM,CAAC;YACxB;gBACE,OAAO,oCAAmB,CAAC,OAAO,EAAE,CAAC;QACzC,CAAC;IACH,CAAC;CACF,CAAA;AAlBY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,oBAAoB,CAkBhC"}
1
+ {"version":3,"file":"dynamic-storage.module.js","sourceRoot":"","sources":["../../../../api/src/storage/dynamic-storage.module.ts"],"names":[],"mappings":";;;;AAAA,2CAAuD;AACvD,kFAA6E;AAC7E,qDAA8D;AAC9D,kFAA6E;AAC7E,gEAAkE;AAO3D,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO,EAA+B;QAC1D,QAAQ,OAAO,EAAE,CAAC;YAChB,KAAK,4BAAW,CAAC,QAAQ;gBACvB,OAAO,+CAAqB,CAAC,YAAY,CAAC;oBACxC,UAAU,EAAE,CAAC,MAAqB,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ;oBACtD,MAAM,EAAE,CAAC,8BAAa,CAAC;iBACxB,CAAC,CAAC;YACL,KAAK,4BAAW,CAAC,QAAQ;gBACvB,OAAO,+CAAqB,CAAC,YAAY,CAAC;oBACxC,UAAU,EAAE,CAAC,MAAqB,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ;oBACtD,MAAM,EAAE,CAAC,8BAAa,CAAC;iBACxB,CAAC,CAAC;YACL,KAAK,4BAAW,CAAC,MAAM,CAAC;YACxB;gBACE,OAAO,oCAAmB,CAAC,YAAY,CAAC;oBACtC,UAAU,EAAE,CAAC,MAAqB,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE;oBAC3D,MAAM,EAAE,CAAC,8BAAa,CAAC;iBACxB,CAAC,CAAC;QACP,CAAC;IACH,CAAC;CACF,CAAA;AArBY,oDAAoB;+BAApB,oBAAoB;IADhC,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,oBAAoB,CAqBhC"}
@@ -1,5 +1,6 @@
1
1
  import { PostgresStorageConfig } from '@dismissible/nestjs-postgres-storage';
2
2
  import { DynamoDBStorageConfig } from '@dismissible/nestjs-dynamodb-storage';
3
+ import { MemoryStorageConfig } from '@dismissible/nestjs-storage';
3
4
  export declare enum StorageType {
4
5
  MEMORY = "memory",
5
6
  POSTGRES = "postgres",
@@ -9,4 +10,5 @@ export declare class StorageConfig {
9
10
  readonly type: StorageType;
10
11
  readonly postgres: PostgresStorageConfig;
11
12
  readonly dynamodb: DynamoDBStorageConfig;
13
+ readonly memory?: MemoryStorageConfig;
12
14
  }
@@ -6,6 +6,7 @@ const class_validator_1 = require("class-validator");
6
6
  const class_transformer_1 = require("class-transformer");
7
7
  const nestjs_postgres_storage_1 = require("@dismissible/nestjs-postgres-storage");
8
8
  const nestjs_dynamodb_storage_1 = require("@dismissible/nestjs-dynamodb-storage");
9
+ const nestjs_storage_1 = require("@dismissible/nestjs-storage");
9
10
  var StorageType;
10
11
  (function (StorageType) {
11
12
  StorageType["MEMORY"] = "memory";
@@ -34,4 +35,11 @@ tslib_1.__decorate([
34
35
  (0, class_transformer_1.Type)(() => nestjs_dynamodb_storage_1.DynamoDBStorageConfig),
35
36
  tslib_1.__metadata("design:type", nestjs_dynamodb_storage_1.DynamoDBStorageConfig)
36
37
  ], StorageConfig.prototype, "dynamodb", void 0);
38
+ tslib_1.__decorate([
39
+ (0, class_validator_1.IsOptional)(),
40
+ (0, class_validator_1.IsDefined)(),
41
+ (0, class_validator_1.ValidateNested)(),
42
+ (0, class_transformer_1.Type)(() => nestjs_storage_1.MemoryStorageConfig),
43
+ tslib_1.__metadata("design:type", nestjs_storage_1.MemoryStorageConfig)
44
+ ], StorageConfig.prototype, "memory", void 0);
37
45
  //# sourceMappingURL=storage.config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.config.js","sourceRoot":"","sources":["../../../../api/src/storage/storage.config.ts"],"names":[],"mappings":";;;;AAAA,qDAAgF;AAChF,yDAAyC;AACzC,kFAA6E;AAC7E,kFAA6E;AAE7E,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,oCAAqB,CAAA;IACrB,oCAAqB,CAAA;AACvB,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB;AAED,MAAa,aAAa;CAgBzB;AAhBD,sCAgBC;AAbiB;IAFf,IAAA,2BAAS,GAAE;IACX,IAAA,wBAAM,EAAC,WAAW,CAAC;;2CACe;AAMnB;IAJf,IAAA,4BAAU,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,QAAQ,CAAC;IAClD,IAAA,2BAAS,GAAE;IACX,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,+CAAqB,CAAC;sCACP,+CAAqB;+CAAC;AAMjC;IAJf,IAAA,4BAAU,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,QAAQ,CAAC;IAClD,IAAA,2BAAS,GAAE;IACX,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,+CAAqB,CAAC;sCACP,+CAAqB;+CAAC"}
1
+ {"version":3,"file":"storage.config.js","sourceRoot":"","sources":["../../../../api/src/storage/storage.config.ts"],"names":[],"mappings":";;;;AAAA,qDAA4F;AAC5F,yDAAyC;AACzC,kFAA6E;AAC7E,kFAA6E;AAC7E,gEAAkE;AAElE,IAAY,WAIX;AAJD,WAAY,WAAW;IACrB,gCAAiB,CAAA;IACjB,oCAAqB,CAAA;IACrB,oCAAqB,CAAA;AACvB,CAAC,EAJW,WAAW,2BAAX,WAAW,QAItB;AAED,MAAa,aAAa;CAsBzB;AAtBD,sCAsBC;AAnBiB;IAFf,IAAA,2BAAS,GAAE;IACX,IAAA,wBAAM,EAAC,WAAW,CAAC;;2CACe;AAMnB;IAJf,IAAA,4BAAU,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,QAAQ,CAAC;IAClD,IAAA,2BAAS,GAAE;IACX,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,+CAAqB,CAAC;sCACP,+CAAqB;+CAAC;AAMjC;IAJf,IAAA,4BAAU,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,QAAQ,CAAC;IAClD,IAAA,2BAAS,GAAE;IACX,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,+CAAqB,CAAC;sCACP,+CAAqB;+CAAC;AAMjC;IAJf,IAAA,4BAAU,GAAE;IACZ,IAAA,2BAAS,GAAE;IACX,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,oCAAmB,CAAC;sCACP,oCAAmB;6CAAC"}
@@ -9,10 +9,9 @@ const swaggerDocumentOptions = {
9
9
  };
10
10
  function configureAppWithSwagger(app) {
11
11
  const logger = app.get(nestjs_logger_1.DISMISSIBLE_LOGGER);
12
- logger.setContext('Swagger');
13
12
  const swaggerConfig = app.get(swagger_config_1.SwaggerConfig);
14
13
  if (swaggerConfig.enabled) {
15
- logger.info('Swagger is enabled', { swaggerConfig });
14
+ logger.log('Swagger is enabled', { swaggerConfig });
16
15
  const { path = 'docs' } = swaggerConfig;
17
16
  const config = new swagger_1.DocumentBuilder()
18
17
  .setTitle('Dismissible')
@@ -25,7 +24,7 @@ function configureAppWithSwagger(app) {
25
24
  });
26
25
  }
27
26
  else {
28
- logger.info('Swagger is disabled');
27
+ logger.log('Swagger is disabled');
29
28
  }
30
29
  }
31
30
  //# sourceMappingURL=swagger.factory.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"swagger.factory.js","sourceRoot":"","sources":["../../../../api/src/swagger/swagger.factory.ts"],"names":[],"mappings":";;AASA,0DAsBC;AA9BD,6CAAyF;AACzF,qDAAiD;AACjD,8DAAoF;AAEpF,MAAM,sBAAsB,GAA2B;IACrD,kBAAkB,EAAE,CAAC,cAAsB,EAAE,SAAiB,EAAE,EAAE,CAAC,SAAS;CAC7E,CAAC;AAEF,SAAgB,uBAAuB,CAAC,GAAqB;IAC3D,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAqB,kCAAkB,CAAC,CAAC;IAC/D,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC7B,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,8BAAa,CAAC,CAAC;IAE7C,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;QACrD,MAAM,EAAE,IAAI,GAAG,MAAM,EAAE,GAAG,aAAa,CAAC;QAExC,MAAM,MAAM,GAAG,IAAI,yBAAe,EAAE;aACjC,QAAQ,CAAC,aAAa,CAAC;aACvB,cAAc,CAAC,8CAA8C,CAAC;aAC9D,UAAU,CAAC,KAAK,CAAC;aACjB,KAAK,EAAE,CAAC;QAEX,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,uBAAa,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,sBAAsB,CAAC,CAAC;QAChG,uBAAa,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,eAAe,EAAE;YAC9C,eAAe,EAAE,IAAI;SACtB,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACrC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"swagger.factory.js","sourceRoot":"","sources":["../../../../api/src/swagger/swagger.factory.ts"],"names":[],"mappings":";;AASA,0DAqBC;AA7BD,6CAAyF;AACzF,qDAAiD;AACjD,8DAAoF;AAEpF,MAAM,sBAAsB,GAA2B;IACrD,kBAAkB,EAAE,CAAC,cAAsB,EAAE,SAAiB,EAAE,EAAE,CAAC,SAAS;CAC7E,CAAC;AAEF,SAAgB,uBAAuB,CAAC,GAAqB;IAC3D,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAqB,kCAAkB,CAAC,CAAC;IAC/D,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,8BAAa,CAAC,CAAC;IAE7C,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC;QACpD,MAAM,EAAE,IAAI,GAAG,MAAM,EAAE,GAAG,aAAa,CAAC;QAExC,MAAM,MAAM,GAAG,IAAI,yBAAe,EAAE;aACjC,QAAQ,CAAC,aAAa,CAAC;aACvB,cAAc,CAAC,8CAA8C,CAAC;aAC9D,UAAU,CAAC,KAAK,CAAC;aACjB,KAAK,EAAE,CAAC;QAEX,MAAM,eAAe,GAAG,GAAG,EAAE,CAAC,uBAAa,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,sBAAsB,CAAC,CAAC;QAChG,uBAAa,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,eAAe,EAAE;YAC9C,eAAe,EAAE,IAAI;SACtB,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACpC,CAAC;AACH,CAAC"}
@@ -6,9 +6,8 @@ const validation_config_1 = require("./validation.config");
6
6
  const nestjs_logger_1 = require("@dismissible/nestjs-logger");
7
7
  function configureAppWithValidation(app) {
8
8
  const logger = app.get(nestjs_logger_1.DISMISSIBLE_LOGGER);
9
- logger.setContext('Validation');
10
9
  const validationConfig = app.get(validation_config_1.ValidationConfig);
11
- logger.info('Registering ValidationPipe', { validationConfig });
10
+ logger.log('Registering ValidationPipe', { validationConfig });
12
11
  app.useGlobalPipes(new common_1.ValidationPipe({
13
12
  whitelist: validationConfig.whitelist ?? true,
14
13
  forbidNonWhitelisted: validationConfig.forbidNonWhitelisted ?? true,
@@ -1 +1 @@
1
- {"version":3,"file":"validation.factory.js","sourceRoot":"","sources":["../../../../api/src/validation/validation.factory.ts"],"names":[],"mappings":";;AAIA,gEAcC;AAlBD,2CAAkE;AAClE,2DAAuD;AACvD,8DAAoF;AAEpF,SAAgB,0BAA0B,CAAC,GAAqB;IAC9D,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAqB,kCAAkB,CAAC,CAAC;IAC/D,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAChC,MAAM,gBAAgB,GAAG,GAAG,CAAC,GAAG,CAAC,oCAAgB,CAAC,CAAC;IAEnD,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAChE,GAAG,CAAC,cAAc,CAChB,IAAI,uBAAc,CAAC;QACjB,SAAS,EAAE,gBAAgB,CAAC,SAAS,IAAI,IAAI;QAC7C,oBAAoB,EAAE,gBAAgB,CAAC,oBAAoB,IAAI,IAAI;QACnE,SAAS,EAAE,gBAAgB,CAAC,SAAS,IAAI,IAAI;QAC7C,oBAAoB,EAAE,gBAAgB,CAAC,oBAAoB,IAAI,IAAI;KACpE,CAAC,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"validation.factory.js","sourceRoot":"","sources":["../../../../api/src/validation/validation.factory.ts"],"names":[],"mappings":";;AAIA,gEAaC;AAjBD,2CAAkE;AAClE,2DAAuD;AACvD,8DAAoF;AAEpF,SAAgB,0BAA0B,CAAC,GAAqB;IAC9D,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAqB,kCAAkB,CAAC,CAAC;IAC/D,MAAM,gBAAgB,GAAG,GAAG,CAAC,GAAG,CAAC,oCAAgB,CAAC,CAAC;IAEnD,MAAM,CAAC,GAAG,CAAC,4BAA4B,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAC/D,GAAG,CAAC,cAAc,CAChB,IAAI,uBAAc,CAAC;QACjB,SAAS,EAAE,gBAAgB,CAAC,SAAS,IAAI,IAAI;QAC7C,oBAAoB,EAAE,gBAAgB,CAAC,oBAAoB,IAAI,IAAI;QACnE,SAAS,EAAE,gBAAgB,CAAC,SAAS,IAAI,IAAI;QAC7C,oBAAoB,EAAE,gBAAgB,CAAC,oBAAoB,IAAI,IAAI;KACpE,CAAC,CACH,CAAC;AACJ,CAAC"}