@dismissible/nestjs-api 0.0.2-canary.8976e84.0 → 0.0.2-canary.a611bd3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/config/.env.yaml +34 -1
  2. package/package.json +32 -22
  3. package/src/app-test.factory.d.ts +9 -0
  4. package/src/app-test.factory.js +30 -0
  5. package/src/app-test.factory.js.map +1 -0
  6. package/src/app.module.d.ts +19 -0
  7. package/src/app.module.js +54 -0
  8. package/src/app.module.js.map +1 -0
  9. package/src/app.setup.d.ts +2 -0
  10. package/src/app.setup.js +49 -0
  11. package/src/app.setup.js.map +1 -0
  12. package/src/bootstrap.d.ts +9 -0
  13. package/src/bootstrap.js +19 -0
  14. package/src/bootstrap.js.map +1 -0
  15. package/src/config/app.config.d.ts +9 -0
  16. package/src/config/app.config.js +29 -0
  17. package/src/config/app.config.js.map +1 -0
  18. package/src/config/config.module.d.ts +25 -0
  19. package/src/config/config.module.js +40 -0
  20. package/src/config/config.module.js.map +1 -0
  21. package/src/config/default-app.config.d.ts +10 -0
  22. package/src/config/default-app.config.js +34 -0
  23. package/src/config/default-app.config.js.map +1 -0
  24. package/src/config/index.js +6 -0
  25. package/src/config/index.js.map +1 -0
  26. package/src/cors/cors.config.d.ts +8 -0
  27. package/src/cors/cors.config.js +49 -0
  28. package/src/cors/cors.config.js.map +1 -0
  29. package/src/cors/index.d.ts +1 -0
  30. package/src/cors/index.js +5 -0
  31. package/src/cors/index.js.map +1 -0
  32. package/src/health/health.controller.d.ts +6 -0
  33. package/src/health/health.controller.js +25 -0
  34. package/src/health/health.controller.js.map +1 -0
  35. package/src/health/health.module.d.ts +2 -0
  36. package/src/health/health.module.js +17 -0
  37. package/src/health/health.module.js.map +1 -0
  38. package/src/health/{index.ts → index.d.ts} +0 -1
  39. package/src/health/index.js +6 -0
  40. package/src/health/index.js.map +1 -0
  41. package/src/helmet/helmet.config.d.ts +34 -0
  42. package/src/helmet/helmet.config.js +49 -0
  43. package/src/helmet/helmet.config.js.map +1 -0
  44. package/src/helmet/index.d.ts +1 -0
  45. package/src/helmet/index.js +5 -0
  46. package/src/helmet/index.js.map +1 -0
  47. package/src/index.js +9 -0
  48. package/src/index.js.map +1 -0
  49. package/src/main.d.ts +1 -0
  50. package/src/main.js +5 -0
  51. package/src/main.js.map +1 -0
  52. package/src/server/index.js +5 -0
  53. package/src/server/index.js.map +1 -0
  54. package/src/server/server.config.d.ts +3 -0
  55. package/src/server/server.config.js +15 -0
  56. package/src/server/server.config.js.map +1 -0
  57. package/src/swagger/index.js +6 -0
  58. package/src/swagger/index.js.map +1 -0
  59. package/src/swagger/swagger.config.d.ts +4 -0
  60. package/src/swagger/swagger.config.js +20 -0
  61. package/src/swagger/swagger.config.js.map +1 -0
  62. package/src/swagger/swagger.factory.d.ts +3 -0
  63. package/src/swagger/swagger.factory.js +22 -0
  64. package/src/swagger/swagger.factory.js.map +1 -0
  65. package/src/validation/index.d.ts +1 -0
  66. package/src/validation/index.js +5 -0
  67. package/src/validation/index.js.map +1 -0
  68. package/src/validation/validation.config.d.ts +29 -0
  69. package/src/validation/validation.config.js +38 -0
  70. package/src/validation/validation.config.js.map +1 -0
  71. package/jest.config.ts +0 -13
  72. package/jest.e2e-config.ts +0 -12
  73. package/nest-cli.json +0 -16
  74. package/project.json +0 -91
  75. package/src/app-test.factory.ts +0 -32
  76. package/src/app.e2e-spec.ts +0 -221
  77. package/src/app.module.ts +0 -48
  78. package/src/app.setup.ts +0 -17
  79. package/src/bootstrap.ts +0 -24
  80. package/src/config/app.config.ts +0 -15
  81. package/src/config/config.module.spec.ts +0 -96
  82. package/src/config/config.module.ts +0 -50
  83. package/src/config/default-app.config.ts +0 -9
  84. package/src/health/health.controller.spec.ts +0 -48
  85. package/src/health/health.controller.ts +0 -17
  86. package/src/health/health.module.ts +0 -10
  87. package/src/health/health.service.spec.ts +0 -46
  88. package/src/health/health.service.ts +0 -16
  89. package/src/main.ts +0 -3
  90. package/src/server/server.config.ts +0 -8
  91. package/src/swagger/swagger.config.ts +0 -20
  92. package/src/swagger/swagger.factory.ts +0 -25
  93. package/tsconfig.app.json +0 -13
  94. package/tsconfig.json +0 -13
  95. /package/src/config/{index.ts → index.d.ts} +0 -0
  96. /package/src/{index.ts → index.d.ts} +0 -0
  97. /package/src/server/{index.ts → index.d.ts} +0 -0
  98. /package/src/swagger/{index.ts → index.d.ts} +0 -0
