@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,323 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// In-memory doubles of the webhooks slice's ports (issue #1046)
|
|
4
|
+
// =============================================================================
|
|
5
|
+
//
|
|
6
|
+
// The slice's logic (scope checks, fan-out, the owner re-check, the delivery
|
|
7
|
+
// state machine, the circuit breaker) lives in services over three ports: the
|
|
8
|
+
// data (`WebhooksRepository`), the signing secrets (`WebhookSecrets`) and the
|
|
9
|
+
// HTTP transport with its DNS resolver. These are in-memory implementations,
|
|
10
|
+
// plus a fake receiver, so a test (or the `webhooks` conformance suite) drives
|
|
11
|
+
// the real services with no database, no network and no Nest container.
|
|
12
|
+
// Never import this from production code.
|
|
13
|
+
// =============================================================================
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.RecordingJobs = exports.ScriptedHostResolver = exports.FakeWebhookReceiver = exports.InMemoryWebhookSecrets = exports.InMemoryWebhooksRepository = void 0;
|
|
16
|
+
exports.makeWebhookOwner = makeWebhookOwner;
|
|
17
|
+
const node_crypto_1 = require("node:crypto");
|
|
18
|
+
const transport_1 = require("../egress/transport");
|
|
19
|
+
const webhook_secrets_service_1 = require("../webhook-secrets.service");
|
|
20
|
+
const webhooks_repository_1 = require("../webhooks.repository");
|
|
21
|
+
/**
|
|
22
|
+
* The data port in memory. Emulates the unique `(endpointId, eventId)` key, the
|
|
23
|
+
* cascade on endpoint delete and the organization/owner pinning of every query.
|
|
24
|
+
*
|
|
25
|
+
* @stability experimental
|
|
26
|
+
*/
|
|
27
|
+
class InMemoryWebhooksRepository extends webhooks_repository_1.WebhooksRepository {
|
|
28
|
+
/** Endpoints by id. */
|
|
29
|
+
endpoints = new Map();
|
|
30
|
+
/** Deliveries by id. */
|
|
31
|
+
deliveries = new Map();
|
|
32
|
+
/** Users by id, for the owner re-check; set with {@link InMemoryWebhooksRepository.setOwner}. */
|
|
33
|
+
owners = new Map();
|
|
34
|
+
/** Every delivery job enqueued. */
|
|
35
|
+
enqueued = [];
|
|
36
|
+
/** Clock. */
|
|
37
|
+
now = () => new Date();
|
|
38
|
+
/** Sets what the owner re-check will see. */
|
|
39
|
+
setOwner(user) {
|
|
40
|
+
this.owners.set(user.id, user);
|
|
41
|
+
}
|
|
42
|
+
matches(row, orgId, filter) {
|
|
43
|
+
return row.orgId === orgId && row.scope === filter.scope && (filter.scope !== 'user' || filter.ownerUserId === undefined || row.ownerUserId === filter.ownerUserId);
|
|
44
|
+
}
|
|
45
|
+
async listEndpoints(orgId, filter) {
|
|
46
|
+
return [...this.endpoints.values()].filter((row) => this.matches(row, orgId, filter)).sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
|
|
47
|
+
}
|
|
48
|
+
async findEndpoint(orgId, id, filter) {
|
|
49
|
+
const row = this.endpoints.get(id);
|
|
50
|
+
return row && this.matches(row, orgId, filter) ? { ...row } : null;
|
|
51
|
+
}
|
|
52
|
+
async countEndpoints(orgId, filter) {
|
|
53
|
+
return (await this.listEndpoints(orgId, filter)).length;
|
|
54
|
+
}
|
|
55
|
+
async createEndpoint(orgId, data) {
|
|
56
|
+
const now = this.now();
|
|
57
|
+
const row = {
|
|
58
|
+
id: (0, node_crypto_1.randomUUID)(),
|
|
59
|
+
orgId,
|
|
60
|
+
scope: data.scope,
|
|
61
|
+
ownerUserId: data.ownerUserId,
|
|
62
|
+
createdById: data.createdById,
|
|
63
|
+
name: data.name,
|
|
64
|
+
description: data.description,
|
|
65
|
+
url: data.url,
|
|
66
|
+
eventKeys: [...data.eventKeys],
|
|
67
|
+
enabled: data.enabled,
|
|
68
|
+
secretVersion: 1,
|
|
69
|
+
previousSecretUntil: null,
|
|
70
|
+
consecutiveFailures: 0,
|
|
71
|
+
disabledReason: null,
|
|
72
|
+
lastDeliveryAt: null,
|
|
73
|
+
lastSuccessAt: null,
|
|
74
|
+
createdAt: now,
|
|
75
|
+
updatedAt: now,
|
|
76
|
+
};
|
|
77
|
+
this.endpoints.set(row.id, row);
|
|
78
|
+
return { ...row };
|
|
79
|
+
}
|
|
80
|
+
async updateEndpoint(orgId, id, patch) {
|
|
81
|
+
const row = this.endpoints.get(id);
|
|
82
|
+
if (!row || row.orgId !== orgId)
|
|
83
|
+
throw new Error('Webhook endpoint not found');
|
|
84
|
+
Object.assign(row, patch, { updatedAt: this.now() });
|
|
85
|
+
return { ...row };
|
|
86
|
+
}
|
|
87
|
+
async deleteEndpoint(orgId, id) {
|
|
88
|
+
const row = this.endpoints.get(id);
|
|
89
|
+
if (!row || row.orgId !== orgId)
|
|
90
|
+
return;
|
|
91
|
+
this.endpoints.delete(id);
|
|
92
|
+
for (const [deliveryId, delivery] of this.deliveries)
|
|
93
|
+
if (delivery.endpointId === id)
|
|
94
|
+
this.deliveries.delete(deliveryId);
|
|
95
|
+
}
|
|
96
|
+
async enabledEndpoints(orgId, filter) {
|
|
97
|
+
return (await this.listEndpoints(orgId, filter)).filter((row) => row.enabled);
|
|
98
|
+
}
|
|
99
|
+
async disableEndpoint(orgId, id, reason) {
|
|
100
|
+
const row = this.endpoints.get(id);
|
|
101
|
+
if (!row || row.orgId !== orgId || !row.enabled)
|
|
102
|
+
return false;
|
|
103
|
+
row.enabled = false;
|
|
104
|
+
row.disabledReason = reason;
|
|
105
|
+
return true;
|
|
106
|
+
}
|
|
107
|
+
async loadOwner(_orgId, userId) {
|
|
108
|
+
return this.owners.get(userId) ?? null;
|
|
109
|
+
}
|
|
110
|
+
async insertDeliveries(orgId, rows) {
|
|
111
|
+
const inserted = [];
|
|
112
|
+
for (const row of rows) {
|
|
113
|
+
const exists = [...this.deliveries.values()].some((delivery) => delivery.endpointId === row.endpointId && delivery.eventId === row.eventId);
|
|
114
|
+
if (exists)
|
|
115
|
+
continue;
|
|
116
|
+
const delivery = {
|
|
117
|
+
id: (0, node_crypto_1.randomUUID)(),
|
|
118
|
+
orgId,
|
|
119
|
+
endpointId: row.endpointId,
|
|
120
|
+
eventKey: row.eventKey,
|
|
121
|
+
eventId: row.eventId,
|
|
122
|
+
payload: row.payload,
|
|
123
|
+
status: 'pending',
|
|
124
|
+
attempt: 0,
|
|
125
|
+
responseStatus: null,
|
|
126
|
+
responseSnippet: null,
|
|
127
|
+
errorCode: null,
|
|
128
|
+
durationMs: null,
|
|
129
|
+
nextAttemptAt: null,
|
|
130
|
+
deliveredAt: null,
|
|
131
|
+
createdAt: this.now(),
|
|
132
|
+
};
|
|
133
|
+
this.deliveries.set(delivery.id, delivery);
|
|
134
|
+
this.enqueued.push({ deliveryId: delivery.id, orgId, reason: 'upload', scheduledFor: null });
|
|
135
|
+
inserted.push({ ...delivery });
|
|
136
|
+
}
|
|
137
|
+
return inserted;
|
|
138
|
+
}
|
|
139
|
+
async findDelivery(orgId, id, filter) {
|
|
140
|
+
const delivery = this.deliveries.get(id);
|
|
141
|
+
if (!delivery || delivery.orgId !== orgId)
|
|
142
|
+
return null;
|
|
143
|
+
const endpoint = this.endpoints.get(delivery.endpointId);
|
|
144
|
+
return endpoint && this.matches(endpoint, orgId, filter) ? { ...delivery } : null;
|
|
145
|
+
}
|
|
146
|
+
async loadDeliveryForJob(orgId, id) {
|
|
147
|
+
const delivery = this.deliveries.get(id);
|
|
148
|
+
if (!delivery || delivery.orgId !== orgId)
|
|
149
|
+
return null;
|
|
150
|
+
const endpoint = this.endpoints.get(delivery.endpointId);
|
|
151
|
+
return { delivery: { ...delivery }, endpoint: endpoint && endpoint.orgId === orgId ? { ...endpoint } : null };
|
|
152
|
+
}
|
|
153
|
+
async listDeliveries(orgId, endpointId, query) {
|
|
154
|
+
const all = [...this.deliveries.values()]
|
|
155
|
+
.filter((delivery) => delivery.orgId === orgId && delivery.endpointId === endpointId)
|
|
156
|
+
.filter((delivery) => (query.status ? delivery.status === query.status : true))
|
|
157
|
+
.filter((delivery) => (query.eventKey ? delivery.eventKey === query.eventKey : true))
|
|
158
|
+
.sort((a, b) => b.createdAt.getTime() - a.createdAt.getTime());
|
|
159
|
+
return { items: all.slice((query.page - 1) * query.pageSize, query.page * query.pageSize).map((row) => ({ ...row })), total: all.length };
|
|
160
|
+
}
|
|
161
|
+
async markDelivering(orgId, id) {
|
|
162
|
+
const delivery = this.deliveries.get(id);
|
|
163
|
+
if (!delivery || delivery.orgId !== orgId)
|
|
164
|
+
throw new Error('Webhook delivery not found');
|
|
165
|
+
delivery.status = 'delivering';
|
|
166
|
+
delivery.attempt += 1;
|
|
167
|
+
delivery.nextAttemptAt = null;
|
|
168
|
+
return { ...delivery };
|
|
169
|
+
}
|
|
170
|
+
async settleAttempt(orgId, deliveryId, endpointId, outcome) {
|
|
171
|
+
const delivery = this.deliveries.get(deliveryId);
|
|
172
|
+
if (delivery && delivery.orgId === orgId)
|
|
173
|
+
Object.assign(delivery, outcome.delivery);
|
|
174
|
+
const endpoint = this.endpoints.get(endpointId);
|
|
175
|
+
let disabled = false;
|
|
176
|
+
if (endpoint && endpoint.orgId === orgId) {
|
|
177
|
+
const now = this.now();
|
|
178
|
+
if (outcome.endpoint === 'success') {
|
|
179
|
+
endpoint.consecutiveFailures = 0;
|
|
180
|
+
endpoint.lastDeliveryAt = now;
|
|
181
|
+
endpoint.lastSuccessAt = now;
|
|
182
|
+
}
|
|
183
|
+
else if (outcome.endpoint === 'failure') {
|
|
184
|
+
endpoint.consecutiveFailures += 1;
|
|
185
|
+
endpoint.lastDeliveryAt = now;
|
|
186
|
+
const reason = outcome.disableNow ?? (endpoint.consecutiveFailures >= outcome.threshold ? 'circuit_open' : undefined);
|
|
187
|
+
if (reason && endpoint.enabled) {
|
|
188
|
+
endpoint.enabled = false;
|
|
189
|
+
endpoint.disabledReason = reason;
|
|
190
|
+
disabled = true;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
if (outcome.retryAt)
|
|
195
|
+
this.enqueued.push({ deliveryId, orgId, reason: 'rerun', scheduledFor: outcome.retryAt });
|
|
196
|
+
return { endpoint: endpoint && endpoint.orgId === orgId ? { ...endpoint } : null, disabled };
|
|
197
|
+
}
|
|
198
|
+
async resetForRedelivery(orgId, id) {
|
|
199
|
+
const delivery = this.deliveries.get(id);
|
|
200
|
+
if (!delivery || delivery.orgId !== orgId)
|
|
201
|
+
throw new Error('Webhook delivery not found');
|
|
202
|
+
Object.assign(delivery, { status: 'pending', attempt: 0, responseStatus: null, responseSnippet: null, errorCode: null, durationMs: null, nextAttemptAt: null, deliveredAt: null });
|
|
203
|
+
this.enqueued.push({ deliveryId: id, orgId, reason: 'rerun', scheduledFor: null });
|
|
204
|
+
return { ...delivery };
|
|
205
|
+
}
|
|
206
|
+
async purgeDeliveriesBefore(cutoff) {
|
|
207
|
+
let count = 0;
|
|
208
|
+
for (const [id, delivery] of this.deliveries) {
|
|
209
|
+
if (delivery.createdAt < cutoff) {
|
|
210
|
+
this.deliveries.delete(id);
|
|
211
|
+
count += 1;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return count;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
exports.InMemoryWebhooksRepository = InMemoryWebhooksRepository;
|
|
218
|
+
/**
|
|
219
|
+
* The signing-secret store in memory.
|
|
220
|
+
*
|
|
221
|
+
* @stability experimental
|
|
222
|
+
*/
|
|
223
|
+
class InMemoryWebhookSecrets extends webhook_secrets_service_1.WebhookSecrets {
|
|
224
|
+
/** `<scope>/<owner or org>/<name>` to secret. */
|
|
225
|
+
stored = new Map();
|
|
226
|
+
key(endpoint, version) {
|
|
227
|
+
return `${endpoint.scope}/${endpoint.ownerUserId ?? endpoint.orgId ?? 'system'}/${(0, webhook_secrets_service_1.secretName)(endpoint.id, version)}`;
|
|
228
|
+
}
|
|
229
|
+
async put(endpoint, version, secret) {
|
|
230
|
+
this.stored.set(this.key(endpoint, version), secret);
|
|
231
|
+
}
|
|
232
|
+
async get(endpoint, version) {
|
|
233
|
+
return this.stored.get(this.key(endpoint, version)) ?? null;
|
|
234
|
+
}
|
|
235
|
+
async remove(endpoint, version) {
|
|
236
|
+
this.stored.delete(this.key(endpoint, version));
|
|
237
|
+
}
|
|
238
|
+
async removeAll(endpoint, upTo) {
|
|
239
|
+
for (let version = 1; version <= upTo; version += 1)
|
|
240
|
+
this.stored.delete(this.key(endpoint, version));
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
exports.InMemoryWebhookSecrets = InMemoryWebhookSecrets;
|
|
244
|
+
/**
|
|
245
|
+
* A fake receiver: records every request and answers from a script (the last
|
|
246
|
+
* answer repeats; the default is `200 ok`).
|
|
247
|
+
*
|
|
248
|
+
* @stability experimental
|
|
249
|
+
*/
|
|
250
|
+
class FakeWebhookReceiver {
|
|
251
|
+
/** Every request received. */
|
|
252
|
+
requests = [];
|
|
253
|
+
script = [];
|
|
254
|
+
/** Sets the answers, in order. */
|
|
255
|
+
answerWith(...answers) {
|
|
256
|
+
this.script = [...answers];
|
|
257
|
+
return this;
|
|
258
|
+
}
|
|
259
|
+
async send(request) {
|
|
260
|
+
this.requests.push(request);
|
|
261
|
+
const answer = (this.script.length > 1 ? this.script.shift() : this.script[0]) ?? { status: 200, snippet: 'ok' };
|
|
262
|
+
if ('fail' in answer)
|
|
263
|
+
throw new transport_1.WebhookTransportError(answer.fail, 'scripted failure');
|
|
264
|
+
return { status: answer.status, retryAfter: answer.retryAfter ?? null, snippet: answer.snippet ?? '' };
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
exports.FakeWebhookReceiver = FakeWebhookReceiver;
|
|
268
|
+
/**
|
|
269
|
+
* A DNS resolver whose answers a test scripts per host name (and changes
|
|
270
|
+
* between calls, to model DNS rebinding).
|
|
271
|
+
*
|
|
272
|
+
* @stability experimental
|
|
273
|
+
*/
|
|
274
|
+
class ScriptedHostResolver {
|
|
275
|
+
answers = new Map();
|
|
276
|
+
/** Every name resolved, in order. */
|
|
277
|
+
lookups = [];
|
|
278
|
+
/** Sets the addresses of `hostname`; an empty list means "does not resolve". */
|
|
279
|
+
set(hostname, ...addresses) {
|
|
280
|
+
this.answers.set(hostname.toLowerCase(), addresses.map((address) => ({ address, family: address.includes(':') ? 6 : 4 })));
|
|
281
|
+
return this;
|
|
282
|
+
}
|
|
283
|
+
async resolveAll(hostname) {
|
|
284
|
+
this.lookups.push(hostname);
|
|
285
|
+
const answer = this.answers.get(hostname.toLowerCase());
|
|
286
|
+
if (!answer || answer.length === 0)
|
|
287
|
+
throw new Error('ENOTFOUND');
|
|
288
|
+
return answer;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
exports.ScriptedHostResolver = ScriptedHostResolver;
|
|
292
|
+
/** A fake `JobsService` that records what it was asked to enqueue. @stability experimental */
|
|
293
|
+
class RecordingJobs {
|
|
294
|
+
/** Every `enqueue` input. */
|
|
295
|
+
enqueued = [];
|
|
296
|
+
/** Every `enqueueWithin` input. */
|
|
297
|
+
enqueuedWithin = [];
|
|
298
|
+
/** Records the input. */
|
|
299
|
+
async enqueue(input) {
|
|
300
|
+
this.enqueued.push(input);
|
|
301
|
+
return { id: (0, node_crypto_1.randomUUID)(), ...input };
|
|
302
|
+
}
|
|
303
|
+
/** Records the input. */
|
|
304
|
+
async enqueueWithin(_tx, input) {
|
|
305
|
+
this.enqueuedWithin.push(input);
|
|
306
|
+
return { id: (0, node_crypto_1.randomUUID)(), ...input };
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
exports.RecordingJobs = RecordingJobs;
|
|
310
|
+
/** Builds a user with the given permissions, as `loadOwner` returns it. @stability experimental */
|
|
311
|
+
function makeWebhookOwner(input) {
|
|
312
|
+
const grants = (names) => names.map((name) => ({ permission: { name } }));
|
|
313
|
+
return {
|
|
314
|
+
id: input.id,
|
|
315
|
+
email: `${input.id}@example.test`,
|
|
316
|
+
isActive: input.isActive ?? true,
|
|
317
|
+
userRoles: input.systemPermissions ? [{ role: { name: 'admin', rolePermissions: grants(input.systemPermissions) } }] : [],
|
|
318
|
+
memberships: input.orgId
|
|
319
|
+
? [{ orgId: input.orgId, status: 'active', lastActiveAt: null, org: { id: input.orgId, isDefault: true }, role: { name: 'member', rolePermissions: grants(input.permissions) } }]
|
|
320
|
+
: [],
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
//# sourceMappingURL=in-memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory.js","sourceRoot":"","sources":["../../../src/webhooks/testing/in-memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { discoverWebhookRoutes, registerWebhooksConformance, webhooksConformanceSuite } from './conformance';
|
|
2
|
+
export type { WebhookControllerRoute, WebhookRoute, WebhooksConformanceOptions } from './conformance';
|
|
3
|
+
export { FakeWebhookReceiver, InMemoryWebhookSecrets, InMemoryWebhooksRepository, RecordingJobs, ScriptedHostResolver, makeWebhookOwner, } from './in-memory';
|
|
4
|
+
export type { EnqueuedDeliveryJob, FakeReceiverAnswer, FakeReceiverFailure, FakeReceiverResponse, RecordedJob, RecordedNotification } from './in-memory';
|
|
5
|
+
export { KIT_ORG_ID, KIT_OTHER_ORG_ID, KIT_USER_A, KIT_USER_B, createWebhooksTestKit } from './kit';
|
|
6
|
+
export type { SeedEndpointInput, SeedEndpointResult, WebhooksTestKit } from './kit';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/webhooks/testing/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAC7G,YAAY,EAAE,sBAAsB,EAAE,YAAY,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AACtG,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,0BAA0B,EAC1B,aAAa,EACb,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACzJ,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,OAAO,CAAC;AACpG,YAAY,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// `@marinoscar/platform-api/webhooks/testing`: the webhooks slice's test kit and
|
|
3
|
+
// conformance suite (issue #1046). Importing this entry registers the
|
|
4
|
+
// `webhooks` suite with `runPlatformConformance` (@marinoscar/platform-api/testing).
|
|
5
|
+
// Never import it from production code. Documented in ../README.md.
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.createWebhooksTestKit = exports.KIT_USER_B = exports.KIT_USER_A = exports.KIT_OTHER_ORG_ID = exports.KIT_ORG_ID = exports.makeWebhookOwner = exports.ScriptedHostResolver = exports.RecordingJobs = exports.InMemoryWebhooksRepository = exports.InMemoryWebhookSecrets = exports.FakeWebhookReceiver = exports.webhooksConformanceSuite = exports.registerWebhooksConformance = exports.discoverWebhookRoutes = void 0;
|
|
8
|
+
var conformance_1 = require("./conformance");
|
|
9
|
+
Object.defineProperty(exports, "discoverWebhookRoutes", { enumerable: true, get: function () { return conformance_1.discoverWebhookRoutes; } });
|
|
10
|
+
Object.defineProperty(exports, "registerWebhooksConformance", { enumerable: true, get: function () { return conformance_1.registerWebhooksConformance; } });
|
|
11
|
+
Object.defineProperty(exports, "webhooksConformanceSuite", { enumerable: true, get: function () { return conformance_1.webhooksConformanceSuite; } });
|
|
12
|
+
var in_memory_1 = require("./in-memory");
|
|
13
|
+
Object.defineProperty(exports, "FakeWebhookReceiver", { enumerable: true, get: function () { return in_memory_1.FakeWebhookReceiver; } });
|
|
14
|
+
Object.defineProperty(exports, "InMemoryWebhookSecrets", { enumerable: true, get: function () { return in_memory_1.InMemoryWebhookSecrets; } });
|
|
15
|
+
Object.defineProperty(exports, "InMemoryWebhooksRepository", { enumerable: true, get: function () { return in_memory_1.InMemoryWebhooksRepository; } });
|
|
16
|
+
Object.defineProperty(exports, "RecordingJobs", { enumerable: true, get: function () { return in_memory_1.RecordingJobs; } });
|
|
17
|
+
Object.defineProperty(exports, "ScriptedHostResolver", { enumerable: true, get: function () { return in_memory_1.ScriptedHostResolver; } });
|
|
18
|
+
Object.defineProperty(exports, "makeWebhookOwner", { enumerable: true, get: function () { return in_memory_1.makeWebhookOwner; } });
|
|
19
|
+
var kit_1 = require("./kit");
|
|
20
|
+
Object.defineProperty(exports, "KIT_ORG_ID", { enumerable: true, get: function () { return kit_1.KIT_ORG_ID; } });
|
|
21
|
+
Object.defineProperty(exports, "KIT_OTHER_ORG_ID", { enumerable: true, get: function () { return kit_1.KIT_OTHER_ORG_ID; } });
|
|
22
|
+
Object.defineProperty(exports, "KIT_USER_A", { enumerable: true, get: function () { return kit_1.KIT_USER_A; } });
|
|
23
|
+
Object.defineProperty(exports, "KIT_USER_B", { enumerable: true, get: function () { return kit_1.KIT_USER_B; } });
|
|
24
|
+
Object.defineProperty(exports, "createWebhooksTestKit", { enumerable: true, get: function () { return kit_1.createWebhooksTestKit; } });
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/webhooks/testing/index.ts"],"names":[],"mappings":";AAAA,iFAAiF;AACjF,sEAAsE;AACtE,qFAAqF;AACrF,oEAAoE;;;AAEpE,6CAA6G;AAApG,oHAAA,qBAAqB,OAAA;AAAE,0HAAA,2BAA2B,OAAA;AAAE,uHAAA,wBAAwB,OAAA;AAErF,yCAOqB;AANnB,gHAAA,mBAAmB,OAAA;AACnB,mHAAA,sBAAsB,OAAA;AACtB,uHAAA,0BAA0B,OAAA;AAC1B,0GAAA,aAAa,OAAA;AACb,iHAAA,oBAAoB,OAAA;AACpB,6GAAA,gBAAgB,OAAA;AAGlB,6BAAoG;AAA3F,iGAAA,UAAU,OAAA;AAAE,uGAAA,gBAAgB,OAAA;AAAE,iGAAA,UAAU,OAAA;AAAE,iGAAA,UAAU,OAAA;AAAE,4GAAA,qBAAqB,OAAA"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import type { AuditEventInput } from '../../core/index';
|
|
2
|
+
import { WebhookDeliverHandler } from '../handlers/webhook-deliver.handler';
|
|
3
|
+
import { WebhookFanoutHandler } from '../handlers/webhook-fanout.handler';
|
|
4
|
+
import { WebhookPurgeHandler } from '../handlers/webhook-purge.handler';
|
|
5
|
+
import { WebhookEndpointsService, type WebhookScopeContext } from '../webhook-endpoints.service';
|
|
6
|
+
import { type ResolvedWebhooksModuleOptions, type WebhooksModuleOptions } from '../webhooks.options';
|
|
7
|
+
import { WebhooksService } from '../webhooks.service';
|
|
8
|
+
import { FakeWebhookReceiver, type RecordedNotification, InMemoryWebhookSecrets, InMemoryWebhooksRepository, RecordingJobs, ScriptedHostResolver } from './in-memory';
|
|
9
|
+
/** The organization the kit's contexts live in. @stability experimental */
|
|
10
|
+
export declare const KIT_ORG_ID = "11111111-1111-4111-8111-111111111111";
|
|
11
|
+
/** A second organization, for isolation tests. @stability experimental */
|
|
12
|
+
export declare const KIT_OTHER_ORG_ID = "22222222-2222-4222-8222-222222222222";
|
|
13
|
+
/** A member. @stability experimental */
|
|
14
|
+
export declare const KIT_USER_A = "aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa";
|
|
15
|
+
/** Another member. @stability experimental */
|
|
16
|
+
export declare const KIT_USER_B = "bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb";
|
|
17
|
+
/** What {@link WebhooksTestKit.seedEndpoint} takes. @stability experimental */
|
|
18
|
+
export interface SeedEndpointInput {
|
|
19
|
+
/** The scope of the endpoint. */
|
|
20
|
+
scope: WebhookScopeContext['scope'];
|
|
21
|
+
/** The owner (user scope) or creator; default `KIT_USER_A`. */
|
|
22
|
+
ownerUserId?: string | null;
|
|
23
|
+
/** The organization; default `KIT_ORG_ID` (ignored for system scope). */
|
|
24
|
+
orgId?: string | null;
|
|
25
|
+
/** The subscriptions, stored as given. */
|
|
26
|
+
eventKeys: string[];
|
|
27
|
+
/** The URL; default `https://receiver.example.test/hooks/in`. */
|
|
28
|
+
url?: string;
|
|
29
|
+
/** Whether it starts enabled; default true. */
|
|
30
|
+
enabled?: boolean;
|
|
31
|
+
}
|
|
32
|
+
/** What {@link WebhooksTestKit.seedEndpoint} returns. @stability experimental */
|
|
33
|
+
export interface SeedEndpointResult {
|
|
34
|
+
/** The inserted row. */
|
|
35
|
+
endpoint: Awaited<ReturnType<InMemoryWebhooksRepository['createEndpoint']>>;
|
|
36
|
+
/** Its signing secret. */
|
|
37
|
+
secret: string;
|
|
38
|
+
}
|
|
39
|
+
/** What {@link createWebhooksTestKit} returns. @stability experimental */
|
|
40
|
+
export interface WebhooksTestKit {
|
|
41
|
+
/** Options. */
|
|
42
|
+
readonly options: ResolvedWebhooksModuleOptions;
|
|
43
|
+
/** Repository. */
|
|
44
|
+
readonly repository: InMemoryWebhooksRepository;
|
|
45
|
+
/** Secrets. */
|
|
46
|
+
readonly secrets: InMemoryWebhookSecrets;
|
|
47
|
+
/** Receiver. */
|
|
48
|
+
readonly receiver: FakeWebhookReceiver;
|
|
49
|
+
/** Resolver. */
|
|
50
|
+
readonly resolver: ScriptedHostResolver;
|
|
51
|
+
/** Jobs. */
|
|
52
|
+
readonly jobs: RecordingJobs;
|
|
53
|
+
/** Audit. */
|
|
54
|
+
readonly audit: AuditEventInput[];
|
|
55
|
+
/** Calls to `notifyNow`. */
|
|
56
|
+
readonly notified: RecordedNotification[];
|
|
57
|
+
/** Endpoints. */
|
|
58
|
+
readonly endpoints: WebhookEndpointsService;
|
|
59
|
+
/** Webhooks. */
|
|
60
|
+
readonly webhooks: WebhooksService;
|
|
61
|
+
/** Deliver. */
|
|
62
|
+
readonly deliver: WebhookDeliverHandler;
|
|
63
|
+
/** Fanout. */
|
|
64
|
+
readonly fanout: WebhookFanoutHandler;
|
|
65
|
+
/** Purge. */
|
|
66
|
+
readonly purge: WebhookPurgeHandler;
|
|
67
|
+
/** A context in the kit's organization. */
|
|
68
|
+
context(scope: WebhookScopeContext['scope'], userId?: string, permissions?: readonly string[], orgId?: string | null): WebhookScopeContext;
|
|
69
|
+
/** Runs a delivery's job as the queue would. */
|
|
70
|
+
runDeliveryJob(deliveryId: string, orgId?: string | null): Promise<void>;
|
|
71
|
+
/** Sets the clock of the services and the repository. */
|
|
72
|
+
setNow(now: () => Date): void;
|
|
73
|
+
/** Inserts an endpoint (and its secret) directly, bypassing the create-time validation: for scopes whose events the process has not registered. */
|
|
74
|
+
seedEndpoint(input: SeedEndpointInput): Promise<SeedEndpointResult>;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Builds the kit. The resolver answers `receiver.example.test` with a public
|
|
78
|
+
* address (`93.184.216.34`) until a test changes it.
|
|
79
|
+
*
|
|
80
|
+
* @param options - `forRoot` options to resolve (the transport and resolver are the kit's).
|
|
81
|
+
* @returns the kit.
|
|
82
|
+
*
|
|
83
|
+
* @stability experimental
|
|
84
|
+
*/
|
|
85
|
+
export declare function createWebhooksTestKit(options?: WebhooksModuleOptions): WebhooksTestKit;
|
|
86
|
+
//# sourceMappingURL=kit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kit.d.ts","sourceRoot":"","sources":["../../../src/webhooks/testing/kit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// The webhooks test kit (issue #1046)
|
|
4
|
+
// =============================================================================
|
|
5
|
+
//
|
|
6
|
+
// The real services (`WebhookEndpointsService`, `WebhooksService`, the three job
|
|
7
|
+
// handlers) wired over the in-memory ports, with a recording audit sink, a
|
|
8
|
+
// recording notifications service, a fake receiver and a scripted resolver.
|
|
9
|
+
// No Nest container, no database, no network. Never import it from production
|
|
10
|
+
// code.
|
|
11
|
+
// =============================================================================
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.KIT_USER_B = exports.KIT_USER_A = exports.KIT_OTHER_ORG_ID = exports.KIT_ORG_ID = void 0;
|
|
14
|
+
exports.createWebhooksTestKit = createWebhooksTestKit;
|
|
15
|
+
const index_1 = require("../../jobs/index");
|
|
16
|
+
const webhook_deliver_handler_1 = require("../handlers/webhook-deliver.handler");
|
|
17
|
+
const webhook_fanout_handler_1 = require("../handlers/webhook-fanout.handler");
|
|
18
|
+
const webhook_purge_handler_1 = require("../handlers/webhook-purge.handler");
|
|
19
|
+
const builtin_events_1 = require("../registry/builtin-events");
|
|
20
|
+
const signing_1 = require("../signing");
|
|
21
|
+
const webhook_endpoints_service_1 = require("../webhook-endpoints.service");
|
|
22
|
+
const webhooks_options_1 = require("../webhooks.options");
|
|
23
|
+
const webhooks_service_1 = require("../webhooks.service");
|
|
24
|
+
const in_memory_1 = require("./in-memory");
|
|
25
|
+
const webhooks_errors_1 = require("../webhooks.errors");
|
|
26
|
+
/** The organization the kit's contexts live in. @stability experimental */
|
|
27
|
+
exports.KIT_ORG_ID = '11111111-1111-4111-8111-111111111111';
|
|
28
|
+
/** A second organization, for isolation tests. @stability experimental */
|
|
29
|
+
exports.KIT_OTHER_ORG_ID = '22222222-2222-4222-8222-222222222222';
|
|
30
|
+
/** A member. @stability experimental */
|
|
31
|
+
exports.KIT_USER_A = 'aaaaaaaa-aaaa-4aaa-8aaa-aaaaaaaaaaaa';
|
|
32
|
+
/** Another member. @stability experimental */
|
|
33
|
+
exports.KIT_USER_B = 'bbbbbbbb-bbbb-4bbb-8bbb-bbbbbbbbbbbb';
|
|
34
|
+
/**
|
|
35
|
+
* Builds the kit. The resolver answers `receiver.example.test` with a public
|
|
36
|
+
* address (`93.184.216.34`) until a test changes it.
|
|
37
|
+
*
|
|
38
|
+
* @param options - `forRoot` options to resolve (the transport and resolver are the kit's).
|
|
39
|
+
* @returns the kit.
|
|
40
|
+
*
|
|
41
|
+
* @stability experimental
|
|
42
|
+
*/
|
|
43
|
+
function createWebhooksTestKit(options = {}) {
|
|
44
|
+
(0, builtin_events_1.registerBuiltinWebhookEvents)();
|
|
45
|
+
(0, webhooks_errors_1.registerWebhookErrorCodes)();
|
|
46
|
+
const receiver = new in_memory_1.FakeWebhookReceiver();
|
|
47
|
+
const resolver = new in_memory_1.ScriptedHostResolver().set('receiver.example.test', '93.184.216.34');
|
|
48
|
+
const resolved = (0, webhooks_options_1.resolveWebhooksModuleOptions)({ ...options, transport: receiver, resolver });
|
|
49
|
+
const repository = new in_memory_1.InMemoryWebhooksRepository();
|
|
50
|
+
const secrets = new in_memory_1.InMemoryWebhookSecrets();
|
|
51
|
+
const jobs = new in_memory_1.RecordingJobs();
|
|
52
|
+
const audit = [];
|
|
53
|
+
const auditSink = { record: async (event) => void audit.push(event) };
|
|
54
|
+
const notified = [];
|
|
55
|
+
const notifications = {
|
|
56
|
+
notifyNow: async (eventKey, userId, data) => {
|
|
57
|
+
notified.push({ eventKey, userId, data });
|
|
58
|
+
return { rateLimited: false, retryAfterMs: null };
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
const prisma = { organization: { findFirst: async () => ({ id: exports.KIT_ORG_ID }) }, $executeRaw: async () => 0 };
|
|
62
|
+
const registry = new index_1.JobHandlerRegistry();
|
|
63
|
+
const endpoints = new webhook_endpoints_service_1.WebhookEndpointsService(repository, secrets, resolved, resolver, auditSink);
|
|
64
|
+
const webhooks = new webhooks_service_1.WebhooksService(repository, jobs, prisma, auditSink);
|
|
65
|
+
const deliver = new webhook_deliver_handler_1.WebhookDeliverHandler(registry, repository, secrets, resolved, receiver, resolver, notifications);
|
|
66
|
+
const fanout = new webhook_fanout_handler_1.WebhookFanoutHandler(registry, webhooks);
|
|
67
|
+
const purge = new webhook_purge_handler_1.WebhookPurgeHandler(registry, repository, resolved);
|
|
68
|
+
return {
|
|
69
|
+
options: resolved,
|
|
70
|
+
repository,
|
|
71
|
+
secrets,
|
|
72
|
+
receiver,
|
|
73
|
+
resolver,
|
|
74
|
+
jobs,
|
|
75
|
+
audit,
|
|
76
|
+
notified,
|
|
77
|
+
endpoints,
|
|
78
|
+
webhooks,
|
|
79
|
+
deliver,
|
|
80
|
+
fanout,
|
|
81
|
+
purge,
|
|
82
|
+
context: (scope, userId = exports.KIT_USER_A, permissions = ['webhooks:read', 'webhooks:write', 'org_webhooks:read', 'org_webhooks:write', 'system_webhooks:read', 'system_webhooks:write'], orgId = scope === 'system' ? null : exports.KIT_ORG_ID) => ({
|
|
83
|
+
scope,
|
|
84
|
+
userId,
|
|
85
|
+
orgId,
|
|
86
|
+
permissions,
|
|
87
|
+
}),
|
|
88
|
+
runDeliveryJob: (deliveryId, orgId = exports.KIT_ORG_ID) => deliver.process({ id: 'job-1', type: deliver.type, subjectId: deliveryId, orgId }),
|
|
89
|
+
seedEndpoint: async (input) => {
|
|
90
|
+
const orgId = input.scope === 'system' ? null : (input.orgId ?? exports.KIT_ORG_ID);
|
|
91
|
+
const endpoint = await repository.createEndpoint(orgId, {
|
|
92
|
+
scope: input.scope,
|
|
93
|
+
ownerUserId: input.scope === 'user' ? (input.ownerUserId ?? exports.KIT_USER_A) : null,
|
|
94
|
+
createdById: input.ownerUserId ?? exports.KIT_USER_A,
|
|
95
|
+
name: 'seeded',
|
|
96
|
+
description: null,
|
|
97
|
+
url: input.url ?? 'https://receiver.example.test/hooks/in',
|
|
98
|
+
eventKeys: input.eventKeys,
|
|
99
|
+
enabled: input.enabled ?? true,
|
|
100
|
+
});
|
|
101
|
+
const secret = (0, signing_1.generateWebhookSecret)();
|
|
102
|
+
await secrets.put(endpoint, endpoint.secretVersion, secret);
|
|
103
|
+
return { endpoint, secret };
|
|
104
|
+
},
|
|
105
|
+
setNow: (now) => {
|
|
106
|
+
repository.now = now;
|
|
107
|
+
endpoints.now = now;
|
|
108
|
+
deliver.now = now;
|
|
109
|
+
purge.now = now;
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=kit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kit.js","sourceRoot":"","sources":["../../../src/webhooks/testing/kit.ts"],"names":[],"mappings":"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"}
|