@marinoscar/platform-api 0.1.0-next.19 → 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.
Files changed (437) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +1 -0
  3. package/dist/alerts/alerts-admin.controller.d.ts +40 -0
  4. package/dist/alerts/alerts-admin.controller.d.ts.map +1 -0
  5. package/dist/alerts/alerts-admin.controller.js +297 -0
  6. package/dist/alerts/alerts-admin.controller.js.map +1 -0
  7. package/dist/alerts/alerts-context.service.d.ts +64 -0
  8. package/dist/alerts/alerts-context.service.d.ts.map +1 -0
  9. package/dist/alerts/alerts-context.service.js +190 -0
  10. package/dist/alerts/alerts-context.service.js.map +1 -0
  11. package/dist/alerts/alerts-dispatch.service.d.ts +53 -0
  12. package/dist/alerts/alerts-dispatch.service.d.ts.map +1 -0
  13. package/dist/alerts/alerts-dispatch.service.js +135 -0
  14. package/dist/alerts/alerts-dispatch.service.js.map +1 -0
  15. package/dist/alerts/alerts-evaluation.service.d.ts +88 -0
  16. package/dist/alerts/alerts-evaluation.service.d.ts.map +1 -0
  17. package/dist/alerts/alerts-evaluation.service.js +296 -0
  18. package/dist/alerts/alerts-evaluation.service.js.map +1 -0
  19. package/dist/alerts/alerts-event.listener.d.ts +22 -0
  20. package/dist/alerts/alerts-event.listener.d.ts.map +1 -0
  21. package/dist/alerts/alerts-event.listener.js +72 -0
  22. package/dist/alerts/alerts-event.listener.js.map +1 -0
  23. package/dist/alerts/alerts-incidents.service.d.ts +86 -0
  24. package/dist/alerts/alerts-incidents.service.d.ts.map +1 -0
  25. package/dist/alerts/alerts-incidents.service.js +144 -0
  26. package/dist/alerts/alerts-incidents.service.js.map +1 -0
  27. package/dist/alerts/alerts-rules.service.d.ts +73 -0
  28. package/dist/alerts/alerts-rules.service.d.ts.map +1 -0
  29. package/dist/alerts/alerts-rules.service.js +205 -0
  30. package/dist/alerts/alerts-rules.service.js.map +1 -0
  31. package/dist/alerts/alerts-seed.service.d.ts +25 -0
  32. package/dist/alerts/alerts-seed.service.d.ts.map +1 -0
  33. package/dist/alerts/alerts-seed.service.js +82 -0
  34. package/dist/alerts/alerts-seed.service.js.map +1 -0
  35. package/dist/alerts/alerts.constants.d.ts +53 -0
  36. package/dist/alerts/alerts.constants.d.ts.map +1 -0
  37. package/dist/alerts/alerts.constants.js +57 -0
  38. package/dist/alerts/alerts.constants.js.map +1 -0
  39. package/dist/alerts/alerts.errors.d.ts +44 -0
  40. package/dist/alerts/alerts.errors.d.ts.map +1 -0
  41. package/dist/alerts/alerts.errors.js +47 -0
  42. package/dist/alerts/alerts.errors.js.map +1 -0
  43. package/dist/alerts/alerts.metrics.d.ts +60 -0
  44. package/dist/alerts/alerts.metrics.d.ts.map +1 -0
  45. package/dist/alerts/alerts.metrics.js +135 -0
  46. package/dist/alerts/alerts.metrics.js.map +1 -0
  47. package/dist/alerts/alerts.module.d.ts +35 -0
  48. package/dist/alerts/alerts.module.d.ts.map +1 -0
  49. package/dist/alerts/alerts.module.js +96 -0
  50. package/dist/alerts/alerts.module.js.map +1 -0
  51. package/dist/alerts/alerts.options.d.ts +64 -0
  52. package/dist/alerts/alerts.options.d.ts.map +1 -0
  53. package/dist/alerts/alerts.options.js +34 -0
  54. package/dist/alerts/alerts.options.js.map +1 -0
  55. package/dist/alerts/alerts.permissions.d.ts +27 -0
  56. package/dist/alerts/alerts.permissions.d.ts.map +1 -0
  57. package/dist/alerts/alerts.permissions.js +29 -0
  58. package/dist/alerts/alerts.permissions.js.map +1 -0
  59. package/dist/alerts/alerts.types.d.ts +182 -0
  60. package/dist/alerts/alerts.types.d.ts.map +1 -0
  61. package/dist/alerts/alerts.types.js +3 -0
  62. package/dist/alerts/alerts.types.js.map +1 -0
  63. package/dist/alerts/data/alerts-db.d.ts +169 -0
  64. package/dist/alerts/data/alerts-db.d.ts.map +1 -0
  65. package/dist/alerts/data/alerts-db.js +18 -0
  66. package/dist/alerts/data/alerts-db.js.map +1 -0
  67. package/dist/alerts/dto/alerts.dto.d.ts +132 -0
  68. package/dist/alerts/dto/alerts.dto.d.ts.map +1 -0
  69. package/dist/alerts/dto/alerts.dto.js +42 -0
  70. package/dist/alerts/dto/alerts.dto.js.map +1 -0
  71. package/dist/alerts/handlers/alerts-evaluate-event.handler.d.ts +23 -0
  72. package/dist/alerts/handlers/alerts-evaluate-event.handler.d.ts.map +1 -0
  73. package/dist/alerts/handlers/alerts-evaluate-event.handler.js +71 -0
  74. package/dist/alerts/handlers/alerts-evaluate-event.handler.js.map +1 -0
  75. package/dist/alerts/handlers/alerts-evaluate.handler.d.ts +25 -0
  76. package/dist/alerts/handlers/alerts-evaluate.handler.d.ts.map +1 -0
  77. package/dist/alerts/handlers/alerts-evaluate.handler.js +54 -0
  78. package/dist/alerts/handlers/alerts-evaluate.handler.js.map +1 -0
  79. package/dist/alerts/handlers/alerts-incidents-purge.handler.d.ts +29 -0
  80. package/dist/alerts/handlers/alerts-incidents-purge.handler.d.ts.map +1 -0
  81. package/dist/alerts/handlers/alerts-incidents-purge.handler.js +76 -0
  82. package/dist/alerts/handlers/alerts-incidents-purge.handler.js.map +1 -0
  83. package/dist/alerts/index.d.ts +45 -0
  84. package/dist/alerts/index.d.ts.map +1 -0
  85. package/dist/alerts/index.js +108 -0
  86. package/dist/alerts/index.js.map +1 -0
  87. package/dist/alerts/kinds/alert-kind.registry.d.ts +33 -0
  88. package/dist/alerts/kinds/alert-kind.registry.d.ts.map +1 -0
  89. package/dist/alerts/kinds/alert-kind.registry.js +63 -0
  90. package/dist/alerts/kinds/alert-kind.registry.js.map +1 -0
  91. package/dist/alerts/kinds/builtin-kinds.d.ts +18 -0
  92. package/dist/alerts/kinds/builtin-kinds.d.ts.map +1 -0
  93. package/dist/alerts/kinds/builtin-kinds.js +33 -0
  94. package/dist/alerts/kinds/builtin-kinds.js.map +1 -0
  95. package/dist/alerts/kinds/metric-threshold.kind.d.ts +11 -0
  96. package/dist/alerts/kinds/metric-threshold.kind.d.ts.map +1 -0
  97. package/dist/alerts/kinds/metric-threshold.kind.js +63 -0
  98. package/dist/alerts/kinds/metric-threshold.kind.js.map +1 -0
  99. package/dist/alerts/kinds/metric-threshold.sql.d.ts +41 -0
  100. package/dist/alerts/kinds/metric-threshold.sql.d.ts.map +1 -0
  101. package/dist/alerts/kinds/metric-threshold.sql.js +124 -0
  102. package/dist/alerts/kinds/metric-threshold.sql.js.map +1 -0
  103. package/dist/alerts/kinds/node-event.kind.d.ts +44 -0
  104. package/dist/alerts/kinds/node-event.kind.d.ts.map +1 -0
  105. package/dist/alerts/kinds/node-event.kind.js +113 -0
  106. package/dist/alerts/kinds/node-event.kind.js.map +1 -0
  107. package/dist/alerts/kinds/node-offline.kind.d.ts +11 -0
  108. package/dist/alerts/kinds/node-offline.kind.d.ts.map +1 -0
  109. package/dist/alerts/kinds/node-offline.kind.js +41 -0
  110. package/dist/alerts/kinds/node-offline.kind.js.map +1 -0
  111. package/dist/alerts/kinds/telemetry-unavailable.kind.d.ts +11 -0
  112. package/dist/alerts/kinds/telemetry-unavailable.kind.d.ts.map +1 -0
  113. package/dist/alerts/kinds/telemetry-unavailable.kind.js +40 -0
  114. package/dist/alerts/kinds/telemetry-unavailable.kind.js.map +1 -0
  115. package/dist/alerts/kinds/verdict.kind.d.ts +13 -0
  116. package/dist/alerts/kinds/verdict.kind.d.ts.map +1 -0
  117. package/dist/alerts/kinds/verdict.kind.js +34 -0
  118. package/dist/alerts/kinds/verdict.kind.js.map +1 -0
  119. package/dist/alerts/notifications/alerts.notifications.d.ts +77 -0
  120. package/dist/alerts/notifications/alerts.notifications.d.ts.map +1 -0
  121. package/dist/alerts/notifications/alerts.notifications.js +145 -0
  122. package/dist/alerts/notifications/alerts.notifications.js.map +1 -0
  123. package/dist/alerts/starter-rules.d.ts +21 -0
  124. package/dist/alerts/starter-rules.d.ts.map +1 -0
  125. package/dist/alerts/starter-rules.js +141 -0
  126. package/dist/alerts/starter-rules.js.map +1 -0
  127. package/dist/alerts/state/alert-state-machine.d.ts +92 -0
  128. package/dist/alerts/state/alert-state-machine.d.ts.map +1 -0
  129. package/dist/alerts/state/alert-state-machine.js +96 -0
  130. package/dist/alerts/state/alert-state-machine.js.map +1 -0
  131. package/dist/alerts/tasks/alerts-evaluate.task.d.ts +18 -0
  132. package/dist/alerts/tasks/alerts-evaluate.task.d.ts.map +1 -0
  133. package/dist/alerts/tasks/alerts-evaluate.task.js +61 -0
  134. package/dist/alerts/tasks/alerts-evaluate.task.js.map +1 -0
  135. package/dist/alerts/tasks/alerts-purge.task.d.ts +15 -0
  136. package/dist/alerts/tasks/alerts-purge.task.d.ts.map +1 -0
  137. package/dist/alerts/tasks/alerts-purge.task.js +58 -0
  138. package/dist/alerts/tasks/alerts-purge.task.js.map +1 -0
  139. package/dist/alerts/testing/conformance.d.ts +58 -0
  140. package/dist/alerts/testing/conformance.d.ts.map +1 -0
  141. package/dist/alerts/testing/conformance.js +198 -0
  142. package/dist/alerts/testing/conformance.js.map +1 -0
  143. package/dist/alerts/testing/fakes.d.ts +80 -0
  144. package/dist/alerts/testing/fakes.d.ts.map +1 -0
  145. package/dist/alerts/testing/fakes.js +230 -0
  146. package/dist/alerts/testing/fakes.js.map +1 -0
  147. package/dist/alerts/testing/index.d.ts +5 -0
  148. package/dist/alerts/testing/index.d.ts.map +1 -0
  149. package/dist/alerts/testing/index.js +15 -0
  150. package/dist/alerts/testing/index.js.map +1 -0
  151. package/dist/core/index.d.ts +1 -0
  152. package/dist/core/index.d.ts.map +1 -1
  153. package/dist/core/index.js +8 -2
  154. package/dist/core/index.js.map +1 -1
  155. package/dist/core/net/ip-classify.d.ts +39 -0
  156. package/dist/core/net/ip-classify.d.ts.map +1 -0
  157. package/dist/core/net/ip-classify.js +196 -0
  158. package/dist/core/net/ip-classify.js.map +1 -0
  159. package/dist/credentials/testing/conformance.d.ts.map +1 -1
  160. package/dist/credentials/testing/conformance.js +1 -0
  161. package/dist/credentials/testing/conformance.js.map +1 -1
  162. package/dist/jobs/data/jobs-db.d.ts +26 -0
  163. package/dist/jobs/data/jobs-db.d.ts.map +1 -1
  164. package/dist/jobs/index.d.ts +1 -1
  165. package/dist/jobs/index.d.ts.map +1 -1
  166. package/dist/jobs/index.js.map +1 -1
  167. package/dist/manifest/platform-model-ownership.d.ts +1 -1
  168. package/dist/manifest/platform-model-ownership.d.ts.map +1 -1
  169. package/dist/manifest/platform-model-ownership.js +30 -1
  170. package/dist/manifest/platform-model-ownership.js.map +1 -1
  171. package/dist/manifest/platform-permissions.d.ts +6 -2
  172. package/dist/manifest/platform-permissions.d.ts.map +1 -1
  173. package/dist/manifest/platform-permissions.js +56 -44
  174. package/dist/manifest/platform-permissions.js.map +1 -1
  175. package/dist/manifest/platform-user-owned-models.d.ts.map +1 -1
  176. package/dist/manifest/platform-user-owned-models.js +16 -0
  177. package/dist/manifest/platform-user-owned-models.js.map +1 -1
  178. package/dist/nodes/dto/node-admin.dto.d.ts +5 -0
  179. package/dist/nodes/dto/node-admin.dto.d.ts.map +1 -1
  180. package/dist/nodes/dto/node-admin.dto.js +19 -0
  181. package/dist/nodes/dto/node-admin.dto.js.map +1 -1
  182. package/dist/nodes/dto/node-control-plane.dto.d.ts +26 -0
  183. package/dist/nodes/dto/node-control-plane.dto.d.ts.map +1 -1
  184. package/dist/nodes/dto/node-event.dto.d.ts +100 -0
  185. package/dist/nodes/dto/node-event.dto.d.ts.map +1 -0
  186. package/dist/nodes/dto/node-event.dto.js +239 -0
  187. package/dist/nodes/dto/node-event.dto.js.map +1 -0
  188. package/dist/nodes/dto/node-response.dto.d.ts +21 -0
  189. package/dist/nodes/dto/node-response.dto.d.ts.map +1 -1
  190. package/dist/nodes/dto/node-response.dto.js +42 -1
  191. package/dist/nodes/dto/node-response.dto.js.map +1 -1
  192. package/dist/nodes/events/node-event.event.d.ts +41 -0
  193. package/dist/nodes/events/node-event.event.d.ts.map +1 -0
  194. package/dist/nodes/events/node-event.event.js +69 -0
  195. package/dist/nodes/events/node-event.event.js.map +1 -0
  196. package/dist/nodes/handlers/node-events-purge.handler.d.ts +31 -0
  197. package/dist/nodes/handlers/node-events-purge.handler.d.ts.map +1 -0
  198. package/dist/nodes/handlers/node-events-purge.handler.js +91 -0
  199. package/dist/nodes/handlers/node-events-purge.handler.js.map +1 -0
  200. package/dist/nodes/index.d.ts +11 -4
  201. package/dist/nodes/index.d.ts.map +1 -1
  202. package/dist/nodes/index.js +20 -1
  203. package/dist/nodes/index.js.map +1 -1
  204. package/dist/nodes/node-events.service.d.ts +87 -0
  205. package/dist/nodes/node-events.service.d.ts.map +1 -0
  206. package/dist/nodes/node-events.service.js +271 -0
  207. package/dist/nodes/node-events.service.js.map +1 -0
  208. package/dist/nodes/node-fleet-metrics.service.d.ts +10 -1
  209. package/dist/nodes/node-fleet-metrics.service.d.ts.map +1 -1
  210. package/dist/nodes/node-fleet-metrics.service.js +31 -0
  211. package/dist/nodes/node-fleet-metrics.service.js.map +1 -1
  212. package/dist/nodes/node-lifecycle.service.d.ts +16 -1
  213. package/dist/nodes/node-lifecycle.service.d.ts.map +1 -1
  214. package/dist/nodes/node-lifecycle.service.js +7 -0
  215. package/dist/nodes/node-lifecycle.service.js.map +1 -1
  216. package/dist/nodes/nodes-admin.controller.d.ts +5 -1
  217. package/dist/nodes/nodes-admin.controller.d.ts.map +1 -1
  218. package/dist/nodes/nodes-admin.controller.js +32 -2
  219. package/dist/nodes/nodes-admin.controller.js.map +1 -1
  220. package/dist/nodes/nodes.controller.d.ts +7 -3
  221. package/dist/nodes/nodes.controller.d.ts.map +1 -1
  222. package/dist/nodes/nodes.controller.js +46 -6
  223. package/dist/nodes/nodes.controller.js.map +1 -1
  224. package/dist/nodes/nodes.metrics.d.ts +23 -1
  225. package/dist/nodes/nodes.metrics.d.ts.map +1 -1
  226. package/dist/nodes/nodes.metrics.js +80 -1
  227. package/dist/nodes/nodes.metrics.js.map +1 -1
  228. package/dist/nodes/nodes.module.d.ts.map +1 -1
  229. package/dist/nodes/nodes.module.js +6 -0
  230. package/dist/nodes/nodes.module.js.map +1 -1
  231. package/dist/nodes/nodes.options.d.ts +17 -0
  232. package/dist/nodes/nodes.options.d.ts.map +1 -1
  233. package/dist/nodes/nodes.options.js +13 -2
  234. package/dist/nodes/nodes.options.js.map +1 -1
  235. package/dist/nodes/nodes.service.d.ts +3 -1
  236. package/dist/nodes/nodes.service.d.ts.map +1 -1
  237. package/dist/nodes/nodes.service.js +14 -3
  238. package/dist/nodes/nodes.service.js.map +1 -1
  239. package/dist/nodes/tasks/node-events-purge.task.d.ts +13 -0
  240. package/dist/nodes/tasks/node-events-purge.task.d.ts.map +1 -0
  241. package/dist/nodes/tasks/node-events-purge.task.js +73 -0
  242. package/dist/nodes/tasks/node-events-purge.task.js.map +1 -0
  243. package/dist/telemetry/dashboard/telemetry-dashboard.service.d.ts +30 -8
  244. package/dist/telemetry/dashboard/telemetry-dashboard.service.d.ts.map +1 -1
  245. package/dist/telemetry/dashboard/telemetry-dashboard.service.js +12 -0
  246. package/dist/telemetry/dashboard/telemetry-dashboard.service.js.map +1 -1
  247. package/dist/telemetry/dashboard/telemetry-dashboard.verdict.d.ts +15 -0
  248. package/dist/telemetry/dashboard/telemetry-dashboard.verdict.d.ts.map +1 -1
  249. package/dist/telemetry/dashboard/telemetry-dashboard.verdict.js +17 -2
  250. package/dist/telemetry/dashboard/telemetry-dashboard.verdict.js.map +1 -1
  251. package/dist/telemetry/dto/telemetry-dashboard.dto.d.ts +3 -3
  252. package/dist/telemetry/index.d.ts +4 -2
  253. package/dist/telemetry/index.d.ts.map +1 -1
  254. package/dist/telemetry/index.js +4 -1
  255. package/dist/telemetry/index.js.map +1 -1
  256. package/dist/telemetry/metrics/groups/nodes.metric-group.d.ts.map +1 -1
  257. package/dist/telemetry/metrics/groups/nodes.metric-group.js +77 -0
  258. package/dist/telemetry/metrics/groups/nodes.metric-group.js.map +1 -1
  259. package/dist/telemetry/metrics/metric-verdict.d.ts +1 -1
  260. package/dist/telemetry/metrics/metric-verdict.d.ts.map +1 -1
  261. package/dist/telemetry/metrics/metric-verdict.js +15 -1
  262. package/dist/telemetry/metrics/metric-verdict.js.map +1 -1
  263. package/dist/telemetry/query/telemetry-query-facade.d.ts +1 -1
  264. package/dist/telemetry/query/telemetry-query-facade.d.ts.map +1 -1
  265. package/dist/telemetry/query/telemetry-query-facade.js.map +1 -1
  266. package/dist/telemetry/query/telemetry-query.service.d.ts +2 -2
  267. package/dist/telemetry/query/telemetry-query.service.d.ts.map +1 -1
  268. package/dist/telemetry/query/telemetry-query.service.js +4 -0
  269. package/dist/telemetry/query/telemetry-query.service.js.map +1 -1
  270. package/dist/telemetry/stack/dto/telemetry-stack.dto.d.ts +1 -1
  271. package/dist/telemetry/telemetry-support-bundle.section.d.ts +4 -4
  272. package/dist/telemetry/telemetry.module.d.ts.map +1 -1
  273. package/dist/telemetry/telemetry.module.js +1 -0
  274. package/dist/telemetry/telemetry.module.js.map +1 -1
  275. package/dist/telemetry/testing/metric-schema.fixture.d.ts.map +1 -1
  276. package/dist/telemetry/testing/metric-schema.fixture.js +56 -0
  277. package/dist/telemetry/testing/metric-schema.fixture.js.map +1 -1
  278. package/dist/user-data/platform-user-data.d.ts.map +1 -1
  279. package/dist/user-data/platform-user-data.js +2 -0
  280. package/dist/user-data/platform-user-data.js.map +1 -1
  281. package/dist/webhooks/data/webhooks-db.d.ts +176 -0
  282. package/dist/webhooks/data/webhooks-db.d.ts.map +1 -0
  283. package/dist/webhooks/data/webhooks-db.js +14 -0
  284. package/dist/webhooks/data/webhooks-db.js.map +1 -0
  285. package/dist/webhooks/egress/egress-guard.d.ts +99 -0
  286. package/dist/webhooks/egress/egress-guard.d.ts.map +1 -0
  287. package/dist/webhooks/egress/egress-guard.js +172 -0
  288. package/dist/webhooks/egress/egress-guard.js.map +1 -0
  289. package/dist/webhooks/egress/transport.d.ts +58 -0
  290. package/dist/webhooks/egress/transport.d.ts.map +1 -0
  291. package/dist/webhooks/egress/transport.js +115 -0
  292. package/dist/webhooks/egress/transport.js.map +1 -0
  293. package/dist/webhooks/handlers/webhook-deliver.handler.d.ts +76 -0
  294. package/dist/webhooks/handlers/webhook-deliver.handler.d.ts.map +1 -0
  295. package/dist/webhooks/handlers/webhook-deliver.handler.js +332 -0
  296. package/dist/webhooks/handlers/webhook-deliver.handler.js.map +1 -0
  297. package/dist/webhooks/handlers/webhook-fanout.handler.d.ts +28 -0
  298. package/dist/webhooks/handlers/webhook-fanout.handler.d.ts.map +1 -0
  299. package/dist/webhooks/handlers/webhook-fanout.handler.js +73 -0
  300. package/dist/webhooks/handlers/webhook-fanout.handler.js.map +1 -0
  301. package/dist/webhooks/handlers/webhook-purge.handler.d.ts +33 -0
  302. package/dist/webhooks/handlers/webhook-purge.handler.d.ts.map +1 -0
  303. package/dist/webhooks/handlers/webhook-purge.handler.js +77 -0
  304. package/dist/webhooks/handlers/webhook-purge.handler.js.map +1 -0
  305. package/dist/webhooks/http/admin-webhooks.controller.d.ts +36 -0
  306. package/dist/webhooks/http/admin-webhooks.controller.d.ts.map +1 -0
  307. package/dist/webhooks/http/admin-webhooks.controller.js +250 -0
  308. package/dist/webhooks/http/admin-webhooks.controller.js.map +1 -0
  309. package/dist/webhooks/http/org-webhooks.controller.d.ts +36 -0
  310. package/dist/webhooks/http/org-webhooks.controller.d.ts.map +1 -0
  311. package/dist/webhooks/http/org-webhooks.controller.js +249 -0
  312. package/dist/webhooks/http/org-webhooks.controller.js.map +1 -0
  313. package/dist/webhooks/http/scope-context.d.ts +17 -0
  314. package/dist/webhooks/http/scope-context.d.ts.map +1 -0
  315. package/dist/webhooks/http/scope-context.js +28 -0
  316. package/dist/webhooks/http/scope-context.js.map +1 -0
  317. package/dist/webhooks/http/webhook.dto.d.ts +174 -0
  318. package/dist/webhooks/http/webhook.dto.d.ts.map +1 -0
  319. package/dist/webhooks/http/webhook.dto.js +58 -0
  320. package/dist/webhooks/http/webhook.dto.js.map +1 -0
  321. package/dist/webhooks/http/webhooks.controller.d.ts +36 -0
  322. package/dist/webhooks/http/webhooks.controller.d.ts.map +1 -0
  323. package/dist/webhooks/http/webhooks.controller.js +243 -0
  324. package/dist/webhooks/http/webhooks.controller.js.map +1 -0
  325. package/dist/webhooks/index.d.ts +43 -0
  326. package/dist/webhooks/index.d.ts.map +1 -0
  327. package/dist/webhooks/index.js +147 -0
  328. package/dist/webhooks/index.js.map +1 -0
  329. package/dist/webhooks/listeners/webhook-event.listeners.d.ts +23 -0
  330. package/dist/webhooks/listeners/webhook-event.listeners.d.ts.map +1 -0
  331. package/dist/webhooks/listeners/webhook-event.listeners.js +120 -0
  332. package/dist/webhooks/listeners/webhook-event.listeners.js.map +1 -0
  333. package/dist/webhooks/notifications/webhook-notification.channel.d.ts +31 -0
  334. package/dist/webhooks/notifications/webhook-notification.channel.d.ts.map +1 -0
  335. package/dist/webhooks/notifications/webhook-notification.channel.js +127 -0
  336. package/dist/webhooks/notifications/webhook-notification.channel.js.map +1 -0
  337. package/dist/webhooks/notifications/webhook-notifications.d.ts +98 -0
  338. package/dist/webhooks/notifications/webhook-notifications.d.ts.map +1 -0
  339. package/dist/webhooks/notifications/webhook-notifications.js +150 -0
  340. package/dist/webhooks/notifications/webhook-notifications.js.map +1 -0
  341. package/dist/webhooks/ports.d.ts +29 -0
  342. package/dist/webhooks/ports.d.ts.map +1 -0
  343. package/dist/webhooks/ports.js +23 -0
  344. package/dist/webhooks/ports.js.map +1 -0
  345. package/dist/webhooks/registry/builtin-events.d.ts +57 -0
  346. package/dist/webhooks/registry/builtin-events.d.ts.map +1 -0
  347. package/dist/webhooks/registry/builtin-events.js +113 -0
  348. package/dist/webhooks/registry/builtin-events.js.map +1 -0
  349. package/dist/webhooks/registry/webhook-catalog.d.ts +63 -0
  350. package/dist/webhooks/registry/webhook-catalog.d.ts.map +1 -0
  351. package/dist/webhooks/registry/webhook-catalog.js +123 -0
  352. package/dist/webhooks/registry/webhook-catalog.js.map +1 -0
  353. package/dist/webhooks/registry/webhook-event.registry.d.ts +116 -0
  354. package/dist/webhooks/registry/webhook-event.registry.d.ts.map +1 -0
  355. package/dist/webhooks/registry/webhook-event.registry.js +152 -0
  356. package/dist/webhooks/registry/webhook-event.registry.js.map +1 -0
  357. package/dist/webhooks/signing.d.ts +31 -0
  358. package/dist/webhooks/signing.d.ts.map +1 -0
  359. package/dist/webhooks/signing.js +48 -0
  360. package/dist/webhooks/signing.js.map +1 -0
  361. package/dist/webhooks/tasks/webhook-purge.task.d.ts +17 -0
  362. package/dist/webhooks/tasks/webhook-purge.task.d.ts.map +1 -0
  363. package/dist/webhooks/tasks/webhook-purge.task.js +68 -0
  364. package/dist/webhooks/tasks/webhook-purge.task.js.map +1 -0
  365. package/dist/webhooks/testing/conformance.d.ts +61 -0
  366. package/dist/webhooks/testing/conformance.d.ts.map +1 -0
  367. package/dist/webhooks/testing/conformance.js +316 -0
  368. package/dist/webhooks/testing/conformance.js.map +1 -0
  369. package/dist/webhooks/testing/in-memory.d.ts +156 -0
  370. package/dist/webhooks/testing/in-memory.d.ts.map +1 -0
  371. package/dist/webhooks/testing/in-memory.js +323 -0
  372. package/dist/webhooks/testing/in-memory.js.map +1 -0
  373. package/dist/webhooks/testing/index.d.ts +7 -0
  374. package/dist/webhooks/testing/index.d.ts.map +1 -0
  375. package/dist/webhooks/testing/index.js +25 -0
  376. package/dist/webhooks/testing/index.js.map +1 -0
  377. package/dist/webhooks/testing/kit.d.ts +86 -0
  378. package/dist/webhooks/testing/kit.d.ts.map +1 -0
  379. package/dist/webhooks/testing/kit.js +113 -0
  380. package/dist/webhooks/testing/kit.js.map +1 -0
  381. package/dist/webhooks/webhook-endpoints.service.d.ts +142 -0
  382. package/dist/webhooks/webhook-endpoints.service.d.ts.map +1 -0
  383. package/dist/webhooks/webhook-endpoints.service.js +366 -0
  384. package/dist/webhooks/webhook-endpoints.service.js.map +1 -0
  385. package/dist/webhooks/webhook-envelope.d.ts +36 -0
  386. package/dist/webhooks/webhook-envelope.d.ts.map +1 -0
  387. package/dist/webhooks/webhook-envelope.js +46 -0
  388. package/dist/webhooks/webhook-envelope.js.map +1 -0
  389. package/dist/webhooks/webhook-secrets.service.d.ts +49 -0
  390. package/dist/webhooks/webhook-secrets.service.d.ts.map +1 -0
  391. package/dist/webhooks/webhook-secrets.service.js +118 -0
  392. package/dist/webhooks/webhook-secrets.service.js.map +1 -0
  393. package/dist/webhooks/webhook-views.d.ts +34 -0
  394. package/dist/webhooks/webhook-views.d.ts.map +1 -0
  395. package/dist/webhooks/webhook-views.js +83 -0
  396. package/dist/webhooks/webhook-views.js.map +1 -0
  397. package/dist/webhooks/webhooks.access.d.ts +28 -0
  398. package/dist/webhooks/webhooks.access.d.ts.map +1 -0
  399. package/dist/webhooks/webhooks.access.js +55 -0
  400. package/dist/webhooks/webhooks.access.js.map +1 -0
  401. package/dist/webhooks/webhooks.constants.d.ts +73 -0
  402. package/dist/webhooks/webhooks.constants.d.ts.map +1 -0
  403. package/dist/webhooks/webhooks.constants.js +100 -0
  404. package/dist/webhooks/webhooks.constants.js.map +1 -0
  405. package/dist/webhooks/webhooks.credentials.d.ts +28 -0
  406. package/dist/webhooks/webhooks.credentials.d.ts.map +1 -0
  407. package/dist/webhooks/webhooks.credentials.js +51 -0
  408. package/dist/webhooks/webhooks.credentials.js.map +1 -0
  409. package/dist/webhooks/webhooks.errors.d.ts +25 -0
  410. package/dist/webhooks/webhooks.errors.d.ts.map +1 -0
  411. package/dist/webhooks/webhooks.errors.js +65 -0
  412. package/dist/webhooks/webhooks.errors.js.map +1 -0
  413. package/dist/webhooks/webhooks.metrics.d.ts +24 -0
  414. package/dist/webhooks/webhooks.metrics.d.ts.map +1 -0
  415. package/dist/webhooks/webhooks.metrics.js +70 -0
  416. package/dist/webhooks/webhooks.metrics.js.map +1 -0
  417. package/dist/webhooks/webhooks.module.d.ts +29 -0
  418. package/dist/webhooks/webhooks.module.d.ts.map +1 -0
  419. package/dist/webhooks/webhooks.module.js +108 -0
  420. package/dist/webhooks/webhooks.module.js.map +1 -0
  421. package/dist/webhooks/webhooks.options.d.ts +119 -0
  422. package/dist/webhooks/webhooks.options.d.ts.map +1 -0
  423. package/dist/webhooks/webhooks.options.js +80 -0
  424. package/dist/webhooks/webhooks.options.js.map +1 -0
  425. package/dist/webhooks/webhooks.permissions.d.ts +47 -0
  426. package/dist/webhooks/webhooks.permissions.d.ts.map +1 -0
  427. package/dist/webhooks/webhooks.permissions.js +83 -0
  428. package/dist/webhooks/webhooks.permissions.js.map +1 -0
  429. package/dist/webhooks/webhooks.repository.d.ts +162 -0
  430. package/dist/webhooks/webhooks.repository.d.ts.map +1 -0
  431. package/dist/webhooks/webhooks.repository.js +246 -0
  432. package/dist/webhooks/webhooks.repository.js.map +1 -0
  433. package/dist/webhooks/webhooks.service.d.ts +91 -0
  434. package/dist/webhooks/webhooks.service.d.ts.map +1 -0
  435. package/dist/webhooks/webhooks.service.js +216 -0
  436. package/dist/webhooks/webhooks.service.js.map +1 -0
  437. package/package.json +19 -3
