@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.
Files changed (50) hide show
  1. package/config/.env.yaml +41 -0
  2. package/package.json +59 -0
  3. package/src/app-test.factory.js +30 -0
  4. package/src/app-test.factory.js.map +1 -0
  5. package/src/app.module.js +54 -0
  6. package/src/app.module.js.map +1 -0
  7. package/src/app.setup.js +49 -0
  8. package/src/app.setup.js.map +1 -0
  9. package/src/bootstrap.js +19 -0
  10. package/src/bootstrap.js.map +1 -0
  11. package/src/config/app.config.js +29 -0
  12. package/src/config/app.config.js.map +1 -0
  13. package/src/config/config.module.js +40 -0
  14. package/src/config/config.module.js.map +1 -0
  15. package/src/config/default-app.config.js +34 -0
  16. package/src/config/default-app.config.js.map +1 -0
  17. package/src/config/index.js +6 -0
  18. package/src/config/index.js.map +1 -0
  19. package/src/cors/cors.config.js +49 -0
  20. package/src/cors/cors.config.js.map +1 -0
  21. package/src/cors/index.js +5 -0
  22. package/src/cors/index.js.map +1 -0
  23. package/src/health/health.controller.js +25 -0
  24. package/src/health/health.controller.js.map +1 -0
  25. package/src/health/health.module.js +17 -0
  26. package/src/health/health.module.js.map +1 -0
  27. package/src/health/index.js +6 -0
  28. package/src/health/index.js.map +1 -0
  29. package/src/helmet/helmet.config.js +49 -0
  30. package/src/helmet/helmet.config.js.map +1 -0
  31. package/src/helmet/index.js +5 -0
  32. package/src/helmet/index.js.map +1 -0
  33. package/src/index.js +9 -0
  34. package/src/index.js.map +1 -0
  35. package/src/main.js +5 -0
  36. package/src/main.js.map +1 -0
  37. package/src/server/index.js +5 -0
  38. package/src/server/index.js.map +1 -0
  39. package/src/server/server.config.js +15 -0
  40. package/src/server/server.config.js.map +1 -0
  41. package/src/swagger/index.js +6 -0
  42. package/src/swagger/index.js.map +1 -0
  43. package/src/swagger/swagger.config.js +20 -0
  44. package/src/swagger/swagger.config.js.map +1 -0
  45. package/src/swagger/swagger.factory.js +22 -0
  46. package/src/swagger/swagger.factory.js.map +1 -0
  47. package/src/validation/index.js +5 -0
  48. package/src/validation/index.js.map +1 -0
  49. package/src/validation/validation.config.js +38 -0
  50. package/src/validation/validation.config.js.map +1 -0
@@ -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"}
@@ -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"}
@@ -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,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./app.config"), exports);
5
+ tslib_1.__exportStar(require("./config.module"), exports);
6
+ //# sourceMappingURL=index.js.map
@@ -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,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./cors.config"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -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,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./helmet.config"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -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
@@ -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
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const bootstrap_1 = require("./bootstrap");
4
+ (0, bootstrap_1.bootstrap)();
5
+ //# sourceMappingURL=main.js.map
@@ -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,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./server.config"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -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,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./validation.config"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -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"}