@persei/perseed-api 5.0.22 → 5.0.24

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 (93) hide show
  1. package/dist/client.cjs +57 -0
  2. package/dist/client.cjs.map +1 -1
  3. package/dist/client.mjs +57 -0
  4. package/dist/client.mjs.map +1 -1
  5. package/dist/dates.helper-CDM5aEJG.cjs.map +1 -1
  6. package/dist/dates.helper-XRCJ_UAQ.js.map +1 -1
  7. package/dist/dates.schema-BqkBcmM6.js +18 -0
  8. package/dist/dates.schema-BqkBcmM6.js.map +1 -0
  9. package/dist/dates.schema-npKpToAJ.cjs +17 -0
  10. package/dist/dates.schema-npKpToAJ.cjs.map +1 -0
  11. package/dist/ecosystem-container-widget.cjs +1 -1
  12. package/dist/ecosystem-container-widget.mjs +1 -1
  13. package/dist/ecosystem-process-log.cjs +234 -0
  14. package/dist/ecosystem-process-log.cjs.map +1 -0
  15. package/dist/ecosystem-process-log.d.ts +1 -0
  16. package/dist/ecosystem-process-log.mjs +234 -0
  17. package/dist/ecosystem-process-log.mjs.map +1 -0
  18. package/dist/global-dates.cjs +5 -6
  19. package/dist/global-dates.cjs.map +1 -1
  20. package/dist/global-dates.mjs +5 -6
  21. package/dist/global-dates.mjs.map +1 -1
  22. package/dist/lib/src/generated/client.d.ts +267 -0
  23. package/dist/lib/src/generated/client.d.ts.map +1 -1
  24. package/dist/src/Services/ProcessLogService.d.ts.map +1 -1
  25. package/dist/src/Services/QueryService.d.ts.map +1 -1
  26. package/dist/src/app.d.ts +2 -2
  27. package/dist/src/app.d.ts.map +1 -1
  28. package/dist/src/controllers/IntrospectionController.d.ts.map +1 -1
  29. package/dist/src/models/project/Displayer.d.ts.map +1 -1
  30. package/dist/src/models/project/DisplayerMeta.d.ts +2 -1
  31. package/dist/src/models/project/DisplayerMeta.d.ts.map +1 -1
  32. package/dist/src/models/project/QuestionariesInfo.d.ts +2 -1
  33. package/dist/src/models/project/QuestionariesInfo.d.ts.map +1 -1
  34. package/dist/src/schemas/process_log/create_process_log_payload.schema.json +20 -1
  35. package/dist/src/schemas/process_log/types.d.ts +19 -5
  36. package/dist/src/schemas/process_log/types.d.ts.map +1 -1
  37. package/dist/src/test/test-helpers.d.ts +12 -0
  38. package/dist/src/test/test-helpers.d.ts.map +1 -1
  39. package/dist/src/v2/modules/ecosystem/action-system/action-system.service/automatic-trigger.service.d.ts +4 -4
  40. package/dist/src/v2/modules/ecosystem/action-system/action-system.service/manual-trigger-engine.service.d.ts.map +1 -1
  41. package/dist/src/v2/modules/ecosystem/action-system/action-system.service/manual-trigger.service.d.ts +8 -8
  42. package/dist/src/v2/modules/ecosystem/action-system/action-system.service/trigger-engine.service.d.ts +27 -1
  43. package/dist/src/v2/modules/ecosystem/action-system/action-system.service/trigger-engine.service.d.ts.map +1 -1
  44. package/dist/src/v2/modules/ecosystem/action-system/index.d.ts +1 -1
  45. package/dist/src/v2/modules/ecosystem/action-system/index.d.ts.map +1 -1
  46. package/dist/src/v2/modules/ecosystem/alert/alert.controller.d.ts +3 -3
  47. package/dist/src/v2/modules/ecosystem/alert/alert.controller.d.ts.map +1 -1
  48. package/dist/src/v2/modules/ecosystem/alert/alert.model.d.ts +15 -2
  49. package/dist/src/v2/modules/ecosystem/alert/alert.model.d.ts.map +1 -1
  50. package/dist/src/v2/modules/ecosystem/alert/alert.schema.d.ts +14 -5
  51. package/dist/src/v2/modules/ecosystem/alert/alert.schema.d.ts.map +1 -1
  52. package/dist/src/v2/modules/ecosystem/alert/alert.service.d.ts.map +1 -1
  53. package/dist/src/v2/modules/ecosystem/alert/index.d.ts +1 -1
  54. package/dist/src/v2/modules/ecosystem/alert/index.d.ts.map +1 -1
  55. package/dist/src/v2/modules/ecosystem/process-log/index.d.ts +4 -1
  56. package/dist/src/v2/modules/ecosystem/process-log/index.d.ts.map +1 -1
  57. package/dist/src/v2/modules/ecosystem/process-log/lib.d.ts +2 -0
  58. package/dist/src/v2/modules/ecosystem/process-log/lib.d.ts.map +1 -0
  59. package/dist/src/v2/modules/ecosystem/process-log/process-log.controller.d.ts +5 -0
  60. package/dist/src/v2/modules/ecosystem/process-log/process-log.controller.d.ts.map +1 -0
  61. package/dist/src/v2/modules/ecosystem/process-log/process-log.controller.e2e.d.ts +2 -0
  62. package/dist/src/v2/modules/ecosystem/process-log/process-log.controller.e2e.d.ts.map +1 -0
  63. package/dist/src/v2/modules/ecosystem/process-log/process-log.controller.test.d.ts +2 -0
  64. package/dist/src/v2/modules/ecosystem/process-log/process-log.controller.test.d.ts.map +1 -0
  65. package/dist/src/v2/modules/ecosystem/process-log/process-log.model.d.ts +29 -2
  66. package/dist/src/v2/modules/ecosystem/process-log/process-log.model.d.ts.map +1 -1
  67. package/dist/src/v2/modules/ecosystem/process-log/process-log.schema.d.ts +115 -0
  68. package/dist/src/v2/modules/ecosystem/process-log/process-log.schema.d.ts.map +1 -0
  69. package/dist/src/v2/modules/ecosystem/process-log/process-log.service.d.ts +16 -0
  70. package/dist/src/v2/modules/ecosystem/process-log/process-log.service.d.ts.map +1 -1
  71. package/dist/src/v2/modules/global/dates/{dates.helper.d.ts → dates.helper/dates.helper.d.ts} +1 -1
  72. package/dist/src/v2/modules/global/dates/dates.helper/dates.helper.d.ts.map +1 -0
  73. package/dist/src/v2/modules/global/dates/dates.helper/dates.helper.test.d.ts.map +1 -0
  74. package/dist/src/v2/modules/global/dates/dates.helper/decoding-validator.helper.d.ts +75 -0
  75. package/dist/src/v2/modules/global/dates/dates.helper/decoding-validator.helper.d.ts.map +1 -0
  76. package/dist/src/v2/modules/global/dates/dates.helper/decoding-validator.helper.test.d.ts +2 -0
  77. package/dist/src/v2/modules/global/dates/dates.helper/decoding-validator.helper.test.d.ts.map +1 -0
  78. package/dist/src/v2/modules/global/dates/dates.helper/index.d.ts +3 -0
  79. package/dist/src/v2/modules/global/dates/dates.helper/index.d.ts.map +1 -0
  80. package/dist/src/v2/modules/global/dates/dates.schema.d.ts +23 -0
  81. package/dist/src/v2/modules/global/dates/dates.schema.d.ts.map +1 -1
  82. package/dist/src/v2/routes/v2/ecosystem/_ecosystemName/alert/index.d.ts +1 -1
  83. package/dist/src/v2/routes/v2/ecosystem/_ecosystemName/project/_projectName/alert/index.d.ts +1 -1
  84. package/dist/src/v2/routes/v2/ecosystem/_ecosystemName/project/_projectName/process-log/index.d.ts +3 -0
  85. package/dist/src/v2/routes/v2/ecosystem/_ecosystemName/project/_projectName/process-log/index.d.ts.map +1 -0
  86. package/dist/v1/perseed-api.cjs +0 -7
  87. package/dist/v1/perseed-api.cjs.map +1 -1
  88. package/dist/v1/perseed-api.mjs +0 -7
  89. package/dist/v1/perseed-api.mjs.map +1 -1
  90. package/package.json +1 -1
  91. package/dist/src/v2/modules/global/dates/dates.helper.d.ts.map +0 -1
  92. package/dist/src/v2/modules/global/dates/dates.helper.test.d.ts.map +0 -1
  93. /package/dist/src/v2/modules/global/dates/{dates.helper.test.d.ts → dates.helper/dates.helper.test.d.ts} +0 -0
