@persei/perseed-api 5.0.20 → 5.0.22

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 (166) hide show
  1. package/dist/client.cjs +773 -37
  2. package/dist/client.cjs.map +1 -1
  3. package/dist/client.mjs +773 -37
  4. package/dist/client.mjs.map +1 -1
  5. package/dist/{lib-CDM5aEJG.cjs → dates.helper-CDM5aEJG.cjs} +1 -1
  6. package/dist/dates.helper-CDM5aEJG.cjs.map +1 -0
  7. package/dist/{lib-XRCJ_UAQ.js → dates.helper-XRCJ_UAQ.js} +1 -1
  8. package/dist/dates.helper-XRCJ_UAQ.js.map +1 -0
  9. package/dist/ecosystem-action-system.cjs +124 -34
  10. package/dist/ecosystem-action-system.cjs.map +1 -1
  11. package/dist/ecosystem-action-system.mjs +124 -34
  12. package/dist/ecosystem-action-system.mjs.map +1 -1
  13. package/dist/ecosystem-container-widget.cjs +6 -6
  14. package/dist/ecosystem-container-widget.cjs.map +1 -1
  15. package/dist/ecosystem-container-widget.mjs +1 -1
  16. package/dist/global-dates.cjs +9 -3
  17. package/dist/global-dates.cjs.map +1 -1
  18. package/dist/global-dates.mjs +7 -1
  19. package/dist/global-dates.mjs.map +1 -1
  20. package/dist/lib/src/generated/client.d.ts +5815 -839
  21. package/dist/lib/src/generated/client.d.ts.map +1 -1
  22. package/dist/src/Services/ProcessLogService.d.ts +1 -1
  23. package/dist/src/Services/ProcessLogService.d.ts.map +1 -1
  24. package/dist/src/Services/QueryService.d.ts +24 -1
  25. package/dist/src/Services/QueryService.d.ts.map +1 -1
  26. package/dist/src/Services/RedisQueueService.d.ts.map +1 -1
  27. package/dist/src/Services/TriggerService.d.ts.map +1 -1
  28. package/dist/src/config/apiPublicKey.d.ts +19 -4
  29. package/dist/src/config/apiPublicKey.d.ts.map +1 -1
  30. package/dist/src/config/apiPublicKey.test.d.ts +2 -0
  31. package/dist/src/config/apiPublicKey.test.d.ts.map +1 -0
  32. package/dist/src/constants/SeedPrivilege.d.ts +1 -0
  33. package/dist/src/constants/SeedPrivilege.d.ts.map +1 -1
  34. package/dist/src/controllers/IntrospectionController.d.ts.map +1 -1
  35. package/dist/src/controllers/UserController.d.ts.map +1 -1
  36. package/dist/src/models/ecosystem/NotificationConfiguration.d.ts +1 -1
  37. package/dist/src/models/ecosystem/NotificationConfiguration.d.ts.map +1 -1
  38. package/dist/src/models/ecosystem/User.d.ts +17 -0
  39. package/dist/src/models/ecosystem/User.d.ts.map +1 -1
  40. package/dist/src/models/ecosystem/User.getProjectUser.test.d.ts +2 -0
  41. package/dist/src/models/ecosystem/User.getProjectUser.test.d.ts.map +1 -0
  42. package/dist/src/models/perseed/PerseedEcosystem.d.ts +2 -0
  43. package/dist/src/models/perseed/PerseedEcosystem.d.ts.map +1 -1
  44. package/dist/src/schemas/api_action/ApiActionTypes.d.ts +11 -0
  45. package/dist/src/schemas/api_action/ApiActionTypes.d.ts.map +1 -1
  46. package/dist/src/schemas/container_widget/create_widget_payload.schema.json +1 -1
  47. package/dist/src/schemas/container_widget/update_widget_payload.schema.json +1 -1
  48. package/dist/src/schemas/container_widget/widgetTypes/PatientListProps.d.ts +2 -1
  49. package/dist/src/schemas/container_widget/widgetTypes/PatientListProps.d.ts.map +1 -1
  50. package/dist/src/schemas/index.d.ts +1 -0
  51. package/dist/src/schemas/index.d.ts.map +1 -1
  52. package/dist/src/schemas/project_user/index.d.ts +2 -0
  53. package/dist/src/schemas/project_user/index.d.ts.map +1 -0
  54. package/dist/src/schemas/project_user/types.d.ts +44 -0
  55. package/dist/src/schemas/project_user/types.d.ts.map +1 -0
  56. package/dist/src/test/e2e-permissions.d.ts +32 -3
  57. package/dist/src/test/e2e-permissions.d.ts.map +1 -1
  58. package/dist/src/test/test-helpers.d.ts +12 -0
  59. package/dist/src/test/test-helpers.d.ts.map +1 -1
  60. package/dist/src/v2/modules/ecosystem/action-system/action-system.controller/manual-trigger.controller.d.ts.map +1 -1
  61. package/dist/src/v2/modules/ecosystem/action-system/action-system.helper/action-system.helper.d.ts +27 -5
  62. package/dist/src/v2/modules/ecosystem/action-system/action-system.helper/action-system.helper.d.ts.map +1 -1
  63. package/dist/src/v2/modules/ecosystem/action-system/action-system.helper/index.d.ts +1 -0
  64. package/dist/src/v2/modules/ecosystem/action-system/action-system.helper/index.d.ts.map +1 -1
  65. package/dist/src/v2/modules/ecosystem/action-system/action-system.helper/manual-trigger.helper.d.ts +13 -0
  66. package/dist/src/v2/modules/ecosystem/action-system/action-system.helper/manual-trigger.helper.d.ts.map +1 -0
  67. package/dist/src/v2/modules/ecosystem/action-system/action-system.helper/manual-trigger.helper.test.d.ts +2 -0
  68. package/dist/src/v2/modules/ecosystem/action-system/action-system.helper/manual-trigger.helper.test.d.ts.map +1 -0
  69. package/dist/src/v2/modules/ecosystem/action-system/action-system.model.d.ts +7 -3
  70. package/dist/src/v2/modules/ecosystem/action-system/action-system.model.d.ts.map +1 -1
  71. package/dist/src/v2/modules/ecosystem/action-system/action-system.model.test.d.ts +2 -0
  72. package/dist/src/v2/modules/ecosystem/action-system/action-system.model.test.d.ts.map +1 -0
  73. package/dist/src/v2/modules/ecosystem/action-system/action-system.schema.d.ts +234 -58
  74. package/dist/src/v2/modules/ecosystem/action-system/action-system.schema.d.ts.map +1 -1
  75. package/dist/src/v2/modules/ecosystem/action-system/action-system.service/automatic-trigger.service.d.ts +14 -6
  76. package/dist/src/v2/modules/ecosystem/action-system/action-system.service/automatic-trigger.service.d.ts.map +1 -1
  77. package/dist/src/v2/modules/ecosystem/action-system/action-system.service/manual-trigger-engine.service.d.ts +6 -0
  78. package/dist/src/v2/modules/ecosystem/action-system/action-system.service/manual-trigger-engine.service.d.ts.map +1 -1
  79. package/dist/src/v2/modules/ecosystem/action-system/action-system.service/manual-trigger.service.d.ts +60 -10
  80. package/dist/src/v2/modules/ecosystem/action-system/action-system.service/manual-trigger.service.d.ts.map +1 -1
  81. package/dist/src/v2/modules/ecosystem/action-system/action-system.service/trigger-engine.service.d.ts +6 -0
  82. package/dist/src/v2/modules/ecosystem/action-system/action-system.service/trigger-engine.service.d.ts.map +1 -1
  83. package/dist/src/v2/modules/ecosystem/alert/alert.controller.d.ts +12 -0
  84. package/dist/src/v2/modules/ecosystem/alert/alert.controller.d.ts.map +1 -0
  85. package/dist/src/v2/modules/ecosystem/alert/alert.controller.e2e.d.ts +2 -0
  86. package/dist/src/v2/modules/ecosystem/alert/alert.controller.e2e.d.ts.map +1 -0
  87. package/dist/src/v2/modules/ecosystem/alert/alert.controller.test.d.ts +2 -0
  88. package/dist/src/v2/modules/ecosystem/alert/alert.controller.test.d.ts.map +1 -0
  89. package/dist/src/v2/modules/ecosystem/alert/alert.helper.d.ts +55 -0
  90. package/dist/src/v2/modules/ecosystem/alert/alert.helper.d.ts.map +1 -0
  91. package/dist/src/v2/modules/ecosystem/alert/alert.helper.test.d.ts +2 -0
  92. package/dist/src/v2/modules/ecosystem/alert/alert.helper.test.d.ts.map +1 -0
  93. package/dist/src/v2/modules/ecosystem/alert/alert.model.d.ts +61 -0
  94. package/dist/src/v2/modules/ecosystem/alert/alert.model.d.ts.map +1 -0
  95. package/dist/src/v2/modules/ecosystem/alert/alert.model.test.d.ts +2 -0
  96. package/dist/src/v2/modules/ecosystem/alert/alert.model.test.d.ts.map +1 -0
  97. package/dist/src/v2/modules/ecosystem/alert/alert.schema.d.ts +134 -0
  98. package/dist/src/v2/modules/ecosystem/alert/alert.schema.d.ts.map +1 -0
  99. package/dist/src/v2/modules/ecosystem/alert/alert.service.d.ts +73 -0
  100. package/dist/src/v2/modules/ecosystem/alert/alert.service.d.ts.map +1 -0
  101. package/dist/src/v2/modules/ecosystem/alert/alert.service.test.d.ts +2 -0
  102. package/dist/src/v2/modules/ecosystem/alert/alert.service.test.d.ts.map +1 -0
  103. package/dist/src/v2/modules/ecosystem/alert/index.d.ts +7 -0
  104. package/dist/src/v2/modules/ecosystem/alert/index.d.ts.map +1 -0
  105. package/dist/src/v2/modules/ecosystem/alert-type/alert-type.controller.d.ts +6 -0
  106. package/dist/src/v2/modules/ecosystem/alert-type/alert-type.controller.d.ts.map +1 -0
  107. package/dist/src/v2/modules/ecosystem/alert-type/alert-type.controller.e2e.d.ts +2 -0
  108. package/dist/src/v2/modules/ecosystem/alert-type/alert-type.controller.e2e.d.ts.map +1 -0
  109. package/dist/src/v2/modules/ecosystem/alert-type/alert-type.controller.test.d.ts +2 -0
  110. package/dist/src/v2/modules/ecosystem/alert-type/alert-type.controller.test.d.ts.map +1 -0
  111. package/dist/src/v2/modules/ecosystem/alert-type/alert-type.helper.d.ts +14 -0
  112. package/dist/src/v2/modules/ecosystem/alert-type/alert-type.helper.d.ts.map +1 -0
  113. package/dist/src/v2/modules/ecosystem/alert-type/alert-type.helper.test.d.ts +2 -0
  114. package/dist/src/v2/modules/ecosystem/alert-type/alert-type.helper.test.d.ts.map +1 -0
  115. package/dist/src/v2/modules/ecosystem/alert-type/alert-type.model.d.ts +18 -0
  116. package/dist/src/v2/modules/ecosystem/alert-type/alert-type.model.d.ts.map +1 -0
  117. package/dist/src/v2/modules/ecosystem/alert-type/alert-type.schema.d.ts +29 -0
  118. package/dist/src/v2/modules/ecosystem/alert-type/alert-type.schema.d.ts.map +1 -0
  119. package/dist/src/v2/modules/ecosystem/alert-type/alert-type.service.d.ts +38 -0
  120. package/dist/src/v2/modules/ecosystem/alert-type/alert-type.service.d.ts.map +1 -0
  121. package/dist/src/v2/modules/ecosystem/alert-type/alert-type.service.test.d.ts +2 -0
  122. package/dist/src/v2/modules/ecosystem/alert-type/alert-type.service.test.d.ts.map +1 -0
  123. package/dist/src/v2/modules/ecosystem/alert-type/index.d.ts +6 -0
  124. package/dist/src/v2/modules/ecosystem/alert-type/index.d.ts.map +1 -0
  125. package/dist/src/v2/modules/ecosystem/process-log/index.d.ts +3 -0
  126. package/dist/src/v2/modules/ecosystem/process-log/index.d.ts.map +1 -0
  127. package/dist/src/{models/ecosystem/ProcessLog.d.ts → v2/modules/ecosystem/process-log/process-log.model.d.ts} +5 -5
  128. package/dist/src/v2/modules/ecosystem/process-log/process-log.model.d.ts.map +1 -0
  129. package/dist/src/v2/modules/ecosystem/process-log/process-log.model.test.d.ts +2 -0
  130. package/dist/src/v2/modules/ecosystem/process-log/process-log.model.test.d.ts.map +1 -0
  131. package/dist/src/v2/modules/ecosystem/process-log/process-log.service.d.ts +20 -0
  132. package/dist/src/v2/modules/ecosystem/process-log/process-log.service.d.ts.map +1 -0
  133. package/dist/src/v2/modules/ecosystem/process-log/process-log.service.e2e.d.ts +2 -0
  134. package/dist/src/v2/modules/ecosystem/process-log/process-log.service.e2e.d.ts.map +1 -0
  135. package/dist/src/v2/modules/ecosystem/process-log/process-log.service.test.d.ts +2 -0
  136. package/dist/src/v2/modules/ecosystem/process-log/process-log.service.test.d.ts.map +1 -0
  137. package/dist/src/v2/modules/global/auth-token/auth-token.controller.d.ts.map +1 -1
  138. package/dist/src/v2/modules/global/dates/dates.helper.d.ts.map +1 -1
  139. package/dist/src/v2/modules/global/dates/dates.schema.d.ts +39 -0
  140. package/dist/src/v2/modules/global/dates/dates.schema.d.ts.map +1 -1
  141. package/dist/src/v2/modules/global/e2e-operation/e2e-operation.controller.d.ts.map +1 -1
  142. package/dist/src/v2/modules/global/e2e-operation/e2e-operation.service.d.ts.map +1 -1
  143. package/dist/src/v2/modules/global/permissions/index.d.ts +2 -0
  144. package/dist/src/v2/modules/global/permissions/index.d.ts.map +1 -0
  145. package/dist/src/v2/modules/global/permissions/permissions.helper.d.ts +32 -0
  146. package/dist/src/v2/modules/global/permissions/permissions.helper.d.ts.map +1 -0
  147. package/dist/src/v2/modules/global/permissions/permissions.helper.test.d.ts +2 -0
  148. package/dist/src/v2/modules/global/permissions/permissions.helper.test.d.ts.map +1 -0
  149. package/dist/src/v2/routes/v2/ecosystem/_ecosystemName/alert/index.d.ts +3 -0
  150. package/dist/src/v2/routes/v2/ecosystem/_ecosystemName/alert/index.d.ts.map +1 -0
  151. package/dist/src/v2/routes/v2/ecosystem/_ecosystemName/alert-type/index.d.ts +3 -0
  152. package/dist/src/v2/routes/v2/ecosystem/_ecosystemName/alert-type/index.d.ts.map +1 -0
  153. package/dist/src/v2/routes/v2/ecosystem/_ecosystemName/project/_projectName/alert/index.d.ts +3 -0
  154. package/dist/src/v2/routes/v2/ecosystem/_ecosystemName/project/_projectName/alert/index.d.ts.map +1 -0
  155. package/dist/v1/perseed-api.cjs +2 -0
  156. package/dist/v1/perseed-api.cjs.map +1 -1
  157. package/dist/v1/perseed-api.mjs +2 -0
  158. package/dist/v1/perseed-api.mjs.map +1 -1
  159. package/package.json +1 -1
  160. package/dist/lib-CDM5aEJG.cjs.map +0 -1
  161. package/dist/lib-XRCJ_UAQ.js.map +0 -1
  162. package/dist/src/models/ecosystem/ProcessLog.d.ts.map +0 -1
  163. package/dist/src/models/ecosystem/ProcessLog.test.d.ts +0 -2
  164. package/dist/src/models/ecosystem/ProcessLog.test.d.ts.map +0 -1
  165. package/dist/src/test/global-setup.d.ts +0 -2
  166. package/dist/src/test/global-setup.d.ts.map +0 -1
