@dismissible/nestjs-api 0.0.1
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.yaml +41 -0
- package/package.json +59 -0
- package/src/app-test.factory.js +30 -0
- package/src/app-test.factory.js.map +1 -0
- package/src/app.module.js +54 -0
- package/src/app.module.js.map +1 -0
- package/src/app.setup.js +49 -0
- package/src/app.setup.js.map +1 -0
- package/src/bootstrap.js +19 -0
- package/src/bootstrap.js.map +1 -0
- package/src/config/app.config.js +29 -0
- package/src/config/app.config.js.map +1 -0
- package/src/config/config.module.js +40 -0
- package/src/config/config.module.js.map +1 -0
- package/src/config/default-app.config.js +34 -0
- package/src/config/default-app.config.js.map +1 -0
- package/src/config/index.js +6 -0
- package/src/config/index.js.map +1 -0
- package/src/cors/cors.config.js +49 -0
- package/src/cors/cors.config.js.map +1 -0
- package/src/cors/index.js +5 -0
- package/src/cors/index.js.map +1 -0
- package/src/health/health.controller.js +25 -0
- package/src/health/health.controller.js.map +1 -0
- package/src/health/health.module.js +17 -0
- package/src/health/health.module.js.map +1 -0
- package/src/health/index.js +6 -0
- package/src/health/index.js.map +1 -0
- package/src/helmet/helmet.config.js +49 -0
- package/src/helmet/helmet.config.js.map +1 -0
- package/src/helmet/index.js +5 -0
- package/src/helmet/index.js.map +1 -0
- package/src/index.js +9 -0
- package/src/index.js.map +1 -0
- package/src/main.js +5 -0
- package/src/main.js.map +1 -0
- package/src/server/index.js +5 -0
- package/src/server/index.js.map +1 -0
- package/src/server/server.config.js +15 -0
- package/src/server/server.config.js.map +1 -0
- package/src/swagger/index.js +6 -0
- package/src/swagger/index.js.map +1 -0
- package/src/swagger/swagger.config.js +20 -0
- package/src/swagger/swagger.config.js.map +1 -0
- package/src/swagger/swagger.factory.js +22 -0
- package/src/swagger/swagger.factory.js.map +1 -0
- package/src/validation/index.js +5 -0
- package/src/validation/index.js.map +1 -0
- package/src/validation/validation.config.js +38 -0
- package/src/validation/validation.config.js.map +1 -0
package/config/.env.yaml
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
server:
|
|
2
|
+
port: ${DISMISSIBLE_PORT:-3001}
|
|
3
|
+
|
|
4
|
+
swagger:
|
|
5
|
+
enabled: ${DISMISSIBLE_SWAGGER_ENABLED:-true}
|
|
6
|
+
|
|
7
|
+
helmet:
|
|
8
|
+
enabled: ${DISMISSIBLE_HELMET_ENABLED:-true}
|
|
9
|
+
contentSecurityPolicy: ${DISMISSIBLE_HELMET_CSP:-false}
|
|
10
|
+
crossOriginEmbedderPolicy: ${DISMISSIBLE_HELMET_COEP:-false}
|
|
11
|
+
hstsMaxAge: ${DISMISSIBLE_HELMET_HSTS_MAX_AGE:-31536000}
|
|
12
|
+
hstsIncludeSubDomains: ${DISMISSIBLE_HELMET_HSTS_INCLUDE_SUBDOMAINS:-true}
|
|
13
|
+
hstsPreload: ${DISMISSIBLE_HELMET_HSTS_PRELOAD:-false}
|
|
14
|
+
|
|
15
|
+
cors:
|
|
16
|
+
enabled: ${DISMISSIBLE_CORS_ENABLED:-true}
|
|
17
|
+
origins: ${DISMISSIBLE_CORS_ORIGINS:-http://localhost:3001,http://localhost:5173}
|
|
18
|
+
methods: ${DISMISSIBLE_CORS_METHODS:-GET,POST,DELETE,OPTIONS}
|
|
19
|
+
allowedHeaders: ${DISMISSIBLE_CORS_ALLOWED_HEADERS:-Content-Type,Authorization,x-request-id}
|
|
20
|
+
credentials: ${DISMISSIBLE_CORS_CREDENTIALS:-true}
|
|
21
|
+
maxAge: ${DISMISSIBLE_CORS_MAX_AGE:-86400}
|
|
22
|
+
|
|
23
|
+
db:
|
|
24
|
+
connectionString: ${DISMISSIBLE_POSTGRES_STORAGE_CONNECTION_STRING:-postgresql://postgres:postgres@localhost:5432/dismissible}
|
|
25
|
+
|
|
26
|
+
jwtAuth:
|
|
27
|
+
enabled: ${DISMISSIBLE_JWT_AUTH_ENABLED:-false}
|
|
28
|
+
wellKnownUrl: ${DISMISSIBLE_JWT_AUTH_WELL_KNOWN_URL:-}
|
|
29
|
+
issuer: ${DISMISSIBLE_JWT_AUTH_ISSUER:-}
|
|
30
|
+
audience: ${DISMISSIBLE_JWT_AUTH_AUDIENCE:-}
|
|
31
|
+
algorithms:
|
|
32
|
+
- ${DISMISSIBLE_JWT_AUTH_ALGORITHMS:-RS256}
|
|
33
|
+
jwksCacheDuration: ${DISMISSIBLE_JWT_AUTH_JWKS_CACHE_DURATION:-600000}
|
|
34
|
+
requestTimeout: ${DISMISSIBLE_JWT_AUTH_REQUEST_TIMEOUT:-30000}
|
|
35
|
+
priority: ${DISMISSIBLE_JWT_AUTH_PRIORITY:--100}
|
|
36
|
+
|
|
37
|
+
validation:
|
|
38
|
+
disableErrorMessages: ${DISMISSIBLE_VALIDATION_DISABLE_ERROR_MESSAGES:-true}
|
|
39
|
+
whitelist: ${DISMISSIBLE_VALIDATION_WHITELIST:-true}
|
|
40
|
+
forbidNonWhitelisted: ${DISMISSIBLE_VALIDATION_FORBID_NON_WHITELISTED:-true}
|
|
41
|
+
transform: ${DISMISSIBLE_VALIDATION_TRANSFORM:-true}
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@dismissible/nestjs-api",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Dismissible API application",
|
|
5
|
+
"main": "./src/main.js",
|
|
6
|
+
"types": "./src/main.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"import": "./src/main.mjs",
|
|
10
|
+
"require": "./src/main.js",
|
|
11
|
+
"types": "./src/main.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"bin": {
|
|
15
|
+
"dismissible-api": "./src/main.js"
|
|
16
|
+
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"start": "node src/main.js",
|
|
19
|
+
"prisma:generate": "npx dismissible-prisma generate",
|
|
20
|
+
"prisma:migrate:deploy": "npx dismissible-prisma migrate deploy",
|
|
21
|
+
"prisma:migrate:dev": "npx dismissible-prisma migrate dev",
|
|
22
|
+
"prisma:db:push": "npx dismissible-prisma db push",
|
|
23
|
+
"prisma:studio": "npx dismissible-prisma studio"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
"@dismissible/nestjs-dismissible": "^0.0.1",
|
|
27
|
+
"@dismissible/nestjs-dismissible-item": "^0.0.1",
|
|
28
|
+
"@dismissible/nestjs-jwt-auth-hook": "^0.0.1",
|
|
29
|
+
"@dismissible/nestjs-storage": "^0.0.1",
|
|
30
|
+
"@dismissible/nestjs-postgres-storage": "^0.0.1",
|
|
31
|
+
"@dismissible/nestjs-logger": "^0.0.1",
|
|
32
|
+
"@nestjs/common": "^11.1.10",
|
|
33
|
+
"@nestjs/core": "^11.1.10",
|
|
34
|
+
"@nestjs/platform-fastify": "^11.1.10",
|
|
35
|
+
"fastify": "^5.6.2",
|
|
36
|
+
"@fastify/helmet": "^13.0.2",
|
|
37
|
+
"@fastify/static": "^8.3.0",
|
|
38
|
+
"@nestjs/swagger": "^11.2.3",
|
|
39
|
+
"class-transformer": "^0.5.1",
|
|
40
|
+
"class-validator": "^0.14.3",
|
|
41
|
+
"nest-typed-config": "^2.10.1",
|
|
42
|
+
"reflect-metadata": "^0.2.2",
|
|
43
|
+
"rxjs": "^7.8.2"
|
|
44
|
+
},
|
|
45
|
+
"keywords": [
|
|
46
|
+
"nestjs",
|
|
47
|
+
"api"
|
|
48
|
+
],
|
|
49
|
+
"author": "",
|
|
50
|
+
"license": "MIT",
|
|
51
|
+
"repository": {
|
|
52
|
+
"type": "git",
|
|
53
|
+
"url": "https://github.com/DismissibleIo/dismissible-api"
|
|
54
|
+
},
|
|
55
|
+
"publishConfig": {
|
|
56
|
+
"access": "public"
|
|
57
|
+
},
|
|
58
|
+
"type": "commonjs"
|
|
59
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createTestApp = createTestApp;
|
|
4
|
+
exports.cleanupTestData = cleanupTestData;
|
|
5
|
+
const testing_1 = require("@nestjs/testing");
|
|
6
|
+
const platform_fastify_1 = require("@nestjs/platform-fastify");
|
|
7
|
+
const app_module_1 = require("./app.module");
|
|
8
|
+
const app_setup_1 = require("./app.setup");
|
|
9
|
+
const nestjs_postgres_storage_1 = require("@dismissible/nestjs-postgres-storage");
|
|
10
|
+
async function createTestApp(options) {
|
|
11
|
+
let builder = testing_1.Test.createTestingModule({
|
|
12
|
+
imports: [app_module_1.AppModule.forRoot(options?.moduleOptions)],
|
|
13
|
+
});
|
|
14
|
+
if (options?.customize) {
|
|
15
|
+
builder = options.customize(builder);
|
|
16
|
+
}
|
|
17
|
+
const moduleFixture = await builder.compile();
|
|
18
|
+
const app = moduleFixture.createNestApplication(new platform_fastify_1.FastifyAdapter({
|
|
19
|
+
bodyLimit: 10 * 1024, // 10kb
|
|
20
|
+
}));
|
|
21
|
+
await (0, app_setup_1.configureApp)(app);
|
|
22
|
+
await app.init();
|
|
23
|
+
await app.getHttpAdapter().getInstance().ready();
|
|
24
|
+
return app;
|
|
25
|
+
}
|
|
26
|
+
async function cleanupTestData(app) {
|
|
27
|
+
const prisma = app.get(nestjs_postgres_storage_1.PrismaService);
|
|
28
|
+
await prisma.dismissibleItem.deleteMany({});
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=app-test.factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-test.factory.js","sourceRoot":"","sources":["../../../api/src/app-test.factory.ts"],"names":[],"mappings":";;AAYA,sCAqBC;AAED,0CAGC;AAtCD,6CAA6D;AAE7D,+DAAkF;AAClF,6CAA2D;AAC3D,2CAA2C;AAC3C,kFAAqE;AAO9D,KAAK,UAAU,aAAa,CAAC,OAAwB;IAC1D,IAAI,OAAO,GAAG,cAAI,CAAC,mBAAmB,CAAC;QACrC,OAAO,EAAE,CAAC,sBAAS,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;KACrD,CAAC,CAAC;IAEH,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;QACvB,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;IAC9C,MAAM,GAAG,GAAG,aAAa,CAAC,qBAAqB,CAC7C,IAAI,iCAAc,CAAC;QACjB,SAAS,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO;KAC9B,CAAC,CACH,CAAC;IACF,MAAM,IAAA,wBAAY,EAAC,GAAG,CAAC,CAAC;IACxB,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAEjB,MAAM,GAAG,CAAC,cAAc,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,CAAC;IAEjD,OAAO,GAAG,CAAC;AACb,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,GAAqB;IACzD,MAAM,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,uCAAa,CAAC,CAAC;IACtC,MAAM,MAAM,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var AppModule_1;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.AppModule = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const common_1 = require("@nestjs/common");
|
|
7
|
+
const health_1 = require("./health");
|
|
8
|
+
const config_1 = require("./config");
|
|
9
|
+
const app_config_1 = require("./config/app.config");
|
|
10
|
+
const path_1 = require("path");
|
|
11
|
+
const nestjs_dismissible_1 = require("@dismissible/nestjs-dismissible");
|
|
12
|
+
const nestjs_postgres_storage_1 = require("@dismissible/nestjs-postgres-storage");
|
|
13
|
+
const nestjs_jwt_auth_hook_1 = require("@dismissible/nestjs-jwt-auth-hook");
|
|
14
|
+
let AppModule = AppModule_1 = class AppModule {
|
|
15
|
+
static forRoot(options) {
|
|
16
|
+
return {
|
|
17
|
+
module: AppModule_1,
|
|
18
|
+
...this.getModuleMetadata(options),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
static getModuleMetadata(options) {
|
|
22
|
+
return {
|
|
23
|
+
imports: [
|
|
24
|
+
config_1.ConfigModule.forRoot({
|
|
25
|
+
path: options?.configPath ?? (0, path_1.join)(__dirname, '../config'),
|
|
26
|
+
schema: options?.schema ?? app_config_1.AppConfig,
|
|
27
|
+
}),
|
|
28
|
+
health_1.HealthModule,
|
|
29
|
+
...(options?.imports ?? []),
|
|
30
|
+
nestjs_jwt_auth_hook_1.JwtAuthHookModule.forRootAsync({
|
|
31
|
+
useFactory: (config) => config,
|
|
32
|
+
inject: [nestjs_jwt_auth_hook_1.JwtAuthHookConfig],
|
|
33
|
+
}),
|
|
34
|
+
nestjs_dismissible_1.DismissibleModule.forRoot({
|
|
35
|
+
logger: options?.logger,
|
|
36
|
+
hooks: [nestjs_jwt_auth_hook_1.JwtAuthHook],
|
|
37
|
+
storage: nestjs_postgres_storage_1.PostgresStorageModule.forRootAsync({
|
|
38
|
+
useFactory(config) {
|
|
39
|
+
return {
|
|
40
|
+
connectionString: config.connectionString,
|
|
41
|
+
};
|
|
42
|
+
},
|
|
43
|
+
inject: [nestjs_postgres_storage_1.PostgresStorageConfig],
|
|
44
|
+
}),
|
|
45
|
+
}),
|
|
46
|
+
],
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
exports.AppModule = AppModule;
|
|
51
|
+
exports.AppModule = AppModule = AppModule_1 = tslib_1.__decorate([
|
|
52
|
+
(0, common_1.Module)({})
|
|
53
|
+
], AppModule);
|
|
54
|
+
//# sourceMappingURL=app.module.js.map
|
|
@@ -0,0 +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,wEAAoE;AAGpE,kFAAoG;AACpG,4EAI2C;AAUpC,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,sCAAiB,CAAC,OAAO,CAAC;oBACxB,MAAM,EAAE,OAAO,EAAE,MAAM;oBACvB,KAAK,EAAE,CAAC,kCAAW,CAAC;oBACpB,OAAO,EAAE,+CAAqB,CAAC,YAAY,CAAC;wBAC1C,UAAU,CAAC,MAA6B;4BACtC,OAAO;gCACL,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;6BAC1C,CAAC;wBACJ,CAAC;wBACD,MAAM,EAAE,CAAC,+CAAqB,CAAC;qBAChC,CAAC;iBACH,CAAC;aACH;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AApCY,8BAAS;oBAAT,SAAS;IADrB,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,SAAS,CAoCrB"}
|
package/src/app.setup.js
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.configureApp = configureApp;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const helmet_1 = tslib_1.__importDefault(require("@fastify/helmet"));
|
|
7
|
+
const swagger_1 = require("./swagger");
|
|
8
|
+
const cors_1 = require("./cors");
|
|
9
|
+
const helmet_2 = require("./helmet");
|
|
10
|
+
const validation_1 = require("./validation");
|
|
11
|
+
async function configureApp(app) {
|
|
12
|
+
const fastifyApp = app;
|
|
13
|
+
const helmetConfig = app.get(helmet_2.HelmetConfig);
|
|
14
|
+
if (helmetConfig.enabled) {
|
|
15
|
+
await fastifyApp.register(helmet_1.default, {
|
|
16
|
+
contentSecurityPolicy: helmetConfig.contentSecurityPolicy ?? true,
|
|
17
|
+
crossOriginEmbedderPolicy: helmetConfig.crossOriginEmbedderPolicy ?? true,
|
|
18
|
+
hsts: {
|
|
19
|
+
maxAge: helmetConfig.hstsMaxAge ?? 31536000,
|
|
20
|
+
includeSubDomains: helmetConfig.hstsIncludeSubDomains ?? true,
|
|
21
|
+
preload: helmetConfig.hstsPreload ?? false,
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
const corsConfig = app.get(cors_1.CorsConfig);
|
|
26
|
+
if (corsConfig.enabled) {
|
|
27
|
+
app.enableCors({
|
|
28
|
+
origin: corsConfig.origins ?? ['http://localhost:3001', 'http://localhost:5173'],
|
|
29
|
+
methods: corsConfig.methods ?? ['GET', 'POST', 'DELETE', 'OPTIONS'],
|
|
30
|
+
allowedHeaders: corsConfig.allowedHeaders ?? [
|
|
31
|
+
'Content-Type',
|
|
32
|
+
'Authorization',
|
|
33
|
+
'x-request-id',
|
|
34
|
+
],
|
|
35
|
+
credentials: corsConfig.credentials ?? true,
|
|
36
|
+
maxAge: corsConfig.maxAge ?? 86400,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
const validationConfig = app.get(validation_1.ValidationConfig);
|
|
40
|
+
app.useGlobalPipes(new common_1.ValidationPipe({
|
|
41
|
+
whitelist: validationConfig.whitelist ?? true,
|
|
42
|
+
forbidNonWhitelisted: validationConfig.forbidNonWhitelisted ?? true,
|
|
43
|
+
transform: validationConfig.transform ?? true,
|
|
44
|
+
disableErrorMessages: validationConfig.disableErrorMessages ?? true,
|
|
45
|
+
}));
|
|
46
|
+
const swaggerConfig = app.get(swagger_1.SwaggerConfig);
|
|
47
|
+
(0, swagger_1.configureAppWithSwagger)(app, swaggerConfig);
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=app.setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.setup.js","sourceRoot":"","sources":["../../../api/src/app.setup.ts"],"names":[],"mappings":";;AAQA,oCA2CC;;AAnDD,2CAAkE;AAElE,qEAA4C;AAC5C,uCAAmE;AACnE,iCAAoC;AACpC,qCAAwC;AACxC,6CAAgD;AAEzC,KAAK,UAAU,YAAY,CAAC,GAAqB;IACtD,MAAM,UAAU,GAAG,GAA6B,CAAC;IAEjD,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,qBAAY,CAAC,CAAC;IAC3C,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC;QACzB,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;IACL,CAAC;IAED,MAAM,UAAU,GAAG,GAAG,CAAC,GAAG,CAAC,iBAAU,CAAC,CAAC;IACvC,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,GAAG,CAAC,UAAU,CAAC;YACb,MAAM,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,uBAAuB,EAAE,uBAAuB,CAAC;YAChF,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;IACL,CAAC;IAED,MAAM,gBAAgB,GAAG,GAAG,CAAC,GAAG,CAAC,6BAAgB,CAAC,CAAC;IACnD,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;IAEF,MAAM,aAAa,GAAG,GAAG,CAAC,GAAG,CAAC,uBAAa,CAAC,CAAC;IAC7C,IAAA,iCAAuB,EAAC,GAAG,EAAE,aAAa,CAAC,CAAC;AAC9C,CAAC"}
|
package/src/bootstrap.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.bootstrap = bootstrap;
|
|
4
|
+
const core_1 = require("@nestjs/core");
|
|
5
|
+
const platform_fastify_1 = require("@nestjs/platform-fastify");
|
|
6
|
+
const app_module_1 = require("./app.module");
|
|
7
|
+
const server_config_1 = require("./server/server.config");
|
|
8
|
+
const app_setup_1 = require("./app.setup");
|
|
9
|
+
async function bootstrap(options) {
|
|
10
|
+
const app = await core_1.NestFactory.create(app_module_1.AppModule.forRoot(options), new platform_fastify_1.FastifyAdapter({
|
|
11
|
+
bodyLimit: 10 * 1024, // 10kb
|
|
12
|
+
}));
|
|
13
|
+
await (0, app_setup_1.configureApp)(app);
|
|
14
|
+
const serverConfig = app.get(server_config_1.ServerConfig);
|
|
15
|
+
const port = serverConfig.port ?? 3000;
|
|
16
|
+
await app.listen(port, '0.0.0.0');
|
|
17
|
+
console.log(`🚀 Application is running on: http://localhost:${port}`);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../api/src/bootstrap.ts"],"names":[],"mappings":";;AAeA,8BAaC;AA5BD,uCAA2C;AAC3C,+DAAkF;AAClF,6CAAyC;AACzC,0DAAsD;AACtD,2CAA2C;AAWpC,KAAK,UAAU,SAAS,CAAC,OAA2B;IACzD,MAAM,GAAG,GAAG,MAAM,kBAAW,CAAC,MAAM,CAClC,sBAAS,CAAC,OAAO,CAAC,OAAO,CAAC,EAC1B,IAAI,iCAAc,CAAC;QACjB,SAAS,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO;KAC9B,CAAC,CACH,CAAC;IACF,MAAM,IAAA,wBAAY,EAAC,GAAG,CAAC,CAAC;IAExB,MAAM,YAAY,GAAG,GAAG,CAAC,GAAG,CAAC,4BAAY,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,IAAI,IAAI,CAAC;IACvC,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,kDAAkD,IAAI,EAAE,CAAC,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AppConfig = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const class_validator_1 = require("class-validator");
|
|
6
|
+
const class_transformer_1 = require("class-transformer");
|
|
7
|
+
const swagger_1 = require("../swagger");
|
|
8
|
+
const default_app_config_1 = require("./default-app.config");
|
|
9
|
+
const nestjs_postgres_storage_1 = require("@dismissible/nestjs-postgres-storage");
|
|
10
|
+
const nestjs_jwt_auth_hook_1 = require("@dismissible/nestjs-jwt-auth-hook");
|
|
11
|
+
class AppConfig extends default_app_config_1.DefaultAppConfig {
|
|
12
|
+
}
|
|
13
|
+
exports.AppConfig = AppConfig;
|
|
14
|
+
tslib_1.__decorate([
|
|
15
|
+
(0, class_validator_1.ValidateNested)(),
|
|
16
|
+
(0, class_transformer_1.Type)(() => swagger_1.SwaggerConfig),
|
|
17
|
+
tslib_1.__metadata("design:type", swagger_1.SwaggerConfig)
|
|
18
|
+
], AppConfig.prototype, "swagger", void 0);
|
|
19
|
+
tslib_1.__decorate([
|
|
20
|
+
(0, class_validator_1.ValidateNested)(),
|
|
21
|
+
(0, class_transformer_1.Type)(() => nestjs_postgres_storage_1.PostgresStorageConfig),
|
|
22
|
+
tslib_1.__metadata("design:type", nestjs_postgres_storage_1.PostgresStorageConfig)
|
|
23
|
+
], AppConfig.prototype, "db", void 0);
|
|
24
|
+
tslib_1.__decorate([
|
|
25
|
+
(0, class_validator_1.ValidateNested)(),
|
|
26
|
+
(0, class_transformer_1.Type)(() => nestjs_jwt_auth_hook_1.JwtAuthHookConfig),
|
|
27
|
+
tslib_1.__metadata("design:type", nestjs_jwt_auth_hook_1.JwtAuthHookConfig)
|
|
28
|
+
], AppConfig.prototype, "jwtAuth", void 0);
|
|
29
|
+
//# sourceMappingURL=app.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app.config.js","sourceRoot":"","sources":["../../../../api/src/config/app.config.ts"],"names":[],"mappings":";;;;AAAA,qDAAiD;AACjD,yDAAyC;AACzC,wCAA2C;AAC3C,6DAAwD;AACxD,kFAA6E;AAC7E,4EAAsE;AAEtE,MAAa,SAAU,SAAQ,qCAAgB;CAY9C;AAZD,8BAYC;AATiB;IAFf,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,uBAAa,CAAC;sCACA,uBAAa;0CAAC;AAIxB;IAFf,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,+CAAqB,CAAC;sCACb,+CAAqB;qCAAC;AAI3B;IAFf,IAAA,gCAAc,GAAE;IAChB,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,wCAAiB,CAAC;sCACJ,wCAAiB;0CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var ConfigModule_1;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.ConfigModule = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
const common_1 = require("@nestjs/common");
|
|
7
|
+
const nest_typed_config_1 = require("nest-typed-config");
|
|
8
|
+
const path_1 = require("path");
|
|
9
|
+
let ConfigModule = ConfigModule_1 = class ConfigModule {
|
|
10
|
+
/**
|
|
11
|
+
* Register the ConfigModule with a configuration schema
|
|
12
|
+
* @param options Configuration options including the schema class
|
|
13
|
+
* @returns A dynamic module configured with TypedConfigModule
|
|
14
|
+
*/
|
|
15
|
+
static forRoot(options) {
|
|
16
|
+
const configPath = options.path ?? (0, path_1.join)(__dirname, '../../config');
|
|
17
|
+
const ignoreEnvSubstitution = options.ignoreEnvironmentVariableSubstitution ?? false;
|
|
18
|
+
return {
|
|
19
|
+
module: ConfigModule_1,
|
|
20
|
+
imports: [
|
|
21
|
+
nest_typed_config_1.TypedConfigModule.forRoot({
|
|
22
|
+
schema: options.schema,
|
|
23
|
+
load: [
|
|
24
|
+
(0, nest_typed_config_1.fileLoader)({
|
|
25
|
+
searchFrom: configPath,
|
|
26
|
+
ignoreEnvironmentVariableSubstitution: ignoreEnvSubstitution,
|
|
27
|
+
}),
|
|
28
|
+
],
|
|
29
|
+
}),
|
|
30
|
+
],
|
|
31
|
+
exports: [nest_typed_config_1.TypedConfigModule],
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
exports.ConfigModule = ConfigModule;
|
|
36
|
+
exports.ConfigModule = ConfigModule = ConfigModule_1 = tslib_1.__decorate([
|
|
37
|
+
(0, common_1.Global)(),
|
|
38
|
+
(0, common_1.Module)({})
|
|
39
|
+
], ConfigModule);
|
|
40
|
+
//# sourceMappingURL=config.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.module.js","sourceRoot":"","sources":["../../../../api/src/config/config.module.ts"],"names":[],"mappings":";;;;;AAAA,2CAA+D;AAC/D,yDAAkE;AAClE,+BAA4B;AAqBrB,IAAM,YAAY,oBAAlB,MAAM,YAAY;IACvB;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAmB,OAAgC;QAC/D,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,IAAI,IAAA,WAAI,EAAC,SAAS,EAAE,cAAc,CAAC,CAAC;QACnE,MAAM,qBAAqB,GAAG,OAAO,CAAC,qCAAqC,IAAI,KAAK,CAAC;QAErF,OAAO;YACL,MAAM,EAAE,cAAY;YACpB,OAAO,EAAE;gBACP,qCAAiB,CAAC,OAAO,CAAC;oBACxB,MAAM,EAAE,OAAO,CAAC,MAAM;oBACtB,IAAI,EAAE;wBACJ,IAAA,8BAAU,EAAC;4BACT,UAAU,EAAE,UAAU;4BACtB,qCAAqC,EAAE,qBAAqB;yBAC7D,CAAC;qBACH;iBACF,CAAC;aACH;YACD,OAAO,EAAE,CAAC,qCAAiB,CAAC;SAC7B,CAAC;IACJ,CAAC;CACF,CAAA;AA1BY,oCAAY;uBAAZ,YAAY;IAFxB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,YAAY,CA0BxB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DefaultAppConfig = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const class_validator_1 = require("class-validator");
|
|
6
|
+
const class_transformer_1 = require("class-transformer");
|
|
7
|
+
const server_config_1 = require("../server/server.config");
|
|
8
|
+
const cors_1 = require("../cors");
|
|
9
|
+
const helmet_1 = require("../helmet");
|
|
10
|
+
const validation_1 = require("../validation");
|
|
11
|
+
class DefaultAppConfig {
|
|
12
|
+
}
|
|
13
|
+
exports.DefaultAppConfig = DefaultAppConfig;
|
|
14
|
+
tslib_1.__decorate([
|
|
15
|
+
(0, class_validator_1.ValidateNested)(),
|
|
16
|
+
(0, class_transformer_1.Type)(() => server_config_1.ServerConfig),
|
|
17
|
+
tslib_1.__metadata("design:type", server_config_1.ServerConfig)
|
|
18
|
+
], DefaultAppConfig.prototype, "server", void 0);
|
|
19
|
+
tslib_1.__decorate([
|
|
20
|
+
(0, class_validator_1.ValidateNested)(),
|
|
21
|
+
(0, class_transformer_1.Type)(() => cors_1.CorsConfig),
|
|
22
|
+
tslib_1.__metadata("design:type", cors_1.CorsConfig)
|
|
23
|
+
], DefaultAppConfig.prototype, "cors", void 0);
|
|
24
|
+
tslib_1.__decorate([
|
|
25
|
+
(0, class_validator_1.ValidateNested)(),
|
|
26
|
+
(0, class_transformer_1.Type)(() => helmet_1.HelmetConfig),
|
|
27
|
+
tslib_1.__metadata("design:type", helmet_1.HelmetConfig)
|
|
28
|
+
], DefaultAppConfig.prototype, "helmet", void 0);
|
|
29
|
+
tslib_1.__decorate([
|
|
30
|
+
(0, class_validator_1.ValidateNested)(),
|
|
31
|
+
(0, class_transformer_1.Type)(() => validation_1.ValidationConfig),
|
|
32
|
+
tslib_1.__metadata("design:type", validation_1.ValidationConfig)
|
|
33
|
+
], DefaultAppConfig.prototype, "validation", void 0);
|
|
34
|
+
//# sourceMappingURL=default-app.config.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../api/src/config/index.ts"],"names":[],"mappings":";;;AAAA,uDAA6B;AAC7B,0DAAgC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CorsConfig = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const class_validator_1 = require("class-validator");
|
|
6
|
+
const class_transformer_1 = require("class-transformer");
|
|
7
|
+
const nestjs_validation_1 = require("@dismissible/nestjs-validation");
|
|
8
|
+
class CorsConfig {
|
|
9
|
+
}
|
|
10
|
+
exports.CorsConfig = CorsConfig;
|
|
11
|
+
tslib_1.__decorate([
|
|
12
|
+
(0, class_validator_1.IsBoolean)(),
|
|
13
|
+
(0, nestjs_validation_1.TransformBoolean)(),
|
|
14
|
+
tslib_1.__metadata("design:type", Boolean)
|
|
15
|
+
], CorsConfig.prototype, "enabled", void 0);
|
|
16
|
+
tslib_1.__decorate([
|
|
17
|
+
(0, class_validator_1.IsArray)(),
|
|
18
|
+
(0, class_validator_1.IsString)({ each: true }),
|
|
19
|
+
(0, class_validator_1.IsOptional)(),
|
|
20
|
+
(0, nestjs_validation_1.TransformCommaSeparated)(),
|
|
21
|
+
tslib_1.__metadata("design:type", Array)
|
|
22
|
+
], CorsConfig.prototype, "origins", void 0);
|
|
23
|
+
tslib_1.__decorate([
|
|
24
|
+
(0, class_validator_1.IsArray)(),
|
|
25
|
+
(0, class_validator_1.IsString)({ each: true }),
|
|
26
|
+
(0, class_validator_1.IsOptional)(),
|
|
27
|
+
(0, nestjs_validation_1.TransformCommaSeparated)(),
|
|
28
|
+
tslib_1.__metadata("design:type", Array)
|
|
29
|
+
], CorsConfig.prototype, "methods", void 0);
|
|
30
|
+
tslib_1.__decorate([
|
|
31
|
+
(0, class_validator_1.IsArray)(),
|
|
32
|
+
(0, class_validator_1.IsString)({ each: true }),
|
|
33
|
+
(0, class_validator_1.IsOptional)(),
|
|
34
|
+
(0, nestjs_validation_1.TransformCommaSeparated)(),
|
|
35
|
+
tslib_1.__metadata("design:type", Array)
|
|
36
|
+
], CorsConfig.prototype, "allowedHeaders", void 0);
|
|
37
|
+
tslib_1.__decorate([
|
|
38
|
+
(0, class_validator_1.IsBoolean)(),
|
|
39
|
+
(0, class_validator_1.IsOptional)(),
|
|
40
|
+
(0, nestjs_validation_1.TransformBoolean)(),
|
|
41
|
+
tslib_1.__metadata("design:type", Boolean)
|
|
42
|
+
], CorsConfig.prototype, "credentials", void 0);
|
|
43
|
+
tslib_1.__decorate([
|
|
44
|
+
(0, class_validator_1.IsNumber)(),
|
|
45
|
+
(0, class_validator_1.IsOptional)(),
|
|
46
|
+
(0, class_transformer_1.Type)(() => Number),
|
|
47
|
+
tslib_1.__metadata("design:type", Number)
|
|
48
|
+
], CorsConfig.prototype, "maxAge", void 0);
|
|
49
|
+
//# sourceMappingURL=cors.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cors.config.js","sourceRoot":"","sources":["../../../../api/src/cors/cors.config.ts"],"names":[],"mappings":";;;;AAAA,qDAAqF;AACrF,yDAAyC;AACzC,sEAA2F;AAE3F,MAAa,UAAU;CAgCtB;AAhCD,gCAgCC;AA7BiB;IAFf,IAAA,2BAAS,GAAE;IACX,IAAA,oCAAgB,GAAE;;2CACe;AAMlB;IAJf,IAAA,yBAAO,GAAE;IACT,IAAA,0BAAQ,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxB,IAAA,4BAAU,GAAE;IACZ,IAAA,2CAAuB,GAAE;;2CACS;AAMnB;IAJf,IAAA,yBAAO,GAAE;IACT,IAAA,0BAAQ,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxB,IAAA,4BAAU,GAAE;IACZ,IAAA,2CAAuB,GAAE;;2CACS;AAMnB;IAJf,IAAA,yBAAO,GAAE;IACT,IAAA,0BAAQ,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IACxB,IAAA,4BAAU,GAAE;IACZ,IAAA,2CAAuB,GAAE;;kDACgB;AAK1B;IAHf,IAAA,2BAAS,GAAE;IACX,IAAA,4BAAU,GAAE;IACZ,IAAA,oCAAgB,GAAE;;+CACmB;AAKtB;IAHf,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC;;0CACa"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../api/src/cors/index.ts"],"names":[],"mappings":";;;AAAA,wDAA8B"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HealthController = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
let HealthController = class HealthController {
|
|
7
|
+
getHealth() {
|
|
8
|
+
return {
|
|
9
|
+
status: 'ok',
|
|
10
|
+
timestamp: new Date().toISOString(),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
exports.HealthController = HealthController;
|
|
15
|
+
tslib_1.__decorate([
|
|
16
|
+
(0, common_1.Get)(),
|
|
17
|
+
(0, common_1.HttpCode)(common_1.HttpStatus.OK),
|
|
18
|
+
tslib_1.__metadata("design:type", Function),
|
|
19
|
+
tslib_1.__metadata("design:paramtypes", []),
|
|
20
|
+
tslib_1.__metadata("design:returntype", Object)
|
|
21
|
+
], HealthController.prototype, "getHealth", null);
|
|
22
|
+
exports.HealthController = HealthController = tslib_1.__decorate([
|
|
23
|
+
(0, common_1.Controller)('health')
|
|
24
|
+
], HealthController);
|
|
25
|
+
//# sourceMappingURL=health.controller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.controller.js","sourceRoot":"","sources":["../../../../api/src/health/health.controller.ts"],"names":[],"mappings":";;;;AAAA,2CAAuE;AAGhE,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAG3B,SAAS;QAIP,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;CACF,CAAA;AAZY,4CAAgB;AAG3B;IAFC,IAAA,YAAG,GAAE;IACL,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;;;;iDASvB;2BAXU,gBAAgB;IAD5B,IAAA,mBAAU,EAAC,QAAQ,CAAC;GACR,gBAAgB,CAY5B"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HealthModule = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const health_controller_1 = require("./health.controller");
|
|
7
|
+
let HealthModule = class HealthModule {
|
|
8
|
+
};
|
|
9
|
+
exports.HealthModule = HealthModule;
|
|
10
|
+
exports.HealthModule = HealthModule = tslib_1.__decorate([
|
|
11
|
+
(0, common_1.Module)({
|
|
12
|
+
controllers: [health_controller_1.HealthController],
|
|
13
|
+
providers: [],
|
|
14
|
+
exports: [],
|
|
15
|
+
})
|
|
16
|
+
], HealthModule);
|
|
17
|
+
//# sourceMappingURL=health.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.module.js","sourceRoot":"","sources":["../../../../api/src/health/health.module.ts"],"names":[],"mappings":";;;;AAAA,2CAAwC;AACxC,2DAAuD;AAOhD,IAAM,YAAY,GAAlB,MAAM,YAAY;CAAG,CAAA;AAAf,oCAAY;uBAAZ,YAAY;IALxB,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,oCAAgB,CAAC;QAC/B,SAAS,EAAE,EAAE;QACb,OAAO,EAAE,EAAE;KACZ,CAAC;GACW,YAAY,CAAG"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./health.module"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./health.controller"), exports);
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../api/src/health/index.ts"],"names":[],"mappings":";;;AAAA,0DAAgC;AAChC,8DAAoC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HelmetConfig = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const class_validator_1 = require("class-validator");
|
|
6
|
+
const class_transformer_1 = require("class-transformer");
|
|
7
|
+
const nestjs_validation_1 = require("@dismissible/nestjs-validation");
|
|
8
|
+
/**
|
|
9
|
+
* @see https://helmetjs.github.io/
|
|
10
|
+
*/
|
|
11
|
+
class HelmetConfig {
|
|
12
|
+
}
|
|
13
|
+
exports.HelmetConfig = HelmetConfig;
|
|
14
|
+
tslib_1.__decorate([
|
|
15
|
+
(0, class_validator_1.IsBoolean)(),
|
|
16
|
+
(0, nestjs_validation_1.TransformBoolean)(),
|
|
17
|
+
tslib_1.__metadata("design:type", Boolean)
|
|
18
|
+
], HelmetConfig.prototype, "enabled", void 0);
|
|
19
|
+
tslib_1.__decorate([
|
|
20
|
+
(0, class_validator_1.IsBoolean)(),
|
|
21
|
+
(0, class_validator_1.IsOptional)(),
|
|
22
|
+
(0, nestjs_validation_1.TransformBoolean)(),
|
|
23
|
+
tslib_1.__metadata("design:type", Boolean)
|
|
24
|
+
], HelmetConfig.prototype, "contentSecurityPolicy", void 0);
|
|
25
|
+
tslib_1.__decorate([
|
|
26
|
+
(0, class_validator_1.IsBoolean)(),
|
|
27
|
+
(0, class_validator_1.IsOptional)(),
|
|
28
|
+
(0, nestjs_validation_1.TransformBoolean)(),
|
|
29
|
+
tslib_1.__metadata("design:type", Boolean)
|
|
30
|
+
], HelmetConfig.prototype, "crossOriginEmbedderPolicy", void 0);
|
|
31
|
+
tslib_1.__decorate([
|
|
32
|
+
(0, class_validator_1.IsNumber)(),
|
|
33
|
+
(0, class_validator_1.IsOptional)(),
|
|
34
|
+
(0, class_transformer_1.Type)(() => Number),
|
|
35
|
+
tslib_1.__metadata("design:type", Number)
|
|
36
|
+
], HelmetConfig.prototype, "hstsMaxAge", void 0);
|
|
37
|
+
tslib_1.__decorate([
|
|
38
|
+
(0, class_validator_1.IsBoolean)(),
|
|
39
|
+
(0, class_validator_1.IsOptional)(),
|
|
40
|
+
(0, nestjs_validation_1.TransformBoolean)(),
|
|
41
|
+
tslib_1.__metadata("design:type", Boolean)
|
|
42
|
+
], HelmetConfig.prototype, "hstsIncludeSubDomains", void 0);
|
|
43
|
+
tslib_1.__decorate([
|
|
44
|
+
(0, class_validator_1.IsBoolean)(),
|
|
45
|
+
(0, class_validator_1.IsOptional)(),
|
|
46
|
+
(0, nestjs_validation_1.TransformBoolean)(),
|
|
47
|
+
tslib_1.__metadata("design:type", Boolean)
|
|
48
|
+
], HelmetConfig.prototype, "hstsPreload", void 0);
|
|
49
|
+
//# sourceMappingURL=helmet.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helmet.config.js","sourceRoot":"","sources":["../../../../api/src/helmet/helmet.config.ts"],"names":[],"mappings":";;;;AAAA,qDAAkE;AAClE,yDAAyC;AACzC,sEAAkE;AAElE;;GAEG;AACH,MAAa,YAAY;CAoDxB;AApDD,oCAoDC;AA9CiB;IAFf,IAAA,2BAAS,GAAE;IACX,IAAA,oCAAgB,GAAE;;6CACe;AASlB;IAHf,IAAA,2BAAS,GAAE;IACX,IAAA,4BAAU,GAAE;IACZ,IAAA,oCAAgB,GAAE;;2DAC6B;AAShC;IAHf,IAAA,2BAAS,GAAE;IACX,IAAA,4BAAU,GAAE;IACZ,IAAA,oCAAgB,GAAE;;+DACiC;AASpC;IAHf,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC;;gDACiB;AASpB;IAHf,IAAA,2BAAS,GAAE;IACX,IAAA,4BAAU,GAAE;IACZ,IAAA,oCAAgB,GAAE;;2DAC6B;AAShC;IAHf,IAAA,2BAAS,GAAE;IACX,IAAA,4BAAU,GAAE;IACZ,IAAA,oCAAgB,GAAE;;iDACmB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../api/src/helmet/index.ts"],"names":[],"mappings":";;;AAAA,0DAAgC"}
|
package/src/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./config"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./server"), exports);
|
|
6
|
+
tslib_1.__exportStar(require("./bootstrap"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./app.module"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./app.setup"), exports);
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
package/src/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../api/src/index.ts"],"names":[],"mappings":";;;AAAA,mDAAyB;AACzB,mDAAyB;AACzB,sDAA4B;AAC5B,uDAA6B;AAC7B,sDAA4B"}
|
package/src/main.js
ADDED
package/src/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../api/src/main.ts"],"names":[],"mappings":";;AAAA,2CAAwC;AAExC,IAAA,qBAAS,GAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../api/src/server/index.ts"],"names":[],"mappings":";;;AAAA,0DAAgC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ServerConfig = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const class_validator_1 = require("class-validator");
|
|
6
|
+
const class_transformer_1 = require("class-transformer");
|
|
7
|
+
class ServerConfig {
|
|
8
|
+
}
|
|
9
|
+
exports.ServerConfig = ServerConfig;
|
|
10
|
+
tslib_1.__decorate([
|
|
11
|
+
(0, class_validator_1.IsNumber)(),
|
|
12
|
+
(0, class_transformer_1.Type)(() => Number),
|
|
13
|
+
tslib_1.__metadata("design:type", Number)
|
|
14
|
+
], ServerConfig.prototype, "port", void 0);
|
|
15
|
+
//# sourceMappingURL=server.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.config.js","sourceRoot":"","sources":["../../../../api/src/server/server.config.ts"],"names":[],"mappings":";;;;AAAA,qDAA2C;AAC3C,yDAAyC;AAEzC,MAAa,YAAY;CAIxB;AAJD,oCAIC;AADiB;IAFf,IAAA,0BAAQ,GAAE;IACV,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC;;0CACW"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./swagger.factory"), exports);
|
|
5
|
+
tslib_1.__exportStar(require("./swagger.config"), exports);
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../api/src/swagger/index.ts"],"names":[],"mappings":";;;AAAA,4DAAkC;AAClC,2DAAiC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SwaggerConfig = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const class_validator_1 = require("class-validator");
|
|
6
|
+
const nestjs_validation_1 = require("@dismissible/nestjs-validation");
|
|
7
|
+
class SwaggerConfig {
|
|
8
|
+
}
|
|
9
|
+
exports.SwaggerConfig = SwaggerConfig;
|
|
10
|
+
tslib_1.__decorate([
|
|
11
|
+
(0, class_validator_1.IsBoolean)(),
|
|
12
|
+
(0, nestjs_validation_1.TransformBoolean)(),
|
|
13
|
+
tslib_1.__metadata("design:type", Boolean)
|
|
14
|
+
], SwaggerConfig.prototype, "enabled", void 0);
|
|
15
|
+
tslib_1.__decorate([
|
|
16
|
+
(0, class_validator_1.IsString)(),
|
|
17
|
+
(0, class_validator_1.IsOptional)(),
|
|
18
|
+
tslib_1.__metadata("design:type", String)
|
|
19
|
+
], SwaggerConfig.prototype, "path", void 0);
|
|
20
|
+
//# sourceMappingURL=swagger.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swagger.config.js","sourceRoot":"","sources":["../../../../api/src/swagger/swagger.config.ts"],"names":[],"mappings":";;;;AAAA,qDAAkE;AAClE,sEAAkE;AAElE,MAAa,aAAa;CAQzB;AARD,sCAQC;AALiB;IAFf,IAAA,2BAAS,GAAE;IACX,IAAA,oCAAgB,GAAE;;8CACe;AAIlB;IAFf,IAAA,0BAAQ,GAAE;IACV,IAAA,4BAAU,GAAE;;2CACiB"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.configureAppWithSwagger = configureAppWithSwagger;
|
|
4
|
+
const swagger_1 = require("@nestjs/swagger");
|
|
5
|
+
const swaggerDocumentOptions = {
|
|
6
|
+
operationIdFactory: (_controllerKey, methodKey) => methodKey,
|
|
7
|
+
};
|
|
8
|
+
function configureAppWithSwagger(app, swaggerConfig) {
|
|
9
|
+
if (swaggerConfig.enabled) {
|
|
10
|
+
const { path = 'docs' } = swaggerConfig;
|
|
11
|
+
const config = new swagger_1.DocumentBuilder()
|
|
12
|
+
.setTitle('Dismissible')
|
|
13
|
+
.setDescription('An API to handle dismissible items for users')
|
|
14
|
+
.setVersion('1.0')
|
|
15
|
+
.build();
|
|
16
|
+
const documentFactory = () => swagger_1.SwaggerModule.createDocument(app, config, swaggerDocumentOptions);
|
|
17
|
+
swagger_1.SwaggerModule.setup(path, app, documentFactory, {
|
|
18
|
+
useGlobalPrefix: true,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=swagger.factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swagger.factory.js","sourceRoot":"","sources":["../../../../api/src/swagger/swagger.factory.ts"],"names":[],"mappings":";;AAQA,0DAeC;AAtBD,6CAAyF;AAGzF,MAAM,sBAAsB,GAA2B;IACrD,kBAAkB,EAAE,CAAC,cAAsB,EAAE,SAAiB,EAAE,EAAE,CAAC,SAAS;CAC7E,CAAC;AAEF,SAAgB,uBAAuB,CAAC,GAAqB,EAAE,aAA4B;IACzF,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;QAC1B,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;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../api/src/validation/index.ts"],"names":[],"mappings":";;;AAAA,8DAAoC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ValidationConfig = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const class_validator_1 = require("class-validator");
|
|
6
|
+
const nestjs_validation_1 = require("@dismissible/nestjs-validation");
|
|
7
|
+
/**
|
|
8
|
+
* Configuration for NestJS ValidationPipe
|
|
9
|
+
* @see https://docs.nestjs.com/techniques/validation
|
|
10
|
+
*/
|
|
11
|
+
class ValidationConfig {
|
|
12
|
+
}
|
|
13
|
+
exports.ValidationConfig = ValidationConfig;
|
|
14
|
+
tslib_1.__decorate([
|
|
15
|
+
(0, class_validator_1.IsBoolean)(),
|
|
16
|
+
(0, class_validator_1.IsOptional)(),
|
|
17
|
+
(0, nestjs_validation_1.TransformBoolean)(),
|
|
18
|
+
tslib_1.__metadata("design:type", Boolean)
|
|
19
|
+
], ValidationConfig.prototype, "disableErrorMessages", void 0);
|
|
20
|
+
tslib_1.__decorate([
|
|
21
|
+
(0, class_validator_1.IsBoolean)(),
|
|
22
|
+
(0, class_validator_1.IsOptional)(),
|
|
23
|
+
(0, nestjs_validation_1.TransformBoolean)(),
|
|
24
|
+
tslib_1.__metadata("design:type", Boolean)
|
|
25
|
+
], ValidationConfig.prototype, "whitelist", void 0);
|
|
26
|
+
tslib_1.__decorate([
|
|
27
|
+
(0, class_validator_1.IsBoolean)(),
|
|
28
|
+
(0, class_validator_1.IsOptional)(),
|
|
29
|
+
(0, nestjs_validation_1.TransformBoolean)(),
|
|
30
|
+
tslib_1.__metadata("design:type", Boolean)
|
|
31
|
+
], ValidationConfig.prototype, "forbidNonWhitelisted", void 0);
|
|
32
|
+
tslib_1.__decorate([
|
|
33
|
+
(0, class_validator_1.IsBoolean)(),
|
|
34
|
+
(0, class_validator_1.IsOptional)(),
|
|
35
|
+
(0, nestjs_validation_1.TransformBoolean)(),
|
|
36
|
+
tslib_1.__metadata("design:type", Boolean)
|
|
37
|
+
], ValidationConfig.prototype, "transform", void 0);
|
|
38
|
+
//# sourceMappingURL=validation.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.config.js","sourceRoot":"","sources":["../../../../api/src/validation/validation.config.ts"],"names":[],"mappings":";;;;AAAA,qDAAwD;AACxD,sEAAkE;AAElE;;;GAGG;AACH,MAAa,gBAAgB;CAuC5B;AAvCD,4CAuCC;AA9BiB;IAHf,IAAA,2BAAS,GAAE;IACX,IAAA,4BAAU,GAAE;IACZ,IAAA,oCAAgB,GAAE;;8DAC4B;AAU/B;IAHf,IAAA,2BAAS,GAAE;IACX,IAAA,4BAAU,GAAE;IACZ,IAAA,oCAAgB,GAAE;;mDACiB;AAUpB;IAHf,IAAA,2BAAS,GAAE;IACX,IAAA,4BAAU,GAAE;IACZ,IAAA,oCAAgB,GAAE;;8DAC4B;AAS/B;IAHf,IAAA,2BAAS,GAAE;IACX,IAAA,4BAAU,GAAE;IACZ,IAAA,oCAAgB,GAAE;;mDACiB"}
|