@persei/perseed-api 5.0.28 → 5.0.30
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.
- package/dist/ecosystem-alert.cjs +245 -0
- package/dist/ecosystem-alert.cjs.map +1 -0
- package/dist/ecosystem-alert.d.ts +1 -0
- package/dist/ecosystem-alert.mjs +245 -0
- package/dist/ecosystem-alert.mjs.map +1 -0
- package/dist/ecosystem-process-log.cjs.map +1 -1
- package/dist/ecosystem-process-log.mjs.map +1 -1
- package/dist/src/controllers/ApiActionController.d.ts.map +1 -1
- package/dist/src/helpers/action-payload.test.d.ts +2 -0
- package/dist/src/helpers/action-payload.test.d.ts.map +1 -0
- package/dist/src/helpers/actionPayload.d.ts +11 -0
- package/dist/src/helpers/actionPayload.d.ts.map +1 -0
- package/dist/src/models/project/Displayer.d.ts.map +1 -1
- package/dist/src/models/project/encrypted-conditions.d.ts +21 -0
- package/dist/src/models/project/encrypted-conditions.d.ts.map +1 -0
- package/dist/src/models/project/encrypted-conditions.test.d.ts +2 -0
- package/dist/src/models/project/encrypted-conditions.test.d.ts.map +1 -0
- package/dist/src/schemas/notification_configuration/types.d.ts +3 -1
- package/dist/src/schemas/notification_configuration/types.d.ts.map +1 -1
- package/dist/src/v2/modules/ecosystem/action-system/action-system.service/trigger-engine.service.d.ts +1 -1
- package/dist/src/v2/modules/ecosystem/action-system/action-system.service/trigger-engine.service.d.ts.map +1 -1
- package/dist/src/v2/modules/ecosystem/alert/{alert.helper.d.ts → alert.helper/alert.helper.d.ts} +2 -2
- package/dist/src/v2/modules/ecosystem/alert/alert.helper/alert.helper.d.ts.map +1 -0
- package/dist/src/v2/modules/ecosystem/alert/alert.helper/alert.helper.test.d.ts.map +1 -0
- package/dist/src/v2/modules/ecosystem/alert/alert.helper/index.d.ts +3 -0
- package/dist/src/v2/modules/ecosystem/alert/alert.helper/index.d.ts.map +1 -0
- package/dist/src/v2/modules/ecosystem/alert/alert.schema.d.ts +43 -0
- package/dist/src/v2/modules/ecosystem/alert/alert.schema.d.ts.map +1 -1
- package/dist/src/v2/modules/ecosystem/alert/index.d.ts +2 -1
- package/dist/src/v2/modules/ecosystem/alert/index.d.ts.map +1 -1
- package/dist/src/v2/modules/ecosystem/alert/lib.d.ts +2 -0
- package/dist/src/v2/modules/ecosystem/alert/lib.d.ts.map +1 -0
- package/dist/src/v2/modules/ecosystem/process-log/process-log.schema.d.ts.map +1 -1
- package/dist/src/v2/modules/global/jsonlogic-to-sql/jsonlogic-to-sql.helper.d.ts.map +1 -1
- package/dist/v1/perseed-api.cjs +2 -0
- package/dist/v1/perseed-api.cjs.map +1 -1
- package/dist/v1/perseed-api.mjs +2 -0
- package/dist/v1/perseed-api.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/src/v2/modules/ecosystem/alert/alert.helper.d.ts.map +0 -1
- package/dist/src/v2/modules/ecosystem/alert/alert.helper.test.d.ts.map +0 -1
- /package/dist/src/v2/modules/ecosystem/alert/{alert.helper.test.d.ts → alert.helper/alert.helper.test.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ecosystem-process-log.cjs","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 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 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":["Type","EMITTED_DATETIME_NOTE","API_DATETIME_EXAMPLE","apiDateTime","API_DATETIME_ACCEPTED_NOTE"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ecosystem-process-log.cjs","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 case where `no-restricted-imports` has to give way, as `alert.schema.ts` also\n// does for the same reason.\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 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 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":["Type","EMITTED_DATETIME_NOTE","API_DATETIME_EXAMPLE","apiDateTime","API_DATETIME_ACCEPTED_NOTE"],"mappings":"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"}
|
|
@@ -1 +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 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 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
|
+
{"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 case where `no-restricted-imports` has to give way, as `alert.schema.ts` also\n// does for the same reason.\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 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 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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ApiActionController.d.ts","sourceRoot":"","sources":["../../../../src/controllers/ApiActionController.ts"],"names":[],"mappings":"AAEA,OAAO,cAAc,MAAM,kCAAkC,CAAA;AAI7D,OAAO,EACL,SAAS,EAKT,oBAAoB,EAGrB,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"ApiActionController.d.ts","sourceRoot":"","sources":["../../../../src/controllers/ApiActionController.ts"],"names":[],"mappings":"AAEA,OAAO,cAAc,MAAM,kCAAkC,CAAA;AAI7D,OAAO,EACL,SAAS,EAKT,oBAAoB,EAGrB,MAAM,YAAY,CAAA;AAgBnB,iBAAe,WAAW,CACxB,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,WAAW,CAAC,EAAE,oBAAoB,GACjC,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,CAkG1B;AAED,QAAA,MAAM,mBAAmB;;CAExB,CAAA;AAED,eAAe,mBAAmB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-payload.test.d.ts","sourceRoot":"","sources":["../../../../src/helpers/action-payload.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { TSchema } from 'typebox';
|
|
2
|
+
/**
|
|
3
|
+
* Turns the Handlebars-compiled payload of an action into the typed shape its schema declares, so
|
|
4
|
+
* the action receives values and not the strings every template renders.
|
|
5
|
+
*
|
|
6
|
+
* `Value.Check` runs before `Value.Decode` because the decode throws an error naming nothing, while
|
|
7
|
+
* `Value.Errors` names the field — and that message is what an administrator reads in `process_log`
|
|
8
|
+
* to find out why their action did not run.
|
|
9
|
+
*/
|
|
10
|
+
export declare function decodePayload<T>(schema: TSchema, compiled: Record<string, unknown>, keys: Record<string, unknown>, action: string): T;
|
|
11
|
+
//# sourceMappingURL=actionPayload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actionPayload.d.ts","sourceRoot":"","sources":["../../../../src/helpers/actionPayload.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AA6CtC;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAC7B,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,MAAM,GACb,CAAC,CAyBH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Displayer.d.ts","sourceRoot":"","sources":["../../../../../src/models/project/Displayer.ts"],"names":[],"mappings":"AAIA,OAAO,WAAW,MAAM,eAAe,CAAA;AAYvC,OAAO,cAAc,EAAE,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAoBhF;;;GAGG;AAEH;;;;GAIG;AAEH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,oBAAoB,EAC/B,QAAQ,EAAE,MAAM,EAChB,WAAW,UAAQ,EACnB,UAAU,CAAC,EAAE,GAAG,EAAE,OAixBnB;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,cAAc,EACnB,gBAAgB,CAAC,EAAE,MAAM,EACzB,WAAW,UAAQ,EACnB,UAAU,CAAC,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"Displayer.d.ts","sourceRoot":"","sources":["../../../../../src/models/project/Displayer.ts"],"names":[],"mappings":"AAIA,OAAO,WAAW,MAAM,eAAe,CAAA;AAYvC,OAAO,cAAc,EAAE,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAoBhF;;;GAGG;AAEH;;;;GAIG;AAEH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,WAAW,EACjB,SAAS,EAAE,oBAAoB,EAC/B,QAAQ,EAAE,MAAM,EAChB,WAAW,UAAQ,EACnB,UAAU,CAAC,EAAE,GAAG,EAAE,OAixBnB;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,WAAW,EACjB,GAAG,EAAE,cAAc,EACnB,gBAAgB,CAAC,EAAE,MAAM,EACzB,WAAW,UAAQ,EACnB,UAAU,CAAC,EAAE,WAAW,EAAE,OAwG3B"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** Answers whether the column a condition names is stored encrypted. */
|
|
2
|
+
type IsEncryptedColumn = (column: string) => boolean;
|
|
3
|
+
/**
|
|
4
|
+
* Rewrites, in place, every condition of a query that reads an encrypted column so that it reads
|
|
5
|
+
* the decrypted value instead.
|
|
6
|
+
*
|
|
7
|
+
* **Why in place, and not by replacing the operation.** An encrypted condition can sit inside a
|
|
8
|
+
* nested `AND`/`OR` group. Removing it and appending a `whereRaw` would move it to whichever
|
|
9
|
+
* builder is being visited, changing which group it belongs to — and with it the boolean meaning of
|
|
10
|
+
* the filter. Swapping the operand leaves the condition exactly where the caller put it.
|
|
11
|
+
*
|
|
12
|
+
* **Why it recurses through callbacks.** A nested group reaches `onBuild` as a single operation
|
|
13
|
+
* whose only argument is a function; its conditions do not exist yet. Wrapping that callback is
|
|
14
|
+
* what lets the rewrite reach them, at any depth, when the group is finally built. The wrapper is
|
|
15
|
+
* installed once per operation, so building the same query twice does not stack wrappers, and the
|
|
16
|
+
* rewrite itself is idempotent: a column already swapped for its decrypted expression no longer
|
|
17
|
+
* looks like a column name.
|
|
18
|
+
*/
|
|
19
|
+
export declare function rewriteEncryptedConditions(builder: any, isEncryptedColumn: IsEncryptedColumn): void;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=encrypted-conditions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encrypted-conditions.d.ts","sourceRoot":"","sources":["../../../../../src/models/project/encrypted-conditions.ts"],"names":[],"mappings":"AAKA,wEAAwE;AACxE,KAAK,iBAAiB,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAA;AAwHpD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,GAAG,EAAE,iBAAiB,EAAE,iBAAiB,GAAG,IAAI,CAmDnG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encrypted-conditions.test.d.ts","sourceRoot":"","sources":["../../../../../src/models/project/encrypted-conditions.test.ts"],"names":[],"mappings":""}
|
|
@@ -8,7 +8,9 @@ export declare enum ApiAction {
|
|
|
8
8
|
EXTERNAL_API_CALL = "external_api_call",
|
|
9
9
|
LOG_CREATE = "log.create",
|
|
10
10
|
BULK_UPLOAD_UPDATE = "bulk_upload.update",
|
|
11
|
-
INVOKE_LAMBDA = "invoke_lambda"
|
|
11
|
+
INVOKE_LAMBDA = "invoke_lambda",
|
|
12
|
+
ALERT_CREATE = "alert.create",
|
|
13
|
+
ALERT_RESOLVE = "alert.resolve"
|
|
12
14
|
}
|
|
13
15
|
export type NotifiedAboutType = `model_${ModelName}` | `model_displayer_${ModelName}` | `model_${ModelName}_${TriggerAction}` | `model_displayer_${ModelName}_${TriggerAction}`;
|
|
14
16
|
export interface CreateTriggerPayload {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/schemas/notification_configuration/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/schemas/notification_configuration/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { default as RequestContext } from '../../../../../models/request/RequestContext';
|
|
2
|
-
import { ApiActionContextData } from '../../../../../schemas/api_action
|
|
2
|
+
import { ApiActionContextData } from '../../../../../schemas/api_action';
|
|
3
3
|
import { EvaluableTrigger, TriggerBatch, TriggerExecutionResult, TriggerRelations, TriggerSource } from '../action-system.schema';
|
|
4
4
|
import { PatientCache } from '../action-system.helper';
|
|
5
5
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trigger-engine.service.d.ts","sourceRoot":"","sources":["../../../../../../../../src/v2/modules/ecosystem/action-system/action-system.service/trigger-engine.service.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,mCAAmC,CAAA;AAQ9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"trigger-engine.service.d.ts","sourceRoot":"","sources":["../../../../../../../../src/v2/modules/ecosystem/action-system/action-system.service/trigger-engine.service.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,mCAAmC,CAAA;AAQ9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAGlE,OAAO,EAKL,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACrB,KAAK,aAAa,EACnB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAQL,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAA;AAahC;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,cAAc,EACnB,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EACjC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,EACnC,SAAS,CAAC,EAAE,gBAAgB,GAAG,IAAI,EACnC,YAAY,CAAC,EAAE,YAAY,GAC1B,OAAO,CAAC;IAAE,OAAO,EAAE,oBAAoB,CAAC;IAAC,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAavE;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,oBAAoB,EAC7B,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,IAAI,GAAG,YAAY,CAAC,GACnD,OAAO,CAAC,OAAO,CAAC,CAIlB;AA0ED;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,cAAc,EACnB,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,oBAAoB,EAC7B,GAAG,EAAE,IAAI,EACT,WAAW,EAAE,yBAAyB,GACrC,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC,CAqDhF;AAID;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,cAAc,EACnB,KAAK,EAAE,YAAY,EACnB,GAAG,EAAE,IAAI,GACR,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAqEnC;AAED,eAAO,MAAM,oBAAoB;;;;;CAKhC,CAAA"}
|
package/dist/src/v2/modules/ecosystem/alert/{alert.helper.d.ts → alert.helper/alert.helper.d.ts}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { QueryBuilder } from 'objection';
|
|
2
|
-
import { default as RequestContext } from '
|
|
3
|
-
import { Alert } from '
|
|
2
|
+
import { default as RequestContext } from '../../../../../models/request/RequestContext';
|
|
3
|
+
import { Alert } from '../alert.model';
|
|
4
4
|
/**
|
|
5
5
|
* Permission preHandler of the write endpoints of this module (create, update, resolve). Reads go
|
|
6
6
|
* through `resolveAlertReadScope` instead, which narrows what is returned rather than refusing.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert.helper.d.ts","sourceRoot":"","sources":["../../../../../../../../src/v2/modules/ecosystem/alert/alert.helper/alert.helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,KAAK,cAAc,MAAM,mCAAmC,CAAA;AAInE,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAEtC;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,uBAAuB,0DAGnC,CAAA;AAED;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAA;IACjB;;;;OAIG;IACH,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB;AAsBD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAO/F;AAyCD;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAI3G"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alert.helper.test.d.ts","sourceRoot":"","sources":["../../../../../../../../src/v2/modules/ecosystem/alert/alert.helper/alert.helper.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../../src/v2/modules/ecosystem/alert/alert.helper/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5F,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -132,6 +132,49 @@ export declare const resolveAlertSchema: Type.TObject<{
|
|
|
132
132
|
resolution_note: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
|
|
133
133
|
}>;
|
|
134
134
|
export type ResolveAlertData = Static<typeof resolveAlertSchema>;
|
|
135
|
+
/**
|
|
136
|
+
* Payload of the `alert.create` action — the create body as it is, `emitter` included: an action is
|
|
137
|
+
* one more client of the endpoint, and nothing is filled in on its behalf. Configuring an action
|
|
138
|
+
* without an emitter fails the same way a request without one does.
|
|
139
|
+
*/
|
|
140
|
+
export declare const createAlertActionSchema: Type.TObject<{
|
|
141
|
+
alert_type_id: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TNull]>>;
|
|
142
|
+
user_id: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TNull]>>;
|
|
143
|
+
patient_id: Type.TOptional<Type.TUnion<[Type.TNumber, Type.TNull]>>;
|
|
144
|
+
severity: Type.TOptional<Type.TUnion<[Type.TEnum<("info" | "low" | "medium" | "high" | "critical")[]>, Type.TNull]>>;
|
|
145
|
+
title: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
|
|
146
|
+
summary: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
|
|
147
|
+
emitter: Type.TObject<{
|
|
148
|
+
type: Type.TEnum<("trigger" | "api" | "webhook")[]>;
|
|
149
|
+
id: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
|
|
150
|
+
name: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
|
|
151
|
+
reference: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
|
|
152
|
+
}>;
|
|
153
|
+
recipients: Type.TOptional<Type.TUnion<[Type.TArray<Type.TObject<{
|
|
154
|
+
type: Type.TString;
|
|
155
|
+
value: Type.TString;
|
|
156
|
+
}>>, Type.TNull]>>;
|
|
157
|
+
related_entities: Type.TOptional<Type.TUnion<[Type.TArray<Type.TObject<{
|
|
158
|
+
type: Type.TString;
|
|
159
|
+
value: Type.TString;
|
|
160
|
+
}>>, Type.TNull]>>;
|
|
161
|
+
payload: Type.TOptional<Type.TUnion<[Type.TRecord<"^.*$", Type.TUnknown>, Type.TNull]>>;
|
|
162
|
+
metadata: Type.TOptional<Type.TUnion<[Type.TRecord<"^.*$", Type.TUnknown>, Type.TNull]>>;
|
|
163
|
+
dedup_key: Type.TOptional<Type.TString>;
|
|
164
|
+
triggered_at: Type.TOptional<Type.TUnion<[Type.TCodec<Type.TString, Date>, Type.TNull]>>;
|
|
165
|
+
}>;
|
|
166
|
+
export type CreateAlertActionData = CreateAlertData;
|
|
167
|
+
/**
|
|
168
|
+
* Payload of the `alert.resolve` action: which alert, and the optional note.
|
|
169
|
+
*
|
|
170
|
+
* `id` is required here and absent from `resolveAlertSchema` because the endpoint takes it from the
|
|
171
|
+
* URL and an action has none — it names the alert in its payload, typically `{{current.id}}`.
|
|
172
|
+
*/
|
|
173
|
+
export declare const resolveAlertActionSchema: Type.TObject<{
|
|
174
|
+
id: Type.TNumber;
|
|
175
|
+
resolution_note: Type.TOptional<Type.TUnion<[Type.TString, Type.TNull]>>;
|
|
176
|
+
}>;
|
|
177
|
+
export type ResolveAlertActionData = StaticDecode<typeof resolveAlertActionSchema>;
|
|
135
178
|
export declare const listAlertQuerySchema: Type.TObject<{
|
|
136
179
|
status: Type.TOptional<Type.TEnum<("active" | "resolved")[]>>;
|
|
137
180
|
severity: Type.TOptional<Type.TEnum<("info" | "low" | "medium" | "high" | "critical")[]>>;
|
|
@@ -1 +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,YAAY,EAAE,MAAM,SAAS,CAAA;
|
|
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,YAAY,EAAE,MAAM,SAAS,CAAA;AAwBpD,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;;;;;;;;;;;;;;;;;;;;;;;;;EAwB7B,CAAA;AAKD,MAAM,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAEpE;;;;;;;GAOG;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAQrE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;EAI5B,CAAA;AACF,MAAM,MAAM,eAAe,GAAG,YAAY,CAAC,OAAO,iBAAiB,CAAC,CAAA;AAOpE,eAAO,MAAM,kBAAkB;;EAO9B,CAAA;AACD,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAOhE;;;;GAIG;AACH,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;EAAoB,CAAA;AACxD,MAAM,MAAM,qBAAqB,GAAG,eAAe,CAAA;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB;;;EAYpC,CAAA;AACD,MAAM,MAAM,sBAAsB,GAAG,YAAY,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAIlF,eAAO,MAAM,oBAAoB;;;;;;EAShC,CAAA;AACD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAA"}
|
|
@@ -4,5 +4,6 @@ export { Alert } from './alert.model';
|
|
|
4
4
|
export { AlertController } from './alert.controller';
|
|
5
5
|
export { requireAlertsManagement, resolveAlertReadScope, scopedQuery } from './alert.helper';
|
|
6
6
|
export { AlertStatus, AlertSeverity, AlertEmitterType } from './alert.schema';
|
|
7
|
-
export
|
|
7
|
+
export { createAlertActionSchema, resolveAlertActionSchema } from './alert.schema';
|
|
8
|
+
export type { AlertData, AlertEmitterData, AlertEntityRefData, CreateAlertData, CreateAlertRequestBody, UpdateAlertData, CreateAlertActionData, ResolveAlertActionData, } from './alert.schema';
|
|
8
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/alert/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AACzG,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5F,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAC7E,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,eAAe,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/alert/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AACzG,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5F,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAC7E,OAAO,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAA;AAClF,YAAY,EACV,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,gBAAgB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/alert/lib.ts"],"names":[],"mappings":"AAEA,cAAc,gBAAgB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-log.schema.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/process-log/process-log.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"process-log.schema.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/ecosystem/process-log/process-log.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AA+BpD,eAAO,MAAM,cAAc;;;;;CAKjB,CAAA;AACV,eAAO,MAAM,oBAAoB,iCAG/B,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAchE,eAAO,MAAM,cAAc;;;;;;;CAUjB,CAAA;AACV,eAAO,MAAM,oBAAoB,+IAG/B,CAAA;AACF,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAA;AAOhE,eAAO,MAAM,gCAAgC;;;;;;;;EAgC5C,CAAA;AACD,MAAM,MAAM,0BAA0B,GAAG,MAAM,CAAC,OAAO,gCAAgC,CAAC,CAAA;AAExF,eAAO,MAAM,2BAA2B;;EAGvC,CAAA;AACD,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAE9E,eAAO,MAAM,4BAA4B;;;;;;;;;;;EAwBxC,CAAA;AACD,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,OAAO,4BAA4B,CAAC,CAAA;AAKhF,eAAO,MAAM,sCAAsC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAalD,CAAA;AACD,MAAM,MAAM,gCAAgC,GAAG,MAAM,CAAC,OAAO,sCAAsC,CAAC,CAAA;AAOpG,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;EAiE5B,CAAA;AACD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,gBAAgB,CAAC,CAAA;AAM5D,eAAO,MAAM,yBAAyB;;;;;;;;;;EA2BrC,CAAA;AAID,MAAM,MAAM,mBAAmB,GAAG,YAAY,CAAC,OAAO,yBAAyB,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jsonlogic-to-sql.helper.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/global/jsonlogic-to-sql/jsonlogic-to-sql.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAA8B,MAAM,WAAW,CAAA;AAKvF,KAAK,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;AACrD,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,SAAS,EAAE,GAAG;IAAE,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAA;AAEjF,KAAK,EAAE,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAEtC,KAAK,cAAc,GAAG;IACpB,EAAE,EAAE,EAAE,CAAA;IACN,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAA;CACzB,CAAA;AAED,KAAK,eAAe,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,IAAI,CAAA;AAsCvE,wBAAgB,WAAW,CAAC,CAAC,GAAG,OAAO,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,CAQ9E;
|
|
1
|
+
{"version":3,"file":"jsonlogic-to-sql.helper.d.ts","sourceRoot":"","sources":["../../../../../../../src/v2/modules/global/jsonlogic-to-sql/jsonlogic-to-sql.helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAA8B,MAAM,WAAW,CAAA;AAKvF,KAAK,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;AACrD,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,SAAS,EAAE,GAAG;IAAE,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAA;AAEjF,KAAK,EAAE,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;AAEtC,KAAK,cAAc,GAAG;IACpB,EAAE,EAAE,EAAE,CAAA;IACN,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAA;CACzB,CAAA;AAED,KAAK,eAAe,GAAG,CAAC,GAAG,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,IAAI,CAAA;AAsCvE,wBAAgB,WAAW,CAAC,CAAC,GAAG,OAAO,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,CAAC,CAQ9E;AAoGD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,SAAS,CAAqC;;IAMtD,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,IAAI;IAI9D,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE;IAQlD,OAAO,CAAC,KAAK;IAoBb,OAAO,CAAC,WAAW;IAoEnB,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,MAAM;IAKd,OAAO,CAAC,qBAAqB;IA2J7B;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,iBAAiB;CAsE1B"}
|
package/dist/v1/perseed-api.cjs
CHANGED
|
@@ -1340,6 +1340,8 @@ var ApiAction = /* @__PURE__ */ ((ApiAction2) => {
|
|
|
1340
1340
|
ApiAction2["LOG_CREATE"] = "log.create";
|
|
1341
1341
|
ApiAction2["BULK_UPLOAD_UPDATE"] = "bulk_upload.update";
|
|
1342
1342
|
ApiAction2["INVOKE_LAMBDA"] = "invoke_lambda";
|
|
1343
|
+
ApiAction2["ALERT_CREATE"] = "alert.create";
|
|
1344
|
+
ApiAction2["ALERT_RESOLVE"] = "alert.resolve";
|
|
1343
1345
|
return ApiAction2;
|
|
1344
1346
|
})(ApiAction || {});
|
|
1345
1347
|
const TriggerAction = {
|