@@ -0,0 +1,134 @@
1
+ import { Type, Static } from 'typebox';
2
+ export declare const AlertStatus: {
3
+ readonly ACTIVE: "active";
4
+ readonly RESOLVED: "resolved";
5
+ };
6
+ export declare const alertStatusSchema: Type.TEnum<("active" | "resolved")[]>;
7
+ export type AlertStatus = Static<typeof alertStatusSchema>;
8
+ export declare const AlertSeverity: {
9
+ readonly INFO: "info";
10
+ readonly LOW: "low";
11
+ readonly MEDIUM: "medium";
12
+ readonly HIGH: "high";
13
+ readonly CRITICAL: "critical";
14
+ };
15
+ export declare const alertSeveritySchema: Type.TEnum<("info" | "low" | "medium" | "high" | "critical")[]>;
16
+ export type AlertSeverity = Static<typeof alertSeveritySchema>;
17
+ export declare const AlertEmitterType: {
18
+ readonly TRIGGER: "trigger";
19
+ readonly API: "api";
20
+ readonly WEBHOOK: "webhook";
21
+ };
22
+ export declare const alertEmitterTypeSchema: Type.TEnum<("trigger" | "api" | "webhook")[]>;
23
+ export type AlertEmitterType = Static<typeof alertEmitterTypeSchema>;
24
+ export declare const alertEmitterSchema: Type.TObject<{
25
+ type: Type.TEnum<("trigger" | "api" | "webhook")[]>;
26
+ id: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
27
+ name: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
28
+ reference: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
29
+ }>;
30
+ export type AlertEmitterData = Static<typeof alertEmitterSchema>;
31
+ export declare const alertEntityRefSchema: Type.TObject<{
32
+ type: Type.TString;
33
+ value: Type.TString;
34
+ }>;
35
+ export type AlertEntityRefData = Static<typeof alertEntityRefSchema>;
36
+ export declare const alertSchema: Type.TObject<{
37
+ id: Type.TNumber;
38
+ project_id: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TNull]>>;
39
+ alert_type_id: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TNull]>>;
40
+ user_id: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TNull]>>;
41
+ patient_id: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TNull]>>;
42
+ severity: Type.TOptional<Type.TUnion<[Type.TEnum<("info" | "low" | "medium" | "high" | "critical")[]>, Type.TNull]>>;
43
+ status: Type.TOptional<Type.TEnum<("active" | "resolved")[]>>;
44
+ title: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
45
+ summary: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
46
+ emitter: Type.TObject<{
47
+ type: Type.TEnum<("trigger" | "api" | "webhook")[]>;
48
+ id: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
49
+ name: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
50
+ reference: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
51
+ }>;
52
+ recipients: Type.TOptional<Type.TUnion<[Type.TArray<Type.TObject<{
53
+ type: Type.TString;
54
+ value: Type.TString;
55
+ }>>, Type.TNull]>>;
56
+ related_entities: Type.TOptional<Type.TUnion<[Type.TArray<Type.TObject<{
57
+ type: Type.TString;
58
+ value: Type.TString;
59
+ }>>, Type.TNull]>>;
60
+ payload: Type.TOptional<Type.TUnion<[Type.TRecord<"^.*$", Type.TUnknown>, Type.TNull]>>;
61
+ metadata: Type.TOptional<Type.TUnion<[Type.TRecord<"^.*$", Type.TUnknown>, Type.TNull]>>;
62
+ dedup_key: Type.TOptional<Type.TString>;
63
+ triggered_at: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
64
+ viewed_at: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
65
+ viewed_by: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TNull]>>;
66
+ resolved_at: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
67
+ resolved_by: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TNull]>>;
68
+ resolution_note: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
69
+ created_user: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TNull]>>;
70
+ created_at: Type.TOptional<Type.TString>;
71
+ mod_time: Type.TOptional<Type.TString>;
72
+ }>;
73
+ export type AlertData = Static<typeof alertSchema>;
74
+ export declare const createAlertSchema: Type.TObject<{
75
+ alert_type_id: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TNull]>>;
76
+ user_id: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TNull]>>;
77
+ patient_id: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TNull]>>;
78
+ severity: Type.TOptional<Type.TUnion<[Type.TEnum<("info" | "low" | "medium" | "high" | "critical")[]>, Type.TNull]>>;
79
+ title: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
80
+ summary: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
81
+ emitter: Type.TObject<{
82
+ type: Type.TEnum<("trigger" | "api" | "webhook")[]>;
83
+ id: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
84
+ name: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
85
+ reference: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
86
+ }>;
87
+ recipients: Type.TOptional<Type.TUnion<[Type.TArray<Type.TObject<{
88
+ type: Type.TString;
89
+ value: Type.TString;
90
+ }>>, Type.TNull]>>;
91
+ related_entities: Type.TOptional<Type.TUnion<[Type.TArray<Type.TObject<{
92
+ type: Type.TString;
93
+ value: Type.TString;
94
+ }>>, Type.TNull]>>;
95
+ payload: Type.TOptional<Type.TUnion<[Type.TRecord<"^.*$", Type.TUnknown>, Type.TNull]>>;
96
+ metadata: Type.TOptional<Type.TUnion<[Type.TRecord<"^.*$", Type.TUnknown>, Type.TNull]>>;
97
+ dedup_key: Type.TOptional<Type.TString>;
98
+ triggered_at: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
99
+ }>;
100
+ export type CreateAlertData = Static<typeof createAlertSchema>;
101
+ export declare const updateAlertSchema: Type.TObject<{
102
+ patient_id: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TNull]>>;
103
+ user_id: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TNull]>>;
104
+ title: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
105
+ summary: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
106
+ alert_type_id: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TNull]>>;
107
+ severity: Type.TOptional<Type.TUnion<[Type.TEnum<("info" | "low" | "medium" | "high" | "critical")[]>, Type.TNull]>>;
108
+ recipients: Type.TOptional<Type.TUnion<[Type.TArray<Type.TObject<{
109
+ type: Type.TString;
110
+ value: Type.TString;
111
+ }>>, Type.TNull]>>;
112
+ related_entities: Type.TOptional<Type.TUnion<[Type.TArray<Type.TObject<{
113
+ type: Type.TString;
114
+ value: Type.TString;
115
+ }>>, Type.TNull]>>;
116
+ payload: Type.TOptional<Type.TUnion<[Type.TRecord<"^.*$", Type.TUnknown>, Type.TNull]>>;
117
+ metadata: Type.TOptional<Type.TUnion<[Type.TRecord<"^.*$", Type.TUnknown>, Type.TNull]>>;
118
+ dedup_key: Type.TOptional<Type.TString>;
119
+ triggered_at: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
120
+ }>;
121
+ export type UpdateAlertData = Static<typeof updateAlertSchema>;
122
+ export declare const resolveAlertSchema: Type.TObject<{
123
+ resolution_note: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
124
+ }>;
125
+ export type ResolveAlertData = Static<typeof resolveAlertSchema>;
126
+ export declare const listAlertQuerySchema: Type.TObject<{
127
+ status: Type.TOptional<Type.TEnum<("active" | "resolved")[]>>;
128
+ severity: Type.TOptional<Type.TEnum<("info" | "low" | "medium" | "high" | "critical")[]>>;
129
+ user_id: Type.TOptional<Type.TNumber>;
130
+ patient_id: Type.TOptional<Type.TNumber>;
131
+ alert_type_id: Type.TOptional<Type.TNumber>;
132
+ }>;
133
+ export type ListAlertQuery = Static<typeof listAlertQuerySchema>;
134
+ //# sourceMappingURL=alert.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.schema.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/alert/alert.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAWtC,eAAO,MAAM,WAAW;;;CAGd,CAAA;AACV,eAAO,MAAM,iBAAiB,uCAG5B,CAAA;AACF,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAE1D,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAA;AACV,eAAO,MAAM,mBAAmB,iEAG9B,CAAA;AACF,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,mBAAmB,CAAC,CAAA;AAM9D,eAAO,MAAM,gBAAgB;;;;CAInB,CAAA;AACV,eAAO,MAAM,sBAAsB,+CAGjC,CAAA;AACF,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,sBAAsB,CAAC,CAAA;AAIpE,eAAO,MAAM,kBAAkB;;;;;EAoB9B,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAUhE,eAAO,MAAM,oBAAoB;;;EAUhC,CAAA;AACD,MAAM,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAIpE,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2GvB,CAAA;AACD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,WAAW,CAAC,CAAA;AAQlD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;EAqB7B,CAAA;AACD,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAQ9D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;EAI5B,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAO9D,eAAO,MAAM,kBAAkB;;EAO9B,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAIhE,eAAO,MAAM,oBAAoB;;;;;;EAShC,CAAA;AACD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAA"}
@@ -0,0 +1,73 @@
1
+ import { default as RequestContext } from '../../../../models/request/RequestContext';
2
+ import { PaginatedQuery } from '../../global/pagination';
3
+ import { AlertReadScope } from './alert.helper';
4
+ import { Alert } from './alert.model';
5
+ import { CreateAlertData, ListAlertQuery, UpdateAlertData } from './alert.schema';
6
+ /**
7
+ * Lists the alerts the request reaches, newest first, narrowed by the optional filters.
8
+ *
9
+ * `scope` is the caller's read reach (see `resolveAlertReadScope`): `null` for everything in reach,
10
+ * otherwise only the alerts the caller is party to.
11
+ */
12
+ declare function listAlerts(ctx: RequestContext, pagination: PaginatedQuery, filters: ListAlertQuery, scope: AlertReadScope | null): Promise<import('objection').Page<Alert>>;
13
+ /**
14
+ * Reads one alert the request reaches, narrowed by `scope`.
15
+ *
16
+ * An alert outside the caller's scope comes back `undefined`, exactly like one that does not exist,
17
+ * and the controller turns both into the same 404. Deliberate: a 403 here would confirm to anyone
18
+ * that an alert exists for that id, which on clinical data is itself the leak.
19
+ */
20
+ declare function getAlertById(ctx: RequestContext, id: number, scope: AlertReadScope | null): Promise<Alert | undefined>;
21
+ /**
22
+ * Creates an alert, idempotent by `dedup_key`: a second create carrying a key that is already open
23
+ * in the same scope — the project, or the alerts belonging to no project — answers with the stored
24
+ * alert instead of raising a duplicate. That is what lets an
25
+ * emitter retry — a webhook redelivery, a trigger re-firing on the same event — without the same
26
+ * incident being raised twice.
27
+ *
28
+ * `open` is the operative word: the lookup is narrowed to `status = 'active'`, so **a resolved alert
29
+ * does not shadow its key**. A condition that is dealt with and happens again raises a new alert,
30
+ * which is what an alert is for; without the narrowing the key stayed burnt for good and the
31
+ * recurrence came back as a 200 carrying the alert that was closed months ago — an incident lost in
32
+ * silence, and indistinguishable to the caller from a successful create.
33
+ *
34
+ * The cost is that a retry arriving *after* the alert was resolved raises a second one. That is the
35
+ * right way round: a duplicate alert is visible and can be resolved, a swallowed recurrence is
36
+ * neither.
37
+ *
38
+ * The check runs in code, not as a UNIQUE index: the index would have to span
39
+ * `(project_id, dedup_key)`, and `project_id` is nullable, so MySQL treats each NULL as distinct
40
+ * and the constraint would not hold for the ecosystem-wide alerts the column is nullable for.
41
+ *
42
+ * Check and insert share one transaction, and the check locks with `FOR UPDATE`: without the lock
43
+ * two concurrent creates carrying the same key both read "absent" and both insert. The lock is
44
+ * taken over `idx_alert_dedup`, so it is a range lock on the key rather than a table scan. Note
45
+ * this bounds the race, it does not remove it the way a unique index would: the DB no longer
46
+ * backstops the invariant, so a write reaching the table by any path other than this service can
47
+ * still duplicate a key.
48
+ *
49
+ * A client that sends no `dedup_key` gets a generated UUID — unique by construction, so the alert
50
+ * is always stored, and the column always carries a usable value.
51
+ *
52
+ * A `patient_id` without a project is rejected with a 400 (see `assertPatientHasProject`).
53
+ */
54
+ declare function createAlert(ctx: RequestContext, data: CreateAlertData): Promise<Alert>;
55
+ declare function updateAlert(ctx: RequestContext, id: number, data: UpdateAlertData): Promise<Alert>;
56
+ /**
57
+ * Resolves an alert: the single transition of its lifecycle, writing `status`, `resolved_at` and
58
+ * `resolved_by` together so the three never disagree — which is why it is an endpoint of its own
59
+ * and not a `status` field on the update payload.
60
+ *
61
+ * Resolving an already-resolved alert answers with it unchanged rather than failing: the caller
62
+ * asked for a state that already holds, and re-stamping would overwrite who closed it and when.
63
+ */
64
+ declare function resolveAlert(ctx: RequestContext, id: number, resolutionNote?: string | null): Promise<Alert>;
65
+ export declare const AlertService: {
66
+ list: typeof listAlerts;
67
+ getById: typeof getAlertById;
68
+ create: typeof createAlert;
69
+ update: typeof updateAlert;
70
+ resolve: typeof resolveAlert;
71
+ };
72
+ export {};
73
+ //# sourceMappingURL=alert.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.service.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/alert/alert.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,cAAc,MAAM,mCAAmC,CAAA;AAKnE,OAAO,EAAE,cAAc,EAAiB,MAAM,6BAA6B,CAAA;AAE3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAe,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAyC7G;;;;;GAKG;AACH,iBAAe,UAAU,CACvB,GAAG,EAAE,cAAc,EACnB,UAAU,EAAE,cAAc,EAC1B,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,cAAc,GAAG,IAAI,4CAe7B;AAED;;;;;;GAMG;AACH,iBAAe,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,8BAMxF;AAwFD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,iBAAe,WAAW,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,kBAkBpE;AA0FD,iBAAe,WAAW,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,kBAmBhF;AAED;;;;;;;GAOG;AACH,iBAAe,YAAY,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,kBAyB1F;AAED,eAAO,MAAM,YAAY;;;;;;CAMxB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=alert.service.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert.service.test.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/alert/alert.service.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ export { AlertService } from './alert.service';
2
+ export { Alert } from './alert.model';
3
+ export { AlertController } from './alert.controller';
4
+ export { requireAlertsManagement } from './alert.helper';
5
+ export { AlertStatus, AlertSeverity, AlertEmitterType } from './alert.schema';
6
+ export type { AlertData, AlertEmitterData, AlertEntityRefData, CreateAlertData, UpdateAlertData } from './alert.schema';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/alert/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAC7E,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { FastifyPluginAsyncTypebox } from '@fastify/type-provider-typebox';
2
+ export declare const alertTypeRouter: FastifyPluginAsyncTypebox;
3
+ export declare const AlertTypeController: {
4
+ alertTypeRouter: FastifyPluginAsyncTypebox;
5
+ };
6
+ //# sourceMappingURL=alert-type.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-type.controller.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/alert-type/alert-type.controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAmB1E,eAAO,MAAM,eAAe,EAAE,yBAsH7B,CAAA;AAED,eAAO,MAAM,mBAAmB;;CAE/B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=alert-type.controller.e2e.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-type.controller.e2e.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/alert-type/alert-type.controller.e2e.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=alert-type.controller.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-type.controller.test.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/alert-type/alert-type.controller.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Permission preHandler of the write endpoints of the alert type catalog.
3
+ *
4
+ * It checks the administrator role rather than the `alerts_management` privilege the alert
5
+ * endpoints use, and the reason is structural: seed privileges are granted per profiling, and a
6
+ * profiling belongs to a project (`user_profiling.project_id`). This catalog has no project — it is
7
+ * ecosystem-wide — so there is no profiling row to look up and `User.checkPermission` would answer
8
+ * `false` for everyone, locking the endpoints for good.
9
+ *
10
+ * Reads carry no guard of their own: the catalog is a list of names, every alert reader needs it to
11
+ * render an alert, and it carries no clinical data.
12
+ */
13
+ export declare const requireAlertTypeAdmin: (req: import('fastify').FastifyRequest) => Promise<void>;
14
+ //# sourceMappingURL=alert-type.helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-type.helper.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/alert-type/alert-type.helper.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,qBAAqB,0DAEjC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=alert-type.helper.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-type.helper.test.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/alert-type/alert-type.helper.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import { default as Objection } from 'objection';
2
+ import { default as BaseModel } from '../../../../models/BaseModel';
3
+ import { default as RequestContext } from '../../../../models/request/RequestContext';
4
+ import { TypedQueryBuilder } from '../../global/objection';
5
+ import { AlertTypeData } from './alert-type.schema';
6
+ export declare class AlertType extends BaseModel implements AlertTypeData {
7
+ name: string;
8
+ description?: string | null;
9
+ created_user?: number | null;
10
+ created_at?: string;
11
+ mod_time?: string;
12
+ static tableName: string;
13
+ static jsonSchema: Objection.JSONSchema;
14
+ static QueryBuilder: typeof Objection.QueryBuilder;
15
+ static query(): TypedQueryBuilder<AlertType, typeof AlertType, never>;
16
+ static getModel(ctx: RequestContext): typeof AlertType;
17
+ }
18
+ //# sourceMappingURL=alert-type.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-type.model.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/alert-type/alert-type.model.ts"],"names":[],"mappings":"AAAA,OAAO,SAA2B,MAAM,WAAW,CAAA;AACnD,OAAO,SAAS,MAAM,sBAAsB,CAAA;AAC5C,OAAO,cAAc,MAAM,mCAAmC,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAG9D,OAAO,EAAmB,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAMzE,qBAAa,SAAU,SAAQ,SAAU,YAAW,aAAa;IAC/D,IAAI,EAAG,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC3B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB,MAAM,CAAC,SAAS,SAAe;IAK/B,MAAM,CAAC,UAAU,EAA+C,SAAS,CAAC,UAAU,CAAA;IAEpF,MAAM,CAAC,YAAY,gCAAyC;IAE5D,MAAM,CAAC,KAAK;IAIZ,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,cAAc;CAGpC"}
@@ -0,0 +1,29 @@
1
+ import { Type, Static } from 'typebox';
2
+ export declare const alertTypeSchema: Type.TObject<{
3
+ id: Type.TNumber;
4
+ name: Type.TString;
5
+ description: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
6
+ created_user: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TNull]>>;
7
+ created_at: Type.TOptional<Type.TString>;
8
+ mod_time: Type.TOptional<Type.TString>;
9
+ }>;
10
+ export type AlertTypeData = Static<typeof alertTypeSchema>;
11
+ export declare const createAlertTypeSchema: Type.TObject<{
12
+ name: Type.TString;
13
+ description: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
14
+ }>;
15
+ export type CreateAlertTypeData = Static<typeof createAlertTypeSchema>;
16
+ export declare const updateAlertTypeSchema: Type.TObject<{
17
+ name: Type.TOptional<Type.TString>;
18
+ description: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
19
+ }>;
20
+ export type UpdateAlertTypeData = Static<typeof updateAlertTypeSchema>;
21
+ export declare const alertTypeWithIdParamsSchema: Type.TIntersect<[Type.TObject<{
22
+ ecosystemName: Type.TString;
23
+ }>, Type.TObject<{
24
+ id: Type.TNumber;
25
+ }>]>;
26
+ export declare const alertTypeSuccessResponseSchema: Type.TObject<{
27
+ success: Type.TBoolean;
28
+ }>;
29
+ //# sourceMappingURL=alert-type.schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-type.schema.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/alert-type/alert-type.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAWtC,eAAO,MAAM,eAAe;;;;;;;EAc3B,CAAA;AACD,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,eAAe,CAAC,CAAA;AAM1D,eAAO,MAAM,qBAAqB;;;EAMjC,CAAA;AACD,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAGtE,eAAO,MAAM,qBAAqB;;;EAIhC,CAAA;AACF,MAAM,MAAM,mBAAmB,GAAG,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAEtE,eAAO,MAAM,2BAA2B;;;;IAGvC,CAAA;AAED,eAAO,MAAM,8BAA8B;;EAG1C,CAAA"}
@@ -0,0 +1,38 @@
1
+ import { default as RequestContext } from '../../../../models/request/RequestContext';
2
+ import { PaginatedQuery } from '../../global/pagination';
3
+ import { AlertType } from './alert-type.model';
4
+ import { CreateAlertTypeData, UpdateAlertTypeData } from './alert-type.schema';
5
+ /**
6
+ * Lists the alert types of the ecosystem, by name.
7
+ *
8
+ * No project scoping anywhere in this service, unlike `alert.service.ts`: the catalog is
9
+ * ecosystem-wide by design, so every row is in scope for every caller of the ecosystem.
10
+ */
11
+ declare function listAlertTypes(ctx: RequestContext, pagination: PaginatedQuery): Promise<import('objection').Page<AlertType>>;
12
+ declare function getAlertTypeById(ctx: RequestContext, id: number): Promise<AlertType | undefined>;
13
+ /**
14
+ * Creates a type.
15
+ *
16
+ * The name is not unique: two types may share it. What identifies a type is its id, which is what
17
+ * `alert.alert_type_id` stores, so a repeated name classifies alerts under distinct types and does
18
+ * not merge them.
19
+ */
20
+ declare function createAlertType(ctx: RequestContext, data: CreateAlertTypeData): Promise<AlertType>;
21
+ declare function updateAlertType(ctx: RequestContext, id: number, data: UpdateAlertTypeData): Promise<AlertType>;
22
+ /**
23
+ * Deletes a type. The `alert.alert_type_id` foreign key is `ON DELETE SET NULL`, so the alerts of a
24
+ * deleted type survive as unclassified rather than disappearing with it — an alert carries clinical
25
+ * data and must not be removed as a side effect of tidying up a catalog.
26
+ */
27
+ declare function deleteAlertType(ctx: RequestContext, id: number): Promise<{
28
+ success: boolean;
29
+ }>;
30
+ export declare const AlertTypeService: {
31
+ list: typeof listAlertTypes;
32
+ getById: typeof getAlertTypeById;
33
+ create: typeof createAlertType;
34
+ update: typeof updateAlertType;
35
+ delete: typeof deleteAlertType;
36
+ };
37
+ export {};
38
+ //# sourceMappingURL=alert-type.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-type.service.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/alert-type/alert-type.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,cAAc,MAAM,mCAAmC,CAAA;AAGnE,OAAO,EAAE,cAAc,EAAiB,MAAM,6BAA6B,CAAA;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAEnF;;;;;GAKG;AACH,iBAAe,cAAc,CAAC,GAAG,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,gDAE5E;AAED,iBAAe,gBAAgB,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,kCAE9D;AAED;;;;;;GAMG;AACH,iBAAe,eAAe,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,mBAAmB,sBAI5E;AAED,iBAAe,eAAe,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,sBAQxF;AAED;;;;GAIG;AACH,iBAAe,eAAe,CAAC,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM;;GAO7D;AAED,eAAO,MAAM,gBAAgB;;;;;;CAM5B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=alert-type.service.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"alert-type.service.test.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/alert-type/alert-type.service.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ export { AlertTypeService } from './alert-type.service';
2
+ export { AlertType } from './alert-type.model';
3
+ export { AlertTypeController } from './alert-type.controller';
4
+ export { requireAlertTypeAdmin } from './alert-type.helper';
5
+ export type { AlertTypeData, CreateAlertTypeData, UpdateAlertTypeData } from './alert-type.schema';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/alert-type/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAC7D,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { ProcessLog, isTriggerEngineTrace } from './process-log.model';
2
+ export { ProcessLogPurgeService } from './process-log.service';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/process-log/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA"}
@@ -1,9 +1,9 @@
1
1
  import { default as Objection } from 'objection';
