@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,116 @@
1
+ import { z } from 'zod';
2
+ import { WEBHOOK_EVENT_KEY_PATTERN, type WebhookScope } from '@marinoscar/platform-contract/webhooks';
3
+ /**
4
+ * One event an endpoint can subscribe to.
5
+ *
6
+ * @stability experimental
7
+ */
8
+ export interface WebhookEventDef {
9
+ /** `area.entity.action`, lower snake case segments, at least two (`nodes.node.offline`). PERMANENT. */
10
+ readonly key: string;
11
+ /** A short name for the event picker. */
12
+ readonly label: string;
13
+ /** One sentence: when the event fires. */
14
+ readonly description: string;
15
+ /** The picker's group heading (`Nodes`). */
16
+ readonly group: string;
17
+ /**
18
+ * Who may subscribe: `user` (a member's own endpoints; the event is about
19
+ * that member), `org` (an organization's endpoints) or `system` (the
20
+ * deployment's endpoints). An endpoint of a scope receives only events whose
21
+ * audience is that scope.
22
+ */
23
+ readonly audience: WebhookScope;
24
+ /**
25
+ * The permission the endpoint's OWNER must hold when the event fans out
26
+ * (re-read every time, so revoking it silences the endpoint). Absent: none.
27
+ */
28
+ readonly permission?: string;
29
+ /** Validates the event's `data`; exported as JSON Schema by `GET .../events`. */
30
+ readonly payloadSchema: z.ZodType;
31
+ /** A sample `data` for the catalog and the docs. */
32
+ readonly example?: unknown;
33
+ /** Who registered it (`platform` or a slice or app id). */
34
+ readonly source: string;
35
+ }
36
+ /**
37
+ * The registered events.
38
+ *
39
+ * @stability experimental
40
+ */
41
+ export declare const webhookEventRegistry: import("../../core/index").Registry<WebhookEventDef>;
42
+ /**
43
+ * Adds an event to the catalog. Registering the same definition again (the
44
+ * same object) is a no-op, so a module that composes twice in one process
45
+ * (Jest workers) does not fail.
46
+ *
47
+ * @param def - the event.
48
+ * @throws RegistryError when the key is malformed, the definition invalid, or another definition owns the key.
49
+ *
50
+ * @example
51
+ * ```ts
52
+ * registerWebhookEvent({
53
+ * key: 'invoices.invoice.paid', label: 'Invoice paid', description: 'An invoice was paid.',
54
+ * group: 'Invoices', audience: 'org', permission: 'org_webhooks:read',
55
+ * payloadSchema: z.object({ invoiceId: z.string() }), source: 'invoices',
56
+ * });
57
+ * ```
58
+ *
59
+ * @extensionPoint registry
60
+ * @stability experimental
61
+ */
62
+ export declare function registerWebhookEvent(def: WebhookEventDef): void;
63
+ /**
64
+ * The event definition for a key, or `undefined`.
65
+ *
66
+ * @param key - an exact event key.
67
+ * @returns the definition.
68
+ *
69
+ * @stability experimental
70
+ */
71
+ export declare function findWebhookEvent(key: string): WebhookEventDef | undefined;
72
+ /**
73
+ * The registered events whose audience is `scope`, in registration order.
74
+ *
75
+ * @param scope - the endpoint scope.
76
+ * @returns the definitions.
77
+ *
78
+ * @stability experimental
79
+ */
80
+ export declare function webhookEventsForScope(scope: WebhookScope): WebhookEventDef[];
81
+ /**
82
+ * Whether a subscription entry (`exact`, `group.*` or `*`) matches an event key.
83
+ *
84
+ * @param pattern - one entry of an endpoint's `eventKeys`.
85
+ * @param eventKey - the emitted event's key.
86
+ * @returns `true` when it matches.
87
+ *
88
+ * @stability experimental
89
+ */
90
+ export declare function subscriptionMatches(pattern: string, eventKey: string): boolean;
91
+ /**
92
+ * Whether any entry of `patterns` matches `eventKey`.
93
+ *
94
+ * @param patterns - an endpoint's `eventKeys`.
95
+ * @param eventKey - the emitted event's key.
96
+ * @returns `true` when subscribed.
97
+ *
98
+ * @stability experimental
99
+ */
100
+ export declare function isSubscribed(patterns: readonly string[], eventKey: string): boolean;
101
+ /**
102
+ * Whether a subscription entry could ever match a registered event of `scope`
103
+ * (an exact key that is registered for the scope, a wildcard that matches at
104
+ * least one, or `*`).
105
+ *
106
+ * @param pattern - one entry.
107
+ * @param scope - the endpoint scope.
108
+ * @returns `true` when it names something subscribable.
109
+ *
110
+ * @stability experimental
111
+ */
112
+ export declare function patternHasEventsForScope(pattern: string, scope: WebhookScope): boolean;
113
+ /** The JSON Schema of an event's `data`, or an open object when conversion is not possible. */
114
+ export declare function jsonSchemaOf(event: WebhookEventDef): Record<string, unknown>;
115
+ export { WEBHOOK_EVENT_KEY_PATTERN };
116
+ //# sourceMappingURL=webhook-event.registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-event.registry.d.ts","sourceRoot":"","sources":["../../../src/webhooks/registry/webhook-event.registry.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,yBAAyB,EAEzB,KAAK,YAAY,EAClB,MAAM,wCAAwC,CAAC;AAIhD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,uGAAuG;IACvG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,0CAA0C;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,iFAAiF;IACjF,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC;IAClC,oDAAoD;IACpD,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAID;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,sDAoB/B,CAAC;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,CAG/D;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAEzE;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,YAAY,GAAG,eAAe,EAAE,CAE5E;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAI9E;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAEtF;AAED,+FAA+F;AAC/F,wBAAgB,YAAY,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAM5E;AAED,OAAO,EAAE,yBAAyB,EAAE,CAAC"}
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ // =============================================================================
3
+ // The webhook event catalog (issue #1046)
4
+ // =============================================================================
5
+ //
6
+ // An OPEN vocabulary: an event key is a string, registered with
7
+ // `registerWebhookEvent` from the slice that raises it (the nodes and jobs
8
+ // bridges below are the platform's own; the alerts slice registers its two the
9
+ // same way). A key is permanent once an endpoint subscribes to it. Framework-
10
+ // free, like every registry: no Nest, so the catalog loads in a seed or a script.
11
+ // =============================================================================
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.WEBHOOK_EVENT_KEY_PATTERN = exports.webhookEventRegistry = void 0;
14
+ exports.registerWebhookEvent = registerWebhookEvent;
15
+ exports.findWebhookEvent = findWebhookEvent;
16
+ exports.webhookEventsForScope = webhookEventsForScope;
17
+ exports.subscriptionMatches = subscriptionMatches;
18
+ exports.isSubscribed = isSubscribed;
19
+ exports.patternHasEventsForScope = patternHasEventsForScope;
20
+ exports.jsonSchemaOf = jsonSchemaOf;
21
+ const zod_1 = require("zod");
22
+ const webhooks_1 = require("@marinoscar/platform-contract/webhooks");
23
+ Object.defineProperty(exports, "WEBHOOK_EVENT_KEY_PATTERN", { enumerable: true, get: function () { return webhooks_1.WEBHOOK_EVENT_KEY_PATTERN; } });
24
+ const index_1 = require("../../core/index");
25
+ const KEY_FULL = new RegExp(`^${webhooks_1.WEBHOOK_EVENT_KEY_REGEX_SOURCE}$`);
26
+ /**
27
+ * The registered events.
28
+ *
29
+ * @stability experimental
30
+ */
31
+ exports.webhookEventRegistry = (0, index_1.defineRegistry)({
32
+ name: 'webhook-events',
33
+ idOf: (event) => event.key,
34
+ idPattern: KEY_FULL,
35
+ order: 'registration',
36
+ validate: (event) => {
37
+ if (event.key.length > webhooks_1.WEBHOOK_EVENT_KEY_MAX)
38
+ throw new Error(`key must be at most ${webhooks_1.WEBHOOK_EVENT_KEY_MAX} characters`);
39
+ for (const field of ['label', 'description', 'group', 'source']) {
40
+ if (typeof event[field] !== 'string' || event[field].trim() === '')
41
+ throw new Error(`${field} must be a non-empty string`);
42
+ }
43
+ if (!['user', 'org', 'system'].includes(event.audience))
44
+ throw new Error(`audience must be user, org or system (got ${String(event.audience)})`);
45
+ if (event.permission !== undefined && (typeof event.permission !== 'string' || event.permission === '')) {
46
+ throw new Error('permission must be a non-empty string when present');
47
+ }
48
+ if (!event.payloadSchema || typeof event.payloadSchema.safeParse !== 'function') {
49
+ throw new Error('payloadSchema must be a zod schema');
50
+ }
51
+ },
52
+ describeDuplicate: (existing, incoming) => `Webhook event "${incoming.key}" is already registered by "${existing.source}"; "${incoming.source}" cannot claim it too. An event key is permanent once an endpoint subscribes to it.`,
53
+ });
54
+ /**
55
+ * Adds an event to the catalog. Registering the same definition again (the
56
+ * same object) is a no-op, so a module that composes twice in one process
57
+ * (Jest workers) does not fail.
58
+ *
59
+ * @param def - the event.
60
+ * @throws RegistryError when the key is malformed, the definition invalid, or another definition owns the key.
61
+ *
62
+ * @example
63
+ * ```ts
64
+ * registerWebhookEvent({
65
+ * key: 'invoices.invoice.paid', label: 'Invoice paid', description: 'An invoice was paid.',
66
+ * group: 'Invoices', audience: 'org', permission: 'org_webhooks:read',
67
+ * payloadSchema: z.object({ invoiceId: z.string() }), source: 'invoices',
68
+ * });
69
+ * ```
70
+ *
71
+ * @extensionPoint registry
72
+ * @stability experimental
73
+ */
74
+ function registerWebhookEvent(def) {
75
+ if (exports.webhookEventRegistry.get(def.key) === def)
76
+ return;
77
+ exports.webhookEventRegistry.register(def);
78
+ }
79
+ /**
80
+ * The event definition for a key, or `undefined`.
81
+ *
82
+ * @param key - an exact event key.
83
+ * @returns the definition.
84
+ *
85
+ * @stability experimental
86
+ */
87
+ function findWebhookEvent(key) {
88
+ return exports.webhookEventRegistry.get(key);
89
+ }
90
+ /**
91
+ * The registered events whose audience is `scope`, in registration order.
92
+ *
93
+ * @param scope - the endpoint scope.
94
+ * @returns the definitions.
95
+ *
96
+ * @stability experimental
97
+ */
98
+ function webhookEventsForScope(scope) {
99
+ return exports.webhookEventRegistry.list().filter((event) => event.audience === scope);
100
+ }
101
+ /**
102
+ * Whether a subscription entry (`exact`, `group.*` or `*`) matches an event key.
103
+ *
104
+ * @param pattern - one entry of an endpoint's `eventKeys`.
105
+ * @param eventKey - the emitted event's key.
106
+ * @returns `true` when it matches.
107
+ *
108
+ * @stability experimental
109
+ */
110
+ function subscriptionMatches(pattern, eventKey) {
111
+ if (pattern === '*')
112
+ return true;
113
+ if (pattern.endsWith('.*'))
114
+ return eventKey.startsWith(pattern.slice(0, -1));
115
+ return pattern === eventKey;
116
+ }
117
+ /**
118
+ * Whether any entry of `patterns` matches `eventKey`.
119
+ *
120
+ * @param patterns - an endpoint's `eventKeys`.
121
+ * @param eventKey - the emitted event's key.
122
+ * @returns `true` when subscribed.
123
+ *
124
+ * @stability experimental
125
+ */
126
+ function isSubscribed(patterns, eventKey) {
127
+ return patterns.some((pattern) => subscriptionMatches(pattern, eventKey));
128
+ }
129
+ /**
130
+ * Whether a subscription entry could ever match a registered event of `scope`
131
+ * (an exact key that is registered for the scope, a wildcard that matches at
132
+ * least one, or `*`).
133
+ *
134
+ * @param pattern - one entry.
135
+ * @param scope - the endpoint scope.
136
+ * @returns `true` when it names something subscribable.
137
+ *
138
+ * @stability experimental
139
+ */
140
+ function patternHasEventsForScope(pattern, scope) {
141
+ return webhookEventsForScope(scope).some((event) => subscriptionMatches(pattern, event.key));
142
+ }
143
+ /** The JSON Schema of an event's `data`, or an open object when conversion is not possible. */
144
+ function jsonSchemaOf(event) {
145
+ try {
146
+ return zod_1.z.toJSONSchema(event.payloadSchema, { unrepresentable: 'any' });
147
+ }
148
+ catch {
149
+ return { type: 'object' };
150
+ }
151
+ }
152
+ //# sourceMappingURL=webhook-event.registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-event.registry.js","sourceRoot":"","sources":["../../../src/webhooks/registry/webhook-event.registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * A fresh signing secret: `whsec_` and 32 random bytes in base64.
3
+ *
4
+ * @returns the secret. Shown once to its owner; stored only in the credentials store.
5
+ *
6
+ * @stability experimental
7
+ */
8
+ export declare function generateWebhookSecret(): string;
9
+ /** What {@link signedHeaders} takes. @stability experimental */
10
+ export interface SignedHeadersInput {
11
+ /** The `webhook-id`: the event id, identical across retries. */
12
+ readonly id: string;
13
+ /** Unix seconds at signing time. */
14
+ readonly timestamp: number;
15
+ /** The exact body. */
16
+ readonly body: string;
17
+ /** The current secret first, then the previous one while the overlap lasts. */
18
+ readonly secrets: readonly string[];
19
+ /** The `User-Agent`. */
20
+ readonly userAgent: string;
21
+ }
22
+ /**
23
+ * The request headers of one delivery attempt, including `webhook-signature`.
24
+ *
25
+ * @param input - see {@link SignedHeadersInput}.
26
+ * @returns the headers.
27
+ *
28
+ * @stability experimental
29
+ */
30
+ export declare function signedHeaders(input: SignedHeadersInput): Promise<Record<string, string>>;
31
+ //# sourceMappingURL=signing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signing.d.ts","sourceRoot":"","sources":["../../src/webhooks/signing.ts"],"names":[],"mappings":"AAeA;;;;;;GAMG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAE9C;AAED,gEAAgE;AAChE,MAAM,WAAW,kBAAkB;IACjC,gEAAgE;IAChE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,sBAAsB;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,+EAA+E;IAC/E,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,wBAAwB;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;;;GAOG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAY9F"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ // =============================================================================
3
+ // Signing (issue #1046)
4
+ // =============================================================================
5
+ //
6
+ // Standard Webhooks, scheme v1, through the contract's `signWebhookPayload`
7
+ // (the same helper a receiver verifies with). The slice never invents a second
8
+ // implementation: what is signed here is what `verifyWebhookSignature` checks.
9
+ // During a rotation overlap the header carries two space-separated signatures,
10
+ // the current secret's first.
11
+ // =============================================================================
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.generateWebhookSecret = generateWebhookSecret;
14
+ exports.signedHeaders = signedHeaders;
15
+ const node_crypto_1 = require("node:crypto");
16
+ const webhooks_1 = require("@marinoscar/platform-contract/webhooks");
17
+ /**
18
+ * A fresh signing secret: `whsec_` and 32 random bytes in base64.
19
+ *
20
+ * @returns the secret. Shown once to its owner; stored only in the credentials store.
21
+ *
22
+ * @stability experimental
23
+ */
24
+ function generateWebhookSecret() {
25
+ return `${webhooks_1.WEBHOOK_SECRET_PREFIX}${(0, node_crypto_1.randomBytes)(32).toString('base64')}`;
26
+ }
27
+ /**
28
+ * The request headers of one delivery attempt, including `webhook-signature`.
29
+ *
30
+ * @param input - see {@link SignedHeadersInput}.
31
+ * @returns the headers.
32
+ *
33
+ * @stability experimental
34
+ */
35
+ async function signedHeaders(input) {
36
+ const signatures = [];
37
+ for (const secret of input.secrets) {
38
+ signatures.push(await (0, webhooks_1.signWebhookPayload)({ secret, id: input.id, timestamp: input.timestamp, body: input.body }));
39
+ }
40
+ return {
41
+ 'content-type': 'application/json',
42
+ 'user-agent': input.userAgent,
43
+ [webhooks_1.WEBHOOK_HEADERS.ID]: input.id,
44
+ [webhooks_1.WEBHOOK_HEADERS.TIMESTAMP]: String(input.timestamp),
45
+ [webhooks_1.WEBHOOK_HEADERS.SIGNATURE]: signatures.join(' '),
46
+ };
47
+ }
48
+ //# sourceMappingURL=signing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signing.js","sourceRoot":"","sources":["../../src/webhooks/signing.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAChF,EAAE;AACF,4EAA4E;AAC5E,+EAA+E;AAC/E,+EAA+E;AAC/E,+EAA+E;AAC/E,8BAA8B;AAC9B,gFAAgF;;AAahF,sDAEC;AAwBD,sCAYC;AAjDD,6CAA0C;AAE1C,qEAAoH;AAEpH;;;;;;GAMG;AACH,SAAgB,qBAAqB;IACnC,OAAO,GAAG,gCAAqB,GAAG,IAAA,yBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;AACzE,CAAC;AAgBD;;;;;;;GAOG;AACI,KAAK,UAAU,aAAa,CAAC,KAAyB;IAC3D,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACnC,UAAU,CAAC,IAAI,CAAC,MAAM,IAAA,6BAAkB,EAAC,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACpH,CAAC;IACD,OAAO;QACL,cAAc,EAAE,kBAAkB;QAClC,YAAY,EAAE,KAAK,CAAC,SAAS;QAC7B,CAAC,0BAAe,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE;QAC9B,CAAC,0BAAe,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC;QACpD,CAAC,0BAAe,CAAC,SAAS,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC;KAClD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { JobsService, type JobsPrisma } from '../../jobs/index';
2
+ /**
3
+ * The daily `@Cron` that enqueues `webhooks.deliveries_purge` (enqueue only).
4
+ *
5
+ * @internal
6
+ *
7
+ * @stability experimental
8
+ */
9
+ export declare class WebhookPurgeTask {
10
+ private readonly jobs;
11
+ private readonly prisma;
12
+ private readonly logger;
13
+ constructor(jobs: JobsService, prisma: JobsPrisma);
14
+ /** Enqueues today's purge, unless one is already pending. 04:17 UTC, off the hour. */
15
+ handleCron(): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=webhook-purge.task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-purge.task.d.ts","sourceRoot":"","sources":["../../../src/webhooks/tasks/webhook-purge.task.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,WAAW,EAA0B,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGxF;;;;;;GAMG;AACH,qBACa,gBAAgB;IAIzB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACI,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJlD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqC;gBAGzC,IAAI,EAAE,WAAW,EACQ,MAAM,EAAE,UAAU;IAG9D,sFAAsF;IAEhF,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CASlC"}
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ // =============================================================================
3
+ // WebhookPurgeTask: queues the daily delivery purge (issue #1046)
4
+ // =============================================================================
5
+ //
6
+ // ⚠ THIS TASK DELETES NOTHING. A `@Cron` decides and enqueues, nothing more
7
+ // (the `cron-enqueue-only` conformance suite). The deleting is
8
+ // `webhooks.deliveries_purge`'s work, on a worker slot, retried by the queue.
9
+ // =============================================================================
10
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
11
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
12
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
13
+ 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;
14
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
15
+ };
16
+ var __metadata = (this && this.__metadata) || function (k, v) {
17
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
18
+ };
19
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
20
+ return function (target, key) { decorator(target, key, paramIndex); }
21
+ };
22
+ var WebhookPurgeTask_1;
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.WebhookPurgeTask = void 0;
25
+ const common_1 = require("@nestjs/common");
26
+ const schedule_1 = require("@nestjs/schedule");
27
+ const index_1 = require("../../core/index");
28
+ const index_2 = require("../../jobs/index");
29
+ const webhooks_constants_1 = require("../webhooks.constants");
30
+ /**
31
+ * The daily `@Cron` that enqueues `webhooks.deliveries_purge` (enqueue only).
32
+ *
33
+ * @internal
34
+ *
35
+ * @stability experimental
36
+ */
37
+ let WebhookPurgeTask = WebhookPurgeTask_1 = class WebhookPurgeTask {
38
+ jobs;
39
+ prisma;
40
+ logger = new common_1.Logger(WebhookPurgeTask_1.name);
41
+ constructor(jobs, prisma) {
42
+ this.jobs = jobs;
43
+ this.prisma = prisma;
44
+ }
45
+ /** Enqueues today's purge, unless one is already pending. 04:17 UTC, off the hour. */
46
+ async handleCron() {
47
+ await (0, index_2.enqueueHousekeepingJob)({
48
+ jobs: this.jobs,
49
+ prisma: this.prisma,
50
+ logger: this.logger,
51
+ type: webhooks_constants_1.WEBHOOK_PURGE_JOB_TYPE,
52
+ what: 'webhook delivery purge',
53
+ });
54
+ }
55
+ };
56
+ exports.WebhookPurgeTask = WebhookPurgeTask;
57
+ __decorate([
58
+ (0, schedule_1.Cron)('17 4 * * *'),
59
+ __metadata("design:type", Function),
60
+ __metadata("design:paramtypes", []),
61
+ __metadata("design:returntype", Promise)
62
+ ], WebhookPurgeTask.prototype, "handleCron", null);
63
+ exports.WebhookPurgeTask = WebhookPurgeTask = WebhookPurgeTask_1 = __decorate([
64
+ (0, common_1.Injectable)(),
65
+ __param(1, (0, common_1.Inject)(index_1.PLATFORM_PRISMA)),
66
+ __metadata("design:paramtypes", [index_2.JobsService, Object])
67
+ ], WebhookPurgeTask);
68
+ //# sourceMappingURL=webhook-purge.task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook-purge.task.js","sourceRoot":"","sources":["../../../src/webhooks/tasks/webhook-purge.task.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,kEAAkE;AAClE,gFAAgF;AAChF,EAAE;AACF,4EAA4E;AAC5E,+DAA+D;AAC/D,8EAA8E;AAC9E,gFAAgF;;;;;;;;;;;;;;;;AAEhF,2CAA4D;AAC5D,+CAAwC;AAExC,4CAAmD;AACnD,4CAAwF;AACxF,8DAA+D;AAE/D;;;;;;GAMG;AAEI,IAAM,gBAAgB,wBAAtB,MAAM,gBAAgB;IAIR;IACyB;IAJ3B,MAAM,GAAG,IAAI,eAAM,CAAC,kBAAgB,CAAC,IAAI,CAAC,CAAC;IAE5D,YACmB,IAAiB,EACQ,MAAkB;QAD3C,SAAI,GAAJ,IAAI,CAAa;QACQ,WAAM,GAAN,MAAM,CAAY;IAC3D,CAAC;IAEJ,sFAAsF;IAEhF,AAAN,KAAK,CAAC,UAAU;QACd,MAAM,IAAA,8BAAsB,EAAC;YAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,2CAAsB;YAC5B,IAAI,EAAE,wBAAwB;SAC/B,CAAC,CAAC;IACL,CAAC;CACF,CAAA;AAnBY,4CAAgB;AAUrB;IADL,IAAA,eAAI,EAAC,YAAY,CAAC;;;;kDASlB;2BAlBU,gBAAgB;IAD5B,IAAA,mBAAU,GAAE;IAMR,WAAA,IAAA,eAAM,EAAC,uBAAe,CAAC,CAAA;qCADD,mBAAW;GAJzB,gBAAgB,CAmB5B"}
@@ -0,0 +1,61 @@
1
+ import type { ConformanceAppSuite, ConformanceTestApi } from '../../testing/index';
2
+ declare module '../../testing/index' {
3
+ interface PlatformConformanceSuiteOptions {
4
+ /** The webhooks slice's suite: its options (an empty object runs it), or a skip with a reason. Registered by importing `@marinoscar/platform-api/webhooks/testing`. */
5
+ webhooks?: WebhooksConformanceOptions | false;
6
+ }
7
+ }
8
+ /**
9
+ * What the `webhooks` suite takes.
10
+ *
11
+ * @stability experimental
12
+ */
13
+ export interface WebhooksConformanceOptions {
14
+ /** Extra addresses the egress case must also see refused (an app's own internal ranges). */
15
+ readonly extraBlockedAddresses?: readonly string[];
16
+ }
17
+ /** One route, as the suite sees it. @stability experimental */
18
+ export interface WebhookRoute {
19
+ /** `Controller#handler`. */
20
+ readonly id: string;
21
+ /** The HTTP method. */
22
+ readonly method: string;
23
+ /** Whether it is `@Public()`. */
24
+ readonly isPublic: boolean;
25
+ /** Whether a guard protects it. */
26
+ readonly authenticated: boolean;
27
+ /** The permissions it requires. */
28
+ readonly permissions: readonly string[];
29
+ }
30
+ /** One route with the pair of permission strings its tier enforces. @stability experimental */
31
+ export interface WebhookControllerRoute extends WebhookRoute {
32
+ /** The permission a `GET` of the tier requires. */
33
+ readonly read: string;
34
+ /** The permission every other method of the tier requires. */
35
+ readonly write: string;
36
+ }
37
+ /**
38
+ * The routes of the three controllers, read from their metadata.
39
+ *
40
+ * @returns every handler, with the tier it belongs to.
41
+ *
42
+ * @stability experimental
43
+ */
44
+ export declare function discoverWebhookRoutes(): WebhookControllerRoute[];
45
+ /**
46
+ * Registers the suite's cases with the test API.
47
+ *
48
+ * @param api - the runner's test API.
49
+ * @param options - the suite's options.
50
+ *
51
+ * @stability experimental
52
+ */
53
+ export declare function registerWebhooksConformance(api: ConformanceTestApi, options: WebhooksConformanceOptions): void;
54
+ /**
55
+ * The `webhooks` conformance suite.
56
+ *
57
+ * @extensionPoint registry
58
+ * @stability experimental
59
+ */
60
+ export declare const webhooksConformanceSuite: ConformanceAppSuite<WebhooksConformanceOptions>;
61
+ //# sourceMappingURL=conformance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conformance.d.ts","sourceRoot":"","sources":["../../../src/webhooks/testing/conformance.ts"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AASnF,OAAO,QAAQ,qBAAqB,CAAC;IACnC,UAAU,+BAA+B;QACvC,uKAAuK;QACvK,QAAQ,CAAC,EAAE,0BAA0B,GAAG,KAAK,CAAC;KAC/C;CACF;AAED;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACzC,4FAA4F;IAC5F,QAAQ,CAAC,qBAAqB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACpD;AAED,+DAA+D;AAC/D,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,uBAAuB;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iCAAiC;IACjC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,mCAAmC;IACnC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC;IAChC,mCAAmC;IACnC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED,+FAA+F;AAC/F,MAAM,WAAW,sBAAuB,SAAQ,YAAY;IAC1D,mDAAmD;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAgCD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,IAAI,sBAAsB,EAAE,CAsBhE;AAiCD;;;;;;;GAOG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,kBAAkB,EAAE,OAAO,EAAE,0BAA0B,GAAG,IAAI,CAiK9G;AAED;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,EAAE,mBAAmB,CAAC,0BAA0B,CAQpF,CAAC"}