@marinoscar/platform-api 0.1.0-next.19 → 0.1.0-next.21

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