package/config/.env.yaml CHANGED
@@ -4,5 +4,38 @@ server:
4
4
  swagger:
5
5
  enabled: ${DISMISSIBLE_SWAGGER_ENABLED:-true}
6
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
+
7
23
  db:
8
- connectionString: ${DISMISSIBLE_POSTGRES_STORAGE_CONNECTION_STRING:-'postgresql://postgres:postgres@localhost:5432/dismissible'}
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 CHANGED
@@ -1,37 +1,46 @@
1
1
  {
2
2
  "name": "@dismissible/nestjs-api",
3
- "version": "0.0.2-canary.8976e84.0",
3
+ "version": "0.0.2-canary.a611bd3.0",
4
4
  "description": "Dismissible API application",
5
- "main": "./src/main.js",
6
- "types": "./src/main.d.ts",
5
+ "main": "./src/index.js",
6
+ "types": "./src/index.d.ts",
7
7
  "exports": {
8
8
  ".": {
9
- "import": "./src/main.mjs",
10
- "require": "./src/main.js",
11
- "types": "./src/main.d.ts"
9
+ "import": "./src/index.mjs",
10
+ "require": "./src/index.js",
11
+ "types": "./src/index.d.ts"
12
12
  }
13
13
  },
14
14
  "bin": {
15
15
  "dismissible-api": "./src/main.js"
16
16
  },
17
17
  "scripts": {
18
- "start": "node src/main.js"
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"
19
24
  },
20
25
  "dependencies": {
21
- "@dismissible/nestjs-dismissible": "^0.0.2-canary.8976e84.0",
22
- "@dismissible/nestjs-dismissible-item": "^0.0.2-canary.8976e84.0",
23
- "@dismissible/nestjs-storage": "^0.0.2-canary.8976e84.0",
24
- "@dismissible/nestjs-postgres-storage": "^0.0.2-canary.8976e84.0",
25
- "@dismissible/nestjs-logger": "^0.0.2-canary.8976e84.0",
26
- "@nestjs/common": "^11.1.9",
27
- "@nestjs/core": "^11.1.9",
28
- "@nestjs/platform-express": "^11.1.9",
29
- "@nestjs/swagger": "^11.0.0",
30
- "class-transformer": "^0.5.1",
31
- "class-validator": "^0.14.1",
32
- "nest-typed-config": "^2.0.0",
33
- "reflect-metadata": "^0.2.2",
34
- "rxjs": "^7.8.2"
26
+ "@dismissible/nestjs-dismissible": "0.0.2-canary.a611bd3.0",
27
+ "@dismissible/nestjs-dismissible-item": "0.0.2-canary.a611bd3.0",
28
+ "@dismissible/nestjs-jwt-auth-hook": "0.0.2-canary.a611bd3.0",
29
+ "@dismissible/nestjs-storage": "0.0.2-canary.a611bd3.0",
30
+ "@dismissible/nestjs-postgres-storage": "0.0.2-canary.a611bd3.0",
31
+ "@dismissible/nestjs-logger": "0.0.2-canary.a611bd3.0",
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"
35
44
  },
36
45
  "keywords": [
37
46
  "nestjs",
@@ -45,5 +54,6 @@
45
54
  },
46
55
  "publishConfig": {
47
56
  "access": "public"
48
- }
57
+ },
58
+ "type": "commonjs"
49
59
  }
