@veritas-lex/contract-analysis-package 1.2.3

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 (214) hide show
  1. package/README.md +181 -0
  2. package/dist/auth/auth-core.module.d.ts +21 -0
  3. package/dist/auth/auth-core.module.d.ts.map +1 -0
  4. package/dist/auth/auth-core.module.js +56 -0
  5. package/dist/auth/auth-core.module.js.map +1 -0
  6. package/dist/auth/decorators/current-user.decorator.d.ts +2 -0
  7. package/dist/auth/decorators/current-user.decorator.d.ts.map +1 -0
  8. package/dist/auth/decorators/current-user.decorator.js +9 -0
  9. package/dist/auth/decorators/current-user.decorator.js.map +1 -0
  10. package/dist/auth/decorators/public.decorator.d.ts +3 -0
  11. package/dist/auth/decorators/public.decorator.d.ts.map +1 -0
  12. package/dist/auth/decorators/public.decorator.js +8 -0
  13. package/dist/auth/decorators/public.decorator.js.map +1 -0
  14. package/dist/auth/guards/jwt-auth.guard.d.ts +11 -0
  15. package/dist/auth/guards/jwt-auth.guard.d.ts.map +1 -0
  16. package/dist/auth/guards/jwt-auth.guard.js +39 -0
  17. package/dist/auth/guards/jwt-auth.guard.js.map +1 -0
  18. package/dist/auth/index.d.ts +7 -0
  19. package/dist/auth/index.d.ts.map +1 -0
  20. package/dist/auth/index.js +15 -0
  21. package/dist/auth/index.js.map +1 -0
  22. package/dist/auth/interfaces/jwt-payload.interface.d.ts +24 -0
  23. package/dist/auth/interfaces/jwt-payload.interface.d.ts.map +1 -0
  24. package/dist/auth/interfaces/jwt-payload.interface.js +3 -0
  25. package/dist/auth/interfaces/jwt-payload.interface.js.map +1 -0
  26. package/dist/auth/strategies/base-jwt.strategy.d.ts +47 -0
  27. package/dist/auth/strategies/base-jwt.strategy.d.ts.map +1 -0
  28. package/dist/auth/strategies/base-jwt.strategy.js +162 -0
  29. package/dist/auth/strategies/base-jwt.strategy.js.map +1 -0
  30. package/dist/bootstrap/configure-app.d.ts +50 -0
  31. package/dist/bootstrap/configure-app.d.ts.map +1 -0
  32. package/dist/bootstrap/configure-app.js +117 -0
  33. package/dist/bootstrap/configure-app.js.map +1 -0
  34. package/dist/bootstrap/index.d.ts +3 -0
  35. package/dist/bootstrap/index.d.ts.map +1 -0
  36. package/dist/bootstrap/index.js +6 -0
  37. package/dist/bootstrap/index.js.map +1 -0
  38. package/dist/config/app.config.d.ts +37 -0
  39. package/dist/config/app.config.d.ts.map +1 -0
  40. package/dist/config/app.config.js +28 -0
  41. package/dist/config/app.config.js.map +1 -0
  42. package/dist/config/database.config.d.ts +48 -0
  43. package/dist/config/database.config.d.ts.map +1 -0
  44. package/dist/config/database.config.js +34 -0
  45. package/dist/config/database.config.js.map +1 -0
  46. package/dist/config/doc.config.d.ts +31 -0
  47. package/dist/config/doc.config.d.ts.map +1 -0
  48. package/dist/config/doc.config.js +22 -0
  49. package/dist/config/doc.config.js.map +1 -0
  50. package/dist/config/index.d.ts +17 -0
  51. package/dist/config/index.d.ts.map +1 -0
  52. package/dist/config/index.js +26 -0
  53. package/dist/config/index.js.map +1 -0
  54. package/dist/config/jwt.config.d.ts +19 -0
  55. package/dist/config/jwt.config.d.ts.map +1 -0
  56. package/dist/config/jwt.config.js +28 -0
  57. package/dist/config/jwt.config.js.map +1 -0
  58. package/dist/config/logging.config.d.ts +33 -0
  59. package/dist/config/logging.config.d.ts.map +1 -0
  60. package/dist/config/logging.config.js +106 -0
  61. package/dist/config/logging.config.js.map +1 -0
  62. package/dist/config/redis.config.d.ts +19 -0
  63. package/dist/config/redis.config.d.ts.map +1 -0
  64. package/dist/config/redis.config.js +16 -0
  65. package/dist/config/redis.config.js.map +1 -0
  66. package/dist/config/security.config.d.ts +66 -0
  67. package/dist/config/security.config.d.ts.map +1 -0
  68. package/dist/config/security.config.js +66 -0
  69. package/dist/config/security.config.js.map +1 -0
  70. package/dist/config/storage.config.d.ts +20 -0
  71. package/dist/config/storage.config.d.ts.map +1 -0
  72. package/dist/config/storage.config.js +17 -0
  73. package/dist/config/storage.config.js.map +1 -0
  74. package/dist/config/validation.config.d.ts +62 -0
  75. package/dist/config/validation.config.d.ts.map +1 -0
  76. package/dist/config/validation.config.js +139 -0
  77. package/dist/config/validation.config.js.map +1 -0
  78. package/dist/constants/enums.d.ts +76 -0
  79. package/dist/constants/enums.d.ts.map +1 -0
  80. package/dist/constants/enums.js +92 -0
  81. package/dist/constants/enums.js.map +1 -0
  82. package/dist/constants/file-validation.constants.d.ts +28 -0
  83. package/dist/constants/file-validation.constants.d.ts.map +1 -0
  84. package/dist/constants/file-validation.constants.js +81 -0
  85. package/dist/constants/file-validation.constants.js.map +1 -0
  86. package/dist/constants/index.d.ts +6 -0
  87. package/dist/constants/index.d.ts.map +1 -0
  88. package/dist/constants/index.js +26 -0
  89. package/dist/constants/index.js.map +1 -0
  90. package/dist/constants/pii-classifications.constants.d.ts +27 -0
  91. package/dist/constants/pii-classifications.constants.d.ts.map +1 -0
  92. package/dist/constants/pii-classifications.constants.js +68 -0
  93. package/dist/constants/pii-classifications.constants.js.map +1 -0
  94. package/dist/database/base.entity.d.ts +6 -0
  95. package/dist/database/base.entity.d.ts.map +1 -0
  96. package/dist/database/base.entity.js +32 -0
  97. package/dist/database/base.entity.js.map +1 -0
  98. package/dist/database/database.module.d.ts +32 -0
  99. package/dist/database/database.module.d.ts.map +1 -0
  100. package/dist/database/database.module.js +69 -0
  101. package/dist/database/database.module.js.map +1 -0
  102. package/dist/database/entities/base-audit-log.entity.d.ts +21 -0
  103. package/dist/database/entities/base-audit-log.entity.d.ts.map +1 -0
  104. package/dist/database/entities/base-audit-log.entity.js +90 -0
  105. package/dist/database/entities/base-audit-log.entity.js.map +1 -0
  106. package/dist/database/entities/base-contract-chunk.entity.d.ts +18 -0
  107. package/dist/database/entities/base-contract-chunk.entity.d.ts.map +1 -0
  108. package/dist/database/entities/base-contract-chunk.entity.js +71 -0
  109. package/dist/database/entities/base-contract-chunk.entity.js.map +1 -0
  110. package/dist/database/entities/base-contract-event.entity.d.ts +16 -0
  111. package/dist/database/entities/base-contract-event.entity.d.ts.map +1 -0
  112. package/dist/database/entities/base-contract-event.entity.js +66 -0
  113. package/dist/database/entities/base-contract-event.entity.js.map +1 -0
  114. package/dist/database/entities/base-contract-key-date-rule.entity.d.ts +31 -0
  115. package/dist/database/entities/base-contract-key-date-rule.entity.d.ts.map +1 -0
  116. package/dist/database/entities/base-contract-key-date-rule.entity.js +140 -0
  117. package/dist/database/entities/base-contract-key-date-rule.entity.js.map +1 -0
  118. package/dist/database/entities/base-contract-pii-replacement.entity.d.ts +18 -0
  119. package/dist/database/entities/base-contract-pii-replacement.entity.d.ts.map +1 -0
  120. package/dist/database/entities/base-contract-pii-replacement.entity.js +67 -0
  121. package/dist/database/entities/base-contract-pii-replacement.entity.js.map +1 -0
  122. package/dist/database/entities/base-contract-red-flag.entity.d.ts +27 -0
  123. package/dist/database/entities/base-contract-red-flag.entity.d.ts.map +1 -0
  124. package/dist/database/entities/base-contract-red-flag.entity.js +114 -0
  125. package/dist/database/entities/base-contract-red-flag.entity.js.map +1 -0
  126. package/dist/database/entities/base-contract-task.entity.d.ts +20 -0
  127. package/dist/database/entities/base-contract-task.entity.d.ts.map +1 -0
  128. package/dist/database/entities/base-contract-task.entity.js +87 -0
  129. package/dist/database/entities/base-contract-task.entity.js.map +1 -0
  130. package/dist/database/entities/base-contract-text.entity.d.ts +19 -0
  131. package/dist/database/entities/base-contract-text.entity.d.ts.map +1 -0
  132. package/dist/database/entities/base-contract-text.entity.js +77 -0
  133. package/dist/database/entities/base-contract-text.entity.js.map +1 -0
  134. package/dist/database/entities/base-contract.entity.d.ts +56 -0
  135. package/dist/database/entities/base-contract.entity.d.ts.map +1 -0
  136. package/dist/database/entities/base-contract.entity.js +221 -0
  137. package/dist/database/entities/base-contract.entity.js.map +1 -0
  138. package/dist/database/entities/base-job.entity.d.ts +21 -0
  139. package/dist/database/entities/base-job.entity.d.ts.map +1 -0
  140. package/dist/database/entities/base-job.entity.js +89 -0
  141. package/dist/database/entities/base-job.entity.js.map +1 -0
  142. package/dist/database/entities/base-qna-question.entity.d.ts +22 -0
  143. package/dist/database/entities/base-qna-question.entity.d.ts.map +1 -0
  144. package/dist/database/entities/base-qna-question.entity.js +92 -0
  145. package/dist/database/entities/base-qna-question.entity.js.map +1 -0
  146. package/dist/database/entities/base-scoring-criteria.entity.d.ts +57 -0
  147. package/dist/database/entities/base-scoring-criteria.entity.d.ts.map +1 -0
  148. package/dist/database/entities/base-scoring-criteria.entity.js +376 -0
  149. package/dist/database/entities/base-scoring-criteria.entity.js.map +1 -0
  150. package/dist/database/entities/base-users-profile.entity.d.ts +32 -0
  151. package/dist/database/entities/base-users-profile.entity.d.ts.map +1 -0
  152. package/dist/database/entities/base-users-profile.entity.js +91 -0
  153. package/dist/database/entities/base-users-profile.entity.js.map +1 -0
  154. package/dist/database/entities/index.d.ts +16 -0
  155. package/dist/database/entities/index.d.ts.map +1 -0
  156. package/dist/database/entities/index.js +37 -0
  157. package/dist/database/entities/index.js.map +1 -0
  158. package/dist/database/entities/qna-question-template.entity.d.ts +30 -0
  159. package/dist/database/entities/qna-question-template.entity.d.ts.map +1 -0
  160. package/dist/database/entities/qna-question-template.entity.js +145 -0
  161. package/dist/database/entities/qna-question-template.entity.js.map +1 -0
  162. package/dist/database/entities/qna-response.entity.d.ts +29 -0
  163. package/dist/database/entities/qna-response.entity.d.ts.map +1 -0
  164. package/dist/database/entities/qna-response.entity.js +129 -0
  165. package/dist/database/entities/qna-response.entity.js.map +1 -0
  166. package/dist/database/index.d.ts +7 -0
  167. package/dist/database/index.d.ts.map +1 -0
  168. package/dist/database/index.js +32 -0
  169. package/dist/database/index.js.map +1 -0
  170. package/dist/database/redis.module.d.ts +12 -0
  171. package/dist/database/redis.module.d.ts.map +1 -0
  172. package/dist/database/redis.module.js +40 -0
  173. package/dist/database/redis.module.js.map +1 -0
  174. package/dist/database/redis.provider.d.ts +15 -0
  175. package/dist/database/redis.provider.d.ts.map +1 -0
  176. package/dist/database/redis.provider.js +42 -0
  177. package/dist/database/redis.provider.js.map +1 -0
  178. package/dist/dto/api-response.dto.d.ts +36 -0
  179. package/dist/dto/api-response.dto.d.ts.map +1 -0
  180. package/dist/dto/api-response.dto.js +88 -0
  181. package/dist/dto/api-response.dto.js.map +1 -0
  182. package/dist/dto/index.d.ts +2 -0
  183. package/dist/dto/index.d.ts.map +1 -0
  184. package/dist/dto/index.js +6 -0
  185. package/dist/dto/index.js.map +1 -0
  186. package/dist/filters/all-exceptions.filter.d.ts +43 -0
  187. package/dist/filters/all-exceptions.filter.d.ts.map +1 -0
  188. package/dist/filters/all-exceptions.filter.js +123 -0
  189. package/dist/filters/all-exceptions.filter.js.map +1 -0
  190. package/dist/filters/index.d.ts +3 -0
  191. package/dist/filters/index.d.ts.map +1 -0
  192. package/dist/filters/index.js +6 -0
  193. package/dist/filters/index.js.map +1 -0
  194. package/dist/helpers/crypto.service.d.ts +53 -0
  195. package/dist/helpers/crypto.service.d.ts.map +1 -0
  196. package/dist/helpers/crypto.service.js +153 -0
  197. package/dist/helpers/crypto.service.js.map +1 -0
  198. package/dist/helpers/index.d.ts +2 -0
  199. package/dist/helpers/index.d.ts.map +1 -0
  200. package/dist/helpers/index.js +6 -0
  201. package/dist/helpers/index.js.map +1 -0
  202. package/dist/index.d.ts +17 -0
  203. package/dist/index.d.ts.map +1 -0
  204. package/dist/index.js +86 -0
  205. package/dist/index.js.map +1 -0
  206. package/dist/swagger/index.d.ts +2 -0
  207. package/dist/swagger/index.d.ts.map +1 -0
  208. package/dist/swagger/index.js +6 -0
  209. package/dist/swagger/index.js.map +1 -0
  210. package/dist/swagger/swagger.d.ts +16 -0
  211. package/dist/swagger/swagger.d.ts.map +1 -0
  212. package/dist/swagger/swagger.js +59 -0
  213. package/dist/swagger/swagger.js.map +1 -0
  214. package/package.json +63 -0
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createLoggingConfig = createLoggingConfig;
4
+ exports.buildPinoParams = buildPinoParams;
5
+ const config_1 = require("@nestjs/config");
6
+ /**
7
+ * Creates a logging config factory registered under the `'logging'` namespace.
8
+ *
9
+ * @param options - Default values that can be overridden by environment variables
10
+ */
11
+ function createLoggingConfig(options = {}) {
12
+ return (0, config_1.registerAs)("logging", () => ({
13
+ level: process.env.LOG_LEVEL || options.defaultLevel || "info",
14
+ env: process.env.APP_ENV || "development",
15
+ }));
16
+ }
17
+ /**
18
+ * Builds nestjs-pino LoggerModule configuration from environment.
19
+ *
20
+ * Features:
21
+ * - Production: JSON output for log aggregation (Datadog, ELK, CloudWatch)
22
+ * - Development: Pretty-printed, colorized output via pino-pretty
23
+ * - Sensitive field redaction (Authorization headers, cookies, passwords)
24
+ * - Health check endpoint noise suppression
25
+ * - Request ID propagation via X-Correlation-Id header
26
+ *
27
+ * @param logLevel - Pino log level (trace, debug, info, warn, error, fatal)
28
+ * @param env - Application environment (development, production, etc.)
29
+ * @param serviceName - Service name tag for log context (e.g. 'ai-analysis-api')
30
+ */
31
+ function buildPinoParams(logLevel, env, serviceName = "nestjs-api") {
32
+ const isProduction = env === "production";
33
+ return {
34
+ pinoHttp: {
35
+ level: logLevel,
36
+ // Prevent req/res context from being attached to every intermediate log line.
37
+ quietReqLogger: true,
38
+ // Redact sensitive fields from logs
39
+ redact: {
40
+ paths: [
41
+ "req.headers.authorization",
42
+ "req.headers.cookie",
43
+ 'req.headers["x-api-key"]',
44
+ 'res.headers["set-cookie"]',
45
+ "body.password",
46
+ "body.token",
47
+ "body.refreshToken",
48
+ ],
49
+ censor: "[REDACTED]",
50
+ },
51
+ // Generate request IDs — reads X-Correlation-Id if present,
52
+ // otherwise falls back to pino's auto-generated reqId
53
+ genReqId: (req) => {
54
+ return req.headers["x-correlation-id"] || req.id;
55
+ },
56
+ // Suppress health check endpoint noise
57
+ autoLogging: {
58
+ ignore: (req) => {
59
+ const url = req.url || req.originalUrl || "";
60
+ return (url.includes("/health") ||
61
+ url.includes("/readiness") ||
62
+ url.includes("/liveness"));
63
+ },
64
+ },
65
+ // Custom serializers for cleaner request completion logs
66
+ serializers: {
67
+ req: (req) => ({
68
+ id: req.id,
69
+ method: req.method,
70
+ url: req.url,
71
+ query: req.query,
72
+ // Omit headers in production to reduce log volume
73
+ ...(isProduction ? {} : { headers: req.headers }),
74
+ }),
75
+ res: (res) => ({
76
+ statusCode: res.statusCode,
77
+ }),
78
+ },
79
+ // Attach service context to every log line
80
+ customProps: () => ({
81
+ context: "HTTP",
82
+ service: serviceName,
83
+ }),
84
+ // Pretty-print in development, JSON in production
85
+ ...(isProduction
86
+ ? {}
87
+ : {
88
+ transport: {
89
+ target: "pino-pretty",
90
+ options: {
91
+ singleLine: true,
92
+ colorize: true,
93
+ colorizeObjects: true,
94
+ levelFirst: true,
95
+ translateTime: "SYS:HH:MM:ss.l",
96
+ ignore: "pid,hostname,req,res,context,service,responseTime",
97
+ messageFormat: "{if context}[{context}] {end}{msg}",
98
+ customColors: "err:red,info:blue",
99
+ minimumLevel: "debug",
100
+ },
101
+ },
102
+ }),
103
+ },
104
+ };
105
+ }
106
+ //# sourceMappingURL=logging.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.config.js","sourceRoot":"","sources":["../../src/config/logging.config.ts"],"names":[],"mappings":";;AAaA,kDAKC;AAgBD,0CAwFC;AA1HD,2CAA4C;AAQ5C;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,UAAgC,EAAE;IACpE,OAAO,IAAA,mBAAU,EAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,YAAY,IAAI,MAAM;QAC9D,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,aAAa;KAC1C,CAAC,CAAC,CAAC;AACN,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAgB,eAAe,CAC7B,QAAgB,EAChB,GAAW,EACX,WAAW,GAAG,YAAY;IAE1B,MAAM,YAAY,GAAG,GAAG,KAAK,YAAY,CAAC;IAE1C,OAAO;QACL,QAAQ,EAAE;YACR,KAAK,EAAE,QAAQ;YAEf,8EAA8E;YAC9E,cAAc,EAAE,IAAI;YAEpB,oCAAoC;YACpC,MAAM,EAAE;gBACN,KAAK,EAAE;oBACL,2BAA2B;oBAC3B,oBAAoB;oBACpB,0BAA0B;oBAC1B,2BAA2B;oBAC3B,eAAe;oBACf,YAAY;oBACZ,mBAAmB;iBACpB;gBACD,MAAM,EAAE,YAAY;aACrB;YAED,4DAA4D;YAC5D,sDAAsD;YACtD,QAAQ,EAAE,CAAC,GAAQ,EAAE,EAAE;gBACrB,OAAO,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACnD,CAAC;YAED,uCAAuC;YACvC,WAAW,EAAE;gBACX,MAAM,EAAE,CAAC,GAAQ,EAAE,EAAE;oBACnB,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;oBAC7C,OAAO,CACL,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC;wBACvB,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;wBAC1B,GAAG,CAAC,QAAQ,CAAC,WAAW,CAAC,CAC1B,CAAC;gBACJ,CAAC;aACF;YAED,yDAAyD;YACzD,WAAW,EAAE;gBACX,GAAG,EAAE,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC;oBAClB,EAAE,EAAE,GAAG,CAAC,EAAE;oBACV,MAAM,EAAE,GAAG,CAAC,MAAM;oBAClB,GAAG,EAAE,GAAG,CAAC,GAAG;oBACZ,KAAK,EAAE,GAAG,CAAC,KAAK;oBAChB,kDAAkD;oBAClD,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;iBAClD,CAAC;gBACF,GAAG,EAAE,CAAC,GAAQ,EAAE,EAAE,CAAC,CAAC;oBAClB,UAAU,EAAE,GAAG,CAAC,UAAU;iBAC3B,CAAC;aACH;YAED,2CAA2C;YAC3C,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;gBAClB,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE,WAAW;aACrB,CAAC;YAEF,kDAAkD;YAClD,GAAG,CAAC,YAAY;gBACd,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC;oBACE,SAAS,EAAE;wBACT,MAAM,EAAE,aAAa;wBACrB,OAAO,EAAE;4BACP,UAAU,EAAE,IAAI;4BAChB,QAAQ,EAAE,IAAI;4BACd,eAAe,EAAE,IAAI;4BACrB,UAAU,EAAE,IAAI;4BAChB,aAAa,EAAE,gBAAgB;4BAC/B,MAAM,EAAE,mDAAmD;4BAC3D,aAAa,EAAE,oCAAoC;4BACnD,YAAY,EAAE,mBAAmB;4BACjC,YAAY,EAAE,OAAO;yBACtB;qBACF;iBACF,CAAC;SACP;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Redis configuration for BullMQ job queue.
3
+ *
4
+ * Registered under the `'redis'` namespace. Used by the
5
+ * RedisModule / RedisProvider for BullMQ queue infrastructure.
6
+ */
7
+ declare const _default: (() => {
8
+ host: string;
9
+ port: number;
10
+ password: string | undefined;
11
+ db: number;
12
+ }) & import("@nestjs/config").ConfigFactoryKeyHost<{
13
+ host: string;
14
+ port: number;
15
+ password: string | undefined;
16
+ db: number;
17
+ }>;
18
+ export default _default;
19
+ //# sourceMappingURL=redis.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.config.d.ts","sourceRoot":"","sources":["../../src/config/redis.config.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;;;;;;;;;;;;AACH,wBAKI"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const config_1 = require("@nestjs/config");
4
+ /**
5
+ * Redis configuration for BullMQ job queue.
6
+ *
7
+ * Registered under the `'redis'` namespace. Used by the
8
+ * RedisModule / RedisProvider for BullMQ queue infrastructure.
9
+ */
10
+ exports.default = (0, config_1.registerAs)("redis", () => ({
11
+ host: process.env.REDIS_HOST || "localhost",
12
+ port: parseInt(process.env.REDIS_PORT || "6379", 10),
13
+ password: process.env.REDIS_PASSWORD || undefined,
14
+ db: parseInt(process.env.REDIS_DB || "0", 10),
15
+ }));
16
+ //# sourceMappingURL=redis.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.config.js","sourceRoot":"","sources":["../../src/config/redis.config.ts"],"names":[],"mappings":";;AAAA,2CAA4C;AAE5C;;;;;GAKG;AACH,kBAAe,IAAA,mBAAU,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;IACxC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW;IAC3C,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,MAAM,EAAE,EAAE,CAAC;IACpD,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,SAAS;IACjD,EAAE,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,GAAG,EAAE,EAAE,CAAC;CAC9C,CAAC,CAAC,CAAC"}
@@ -0,0 +1,66 @@
1
+ export interface SecurityConfigOptions {
2
+ /** Include and validate PII_ENCRYPTION_KEY (default: true) */
3
+ validatePiiKey?: boolean;
4
+ /** Include ENCRYPTION_KEY with production-only validation */
5
+ includeEncryptionKey?: boolean;
6
+ }
7
+ /**
8
+ * Creates a security config factory registered under the `'security'` namespace.
9
+ *
10
+ * Provides CORS, Helmet, and rate-limiting configuration. Optionally validates
11
+ * encryption keys at startup.
12
+ *
13
+ * @param options - Control which encryption keys to include and validate
14
+ */
15
+ export declare function createSecurityConfig(options?: SecurityConfigOptions): (() => {
16
+ piiEncryptionKey: string | undefined;
17
+ cors: {
18
+ origin: string[];
19
+ credentials: boolean;
20
+ };
21
+ helmet: {
22
+ contentSecurityPolicy: boolean;
23
+ crossOriginEmbedderPolicy: boolean;
24
+ };
25
+ rateLimit: {
26
+ short: {
27
+ ttl: number;
28
+ limit: number;
29
+ };
30
+ medium: {
31
+ ttl: number;
32
+ limit: number;
33
+ };
34
+ long: {
35
+ ttl: number;
36
+ limit: number;
37
+ };
38
+ };
39
+ encryptionKey?: string | undefined;
40
+ }) & import("@nestjs/config").ConfigFactoryKeyHost<{
41
+ piiEncryptionKey: string | undefined;
42
+ cors: {
43
+ origin: string[];
44
+ credentials: boolean;
45
+ };
46
+ helmet: {
47
+ contentSecurityPolicy: boolean;
48
+ crossOriginEmbedderPolicy: boolean;
49
+ };
50
+ rateLimit: {
51
+ short: {
52
+ ttl: number;
53
+ limit: number;
54
+ };
55
+ medium: {
56
+ ttl: number;
57
+ limit: number;
58
+ };
59
+ long: {
60
+ ttl: number;
61
+ limit: number;
62
+ };
63
+ };
64
+ encryptionKey?: string | undefined;
65
+ }>;
66
+ //# sourceMappingURL=security.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.config.d.ts","sourceRoot":"","sources":["../../src/config/security.config.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,qBAAqB;IACpC,8DAA8D;IAC9D,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,6DAA6D;IAC7D,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,GAAE,qBAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6DvE"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createSecurityConfig = createSecurityConfig;
4
+ const config_1 = require("@nestjs/config");
5
+ /**
6
+ * Creates a security config factory registered under the `'security'` namespace.
7
+ *
8
+ * Provides CORS, Helmet, and rate-limiting configuration. Optionally validates
9
+ * encryption keys at startup.
10
+ *
11
+ * @param options - Control which encryption keys to include and validate
12
+ */
13
+ function createSecurityConfig(options = {}) {
14
+ return (0, config_1.registerAs)("security", () => {
15
+ const piiEncryptionKey = process.env.PII_ENCRYPTION_KEY;
16
+ const encryptionKey = process.env.ENCRYPTION_KEY;
17
+ const isProduction = process.env.NODE_ENV === "production";
18
+ // Validate PII encryption key (default: enabled)
19
+ if (options.validatePiiKey !== false) {
20
+ if (!piiEncryptionKey) {
21
+ throw new Error("PII_ENCRYPTION_KEY must be set (required for PII encryption at rest)");
22
+ }
23
+ if (Buffer.from(piiEncryptionKey, "hex").length !== 32) {
24
+ throw new Error("PII_ENCRYPTION_KEY must be a 64-character hex string (32 bytes)");
25
+ }
26
+ }
27
+ // Validate ENCRYPTION_KEY in production if included
28
+ if (options.includeEncryptionKey) {
29
+ if (isProduction && !encryptionKey) {
30
+ throw new Error("ENCRYPTION_KEY must be set in production environment");
31
+ }
32
+ if (encryptionKey && Buffer.from(encryptionKey, "hex").length !== 32) {
33
+ throw new Error("ENCRYPTION_KEY must be a 64-character hex string (32 bytes)");
34
+ }
35
+ }
36
+ return {
37
+ ...(options.includeEncryptionKey ? { encryptionKey } : {}),
38
+ piiEncryptionKey,
39
+ cors: {
40
+ origin: process.env.CORS_ORIGINS?.split(",") || [
41
+ "http://localhost:3000",
42
+ ],
43
+ credentials: true,
44
+ },
45
+ helmet: {
46
+ contentSecurityPolicy: isProduction,
47
+ crossOriginEmbedderPolicy: false,
48
+ },
49
+ rateLimit: {
50
+ short: {
51
+ ttl: parseInt(process.env.RATE_LIMIT_SHORT_TTL || "1000"),
52
+ limit: parseInt(process.env.RATE_LIMIT_SHORT_LIMIT || "3"),
53
+ },
54
+ medium: {
55
+ ttl: parseInt(process.env.RATE_LIMIT_MEDIUM_TTL || "10000"),
56
+ limit: parseInt(process.env.RATE_LIMIT_MEDIUM_LIMIT || "20"),
57
+ },
58
+ long: {
59
+ ttl: parseInt(process.env.RATE_LIMIT_LONG_TTL || "60000"),
60
+ limit: parseInt(process.env.RATE_LIMIT_LONG_LIMIT || "100"),
61
+ },
62
+ },
63
+ };
64
+ });
65
+ }
66
+ //# sourceMappingURL=security.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.config.js","sourceRoot":"","sources":["../../src/config/security.config.ts"],"names":[],"mappings":";;AAiBA,oDA6DC;AA9ED,2CAA4C;AAS5C;;;;;;;GAOG;AACH,SAAgB,oBAAoB,CAAC,UAAiC,EAAE;IACtE,OAAO,IAAA,mBAAU,EAAC,UAAU,EAAE,GAAG,EAAE;QACjC,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QACxD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QACjD,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY,CAAC;QAE3D,iDAAiD;QACjD,IAAI,OAAO,CAAC,cAAc,KAAK,KAAK,EAAE,CAAC;YACrC,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACtB,MAAM,IAAI,KAAK,CACb,sEAAsE,CACvE,CAAC;YACJ,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;gBACvD,MAAM,IAAI,KAAK,CACb,iEAAiE,CAClE,CAAC;YACJ,CAAC;QACH,CAAC;QAED,oDAAoD;QACpD,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;YACjC,IAAI,YAAY,IAAI,CAAC,aAAa,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;YAC1E,CAAC;YACD,IAAI,aAAa,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;gBACrE,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO;YACL,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,gBAAgB;YAChB,IAAI,EAAE;gBACJ,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC,GAAG,CAAC,IAAI;oBAC9C,uBAAuB;iBACxB;gBACD,WAAW,EAAE,IAAI;aAClB;YACD,MAAM,EAAE;gBACN,qBAAqB,EAAE,YAAY;gBACnC,yBAAyB,EAAE,KAAK;aACjC;YACD,SAAS,EAAE;gBACT,KAAK,EAAE;oBACL,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,MAAM,CAAC;oBACzD,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,GAAG,CAAC;iBAC3D;gBACD,MAAM,EAAE;oBACN,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,OAAO,CAAC;oBAC3D,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,IAAI,CAAC;iBAC7D;gBACD,IAAI,EAAE;oBACJ,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC;oBACzD,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,KAAK,CAAC;iBAC5D;aACF;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Supabase storage configuration registered under the `'storage'` namespace.
3
+ */
4
+ declare const _default: (() => {
5
+ supabase: {
6
+ url: string | undefined;
7
+ key: string | undefined;
8
+ bucket: string;
9
+ signedUrlExpiry: number;
10
+ };
11
+ }) & import("@nestjs/config").ConfigFactoryKeyHost<{
12
+ supabase: {
13
+ url: string | undefined;
14
+ key: string | undefined;
15
+ bucket: string;
16
+ signedUrlExpiry: number;
17
+ };
18
+ }>;
19
+ export default _default;
20
+ //# sourceMappingURL=storage.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.config.d.ts","sourceRoot":"","sources":["../../src/config/storage.config.ts"],"names":[],"mappings":"AAEA;;GAEG;;;;;;;;;;;;;;;;AACH,wBASI"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const config_1 = require("@nestjs/config");
4
+ /**
5
+ * Supabase storage configuration registered under the `'storage'` namespace.
6
+ */
7
+ exports.default = (0, config_1.registerAs)("storage", () => ({
8
+ supabase: {
9
+ url: process.env.SUPABASE_URL,
10
+ key: process.env.SUPABASE_SERVICE_ROLE_KEY,
11
+ bucket: process.env.SUPABASE_STORAGE_BUCKET || "contracts",
12
+ signedUrlExpiry: process.env.SUPABASE_SIGNED_URL_EXPIRY
13
+ ? parseInt(process.env.SUPABASE_SIGNED_URL_EXPIRY, 10)
14
+ : 3600, // Default to 1 hour
15
+ },
16
+ }));
17
+ //# sourceMappingURL=storage.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.config.js","sourceRoot":"","sources":["../../src/config/storage.config.ts"],"names":[],"mappings":";;AAAA,2CAA4C;AAE5C;;GAEG;AACH,kBAAe,IAAA,mBAAU,EAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IAC1C,QAAQ,EAAE;QACR,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QAC7B,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB;QAC1C,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,WAAW;QAC1D,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,0BAA0B;YACrD,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,EAAE,CAAC;YACtD,CAAC,CAAC,IAAI,EAAE,oBAAoB;KAC/B;CACF,CAAC,CAAC,CAAC"}
@@ -0,0 +1,62 @@
1
+ import * as Joi from "joi";
2
+ export interface BaseValidationOptions {
3
+ /** Application defaults */
4
+ app?: {
5
+ name?: string;
6
+ port?: number;
7
+ };
8
+ /** Swagger doc defaults */
9
+ doc?: {
10
+ name?: string;
11
+ };
12
+ /** Database defaults */
13
+ database?: {
14
+ poolMax?: number;
15
+ /** Include DATABASE_SSL rule */
16
+ includeSsl?: boolean;
17
+ /** Include DB_LOGGING key (default: DATABASE_LOGGING) */
18
+ loggingKey?: "DB_LOGGING" | "DATABASE_LOGGING";
19
+ };
20
+ /** JWT rules */
21
+ jwt?: {
22
+ /** Whether JWT_SECRET is required (default: false → optional) */
23
+ secretRequired?: boolean;
24
+ /** Default issuer name */
25
+ issuer?: string;
26
+ /** Include JWT_JWKS_URI rule */
27
+ includeJwks?: boolean;
28
+ };
29
+ /** HTTP versioning defaults */
30
+ http?: {
31
+ /** Default for HTTP_VERSIONING_ENABLE */
32
+ versioningEnabled?: boolean;
33
+ };
34
+ /** CORS defaults */
35
+ cors?: {
36
+ /** Default CORS_ORIGINS value (omit for optional-with-no-default) */
37
+ origins?: string;
38
+ };
39
+ }
40
+ /**
41
+ * Creates the base Joi validation rules shared across all APIs.
42
+ *
43
+ * Returns a plain object of Joi schema keys that can be spread into
44
+ * a `Joi.object({ ...base, ...apiSpecific })` call.
45
+ *
46
+ * Covers: application, swagger, database, redis, JWT, security/rate-limiting,
47
+ * HTTP versioning, and Presidio base URLs.
48
+ *
49
+ * @example
50
+ * ```typescript
51
+ * import * as Joi from 'joi';
52
+ * import { createBaseValidationRules } from '@veritas-lex/contract-analysis-package';
53
+ *
54
+ * export const configValidationSchema = Joi.object({
55
+ * ...createBaseValidationRules({ jwt: { secretRequired: true } }),
56
+ * // API-specific keys
57
+ * MY_CUSTOM_KEY: Joi.string().required(),
58
+ * }).options({ allowUnknown: true, stripUnknown: false });
59
+ * ```
60
+ */
61
+ export declare function createBaseValidationRules(options?: BaseValidationOptions): Record<string, Joi.Schema>;
62
+ //# sourceMappingURL=validation.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.config.d.ts","sourceRoot":"","sources":["../../src/config/validation.config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAE3B,MAAM,WAAW,qBAAqB;IACpC,2BAA2B;IAC3B,GAAG,CAAC,EAAE;QACJ,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,2BAA2B;IAC3B,GAAG,CAAC,EAAE;QACJ,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,wBAAwB;IACxB,QAAQ,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,gCAAgC;QAChC,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,yDAAyD;QACzD,UAAU,CAAC,EAAE,YAAY,GAAG,kBAAkB,CAAC;KAChD,CAAC;IACF,gBAAgB;IAChB,GAAG,CAAC,EAAE;QACJ,iEAAiE;QACjE,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,0BAA0B;QAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,gCAAgC;QAChC,WAAW,CAAC,EAAE,OAAO,CAAC;KACvB,CAAC;IACF,+BAA+B;IAC/B,IAAI,CAAC,EAAE;QACL,yCAAyC;QACzC,iBAAiB,CAAC,EAAE,OAAO,CAAC;KAC7B,CAAC;IACF,oBAAoB;IACpB,IAAI,CAAC,EAAE;QACL,qEAAqE;QACrE,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,GAAE,qBAA0B,GAClC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAqG5B"}
@@ -0,0 +1,139 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.createBaseValidationRules = createBaseValidationRules;
37
+ const Joi = __importStar(require("joi"));
38
+ /**
39
+ * Creates the base Joi validation rules shared across all APIs.
40
+ *
41
+ * Returns a plain object of Joi schema keys that can be spread into
42
+ * a `Joi.object({ ...base, ...apiSpecific })` call.
43
+ *
44
+ * Covers: application, swagger, database, redis, JWT, security/rate-limiting,
45
+ * HTTP versioning, and Presidio base URLs.
46
+ *
47
+ * @example
48
+ * ```typescript
49
+ * import * as Joi from 'joi';
50
+ * import { createBaseValidationRules } from '@veritas-lex/contract-analysis-package';
51
+ *
52
+ * export const configValidationSchema = Joi.object({
53
+ * ...createBaseValidationRules({ jwt: { secretRequired: true } }),
54
+ * // API-specific keys
55
+ * MY_CUSTOM_KEY: Joi.string().required(),
56
+ * }).options({ allowUnknown: true, stripUnknown: false });
57
+ * ```
58
+ */
59
+ function createBaseValidationRules(options = {}) {
60
+ const { app = {}, doc = {}, database = {}, jwt = {}, http = {}, cors = {}, } = options;
61
+ const dbLoggingKey = database.loggingKey ?? "DATABASE_LOGGING";
62
+ return {
63
+ // ── Application ─────────────────────────────────────────────────
64
+ NODE_ENV: Joi.string()
65
+ .valid("development", "production", "test")
66
+ .default("development"),
67
+ APP_NAME: Joi.string().default(app.name ?? "Contract Analysis API"),
68
+ APP_ENV: Joi.string()
69
+ .valid("development", "production", "test")
70
+ .default("development"),
71
+ HTTP_PORT: Joi.number()
72
+ .port()
73
+ .default(app.port ?? 3003),
74
+ LOG_LEVEL: Joi.string()
75
+ .valid("trace", "debug", "info", "warn", "error", "fatal")
76
+ .default("info"),
77
+ // ── Swagger ─────────────────────────────────────────────────────
78
+ SWAGGER_USER: Joi.string().default("admin"),
79
+ SWAGGER_PASSWORD: Joi.string().default("admin"),
80
+ DOC_NAME: Joi.string().default(doc.name ?? "Contract Analysis API Specification"),
81
+ DOC_VERSION: Joi.string().default("1.0"),
82
+ // ── Database ────────────────────────────────────────────────────
83
+ DATABASE_HOST: Joi.string().default("localhost"),
84
+ DATABASE_PORT: Joi.number().port().default(5432),
85
+ DATABASE_USERNAME: Joi.string().default("postgres"),
86
+ DATABASE_PASSWORD: Joi.string().default("postgres"),
87
+ DATABASE_NAME: Joi.string().default("contract_analysis"),
88
+ [dbLoggingKey]: Joi.boolean().default(false),
89
+ ...(database.includeSsl
90
+ ? { DATABASE_SSL: Joi.boolean().default(false) }
91
+ : {}),
92
+ DATABASE_POOL_MAX: Joi.number()
93
+ .integer()
94
+ .min(1)
95
+ .max(100)
96
+ .default(database.poolMax ?? 20),
97
+ DATABASE_POOL_IDLE_TIMEOUT: Joi.number().integer().min(1000).default(30000),
98
+ DATABASE_POOL_CONNECTION_TIMEOUT: Joi.number()
99
+ .integer()
100
+ .min(1000)
101
+ .default(5000),
102
+ // ── Redis ───────────────────────────────────────────────────────
103
+ REDIS_HOST: Joi.string().default("localhost"),
104
+ REDIS_PORT: Joi.number().port().default(6379),
105
+ REDIS_PASSWORD: Joi.string().optional().allow(""),
106
+ REDIS_DB: Joi.number().integer().min(0).max(15).default(0),
107
+ // ── JWT ─────────────────────────────────────────────────────────
108
+ JWT_SECRET: jwt.secretRequired
109
+ ? Joi.string().min(32).required().messages({
110
+ "string.min": "JWT_SECRET must be at least 32 characters long for security",
111
+ "any.required": "JWT_SECRET is required for authentication",
112
+ })
113
+ : Joi.string().min(32).optional().messages({
114
+ "string.min": "JWT_SECRET must be at least 32 characters long for security",
115
+ }),
116
+ JWT_EXPIRES_IN: Joi.string().default("7d"),
117
+ JWT_ISSUER: Joi.string().default(jwt.issuer ?? "contract-analysis-api"),
118
+ ...(jwt.includeJwks ? { JWT_JWKS_URI: Joi.string().uri().optional() } : {}),
119
+ // ── Security / Rate Limiting ────────────────────────────────────
120
+ CORS_ORIGINS: cors.origins
121
+ ? Joi.string().default(cors.origins)
122
+ : Joi.string().optional(),
123
+ RATE_LIMIT_SHORT_TTL: Joi.number().positive().default(1000),
124
+ RATE_LIMIT_SHORT_LIMIT: Joi.number().positive().default(3),
125
+ RATE_LIMIT_MEDIUM_TTL: Joi.number().positive().default(10000),
126
+ RATE_LIMIT_MEDIUM_LIMIT: Joi.number().positive().default(20),
127
+ RATE_LIMIT_LONG_TTL: Joi.number().positive().default(60000),
128
+ RATE_LIMIT_LONG_LIMIT: Joi.number().positive().default(100),
129
+ // ── HTTP Versioning ─────────────────────────────────────────────
130
+ HTTP_VERSIONING_ENABLE: Joi.boolean().default(http.versioningEnabled ?? false),
131
+ HTTP_VERSION: Joi.string().default("1"),
132
+ // ── Presidio (base URLs only) ───────────────────────────────────
133
+ PRESIDIO_ANALYZER_URL: Joi.string().uri().default("http://localhost:5001"),
134
+ PRESIDIO_ANONYMIZER_URL: Joi.string()
135
+ .uri()
136
+ .default("http://localhost:5002"),
137
+ };
138
+ }
139
+ //# sourceMappingURL=validation.config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.config.js","sourceRoot":"","sources":["../../src/config/validation.config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Shared Enums
3
+ *
4
+ * Single source of truth for workflow/status enums used across
5
+ * both contract-analysis-api and ai-analysis-api.
6
+ */
7
+ export declare enum ContractStatus {
8
+ UPLOADED = "uploaded",
9
+ DETECTING_TYPE = "detecting_type",
10
+ EXTRACTING_TEXT = "extracting_text",
11
+ OCR_PENDING = "ocr_pending",
12
+ OCR_RUNNING = "ocr_running",
13
+ SCANNING_PII = "scanning_pii",
14
+ PII_DETECTED = "pii_detected",
15
+ AWAITING_PII_APPROVAL = "awaiting_pii_approval",
16
+ PSEUDONYMIZING = "pseudonymizing",
17
+ CHUNKING = "chunking",
18
+ EMBEDDING = "embedding",
19
+ INDEXED = "indexed",
20
+ PARTIALLY_INDEXED = "partially_indexed",
21
+ ANALYSIS_PENDING = "analysis_pending",
22
+ ANALYSIS_RUNNING = "analysis_running",
23
+ ANALYZING_RED_FLAGS = "analyzing_red_flags",
24
+ ANALYZING_DEEP = "analyzing_deep",
25
+ GENERATING_REPORT = "generating_report",
26
+ DEEP_ANALYSIS_COMPLETE = "deep_analysis_complete",
27
+ READY = "ready",
28
+ FAILED = "failed",
29
+ ACTION_REQUIRED = "action_required"
30
+ }
31
+ export declare enum JobType {
32
+ DOCUMENT_TYPE_DETECTION = "document_type_detection",
33
+ EXTRACT_TEXT = "extract_text",
34
+ OCR = "ocr",
35
+ PII_SCAN = "pii_scan",
36
+ CHUNK = "chunk",
37
+ EMBED = "embed",
38
+ QNA = "qna"
39
+ }
40
+ export declare enum JobStatus {
41
+ QUEUED = "queued",
42
+ STARTED = "started",
43
+ RUNNING = "running",
44
+ SUCCEEDED = "succeeded",
45
+ FAILED = "failed",
46
+ CANCELLED = "cancelled"
47
+ }
48
+ export declare enum TaskStatus {
49
+ OPEN = "open",
50
+ DONE = "done",
51
+ CANCELLED = "cancelled",
52
+ SNOOZED = "snoozed"
53
+ }
54
+ export declare enum TaskPriority {
55
+ LOW = "low",
56
+ MEDIUM = "medium",
57
+ HIGH = "high",
58
+ CRITICAL = "critical"
59
+ }
60
+ export declare enum RiskLevel {
61
+ CRITICAL = "critical",
62
+ HIGH = "high",
63
+ MEDIUM = "medium",
64
+ LOW = "low",
65
+ INFORMATIONAL = "informational"
66
+ }
67
+ export declare enum RuleKind {
68
+ ABSOLUTE = "absolute",
69
+ RELATIVE = "relative",
70
+ EVENT_DRIVEN = "event_driven"
71
+ }
72
+ export declare enum RuleDirection {
73
+ BEFORE = "before",
74
+ AFTER = "after"
75
+ }
76
+ //# sourceMappingURL=enums.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../../src/constants/enums.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,oBAAY,cAAc;IACxB,QAAQ,aAAa;IACrB,cAAc,mBAAmB;IACjC,eAAe,oBAAoB;IACnC,WAAW,gBAAgB;IAC3B,WAAW,gBAAgB;IAC3B,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,qBAAqB,0BAA0B;IAC/C,cAAc,mBAAmB;IACjC,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,OAAO,YAAY;IACnB,iBAAiB,sBAAsB;IACvC,gBAAgB,qBAAqB;IACrC,gBAAgB,qBAAqB;IACrC,mBAAmB,wBAAwB;IAC3C,cAAc,mBAAmB;IACjC,iBAAiB,sBAAsB;IACvC,sBAAsB,2BAA2B;IACjD,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,eAAe,oBAAoB;CACpC;AAID,oBAAY,OAAO;IACjB,uBAAuB,4BAA4B;IACnD,YAAY,iBAAiB;IAC7B,GAAG,QAAQ;IACX,QAAQ,aAAa;IACrB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,GAAG,QAAQ;CACZ;AAED,oBAAY,SAAS;IACnB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,SAAS,cAAc;CACxB;AAID,oBAAY,UAAU;IACpB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,OAAO,YAAY;CACpB;AAED,oBAAY,YAAY;IACtB,GAAG,QAAQ;IACX,MAAM,WAAW;IACjB,IAAI,SAAS;IACb,QAAQ,aAAa;CACtB;AAID,oBAAY,SAAS;IACnB,QAAQ,aAAa;IACrB,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,GAAG,QAAQ;IACX,aAAa,kBAAkB;CAChC;AAID,oBAAY,QAAQ;IAClB,QAAQ,aAAa;IACrB,QAAQ,aAAa;IACrB,YAAY,iBAAiB;CAC9B;AAED,oBAAY,aAAa;IACvB,MAAM,WAAW;IACjB,KAAK,UAAU;CAChB"}