@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.
- package/config/.env.development.yaml +13 -0
- package/config/.env.yaml +20 -0
- package/package.json +22 -21
- package/src/app.module.d.ts +4 -0
- package/src/app.module.js +10 -2
- package/src/app.module.js.map +1 -1
- package/src/app.setup.js +2 -2
- package/src/app.setup.js.map +1 -1
- package/src/config/app.config.d.ts +0 -2
- package/src/config/app.config.js +0 -7
- package/src/config/app.config.js.map +1 -1
- package/src/config/default-app.config.d.ts +4 -0
- package/src/config/default-app.config.js +18 -0
- package/src/config/default-app.config.js.map +1 -1
- package/src/cors/cors.factory.js +2 -3
- package/src/cors/cors.factory.js.map +1 -1
- package/src/dismissible-nest-factory.d.ts +4 -0
- package/src/dismissible-nest-factory.js.map +1 -1
- package/src/helmet/helmet.factory.js +2 -3
- package/src/helmet/helmet.factory.js.map +1 -1
- package/src/storage/dynamic-storage.module.js +4 -1
- package/src/storage/dynamic-storage.module.js.map +1 -1
- package/src/storage/storage.config.d.ts +2 -0
- package/src/storage/storage.config.js +8 -0
- package/src/storage/storage.config.js.map +1 -1
- package/src/swagger/swagger.factory.js +2 -3
- package/src/swagger/swagger.factory.js.map +1 -1
- package/src/validation/validation.factory.js +1 -2
- package/src/validation/validation.factory.js.map +1 -1
|
@@ -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.
|
|
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": "
|
|
34
|
-
"@dismissible/nestjs-item": "
|
|
35
|
-
"@dismissible/nestjs-jwt-auth-hook": "
|
|
36
|
-
"@dismissible/nestjs-storage": "
|
|
37
|
-
"@dismissible/nestjs-postgres-storage": "
|
|
38
|
-
"@dismissible/nestjs-dynamodb-storage": "
|
|
39
|
-
"@dismissible/nestjs-logger": "
|
|
40
|
-
"@nestjs
|
|
41
|
-
"@nestjs/
|
|
42
|
-
"@nestjs/
|
|
43
|
-
"fastify": "
|
|
44
|
-
"
|
|
45
|
-
"@fastify/
|
|
46
|
-
"@
|
|
47
|
-
"
|
|
48
|
-
"class-
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
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
|
+
}
|
package/src/app.module.d.ts
CHANGED
|
@@ -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
|
],
|
package/src/app.module.js.map
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
12
|
-
logger.
|
|
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);
|
package/src/app.setup.js.map
CHANGED
|
@@ -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,
|
|
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
|
}
|
package/src/config/app.config.js
CHANGED
|
@@ -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;
|
|
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,
|
|
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"}
|
package/src/cors/cors.factory.js
CHANGED
|
@@ -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.
|
|
22
|
+
logger.log('CORS is enabled', { corsConfig });
|
|
24
23
|
}
|
|
25
24
|
else {
|
|
26
|
-
logger.
|
|
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,
|
|
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;
|
|
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.
|
|
22
|
+
logger.log('Helmet is enabled', { helmetConfig });
|
|
24
23
|
}
|
|
25
24
|
else {
|
|
26
|
-
logger.
|
|
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,
|
|
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.
|
|
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,
|
|
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,
|
|
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.
|
|
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.
|
|
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,
|
|
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.
|
|
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,
|
|
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"}
|