@@ -0,0 +1,91 @@
1
+ import { type AuditSink } from '../core/index';
2
+ import { JobsService } from '../jobs/index';
3
+ import { MetricsHostService } from '../otel-core/index';
4
+ import type { WebhooksPrisma } from './ports';
5
+ import { WebhooksRepository } from './webhooks.repository';
6
+ /** Where an event happened. @stability experimental */
7
+ export interface WebhookEmitContext {
8
+ /** The organization the event belongs to; `null` for a deployment-wide (system) event. A user event with none uses the single-mode default organization. */
9
+ readonly orgId: string | null;
10
+ /** The user the event is about (audience `user`). */
11
+ readonly userId?: string;
12
+ /** A fixed event id: a replayed fan-out passes the original, so the unique key dedupes it. Default: a new UUID. */
13
+ readonly eventId?: string;
14
+ /** When the event happened; default now. */
15
+ readonly occurredAt?: Date;
16
+ }
17
+ /** What one emit did. @stability experimental */
18
+ export interface WebhookEmitResult {
19
+ /** Endpoints that subscribe to the event and may receive it. */
20
+ readonly matched: number;
21
+ /** Delivery rows inserted (and jobs enqueued). */
22
+ readonly queued: number;
23
+ /** The event id. */
24
+ readonly eventId: string;
25
+ }
26
+ /** The payload of a `webhooks.fanout` job. @stability experimental */
27
+ export interface WebhookFanoutPayload {
28
+ /** Event key. */
29
+ readonly eventKey: string;
30
+ /** Data. */
31
+ readonly data: unknown;
32
+ /** Org id. */
33
+ readonly orgId: string | null;
34
+ /** User id. */
35
+ readonly userId?: string;
36
+ /** Event id. */
37
+ readonly eventId: string;
38
+ /** Occurred at. */
39
+ readonly occurredAt: string;
40
+ }
41
+ /**
42
+ * See the file header.
43
+ *
44
+ * @extensionPoint token
45
+ * @stability experimental
46
+ */
47
+ export declare class WebhooksService {
48
+ private readonly repository;
49
+ private readonly jobs;
50
+ private readonly prisma;
51
+ private readonly audit;
52
+ private readonly metrics?;
53
+ private readonly logger;
54
+ constructor(repository: WebhooksRepository, jobs: JobsService, prisma: WebhooksPrisma, audit: AuditSink, metrics?: MetricsHostService | undefined);
55
+ /**
56
+ * Raises an event. Never throws for an unknown event, invalid data or a
57
+ * missing organization; those are logged and counted.
58
+ *
59
+ * @param eventKey - a registered key, or `notification.<eventKey>`.
60
+ * @param data - validated against the event's schema.
61
+ * @param context - where it happened.
62
+ * @returns how many endpoints matched and how many deliveries were queued.
63
+ */
64
+ emit(eventKey: string, data: unknown, context: WebhookEmitContext): Promise<WebhookEmitResult>;
65
+ /**
66
+ * Raises a user event (audience `user`) for one member.
67
+ *
68
+ * @param userId - the member.
69
+ * @param eventKey - a `user`-audience key, typically `notification.<eventKey>`.
70
+ * @param data - the event's data.
71
+ * @param options - the member's organization, a fixed event id.
72
+ * @returns what {@link WebhooksService.emit} returns.
73
+ */
74
+ emitForUser(userId: string, eventKey: string, data: unknown, options?: {
75
+ orgId?: string | null;
76
+ eventId?: string;
77
+ occurredAt?: Date;
78
+ }): Promise<WebhookEmitResult>;
79
+ /**
80
+ * Queues the fan-out of an event to a `webhooks.fanout` job. The shape every
81
+ * event listener uses: one bounded insert, no fan-out inline.
82
+ *
83
+ * @param eventKey - the event key.
84
+ * @param data - the event's data (JSON).
85
+ * @param context - where it happened.
86
+ * @returns the event id the job will emit under.
87
+ */
88
+ enqueueFanout(eventKey: string, data: unknown, context: WebhookEmitContext): Promise<string>;
89
+ private disableForLostAccess;
90
+ }
91
+ //# sourceMappingURL=webhooks.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.service.d.ts","sourceRoot":"","sources":["../../src/webhooks/webhooks.service.ts"],"names":[],"mappings":"AA6BA,OAAO,EAA+B,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAE5E,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAY9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,uDAAuD;AACvD,MAAM,WAAW,kBAAkB;IACjC,4JAA4J;IAC5J,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,mHAAmH;IACnH,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,4CAA4C;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC;CAC5B;AAED,iDAAiD;AACjD,MAAM,WAAW,iBAAiB;IAChC,gEAAgE;IAChE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,kDAAkD;IAClD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,oBAAoB;IACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,sEAAsE;AACtE,MAAM,WAAW,oBAAoB;IACnC,iBAAiB;IACjB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,YAAY;IACZ,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,cAAc;IACd,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,eAAe;IACf,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB;IAChB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,mBAAmB;IACnB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;GAKG;AACH,qBACa,eAAe;IAIxB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI;IACI,OAAO,CAAC,QAAQ,CAAC,MAAM;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK;IAC9B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;IAPvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoC;gBAGxC,UAAU,EAAE,kBAAkB,EAC9B,IAAI,EAAE,WAAW,EACQ,MAAM,EAAE,cAAc,EAC3B,KAAK,EAAE,SAAS,EACxB,OAAO,CAAC,EAAE,kBAAkB,YAAA;IAG3D;;;;;;;;OAQG;IACG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwEpG;;;;;;;;OAQG;IACH,WAAW,CACT,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,EACb,OAAO,GAAE;QAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,IAAI,CAAA;KAAO,GAC3E,OAAO,CAAC,iBAAiB,CAAC;IAI7B;;;;;;;;OAQG;IACG,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;YAqBpF,oBAAoB;CAgBnC"}
@@ -0,0 +1,216 @@
1
+ "use strict";
2
+ // =============================================================================
3
+ // WebhooksService: emit an event to the endpoints subscribed to it (issue #1046)
4
+ // =============================================================================
5
+ //
6
+ // `emit(eventKey, data, { orgId, userId })` is the one entry point a slice or an
7
+ // app calls to raise a webhook event. It:
8
+ //
9
+ // 1. resolves the event (registered, or a bridged `notification.<key>`) and
10
+ // validates `data` against its schema; an unknown key or invalid data is
11
+ // logged and counted and NEVER thrown to the caller (an event must not
12
+ // break the code that raised it);
13
+ // 2. finds the enabled endpoints the event's audience can reach (a user's own,
14
+ // an organization's, or the deployment's) that subscribe to the key;
15
+ // 3. re-checks each endpoint's OWNER'S access now (`webhooks.access.ts`): an
16
+ // owner who lost it has the endpoint switched off (`owner_lost_access`);
17
+ // 4. inserts one delivery row per endpoint and enqueues its `webhooks.deliver`
18
+ // job in ONE transaction. The `(endpointId, eventId)` unique key makes the
19
+ // whole thing idempotent: a replayed fan-out job inserts nothing twice.
20
+ //
21
+ // MUST be called after the triggering write commits and outside any
22
+ // `$transaction` (like `notify()`): it opens its own short transaction. It
23
+ // performs no outbound HTTP: deliveries are made only by the `webhooks.deliver`
24
+ // job.
25
+ // =============================================================================
26
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
27
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
28
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
29
+ 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;
30
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
31
+ };
32
+ var __metadata = (this && this.__metadata) || function (k, v) {
33
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
34
+ };
35
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
36
+ return function (target, key) { decorator(target, key, paramIndex); }
37
+ };
38
+ var WebhooksService_1;
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.WebhooksService = void 0;
41
+ const node_crypto_1 = require("node:crypto");
42
+ const common_1 = require("@nestjs/common");
43
+ const index_1 = require("../core/index");
44
+ const index_2 = require("../identity/index");
45
+ const index_3 = require("../jobs/index");
46
+ const index_4 = require("../otel-core/index");
47
+ const webhook_catalog_1 = require("./registry/webhook-catalog");
48
+ const webhook_event_registry_1 = require("./registry/webhook-event.registry");
49
+ const webhook_envelope_1 = require("./webhook-envelope");
50
+ const webhooks_access_1 = require("./webhooks.access");
51
+ const webhooks_constants_1 = require("./webhooks.constants");
52
+ const webhooks_metrics_1 = require("./webhooks.metrics");
53
+ const webhooks_repository_1 = require("./webhooks.repository");
54
+ /**
55
+ * See the file header.
56
+ *
57
+ * @extensionPoint token
58
+ * @stability experimental
59
+ */
60
+ let WebhooksService = WebhooksService_1 = class WebhooksService {
61
+ repository;
62
+ jobs;
63
+ prisma;
64
+ audit;
65
+ metrics;
66
+ logger = new common_1.Logger(WebhooksService_1.name);
67
+ constructor(repository, jobs, prisma, audit, metrics) {
68
+ this.repository = repository;
69
+ this.jobs = jobs;
70
+ this.prisma = prisma;
71
+ this.audit = audit;
72
+ this.metrics = metrics;
73
+ }
74
+ /**
75
+ * Raises an event. Never throws for an unknown event, invalid data or a
76
+ * missing organization; those are logged and counted.
77
+ *
78
+ * @param eventKey - a registered key, or `notification.<eventKey>`.
79
+ * @param data - validated against the event's schema.
80
+ * @param context - where it happened.
81
+ * @returns how many endpoints matched and how many deliveries were queued.
82
+ */
83
+ async emit(eventKey, data, context) {
84
+ const eventId = context.eventId ?? (0, node_crypto_1.randomUUID)();
85
+ const none = { matched: 0, queued: 0, eventId };
86
+ const group = (0, webhook_envelope_1.eventGroupOf)(eventKey);
87
+ const event = (0, webhook_catalog_1.resolveWebhookEvent)(eventKey);
88
+ if (!event) {
89
+ this.logger.warn(`Webhook event "${eventKey}" is not registered; nothing was sent`);
90
+ this.metrics?.add(webhooks_metrics_1.WEBHOOK_EVENTS_METRIC, 1, { outcome: 'unknown', event_group: group });
91
+ return none;
92
+ }
93
+ const parsed = event.payloadSchema.safeParse(data);
94
+ if (!parsed.success) {
95
+ this.logger.warn(`Webhook event "${eventKey}" has invalid data (${parsed.error.issues.length} issue(s)); nothing was sent`);
96
+ this.metrics?.add(webhooks_metrics_1.WEBHOOK_EVENTS_METRIC, 1, { outcome: 'invalid', event_group: group });
97
+ return none;
98
+ }
99
+ let orgId;
100
+ try {
101
+ orgId = event.audience === 'system' ? null : await (0, index_2.resolveOrgId)(this.prisma, context.orgId, `Webhook event ${eventKey}`);
102
+ }
103
+ catch (error) {
104
+ this.logger.debug(`Webhook event "${eventKey}" has no organization to deliver in: ${error instanceof Error ? error.message : String(error)}`);
105
+ this.metrics?.add(webhooks_metrics_1.WEBHOOK_EVENTS_METRIC, 1, { outcome: 'no_match', event_group: group });
106
+ return none;
107
+ }
108
+ if (event.audience === 'user' && !context.userId) {
109
+ this.logger.warn(`Webhook event "${eventKey}" is a user event and was emitted without a user`);
110
+ this.metrics?.add(webhooks_metrics_1.WEBHOOK_EVENTS_METRIC, 1, { outcome: 'invalid', event_group: group });
111
+ return none;
112
+ }
113
+ const candidates = (await this.repository.enabledEndpoints(orgId, {
114
+ scope: event.audience,
115
+ ...(event.audience === 'user' ? { ownerUserId: context.userId } : {}),
116
+ })).filter((endpoint) => (0, webhook_event_registry_1.isSubscribed)(endpoint.eventKeys, eventKey));
117
+ const allowed = [];
118
+ const owners = new Map();
119
+ for (const endpoint of candidates) {
120
+ const ownerId = (0, webhooks_access_1.ownerIdOf)(endpoint);
121
+ if (ownerId === null) {
122
+ allowed.push(endpoint);
123
+ continue;
124
+ }
125
+ if (!owners.has(ownerId))
126
+ owners.set(ownerId, await this.repository.loadOwner(orgId, ownerId));
127
+ if ((0, webhooks_access_1.ownerMayReceive)(owners.get(ownerId) ?? null, endpoint, event))
128
+ allowed.push(endpoint);
129
+ else
130
+ await this.disableForLostAccess(endpoint);
131
+ }
132
+ if (allowed.length === 0) {
133
+ this.metrics?.add(webhooks_metrics_1.WEBHOOK_EVENTS_METRIC, 1, { outcome: 'no_match', event_group: group });
134
+ return { ...none, matched: 0 };
135
+ }
136
+ const envelope = (0, webhook_envelope_1.buildEnvelope)({
137
+ eventId,
138
+ eventKey,
139
+ orgId: event.audience === 'system' ? null : orgId,
140
+ data: parsed.data,
141
+ occurredAt: context.occurredAt ?? new Date(),
142
+ });
143
+ const inserted = await this.repository.insertDeliveries(orgId, allowed.map((endpoint) => ({ endpointId: endpoint.id, eventKey, eventId, payload: envelope })));
144
+ this.metrics?.add(webhooks_metrics_1.WEBHOOK_EVENTS_METRIC, 1, { outcome: 'queued', event_group: group });
145
+ return { matched: allowed.length, queued: inserted.length, eventId };
146
+ }
147
+ /**
148
+ * Raises a user event (audience `user`) for one member.
149
+ *
150
+ * @param userId - the member.
151
+ * @param eventKey - a `user`-audience key, typically `notification.<eventKey>`.
152
+ * @param data - the event's data.
153
+ * @param options - the member's organization, a fixed event id.
154
+ * @returns what {@link WebhooksService.emit} returns.
155
+ */
156
+ emitForUser(userId, eventKey, data, options = {}) {
157
+ return this.emit(eventKey, data, { orgId: options.orgId ?? null, userId, ...(options.eventId ? { eventId: options.eventId } : {}), ...(options.occurredAt ? { occurredAt: options.occurredAt } : {}) });
158
+ }
159
+ /**
160
+ * Queues the fan-out of an event to a `webhooks.fanout` job. The shape every
161
+ * event listener uses: one bounded insert, no fan-out inline.
162
+ *
163
+ * @param eventKey - the event key.
164
+ * @param data - the event's data (JSON).
165
+ * @param context - where it happened.
166
+ * @returns the event id the job will emit under.
167
+ */
168
+ async enqueueFanout(eventKey, data, context) {
169
+ const eventId = context.eventId ?? (0, node_crypto_1.randomUUID)();
170
+ const payload = {
171
+ eventKey,
172
+ data,
173
+ orgId: context.orgId,
174
+ ...(context.userId ? { userId: context.userId } : {}),
175
+ eventId,
176
+ occurredAt: (context.occurredAt ?? new Date()).toISOString(),
177
+ };
178
+ await this.jobs.enqueue({
179
+ type: webhooks_constants_1.WEBHOOK_FANOUT_JOB_TYPE,
180
+ reason: 'upload',
181
+ subjectType: 'webhook_event',
182
+ subjectId: eventId,
183
+ orgId: context.orgId,
184
+ payload: payload,
185
+ });
186
+ return eventId;
187
+ }
188
+ async disableForLostAccess(endpoint) {
189
+ try {
190
+ const switched = await this.repository.disableEndpoint(endpoint.orgId, endpoint.id, webhooks_constants_1.WEBHOOK_DISABLED_REASONS.OWNER_LOST_ACCESS);
191
+ if (!switched)
192
+ return;
193
+ this.logger.warn(`Webhook endpoint ${endpoint.id} disabled: its owner no longer has access to the event`);
194
+ await this.audit.record({
195
+ action: webhooks_constants_1.WEBHOOK_AUDIT_ACTIONS.DISABLE,
196
+ actorUserId: null,
197
+ targetType: webhooks_constants_1.WEBHOOK_AUDIT_TARGET,
198
+ targetId: endpoint.id,
199
+ meta: { scope: endpoint.scope, reason: webhooks_constants_1.WEBHOOK_DISABLED_REASONS.OWNER_LOST_ACCESS },
200
+ });
201
+ }
202
+ catch (error) {
203
+ this.logger.error(`Could not disable webhook endpoint ${endpoint.id}: ${error instanceof Error ? error.message : String(error)}`);
204
+ }
205
+ }
206
+ };
207
+ exports.WebhooksService = WebhooksService;
208
+ exports.WebhooksService = WebhooksService = WebhooksService_1 = __decorate([
209
+ (0, common_1.Injectable)(),
210
+ __param(2, (0, common_1.Inject)(index_1.PLATFORM_PRISMA)),
211
+ __param(3, (0, common_1.Inject)(index_1.AUDIT_SINK)),
212
+ __param(4, (0, common_1.Optional)()),
213
+ __metadata("design:paramtypes", [webhooks_repository_1.WebhooksRepository,
214
+ index_3.JobsService, Object, Object, index_4.MetricsHostService])
215
+ ], WebhooksService);
216
+ //# sourceMappingURL=webhooks.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.service.js","sourceRoot":"","sources":["../../src/webhooks/webhooks.service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marinoscar/platform-api",
3
- "version": "0.1.0-next.19",
3
+ "version": "0.1.0-next.20",
4
4
  "description": "NestJS dynamic modules of the platform (CommonJS, built with tsc for decorator metadata).",
