@marinoscar/platform-api 0.1.0-next.18 → 0.1.0-next.20
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/CHANGELOG.md +28 -0
- package/README.md +1 -0
- package/dist/ai/runtime/ai-limits.service.d.ts.map +1 -1
- package/dist/ai/runtime/ai-limits.service.js +8 -1
- package/dist/ai/runtime/ai-limits.service.js.map +1 -1
- package/dist/ai/usage/ai-usage-admin.controller.d.ts +6 -3
- package/dist/ai/usage/ai-usage-admin.controller.d.ts.map +1 -1
- package/dist/ai/usage/ai-usage-admin.controller.js +31 -17
- package/dist/ai/usage/ai-usage-admin.controller.js.map +1 -1
- package/dist/ai/usage/ai-usage.controller.d.ts +5 -2
- package/dist/ai/usage/ai-usage.controller.d.ts.map +1 -1
- package/dist/ai/usage/ai-usage.controller.js +18 -11
- package/dist/ai/usage/ai-usage.controller.js.map +1 -1
- package/dist/ai/usage/ai-usage.service.d.ts +19 -4
- package/dist/ai/usage/ai-usage.service.d.ts.map +1 -1
- package/dist/ai/usage/ai-usage.service.js +84 -43
- package/dist/ai/usage/ai-usage.service.js.map +1 -1
- package/dist/ai/usage/dto/ai-usage.dto.d.ts +8 -0
- package/dist/ai/usage/dto/ai-usage.dto.d.ts.map +1 -1
- package/dist/ai/usage/dto/ai-usage.dto.js +16 -5
- package/dist/ai/usage/dto/ai-usage.dto.js.map +1 -1
- package/dist/alerts/alerts-admin.controller.d.ts +40 -0
- package/dist/alerts/alerts-admin.controller.d.ts.map +1 -0
- package/dist/alerts/alerts-admin.controller.js +297 -0
- package/dist/alerts/alerts-admin.controller.js.map +1 -0
- package/dist/alerts/alerts-context.service.d.ts +64 -0
- package/dist/alerts/alerts-context.service.d.ts.map +1 -0
- package/dist/alerts/alerts-context.service.js +190 -0
- package/dist/alerts/alerts-context.service.js.map +1 -0
- package/dist/alerts/alerts-dispatch.service.d.ts +53 -0
- package/dist/alerts/alerts-dispatch.service.d.ts.map +1 -0
- package/dist/alerts/alerts-dispatch.service.js +135 -0
- package/dist/alerts/alerts-dispatch.service.js.map +1 -0
- package/dist/alerts/alerts-evaluation.service.d.ts +88 -0
- package/dist/alerts/alerts-evaluation.service.d.ts.map +1 -0
- package/dist/alerts/alerts-evaluation.service.js +296 -0
- package/dist/alerts/alerts-evaluation.service.js.map +1 -0
- package/dist/alerts/alerts-event.listener.d.ts +22 -0
- package/dist/alerts/alerts-event.listener.d.ts.map +1 -0
- package/dist/alerts/alerts-event.listener.js +72 -0
- package/dist/alerts/alerts-event.listener.js.map +1 -0
- package/dist/alerts/alerts-incidents.service.d.ts +86 -0
- package/dist/alerts/alerts-incidents.service.d.ts.map +1 -0
- package/dist/alerts/alerts-incidents.service.js +144 -0
- package/dist/alerts/alerts-incidents.service.js.map +1 -0
- package/dist/alerts/alerts-rules.service.d.ts +73 -0
- package/dist/alerts/alerts-rules.service.d.ts.map +1 -0
- package/dist/alerts/alerts-rules.service.js +205 -0
- package/dist/alerts/alerts-rules.service.js.map +1 -0
- package/dist/alerts/alerts-seed.service.d.ts +25 -0
- package/dist/alerts/alerts-seed.service.d.ts.map +1 -0
- package/dist/alerts/alerts-seed.service.js +82 -0
- package/dist/alerts/alerts-seed.service.js.map +1 -0
- package/dist/alerts/alerts.constants.d.ts +53 -0
- package/dist/alerts/alerts.constants.d.ts.map +1 -0
- package/dist/alerts/alerts.constants.js +57 -0
- package/dist/alerts/alerts.constants.js.map +1 -0
- package/dist/alerts/alerts.errors.d.ts +44 -0
- package/dist/alerts/alerts.errors.d.ts.map +1 -0
- package/dist/alerts/alerts.errors.js +47 -0
- package/dist/alerts/alerts.errors.js.map +1 -0
- package/dist/alerts/alerts.metrics.d.ts +60 -0
- package/dist/alerts/alerts.metrics.d.ts.map +1 -0
- package/dist/alerts/alerts.metrics.js +135 -0
- package/dist/alerts/alerts.metrics.js.map +1 -0
- package/dist/alerts/alerts.module.d.ts +35 -0
- package/dist/alerts/alerts.module.d.ts.map +1 -0
- package/dist/alerts/alerts.module.js +96 -0
- package/dist/alerts/alerts.module.js.map +1 -0
- package/dist/alerts/alerts.options.d.ts +64 -0
- package/dist/alerts/alerts.options.d.ts.map +1 -0
- package/dist/alerts/alerts.options.js +34 -0
- package/dist/alerts/alerts.options.js.map +1 -0
- package/dist/alerts/alerts.permissions.d.ts +27 -0
- package/dist/alerts/alerts.permissions.d.ts.map +1 -0
- package/dist/alerts/alerts.permissions.js +29 -0
- package/dist/alerts/alerts.permissions.js.map +1 -0
- package/dist/alerts/alerts.types.d.ts +182 -0
- package/dist/alerts/alerts.types.d.ts.map +1 -0
- package/dist/alerts/alerts.types.js +3 -0
- package/dist/alerts/alerts.types.js.map +1 -0
- package/dist/alerts/data/alerts-db.d.ts +169 -0
- package/dist/alerts/data/alerts-db.d.ts.map +1 -0
- package/dist/alerts/data/alerts-db.js +18 -0
- package/dist/alerts/data/alerts-db.js.map +1 -0
- package/dist/alerts/dto/alerts.dto.d.ts +132 -0
- package/dist/alerts/dto/alerts.dto.d.ts.map +1 -0
- package/dist/alerts/dto/alerts.dto.js +42 -0
- package/dist/alerts/dto/alerts.dto.js.map +1 -0
- package/dist/alerts/handlers/alerts-evaluate-event.handler.d.ts +23 -0
- package/dist/alerts/handlers/alerts-evaluate-event.handler.d.ts.map +1 -0
- package/dist/alerts/handlers/alerts-evaluate-event.handler.js +71 -0
- package/dist/alerts/handlers/alerts-evaluate-event.handler.js.map +1 -0
- package/dist/alerts/handlers/alerts-evaluate.handler.d.ts +25 -0
- package/dist/alerts/handlers/alerts-evaluate.handler.d.ts.map +1 -0
- package/dist/alerts/handlers/alerts-evaluate.handler.js +54 -0
- package/dist/alerts/handlers/alerts-evaluate.handler.js.map +1 -0
- package/dist/alerts/handlers/alerts-incidents-purge.handler.d.ts +29 -0
- package/dist/alerts/handlers/alerts-incidents-purge.handler.d.ts.map +1 -0
- package/dist/alerts/handlers/alerts-incidents-purge.handler.js +76 -0
- package/dist/alerts/handlers/alerts-incidents-purge.handler.js.map +1 -0
- package/dist/alerts/index.d.ts +45 -0
- package/dist/alerts/index.d.ts.map +1 -0
- package/dist/alerts/index.js +108 -0
- package/dist/alerts/index.js.map +1 -0
- package/dist/alerts/kinds/alert-kind.registry.d.ts +33 -0
- package/dist/alerts/kinds/alert-kind.registry.d.ts.map +1 -0
- package/dist/alerts/kinds/alert-kind.registry.js +63 -0
- package/dist/alerts/kinds/alert-kind.registry.js.map +1 -0
- package/dist/alerts/kinds/builtin-kinds.d.ts +18 -0
- package/dist/alerts/kinds/builtin-kinds.d.ts.map +1 -0
- package/dist/alerts/kinds/builtin-kinds.js +33 -0
- package/dist/alerts/kinds/builtin-kinds.js.map +1 -0
- package/dist/alerts/kinds/metric-threshold.kind.d.ts +11 -0
- package/dist/alerts/kinds/metric-threshold.kind.d.ts.map +1 -0
- package/dist/alerts/kinds/metric-threshold.kind.js +63 -0
- package/dist/alerts/kinds/metric-threshold.kind.js.map +1 -0
- package/dist/alerts/kinds/metric-threshold.sql.d.ts +41 -0
- package/dist/alerts/kinds/metric-threshold.sql.d.ts.map +1 -0
- package/dist/alerts/kinds/metric-threshold.sql.js +124 -0
- package/dist/alerts/kinds/metric-threshold.sql.js.map +1 -0
- package/dist/alerts/kinds/node-event.kind.d.ts +44 -0
- package/dist/alerts/kinds/node-event.kind.d.ts.map +1 -0
- package/dist/alerts/kinds/node-event.kind.js +113 -0
- package/dist/alerts/kinds/node-event.kind.js.map +1 -0
- package/dist/alerts/kinds/node-offline.kind.d.ts +11 -0
- package/dist/alerts/kinds/node-offline.kind.d.ts.map +1 -0
- package/dist/alerts/kinds/node-offline.kind.js +41 -0
- package/dist/alerts/kinds/node-offline.kind.js.map +1 -0
- package/dist/alerts/kinds/telemetry-unavailable.kind.d.ts +11 -0
- package/dist/alerts/kinds/telemetry-unavailable.kind.d.ts.map +1 -0
- package/dist/alerts/kinds/telemetry-unavailable.kind.js +40 -0
- package/dist/alerts/kinds/telemetry-unavailable.kind.js.map +1 -0
- package/dist/alerts/kinds/verdict.kind.d.ts +13 -0
- package/dist/alerts/kinds/verdict.kind.d.ts.map +1 -0
- package/dist/alerts/kinds/verdict.kind.js +34 -0
- package/dist/alerts/kinds/verdict.kind.js.map +1 -0
- package/dist/alerts/notifications/alerts.notifications.d.ts +77 -0
- package/dist/alerts/notifications/alerts.notifications.d.ts.map +1 -0
- package/dist/alerts/notifications/alerts.notifications.js +145 -0
- package/dist/alerts/notifications/alerts.notifications.js.map +1 -0
- package/dist/alerts/starter-rules.d.ts +21 -0
- package/dist/alerts/starter-rules.d.ts.map +1 -0
- package/dist/alerts/starter-rules.js +141 -0
- package/dist/alerts/starter-rules.js.map +1 -0
- package/dist/alerts/state/alert-state-machine.d.ts +92 -0
- package/dist/alerts/state/alert-state-machine.d.ts.map +1 -0
- package/dist/alerts/state/alert-state-machine.js +96 -0
- package/dist/alerts/state/alert-state-machine.js.map +1 -0
- package/dist/alerts/tasks/alerts-evaluate.task.d.ts +18 -0
- package/dist/alerts/tasks/alerts-evaluate.task.d.ts.map +1 -0
- package/dist/alerts/tasks/alerts-evaluate.task.js +61 -0
- package/dist/alerts/tasks/alerts-evaluate.task.js.map +1 -0
- package/dist/alerts/tasks/alerts-purge.task.d.ts +15 -0
- package/dist/alerts/tasks/alerts-purge.task.d.ts.map +1 -0
- package/dist/alerts/tasks/alerts-purge.task.js +58 -0
- package/dist/alerts/tasks/alerts-purge.task.js.map +1 -0
- package/dist/alerts/testing/conformance.d.ts +58 -0
- package/dist/alerts/testing/conformance.d.ts.map +1 -0
- package/dist/alerts/testing/conformance.js +198 -0
- package/dist/alerts/testing/conformance.js.map +1 -0
- package/dist/alerts/testing/fakes.d.ts +80 -0
- package/dist/alerts/testing/fakes.d.ts.map +1 -0
- package/dist/alerts/testing/fakes.js +230 -0
- package/dist/alerts/testing/fakes.js.map +1 -0
- package/dist/alerts/testing/index.d.ts +5 -0
- package/dist/alerts/testing/index.d.ts.map +1 -0
- package/dist/alerts/testing/index.js +15 -0
- package/dist/alerts/testing/index.js.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +13 -2
- package/dist/core/index.js.map +1 -1
- package/dist/core/net/ip-classify.d.ts +39 -0
- package/dist/core/net/ip-classify.d.ts.map +1 -0
- package/dist/core/net/ip-classify.js +196 -0
- package/dist/core/net/ip-classify.js.map +1 -0
- package/dist/core/timezone/request-time-zone.d.ts +61 -0
- package/dist/core/timezone/request-time-zone.d.ts.map +1 -0
- package/dist/core/timezone/request-time-zone.js +71 -0
- package/dist/core/timezone/request-time-zone.js.map +1 -0
- package/dist/credentials/testing/conformance.d.ts.map +1 -1
- package/dist/credentials/testing/conformance.js +1 -0
- package/dist/credentials/testing/conformance.js.map +1 -1
- package/dist/email/email-settings.controller.d.ts +5 -2
- package/dist/email/email-settings.controller.d.ts.map +1 -1
- package/dist/email/email-settings.controller.js +11 -5
- package/dist/email/email-settings.controller.js.map +1 -1
- package/dist/email/email-test-send.service.d.ts +11 -1
- package/dist/email/email-test-send.service.d.ts.map +1 -1
- package/dist/email/email-test-send.service.js +17 -3
- package/dist/email/email-test-send.service.js.map +1 -1
- package/dist/email/index.d.ts +2 -2
- package/dist/email/index.d.ts.map +1 -1
- package/dist/email/index.js +3 -1
- package/dist/email/index.js.map +1 -1
- package/dist/email/templates/backup-failed.email.d.ts.map +1 -1
- package/dist/email/templates/backup-failed.email.js +9 -5
- package/dist/email/templates/backup-failed.email.js.map +1 -1
- package/dist/email/templates/format-date.d.ts +39 -0
- package/dist/email/templates/format-date.d.ts.map +1 -0
- package/dist/email/templates/format-date.js +103 -0
- package/dist/email/templates/format-date.js.map +1 -0
- package/dist/email/templates/index.d.ts +2 -0
- package/dist/email/templates/index.d.ts.map +1 -1
- package/dist/email/templates/index.js +4 -1
- package/dist/email/templates/index.js.map +1 -1
- package/dist/email/templates/job-failed.email.d.ts +1 -1
- package/dist/email/templates/job-failed.email.d.ts.map +1 -1
- package/dist/email/templates/job-failed.email.js +6 -6
- package/dist/email/templates/job-failed.email.js.map +1 -1
- package/dist/email/templates/node-offline.email.d.ts.map +1 -1
- package/dist/email/templates/node-offline.email.js +11 -7
- package/dist/email/templates/node-offline.email.js.map +1 -1
- package/dist/email/templates/render-context.d.ts +5 -0
- package/dist/email/templates/render-context.d.ts.map +1 -1
- package/dist/email/templates/render-context.js.map +1 -1
- package/dist/email/templates/restore-completed.email.d.ts.map +1 -1
- package/dist/email/templates/restore-completed.email.js +9 -5
- package/dist/email/templates/restore-completed.email.js.map +1 -1
- package/dist/email/templates/role-changed.email.d.ts +1 -1
- package/dist/email/templates/role-changed.email.d.ts.map +1 -1
- package/dist/email/templates/role-changed.email.js +6 -7
- package/dist/email/templates/role-changed.email.js.map +1 -1
- package/dist/email/templates/test-email.email.d.ts +1 -1
- package/dist/email/templates/test-email.email.d.ts.map +1 -1
- package/dist/email/templates/test-email.email.js +6 -11
- package/dist/email/templates/test-email.email.js.map +1 -1
- package/dist/exports/export-job.d.ts +1 -0
- package/dist/exports/export-job.d.ts.map +1 -1
- package/dist/exports/export-job.js +2 -0
- package/dist/exports/export-job.js.map +1 -1
- package/dist/exports/export.types.d.ts +8 -0
- package/dist/exports/export.types.d.ts.map +1 -1
- package/dist/exports/exports.controller.d.ts +4 -2
- package/dist/exports/exports.controller.d.ts.map +1 -1
- package/dist/exports/exports.controller.js +15 -6
- package/dist/exports/exports.controller.js.map +1 -1
- package/dist/exports/exports.service.d.ts +5 -0
- package/dist/exports/exports.service.d.ts.map +1 -1
- package/dist/exports/exports.service.js +3 -0
- package/dist/exports/exports.service.js.map +1 -1
- package/dist/exports/handlers/export-run.handler.d.ts.map +1 -1
- package/dist/exports/handlers/export-run.handler.js +4 -1
- package/dist/exports/handlers/export-run.handler.js.map +1 -1
- package/dist/exports/index.d.ts +1 -0
- package/dist/exports/index.d.ts.map +1 -1
- package/dist/exports/index.js +7 -2
- package/dist/exports/index.js.map +1 -1
- package/dist/exports/testing/conformance.d.ts.map +1 -1
- package/dist/exports/testing/conformance.js +1 -0
- package/dist/exports/testing/conformance.js.map +1 -1
- package/dist/host/http/cors-options.d.ts +5 -1
- package/dist/host/http/cors-options.d.ts.map +1 -1
- package/dist/host/http/cors-options.js.map +1 -1
- package/dist/identity/pat/pat.controller.d.ts +4 -3
- package/dist/identity/pat/pat.controller.d.ts.map +1 -1
- package/dist/identity/pat/pat.controller.js +19 -5
- package/dist/identity/pat/pat.controller.js.map +1 -1
- package/dist/identity/pat/pat.service.d.ts +21 -0
- package/dist/identity/pat/pat.service.d.ts.map +1 -1
- package/dist/identity/pat/pat.service.js +27 -10
- package/dist/identity/pat/pat.service.js.map +1 -1
- package/dist/jobs/data/jobs-db.d.ts +26 -0
- package/dist/jobs/data/jobs-db.d.ts.map +1 -1
- package/dist/jobs/index.d.ts +1 -1
- package/dist/jobs/index.d.ts.map +1 -1
- package/dist/jobs/index.js.map +1 -1
- package/dist/manifest/platform-model-ownership.d.ts +1 -1
- package/dist/manifest/platform-model-ownership.d.ts.map +1 -1
- package/dist/manifest/platform-model-ownership.js +30 -1
- package/dist/manifest/platform-model-ownership.js.map +1 -1
- package/dist/manifest/platform-permissions.d.ts +6 -2
- package/dist/manifest/platform-permissions.d.ts.map +1 -1
- package/dist/manifest/platform-permissions.js +56 -44
- package/dist/manifest/platform-permissions.js.map +1 -1
- package/dist/manifest/platform-user-owned-models.d.ts.map +1 -1
- package/dist/manifest/platform-user-owned-models.js +16 -0
- package/dist/manifest/platform-user-owned-models.js.map +1 -1
- package/dist/nodes/dto/node-admin.dto.d.ts +5 -0
- package/dist/nodes/dto/node-admin.dto.d.ts.map +1 -1
- package/dist/nodes/dto/node-admin.dto.js +19 -0
- package/dist/nodes/dto/node-admin.dto.js.map +1 -1
- package/dist/nodes/dto/node-control-plane.dto.d.ts +26 -0
- package/dist/nodes/dto/node-control-plane.dto.d.ts.map +1 -1
- package/dist/nodes/dto/node-event.dto.d.ts +100 -0
- package/dist/nodes/dto/node-event.dto.d.ts.map +1 -0
- package/dist/nodes/dto/node-event.dto.js +239 -0
- package/dist/nodes/dto/node-event.dto.js.map +1 -0
- package/dist/nodes/dto/node-response.dto.d.ts +21 -0
- package/dist/nodes/dto/node-response.dto.d.ts.map +1 -1
- package/dist/nodes/dto/node-response.dto.js +42 -1
- package/dist/nodes/dto/node-response.dto.js.map +1 -1
- package/dist/nodes/events/node-event.event.d.ts +41 -0
- package/dist/nodes/events/node-event.event.d.ts.map +1 -0
- package/dist/nodes/events/node-event.event.js +69 -0
- package/dist/nodes/events/node-event.event.js.map +1 -0
- package/dist/nodes/handlers/node-events-purge.handler.d.ts +31 -0
- package/dist/nodes/handlers/node-events-purge.handler.d.ts.map +1 -0
- package/dist/nodes/handlers/node-events-purge.handler.js +91 -0
- package/dist/nodes/handlers/node-events-purge.handler.js.map +1 -0
- package/dist/nodes/index.d.ts +11 -4
- package/dist/nodes/index.d.ts.map +1 -1
- package/dist/nodes/index.js +20 -1
- package/dist/nodes/index.js.map +1 -1
- package/dist/nodes/node-events.service.d.ts +87 -0
- package/dist/nodes/node-events.service.d.ts.map +1 -0
- package/dist/nodes/node-events.service.js +271 -0
- package/dist/nodes/node-events.service.js.map +1 -0
- package/dist/nodes/node-fleet-metrics.service.d.ts +10 -1
- package/dist/nodes/node-fleet-metrics.service.d.ts.map +1 -1
- package/dist/nodes/node-fleet-metrics.service.js +31 -0
- package/dist/nodes/node-fleet-metrics.service.js.map +1 -1
- package/dist/nodes/node-lifecycle.service.d.ts +16 -1
- package/dist/nodes/node-lifecycle.service.d.ts.map +1 -1
- package/dist/nodes/node-lifecycle.service.js +7 -0
- package/dist/nodes/node-lifecycle.service.js.map +1 -1
- package/dist/nodes/nodes-admin.controller.d.ts +5 -1
- package/dist/nodes/nodes-admin.controller.d.ts.map +1 -1
- package/dist/nodes/nodes-admin.controller.js +32 -2
- package/dist/nodes/nodes-admin.controller.js.map +1 -1
- package/dist/nodes/nodes.controller.d.ts +7 -3
- package/dist/nodes/nodes.controller.d.ts.map +1 -1
- package/dist/nodes/nodes.controller.js +46 -6
- package/dist/nodes/nodes.controller.js.map +1 -1
- package/dist/nodes/nodes.metrics.d.ts +23 -1
- package/dist/nodes/nodes.metrics.d.ts.map +1 -1
- package/dist/nodes/nodes.metrics.js +80 -1
- package/dist/nodes/nodes.metrics.js.map +1 -1
- package/dist/nodes/nodes.module.d.ts.map +1 -1
- package/dist/nodes/nodes.module.js +6 -0
- package/dist/nodes/nodes.module.js.map +1 -1
- package/dist/nodes/nodes.options.d.ts +17 -0
- package/dist/nodes/nodes.options.d.ts.map +1 -1
- package/dist/nodes/nodes.options.js +13 -2
- package/dist/nodes/nodes.options.js.map +1 -1
- package/dist/nodes/nodes.service.d.ts +3 -1
- package/dist/nodes/nodes.service.d.ts.map +1 -1
- package/dist/nodes/nodes.service.js +14 -3
- package/dist/nodes/nodes.service.js.map +1 -1
- package/dist/nodes/tasks/node-events-purge.task.d.ts +13 -0
- package/dist/nodes/tasks/node-events-purge.task.d.ts.map +1 -0
- package/dist/nodes/tasks/node-events-purge.task.js +73 -0
- package/dist/nodes/tasks/node-events-purge.task.js.map +1 -0
- package/dist/notifications/channels/browser-notification.channel.js +1 -1
- package/dist/notifications/channels/browser-notification.channel.js.map +1 -1
- package/dist/notifications/channels/browser-templates.d.ts +12 -1
- package/dist/notifications/channels/browser-templates.d.ts.map +1 -1
- package/dist/notifications/channels/browser-templates.js +5 -4
- package/dist/notifications/channels/browser-templates.js.map +1 -1
- package/dist/notifications/channels/email-notification.channel.d.ts.map +1 -1
- package/dist/notifications/channels/email-notification.channel.js +3 -3
- package/dist/notifications/channels/email-notification.channel.js.map +1 -1
- package/dist/notifications/channels/push-notification.channel.js +1 -1
- package/dist/notifications/channels/push-notification.channel.js.map +1 -1
- package/dist/notifications/index.d.ts +1 -1
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/notification.types.d.ts +15 -0
- package/dist/notifications/notification.types.d.ts.map +1 -1
- package/dist/notifications/notification.types.js.map +1 -1
- package/dist/notifications/notifications.service.d.ts.map +1 -1
- package/dist/notifications/notifications.service.js +8 -0
- package/dist/notifications/notifications.service.js.map +1 -1
- package/dist/notifications/push-config.controller.d.ts +5 -2
- package/dist/notifications/push-config.controller.d.ts.map +1 -1
- package/dist/notifications/push-config.controller.js +11 -5
- package/dist/notifications/push-config.controller.js.map +1 -1
- package/dist/notifications/push-test.service.d.ts +1 -1
- package/dist/notifications/push-test.service.d.ts.map +1 -1
- package/dist/notifications/push-test.service.js +6 -4
- package/dist/notifications/push-test.service.js.map +1 -1
- package/dist/settings/settings-resolver.d.ts +28 -1
- package/dist/settings/settings-resolver.d.ts.map +1 -1
- package/dist/settings/settings-resolver.js +41 -0
- package/dist/settings/settings-resolver.js.map +1 -1
- package/dist/settings/settings.module.d.ts.map +1 -1
- package/dist/settings/settings.module.js +9 -4
- package/dist/settings/settings.module.js.map +1 -1
- package/dist/settings/user-settings/user-settings.service.d.ts.map +1 -1
- package/dist/settings/user-settings/user-settings.service.js +2 -4
- package/dist/settings/user-settings/user-settings.service.js.map +1 -1
- package/dist/sharing/grants/grants.service.js +2 -2
- package/dist/sharing/grants/grants.service.js.map +1 -1
- package/dist/sharing/groups/group-invites.service.js +1 -1
- package/dist/sharing/groups/group-invites.service.js.map +1 -1
- package/dist/sharing/groups/sharing-effects.d.ts +2 -1
- package/dist/sharing/groups/sharing-effects.d.ts.map +1 -1
- package/dist/sharing/groups/sharing-effects.js +4 -4
- package/dist/sharing/groups/sharing-effects.js.map +1 -1
- package/dist/sharing/index.d.ts +1 -1
- package/dist/sharing/index.d.ts.map +1 -1
- package/dist/sharing/index.js.map +1 -1
- package/dist/sharing/notifications/group-invitation.templates.d.ts +23 -0
- package/dist/sharing/notifications/group-invitation.templates.d.ts.map +1 -1
- package/dist/sharing/notifications/group-invitation.templates.js +17 -2
- package/dist/sharing/notifications/group-invitation.templates.js.map +1 -1
- package/dist/sharing/notifications/shared-with-you.templates.d.ts +1 -1
- package/dist/sharing/notifications/shared-with-you.templates.d.ts.map +1 -1
- package/dist/sharing/notifications/shared-with-you.templates.js +3 -2
- package/dist/sharing/notifications/shared-with-you.templates.js.map +1 -1
- package/dist/sharing/ports.d.ts +15 -2
- package/dist/sharing/ports.d.ts.map +1 -1
- package/dist/sharing/ports.js.map +1 -1
- package/dist/telemetry/dashboard/telemetry-dashboard.service.d.ts +30 -8
- package/dist/telemetry/dashboard/telemetry-dashboard.service.d.ts.map +1 -1
- package/dist/telemetry/dashboard/telemetry-dashboard.service.js +12 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.service.js.map +1 -1
- package/dist/telemetry/dashboard/telemetry-dashboard.verdict.d.ts +15 -0
- package/dist/telemetry/dashboard/telemetry-dashboard.verdict.d.ts.map +1 -1
- package/dist/telemetry/dashboard/telemetry-dashboard.verdict.js +17 -2
- package/dist/telemetry/dashboard/telemetry-dashboard.verdict.js.map +1 -1
- package/dist/telemetry/dto/telemetry-dashboard.dto.d.ts +3 -3
- package/dist/telemetry/index.d.ts +4 -2
- package/dist/telemetry/index.d.ts.map +1 -1
- package/dist/telemetry/index.js +4 -1
- package/dist/telemetry/index.js.map +1 -1
- package/dist/telemetry/metrics/groups/nodes.metric-group.d.ts.map +1 -1
- package/dist/telemetry/metrics/groups/nodes.metric-group.js +77 -0
- package/dist/telemetry/metrics/groups/nodes.metric-group.js.map +1 -1
- package/dist/telemetry/metrics/metric-verdict.d.ts +1 -1
- package/dist/telemetry/metrics/metric-verdict.d.ts.map +1 -1
- package/dist/telemetry/metrics/metric-verdict.js +15 -1
- package/dist/telemetry/metrics/metric-verdict.js.map +1 -1
- package/dist/telemetry/query/telemetry-query-facade.d.ts +1 -1
- package/dist/telemetry/query/telemetry-query-facade.d.ts.map +1 -1
- package/dist/telemetry/query/telemetry-query-facade.js.map +1 -1
- package/dist/telemetry/query/telemetry-query.service.d.ts +2 -2
- package/dist/telemetry/query/telemetry-query.service.d.ts.map +1 -1
- package/dist/telemetry/query/telemetry-query.service.js +4 -0
- package/dist/telemetry/query/telemetry-query.service.js.map +1 -1
- package/dist/telemetry/stack/dto/telemetry-stack.dto.d.ts +1 -1
- package/dist/telemetry/telemetry-support-bundle.section.d.ts +4 -4
- package/dist/telemetry/telemetry.module.d.ts.map +1 -1
- package/dist/telemetry/telemetry.module.js +1 -0
- package/dist/telemetry/telemetry.module.js.map +1 -1
- package/dist/telemetry/testing/metric-schema.fixture.d.ts.map +1 -1
- package/dist/telemetry/testing/metric-schema.fixture.js +56 -0
- package/dist/telemetry/testing/metric-schema.fixture.js.map +1 -1
- package/dist/user-data/platform-user-data.d.ts.map +1 -1
- package/dist/user-data/platform-user-data.js +2 -0
- package/dist/user-data/platform-user-data.js.map +1 -1
- package/dist/webhooks/data/webhooks-db.d.ts +176 -0
- package/dist/webhooks/data/webhooks-db.d.ts.map +1 -0
- package/dist/webhooks/data/webhooks-db.js +14 -0
- package/dist/webhooks/data/webhooks-db.js.map +1 -0
- package/dist/webhooks/egress/egress-guard.d.ts +99 -0
- package/dist/webhooks/egress/egress-guard.d.ts.map +1 -0
- package/dist/webhooks/egress/egress-guard.js +172 -0
- package/dist/webhooks/egress/egress-guard.js.map +1 -0
- package/dist/webhooks/egress/transport.d.ts +58 -0
- package/dist/webhooks/egress/transport.d.ts.map +1 -0
- package/dist/webhooks/egress/transport.js +115 -0
- package/dist/webhooks/egress/transport.js.map +1 -0
- package/dist/webhooks/handlers/webhook-deliver.handler.d.ts +76 -0
- package/dist/webhooks/handlers/webhook-deliver.handler.d.ts.map +1 -0
- package/dist/webhooks/handlers/webhook-deliver.handler.js +332 -0
- package/dist/webhooks/handlers/webhook-deliver.handler.js.map +1 -0
- package/dist/webhooks/handlers/webhook-fanout.handler.d.ts +28 -0
- package/dist/webhooks/handlers/webhook-fanout.handler.d.ts.map +1 -0
- package/dist/webhooks/handlers/webhook-fanout.handler.js +73 -0
- package/dist/webhooks/handlers/webhook-fanout.handler.js.map +1 -0
- package/dist/webhooks/handlers/webhook-purge.handler.d.ts +33 -0
- package/dist/webhooks/handlers/webhook-purge.handler.d.ts.map +1 -0
- package/dist/webhooks/handlers/webhook-purge.handler.js +77 -0
- package/dist/webhooks/handlers/webhook-purge.handler.js.map +1 -0
- package/dist/webhooks/http/admin-webhooks.controller.d.ts +36 -0
- package/dist/webhooks/http/admin-webhooks.controller.d.ts.map +1 -0
- package/dist/webhooks/http/admin-webhooks.controller.js +250 -0
- package/dist/webhooks/http/admin-webhooks.controller.js.map +1 -0
- package/dist/webhooks/http/org-webhooks.controller.d.ts +36 -0
- package/dist/webhooks/http/org-webhooks.controller.d.ts.map +1 -0
- package/dist/webhooks/http/org-webhooks.controller.js +249 -0
- package/dist/webhooks/http/org-webhooks.controller.js.map +1 -0
- package/dist/webhooks/http/scope-context.d.ts +17 -0
- package/dist/webhooks/http/scope-context.d.ts.map +1 -0
- package/dist/webhooks/http/scope-context.js +28 -0
- package/dist/webhooks/http/scope-context.js.map +1 -0
- package/dist/webhooks/http/webhook.dto.d.ts +174 -0
- package/dist/webhooks/http/webhook.dto.d.ts.map +1 -0
- package/dist/webhooks/http/webhook.dto.js +58 -0
- package/dist/webhooks/http/webhook.dto.js.map +1 -0
- package/dist/webhooks/http/webhooks.controller.d.ts +36 -0
- package/dist/webhooks/http/webhooks.controller.d.ts.map +1 -0
- package/dist/webhooks/http/webhooks.controller.js +243 -0
- package/dist/webhooks/http/webhooks.controller.js.map +1 -0
- package/dist/webhooks/index.d.ts +43 -0
- package/dist/webhooks/index.d.ts.map +1 -0
- package/dist/webhooks/index.js +147 -0
- package/dist/webhooks/index.js.map +1 -0
- package/dist/webhooks/listeners/webhook-event.listeners.d.ts +23 -0
- package/dist/webhooks/listeners/webhook-event.listeners.d.ts.map +1 -0
- package/dist/webhooks/listeners/webhook-event.listeners.js +120 -0
- package/dist/webhooks/listeners/webhook-event.listeners.js.map +1 -0
- package/dist/webhooks/notifications/webhook-notification.channel.d.ts +31 -0
- package/dist/webhooks/notifications/webhook-notification.channel.d.ts.map +1 -0
- package/dist/webhooks/notifications/webhook-notification.channel.js +127 -0
- package/dist/webhooks/notifications/webhook-notification.channel.js.map +1 -0
- package/dist/webhooks/notifications/webhook-notifications.d.ts +98 -0
- package/dist/webhooks/notifications/webhook-notifications.d.ts.map +1 -0
- package/dist/webhooks/notifications/webhook-notifications.js +150 -0
- package/dist/webhooks/notifications/webhook-notifications.js.map +1 -0
- package/dist/webhooks/ports.d.ts +29 -0
- package/dist/webhooks/ports.d.ts.map +1 -0
- package/dist/webhooks/ports.js +23 -0
- package/dist/webhooks/ports.js.map +1 -0
- package/dist/webhooks/registry/builtin-events.d.ts +57 -0
- package/dist/webhooks/registry/builtin-events.d.ts.map +1 -0
- package/dist/webhooks/registry/builtin-events.js +113 -0
- package/dist/webhooks/registry/builtin-events.js.map +1 -0
- package/dist/webhooks/registry/webhook-catalog.d.ts +63 -0
- package/dist/webhooks/registry/webhook-catalog.d.ts.map +1 -0
- package/dist/webhooks/registry/webhook-catalog.js +123 -0
- package/dist/webhooks/registry/webhook-catalog.js.map +1 -0
- package/dist/webhooks/registry/webhook-event.registry.d.ts +116 -0
- package/dist/webhooks/registry/webhook-event.registry.d.ts.map +1 -0
- package/dist/webhooks/registry/webhook-event.registry.js +152 -0
- package/dist/webhooks/registry/webhook-event.registry.js.map +1 -0
- package/dist/webhooks/signing.d.ts +31 -0
- package/dist/webhooks/signing.d.ts.map +1 -0
- package/dist/webhooks/signing.js +48 -0
- package/dist/webhooks/signing.js.map +1 -0
- package/dist/webhooks/tasks/webhook-purge.task.d.ts +17 -0
- package/dist/webhooks/tasks/webhook-purge.task.d.ts.map +1 -0
- package/dist/webhooks/tasks/webhook-purge.task.js +68 -0
- package/dist/webhooks/tasks/webhook-purge.task.js.map +1 -0
- package/dist/webhooks/testing/conformance.d.ts +61 -0
- package/dist/webhooks/testing/conformance.d.ts.map +1 -0
- package/dist/webhooks/testing/conformance.js +316 -0
- package/dist/webhooks/testing/conformance.js.map +1 -0
- package/dist/webhooks/testing/in-memory.d.ts +156 -0
- package/dist/webhooks/testing/in-memory.d.ts.map +1 -0
- package/dist/webhooks/testing/in-memory.js +323 -0
- package/dist/webhooks/testing/in-memory.js.map +1 -0
- package/dist/webhooks/testing/index.d.ts +7 -0
- package/dist/webhooks/testing/index.d.ts.map +1 -0
- package/dist/webhooks/testing/index.js +25 -0
- package/dist/webhooks/testing/index.js.map +1 -0
- package/dist/webhooks/testing/kit.d.ts +86 -0
- package/dist/webhooks/testing/kit.d.ts.map +1 -0
- package/dist/webhooks/testing/kit.js +113 -0
- package/dist/webhooks/testing/kit.js.map +1 -0
- package/dist/webhooks/webhook-endpoints.service.d.ts +142 -0
- package/dist/webhooks/webhook-endpoints.service.d.ts.map +1 -0
- package/dist/webhooks/webhook-endpoints.service.js +366 -0
- package/dist/webhooks/webhook-endpoints.service.js.map +1 -0
- package/dist/webhooks/webhook-envelope.d.ts +36 -0
- package/dist/webhooks/webhook-envelope.d.ts.map +1 -0
- package/dist/webhooks/webhook-envelope.js +46 -0
- package/dist/webhooks/webhook-envelope.js.map +1 -0
- package/dist/webhooks/webhook-secrets.service.d.ts +49 -0
- package/dist/webhooks/webhook-secrets.service.d.ts.map +1 -0
- package/dist/webhooks/webhook-secrets.service.js +118 -0
- package/dist/webhooks/webhook-secrets.service.js.map +1 -0
- package/dist/webhooks/webhook-views.d.ts +34 -0
- package/dist/webhooks/webhook-views.d.ts.map +1 -0
- package/dist/webhooks/webhook-views.js +83 -0
- package/dist/webhooks/webhook-views.js.map +1 -0
- package/dist/webhooks/webhooks.access.d.ts +28 -0
- package/dist/webhooks/webhooks.access.d.ts.map +1 -0
- package/dist/webhooks/webhooks.access.js +55 -0
- package/dist/webhooks/webhooks.access.js.map +1 -0
- package/dist/webhooks/webhooks.constants.d.ts +73 -0
- package/dist/webhooks/webhooks.constants.d.ts.map +1 -0
- package/dist/webhooks/webhooks.constants.js +100 -0
- package/dist/webhooks/webhooks.constants.js.map +1 -0
- package/dist/webhooks/webhooks.credentials.d.ts +28 -0
- package/dist/webhooks/webhooks.credentials.d.ts.map +1 -0
- package/dist/webhooks/webhooks.credentials.js +51 -0
- package/dist/webhooks/webhooks.credentials.js.map +1 -0
- package/dist/webhooks/webhooks.errors.d.ts +25 -0
- package/dist/webhooks/webhooks.errors.d.ts.map +1 -0
- package/dist/webhooks/webhooks.errors.js +65 -0
- package/dist/webhooks/webhooks.errors.js.map +1 -0
- package/dist/webhooks/webhooks.metrics.d.ts +24 -0
- package/dist/webhooks/webhooks.metrics.d.ts.map +1 -0
- package/dist/webhooks/webhooks.metrics.js +70 -0
- package/dist/webhooks/webhooks.metrics.js.map +1 -0
- package/dist/webhooks/webhooks.module.d.ts +29 -0
- package/dist/webhooks/webhooks.module.d.ts.map +1 -0
- package/dist/webhooks/webhooks.module.js +108 -0
- package/dist/webhooks/webhooks.module.js.map +1 -0
- package/dist/webhooks/webhooks.options.d.ts +119 -0
- package/dist/webhooks/webhooks.options.d.ts.map +1 -0
- package/dist/webhooks/webhooks.options.js +80 -0
- package/dist/webhooks/webhooks.options.js.map +1 -0
- package/dist/webhooks/webhooks.permissions.d.ts +47 -0
- package/dist/webhooks/webhooks.permissions.d.ts.map +1 -0
- package/dist/webhooks/webhooks.permissions.js +83 -0
- package/dist/webhooks/webhooks.permissions.js.map +1 -0
- package/dist/webhooks/webhooks.repository.d.ts +162 -0
- package/dist/webhooks/webhooks.repository.d.ts.map +1 -0
- package/dist/webhooks/webhooks.repository.js +246 -0
- package/dist/webhooks/webhooks.repository.js.map +1 -0
- package/dist/webhooks/webhooks.service.d.ts +91 -0
- package/dist/webhooks/webhooks.service.d.ts.map +1 -0
- package/dist/webhooks/webhooks.service.js +216 -0
- package/dist/webhooks/webhooks.service.js.map +1 -0
- package/package.json +19 -3
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import { type CreateWebhookEndpoint, type RotateWebhookSecretResponse, type UpdateWebhookEndpoint, type WebhookDeliveryDetail, type WebhookDeliveryList, type WebhookDeliveryListQuery, type WebhookEndpoint, type WebhookEndpointCreated, type WebhookEventCatalogEntry, type WebhookScope, type WebhookTestResponse } from '@marinoscar/platform-contract/webhooks';
|
|
2
|
+
import { type AuditSink } from '../core/index';
|
|
3
|
+
import { type HostResolver } from './egress/egress-guard';
|
|
4
|
+
import { WebhookSecrets } from './webhook-secrets.service';
|
|
5
|
+
import { type ResolvedWebhooksModuleOptions } from './webhooks.options';
|
|
6
|
+
import { WebhooksRepository } from './webhooks.repository';
|
|
7
|
+
/**
|
|
8
|
+
* Who is acting, in which scope.
|
|
9
|
+
*
|
|
10
|
+
* @stability experimental
|
|
11
|
+
*/
|
|
12
|
+
export interface WebhookScopeContext {
|
|
13
|
+
/** `user` (own endpoints), `org` (the organization's) or `system` (the deployment's). */
|
|
14
|
+
readonly scope: WebhookScope;
|
|
15
|
+
/** The acting user. */
|
|
16
|
+
readonly userId: string;
|
|
17
|
+
/** The active organization; `null` only for system scope. */
|
|
18
|
+
readonly orgId: string | null;
|
|
19
|
+
/** The caller's effective permissions, for the per-event permission gate. */
|
|
20
|
+
readonly permissions: readonly string[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* See the file header.
|
|
24
|
+
*
|
|
25
|
+
* @stability experimental
|
|
26
|
+
*/
|
|
27
|
+
export declare class WebhookEndpointsService {
|
|
28
|
+
private readonly repository;
|
|
29
|
+
private readonly secrets;
|
|
30
|
+
private readonly options;
|
|
31
|
+
private readonly resolver;
|
|
32
|
+
private readonly audit;
|
|
33
|
+
private readonly logger;
|
|
34
|
+
/** Overridable clock, for tests. */
|
|
35
|
+
now: () => Date;
|
|
36
|
+
constructor(repository: WebhooksRepository, secrets: WebhookSecrets, options: ResolvedWebhooksModuleOptions, resolver: HostResolver, audit: AuditSink);
|
|
37
|
+
/**
|
|
38
|
+
* The endpoints in the caller's scope, newest first.
|
|
39
|
+
*
|
|
40
|
+
* @param ctx - who is acting.
|
|
41
|
+
* @returns the endpoints (no secret).
|
|
42
|
+
*/
|
|
43
|
+
list(ctx: WebhookScopeContext): Promise<WebhookEndpoint[]>;
|
|
44
|
+
/**
|
|
45
|
+
* One endpoint.
|
|
46
|
+
*
|
|
47
|
+
* @param ctx - who is acting.
|
|
48
|
+
* @param id - the endpoint id.
|
|
49
|
+
* @returns the endpoint.
|
|
50
|
+
* @throws WebhookNotFoundError when it does not exist or is not in the caller's scope.
|
|
51
|
+
*/
|
|
52
|
+
get(ctx: WebhookScopeContext, id: string): Promise<WebhookEndpoint>;
|
|
53
|
+
/**
|
|
54
|
+
* Creates an endpoint and returns its signing secret, once.
|
|
55
|
+
*
|
|
56
|
+
* @param ctx - who is acting.
|
|
57
|
+
* @param input - the validated body.
|
|
58
|
+
* @returns the endpoint and the secret.
|
|
59
|
+
* @throws WebhookRequestError for a forbidden URL, an unknown or not-permitted event, or the endpoint limit.
|
|
60
|
+
*/
|
|
61
|
+
create(ctx: WebhookScopeContext, input: CreateWebhookEndpoint): Promise<WebhookEndpointCreated>;
|
|
62
|
+
/**
|
|
63
|
+
* Changes an endpoint. Enabling a disabled endpoint clears its failure count
|
|
64
|
+
* and its disabled reason.
|
|
65
|
+
*
|
|
66
|
+
* @param ctx - who is acting.
|
|
67
|
+
* @param id - the endpoint id.
|
|
68
|
+
* @param input - the validated patch.
|
|
69
|
+
* @returns the endpoint.
|
|
70
|
+
*/
|
|
71
|
+
update(ctx: WebhookScopeContext, id: string, input: UpdateWebhookEndpoint): Promise<WebhookEndpoint>;
|
|
72
|
+
/**
|
|
73
|
+
* Deletes an endpoint, its deliveries and its stored secrets.
|
|
74
|
+
*
|
|
75
|
+
* @param ctx - who is acting.
|
|
76
|
+
* @param id - the endpoint id.
|
|
77
|
+
*/
|
|
78
|
+
remove(ctx: WebhookScopeContext, id: string): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Rotates the signing secret. The previous secret keeps signing for the
|
|
81
|
+
* overlap window (two signatures per delivery), so the receiver can switch
|
|
82
|
+
* without dropping an event.
|
|
83
|
+
*
|
|
84
|
+
* @param ctx - who is acting.
|
|
85
|
+
* @param id - the endpoint id.
|
|
86
|
+
* @returns the new secret, once.
|
|
87
|
+
*/
|
|
88
|
+
rotateSecret(ctx: WebhookScopeContext, id: string): Promise<RotateWebhookSecretResponse>;
|
|
89
|
+
/**
|
|
90
|
+
* Queues a `webhooks.ping` delivery to the endpoint.
|
|
91
|
+
*
|
|
92
|
+
* @param ctx - who is acting.
|
|
93
|
+
* @param id - the endpoint id.
|
|
94
|
+
* @returns the delivery id.
|
|
95
|
+
*/
|
|
96
|
+
test(ctx: WebhookScopeContext, id: string): Promise<WebhookTestResponse>;
|
|
97
|
+
/**
|
|
98
|
+
* A page of an endpoint's deliveries.
|
|
99
|
+
*
|
|
100
|
+
* @param ctx - who is acting.
|
|
101
|
+
* @param id - the endpoint id.
|
|
102
|
+
* @param query - page, size and filters.
|
|
103
|
+
* @returns the page.
|
|
104
|
+
*/
|
|
105
|
+
listDeliveries(ctx: WebhookScopeContext, id: string, query: WebhookDeliveryListQuery): Promise<WebhookDeliveryList>;
|
|
106
|
+
/**
|
|
107
|
+
* One delivery with its payload.
|
|
108
|
+
*
|
|
109
|
+
* @param ctx - who is acting.
|
|
110
|
+
* @param deliveryId - the delivery id.
|
|
111
|
+
* @returns the detail.
|
|
112
|
+
*/
|
|
113
|
+
getDelivery(ctx: WebhookScopeContext, deliveryId: string): Promise<WebhookDeliveryDetail>;
|
|
114
|
+
/**
|
|
115
|
+
* Sends a delivery again: the same row goes back to `pending` with a fresh
|
|
116
|
+
* attempt count and a new job. The event id (`webhook-id`) is unchanged, so a
|
|
117
|
+
* receiver that deduplicates sees the same event.
|
|
118
|
+
*
|
|
119
|
+
* @param ctx - who is acting.
|
|
120
|
+
* @param deliveryId - the delivery id.
|
|
121
|
+
* @returns the delivery.
|
|
122
|
+
* @throws WebhookDisabledError when the endpoint is switched off.
|
|
123
|
+
*/
|
|
124
|
+
redeliver(ctx: WebhookScopeContext, deliveryId: string): Promise<WebhookDeliveryDetail>;
|
|
125
|
+
/**
|
|
126
|
+
* The events the caller may subscribe to at this scope.
|
|
127
|
+
*
|
|
128
|
+
* @param ctx - who is acting.
|
|
129
|
+
* @returns the catalog entries the caller's permissions allow.
|
|
130
|
+
*/
|
|
131
|
+
catalog(ctx: WebhookScopeContext): WebhookEventCatalogEntry[];
|
|
132
|
+
private orgOf;
|
|
133
|
+
private filterOf;
|
|
134
|
+
private require;
|
|
135
|
+
private policy;
|
|
136
|
+
/** Syntax and, best effort, DNS: a name that does not resolve yet is accepted (it may be set up later); one that resolves to a private address is not. */
|
|
137
|
+
private assertUrlAllowed;
|
|
138
|
+
private holds;
|
|
139
|
+
private assertEventKeys;
|
|
140
|
+
private record;
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=webhook-endpoints.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-endpoints.service.d.ts","sourceRoot":"","sources":["../../src/webhooks/webhook-endpoints.service.ts"],"names":[],"mappings":"AAsBA,OAAO,EAEL,KAAK,qBAAqB,EAC1B,KAAK,2BAA2B,EAChC,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,EAC7B,KAAK,eAAe,EACpB,KAAK,sBAAsB,EAC3B,KAAK,wBAAwB,EAC7B,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACzB,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAGL,KAAK,YAAY,EAElB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAa3D,OAAO,EAAoC,KAAK,6BAA6B,EAAE,MAAM,oBAAoB,CAAC;AAC1G,OAAO,EAAE,kBAAkB,EAAuB,MAAM,uBAAuB,CAAC;AAEhF;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,yFAAyF;IACzF,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,uBAAuB;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,6EAA6E;IAC7E,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED;;;;GAIG;AACH,qBACa,uBAAuB;IAOhC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACE,OAAO,CAAC,QAAQ,CAAC,OAAO;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK;IAV5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4C;IAEnE,oCAAoC;IACpC,GAAG,EAAE,MAAM,IAAI,CAAoB;gBAGhB,UAAU,EAAE,kBAAkB,EAC9B,OAAO,EAAE,cAAc,EACG,OAAO,EAAE,6BAA6B,EACrC,QAAQ,EAAE,YAAY,EAC7B,KAAK,EAAE,SAAS;IAOvD;;;;;OAKG;IACG,IAAI,CAAC,GAAG,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAKhE;;;;;;;OAOG;IACG,GAAG,CAAC,GAAG,EAAE,mBAAmB,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAIzE;;;;;;;OAOG;IACG,MAAM,CAAC,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IA+BrG;;;;;;;;OAQG;IACG,MAAM,CAAC,GAAG,EAAE,mBAAmB,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,eAAe,CAAC;IAwB1G;;;;;OAKG;IACG,MAAM,CAAC,GAAG,EAAE,mBAAmB,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWjE;;;;;;;;OAQG;IACG,YAAY,CAAC,GAAG,EAAE,mBAAmB,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAa9F;;;;;;OAMG;IACG,IAAI,CAAC,GAAG,EAAE,mBAAmB,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAqB9E;;;;;;;OAOG;IACG,cAAc,CAAC,GAAG,EAAE,mBAAmB,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,wBAAwB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAMzH;;;;;;OAMG;IACG,WAAW,CAAC,GAAG,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAM/F;;;;;;;;;OASG;IACG,SAAS,CAAC,GAAG,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAY7F;;;;;OAKG;IACH,OAAO,CAAC,GAAG,EAAE,mBAAmB,GAAG,wBAAwB,EAAE;IAS7D,OAAO,CAAC,KAAK;IAMb,OAAO,CAAC,QAAQ;YAIF,OAAO;IAMrB,OAAO,CAAC,MAAM;IAQd,0JAA0J;YAC5I,gBAAgB;IAa9B,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,eAAe;YAYT,MAAM;CAOrB"}
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// WebhookEndpointsService: the endpoint and delivery routes' logic
|
|
4
|
+
// (issue #1046)
|
|
5
|
+
// =============================================================================
|
|
6
|
+
//
|
|
7
|
+
// One service behind the three controllers (user, organization, system). A
|
|
8
|
+
// {@link WebhookScopeContext} says which scope the caller is acting in; every
|
|
9
|
+
// query is pinned to it (scope, organization and, for user scope, the owner),
|
|
10
|
+
// so an endpoint or delivery outside it is a 404, never a 403: an id is not an
|
|
11
|
+
// oracle.
|
|
12
|
+
//
|
|
13
|
+
// The signing secret is generated here, stored in the credentials store, and
|
|
14
|
+
// returned exactly twice in an endpoint's life: by `create` and by
|
|
15
|
+
// `rotateSecret`. No other method returns it and none logs it.
|
|
16
|
+
//
|
|
17
|
+
// Nothing here performs outbound HTTP. `test` and `redeliver` queue a
|
|
18
|
+
// `webhooks.deliver` job like every other delivery.
|
|
19
|
+
// =============================================================================
|
|
20
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
21
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
22
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
23
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
24
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
25
|
+
};
|
|
26
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
27
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
28
|
+
};
|
|
29
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
30
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
31
|
+
};
|
|
32
|
+
var WebhookEndpointsService_1;
|
|
33
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
34
|
+
exports.WebhookEndpointsService = void 0;
|
|
35
|
+
const node_crypto_1 = require("node:crypto");
|
|
36
|
+
const common_1 = require("@nestjs/common");
|
|
37
|
+
const webhooks_1 = require("@marinoscar/platform-contract/webhooks");
|
|
38
|
+
const index_1 = require("../core/index");
|
|
39
|
+
const egress_guard_1 = require("./egress/egress-guard");
|
|
40
|
+
const transport_1 = require("./egress/transport");
|
|
41
|
+
const webhook_envelope_1 = require("./webhook-envelope");
|
|
42
|
+
const webhook_secrets_service_1 = require("./webhook-secrets.service");
|
|
43
|
+
const webhook_views_1 = require("./webhook-views");
|
|
44
|
+
const builtin_events_1 = require("./registry/builtin-events");
|
|
45
|
+
const webhook_catalog_1 = require("./registry/webhook-catalog");
|
|
46
|
+
const webhook_event_registry_1 = require("./registry/webhook-event.registry");
|
|
47
|
+
const signing_1 = require("./signing");
|
|
48
|
+
const webhooks_constants_1 = require("./webhooks.constants");
|
|
49
|
+
const webhooks_errors_1 = require("./webhooks.errors");
|
|
50
|
+
const webhooks_options_1 = require("./webhooks.options");
|
|
51
|
+
const webhooks_repository_1 = require("./webhooks.repository");
|
|
52
|
+
/**
|
|
53
|
+
* See the file header.
|
|
54
|
+
*
|
|
55
|
+
* @stability experimental
|
|
56
|
+
*/
|
|
57
|
+
let WebhookEndpointsService = WebhookEndpointsService_1 = class WebhookEndpointsService {
|
|
58
|
+
repository;
|
|
59
|
+
secrets;
|
|
60
|
+
options;
|
|
61
|
+
resolver;
|
|
62
|
+
audit;
|
|
63
|
+
logger = new common_1.Logger(WebhookEndpointsService_1.name);
|
|
64
|
+
/** Overridable clock, for tests. */
|
|
65
|
+
now = () => new Date();
|
|
66
|
+
constructor(repository, secrets, options, resolver, audit) {
|
|
67
|
+
this.repository = repository;
|
|
68
|
+
this.secrets = secrets;
|
|
69
|
+
this.options = options;
|
|
70
|
+
this.resolver = resolver;
|
|
71
|
+
this.audit = audit;
|
|
72
|
+
}
|
|
73
|
+
// ---------------------------------------------------------------------------
|
|
74
|
+
// Endpoints
|
|
75
|
+
// ---------------------------------------------------------------------------
|
|
76
|
+
/**
|
|
77
|
+
* The endpoints in the caller's scope, newest first.
|
|
78
|
+
*
|
|
79
|
+
* @param ctx - who is acting.
|
|
80
|
+
* @returns the endpoints (no secret).
|
|
81
|
+
*/
|
|
82
|
+
async list(ctx) {
|
|
83
|
+
const rows = await this.repository.listEndpoints(this.orgOf(ctx), this.filterOf(ctx));
|
|
84
|
+
return rows.map(webhook_views_1.toEndpointView);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* One endpoint.
|
|
88
|
+
*
|
|
89
|
+
* @param ctx - who is acting.
|
|
90
|
+
* @param id - the endpoint id.
|
|
91
|
+
* @returns the endpoint.
|
|
92
|
+
* @throws WebhookNotFoundError when it does not exist or is not in the caller's scope.
|
|
93
|
+
*/
|
|
94
|
+
async get(ctx, id) {
|
|
95
|
+
return (0, webhook_views_1.toEndpointView)(await this.require(ctx, id));
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Creates an endpoint and returns its signing secret, once.
|
|
99
|
+
*
|
|
100
|
+
* @param ctx - who is acting.
|
|
101
|
+
* @param input - the validated body.
|
|
102
|
+
* @returns the endpoint and the secret.
|
|
103
|
+
* @throws WebhookRequestError for a forbidden URL, an unknown or not-permitted event, or the endpoint limit.
|
|
104
|
+
*/
|
|
105
|
+
async create(ctx, input) {
|
|
106
|
+
const orgId = this.orgOf(ctx);
|
|
107
|
+
const filter = this.filterOf(ctx);
|
|
108
|
+
const limit = this.options.limits[ctx.scope];
|
|
109
|
+
if ((await this.repository.countEndpoints(orgId, filter)) >= limit) {
|
|
110
|
+
throw new webhooks_errors_1.WebhookRequestError(webhooks_1.WEBHOOK_ERROR_CODES.WEBHOOK_LIMIT_REACHED, `You can have at most ${limit} webhook endpoints.`);
|
|
111
|
+
}
|
|
112
|
+
await this.assertUrlAllowed(input.url);
|
|
113
|
+
this.assertEventKeys(ctx, input.eventKeys);
|
|
114
|
+
const row = await this.repository.createEndpoint(orgId, {
|
|
115
|
+
scope: ctx.scope,
|
|
116
|
+
ownerUserId: ctx.scope === 'user' ? ctx.userId : null,
|
|
117
|
+
createdById: ctx.userId,
|
|
118
|
+
name: input.name,
|
|
119
|
+
description: input.description ?? null,
|
|
120
|
+
url: input.url,
|
|
121
|
+
eventKeys: [...new Set(input.eventKeys)],
|
|
122
|
+
enabled: input.enabled,
|
|
123
|
+
});
|
|
124
|
+
const secret = (0, signing_1.generateWebhookSecret)();
|
|
125
|
+
try {
|
|
126
|
+
await this.secrets.put(row, row.secretVersion, secret);
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
await this.repository.deleteEndpoint(orgId, row.id).catch(() => undefined);
|
|
130
|
+
throw error;
|
|
131
|
+
}
|
|
132
|
+
await this.record(webhooks_constants_1.WEBHOOK_AUDIT_ACTIONS.CREATE, ctx, row.id);
|
|
133
|
+
return { endpoint: (0, webhook_views_1.toEndpointView)(row), secret };
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Changes an endpoint. Enabling a disabled endpoint clears its failure count
|
|
137
|
+
* and its disabled reason.
|
|
138
|
+
*
|
|
139
|
+
* @param ctx - who is acting.
|
|
140
|
+
* @param id - the endpoint id.
|
|
141
|
+
* @param input - the validated patch.
|
|
142
|
+
* @returns the endpoint.
|
|
143
|
+
*/
|
|
144
|
+
async update(ctx, id, input) {
|
|
145
|
+
const current = await this.require(ctx, id);
|
|
146
|
+
if (input.url !== undefined && input.url !== current.url)
|
|
147
|
+
await this.assertUrlAllowed(input.url);
|
|
148
|
+
if (input.eventKeys !== undefined)
|
|
149
|
+
this.assertEventKeys(ctx, input.eventKeys);
|
|
150
|
+
const patch = {
|
|
151
|
+
...(input.name !== undefined ? { name: input.name } : {}),
|
|
152
|
+
...(input.description !== undefined ? { description: input.description ?? null } : {}),
|
|
153
|
+
...(input.url !== undefined ? { url: input.url } : {}),
|
|
154
|
+
...(input.eventKeys !== undefined ? { eventKeys: [...new Set(input.eventKeys)] } : {}),
|
|
155
|
+
};
|
|
156
|
+
if (input.enabled !== undefined) {
|
|
157
|
+
patch.enabled = input.enabled;
|
|
158
|
+
if (input.enabled && !current.enabled) {
|
|
159
|
+
patch.consecutiveFailures = 0;
|
|
160
|
+
patch.disabledReason = null;
|
|
161
|
+
}
|
|
162
|
+
if (!input.enabled && current.enabled)
|
|
163
|
+
patch.disabledReason = null;
|
|
164
|
+
}
|
|
165
|
+
const row = await this.repository.updateEndpoint(this.orgOf(ctx), id, patch);
|
|
166
|
+
await this.record(webhooks_constants_1.WEBHOOK_AUDIT_ACTIONS.UPDATE, ctx, id);
|
|
167
|
+
return (0, webhook_views_1.toEndpointView)(row);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Deletes an endpoint, its deliveries and its stored secrets.
|
|
171
|
+
*
|
|
172
|
+
* @param ctx - who is acting.
|
|
173
|
+
* @param id - the endpoint id.
|
|
174
|
+
*/
|
|
175
|
+
async remove(ctx, id) {
|
|
176
|
+
const current = await this.require(ctx, id);
|
|
177
|
+
await this.repository.deleteEndpoint(this.orgOf(ctx), id);
|
|
178
|
+
try {
|
|
179
|
+
await this.secrets.removeAll(current, current.secretVersion);
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
this.logger.warn(`Could not remove the stored secrets of webhook endpoint ${id}: ${error instanceof Error ? error.message : String(error)}`);
|
|
183
|
+
}
|
|
184
|
+
await this.record(webhooks_constants_1.WEBHOOK_AUDIT_ACTIONS.DELETE, ctx, id);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Rotates the signing secret. The previous secret keeps signing for the
|
|
188
|
+
* overlap window (two signatures per delivery), so the receiver can switch
|
|
189
|
+
* without dropping an event.
|
|
190
|
+
*
|
|
191
|
+
* @param ctx - who is acting.
|
|
192
|
+
* @param id - the endpoint id.
|
|
193
|
+
* @returns the new secret, once.
|
|
194
|
+
*/
|
|
195
|
+
async rotateSecret(ctx, id) {
|
|
196
|
+
const current = await this.require(ctx, id);
|
|
197
|
+
const version = current.secretVersion + 1;
|
|
198
|
+
const secret = (0, signing_1.generateWebhookSecret)();
|
|
199
|
+
await this.secrets.put(current, version, secret);
|
|
200
|
+
const until = new Date(this.now().getTime() + this.options.rotationOverlapHours * 3_600_000);
|
|
201
|
+
await this.repository.updateEndpoint(this.orgOf(ctx), id, { secretVersion: version, previousSecretUntil: until });
|
|
202
|
+
// The secret before the one that just became "previous" is no longer needed.
|
|
203
|
+
if (current.secretVersion > 1)
|
|
204
|
+
await this.secrets.remove(current, current.secretVersion - 1).catch(() => undefined);
|
|
205
|
+
await this.record(webhooks_constants_1.WEBHOOK_AUDIT_ACTIONS.ROTATE, ctx, id);
|
|
206
|
+
return { secret, secretVersion: version, previousSecretValidUntil: until.toISOString() };
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Queues a `webhooks.ping` delivery to the endpoint.
|
|
210
|
+
*
|
|
211
|
+
* @param ctx - who is acting.
|
|
212
|
+
* @param id - the endpoint id.
|
|
213
|
+
* @returns the delivery id.
|
|
214
|
+
*/
|
|
215
|
+
async test(ctx, id) {
|
|
216
|
+
const endpoint = await this.require(ctx, id);
|
|
217
|
+
const eventId = (0, node_crypto_1.randomUUID)();
|
|
218
|
+
const envelope = (0, webhook_envelope_1.buildEnvelope)({
|
|
219
|
+
eventId,
|
|
220
|
+
eventKey: builtin_events_1.WEBHOOK_PING_EVENT_KEY,
|
|
221
|
+
orgId: endpoint.orgId,
|
|
222
|
+
data: { message: 'This is a test delivery.', endpointId: endpoint.id },
|
|
223
|
+
occurredAt: this.now(),
|
|
224
|
+
});
|
|
225
|
+
const [delivery] = await this.repository.insertDeliveries(endpoint.orgId, [
|
|
226
|
+
{ endpointId: endpoint.id, eventKey: builtin_events_1.WEBHOOK_PING_EVENT_KEY, eventId, payload: envelope },
|
|
227
|
+
]);
|
|
228
|
+
if (!delivery)
|
|
229
|
+
throw new Error('The test delivery could not be queued');
|
|
230
|
+
return { deliveryId: delivery.id };
|
|
231
|
+
}
|
|
232
|
+
// ---------------------------------------------------------------------------
|
|
233
|
+
// Deliveries
|
|
234
|
+
// ---------------------------------------------------------------------------
|
|
235
|
+
/**
|
|
236
|
+
* A page of an endpoint's deliveries.
|
|
237
|
+
*
|
|
238
|
+
* @param ctx - who is acting.
|
|
239
|
+
* @param id - the endpoint id.
|
|
240
|
+
* @param query - page, size and filters.
|
|
241
|
+
* @returns the page.
|
|
242
|
+
*/
|
|
243
|
+
async listDeliveries(ctx, id, query) {
|
|
244
|
+
const endpoint = await this.require(ctx, id);
|
|
245
|
+
const { items, total } = await this.repository.listDeliveries(endpoint.orgId, endpoint.id, query);
|
|
246
|
+
return { items: items.map(webhook_views_1.toDeliveryView), total, page: query.page, pageSize: query.pageSize, totalPages: Math.ceil(total / query.pageSize) };
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* One delivery with its payload.
|
|
250
|
+
*
|
|
251
|
+
* @param ctx - who is acting.
|
|
252
|
+
* @param deliveryId - the delivery id.
|
|
253
|
+
* @returns the detail.
|
|
254
|
+
*/
|
|
255
|
+
async getDelivery(ctx, deliveryId) {
|
|
256
|
+
const delivery = await this.repository.findDelivery(this.orgOf(ctx), deliveryId, this.filterOf(ctx));
|
|
257
|
+
if (!delivery)
|
|
258
|
+
throw new webhooks_errors_1.WebhookDeliveryNotFoundError();
|
|
259
|
+
return (0, webhook_views_1.toDeliveryDetail)(delivery, `${(0, webhooks_options_1.userAgentToken)(this.options.appName())}-Webhooks/1.0`);
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Sends a delivery again: the same row goes back to `pending` with a fresh
|
|
263
|
+
* attempt count and a new job. The event id (`webhook-id`) is unchanged, so a
|
|
264
|
+
* receiver that deduplicates sees the same event.
|
|
265
|
+
*
|
|
266
|
+
* @param ctx - who is acting.
|
|
267
|
+
* @param deliveryId - the delivery id.
|
|
268
|
+
* @returns the delivery.
|
|
269
|
+
* @throws WebhookDisabledError when the endpoint is switched off.
|
|
270
|
+
*/
|
|
271
|
+
async redeliver(ctx, deliveryId) {
|
|
272
|
+
const orgId = this.orgOf(ctx);
|
|
273
|
+
const delivery = await this.repository.findDelivery(orgId, deliveryId, this.filterOf(ctx));
|
|
274
|
+
if (!delivery)
|
|
275
|
+
throw new webhooks_errors_1.WebhookDeliveryNotFoundError();
|
|
276
|
+
const endpoint = await this.repository.findEndpoint(orgId, delivery.endpointId, this.filterOf(ctx));
|
|
277
|
+
if (!endpoint)
|
|
278
|
+
throw new webhooks_errors_1.WebhookDeliveryNotFoundError();
|
|
279
|
+
if (!endpoint.enabled)
|
|
280
|
+
throw new webhooks_errors_1.WebhookDisabledError();
|
|
281
|
+
const row = await this.repository.resetForRedelivery(orgId, deliveryId);
|
|
282
|
+
await this.record(webhooks_constants_1.WEBHOOK_AUDIT_ACTIONS.REDELIVER, ctx, endpoint.id, { deliveryId });
|
|
283
|
+
return (0, webhook_views_1.toDeliveryDetail)(row, `${(0, webhooks_options_1.userAgentToken)(this.options.appName())}-Webhooks/1.0`);
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* The events the caller may subscribe to at this scope.
|
|
287
|
+
*
|
|
288
|
+
* @param ctx - who is acting.
|
|
289
|
+
* @returns the catalog entries the caller's permissions allow.
|
|
290
|
+
*/
|
|
291
|
+
catalog(ctx) {
|
|
292
|
+
const permitted = new Set((0, webhook_catalog_1.subscribableEvents)(ctx.scope).filter((event) => this.holds(ctx, event.permission)).map((event) => event.key));
|
|
293
|
+
return (0, webhook_catalog_1.catalogFor)(ctx.scope).filter((entry) => permitted.has(entry.key));
|
|
294
|
+
}
|
|
295
|
+
// ---------------------------------------------------------------------------
|
|
296
|
+
// Internals
|
|
297
|
+
// ---------------------------------------------------------------------------
|
|
298
|
+
orgOf(ctx) {
|
|
299
|
+
if (ctx.scope === 'system')
|
|
300
|
+
return null;
|
|
301
|
+
if (!ctx.orgId)
|
|
302
|
+
throw new webhooks_errors_1.WebhookNotFoundError();
|
|
303
|
+
return ctx.orgId;
|
|
304
|
+
}
|
|
305
|
+
filterOf(ctx) {
|
|
306
|
+
return ctx.scope === 'user' ? { scope: 'user', ownerUserId: ctx.userId } : { scope: ctx.scope };
|
|
307
|
+
}
|
|
308
|
+
async require(ctx, id) {
|
|
309
|
+
const row = await this.repository.findEndpoint(this.orgOf(ctx), id, this.filterOf(ctx));
|
|
310
|
+
if (!row)
|
|
311
|
+
throw new webhooks_errors_1.WebhookNotFoundError();
|
|
312
|
+
return row;
|
|
313
|
+
}
|
|
314
|
+
policy() {
|
|
315
|
+
return {
|
|
316
|
+
allowInsecureHttp: this.options.allowInsecureHttp,
|
|
317
|
+
allowPrivateTargets: this.options.allowPrivateTargets,
|
|
318
|
+
allowedHosts: this.options.allowedHosts,
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
/** Syntax and, best effort, DNS: a name that does not resolve yet is accepted (it may be set up later); one that resolves to a private address is not. */
|
|
322
|
+
async assertUrlAllowed(url) {
|
|
323
|
+
try {
|
|
324
|
+
await (0, egress_guard_1.resolveWebhookTarget)(url, this.policy(), this.resolver);
|
|
325
|
+
}
|
|
326
|
+
catch (error) {
|
|
327
|
+
if (!(error instanceof egress_guard_1.WebhookEgressError))
|
|
328
|
+
throw error;
|
|
329
|
+
if (error.code === 'unresolvable')
|
|
330
|
+
return;
|
|
331
|
+
throw new webhooks_errors_1.WebhookRequestError(error.code === 'invalid_url' ? webhooks_1.WEBHOOK_ERROR_CODES.WEBHOOK_URL_INVALID : webhooks_1.WEBHOOK_ERROR_CODES.WEBHOOK_URL_FORBIDDEN, error.message);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
holds(ctx, permission) {
|
|
335
|
+
return permission === undefined || ctx.permissions.includes(permission);
|
|
336
|
+
}
|
|
337
|
+
assertEventKeys(ctx, keys) {
|
|
338
|
+
for (const pattern of keys) {
|
|
339
|
+
if (!(0, webhook_catalog_1.subscriptionIsSubscribable)(pattern, ctx.scope)) {
|
|
340
|
+
throw new webhooks_errors_1.WebhookRequestError(webhooks_1.WEBHOOK_ERROR_CODES.WEBHOOK_EVENT_UNKNOWN, `"${pattern}" names no event this kind of endpoint can receive.`);
|
|
341
|
+
}
|
|
342
|
+
const matching = (0, webhook_catalog_1.subscribableEvents)(ctx.scope).filter((event) => (0, webhook_event_registry_1.subscriptionMatches)(pattern, event.key));
|
|
343
|
+
if (!matching.some((event) => this.holds(ctx, event.permission))) {
|
|
344
|
+
throw new webhooks_errors_1.WebhookRequestError(webhooks_1.WEBHOOK_ERROR_CODES.WEBHOOK_EVENT_NOT_PERMITTED, `You may not subscribe to "${pattern}".`);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
async record(action, ctx, targetId, extra = {}) {
|
|
349
|
+
try {
|
|
350
|
+
await this.audit.record({ action, actorUserId: ctx.userId, targetType: webhooks_constants_1.WEBHOOK_AUDIT_TARGET, targetId, meta: { scope: ctx.scope, ...extra } });
|
|
351
|
+
}
|
|
352
|
+
catch (error) {
|
|
353
|
+
this.logger.warn(`Could not record the audit event ${action}: ${error instanceof Error ? error.message : String(error)}`);
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
};
|
|
357
|
+
exports.WebhookEndpointsService = WebhookEndpointsService;
|
|
358
|
+
exports.WebhookEndpointsService = WebhookEndpointsService = WebhookEndpointsService_1 = __decorate([
|
|
359
|
+
(0, common_1.Injectable)(),
|
|
360
|
+
__param(2, (0, common_1.Inject)(webhooks_options_1.WEBHOOKS_OPTIONS)),
|
|
361
|
+
__param(3, (0, common_1.Inject)(transport_1.WEBHOOKS_RESOLVER)),
|
|
362
|
+
__param(4, (0, common_1.Inject)(index_1.AUDIT_SINK)),
|
|
363
|
+
__metadata("design:paramtypes", [webhooks_repository_1.WebhooksRepository,
|
|
364
|
+
webhook_secrets_service_1.WebhookSecrets, Object, Object, Object])
|
|
365
|
+
], WebhookEndpointsService);
|
|
366
|
+
//# sourceMappingURL=webhook-endpoints.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-endpoints.service.js","sourceRoot":"","sources":["../../src/webhooks/webhook-endpoints.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type WebhookEnvelope } from '@marinoscar/platform-contract/webhooks';
|
|
2
|
+
/** The `apiVersion` of every envelope. @stability experimental */
|
|
3
|
+
export declare const WEBHOOK_ENVELOPE_API_VERSION_VALUE = "2026-11-01";
|
|
4
|
+
/** What {@link buildEnvelope} takes. @stability experimental */
|
|
5
|
+
export interface EnvelopeInput {
|
|
6
|
+
/** Event id. */
|
|
7
|
+
readonly eventId: string;
|
|
8
|
+
/** Event key. */
|
|
9
|
+
readonly eventKey: string;
|
|
10
|
+
/** Org id. */
|
|
11
|
+
readonly orgId: string | null;
|
|
12
|
+
/** Data. */
|
|
13
|
+
readonly data: unknown;
|
|
14
|
+
/** Occurred at. */
|
|
15
|
+
readonly occurredAt: Date;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The envelope: `{ id, type, createdAt, apiVersion, org, data }`.
|
|
19
|
+
*
|
|
20
|
+
* @param input - see {@link EnvelopeInput}.
|
|
21
|
+
* @returns the envelope, stored on the delivery row as the body sent.
|
|
22
|
+
*
|
|
23
|
+
* @stability experimental
|
|
24
|
+
*/
|
|
25
|
+
export declare function buildEnvelope(input: EnvelopeInput): WebhookEnvelope;
|
|
26
|
+
/**
|
|
27
|
+
* The bounded `event_group` metric label of an event key: its first segment
|
|
28
|
+
* when that is a registered group (or `notification`), else `other`.
|
|
29
|
+
*
|
|
30
|
+
* @param eventKey - an event key.
|
|
31
|
+
* @returns the label.
|
|
32
|
+
*
|
|
33
|
+
* @stability experimental
|
|
34
|
+
*/
|
|
35
|
+
export declare function eventGroupOf(eventKey: string): string;
|
|
36
|
+
//# sourceMappingURL=webhook-envelope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-envelope.d.ts","sourceRoot":"","sources":["../../src/webhooks/webhook-envelope.ts"],"names":[],"mappings":"AAIA,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,wCAAwC,CAAC;AAInG,kEAAkE;AAClE,eAAO,MAAM,kCAAkC,eAAsB,CAAC;AAEtE,gEAAgE;AAChE,MAAM,WAAW,aAAa;IAC5B,gBAAgB;IAChB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,iBAAiB;IACjB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,cAAc;IACd,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY;IACZ,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,mBAAmB;IACnB,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,eAAe,CASnE;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIrD"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// The body a receiver gets, and the metric label of an event (issue #1046)
|
|
4
|
+
// =============================================================================
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.WEBHOOK_ENVELOPE_API_VERSION_VALUE = void 0;
|
|
7
|
+
exports.buildEnvelope = buildEnvelope;
|
|
8
|
+
exports.eventGroupOf = eventGroupOf;
|
|
9
|
+
const webhooks_1 = require("@marinoscar/platform-contract/webhooks");
|
|
10
|
+
const webhook_event_registry_1 = require("./registry/webhook-event.registry");
|
|
11
|
+
/** The `apiVersion` of every envelope. @stability experimental */
|
|
12
|
+
exports.WEBHOOK_ENVELOPE_API_VERSION_VALUE = webhooks_1.WEBHOOK_API_VERSION;
|
|
13
|
+
/**
|
|
14
|
+
* The envelope: `{ id, type, createdAt, apiVersion, org, data }`.
|
|
15
|
+
*
|
|
16
|
+
* @param input - see {@link EnvelopeInput}.
|
|
17
|
+
* @returns the envelope, stored on the delivery row as the body sent.
|
|
18
|
+
*
|
|
19
|
+
* @stability experimental
|
|
20
|
+
*/
|
|
21
|
+
function buildEnvelope(input) {
|
|
22
|
+
return {
|
|
23
|
+
id: input.eventId,
|
|
24
|
+
type: input.eventKey,
|
|
25
|
+
createdAt: input.occurredAt.toISOString(),
|
|
26
|
+
apiVersion: exports.WEBHOOK_ENVELOPE_API_VERSION_VALUE,
|
|
27
|
+
org: input.orgId ? { id: input.orgId } : null,
|
|
28
|
+
data: input.data,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The bounded `event_group` metric label of an event key: its first segment
|
|
33
|
+
* when that is a registered group (or `notification`), else `other`.
|
|
34
|
+
*
|
|
35
|
+
* @param eventKey - an event key.
|
|
36
|
+
* @returns the label.
|
|
37
|
+
*
|
|
38
|
+
* @stability experimental
|
|
39
|
+
*/
|
|
40
|
+
function eventGroupOf(eventKey) {
|
|
41
|
+
const first = eventKey.split('.')[0] ?? '';
|
|
42
|
+
if (first === 'notification')
|
|
43
|
+
return first;
|
|
44
|
+
return webhook_event_registry_1.webhookEventRegistry.list().some((event) => event.key.split('.')[0] === first) ? first : 'other';
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=webhook-envelope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook-envelope.js","sourceRoot":"","sources":["../../src/webhooks/webhook-envelope.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,2EAA2E;AAC3E,gFAAgF;;;AA+BhF,sCASC;AAWD,oCAIC;AArDD,qEAAmG;AAEnG,8EAAyE;AAEzE,kEAAkE;AACrD,QAAA,kCAAkC,GAAG,8BAAmB,CAAC;AAgBtE;;;;;;;GAOG;AACH,SAAgB,aAAa,CAAC,KAAoB;IAChD,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,OAAO;QACjB,IAAI,EAAE,KAAK,CAAC,QAAQ;QACpB,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE;QACzC,UAAU,EAAE,0CAAkC;QAC9C,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI;QAC7C,IAAI,EAAE,KAAK,CAAC,IAAI;KACjB,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,YAAY,CAAC,QAAgB;IAC3C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,IAAI,KAAK,KAAK,cAAc;QAAE,OAAO,KAAK,CAAC;IAC3C,OAAO,6CAAoB,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;AAC1G,CAAC"}
|