@@ -0,0 +1,9 @@
1
+ import { TestingModuleBuilder } from '@nestjs/testing';
2
+ import { INestApplication } from '@nestjs/common';
3
+ import { AppModuleOptions } from './app.module';
4
+ export type TestAppOptions = {
5
+ moduleOptions?: AppModuleOptions;
6
+ customize?: (builder: TestingModuleBuilder) => TestingModuleBuilder;
7
+ };
8
+ export declare function createTestApp(options?: TestAppOptions): Promise<INestApplication>;
9
+ export declare function cleanupTestData(app: INestApplication): Promise<void>;
@@ -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,19 @@
1
+ import { DynamicModule, ModuleMetadata, Type } from '@nestjs/common';
2
+ import { IDismissibleLogger } from '@dismissible/nestjs-logger';
3
+ import { DefaultAppConfig } from './config/default-app.config';
4
+ export type AppModuleOptions = {
5
+ configPath?: string;
6
+ schema?: new () => DefaultAppConfig;
7
+ logger?: Type<IDismissibleLogger>;
8
+ imports?: DynamicModule[];
9
+ };
10
+ export declare class AppModule {
11
+ static forRoot(options?: AppModuleOptions): {
12
+ imports?: Array<Type<any> | DynamicModule | Promise<DynamicModule> | import("@nestjs/common").ForwardReference>;
13
+ controllers?: Type<any>[];
14
+ providers?: import("@nestjs/common").Provider[];
15
+ exports?: Array<DynamicModule | string | symbol | import("@nestjs/common").Provider | import("@nestjs/common").ForwardReference | import("@nestjs/common").Abstract<any> | Function>;
16
+ module: typeof AppModule;
17
+ };
18
+ static getModuleMetadata(options?: AppModuleOptions): ModuleMetadata;
19
+ }
@@ -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,2 @@
1
+ import { INestApplication } from '@nestjs/common';
2
+ export declare function configureApp(app: INestApplication): Promise<void>;
@@ -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,9 @@
1
+ import { DefaultAppConfig } from './config/default-app.config';
2
+ import { IDismissibleLogger } from '@dismissible/nestjs-logger';
3
+ import { Type } from '@nestjs/common';
4
+ export type IBootstrapOptions = {
5
+ configPath?: string;
6
+ schema?: new () => DefaultAppConfig;
7
+ logger?: Type<IDismissibleLogger>;
8
+ };
9
+ export declare function bootstrap(options?: IBootstrapOptions): Promise<void>;
@@ -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,9 @@
1
+ import { SwaggerConfig } from '../swagger';
2
+ import { DefaultAppConfig } from './default-app.config';
3
+ import { PostgresStorageConfig } from '@dismissible/nestjs-postgres-storage';
4
+ import { JwtAuthHookConfig } from '@dismissible/nestjs-jwt-auth-hook';
5
+ export declare class AppConfig extends DefaultAppConfig {
6
+ readonly swagger: SwaggerConfig;
7
+ readonly db: PostgresStorageConfig;
8
+ readonly jwtAuth: JwtAuthHookConfig;
9
+ }
@@ -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,25 @@
1
+ import { DynamicModule } from '@nestjs/common';
2
+ export interface IConfigModuleOptions<T> {
3
+ /**
4
+ * The configuration schema class to validate against
5
+ */
6
+ schema: new () => T;
7
+ /**
8
+ * The path to search for configuration files
9
+ * Defaults to a 'config' directory two levels up from the current file
10
+ */
11
+ path?: string;
12
+ /**
13
+ * Whether to ignore environment variable substitution in config files
14
+ * Defaults to false (environment variables will be substituted)
15
+ */
16
+ ignoreEnvironmentVariableSubstitution?: boolean;
17
+ }
18
+ export declare class ConfigModule {
19
+ /**
20
+ * Register the ConfigModule with a configuration schema
21
+ * @param options Configuration options including the schema class
22
+ * @returns A dynamic module configured with TypedConfigModule
23
+ */
24
+ static forRoot<T extends object>(options: IConfigModuleOptions<T>): DynamicModule;
25
+ }
@@ -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,10 @@
1
+ import { ServerConfig } from '../server/server.config';
2
+ import { CorsConfig } from '../cors';
3
+ import { HelmetConfig } from '../helmet';
4
+ import { ValidationConfig } from '../validation';
5
+ export declare class DefaultAppConfig {
6
+ readonly server: ServerConfig;
7
+ readonly cors: CorsConfig;
8
+ readonly helmet: HelmetConfig;
9
+ readonly validation: ValidationConfig;
10
+ }
@@ -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,8 @@
1
+ export declare class CorsConfig {
2
+ readonly enabled: boolean;
3
+ readonly origins?: string[];
4
+ readonly methods?: string[];
5
+ readonly allowedHeaders?: string[];
6
+ readonly credentials?: boolean;
7
+ readonly maxAge?: number;
8
+ }
@@ -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
+ export * from './cors.config';
@@ -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,6 @@
1
+ export declare class HealthController {
2
+ getHealth(): {
3
+ status: string;
4
+ timestamp: string;
5
+ };
6
+ }
@@ -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"}