@@ -0,0 +1,234 @@
1
+ import { Type } from "typebox";
2
+ import { b as apiDateTime, a as API_DATETIME_EXAMPLE, A as API_DATETIME_ACCEPTED_NOTE, E as EMITTED_DATETIME_NOTE } from "./dates.schema-BqkBcmM6.js";
3
+ const ProcessLogType = {
4
+ LOG: 0,
5
+ RESULT: 1,
6
+ WARNING: -1,
7
+ ERROR: -2
8
+ };
9
+ const processLogTypeSchema = Type.Enum(Object.values(ProcessLogType), {
10
+ title: "ProcessLogType",
11
+ description: "Severity of the log row (not a layout/kind marker): LOG, RESULT, WARNING or ERROR"
12
+ });
13
+ const ProcessLogCode = {
14
+ BULK_UPLOAD_BATCH: "bulk_upload_batch",
15
+ BULK_UPLOAD_SUCCESS: "bulk_upload_success",
16
+ BULK_UPLOAD_ERROR: "bulk_upload_error",
17
+ // Trigger engine (#348). Written by `TriggerEngineService` (`action-system` module): one
18
+ // `TRIGGER_EVALUATION` row per trigger evaluated, one `TRIGGER_ACTION` row per action it ran, and a
19
+ // `TRIGGER_ERROR` row when a trigger's evaluation throws.
20
+ TRIGGER_EVALUATION: "trigger_evaluation",
21
+ TRIGGER_ERROR: "trigger_error",
22
+ TRIGGER_ACTION: "trigger_action"
23
+ };
24
+ const processLogCodeSchema = Type.Enum(Object.values(ProcessLogCode), {
25
+ title: "ProcessLogCode",
26
+ description: "What kind of event a process_log row records, and what shape its extra_data takes"
27
+ });
28
+ const triggerEvaluationExtraDataSchema = Type.Object(
29
+ {
30
+ source: Type.String({ description: "What fired the event: a model row or a displayer/form save" }),
31
+ target: Type.Optional(
32
+ Type.Union([Type.String(), Type.Null()], { description: "Model/displayer name the trigger is bound to" })
33
+ ),
34
+ operation: Type.Optional(
35
+ Type.Union([Type.String(), Type.Null()], { description: "create/update/delete that fired the event" })
36
+ ),
37
+ matched: Type.Boolean({ description: "Whether the trigger conditions matched" }),
38
+ conditions: Type.Optional(
39
+ Type.Union([Type.Unknown(), Type.Null()], {
40
+ description: "jsonLogic conditions the trigger was configured with"
41
+ })
42
+ ),
43
+ relations: Type.Optional(
44
+ Type.Union([Type.Unknown(), Type.Null()], {
45
+ description: "Relations the trigger declared to load onto `current`"
46
+ })
47
+ ),
48
+ relationsSkipped: Type.Optional(
49
+ Type.Union([Type.String(), Type.Null()], {
50
+ description: "Reason a declared relation could not be loaded, when one was skipped"
51
+ })
52
+ )
53
+ },
54
+ {
55
+ title: "TriggerEvaluationExtraData",
56
+ description: "extra_data of a `trigger_evaluation` row — how a trigger resolved, never the entity data it resolved against",
57
+ additionalProperties: false
58
+ }
59
+ );
60
+ const triggerErrorExtraDataSchema = Type.Object(
61
+ { error: Type.String({ description: "String representation of the exception the trigger evaluation threw" }) },
62
+ { title: "TriggerErrorExtraData", description: "extra_data of a `trigger_error` row", additionalProperties: false }
63
+ );
64
+ const triggerActionExtraDataSchema = Type.Object(
65
+ {
66
+ actionId: Type.Number({ description: "id of the action row that ran" }),
67
+ triggerId: Type.Number({ description: "id of the trigger that ran this action" }),
68
+ // Needed because the engine is shared: `triggerId` alone is ambiguous, since automatic and
69
+ // manual triggers are different tables (`automatic_trigger`, `manual_trigger`) with overlapping
70
+ // id ranges. Paired with `triggerId` this is what a consumer needs to resolve the trigger row.
71
+ triggerModel: Type.String({ description: "Table the trigger belongs to (automatic_trigger or manual_trigger)" }),
72
+ executionOrder: Type.Number({ description: "Order of this action within the trigger" }),
73
+ type: Type.String({ description: "Type of the action (e.g. ApiAction)" }),
74
+ validation: Type.Unknown({ description: "Result of validating the action context before running it" }),
75
+ // `ok`/`output` describe an action that ran; `aborted`/`reason` an action that never did,
76
+ // because validating its context failed (`resolveActionOutcome`). The two pairs are mutually
77
+ // exclusive in practice but declared as four optionals rather than a union: `additionalProperties:
78
+ // false` is what makes this schema worth having, and a row whose outcome keys are undeclared is
79
+ // one the debugging popup cannot show a reason for — which is exactly the aborted case.
80
+ ok: Type.Optional(Type.Union([Type.Boolean(), Type.Null()], { description: "Whether the action call succeeded" })),
81
+ output: Type.Optional(
82
+ Type.Union([Type.String(), Type.Null()], { description: "Failure output, when the action ran and failed" })
83
+ ),
84
+ aborted: Type.Optional(Type.Boolean({ description: "True when the action never ran" })),
85
+ reason: Type.Optional(Type.String({ description: "Why the action was aborted, e.g. context_validation" }))
86
+ },
87
+ { title: "TriggerActionExtraData", description: "extra_data of a `trigger_action` row", additionalProperties: false }
88
+ );
89
+ const processLogTriggerEngineExtraDataSchema = Type.Union(
90
+ [
91
+ Type.Object({
92
+ code: Type.Literal(ProcessLogCode.TRIGGER_EVALUATION),
93
+ extra_data: triggerEvaluationExtraDataSchema
94
+ }),
95
+ Type.Object({ code: Type.Literal(ProcessLogCode.TRIGGER_ERROR), extra_data: triggerErrorExtraDataSchema }),
96
+ Type.Object({ code: Type.Literal(ProcessLogCode.TRIGGER_ACTION), extra_data: triggerActionExtraDataSchema })
97
+ ],
98
+ {
99
+ title: "ProcessLogTriggerEngineExtraData",
100
+ description: "Ties each trigger-engine `code` to the shape its `extra_data` takes"
101
+ }
102
+ );
103
+ const processLogSchema = Type.Object(
104
+ {
105
+ id: Type.Number({ description: "Unique identifier of the row" }),
106
+ project_id: Type.Optional(
107
+ Type.Union([Type.Number(), Type.Null()], { description: "Project this row belongs to, when scoped to one" })
108
+ ),
109
+ created_user: Type.Optional(
110
+ Type.Union([Type.Number(), Type.Null()], {
111
+ description: "User who caused the row to be written, when a user did"
112
+ })
113
+ ),
114
+ related_model: Type.Optional(
115
+ Type.Union([Type.String({ maxLength: 255 }), Type.Null()], { description: "Table/entity kind the row is about" })
116
+ ),
117
+ related_id: Type.Optional(
118
+ Type.Union([Type.String({ maxLength: 255 }), Type.Null()], {
119
+ description: "Id of the related entity, as a string"
120
+ })
121
+ ),
122
+ code: Type.Optional(Type.Union([processLogCodeSchema, Type.Null()])),
123
+ log: Type.String({ description: "Short human-readable message" }),
124
+ long_log: Type.Optional(Type.Union([Type.String(), Type.Null()], { description: "Extended message, when needed" })),
125
+ extra_data: Type.Optional(
126
+ Type.Union([Type.Record(Type.String(), Type.Unknown()), Type.Null()], {
127
+ description: "Structured data specific to `code` — see the per-code schemas for the trigger-engine codes"
128
+ })
129
+ ),
130
+ type: processLogTypeSchema,
131
+ requires_attention: Type.Optional(Type.Boolean({ description: "Whether the row needs a human to review it" })),
132
+ reviewed: Type.Optional(Type.Boolean({ description: "Whether the row has been reviewed" })),
133
+ reviewed_date: Type.Optional(
134
+ Type.Union([Type.String(), Type.Null()], {
135
+ description: `When the row was reviewed. Null while unreviewed. ${EMITTED_DATETIME_NOTE}`
136
+ })
137
+ ),
138
+ // Correlation to a parent row (#348): a `trigger_action` row's parent is the `trigger_evaluation`
139
+ // (or `trigger_error`) row of the trigger that ran it, so an action's trace can always be walked
140
+ // back to the evaluation that triggered it. Optional/nullable because most rows (bulk upload,
141
+ // the trigger-evaluation row itself) have no parent, and because the column is applied out of
142
+ // band per ecosystem — see README.md — so it may be entirely absent from a given row's database.
143
+ parent_id: Type.Optional(
144
+ Type.Union([Type.Number(), Type.Null()], {
145
+ description: "Id of this row's parent process_log row, when it has one"
146
+ })
147
+ ),
148
+ // `subject_*` vs `related_*` (both #348, see README.md "`related_*` vs `subject_*`"):
149
+ // `related_model`/`related_id` above name the row's own subject — the trigger or the action the
150
+ // row is about. `subject_model`/`subject_id` name the domain entity that originated the
151
+ // execution (a patient, a form...), so "what triggers ran from this entity" can be answered by
152
+ // filtering on them. A `trigger_action` row inherits the same subject as the `trigger_evaluation`
153
+ // row of the trigger that ran it — it is the batch's subject, not the action's own. Optional/
154
+ // nullable for the same two reasons as `parent_id`: most rows have none (there may be no
155
+ // resolvable subject for a batch, or the row predates this column), and the column is applied
156
+ // out of band per ecosystem, so it may be entirely absent from a given row's database.
157
+ subject_model: Type.Optional(
158
+ Type.Union([Type.String({ maxLength: 255 }), Type.Null()], {
159
+ description: "Domain entity kind that originated the execution (e.g. patient), when resolvable"
160
+ })
161
+ ),
162
+ subject_id: Type.Optional(
163
+ Type.Union([Type.String({ maxLength: 255 }), Type.Null()], {
164
+ description: "Id of the domain entity that originated the execution, as a string, when resolvable"
165
+ })
166
+ ),
167
+ expires_at: Type.Optional(
168
+ Type.Union([Type.String(), Type.Null()], {
169
+ description: `Retention deadline; the row is purged after it, and never expires when null. ${EMITTED_DATETIME_NOTE}`,
170
+ examples: [API_DATETIME_EXAMPLE]
171
+ })
172
+ ),
173
+ created_at: Type.Optional(
174
+ Type.String({
175
+ description: `When the row was created. ${EMITTED_DATETIME_NOTE}`,
176
+ examples: [API_DATETIME_EXAMPLE]
177
+ })
178
+ ),
179
+ mod_time: Type.Optional(
180
+ Type.String({
181
+ description: `When the row was last modified. ${EMITTED_DATETIME_NOTE}`,
182
+ examples: [API_DATETIME_EXAMPLE]
183
+ })
184
+ )
185
+ },
186
+ { title: "ProcessLog", description: "A process_log row" }
187
+ );
188
+ const listProcessLogQuerySchema = Type.Object(
189
+ {
190
+ code: Type.Optional(processLogCodeSchema),
191
+ type: Type.Optional(processLogTypeSchema),
192
+ related_model: Type.Optional(Type.String({ description: "Filter by the related entity kind" })),
193
+ related_id: Type.Optional(Type.String({ description: "Filter by the id of the related entity" })),
194
+ parent_id: Type.Optional(Type.Number({ description: "Filter by the id of the parent process_log row" })),
195
+ subject_model: Type.Optional(
196
+ Type.String({ description: "Filter by the domain entity kind that originated the execution" })
197
+ ),
198
+ subject_id: Type.Optional(
199
+ Type.String({ description: "Filter by the id of the domain entity that originated the execution" })
200
+ ),
201
+ requires_attention: Type.Optional(Type.Boolean({ description: "Filter by whether the row needs review" })),
202
+ reviewed: Type.Optional(Type.Boolean({ description: "Filter by whether the row has been reviewed" })),
203
+ // `apiDateTime`, not a bare string: it carries `format: 'date-time'`, so a malformed value is
204
+ // rejected by the validator as a 400. A plain `Type.String` accepts anything and hands it to
205
+ // `getMySQLDateTime(value, true)`, which throws a `PublicApiError` with no `statusCode` — a 500
206
+ // for what is a bad request. Same type `alert.schema.ts` uses for its datetime fields.
207
+ created_from: Type.Optional(
208
+ Type.Union([apiDateTime], {
209
+ description: `Only rows created at or after this instant. ${API_DATETIME_ACCEPTED_NOTE}. ${EMITTED_DATETIME_NOTE}`,
210
+ examples: [API_DATETIME_EXAMPLE]
211
+ })
212
+ ),
213
+ created_to: Type.Optional(
214
+ Type.Union([apiDateTime], {
215
+ description: `Only rows created at or before this instant. ${API_DATETIME_ACCEPTED_NOTE}. ${EMITTED_DATETIME_NOTE}`,
216
+ examples: [API_DATETIME_EXAMPLE]
217
+ })
218
+ )
219
+ },
220
+ { title: "ListProcessLogQuery", description: "Filters available on the process_log list" }
221
+ );
222
+ export {
223
+ ProcessLogCode,
224
+ ProcessLogType,
225
+ listProcessLogQuerySchema,
226
+ processLogCodeSchema,
227
+ processLogSchema,
228
+ processLogTriggerEngineExtraDataSchema,
229
+ processLogTypeSchema,
230
+ triggerActionExtraDataSchema,
231
+ triggerErrorExtraDataSchema,
232
+ triggerEvaluationExtraDataSchema
233
+ };
234
+ //# sourceMappingURL=ecosystem-process-log.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecosystem-process-log.mjs","sources":["../../src/v2/modules/ecosystem/process-log/process-log.schema.ts"],"sourcesContent":["import { Type, Static, StaticDecode } from 'typebox'\n// From the schema file, not the module barrel (`@/modules/global/dates`) that every other consumer\n// imports — the one place where `no-restricted-imports` has to give way, hence the disable.\n//\n// This module has a `lib.ts`, so this file is an entry point of the published `@persei/perseed-api`\n// bundle, which is browser code. The barrel re-exports `dates.middleware`, a `fastify-plugin` that\n// pulls in `@v1/log/debug` and, transitively, the server dependencies behind it; bundling that\n// fails, and it fails naming a transitive JSON file (`ent/reversed.json: Could not parse JSON\n// file`) rather than the import that dragged it in, so the message points nowhere near the cause.\n//\n// `global/dates`'s own `lib.ts` sidesteps the same barrel for the same reason. The alternative —\n// inlining the two description constants — would duplicate the wording the whole API documents its\n// datetimes with, and let this module's copy drift from it silently.\n// eslint-disable-next-line no-restricted-imports\nimport {\n EMITTED_DATETIME_NOTE,\n API_DATETIME_EXAMPLE,\n API_DATETIME_ACCEPTED_NOTE,\n apiDateTime,\n} from '@/modules/global/dates/dates.schema'\n\n// `process_log` is the ecosystem-wide execution log (see README.md): rows written by the trigger\n// engine, the actions it runs and the v1 bulk upload. This module owns the schema for the whole\n// table, not only the trigger-engine rows — `code` is what tells them apart.\n\n// ── ProcessLogType (severity, NOT layout) ───────────────────────────────\n// Mirrors the v1 enum (`src/schemas/process_log/types.ts`) verbatim: it already ships on the wire\n// (`type` column) and changing its numeric values would be a breaking change for every existing row\n// and consumer. Restated here as a TypeBox schema — not imported from v1 — because `lib.ts` may\n// only export pure TypeBox (see below); v1 has no schema module of its own to import from.\nexport const ProcessLogType = {\n LOG: 0,\n RESULT: 1,\n WARNING: -1,\n ERROR: -2,\n} as const\nexport const processLogTypeSchema = Type.Enum(Object.values(ProcessLogType), {\n title: 'ProcessLogType',\n description: 'Severity of the log row (not a layout/kind marker): LOG, RESULT, WARNING or ERROR',\n})\nexport type ProcessLogType = Static<typeof processLogTypeSchema>\n\n// ── ProcessLogCode ───────────────────────────────────────────────────────\n//\n// Canonical enum now lives HERE (v2), not in `src/schemas/process_log/types.ts` (v1).\n//\n// Why: this module (`process-log`) is the one being extended with the trigger-engine codes as part\n// of #348, it already owns the model/service half of `process_log`, and every v2 consumer that needs\n// a *typed* extra_data contract (this schema file) has to sit next to the code enum it is keyed by.\n// The two v1 importers (`BulkUploadController.ts` and `IntrospectionController.ts`) import it from\n// here rather than from `@v1/schemas`, which keeps one enum instead of two that could drift. v1's\n// `types.ts` deliberately does NOT re-export the value: doing so closes the cycle `@v1/schemas` →\n// this module's barrel → `process-log.model.ts` → `@v1/schemas`, under which the enum resolves to\n// `undefined` at runtime. It keeps an `import type` only, which is erased at compile time.\nexport const ProcessLogCode = {\n BULK_UPLOAD_BATCH: 'bulk_upload_batch',\n BULK_UPLOAD_SUCCESS: 'bulk_upload_success',\n BULK_UPLOAD_ERROR: 'bulk_upload_error',\n // Trigger engine (#348). Written by `TriggerEngineService` (`action-system` module): one\n // `TRIGGER_EVALUATION` row per trigger evaluated, one `TRIGGER_ACTION` row per action it ran, and a\n // `TRIGGER_ERROR` row when a trigger's evaluation throws.\n TRIGGER_EVALUATION: 'trigger_evaluation',\n TRIGGER_ERROR: 'trigger_error',\n TRIGGER_ACTION: 'trigger_action',\n} as const\nexport const processLogCodeSchema = Type.Enum(Object.values(ProcessLogCode), {\n title: 'ProcessLogCode',\n description: 'What kind of event a process_log row records, and what shape its extra_data takes',\n})\nexport type ProcessLogCode = Static<typeof processLogCodeSchema>\n\n// ── extra_data shapes, one per trigger-engine code ───────────────────────\n// Bulk upload codes carry no typed extra_data today (nothing writes them yet outside the\n// filter-by-code reads in `BulkUploadController.ts`), so they are left out of the discriminated\n// union below rather than given a placeholder shape that no writer populates.\n\nexport const triggerEvaluationExtraDataSchema = Type.Object(\n {\n source: Type.String({ description: 'What fired the event: a model row or a displayer/form save' }),\n target: Type.Optional(\n Type.Union([Type.String(), Type.Null()], { description: 'Model/displayer name the trigger is bound to' }),\n ),\n operation: Type.Optional(\n Type.Union([Type.String(), Type.Null()], { description: 'create/update/delete that fired the event' }),\n ),\n matched: Type.Boolean({ description: 'Whether the trigger conditions matched' }),\n conditions: Type.Optional(\n Type.Union([Type.Unknown(), Type.Null()], {\n description: 'jsonLogic conditions the trigger was configured with',\n }),\n ),\n relations: Type.Optional(\n Type.Union([Type.Unknown(), Type.Null()], {\n description: 'Relations the trigger declared to load onto `current`',\n }),\n ),\n relationsSkipped: Type.Optional(\n Type.Union([Type.String(), Type.Null()], {\n description: 'Reason a declared relation could not be loaded, when one was skipped',\n }),\n ),\n },\n {\n title: 'TriggerEvaluationExtraData',\n description:\n 'extra_data of a `trigger_evaluation` row — how a trigger resolved, never the entity data it resolved against',\n additionalProperties: false,\n },\n)\nexport type TriggerEvaluationExtraData = Static<typeof triggerEvaluationExtraDataSchema>\n\nexport const triggerErrorExtraDataSchema = Type.Object(\n { error: Type.String({ description: 'String representation of the exception the trigger evaluation threw' }) },\n { title: 'TriggerErrorExtraData', description: 'extra_data of a `trigger_error` row', additionalProperties: false },\n)\nexport type TriggerErrorExtraData = Static<typeof triggerErrorExtraDataSchema>\n\nexport const triggerActionExtraDataSchema = Type.Object(\n {\n actionId: Type.Number({ description: 'id of the action row that ran' }),\n triggerId: Type.Number({ description: 'id of the trigger that ran this action' }),\n // Needed because the engine is shared: `triggerId` alone is ambiguous, since automatic and\n // manual triggers are different tables (`automatic_trigger`, `manual_trigger`) with overlapping\n // id ranges. Paired with `triggerId` this is what a consumer needs to resolve the trigger row.\n triggerModel: Type.String({ description: 'Table the trigger belongs to (automatic_trigger or manual_trigger)' }),\n executionOrder: Type.Number({ description: 'Order of this action within the trigger' }),\n type: Type.String({ description: 'Type of the action (e.g. ApiAction)' }),\n validation: Type.Unknown({ description: 'Result of validating the action context before running it' }),\n // `ok`/`output` describe an action that ran; `aborted`/`reason` an action that never did,\n // because validating its context failed (`resolveActionOutcome`). The two pairs are mutually\n // exclusive in practice but declared as four optionals rather than a union: `additionalProperties:\n // false` is what makes this schema worth having, and a row whose outcome keys are undeclared is\n // one the debugging popup cannot show a reason for — which is exactly the aborted case.\n ok: Type.Optional(Type.Union([Type.Boolean(), Type.Null()], { description: 'Whether the action call succeeded' })),\n output: Type.Optional(\n Type.Union([Type.String(), Type.Null()], { description: 'Failure output, when the action ran and failed' }),\n ),\n aborted: Type.Optional(Type.Boolean({ description: 'True when the action never ran' })),\n reason: Type.Optional(Type.String({ description: 'Why the action was aborted, e.g. context_validation' })),\n },\n { title: 'TriggerActionExtraData', description: 'extra_data of a `trigger_action` row', additionalProperties: false },\n)\nexport type TriggerActionExtraData = Static<typeof triggerActionExtraDataSchema>\n\n// Discriminated (by `code`) union tying each trigger-engine code to its extra_data shape. Usable\n// both to validate a row being created and to type one being read. Bulk upload codes are\n// deliberately absent (see comment above the individual schemas).\nexport const processLogTriggerEngineExtraDataSchema = Type.Union(\n [\n Type.Object({\n code: Type.Literal(ProcessLogCode.TRIGGER_EVALUATION),\n extra_data: triggerEvaluationExtraDataSchema,\n }),\n Type.Object({ code: Type.Literal(ProcessLogCode.TRIGGER_ERROR), extra_data: triggerErrorExtraDataSchema }),\n Type.Object({ code: Type.Literal(ProcessLogCode.TRIGGER_ACTION), extra_data: triggerActionExtraDataSchema }),\n ],\n {\n title: 'ProcessLogTriggerEngineExtraData',\n description: 'Ties each trigger-engine `code` to the shape its `extra_data` takes',\n },\n)\nexport type ProcessLogTriggerEngineExtraData = Static<typeof processLogTriggerEngineExtraDataSchema>\n\n// ── process_log entity ────────────────────────────────────────────────────\n// Full row shape, for the read side of the (still to be implemented) list endpoint. `extra_data` is\n// left as a free record here — a response schema describes what every row of the table can hold,\n// including the untyped bulk_upload rows, unlike `processLogTriggerEngineExtraDataSchema` above\n// which narrows by `code` for a writer/reader that already knows it is on the trigger-engine path.\nexport const processLogSchema = Type.Object(\n {\n id: Type.Number({ description: 'Unique identifier of the row' }),\n project_id: Type.Optional(\n Type.Union([Type.Number(), Type.Null()], { description: 'Project this row belongs to, when scoped to one' }),\n ),\n created_user: Type.Optional(\n Type.Union([Type.Number(), Type.Null()], {\n description: 'User who caused the row to be written, when a user did',\n }),\n ),\n related_model: Type.Optional(\n Type.Union([Type.String({ maxLength: 255 }), Type.Null()], { description: 'Table/entity kind the row is about' }),\n ),\n related_id: Type.Optional(\n Type.Union([Type.String({ maxLength: 255 }), Type.Null()], {\n description: 'Id of the related entity, as a string',\n }),\n ),\n code: Type.Optional(Type.Union([processLogCodeSchema, Type.Null()])),\n log: Type.String({ description: 'Short human-readable message' }),\n long_log: Type.Optional(Type.Union([Type.String(), Type.Null()], { description: 'Extended message, when needed' })),\n extra_data: Type.Optional(\n Type.Union([Type.Record(Type.String(), Type.Unknown()), Type.Null()], {\n description: 'Structured data specific to `code` — see the per-code schemas for the trigger-engine codes',\n }),\n ),\n type: processLogTypeSchema,\n requires_attention: Type.Optional(Type.Boolean({ description: 'Whether the row needs a human to review it' })),\n reviewed: Type.Optional(Type.Boolean({ description: 'Whether the row has been reviewed' })),\n reviewed_date: Type.Optional(\n Type.Union([Type.String(), Type.Null()], {\n description: `When the row was reviewed. Null while unreviewed. ${EMITTED_DATETIME_NOTE}`,\n }),\n ),\n // Correlation to a parent row (#348): a `trigger_action` row's parent is the `trigger_evaluation`\n // (or `trigger_error`) row of the trigger that ran it, so an action's trace can always be walked\n // back to the evaluation that triggered it. Optional/nullable because most rows (bulk upload,\n // the trigger-evaluation row itself) have no parent, and because the column is applied out of\n // band per ecosystem — see README.md — so it may be entirely absent from a given row's database.\n parent_id: Type.Optional(\n Type.Union([Type.Number(), Type.Null()], {\n description: \"Id of this row's parent process_log row, when it has one\",\n }),\n ),\n // `subject_*` vs `related_*` (both #348, see README.md \"`related_*` vs `subject_*`\"):\n // `related_model`/`related_id` above name the row's own subject — the trigger or the action the\n // row is about. `subject_model`/`subject_id` name the domain entity that originated the\n // execution (a patient, a form...), so \"what triggers ran from this entity\" can be answered by\n // filtering on them. A `trigger_action` row inherits the same subject as the `trigger_evaluation`\n // row of the trigger that ran it — it is the batch's subject, not the action's own. Optional/\n // nullable for the same two reasons as `parent_id`: most rows have none (there may be no\n // resolvable subject for a batch, or the row predates this column), and the column is applied\n // out of band per ecosystem, so it may be entirely absent from a given row's database.\n subject_model: Type.Optional(\n Type.Union([Type.String({ maxLength: 255 }), Type.Null()], {\n description: 'Domain entity kind that originated the execution (e.g. patient), when resolvable',\n }),\n ),\n subject_id: Type.Optional(\n Type.Union([Type.String({ maxLength: 255 }), Type.Null()], {\n description: 'Id of the domain entity that originated the execution, as a string, when resolvable',\n }),\n ),\n expires_at: Type.Optional(\n Type.Union([Type.String(), Type.Null()], {\n description: `Retention deadline; the row is purged after it, and never expires when null. ${EMITTED_DATETIME_NOTE}`,\n examples: [API_DATETIME_EXAMPLE],\n }),\n ),\n created_at: Type.Optional(\n Type.String({\n description: `When the row was created. ${EMITTED_DATETIME_NOTE}`,\n examples: [API_DATETIME_EXAMPLE],\n }),\n ),\n mod_time: Type.Optional(\n Type.String({\n description: `When the row was last modified. ${EMITTED_DATETIME_NOTE}`,\n examples: [API_DATETIME_EXAMPLE],\n }),\n ),\n },\n { title: 'ProcessLog', description: 'A process_log row' },\n)\nexport type ProcessLogData = Static<typeof processLogSchema>\n\n// ── list query filters ────────────────────────────────────────────────────\n// Filters of the (upcoming) list endpoint, on top of the pagination query — see `alert.schema.ts`\n// `listAlertQuerySchema` for the sibling precedent. Everything is optional: with none of them the\n// endpoint lists everything in scope. Exported for the endpoint (implemented separately) to consume.\nexport const listProcessLogQuerySchema = Type.Object(\n {\n code: Type.Optional(processLogCodeSchema),\n type: Type.Optional(processLogTypeSchema),\n related_model: Type.Optional(Type.String({ description: 'Filter by the related entity kind' })),\n related_id: Type.Optional(Type.String({ description: 'Filter by the id of the related entity' })),\n parent_id: Type.Optional(Type.Number({ description: 'Filter by the id of the parent process_log row' })),\n subject_model: Type.Optional(\n Type.String({ description: 'Filter by the domain entity kind that originated the execution' }),\n ),\n subject_id: Type.Optional(\n Type.String({ description: 'Filter by the id of the domain entity that originated the execution' }),\n ),\n requires_attention: Type.Optional(Type.Boolean({ description: 'Filter by whether the row needs review' })),\n reviewed: Type.Optional(Type.Boolean({ description: 'Filter by whether the row has been reviewed' })),\n // `apiDateTime`, not a bare string: it carries `format: 'date-time'`, so a malformed value is\n // rejected by the validator as a 400. A plain `Type.String` accepts anything and hands it to\n // `getMySQLDateTime(value, true)`, which throws a `PublicApiError` with no `statusCode` — a 500\n // for what is a bad request. Same type `alert.schema.ts` uses for its datetime fields.\n created_from: Type.Optional(\n Type.Union([apiDateTime], {\n description: `Only rows created at or after this instant. ${API_DATETIME_ACCEPTED_NOTE}. ${EMITTED_DATETIME_NOTE}`,\n examples: [API_DATETIME_EXAMPLE],\n }),\n ),\n created_to: Type.Optional(\n Type.Union([apiDateTime], {\n description: `Only rows created at or before this instant. ${API_DATETIME_ACCEPTED_NOTE}. ${EMITTED_DATETIME_NOTE}`,\n examples: [API_DATETIME_EXAMPLE],\n }),\n ),\n },\n { title: 'ListProcessLogQuery', description: 'Filters available on the process_log list' },\n)\n// `StaticDecode`, not `Static`: this type describes what the *handler receives*, and the two date\n// bounds carry `apiDateTime`, so they arrive decoded to a `Date`. `Static` would type them as the\n// strings the client sent and the service would format something it never gets.\nexport type ListProcessLogQuery = StaticDecode<typeof listProcessLogQuerySchema>\n"],"names":[],"mappings":"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"}
@@ -1,12 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const dates_schema = require("./dates.schema-npKpToAJ.cjs");
3
4
  const dates_helper = require("./dates.helper-CDM5aEJG.cjs");