2
- import { default as BaseModel } from '../BaseModel';
3
- import { default as RequestContext } from '../request/RequestContext';
4
- import { ProcessLogType } from '../../schemas';
2
+ import { default as BaseModel } from '../../../../models/BaseModel';
3
+ import { default as RequestContext } from '../../../../models/request/RequestContext';
4
+ import { ProcessLogType } from '../../../../schemas';
5
5
  export declare function isTriggerEngineTrace(relatedModel: unknown): boolean;
6
- export default class ProcessLog extends BaseModel {
6
+ export declare class ProcessLog extends BaseModel {
7
7
  created_at: string;
8
8
  mod_time: string;
9
9
  created_user?: number;
@@ -124,4 +124,4 @@ export default class ProcessLog extends BaseModel {
124
124
  static insert(ctx: RequestContext, data: Objection.PartialModelObject<ProcessLog>): Promise<ProcessLog>;
125
125
  static patch(ctx: RequestContext, data: Objection.PartialModelObject<ProcessLog>, id: number): Promise<ProcessLog>;
126
126
  }
127
- //# sourceMappingURL=ProcessLog.d.ts.map
127
+ //# sourceMappingURL=process-log.model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-log.model.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/process-log/process-log.model.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,WAAW,CAAA;AACjC,OAAO,SAAS,MAAM,sBAAsB,CAAA;AAC5C,OAAO,cAAc,MAAM,mCAAmC,CAAA;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAqB5C,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,OAAO,GAAG,OAAO,CAEnE;AAED,qBAAa,UAAW,SAAQ,SAAS;IACvC,UAAU,EAAG,MAAM,CAAA;IACnB,QAAQ,EAAG,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,EAAG,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAChC,IAAI,EAAG,MAAM,CAAA;IACb,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,EAAG,OAAO,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAE1B,MAAM,KAAK,SAAS,WAEnB;IAED,MAAM,KAAK,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAwBpB;IAED,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,cAAc;IAInC,MAAM,CAAC,cAAc,CAAC,aAAa,EAAE,SAAS,CAAC,iBAAiB;IAI1D,WAAW,CAAC,aAAa,EAAE,SAAS,CAAC,YAAY,EAAE,GAAG,CAAC,EAAE,UAAU;IAUnE,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC,YAAY,EAAE,YAAY,EAAE,SAAS,CAAC,YAAY;IAM/E,aAAa,CAAC,YAAY,EAAE,SAAS,CAAC,YAAY;WAK3C,MAAM,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,kBAAkB,CAAC,UAAU,CAAC;WAO1E,KAAK,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,CAAC,kBAAkB,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,MAAM;CASnG"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=process-log.model.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-log.model.test.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/process-log/process-log.model.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ export interface EcosystemPurgeResult {
2
+ ecosystem: string;
3
+ /** Rows deleted in this cycle. `null` when the ecosystem was skipped or failed. */
4
+ deleted: number | null;
5
+ }
6
+ /**
7
+ * One purge cycle: walks every ecosystem in the global `ecosystem` catalog and deletes
8
+ * its expired `process_log` rows.
9
+ *
10
+ * An ecosystem that fails is logged and skipped so it never aborts the rest, matching
11
+ * how the trigger engine isolates a failing trigger within a batch. The purge writes no
12
+ * `process_log` row of its own: it would be self-referential and, carrying no
13
+ * `expires_at`, those audit rows would be the only ones that never expire.
14
+ */
15
+ declare function purgeExpiredProcessLogs(): Promise<EcosystemPurgeResult[]>;
16
+ export declare const ProcessLogPurgeService: {
17
+ purgeExpiredProcessLogs: typeof purgeExpiredProcessLogs;
18
+ };
19
+ export {};
20
+ //# sourceMappingURL=process-log.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-log.service.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/process-log/process-log.service.ts"],"names":[],"mappings":"AA0CA,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAA;IACjB,mFAAmF;IACnF,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AA+DD;;;;;;;;GAQG;AACH,iBAAe,uBAAuB,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAiDxE;AAED,eAAO,MAAM,sBAAsB;;CAElC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=process-log.service.e2e.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-log.service.e2e.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/process-log/process-log.service.e2e.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=process-log.service.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-log.service.test.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/process-log/process-log.service.test.ts"],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"auth-token.controller.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/global/auth-token/auth-token.controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAIxC,iBAAe,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,gBAItD;AAED,iBAAe,cAAc,CAAC,GAAG,EAAE,cAAc,iBAyEhD;AAED,eAAO,MAAM,mBAAmB;;;CAG/B,CAAA"}
1
+ {"version":3,"file":"auth-token.controller.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/global/auth-token/auth-token.controller.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAMxC,iBAAe,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,gBAItD;AAED,iBAAe,cAAc,CAAC,GAAG,EAAE,cAAc,iBAwFhD;AAED,eAAO,MAAM,mBAAmB;;;CAG/B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"dates.helper.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/global/dates/dates.helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAmBhD,eAAO,MAAM,kBAAkB,IAAI,CAAA;AAGnC,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,KAAK,CAAC,KAAK,CAEhE;AAQD;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,UAAU,EAChB,SAAS,GAAE,MAA2B,EACtC,GAAG,UAAQ,GACV,MAAM,CAQR;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,UAAQ,GAAG,MAAM,CAEhG"}
1
+ {"version":3,"file":"dates.helper.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/global/dates/dates.helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAmBhD,eAAO,MAAM,kBAAkB,IAAI,CAAA;AAGnC,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,KAAK,CAAC,KAAK,CAEhE;AAQD;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,UAAU,EAChB,SAAS,GAAE,MAA2B,EACtC,GAAG,UAAQ,GACV,MAAM,CAQR;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,UAAQ,GAAG,MAAM,CAEhG"}
@@ -4,4 +4,43 @@
4
4
  * widget's `TrendWindowUnit`) build it on top of this one, so the set of units is defined once here.
5
5
  */
6
6
  export type PeriodUnit = 'hour' | 'day' | 'week' | 'month';
7
+ /**
8
+ * Datetimes a request carries are declared with `format: 'date-time'` (RFC 3339): a date and a time
9
+ * separated by `T`, an optional fraction, and a mandatory offset (`Z` or `±HH:MM`). The offset names
10
+ * the instant; the service converts it to UTC for the column.
11
+ *
12
+ * The format is TypeBox's, not `ajv-formats`': routes compile through `TypeBoxValidatorCompiler`
13
+ * (`app.ts`), and `ajv-formats` only validates the v1/Objection layer. Which one runs matters,
14
+ * because TypeBox's is the stricter of the two and the difference is visible from outside:
15
+ *
16
+ * - It splits the value on `/T/i` alone, so `T`/`t` is the only separator — a space is a 400.
17
+ * - Its offset is `(?:Z|([+-])(\d\d):(\d\d))?`, so the minutes are not optional: `+01` is a 400,
18
+ * and so is `+0100` without the colon. That is what keeps `dayjs.utc()` from ever seeing an
19
+ * hour-only offset, which it cannot read — it would fall back to parsing the value as a bare wall
20
+ * clock and drop the offset, storing an instant an hour off with no error.
21
+ * - It bounds the offset to `±23:59` (`tzH > 23 || tzM > 59`), so `+99:99` is a 400, and it checks
22
+ * the calendar (`IsDate`, leap years included), so `2026-02-31T00:00:00Z` is a 400 before any
23
+ * handler runs. The bound is RFC 3339's and not the tz database's, so it also takes offsets no
24
+ * zone uses (`-14:00`, `+23:59`) — each still names one unambiguous instant, so what gets stored
25
+ * is right.
26
+ *
27
+ * A `pattern` alongside the format would be dead weight: everything one could reasonably spell in it
28
+ * is already a subset of what the format checks, and a stricter one drifts silently the day either
29
+ * side changes. This was tried and removed (persei/tasks#294).
30
+ *
31
+ * This is that contract in one sentence, for the description of a request field: what the format
32
+ * takes and, just as important, the two near-miss spellings a client is likely to try.
33
+ */
34
+ export declare const API_DATETIME_ACCEPTED_NOTE = "Only this spelling is accepted: `T` as the separator (a space is a 400) and an offset with minutes, either `Z` or `\u00B1HH:MM` (`+01` and `+0100` are a 400). A lowercase `t`/`z` and a fractional second are fine";
35
+ /** An RFC 3339 datetime, for schema examples and API documentation. */
36
+ export declare const API_DATETIME_EXAMPLE = "2026-01-15T10:30:00Z";
37
+ /**
38
+ * What a datetime *coming out* of the API looks like, for the description of a response field.
39
+ *
40
+ * The outbound shape is narrower than the inbound one and no pattern states it: datetimes leave the
41
+ * column as `Date` and are serialised by `fast-json-stringify` with `.toISOString()`, so the schema
42
+ * never validates what is emitted. Saying it in the description is what puts it in the published
43
+ * spec, which is where a client reads the contract from.
44
+ */
45
+ export declare const EMITTED_DATETIME_NOTE = "Emitted as ISO-8601 in UTC";
7
46
  //# sourceMappingURL=dates.schema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dates.schema.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/global/dates/dates.schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAA"}
1
+ {"version":3,"file":"dates.schema.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/global/dates/dates.schema.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAA;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,0BAA0B,wNAC2K,CAAA;AAElN,uEAAuE;AACvE,eAAO,MAAM,oBAAoB,yBAAyB,CAAA;AAE1D;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,+BAA+B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"e2e-operation.controller.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/global/e2e-operation/e2e-operation.controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAmC1E,eAAO,MAAM,sBAAsB;;CAAa,CAAA"}
1
+ {"version":3,"file":"e2e-operation.controller.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/global/e2e-operation/e2e-operation.controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAA;AAkE1E,eAAO,MAAM,sBAAsB;;CAAa,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"e2e-operation.service.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/global/e2e-operation/e2e-operation.service.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AA4ChE,MAAM,WAAW,OAAO;IAGtB,GAAG,CAAC,GAAG,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;CAC/E;AAKD,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AA+BD,eAAO,MAAM,aAAa,GAAU,KAAK,OAAO,EAAE,SAAS,MAAM,EAAE,OAAM,YAAiB,KAAG,OAAO,CAAC,IAAI,CAwDxG,CAAA;AAYD,eAAO,MAAM,eAAe,GAC1B,KAAK,OAAO,EACZ,SAAS,MAAM,EACf,OAAM,YAAiB,KACtB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAmFtF,CAAA;AA8PD,eAAO,MAAM,mBAAmB;sCATQ,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC;mBAWrD,MAAM,UAAU,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAQxE,CAAA"}
1
+ {"version":3,"file":"e2e-operation.service.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/global/e2e-operation/e2e-operation.service.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAA;AAuLhE,MAAM,WAAW,OAAO;IAGtB,GAAG,CAAC,GAAG,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;CAC/E;AAKD,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAgFD,eAAO,MAAM,aAAa,GAAU,KAAK,OAAO,EAAE,SAAS,MAAM,EAAE,OAAM,YAAiB,KAAG,OAAO,CAAC,IAAI,CAyExG,CAAA;AAiGD,eAAO,MAAM,eAAe,GAC1B,KAAK,OAAO,EACZ,SAAS,MAAM,EACf,OAAM,YAAiB,KACtB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CA6BtF,CAAA;AA8xBD,eAAO,MAAM,mBAAmB;sCAhBQ,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC;mBAkBrD,MAAM,UAAU,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAQxE,CAAA"}
@@ -0,0 +1,2 @@
1
+ export * from './permissions.helper';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/global/permissions/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA"}