5
5
  "license": "MIT",
6
6
  "type": "commonjs",
@@ -158,6 +158,14 @@
158
158
  "types": "./dist/db-backup/testing/index.d.ts",
159
159
  "default": "./dist/db-backup/testing/index.js"
160
160
  },
161
+ "./alerts": {
162
+ "types": "./dist/alerts/index.d.ts",
163
+ "default": "./dist/alerts/index.js"
164
+ },
165
+ "./alerts/testing": {
166
+ "types": "./dist/alerts/testing/index.d.ts",
167
+ "default": "./dist/alerts/testing/index.js"
168
+ },
161
169
  "./android-app": {
162
170
  "types": "./dist/android-app/index.d.ts",
163
171
  "default": "./dist/android-app/index.js"
@@ -166,6 +174,14 @@
166
174
  "types": "./dist/android-app/testing/index.d.ts",
167
175
  "default": "./dist/android-app/testing/index.js"
168
176
  },
177
+ "./webhooks": {
178
+ "types": "./dist/webhooks/index.d.ts",
179
+ "default": "./dist/webhooks/index.js"
180
+ },
181
+ "./webhooks/testing": {
182
+ "types": "./dist/webhooks/testing/index.d.ts",
183
+ "default": "./dist/webhooks/testing/index.js"
184
+ },
169
185
  "./user-data": {
170
186
  "types": "./dist/user-data/index.d.ts",
171
187
  "default": "./dist/user-data/index.js"
@@ -212,8 +228,8 @@
212
228
  "@aws-sdk/lib-storage": "^3.975.0",
213
229
  "@aws-sdk/s3-request-presigner": "^3.975.0",
214
230
  "@google/genai": "^2.24.0",
215
- "@marinoscar/platform-ai-providers": "0.1.0-next.19",
216
- "@marinoscar/platform-contract": "0.1.0-next.19",
231
+ "@marinoscar/platform-ai-providers": "0.1.0-next.20",
232
+ "@marinoscar/platform-contract": "0.1.0-next.20",
217
233
  "@opentelemetry/auto-instrumentations-node": "^0.79.0",
218
234
  "@opentelemetry/core": "^2.10.0",
219
235
  "@opentelemetry/exporter-logs-otlp-http": "^0.221.0",