4
- 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 `±HH:MM` (`+01` and `+0100` are a 400). A lowercase `t`/`z` and a fractional second are fine";
5
- const API_DATETIME_EXAMPLE = "2026-01-15T10:30:00Z";
6
- const EMITTED_DATETIME_NOTE = "Emitted as ISO-8601 in UTC";
5
+ exports.API_DATETIME_ACCEPTED_NOTE = dates_schema.API_DATETIME_ACCEPTED_NOTE;
6
+ exports.API_DATETIME_EXAMPLE = dates_schema.API_DATETIME_EXAMPLE;
7
+ exports.EMITTED_DATETIME_NOTE = dates_schema.EMITTED_DATETIME_NOTE;
8
+ exports.apiDateTime = dates_schema.apiDateTime;
7
9
  exports.getPeriodStart = dates_helper.getPeriodStart;
8
10
  exports.subtractPeriods = dates_helper.subtractPeriods;
9
- exports.API_DATETIME_ACCEPTED_NOTE = API_DATETIME_ACCEPTED_NOTE;
10
- exports.API_DATETIME_EXAMPLE = API_DATETIME_EXAMPLE;
11
- exports.EMITTED_DATETIME_NOTE = EMITTED_DATETIME_NOTE;
12
11
  //# sourceMappingURL=global-dates.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"global-dates.cjs","sources":["../../src/v2/modules/global/dates/dates.schema.ts"],"sourcesContent":["/**\n * Generic calendar unit shared by the date primitives. Pure type — the calendar arithmetic that\n * consumes it lives in `dates.helper.ts`. Domain modules that need a narrower alias (e.g. the trend\n * widget's `TrendWindowUnit`) build it on top of this one, so the set of units is defined once here.\n */\nexport type PeriodUnit = 'hour' | 'day' | 'week' | 'month'\n\n/**\n * Datetimes a request carries are declared with `format: 'date-time'` (RFC 3339): a date and a time\n * separated by `T`, an optional fraction, and a mandatory offset (`Z` or `±HH:MM`). The offset names\n * the instant; the service converts it to UTC for the column.\n *\n * The format is TypeBox's, not `ajv-formats`': routes compile through `TypeBoxValidatorCompiler`\n * (`app.ts`), and `ajv-formats` only validates the v1/Objection layer. Which one runs matters,\n * because TypeBox's is the stricter of the two and the difference is visible from outside:\n *\n * - It splits the value on `/T/i` alone, so `T`/`t` is the only separator — a space is a 400.\n * - Its offset is `(?:Z|([+-])(\\d\\d):(\\d\\d))?`, so the minutes are not optional: `+01` is a 400,\n * and so is `+0100` without the colon. That is what keeps `dayjs.utc()` from ever seeing an\n * hour-only offset, which it cannot read — it would fall back to parsing the value as a bare wall\n * clock and drop the offset, storing an instant an hour off with no error.\n * - It bounds the offset to `±23:59` (`tzH > 23 || tzM > 59`), so `+99:99` is a 400, and it checks\n * the calendar (`IsDate`, leap years included), so `2026-02-31T00:00:00Z` is a 400 before any\n * handler runs. The bound is RFC 3339's and not the tz database's, so it also takes offsets no\n * zone uses (`-14:00`, `+23:59`) — each still names one unambiguous instant, so what gets stored\n * is right.\n *\n * A `pattern` alongside the format would be dead weight: everything one could reasonably spell in it\n * is already a subset of what the format checks, and a stricter one drifts silently the day either\n * side changes. This was tried and removed (persei/tasks#294).\n *\n * This is that contract in one sentence, for the description of a request field: what the format\n * takes and, just as important, the two near-miss spellings a client is likely to try.\n */\nexport const API_DATETIME_ACCEPTED_NOTE =\n 'Only this spelling is accepted: `T` as the separator (a space is a 400) and an offset with minutes, either `Z` or `±HH:MM` (`+01` and `+0100` are a 400). A lowercase `t`/`z` and a fractional second are fine'\n\n/** An RFC 3339 datetime, for schema examples and API documentation. */\nexport const API_DATETIME_EXAMPLE = '2026-01-15T10:30:00Z'\n\n/**\n * What a datetime *coming out* of the API looks like, for the description of a response field.\n *\n * The outbound shape is narrower than the inbound one and no pattern states it: datetimes leave the\n * column as `Date` and are serialised by `fast-json-stringify` with `.toISOString()`, so the schema\n * never validates what is emitted. Saying it in the description is what puts it in the published\n * spec, which is where a client reads the contract from.\n */\nexport const EMITTED_DATETIME_NOTE = 'Emitted as ISO-8601 in UTC'\n"],"names":[],"mappings":";;;AAkCO,MAAM,6BACX;AAGK,MAAM,uBAAuB;AAU7B,MAAM,wBAAwB;;;;;;"}
