@dismissible/nestjs-api 2.0.2-alpha.f50def9.0 → 2.0.2
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 +3 -0
- package/config/.env.yaml +5 -2
- package/package.json +22 -22
- 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 +2 -0
- package/src/config/default-app.config.js +11 -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.js +3 -1
- 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:
|
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:
|
|
@@ -51,11 +54,11 @@ jwtAuth:
|
|
|
51
54
|
rateLimiter:
|
|
52
55
|
enabled: ${DISMISSIBLE_RATE_LIMITER_ENABLED:-false}
|
|
53
56
|
# Number of requests allowed per duration window
|
|
54
|
-
points: ${DISMISSIBLE_RATE_LIMITER_POINTS:-
|
|
57
|
+
points: ${DISMISSIBLE_RATE_LIMITER_POINTS:-1000}
|
|
55
58
|
# Time window in seconds for rate limiting
|
|
56
59
|
duration: ${DISMISSIBLE_RATE_LIMITER_DURATION:-1}
|
|
57
60
|
# Optional: Duration in seconds to block requests after limit is exceeded (if not set, requests are allowed again after the duration window resets)
|
|
58
|
-
blockDuration: ${DISMISSIBLE_RATE_LIMITER_BLOCK_DURATION:-}
|
|
61
|
+
blockDuration: ${DISMISSIBLE_RATE_LIMITER_BLOCK_DURATION:-60}
|
|
59
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')
|
|
60
63
|
keyType: ${DISMISSIBLE_RATE_LIMITER_KEY_TYPE:-ip,origin,referrer}
|
|
61
64
|
# Mode for combining key types: 'and' (combine all), 'or' (use first available), 'any' (check all independently)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dismissible/nestjs-api",
|
|
3
|
-
"version": "2.0.2
|
|
3
|
+
"version": "2.0.2",
|
|
4
4
|
"description": "Dismissible API application",
|
|
5
5
|
"main": "./src/index.js",
|
|
6
6
|
"types": "./src/index.d.ts",
|
|
@@ -30,26 +30,26 @@
|
|
|
30
30
|
"storage:setup:dynamodb": "npx dismissible-dynamodb-setup"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@dismissible/nestjs-core": "2.0.2
|
|
34
|
-
"@dismissible/nestjs-item": "2.0.2
|
|
35
|
-
"@dismissible/nestjs-jwt-auth-hook": "2.0.2
|
|
36
|
-
"@dismissible/nestjs-storage": "2.0.2
|
|
37
|
-
"@dismissible/nestjs-postgres-storage": "2.0.2
|
|
38
|
-
"@dismissible/nestjs-dynamodb-storage": "2.0.2
|
|
39
|
-
"@dismissible/nestjs-logger": "2.0.2
|
|
40
|
-
"@dismissible/nestjs-rate-limiter-hook": "2.0.2
|
|
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"
|
|
33
|
+
"@dismissible/nestjs-core": "^2.0.2",
|
|
34
|
+
"@dismissible/nestjs-item": "^2.0.2",
|
|
35
|
+
"@dismissible/nestjs-jwt-auth-hook": "^2.0.2",
|
|
36
|
+
"@dismissible/nestjs-storage": "^2.0.2",
|
|
37
|
+
"@dismissible/nestjs-postgres-storage": "^2.0.2",
|
|
38
|
+
"@dismissible/nestjs-dynamodb-storage": "^2.0.2",
|
|
39
|
+
"@dismissible/nestjs-logger": "^2.0.2",
|
|
40
|
+
"@dismissible/nestjs-rate-limiter-hook": "^2.0.2",
|
|
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"
|
|
53
53
|
},
|
|
54
54
|
"keywords": [
|
|
55
55
|
"nestjs",
|
|
@@ -65,4 +65,4 @@
|
|
|
65
65
|
"access": "public"
|
|
66
66
|
},
|
|
67
67
|
"type": "commonjs"
|
|
68
|
-
}
|
|
68
|
+
}
|
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"}
|
|
@@ -3,10 +3,12 @@ import { CorsConfig } from '../cors';
|
|
|
3
3
|
import { HelmetConfig } from '../helmet';
|
|
4
4
|
import { ValidationConfig } from '../validation';
|
|
5
5
|
import { RateLimiterHookConfig } from '@dismissible/nestjs-rate-limiter-hook';
|
|
6
|
+
import { StorageConfig } from '../storage/storage.config';
|
|
6
7
|
export declare class DefaultAppConfig {
|
|
7
8
|
readonly server: ServerConfig;
|
|
8
9
|
readonly rateLimiter?: RateLimiterHookConfig;
|
|
9
10
|
readonly cors: CorsConfig;
|
|
10
11
|
readonly helmet: HelmetConfig;
|
|
12
|
+
readonly storage: StorageConfig;
|
|
11
13
|
readonly validation: ValidationConfig;
|
|
12
14
|
}
|
|
@@ -9,11 +9,13 @@ const cors_1 = require("../cors");
|
|
|
9
9
|
const helmet_1 = require("../helmet");
|
|
10
10
|
const validation_1 = require("../validation");
|
|
11
11
|
const nestjs_rate_limiter_hook_1 = require("@dismissible/nestjs-rate-limiter-hook");
|
|
12
|
+
const storage_config_1 = require("../storage/storage.config");
|
|
12
13
|
class DefaultAppConfig {
|
|
13
14
|
}
|
|
14
15
|
exports.DefaultAppConfig = DefaultAppConfig;
|
|
15
16
|
tslib_1.__decorate([
|
|
16
17
|
(0, class_validator_1.ValidateNested)(),
|
|
18
|
+
(0, class_validator_1.IsDefined)(),
|
|
17
19
|
(0, class_transformer_1.Type)(() => server_config_1.ServerConfig),
|
|
18
20
|
tslib_1.__metadata("design:type", server_config_1.ServerConfig)
|
|
19
21
|
], DefaultAppConfig.prototype, "server", void 0);
|
|
@@ -25,16 +27,25 @@ tslib_1.__decorate([
|
|
|
25
27
|
], DefaultAppConfig.prototype, "rateLimiter", void 0);
|
|
26
28
|
tslib_1.__decorate([
|
|
27
29
|
(0, class_validator_1.ValidateNested)(),
|
|
30
|
+
(0, class_validator_1.IsDefined)(),
|
|
28
31
|
(0, class_transformer_1.Type)(() => cors_1.CorsConfig),
|
|
29
32
|
tslib_1.__metadata("design:type", cors_1.CorsConfig)
|
|
30
33
|
], DefaultAppConfig.prototype, "cors", void 0);
|
|
31
34
|
tslib_1.__decorate([
|
|
32
35
|
(0, class_validator_1.ValidateNested)(),
|
|
36
|
+
(0, class_validator_1.IsDefined)(),
|
|
33
37
|
(0, class_transformer_1.Type)(() => helmet_1.HelmetConfig),
|
|
34
38
|
tslib_1.__metadata("design:type", helmet_1.HelmetConfig)
|
|
35
39
|
], DefaultAppConfig.prototype, "helmet", void 0);
|
|
36
40
|
tslib_1.__decorate([
|
|
37
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)(),
|
|
38
49
|
(0, class_transformer_1.Type)(() => validation_1.ValidationConfig),
|
|
39
50
|
tslib_1.__metadata("design:type", validation_1.ValidationConfig)
|
|
40
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"}
|
|
@@ -6,15 +6,17 @@ const platform_fastify_1 = require("@nestjs/platform-fastify");
|
|
|
6
6
|
const app_module_1 = require("./app.module");
|
|
7
7
|
const server_config_1 = require("./server/server.config");
|
|
8
8
|
const app_setup_1 = require("./app.setup");
|
|
9
|
+
const nestjs_logger_1 = require("@dismissible/nestjs-logger");
|
|
9
10
|
class DismissibleNestApplication {
|
|
10
11
|
constructor(app) {
|
|
11
12
|
this.app = app;
|
|
12
13
|
}
|
|
13
14
|
async start() {
|
|
14
15
|
const serverConfig = this.app.get(server_config_1.ServerConfig);
|
|
16
|
+
const logger = this.app.get(nestjs_logger_1.DISMISSIBLE_LOGGER);
|
|
15
17
|
const port = serverConfig.port ?? 3000;
|
|
16
18
|
await this.app.listen(port, '0.0.0.0');
|
|
17
|
-
|
|
19
|
+
logger.log(`🚀 Application is running on: http://localhost:${port}`);
|
|
18
20
|
}
|
|
19
21
|
getNestApplication() {
|
|
20
22
|
return this.app;
|
|
@@ -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;AAE3C,8DAAoF;AAmBpF,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,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,kCAAkB,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,MAAM,CAAC,GAAG,CAAC,kDAAkD,IAAI,EAAE,CAAC,CAAC;IACvE,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"}
|