@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,92 @@
1
+ "use strict";
2
+ /**
3
+ * Shared Enums
4
+ *
5
+ * Single source of truth for workflow/status enums used across
6
+ * both contract-analysis-api and ai-analysis-api.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.RuleDirection = exports.RuleKind = exports.RiskLevel = exports.TaskPriority = exports.TaskStatus = exports.JobStatus = exports.JobType = exports.ContractStatus = void 0;
10
+ // ─── Contract Pipeline ──────────────────────────────────────
11
+ var ContractStatus;
12
+ (function (ContractStatus) {
13
+ ContractStatus["UPLOADED"] = "uploaded";
14
+ ContractStatus["DETECTING_TYPE"] = "detecting_type";
15
+ ContractStatus["EXTRACTING_TEXT"] = "extracting_text";
16
+ ContractStatus["OCR_PENDING"] = "ocr_pending";
17
+ ContractStatus["OCR_RUNNING"] = "ocr_running";
18
+ ContractStatus["SCANNING_PII"] = "scanning_pii";
19
+ ContractStatus["PII_DETECTED"] = "pii_detected";
20
+ ContractStatus["AWAITING_PII_APPROVAL"] = "awaiting_pii_approval";
21
+ ContractStatus["PSEUDONYMIZING"] = "pseudonymizing";
22
+ ContractStatus["CHUNKING"] = "chunking";
23
+ ContractStatus["EMBEDDING"] = "embedding";
24
+ ContractStatus["INDEXED"] = "indexed";
25
+ ContractStatus["PARTIALLY_INDEXED"] = "partially_indexed";
26
+ ContractStatus["ANALYSIS_PENDING"] = "analysis_pending";
27
+ ContractStatus["ANALYSIS_RUNNING"] = "analysis_running";
28
+ ContractStatus["ANALYZING_RED_FLAGS"] = "analyzing_red_flags";
29
+ ContractStatus["ANALYZING_DEEP"] = "analyzing_deep";
30
+ ContractStatus["GENERATING_REPORT"] = "generating_report";
31
+ ContractStatus["DEEP_ANALYSIS_COMPLETE"] = "deep_analysis_complete";
32
+ ContractStatus["READY"] = "ready";
33
+ ContractStatus["FAILED"] = "failed";
34
+ ContractStatus["ACTION_REQUIRED"] = "action_required";
35
+ })(ContractStatus || (exports.ContractStatus = ContractStatus = {}));
36
+ // ─── Jobs ───────────────────────────────────────────────────
37
+ var JobType;
38
+ (function (JobType) {
39
+ JobType["DOCUMENT_TYPE_DETECTION"] = "document_type_detection";
40
+ JobType["EXTRACT_TEXT"] = "extract_text";
41
+ JobType["OCR"] = "ocr";
42
+ JobType["PII_SCAN"] = "pii_scan";
43
+ JobType["CHUNK"] = "chunk";
44
+ JobType["EMBED"] = "embed";
45
+ JobType["QNA"] = "qna";
46
+ })(JobType || (exports.JobType = JobType = {}));
47
+ var JobStatus;
48
+ (function (JobStatus) {
49
+ JobStatus["QUEUED"] = "queued";
50
+ JobStatus["STARTED"] = "started";
51
+ JobStatus["RUNNING"] = "running";
52
+ JobStatus["SUCCEEDED"] = "succeeded";
53
+ JobStatus["FAILED"] = "failed";
54
+ JobStatus["CANCELLED"] = "cancelled";
55
+ })(JobStatus || (exports.JobStatus = JobStatus = {}));
56
+ // ─── Tasks ──────────────────────────────────────────────────
57
+ var TaskStatus;
58
+ (function (TaskStatus) {
59
+ TaskStatus["OPEN"] = "open";
60
+ TaskStatus["DONE"] = "done";
61
+ TaskStatus["CANCELLED"] = "cancelled";
62
+ TaskStatus["SNOOZED"] = "snoozed";
63
+ })(TaskStatus || (exports.TaskStatus = TaskStatus = {}));
64
+ var TaskPriority;
65
+ (function (TaskPriority) {
66
+ TaskPriority["LOW"] = "low";
67
+ TaskPriority["MEDIUM"] = "medium";
68
+ TaskPriority["HIGH"] = "high";
69
+ TaskPriority["CRITICAL"] = "critical";
70
+ })(TaskPriority || (exports.TaskPriority = TaskPriority = {}));
71
+ // ─── Risk ───────────────────────────────────────────────────
72
+ var RiskLevel;
73
+ (function (RiskLevel) {
74
+ RiskLevel["CRITICAL"] = "critical";
75
+ RiskLevel["HIGH"] = "high";
76
+ RiskLevel["MEDIUM"] = "medium";
77
+ RiskLevel["LOW"] = "low";
78
+ RiskLevel["INFORMATIONAL"] = "informational";
79
+ })(RiskLevel || (exports.RiskLevel = RiskLevel = {}));
80
+ // ─── Key Date Rules ─────────────────────────────────────────
81
+ var RuleKind;
82
+ (function (RuleKind) {
83
+ RuleKind["ABSOLUTE"] = "absolute";
84
+ RuleKind["RELATIVE"] = "relative";
85
+ RuleKind["EVENT_DRIVEN"] = "event_driven";
86
+ })(RuleKind || (exports.RuleKind = RuleKind = {}));
87
+ var RuleDirection;
88
+ (function (RuleDirection) {
89
+ RuleDirection["BEFORE"] = "before";
90
+ RuleDirection["AFTER"] = "after";
91
+ })(RuleDirection || (exports.RuleDirection = RuleDirection = {}));
92
+ //# sourceMappingURL=enums.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums.js","sourceRoot":"","sources":["../../src/constants/enums.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,+DAA+D;AAE/D,IAAY,cAuBX;AAvBD,WAAY,cAAc;IACxB,uCAAqB,CAAA;IACrB,mDAAiC,CAAA;IACjC,qDAAmC,CAAA;IACnC,6CAA2B,CAAA;IAC3B,6CAA2B,CAAA;IAC3B,+CAA6B,CAAA;IAC7B,+CAA6B,CAAA;IAC7B,iEAA+C,CAAA;IAC/C,mDAAiC,CAAA;IACjC,uCAAqB,CAAA;IACrB,yCAAuB,CAAA;IACvB,qCAAmB,CAAA;IACnB,yDAAuC,CAAA;IACvC,uDAAqC,CAAA;IACrC,uDAAqC,CAAA;IACrC,6DAA2C,CAAA;IAC3C,mDAAiC,CAAA;IACjC,yDAAuC,CAAA;IACvC,mEAAiD,CAAA;IACjD,iCAAe,CAAA;IACf,mCAAiB,CAAA;IACjB,qDAAmC,CAAA;AACrC,CAAC,EAvBW,cAAc,8BAAd,cAAc,QAuBzB;AAED,+DAA+D;AAE/D,IAAY,OAQX;AARD,WAAY,OAAO;IACjB,8DAAmD,CAAA;IACnD,wCAA6B,CAAA;IAC7B,sBAAW,CAAA;IACX,gCAAqB,CAAA;IACrB,0BAAe,CAAA;IACf,0BAAe,CAAA;IACf,sBAAW,CAAA;AACb,CAAC,EARW,OAAO,uBAAP,OAAO,QAQlB;AAED,IAAY,SAOX;AAPD,WAAY,SAAS;IACnB,8BAAiB,CAAA;IACjB,gCAAmB,CAAA;IACnB,gCAAmB,CAAA;IACnB,oCAAuB,CAAA;IACvB,8BAAiB,CAAA;IACjB,oCAAuB,CAAA;AACzB,CAAC,EAPW,SAAS,yBAAT,SAAS,QAOpB;AAED,+DAA+D;AAE/D,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,2BAAa,CAAA;IACb,2BAAa,CAAA;IACb,qCAAuB,CAAA;IACvB,iCAAmB,CAAA;AACrB,CAAC,EALW,UAAU,0BAAV,UAAU,QAKrB;AAED,IAAY,YAKX;AALD,WAAY,YAAY;IACtB,2BAAW,CAAA;IACX,iCAAiB,CAAA;IACjB,6BAAa,CAAA;IACb,qCAAqB,CAAA;AACvB,CAAC,EALW,YAAY,4BAAZ,YAAY,QAKvB;AAED,+DAA+D;AAE/D,IAAY,SAMX;AAND,WAAY,SAAS;IACnB,kCAAqB,CAAA;IACrB,0BAAa,CAAA;IACb,8BAAiB,CAAA;IACjB,wBAAW,CAAA;IACX,4CAA+B,CAAA;AACjC,CAAC,EANW,SAAS,yBAAT,SAAS,QAMpB;AAED,+DAA+D;AAE/D,IAAY,QAIX;AAJD,WAAY,QAAQ;IAClB,iCAAqB,CAAA;IACrB,iCAAqB,CAAA;IACrB,yCAA6B,CAAA;AAC/B,CAAC,EAJW,QAAQ,wBAAR,QAAQ,QAInB;AAED,IAAY,aAGX;AAHD,WAAY,aAAa;IACvB,kCAAiB,CAAA;IACjB,gCAAe,CAAA;AACjB,CAAC,EAHW,aAAa,6BAAb,aAAa,QAGxB"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * File validation constants for contract uploads.
3
+ *
4
+ * Centralised allowlist of accepted MIME types, file extensions,
5
+ * and the mapping between them. Used by both the DTO validation
6
+ * layer and the service-level cross-check.
7
+ */
8
+ /** Maximum upload size in bytes (100 MB — matches Supabase bucket limit) */
9
+ export declare const MAX_UPLOAD_SIZE_BYTES = 104857600;
10
+ /** Allowed MIME types for contract document uploads */
11
+ export declare const ALLOWED_MIME_TYPES: readonly ["application/pdf", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "application/msword", "image/png", "image/jpeg", "image/tiff"];
12
+ export type AllowedMimeType = (typeof ALLOWED_MIME_TYPES)[number];
13
+ /**
14
+ * Bidirectional mapping: extension → allowed MIME types.
15
+ */
16
+ export declare const EXTENSION_TO_MIME: Record<string, AllowedMimeType[]>;
17
+ /**
18
+ * Reverse mapping: MIME type → allowed extensions.
19
+ * Built from EXTENSION_TO_MIME for consistency.
20
+ */
21
+ export declare const MIME_TO_EXTENSIONS: Record<AllowedMimeType, string[]>;
22
+ /**
23
+ * Validate that a filename extension is consistent with the declared MIME type.
24
+ *
25
+ * @returns `null` if valid, or a human-readable error string if mismatched.
26
+ */
27
+ export declare function validateExtensionMimeMatch(filename: string, mimeType: string): string | null;
28
+ //# sourceMappingURL=file-validation.constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-validation.constants.d.ts","sourceRoot":"","sources":["../../src/constants/file-validation.constants.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,4EAA4E;AAC5E,eAAO,MAAM,qBAAqB,YAAc,CAAC;AAEjD,uDAAuD;AACvD,eAAO,MAAM,kBAAkB,wKAOrB,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAElE;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAW/D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,EAAE,CAa7D,CAAC;AAEL;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CAmBf"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ /**
3
+ * File validation constants for contract uploads.
4
+ *
5
+ * Centralised allowlist of accepted MIME types, file extensions,
6
+ * and the mapping between them. Used by both the DTO validation
7
+ * layer and the service-level cross-check.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.MIME_TO_EXTENSIONS = exports.EXTENSION_TO_MIME = exports.ALLOWED_MIME_TYPES = exports.MAX_UPLOAD_SIZE_BYTES = void 0;
11
+ exports.validateExtensionMimeMatch = validateExtensionMimeMatch;
12
+ /** Maximum upload size in bytes (100 MB — matches Supabase bucket limit) */
13
+ exports.MAX_UPLOAD_SIZE_BYTES = 104_857_600;
14
+ /** Allowed MIME types for contract document uploads */
15
+ exports.ALLOWED_MIME_TYPES = [
16
+ "application/pdf",
17
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
18
+ "application/msword",
19
+ "image/png",
20
+ "image/jpeg",
21
+ "image/tiff",
22
+ ];
23
+ /**
24
+ * Bidirectional mapping: extension → allowed MIME types.
25
+ */
26
+ exports.EXTENSION_TO_MIME = {
27
+ ".pdf": ["application/pdf"],
28
+ ".docx": [
29
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
30
+ ],
31
+ ".doc": ["application/msword"],
32
+ ".png": ["image/png"],
33
+ ".jpg": ["image/jpeg"],
34
+ ".jpeg": ["image/jpeg"],
35
+ ".tif": ["image/tiff"],
36
+ ".tiff": ["image/tiff"],
37
+ };
38
+ /**
39
+ * Reverse mapping: MIME type → allowed extensions.
40
+ * Built from EXTENSION_TO_MIME for consistency.
41
+ */
42
+ exports.MIME_TO_EXTENSIONS = (() => {
43
+ const map = {};
44
+ for (const mime of exports.ALLOWED_MIME_TYPES) {
45
+ map[mime] = [];
46
+ }
47
+ for (const [ext, mimes] of Object.entries(exports.EXTENSION_TO_MIME)) {
48
+ for (const mime of mimes) {
49
+ if (!map[mime].includes(ext)) {
50
+ map[mime].push(ext);
51
+ }
52
+ }
53
+ }
54
+ return map;
55
+ })();
56
+ /**
57
+ * Validate that a filename extension is consistent with the declared MIME type.
58
+ *
59
+ * @returns `null` if valid, or a human-readable error string if mismatched.
60
+ */
61
+ function validateExtensionMimeMatch(filename, mimeType) {
62
+ const ext = getFileExtension(filename);
63
+ if (!ext) {
64
+ return `Filename "${filename}" has no recognisable file extension`;
65
+ }
66
+ const allowedMimes = exports.EXTENSION_TO_MIME[ext];
67
+ if (!allowedMimes) {
68
+ const supportedExts = Object.keys(exports.EXTENSION_TO_MIME).join(", ");
69
+ return `File extension "${ext}" is not supported. Accepted extensions: ${supportedExts}`;
70
+ }
71
+ if (!allowedMimes.includes(mimeType)) {
72
+ return `File extension "${ext}" does not match MIME type "${mimeType}". Expected MIME type(s) for "${ext}": ${allowedMimes.join(", ")}`;
73
+ }
74
+ return null;
75
+ }
76
+ /** Extract lowercase file extension including the dot, e.g. `.pdf` */
77
+ function getFileExtension(filename) {
78
+ const match = filename.match(/\.[a-zA-Z0-9]+$/);
79
+ return match ? match[0].toLowerCase() : null;
80
+ }
81
+ //# sourceMappingURL=file-validation.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-validation.constants.js","sourceRoot":"","sources":["../../src/constants/file-validation.constants.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAyDH,gEAsBC;AA7ED,4EAA4E;AAC/D,QAAA,qBAAqB,GAAG,WAAW,CAAC;AAEjD,uDAAuD;AAC1C,QAAA,kBAAkB,GAAG;IAChC,iBAAiB;IACjB,yEAAyE;IACzE,oBAAoB;IACpB,WAAW;IACX,YAAY;IACZ,YAAY;CACJ,CAAC;AAIX;;GAEG;AACU,QAAA,iBAAiB,GAAsC;IAClE,MAAM,EAAE,CAAC,iBAAiB,CAAC;IAC3B,OAAO,EAAE;QACP,yEAAyE;KAC1E;IACD,MAAM,EAAE,CAAC,oBAAoB,CAAC;IAC9B,MAAM,EAAE,CAAC,WAAW,CAAC;IACrB,MAAM,EAAE,CAAC,YAAY,CAAC;IACtB,OAAO,EAAE,CAAC,YAAY,CAAC;IACvB,MAAM,EAAE,CAAC,YAAY,CAAC;IACtB,OAAO,EAAE,CAAC,YAAY,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACU,QAAA,kBAAkB,GAAsC,CAAC,GAAG,EAAE;IACzE,MAAM,GAAG,GAA6B,EAAE,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,0BAAkB,EAAE,CAAC;QACtC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACjB,CAAC;IACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,yBAAiB,CAAC,EAAE,CAAC;QAC7D,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAwC,CAAC;AAClD,CAAC,CAAC,EAAE,CAAC;AAEL;;;;GAIG;AACH,SAAgB,0BAA0B,CACxC,QAAgB,EAChB,QAAgB;IAEhB,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAEvC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,aAAa,QAAQ,sCAAsC,CAAC;IACrE,CAAC;IAED,MAAM,YAAY,GAAG,yBAAiB,CAAC,GAAG,CAAC,CAAC;IAE5C,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,yBAAiB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChE,OAAO,mBAAmB,GAAG,4CAA4C,aAAa,EAAE,CAAC;IAC3F,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAA2B,CAAC,EAAE,CAAC;QACxD,OAAO,mBAAmB,GAAG,+BAA+B,QAAQ,iCAAiC,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC1I,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,sEAAsE;AACtE,SAAS,gBAAgB,CAAC,QAAgB;IACxC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAChD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { CRITICAL_PII_TYPES, HIGH_RISK_PII_TYPES, CONTEXTUAL_ENTITIES, STANDARD_PII_TYPES, ALL_MASKABLE_PII_TYPES, APPROVAL_REQUIRED_PII_TYPES, } from "./pii-classifications.constants";
2
+ export type { PiiRiskLevel } from "./pii-classifications.constants";
3
+ export { MAX_UPLOAD_SIZE_BYTES, ALLOWED_MIME_TYPES, EXTENSION_TO_MIME, MIME_TO_EXTENSIONS, validateExtensionMimeMatch, } from "./file-validation.constants";
4
+ export type { AllowedMimeType } from "./file-validation.constants";
5
+ export { ContractStatus, JobType, JobStatus, TaskStatus, TaskPriority, RiskLevel, RuleKind, RuleDirection, } from "./enums";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,EACtB,2BAA2B,GAC5B,MAAM,iCAAiC,CAAC;AACzC,YAAY,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEpE,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EACL,cAAc,EACd,OAAO,EACP,SAAS,EACT,UAAU,EACV,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,aAAa,GACd,MAAM,SAAS,CAAC"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RuleDirection = exports.RuleKind = exports.RiskLevel = exports.TaskPriority = exports.TaskStatus = exports.JobStatus = exports.JobType = exports.ContractStatus = exports.validateExtensionMimeMatch = exports.MIME_TO_EXTENSIONS = exports.EXTENSION_TO_MIME = exports.ALLOWED_MIME_TYPES = exports.MAX_UPLOAD_SIZE_BYTES = exports.APPROVAL_REQUIRED_PII_TYPES = exports.ALL_MASKABLE_PII_TYPES = exports.STANDARD_PII_TYPES = exports.CONTEXTUAL_ENTITIES = exports.HIGH_RISK_PII_TYPES = exports.CRITICAL_PII_TYPES = void 0;
4
+ var pii_classifications_constants_1 = require("./pii-classifications.constants");
5
+ Object.defineProperty(exports, "CRITICAL_PII_TYPES", { enumerable: true, get: function () { return pii_classifications_constants_1.CRITICAL_PII_TYPES; } });
6
+ Object.defineProperty(exports, "HIGH_RISK_PII_TYPES", { enumerable: true, get: function () { return pii_classifications_constants_1.HIGH_RISK_PII_TYPES; } });
7
+ Object.defineProperty(exports, "CONTEXTUAL_ENTITIES", { enumerable: true, get: function () { return pii_classifications_constants_1.CONTEXTUAL_ENTITIES; } });
8
+ Object.defineProperty(exports, "STANDARD_PII_TYPES", { enumerable: true, get: function () { return pii_classifications_constants_1.STANDARD_PII_TYPES; } });
9
+ Object.defineProperty(exports, "ALL_MASKABLE_PII_TYPES", { enumerable: true, get: function () { return pii_classifications_constants_1.ALL_MASKABLE_PII_TYPES; } });
10
+ Object.defineProperty(exports, "APPROVAL_REQUIRED_PII_TYPES", { enumerable: true, get: function () { return pii_classifications_constants_1.APPROVAL_REQUIRED_PII_TYPES; } });
11
+ var file_validation_constants_1 = require("./file-validation.constants");
12
+ Object.defineProperty(exports, "MAX_UPLOAD_SIZE_BYTES", { enumerable: true, get: function () { return file_validation_constants_1.MAX_UPLOAD_SIZE_BYTES; } });
13
+ Object.defineProperty(exports, "ALLOWED_MIME_TYPES", { enumerable: true, get: function () { return file_validation_constants_1.ALLOWED_MIME_TYPES; } });
14
+ Object.defineProperty(exports, "EXTENSION_TO_MIME", { enumerable: true, get: function () { return file_validation_constants_1.EXTENSION_TO_MIME; } });
15
+ Object.defineProperty(exports, "MIME_TO_EXTENSIONS", { enumerable: true, get: function () { return file_validation_constants_1.MIME_TO_EXTENSIONS; } });
16
+ Object.defineProperty(exports, "validateExtensionMimeMatch", { enumerable: true, get: function () { return file_validation_constants_1.validateExtensionMimeMatch; } });
17
+ var enums_1 = require("./enums");
18
+ Object.defineProperty(exports, "ContractStatus", { enumerable: true, get: function () { return enums_1.ContractStatus; } });
19
+ Object.defineProperty(exports, "JobType", { enumerable: true, get: function () { return enums_1.JobType; } });
20
+ Object.defineProperty(exports, "JobStatus", { enumerable: true, get: function () { return enums_1.JobStatus; } });
21
+ Object.defineProperty(exports, "TaskStatus", { enumerable: true, get: function () { return enums_1.TaskStatus; } });
22
+ Object.defineProperty(exports, "TaskPriority", { enumerable: true, get: function () { return enums_1.TaskPriority; } });
23
+ Object.defineProperty(exports, "RiskLevel", { enumerable: true, get: function () { return enums_1.RiskLevel; } });
24
+ Object.defineProperty(exports, "RuleKind", { enumerable: true, get: function () { return enums_1.RuleKind; } });
25
+ Object.defineProperty(exports, "RuleDirection", { enumerable: true, get: function () { return enums_1.RuleDirection; } });
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constants/index.ts"],"names":[],"mappings":";;;AAAA,iFAOyC;AANvC,mIAAA,kBAAkB,OAAA;AAClB,oIAAA,mBAAmB,OAAA;AACnB,oIAAA,mBAAmB,OAAA;AACnB,mIAAA,kBAAkB,OAAA;AAClB,uIAAA,sBAAsB,OAAA;AACtB,4IAAA,2BAA2B,OAAA;AAI7B,yEAMqC;AALnC,kIAAA,qBAAqB,OAAA;AACrB,+HAAA,kBAAkB,OAAA;AAClB,8HAAA,iBAAiB,OAAA;AACjB,+HAAA,kBAAkB,OAAA;AAClB,uIAAA,0BAA0B,OAAA;AAI5B,iCASiB;AARf,uGAAA,cAAc,OAAA;AACd,gGAAA,OAAO,OAAA;AACP,kGAAA,SAAS,OAAA;AACT,mGAAA,UAAU,OAAA;AACV,qGAAA,YAAY,OAAA;AACZ,kGAAA,SAAS,OAAA;AACT,iGAAA,QAAQ,OAAA;AACR,sGAAA,aAAa,OAAA"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * PII Entity Classification Constants
3
+ *
4
+ * Single source of truth for PII entity classification across all APIs.
5
+ * Based on Microsoft Presidio entity types.
6
+ *
7
+ * Classification levels:
8
+ * - **Critical**: Immediate security/financial risk — requires user approval before processing
9
+ * - **High-risk**: Sensitive identity documents — requires user approval before processing
10
+ * - **Standard**: Common PII — always mask but doesn't require explicit approval
11
+ * - **Contextual**: Not truly PII, needed for contract analysis — DO NOT MASK
12
+ */
13
+ /** Critical PII: Immediate security/financial risk — requires user approval */
14
+ export declare const CRITICAL_PII_TYPES: readonly string[];
15
+ /** High-risk PII: Sensitive identity documents — requires user approval */
16
+ export declare const HIGH_RISK_PII_TYPES: readonly string[];
17
+ /** Contextual entities: Not truly PII, needed for contract analysis — DO NOT MASK */
18
+ export declare const CONTEXTUAL_ENTITIES: readonly string[];
19
+ /** Standard PII: Always mask but doesn't require explicit approval */
20
+ export declare const STANDARD_PII_TYPES: readonly string[];
21
+ /** All PII types that should be masked (critical + high-risk + standard) */
22
+ export declare const ALL_MASKABLE_PII_TYPES: readonly string[];
23
+ /** PII types that require user approval before processing (critical + high-risk) */
24
+ export declare const APPROVAL_REQUIRED_PII_TYPES: readonly string[];
25
+ /** PII risk level classification for detected entities */
26
+ export type PiiRiskLevel = "critical" | "high" | "medium" | "low";
27
+ //# sourceMappingURL=pii-classifications.constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pii-classifications.constants.d.ts","sourceRoot":"","sources":["../../src/constants/pii-classifications.constants.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,+EAA+E;AAC/E,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAMtC,CAAC;AAEX,2EAA2E;AAC3E,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAmBvC,CAAC;AAEX,qFAAqF;AACrF,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAIvC,CAAC;AAEX,sEAAsE;AACtE,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAItC,CAAC;AAEX,4EAA4E;AAC5E,eAAO,MAAM,sBAAsB,EAAE,SAAS,MAAM,EAI1C,CAAC;AAEX,oFAAoF;AACpF,eAAO,MAAM,2BAA2B,EAAE,SAAS,MAAM,EAG/C,CAAC;AAEX,0DAA0D;AAC1D,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ /**
3
+ * PII Entity Classification Constants
4
+ *
5
+ * Single source of truth for PII entity classification across all APIs.
6
+ * Based on Microsoft Presidio entity types.
7
+ *
8
+ * Classification levels:
9
+ * - **Critical**: Immediate security/financial risk — requires user approval before processing
10
+ * - **High-risk**: Sensitive identity documents — requires user approval before processing
11
+ * - **Standard**: Common PII — always mask but doesn't require explicit approval
12
+ * - **Contextual**: Not truly PII, needed for contract analysis — DO NOT MASK
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.APPROVAL_REQUIRED_PII_TYPES = exports.ALL_MASKABLE_PII_TYPES = exports.STANDARD_PII_TYPES = exports.CONTEXTUAL_ENTITIES = exports.HIGH_RISK_PII_TYPES = exports.CRITICAL_PII_TYPES = void 0;
16
+ /** Critical PII: Immediate security/financial risk — requires user approval */
17
+ exports.CRITICAL_PII_TYPES = [
18
+ "CREDIT_CARD",
19
+ "US_SSN",
20
+ "US_BANK_NUMBER",
21
+ "IBAN_CODE",
22
+ "CRYPTO",
23
+ ];
24
+ /** High-risk PII: Sensitive identity documents — requires user approval */
25
+ exports.HIGH_RISK_PII_TYPES = [
26
+ "PASSWORD",
27
+ "US_PASSPORT",
28
+ "UK_PASSPORT",
29
+ "EU_PASSPORT",
30
+ "UK_NHS",
31
+ "MEDICAL_LICENSE",
32
+ "IP_ADDRESS",
33
+ "US_DRIVER_LICENSE",
34
+ "EU_DRIVER_LICENSE",
35
+ "SG_NRIC_FIN",
36
+ "AU_TFN",
37
+ "AU_MEDICARE",
38
+ "AU_ABN",
39
+ "AU_ACN",
40
+ "ES_NIF",
41
+ "IT_FISCAL_CODE",
42
+ "DE_TAX_ID",
43
+ "FR_NIR",
44
+ ];
45
+ /** Contextual entities: Not truly PII, needed for contract analysis — DO NOT MASK */
46
+ exports.CONTEXTUAL_ENTITIES = [
47
+ "DATE_TIME",
48
+ "LOCATION",
49
+ "NRP",
50
+ ];
51
+ /** Standard PII: Always mask but doesn't require explicit approval */
52
+ exports.STANDARD_PII_TYPES = [
53
+ "PERSON",
54
+ "EMAIL_ADDRESS",
55
+ "PHONE_NUMBER",
56
+ ];
57
+ /** All PII types that should be masked (critical + high-risk + standard) */
58
+ exports.ALL_MASKABLE_PII_TYPES = [
59
+ ...exports.CRITICAL_PII_TYPES,
60
+ ...exports.HIGH_RISK_PII_TYPES,
61
+ ...exports.STANDARD_PII_TYPES,
62
+ ];
63
+ /** PII types that require user approval before processing (critical + high-risk) */
64
+ exports.APPROVAL_REQUIRED_PII_TYPES = [
65
+ ...exports.CRITICAL_PII_TYPES,
66
+ ...exports.HIGH_RISK_PII_TYPES,
67
+ ];
68
+ //# sourceMappingURL=pii-classifications.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pii-classifications.constants.js","sourceRoot":"","sources":["../../src/constants/pii-classifications.constants.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAEH,+EAA+E;AAClE,QAAA,kBAAkB,GAAsB;IACnD,aAAa;IACb,QAAQ;IACR,gBAAgB;IAChB,WAAW;IACX,QAAQ;CACA,CAAC;AAEX,2EAA2E;AAC9D,QAAA,mBAAmB,GAAsB;IACpD,UAAU;IACV,aAAa;IACb,aAAa;IACb,aAAa;IACb,QAAQ;IACR,iBAAiB;IACjB,YAAY;IACZ,mBAAmB;IACnB,mBAAmB;IACnB,aAAa;IACb,QAAQ;IACR,aAAa;IACb,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,gBAAgB;IAChB,WAAW;IACX,QAAQ;CACA,CAAC;AAEX,qFAAqF;AACxE,QAAA,mBAAmB,GAAsB;IACpD,WAAW;IACX,UAAU;IACV,KAAK;CACG,CAAC;AAEX,sEAAsE;AACzD,QAAA,kBAAkB,GAAsB;IACnD,QAAQ;IACR,eAAe;IACf,cAAc;CACN,CAAC;AAEX,4EAA4E;AAC/D,QAAA,sBAAsB,GAAsB;IACvD,GAAG,0BAAkB;IACrB,GAAG,2BAAmB;IACtB,GAAG,0BAAkB;CACb,CAAC;AAEX,oFAAoF;AACvE,QAAA,2BAA2B,GAAsB;IAC5D,GAAG,0BAAkB;IACrB,GAAG,2BAAmB;CACd,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare abstract class BaseEntity {
2
+ id: string;
3
+ createdAt: Date;
4
+ updatedAt: Date;
5
+ }
6
+ //# sourceMappingURL=base.entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.entity.d.ts","sourceRoot":"","sources":["../../src/database/base.entity.ts"],"names":[],"mappings":"AAMA,8BAAsB,UAAU;IAE9B,EAAE,EAAE,MAAM,CAAC;IAGX,SAAS,EAAE,IAAI,CAAC;IAGhB,SAAS,EAAE,IAAI,CAAC;CACjB"}
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BaseEntity = void 0;
13
+ const typeorm_1 = require("typeorm");
14
+ class BaseEntity {
15
+ id;
16
+ createdAt;
17
+ updatedAt;
18
+ }
19
+ exports.BaseEntity = BaseEntity;
20
+ __decorate([
21
+ (0, typeorm_1.PrimaryGeneratedColumn)("uuid"),
22
+ __metadata("design:type", String)
23
+ ], BaseEntity.prototype, "id", void 0);
24
+ __decorate([
25
+ (0, typeorm_1.CreateDateColumn)({ name: "created_at", type: "timestamptz" }),
26
+ __metadata("design:type", Date)
27
+ ], BaseEntity.prototype, "createdAt", void 0);
28
+ __decorate([
29
+ (0, typeorm_1.UpdateDateColumn)({ name: "updated_at", type: "timestamptz" }),
30
+ __metadata("design:type", Date)
31
+ ], BaseEntity.prototype, "updatedAt", void 0);
32
+ //# sourceMappingURL=base.entity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.entity.js","sourceRoot":"","sources":["../../src/database/base.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAIiB;AAEjB,MAAsB,UAAU;IAE9B,EAAE,CAAS;IAGX,SAAS,CAAO;IAGhB,SAAS,CAAO;CACjB;AATD,gCASC;AAPC;IADC,IAAA,gCAAsB,EAAC,MAAM,CAAC;;sCACpB;AAGX;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;8BACnD,IAAI;6CAAC;AAGhB;IADC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;8BACnD,IAAI;6CAAC"}
@@ -0,0 +1,32 @@
1
+ import { DynamicModule } from "@nestjs/common";
2
+ export interface DatabaseModuleOptions {
3
+ /**
4
+ * Automatically load entities registered via `TypeOrmModule.forFeature()`.
5
+ * When true, entities don't need to be listed explicitly.
6
+ * @default true
7
+ */
8
+ autoLoadEntities?: boolean;
9
+ }
10
+ /**
11
+ * Database Module
12
+ *
13
+ * Provides a reusable TypeORM/PostgreSQL module that reads connection
14
+ * parameters from the `'database'` config namespace.
15
+ *
16
+ * Uses `autoLoadEntities: true` by default — entities are picked up
17
+ * automatically when registered via `TypeOrmModule.forFeature()` in
18
+ * their feature modules.
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * // In your root module
23
+ * @Module({
24
+ * imports: [DatabaseModule.register()],
25
+ * })
26
+ * export class MainModule {}
27
+ * ```
28
+ */
29
+ export declare class DatabaseModule {
30
+ static register(options?: DatabaseModuleOptions): DynamicModule;
31
+ }
32
+ //# sourceMappingURL=database.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.module.d.ts","sourceRoot":"","sources":["../../src/database/database.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAI/D,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAEa,cAAc;IACzB,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,aAAa;CAmChE"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var DatabaseModule_1;
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.DatabaseModule = void 0;
11
+ const common_1 = require("@nestjs/common");
12
+ const config_1 = require("@nestjs/config");
13
+ const typeorm_1 = require("@nestjs/typeorm");
14
+ /**
15
+ * Database Module
16
+ *
17
+ * Provides a reusable TypeORM/PostgreSQL module that reads connection
18
+ * parameters from the `'database'` config namespace.
19
+ *
20
+ * Uses `autoLoadEntities: true` by default — entities are picked up
21
+ * automatically when registered via `TypeOrmModule.forFeature()` in
22
+ * their feature modules.
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * // In your root module
27
+ * @Module({
28
+ * imports: [DatabaseModule.register()],
29
+ * })
30
+ * export class MainModule {}
31
+ * ```
32
+ */
33
+ let DatabaseModule = DatabaseModule_1 = class DatabaseModule {
34
+ static register(options) {
35
+ return {
36
+ module: DatabaseModule_1,
37
+ global: true,
38
+ imports: [
39
+ typeorm_1.TypeOrmModule.forRootAsync({
40
+ inject: [config_1.ConfigService],
41
+ useFactory: (configService) => ({
42
+ type: "postgres",
43
+ host: configService.get("database.host"),
44
+ port: configService.get("database.port"),
45
+ username: configService.get("database.username"),
46
+ password: configService.get("database.password"),
47
+ database: configService.get("database.database"),
48
+ synchronize: false,
49
+ logging: configService.get("database.logging") || false,
50
+ ssl: configService.get("database.ssl") || false,
51
+ autoLoadEntities: options?.autoLoadEntities ?? true,
52
+ extra: {
53
+ max: configService.get("database.poolMax", 20),
54
+ idleTimeoutMillis: configService.get("database.poolIdleTimeout", 30000),
55
+ connectionTimeoutMillis: configService.get("database.poolConnectionTimeout", 5000),
56
+ },
57
+ }),
58
+ }),
59
+ ],
60
+ exports: [typeorm_1.TypeOrmModule],
61
+ };
62
+ }
63
+ };
64
+ exports.DatabaseModule = DatabaseModule;
65
+ exports.DatabaseModule = DatabaseModule = DatabaseModule_1 = __decorate([
66
+ (0, common_1.Global)(),
67
+ (0, common_1.Module)({})
68
+ ], DatabaseModule);
69
+ //# sourceMappingURL=database.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"database.module.js","sourceRoot":"","sources":["../../src/database/database.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAA+D;AAC/D,2CAA+C;AAC/C,6CAAgD;AAWhD;;;;;;;;;;;;;;;;;;GAkBG;AAGI,IAAM,cAAc,sBAApB,MAAM,cAAc;IACzB,MAAM,CAAC,QAAQ,CAAC,OAA+B;QAC7C,OAAO;YACL,MAAM,EAAE,gBAAc;YACtB,MAAM,EAAE,IAAI;YACZ,OAAO,EAAE;gBACP,uBAAa,CAAC,YAAY,CAAC;oBACzB,MAAM,EAAE,CAAC,sBAAa,CAAC;oBACvB,UAAU,EAAE,CAAC,aAA4B,EAAE,EAAE,CAAC,CAAC;wBAC7C,IAAI,EAAE,UAAmB;wBACzB,IAAI,EAAE,aAAa,CAAC,GAAG,CAAS,eAAe,CAAC;wBAChD,IAAI,EAAE,aAAa,CAAC,GAAG,CAAS,eAAe,CAAC;wBAChD,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAS,mBAAmB,CAAC;wBACxD,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAS,mBAAmB,CAAC;wBACxD,QAAQ,EAAE,aAAa,CAAC,GAAG,CAAS,mBAAmB,CAAC;wBACxD,WAAW,EAAE,KAAK;wBAClB,OAAO,EAAE,aAAa,CAAC,GAAG,CAAU,kBAAkB,CAAC,IAAI,KAAK;wBAChE,GAAG,EAAE,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,KAAK;wBAC/C,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,IAAI,IAAI;wBACnD,KAAK,EAAE;4BACL,GAAG,EAAE,aAAa,CAAC,GAAG,CAAS,kBAAkB,EAAE,EAAE,CAAC;4BACtD,iBAAiB,EAAE,aAAa,CAAC,GAAG,CAClC,0BAA0B,EAC1B,KAAK,CACN;4BACD,uBAAuB,EAAE,aAAa,CAAC,GAAG,CACxC,gCAAgC,EAChC,IAAI,CACL;yBACF;qBACF,CAAC;iBACH,CAAC;aACH;YACD,OAAO,EAAE,CAAC,uBAAa,CAAC;SACzB,CAAC;IACJ,CAAC;CACF,CAAA;AApCY,wCAAc;yBAAd,cAAc;IAF1B,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,cAAc,CAoC1B"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Abstract base AuditLog entity matching `audit_log` in database.sql.
3
+ *
4
+ * Immutable audit log (append-only by convention).
5
+ * The `updated_at` column exists in the schema but is not expected to change.
6
+ */
7
+ export declare abstract class BaseAuditLogEntity {
8
+ id: string;
9
+ organisationId: string | null;
10
+ userId: string | null;
11
+ contractId: string | null;
12
+ jobId: string | null;
13
+ action: string;
14
+ details: Record<string, unknown>;
15
+ durationMs: number | null;
16
+ status: string | null;
17
+ errorMessage: string | null;
18
+ createdAt: Date;
19
+ updatedAt: Date;
20
+ }
21
+ //# sourceMappingURL=base-audit-log.entity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base-audit-log.entity.d.ts","sourceRoot":"","sources":["../../../src/database/entities/base-audit-log.entity.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,8BAKsB,kBAAkB;IAEtC,EAAE,EAAE,MAAM,CAAC;IAGX,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAG9B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAGtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAG1B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAGrB,MAAM,EAAE,MAAM,CAAC;IAGf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAGjC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAG1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAGtB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAG5B,SAAS,EAAE,IAAI,CAAC;IAGhB,SAAS,EAAE,IAAI,CAAC;CACjB"}