1
+ {"version":3,"file":"global-dates.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;"}
@@ -1,11 +1,10 @@
1
+ import { A, a, E, b } from "./dates.schema-BqkBcmM6.js";
1
2
  import { g, s } from "./dates.helper-XRCJ_UAQ.js";
2
- 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 `±HH:MM` (`+01` and `+0100` are a 400). A lowercase `t`/`z` and a fractional second are fine";
3
- const API_DATETIME_EXAMPLE = "2026-01-15T10:30:00Z";
4
- const EMITTED_DATETIME_NOTE = "Emitted as ISO-8601 in UTC";
5
3
  export {
6
- API_DATETIME_ACCEPTED_NOTE,
7
- API_DATETIME_EXAMPLE,
8
- EMITTED_DATETIME_NOTE,
4
+ A as API_DATETIME_ACCEPTED_NOTE,
5
+ a as API_DATETIME_EXAMPLE,
6
+ E as EMITTED_DATETIME_NOTE,
7
+ b as apiDateTime,
9
8
  g as getPeriodStart,
10
9
  s as subtractPeriods
11
10
  };
@@ -1 +1 @@
1
- {"version":3,"file":"global-dates.mjs","sources":["../../src/v2/modules/global/dates/dates.schema.ts"],"sourcesContent":["/**\n * Generic calendar unit shared by the date primitives. Pure type — the calendar arithmetic that\n * consumes it lives in `dates.helper.ts`. Domain modules that need a narrower alias (e.g. the trend\n * widget's `TrendWindowUnit`) build it on top of this one, so the set of units is defined once here.\n */\nexport type PeriodUnit = 'hour' | 'day' | 'week' | 'month'\n\n/**\n * Datetimes a request carries are declared with `format: 'date-time'` (RFC 3339): a date and a time\n * separated by `T`, an optional fraction, and a mandatory offset (`Z` or `±HH:MM`). The offset names\n * the instant; the service converts it to UTC for the column.\n *\n * The format is TypeBox's, not `ajv-formats`': routes compile through `TypeBoxValidatorCompiler`\n * (`app.ts`), and `ajv-formats` only validates the v1/Objection layer. Which one runs matters,\n * because TypeBox's is the stricter of the two and the difference is visible from outside:\n *\n * - It splits the value on `/T/i` alone, so `T`/`t` is the only separator — a space is a 400.\n * - Its offset is `(?:Z|([+-])(\\d\\d):(\\d\\d))?`, so the minutes are not optional: `+01` is a 400,\n * and so is `+0100` without the colon. That is what keeps `dayjs.utc()` from ever seeing an\n * hour-only offset, which it cannot read — it would fall back to parsing the value as a bare wall\n * clock and drop the offset, storing an instant an hour off with no error.\n * - It bounds the offset to `±23:59` (`tzH > 23 || tzM > 59`), so `+99:99` is a 400, and it checks\n * the calendar (`IsDate`, leap years included), so `2026-02-31T00:00:00Z` is a 400 before any\n * handler runs. The bound is RFC 3339's and not the tz database's, so it also takes offsets no\n * zone uses (`-14:00`, `+23:59`) — each still names one unambiguous instant, so what gets stored\n * is right.\n *\n * A `pattern` alongside the format would be dead weight: everything one could reasonably spell in it\n * is already a subset of what the format checks, and a stricter one drifts silently the day either\n * side changes. This was tried and removed (persei/tasks#294).\n *\n * This is that contract in one sentence, for the description of a request field: what the format\n * takes and, just as important, the two near-miss spellings a client is likely to try.\n */\nexport const API_DATETIME_ACCEPTED_NOTE =\n 'Only this spelling is accepted: `T` as the separator (a space is a 400) and an offset with minutes, either `Z` or `±HH:MM` (`+01` and `+0100` are a 400). A lowercase `t`/`z` and a fractional second are fine'\n\n/** An RFC 3339 datetime, for schema examples and API documentation. */\nexport const API_DATETIME_EXAMPLE = '2026-01-15T10:30:00Z'\n\n/**\n * What a datetime *coming out* of the API looks like, for the description of a response field.\n *\n * The outbound shape is narrower than the inbound one and no pattern states it: datetimes leave the\n * column as `Date` and are serialised by `fast-json-stringify` with `.toISOString()`, so the schema\n * never validates what is emitted. Saying it in the description is what puts it in the published\n * spec, which is where a client reads the contract from.\n */\nexport const EMITTED_DATETIME_NOTE = 'Emitted as ISO-8601 in UTC'\n"],"names":[],"mappings":";AAkCO,MAAM,6BACX;AAGK,MAAM,uBAAuB;AAU7B,MAAM,wBAAwB;"}
1
+ {"version":3,"file":"global-dates.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -9497,6 +9497,249 @@ export type RunManualTrigger404AllOfThree = {
9497
9497
  * Error when the resource is not found
9498
9498
  */
9499
9499
  export type RunManualTrigger404 = RunManualTrigger404AllOf & RunManualTrigger404AllOfThree;
9500
+ export type ListProcessLogsParams = {
9501
+ /**
9502
+ * Page number starting from 0
9503
+ */
9504
+ page?: number;
9505
+ /**
9506
+ * The number of items per page
9507
+ */
9508
+ perPage?: number;
9509
+ /**
9510
+ * What kind of event a process_log row records, and what shape its extra_data takes
9511
+ */
9512
+ code?: ListProcessLogsCode;
9513
+ /**
9514
+ * Severity of the log row (not a layout/kind marker): LOG, RESULT, WARNING or ERROR
9515
+ */
9516
+ type?: ListProcessLogsType;
9517
+ /**
9518
+ * Filter by the related entity kind
9519
+ */
9520
+ related_model?: string;
9521
+ /**
9522
+ * Filter by the id of the related entity
9523
+ */
9524
+ related_id?: string;
9525
+ /**
9526
+ * Filter by the id of the parent process_log row
9527
+ */
9528
+ parent_id?: number;
9529
+ /**
9530
+ * Filter by the domain entity kind that originated the execution
9531
+ */
9532
+ subject_model?: string;
9533
+ /**
9534
+ * Filter by the id of the domain entity that originated the execution
9535
+ */
9536
+ subject_id?: string;
9537
+ /**
9538
+ * Filter by whether the row needs review
9539
+ */
9540
+ requires_attention?: boolean;
9541
+ /**
9542
+ * Filter by whether the row has been reviewed
9543
+ */
9544
+ reviewed?: boolean;
9545
+ /**
9546
+ * Only rows created at or after this instant. Only this spelling is accepted: `T` as the separator (a space is a 400) and an offset with minutes, either `Z` or `±HH:MM` (`+01` and `+0100` are a 400). A lowercase `t`/`z` and a fractional second are fine. Emitted as ISO-8601 in UTC
9547
+ */
9548
+ created_from?: string;
9549
+ /**
9550
+ * Only rows created at or before this instant. Only this spelling is accepted: `T` as the separator (a space is a 400) and an offset with minutes, either `Z` or `±HH:MM` (`+01` and `+0100` are a 400). A lowercase `t`/`z` and a fractional second are fine. Emitted as ISO-8601 in UTC
9551
+ */
9552
+ created_to?: string;
9553
+ };
9554
+ export type ListProcessLogsCode = (typeof ListProcessLogsCode)[keyof typeof ListProcessLogsCode];
9555
+ export declare const ListProcessLogsCode: {
9556
+ readonly bulk_upload_batch: "bulk_upload_batch";
9557
+ readonly bulk_upload_success: "bulk_upload_success";
9558
+ readonly bulk_upload_error: "bulk_upload_error";
9559
+ readonly trigger_evaluation: "trigger_evaluation";
9560
+ readonly trigger_error: "trigger_error";
9561
+ readonly trigger_action: "trigger_action";
9562
+ };
9563
+ export type ListProcessLogsType = (typeof ListProcessLogsType)[keyof typeof ListProcessLogsType];
9564
+ export declare const ListProcessLogsType: {
9565
+ readonly NUMBER_0: 0;
9566
+ readonly NUMBER_1: 1;
9567
+ readonly NUMBER_MINUS_1: -1;
9568
+ readonly NUMBER_MINUS_2: -2;
9569
+ };
9570
+ /**
9571
+ * Project this row belongs to, when scoped to one
9572
+ */
9573
+ export type ListProcessLogs200ResultsItemProjectId = number | null;
9574
+ /**
9575
+ * User who caused the row to be written, when a user did
9576
+ */
9577
+ export type ListProcessLogs200ResultsItemCreatedUser = number | null;
9578
+ /**
9579
+ * Table/entity kind the row is about
9580
+ */
9581
+ export type ListProcessLogs200ResultsItemRelatedModel = string | null;
9582
+ /**
9583
+ * Id of the related entity, as a string
9584
+ */
9585
+ export type ListProcessLogs200ResultsItemRelatedId = string | null;
9586
+ export type ListProcessLogs200ResultsItemCode = 'bulk_upload_batch' | 'bulk_upload_success' | 'bulk_upload_error' | 'trigger_evaluation' | 'trigger_error' | 'trigger_action' | null;
9587
+ /**
9588
+ * Extended message, when needed
9589
+ */
9590
+ export type ListProcessLogs200ResultsItemLongLog = string | null;
9591
+ export type ListProcessLogs200ResultsItemExtraDataAnyOf = {
9592
+ [key: string]: unknown;
9593
+ };
9594
+ /**
9595
+ * Structured data specific to `code` — see the per-code schemas for the trigger-engine codes
9596
+ */
9597
+ export type ListProcessLogs200ResultsItemExtraData = ListProcessLogs200ResultsItemExtraDataAnyOf | null;
9598
+ /**
9599
+ * Severity of the log row (not a layout/kind marker): LOG, RESULT, WARNING or ERROR
9600
+ */
9601
+ export type ListProcessLogs200ResultsItemType = (typeof ListProcessLogs200ResultsItemType)[keyof typeof ListProcessLogs200ResultsItemType];
9602
+ export declare const ListProcessLogs200ResultsItemType: {
9603
+ readonly NUMBER_0: 0;
9604
+ readonly NUMBER_1: 1;
9605
+ readonly NUMBER_MINUS_1: -1;
9606
+ readonly NUMBER_MINUS_2: -2;
9607
+ };
9608
+ /**
9609
+ * When the row was reviewed. Null while unreviewed. Emitted as ISO-8601 in UTC
9610
+ */
9611
+ export type ListProcessLogs200ResultsItemReviewedDate = string | null;
9612
+ /**
9613
+ * Id of this row's parent process_log row, when it has one
9614
+ */
9615
+ export type ListProcessLogs200ResultsItemParentId = number | null;
9616
+ /**
9617
+ * Domain entity kind that originated the execution (e.g. patient), when resolvable
9618
+ */
9619
+ export type ListProcessLogs200ResultsItemSubjectModel = string | null;
9620
+ /**
9621
+ * Id of the domain entity that originated the execution, as a string, when resolvable
9622
+ */
9623
+ export type ListProcessLogs200ResultsItemSubjectId = string | null;
9624
+ /**
9625
+ * Retention deadline; the row is purged after it, and never expires when null. Emitted as ISO-8601 in UTC
9626
+ */
9627
+ export type ListProcessLogs200ResultsItemExpiresAt = string | null;
9628
+ /**
9629
+ * A process_log row
9630
+ */
9631
+ export type ListProcessLogs200ResultsItem = {
9632
+ /** Unique identifier of the row */
9633
+ id: number;
9634
+ /** Project this row belongs to, when scoped to one */
9635
+ project_id?: ListProcessLogs200ResultsItemProjectId;
9636
+ /** User who caused the row to be written, when a user did */
9637
+ created_user?: ListProcessLogs200ResultsItemCreatedUser;
9638
+ /** Table/entity kind the row is about */
9639
+ related_model?: ListProcessLogs200ResultsItemRelatedModel;
9640
+ /** Id of the related entity, as a string */
9641
+ related_id?: ListProcessLogs200ResultsItemRelatedId;
9642
+ code?: ListProcessLogs200ResultsItemCode;
9643
+ /** Short human-readable message */
9644
+ log: string;
9645
+ /** Extended message, when needed */
9646
+ long_log?: ListProcessLogs200ResultsItemLongLog;
9647
+ /** Structured data specific to `code` — see the per-code schemas for the trigger-engine codes */
9648
+ extra_data?: ListProcessLogs200ResultsItemExtraData;
9649
+ /** Severity of the log row (not a layout/kind marker): LOG, RESULT, WARNING or ERROR */
9650
+ type: ListProcessLogs200ResultsItemType;
9651
+ /** Whether the row needs a human to review it */
9652
+ requires_attention?: boolean;
9653
+ /** Whether the row has been reviewed */
9654
+ reviewed?: boolean;
9655
+ /** When the row was reviewed. Null while unreviewed. Emitted as ISO-8601 in UTC */
9656
+ reviewed_date?: ListProcessLogs200ResultsItemReviewedDate;
9657
+ /** Id of this row's parent process_log row, when it has one */
9658
+ parent_id?: ListProcessLogs200ResultsItemParentId;
9659
+ /** Domain entity kind that originated the execution (e.g. patient), when resolvable */
9660
+ subject_model?: ListProcessLogs200ResultsItemSubjectModel;
9661
+ /** Id of the domain entity that originated the execution, as a string, when resolvable */
9662
+ subject_id?: ListProcessLogs200ResultsItemSubjectId;
9663
+ /** Retention deadline; the row is purged after it, and never expires when null. Emitted as ISO-8601 in UTC */
9664
+ expires_at?: ListProcessLogs200ResultsItemExpiresAt;
9665
+ /** When the row was created. Emitted as ISO-8601 in UTC */
9666
+ created_at?: string;
9667
+ /** When the row was last modified. Emitted as ISO-8601 in UTC */
9668
+ mod_time?: string;
9669
+ };
9670
+ /**
9671
+ * Paginated response
9672
+ */
9673
+ export type ListProcessLogs200 = {
9674
+ /** Array of items of the current page */
9675
+ results: ListProcessLogs200ResultsItem[];
9676
+ /** Total number of items not in this page but in the whole query */
9677
+ total: number;
9678
+ };
9679
+ /**
9680
+ * Debug information of the error
9681
+ */
9682
+ export type ListProcessLogs403AllOfDebug = {
9683
+ [key: string]: unknown;
9684
+ };
9685
+ export type ListProcessLogs403AllOf = {
9686
+ /** HTTP status code */
9687
+ statusCode: number;
9688
+ /** Error code */
9689
+ error: string;
9690
+ /** Localized error message */
9691
+ message: string;
9692
+ /** Debug information of the error */
9693
+ debug?: ListProcessLogs403AllOfDebug;
9694
+ };
9695
+ export type ListProcessLogs403AllOfThreeStatusCode = (typeof ListProcessLogs403AllOfThreeStatusCode)[keyof typeof ListProcessLogs403AllOfThreeStatusCode];
9696
+ export declare const ListProcessLogs403AllOfThreeStatusCode: {
9697
+ readonly NUMBER_403: 403;
9698
+ };
9699
+ export type ListProcessLogs403AllOfThreeError = (typeof ListProcessLogs403AllOfThreeError)[keyof typeof ListProcessLogs403AllOfThreeError];
9700
+ export declare const ListProcessLogs403AllOfThreeError: {
9701
+ readonly 'forbidden-error': "forbidden-error";
9702
+ };
9703
+ export type ListProcessLogs403AllOfThree = {
9704
+ statusCode: ListProcessLogs403AllOfThreeStatusCode;
9705
+ error: ListProcessLogs403AllOfThreeError;
9706
+ };
9707
+ /**
9708
+ * Error when the user is forbidden to access the resource
9709
+ */
9710
+ export type ListProcessLogs403 = ListProcessLogs403AllOf & ListProcessLogs403AllOfThree;
9711
+ /**
9712
+ * Debug information of the error
9713
+ */
9714
+ export type ListProcessLogs404AllOfDebug = {
9715
+ [key: string]: unknown;
9716
+ };
9717
+ export type ListProcessLogs404AllOf = {
9718
+ /** HTTP status code */
9719
+ statusCode: number;
9720
+ /** Error code */
9721
+ error: string;
9722
+ /** Localized error message */
9723
+ message: string;
9724
+ /** Debug information of the error */
9725
+ debug?: ListProcessLogs404AllOfDebug;
9726
+ };
9727
+ export type ListProcessLogs404AllOfThreeStatusCode = (typeof ListProcessLogs404AllOfThreeStatusCode)[keyof typeof ListProcessLogs404AllOfThreeStatusCode];
9728
+ export declare const ListProcessLogs404AllOfThreeStatusCode: {
9729
+ readonly NUMBER_404: 404;
9730
+ };
9731
+ export type ListProcessLogs404AllOfThreeError = (typeof ListProcessLogs404AllOfThreeError)[keyof typeof ListProcessLogs404AllOfThreeError];
9732
+ export declare const ListProcessLogs404AllOfThreeError: {
9733
+ readonly 'not-found': "not-found";
9734
+ };
9735
+ export type ListProcessLogs404AllOfThree = {
9736
+ statusCode: ListProcessLogs404AllOfThreeStatusCode;
9737
+ error: ListProcessLogs404AllOfThreeError;
9738
+ };
9739
+ /**
9740
+ * Error when the resource is not found
9741
+ */
9742
+ export type ListProcessLogs404 = ListProcessLogs404AllOf & ListProcessLogs404AllOfThree;
9500
9743
  /**
9501
9744
  * Thryve connection widget URL response
9502
9745
  */
@@ -10788,6 +11031,30 @@ export type runManualTriggerResponseError = (runManualTriggerResponse403 | runMa
10788
11031
  export type runManualTriggerResponse = runManualTriggerResponseSuccess | runManualTriggerResponseError;
10789
11032
  export declare const getRunManualTriggerUrl: (ecosystemName: string, projectName: string, id: number) => string;
10790
11033
  export declare const runManualTrigger: (ecosystemName: string, projectName: string, id: number, runManualTriggerBody: RunManualTriggerBody, options?: RequestInit) => Promise<runManualTriggerResponse>;
11034
+ /**
11035
+ * Get a paginated list of process_log rows of the project, optionally filtered by code, type, related entity, parent, review status or creation date range
11036
+ */
11037
+ export type listProcessLogsResponse200 = {
11038
+ data: ListProcessLogs200;
11039
+ status: 200;
11040
+ };
11041
+ export type listProcessLogsResponse403 = {
11042
+ data: ListProcessLogs403;
11043
+ status: 403;
11044
+ };
11045
+ export type listProcessLogsResponse404 = {
11046
+ data: ListProcessLogs404;
11047
+ status: 404;
11048
+ };
11049
+ export type listProcessLogsResponseSuccess = listProcessLogsResponse200 & {
11050
+ headers: Headers;
11051
+ };
11052
+ export type listProcessLogsResponseError = (listProcessLogsResponse403 | listProcessLogsResponse404) & {
11053
+ headers: Headers;
11054
+ };
11055
+ export type listProcessLogsResponse = listProcessLogsResponseSuccess | listProcessLogsResponseError;
11056
+ export declare const getListProcessLogsUrl: (ecosystemName: string, projectName: string, params?: ListProcessLogsParams) => string;
11057
+ export declare const listProcessLogs: (ecosystemName: string, projectName: string, params?: ListProcessLogsParams, options?: RequestInit) => Promise<listProcessLogsResponse>;
10791
11058
  /**
10792
11059
  * [DEPRECATED] Returns a short-lived URL to embed the Thryve connection widget in an iframe / WebView. The native app builds this URL itself now; kept only for older installed clients. Slated for removal once access logs drop to zero.
10793
11060
  * @deprecated