@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,316 @@
1
+ "use strict";
2
+ // =============================================================================
3
+ // The `webhooks` conformance suite (issue #1046)
4
+ // =============================================================================
5
+ //
6
+ // Importing `@marinoscar/platform-api/webhooks/testing` registers it with
7
+ // `runPlatformConformance`. It drives the REAL services over the in-memory
8
+ // ports (`./kit.ts`), so an app proves the invariants the slice promises
9
+ // without a database or a network:
10
+ //
11
+ // routes every route of the three controllers is authenticated and enforces
12
+ // exactly its tier's permission string (read for GET, write for the rest);
13
+ // signing a delivery's signature verifies with the contract's
14
+ // `verifyWebhookSignature`; during a rotation overlap it carries two;
15
+ // egress loopback, private, link-local (metadata), CGNAT, multicast and
16
+ // IPv4-mapped targets are refused at create AND at send, and a name
17
+ // that resolves to a public address at create time but a private one
18
+ // at send time (DNS rebinding) is refused at send;
19
+ // secrecy the signing secret appears in no response but create and rotate,
20
+ // and in no delivery row, audit row or log line;
21
+ // queue no route and no listener makes an outbound request: create, test,
22
+ // redeliver and emit produce rows and jobs only, and only the slice's
23
+ // transport touches `node:http`/`node:https`;
24
+ // authz an endpoint is invisible (404) across owners, scopes and
25
+ // organizations, and an owner who lost the permission has the
26
+ // endpoint switched off at the next event.
27
+ // =============================================================================
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.webhooksConformanceSuite = void 0;
30
+ exports.discoverWebhookRoutes = discoverWebhookRoutes;
31
+ exports.registerWebhooksConformance = registerWebhooksConformance;
32
+ const node_fs_1 = require("node:fs");
33
+ const node_path_1 = require("node:path");
34
+ const common_1 = require("@nestjs/common");
35
+ const constants_1 = require("@nestjs/common/constants");
36
+ const webhooks_1 = require("@marinoscar/platform-contract/webhooks");
37
+ const index_1 = require("../../identity/index");
38
+ const index_2 = require("../../testing/index");
39
+ const admin_webhooks_controller_1 = require("../http/admin-webhooks.controller");
40
+ const org_webhooks_controller_1 = require("../http/org-webhooks.controller");
41
+ const webhooks_controller_1 = require("../http/webhooks.controller");
42
+ const webhook_views_1 = require("../webhook-views");
43
+ const webhooks_errors_1 = require("../webhooks.errors");
44
+ const kit_1 = require("./kit");
45
+ const in_memory_1 = require("./in-memory");
46
+ const BLOCKED_ADDRESSES = [
47
+ '127.0.0.1',
48
+ '10.0.0.5',
49
+ '172.16.0.1',
50
+ '172.31.255.254',
51
+ '192.168.1.1',
52
+ '169.254.169.254',
53
+ '100.64.0.1',
54
+ '0.0.0.0',
55
+ '224.0.0.1',
56
+ '255.255.255.255',
57
+ '::1',
58
+ '::',
59
+ 'fe80::1',
60
+ 'fd00::1',
61
+ 'fc00::1',
62
+ 'ff02::1',
63
+ '::ffff:10.0.0.1',
64
+ '::ffff:127.0.0.1',
65
+ '::ffff:169.254.169.254',
66
+ '64:ff9b::a00:1',
67
+ '2002:a00:1::1',
68
+ ];
69
+ const CONTROLLERS = [
70
+ { controller: webhooks_controller_1.WebhooksController, read: webhooks_1.WEBHOOK_PERMISSIONS.READ, write: webhooks_1.WEBHOOK_PERMISSIONS.WRITE },
71
+ { controller: org_webhooks_controller_1.OrgWebhooksController, read: webhooks_1.WEBHOOK_PERMISSIONS.ORG_READ, write: webhooks_1.WEBHOOK_PERMISSIONS.ORG_WRITE },
72
+ { controller: admin_webhooks_controller_1.AdminWebhooksController, read: webhooks_1.WEBHOOK_PERMISSIONS.SYSTEM_READ, write: webhooks_1.WEBHOOK_PERMISSIONS.SYSTEM_WRITE },
73
+ ];
74
+ /**
75
+ * The routes of the three controllers, read from their metadata.
76
+ *
77
+ * @returns every handler, with the tier it belongs to.
78
+ *
79
+ * @stability experimental
80
+ */
81
+ function discoverWebhookRoutes() {
82
+ const routes = [];
83
+ for (const { controller, read, write } of CONTROLLERS) {
84
+ const prototype = controller.prototype;
85
+ for (const name of Object.getOwnPropertyNames(prototype)) {
86
+ const handler = prototype[name];
87
+ if (name === 'constructor' || typeof handler !== 'function')
88
+ continue;
89
+ const method = Reflect.getMetadata(constants_1.METHOD_METADATA, handler);
90
+ if (method === undefined || Reflect.getMetadata(constants_1.PATH_METADATA, handler) === undefined)
91
+ continue;
92
+ const guards = [...(Reflect.getMetadata(constants_1.GUARDS_METADATA, controller) ?? []), ...(Reflect.getMetadata(constants_1.GUARDS_METADATA, handler) ?? [])];
93
+ routes.push({
94
+ id: `${controller.name}#${name}`,
95
+ method: common_1.RequestMethod[method] ?? String(method),
96
+ isPublic: Reflect.getMetadata(index_1.IS_PUBLIC_KEY, handler) === true || Reflect.getMetadata(index_1.IS_PUBLIC_KEY, controller) === true,
97
+ authenticated: guards.length > 0,
98
+ permissions: [...(Reflect.getMetadata(index_1.PERMISSIONS_KEY, handler) ?? [])],
99
+ read,
100
+ write,
101
+ });
102
+ }
103
+ }
104
+ return routes;
105
+ }
106
+ function sourceFiles(dir) {
107
+ return (0, node_fs_1.readdirSync)(dir).flatMap((entry) => {
108
+ const full = (0, node_path_1.join)(dir, entry);
109
+ if ((0, node_fs_1.statSync)(full).isDirectory())
110
+ return entry === 'testing' ? [] : sourceFiles(full);
111
+ return /\.(ts|js)$/.test(entry) && !/\.(d\.ts|spec\.ts)$/.test(entry) ? [full] : [];
112
+ });
113
+ }
114
+ /** The error a call rejects with, or `undefined` when it resolved. */
115
+ async function rejection(fn) {
116
+ try {
117
+ await fn();
118
+ return undefined;
119
+ }
120
+ catch (error) {
121
+ return error;
122
+ }
123
+ }
124
+ async function withCapturedLogs(fn) {
125
+ const logs = [];
126
+ const proto = common_1.Logger.prototype;
127
+ const names = ['log', 'warn', 'error', 'debug', 'verbose', 'fatal'];
128
+ const originals = names.map((name) => proto[name]);
129
+ for (const name of names)
130
+ proto[name] = (...args) => void logs.push(args.map((arg) => (typeof arg === 'string' ? arg : JSON.stringify(arg))).join(' '));
131
+ try {
132
+ return { result: await fn(), logs };
133
+ }
134
+ finally {
135
+ names.forEach((name, index) => (proto[name] = originals[index]));
136
+ }
137
+ }
138
+ /**
139
+ * Registers the suite's cases with the test API.
140
+ *
141
+ * @param api - the runner's test API.
142
+ * @param options - the suite's options.
143
+ *
144
+ * @stability experimental
145
+ */
146
+ function registerWebhooksConformance(api, options) {
147
+ const { describe, it, expect } = api;
148
+ const url = 'https://receiver.example.test/hooks/in?token=abc';
149
+ const eventKeys = ['nodes.*'];
150
+ describe('webhooks slice conformance (#1046)', () => {
151
+ it('routes: every route is authenticated and enforces exactly its tier permission', () => {
152
+ const routes = discoverWebhookRoutes();
153
+ expect(routes.length).toBeGreaterThanOrEqual(30);
154
+ const problems = [];
155
+ for (const route of routes) {
156
+ if (route.isPublic)
157
+ problems.push(`${route.id} is public`);
158
+ if (!route.authenticated)
159
+ problems.push(`${route.id} declares no @Auth(...)`);
160
+ const wanted = route.method === 'GET' ? route.read : route.write;
161
+ if (route.permissions.length !== 1 || route.permissions[0] !== wanted)
162
+ problems.push(`${route.id} must require exactly ${wanted} (got ${route.permissions.join(', ') || 'none'})`);
163
+ }
164
+ expect(problems).toEqual([]);
165
+ });
166
+ it('signing: a delivery verifies with verifyWebhookSignature, and a rotation overlap signs twice', async () => {
167
+ const kit = (0, kit_1.createWebhooksTestKit)();
168
+ const ctx = kit.context('system');
169
+ const created = await kit.endpoints.create(ctx, { name: 'sig', url, eventKeys, enabled: true });
170
+ const send = async () => {
171
+ const { deliveryId } = await kit.endpoints.test(ctx, created.endpoint.id);
172
+ await kit.runDeliveryJob(deliveryId, null);
173
+ const request = kit.receiver.requests[kit.receiver.requests.length - 1];
174
+ return { request, deliveryId };
175
+ };
176
+ const first = await send();
177
+ const header = first.request.headers[webhooks_1.WEBHOOK_HEADERS.SIGNATURE];
178
+ expect(header.split(' ').length).toEqual(1);
179
+ expect(await (0, webhooks_1.verifyWebhookSignature)({ secret: created.secret, id: first.request.headers[webhooks_1.WEBHOOK_HEADERS.ID], timestamp: first.request.headers[webhooks_1.WEBHOOK_HEADERS.TIMESTAMP], body: first.request.body, signatureHeader: header })).toEqual(true);
180
+ const rotated = await kit.endpoints.rotateSecret(ctx, created.endpoint.id);
181
+ const second = await send();
182
+ const both = second.request.headers[webhooks_1.WEBHOOK_HEADERS.SIGNATURE];
183
+ expect(both.split(' ').length).toEqual(2);
184
+ for (const secret of [created.secret, rotated.secret]) {
185
+ expect(await (0, webhooks_1.verifyWebhookSignature)({ secret, id: second.request.headers[webhooks_1.WEBHOOK_HEADERS.ID], timestamp: second.request.headers[webhooks_1.WEBHOOK_HEADERS.TIMESTAMP], body: second.request.body, signatureHeader: both })).toEqual(true);
186
+ }
187
+ });
188
+ it('egress: private, loopback, link-local and metadata targets are refused at create and at send; DNS rebinding is caught at send', async () => {
189
+ const kit = (0, kit_1.createWebhooksTestKit)();
190
+ const ctx = kit.context('system');
191
+ const refused = [];
192
+ for (const address of [...BLOCKED_ADDRESSES, ...(options.extraBlockedAddresses ?? [])]) {
193
+ kit.resolver.set('bad.example.test', address);
194
+ try {
195
+ await kit.endpoints.create(ctx, { name: 'bad', url: 'https://bad.example.test/x', eventKeys, enabled: true });
196
+ refused.push(`${address} was accepted at create`);
197
+ }
198
+ catch (error) {
199
+ if (!(error instanceof Error) || error.getStatus?.() !== 422)
200
+ refused.push(`${address} failed with ${String(error)}`);
201
+ }
202
+ }
203
+ for (const literal of ['https://127.0.0.1/x', 'https://[::1]/x', 'https://169.254.169.254/latest', 'http://receiver.example.test/x', 'https://user:pw@receiver.example.test/x', 'https://receiver.example.test:22/x']) {
204
+ try {
205
+ await kit.endpoints.create(ctx, { name: 'bad', url: literal, eventKeys, enabled: true });
206
+ refused.push(`${literal} was accepted at create`);
207
+ }
208
+ catch {
209
+ // refused, as required
210
+ }
211
+ }
212
+ expect(refused).toEqual([]);
213
+ const created = await kit.endpoints.create(ctx, { name: 'ok', url, eventKeys, enabled: true });
214
+ kit.resolver.set('receiver.example.test', '10.1.2.3');
215
+ const { deliveryId } = await kit.endpoints.test(ctx, created.endpoint.id);
216
+ await kit.runDeliveryJob(deliveryId, null);
217
+ expect(kit.receiver.requests.length).toEqual(0);
218
+ expect((await kit.repository.deliveries.get(deliveryId))?.errorCode).toEqual('ssrf_blocked');
219
+ });
220
+ it('secrecy: the signing secret appears only in the create and rotate responses', async () => {
221
+ const kit = (0, kit_1.createWebhooksTestKit)();
222
+ const ctx = kit.context('system');
223
+ const { result, logs } = await withCapturedLogs(async () => {
224
+ const created = await kit.endpoints.create(ctx, { name: 'secret', url, eventKeys, enabled: true });
225
+ const rotated = await kit.endpoints.rotateSecret(ctx, created.endpoint.id);
226
+ const { deliveryId } = await kit.endpoints.test(ctx, created.endpoint.id);
227
+ await kit.runDeliveryJob(deliveryId, null);
228
+ return { created, rotated, deliveryId };
229
+ });
230
+ const secrets = [result.created.secret, result.rotated.secret];
231
+ const exposed = JSON.stringify([
232
+ await kit.endpoints.list(ctx),
233
+ await kit.endpoints.get(ctx, result.created.endpoint.id),
234
+ await kit.endpoints.listDeliveries(ctx, result.created.endpoint.id, { page: 1, pageSize: 20 }),
235
+ await kit.endpoints.getDelivery(ctx, result.deliveryId),
236
+ (0, webhook_views_1.toEndpointView)([...kit.repository.endpoints.values()][0]),
237
+ (0, webhook_views_1.toDeliveryDetail)(kit.repository.deliveries.get(result.deliveryId), 'x'),
238
+ [...kit.repository.deliveries.values()],
239
+ kit.audit,
240
+ logs,
241
+ ]);
242
+ for (const secret of secrets)
243
+ expect(exposed.includes(secret)).toEqual(false);
244
+ expect(exposed.includes('webhook-signature')).toEqual(false);
245
+ // The URL is the owner's own data (the API returns it); the logs and the audit trail carry the host only.
246
+ expect(JSON.stringify([logs, kit.audit]).includes('token=abc')).toEqual(false);
247
+ expect(JSON.stringify([logs, kit.audit]).includes('/hooks/in')).toEqual(false);
248
+ });
249
+ it('queue: creating, testing, redelivering and emitting make no request; only the transport touches node:http', async () => {
250
+ const kit = (0, kit_1.createWebhooksTestKit)();
251
+ const ctx = kit.context('system');
252
+ const created = await kit.endpoints.create(ctx, { name: 'queue', url, eventKeys: ['nodes.*'], enabled: true });
253
+ const { deliveryId } = await kit.endpoints.test(ctx, created.endpoint.id);
254
+ kit.repository.setOwner((0, in_memory_1.makeWebhookOwner)({ id: kit_1.KIT_USER_A, permissions: [], systemPermissions: [webhooks_1.WEBHOOK_PERMISSIONS.SYSTEM_READ] }));
255
+ const emitted = await kit.webhooks.emit('nodes.node.offline', { nodeId: 'n', nodeName: 'n', lastHeartbeatAt: null, markedOfflineAt: new Date().toISOString(), staleAfterMinutes: 5 }, { orgId: null });
256
+ expect(emitted.queued).toEqual(1);
257
+ expect(kit.receiver.requests.length).toEqual(0);
258
+ await kit.runDeliveryJob(deliveryId, null);
259
+ await kit.endpoints.redeliver(ctx, deliveryId);
260
+ expect(kit.receiver.requests.length).toEqual(1);
261
+ const offenders = [];
262
+ const root = (0, node_path_1.join)(__dirname, '..');
263
+ for (const file of sourceFiles(root)) {
264
+ const text = (0, node_fs_1.readFileSync)(file, 'utf8');
265
+ const isTransport = /egress[\\/]transport\.(ts|js)$/.test(file);
266
+ if (!isTransport && /node:https?['"]|require\(['"]https?['"]\)|\bfetch\(|undici/.test(text))
267
+ offenders.push(file.slice(root.length + 1));
268
+ }
269
+ expect(offenders).toEqual([]);
270
+ });
271
+ it('authz: endpoints are invisible across owners, scopes and organizations; a lost permission disables the endpoint', async () => {
272
+ const kit = (0, kit_1.createWebhooksTestKit)();
273
+ const { endpoint } = await kit.seedEndpoint({ scope: 'user', ownerUserId: kit_1.KIT_USER_A, eventKeys: ['webhooks.ping'] });
274
+ const crossings = [
275
+ () => kit.endpoints.get(kit.context('user', kit_1.KIT_USER_B), endpoint.id),
276
+ () => kit.endpoints.get(kit.context('user', kit_1.KIT_USER_A, undefined, kit_1.KIT_OTHER_ORG_ID), endpoint.id),
277
+ () => kit.endpoints.get(kit.context('org', kit_1.KIT_USER_A), endpoint.id),
278
+ () => kit.endpoints.get(kit.context('system', kit_1.KIT_USER_A), endpoint.id),
279
+ () => kit.endpoints.update(kit.context('user', kit_1.KIT_USER_B), endpoint.id, { name: 'x' }),
280
+ () => kit.endpoints.remove(kit.context('user', kit_1.KIT_USER_B), endpoint.id),
281
+ () => kit.endpoints.rotateSecret(kit.context('user', kit_1.KIT_USER_B), endpoint.id),
282
+ () => kit.endpoints.test(kit.context('user', kit_1.KIT_USER_B), endpoint.id),
283
+ ];
284
+ for (const attempt of crossings)
285
+ expect((await rejection(attempt)) instanceof webhooks_errors_1.WebhookNotFoundError).toEqual(true);
286
+ expect((await kit.endpoints.list(kit.context('user', kit_1.KIT_USER_B))).length).toEqual(0);
287
+ expect((await kit.endpoints.list(kit.context('user', kit_1.KIT_USER_A))).length).toEqual(1);
288
+ const ping = { message: 'm', endpointId: endpoint.id };
289
+ kit.repository.setOwner((0, in_memory_1.makeWebhookOwner)({ id: kit_1.KIT_USER_A, orgId: kit_1.KIT_ORG_ID, permissions: [webhooks_1.WEBHOOK_PERMISSIONS.READ] }));
290
+ const allowed = await kit.webhooks.emit('webhooks.ping', ping, { orgId: kit_1.KIT_ORG_ID, userId: kit_1.KIT_USER_A });
291
+ expect(allowed.queued).toEqual(1);
292
+ kit.repository.setOwner((0, in_memory_1.makeWebhookOwner)({ id: kit_1.KIT_USER_A, orgId: kit_1.KIT_ORG_ID, permissions: [] }));
293
+ const lost = await kit.webhooks.emit('webhooks.ping', ping, { orgId: kit_1.KIT_ORG_ID, userId: kit_1.KIT_USER_A });
294
+ expect(lost.queued).toEqual(0);
295
+ expect(kit.repository.endpoints.get(endpoint.id)?.enabled).toEqual(false);
296
+ expect(kit.repository.endpoints.get(endpoint.id)?.disabledReason).toEqual('owner_lost_access');
297
+ });
298
+ });
299
+ }
300
+ /**
301
+ * The `webhooks` conformance suite.
302
+ *
303
+ * @extensionPoint registry
304
+ * @stability experimental
305
+ */
306
+ exports.webhooksConformanceSuite = {
307
+ id: 'webhooks',
308
+ title: 'the webhooks slice keeps its invariants',
309
+ description: 'Routes enforce exact permissions, signatures verify and rotate, private targets are refused at create and send (including DNS rebinding), secrets stay out of responses, rows, audit and logs, nothing sends inline, and endpoints are invisible across owners and organizations.',
310
+ register(api, _context, options) {
311
+ registerWebhooksConformance(api, options);
312
+ },
313
+ };
314
+ if (!index_2.conformanceSuites.has(exports.webhooksConformanceSuite.id))
315
+ index_2.conformanceSuites.register(exports.webhooksConformanceSuite);
316
+ //# sourceMappingURL=conformance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conformance.js","sourceRoot":"","sources":["../../../src/webhooks/testing/conformance.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,156 @@
1
+ import type { Job, JobsTx } from '../../jobs/index';
2
+ import type { WebhookDeliveryRow, WebhookEndpointRow, WebhookUserRow } from '../data/webhooks-db';
3
+ import type { HostResolver, ResolvedAddress } from '../egress/egress-guard';
4
+ import { type WebhookTransport, type WebhookTransportRequest, type WebhookTransportResponse } from '../egress/transport';
5
+ import { WebhookSecrets, type SecretAddress } from '../webhook-secrets.service';
6
+ import { WebhooksRepository, type AttemptOutcome, type DeliveryPage, type DeliveryQuery, type LoadedDelivery, type EndpointFilter, type EndpointPatch, type NewDelivery, type NewEndpoint, type SettledAttempt } from '../webhooks.repository';
7
+ /** A job the in-memory repository "enqueued". @stability experimental */
8
+ export interface EnqueuedDeliveryJob {
9
+ /** Delivery id. */
10
+ readonly deliveryId: string;
11
+ /** Org id. */
12
+ readonly orgId: string | null;
13
+ /** Reason. */
14
+ readonly reason: 'upload' | 'rerun';
15
+ /** Scheduled for. */
16
+ readonly scheduledFor: Date | null;
17
+ }
18
+ /**
19
+ * The data port in memory. Emulates the unique `(endpointId, eventId)` key, the
20
+ * cascade on endpoint delete and the organization/owner pinning of every query.
21
+ *
22
+ * @stability experimental
23
+ */
24
+ export declare class InMemoryWebhooksRepository extends WebhooksRepository {
25
+ /** Endpoints by id. */
26
+ readonly endpoints: Map<string, WebhookEndpointRow>;
27
+ /** Deliveries by id. */
28
+ readonly deliveries: Map<string, WebhookDeliveryRow>;
29
+ /** Users by id, for the owner re-check; set with {@link InMemoryWebhooksRepository.setOwner}. */
30
+ readonly owners: Map<string, WebhookUserRow>;
31
+ /** Every delivery job enqueued. */
32
+ readonly enqueued: EnqueuedDeliveryJob[];
33
+ /** Clock. */
34
+ now: () => Date;
35
+ /** Sets what the owner re-check will see. */
36
+ setOwner(user: WebhookUserRow): void;
37
+ private matches;
38
+ listEndpoints(orgId: string | null, filter: EndpointFilter): Promise<WebhookEndpointRow[]>;
39
+ findEndpoint(orgId: string | null, id: string, filter: EndpointFilter): Promise<WebhookEndpointRow | null>;
40
+ countEndpoints(orgId: string | null, filter: EndpointFilter): Promise<number>;
41
+ createEndpoint(orgId: string | null, data: NewEndpoint): Promise<WebhookEndpointRow>;
42
+ updateEndpoint(orgId: string | null, id: string, patch: EndpointPatch): Promise<WebhookEndpointRow>;
43
+ deleteEndpoint(orgId: string | null, id: string): Promise<void>;
44
+ enabledEndpoints(orgId: string | null, filter: EndpointFilter): Promise<WebhookEndpointRow[]>;
45
+ disableEndpoint(orgId: string | null, id: string, reason: string): Promise<boolean>;
46
+ loadOwner(_orgId: string | null, userId: string): Promise<WebhookUserRow | null>;
47
+ insertDeliveries(orgId: string | null, rows: readonly NewDelivery[]): Promise<WebhookDeliveryRow[]>;
48
+ findDelivery(orgId: string | null, id: string, filter: EndpointFilter): Promise<WebhookDeliveryRow | null>;
49
+ loadDeliveryForJob(orgId: string | null, id: string): Promise<LoadedDelivery | null>;
50
+ listDeliveries(orgId: string | null, endpointId: string, query: DeliveryQuery): Promise<DeliveryPage>;
51
+ markDelivering(orgId: string | null, id: string): Promise<WebhookDeliveryRow>;
52
+ settleAttempt(orgId: string | null, deliveryId: string, endpointId: string, outcome: AttemptOutcome): Promise<SettledAttempt>;
53
+ resetForRedelivery(orgId: string | null, id: string): Promise<WebhookDeliveryRow>;
54
+ purgeDeliveriesBefore(cutoff: Date): Promise<number>;
55
+ }
56
+ /**
57
+ * The signing-secret store in memory.
58
+ *
59
+ * @stability experimental
60
+ */
61
+ export declare class InMemoryWebhookSecrets extends WebhookSecrets {
62
+ /** `<scope>/<owner or org>/<name>` to secret. */
63
+ readonly stored: Map<string, string>;
64
+ private key;
65
+ put(endpoint: SecretAddress, version: number, secret: string): Promise<void>;
66
+ get(endpoint: SecretAddress, version: number): Promise<string | null>;
67
+ remove(endpoint: SecretAddress, version: number): Promise<void>;
68
+ removeAll(endpoint: SecretAddress, upTo: number): Promise<void>;
69
+ }
70
+ /** One scripted answer of the fake receiver. @stability experimental */
71
+ export type FakeReceiverAnswer = FakeReceiverResponse | FakeReceiverFailure;
72
+ /** The receiver answers with an HTTP status. @stability experimental */
73
+ export interface FakeReceiverResponse {
74
+ /** The status. */
75
+ readonly status: number;
76
+ /** The `Retry-After` header, raw. */
77
+ readonly retryAfter?: string;
78
+ /** The body kept as the snippet. */
79
+ readonly snippet?: string;
80
+ }
81
+ /** The request fails before an answer. @stability experimental */
82
+ export interface FakeReceiverFailure {
83
+ /** `timeout` or `network`. */
84
+ readonly fail: 'timeout' | 'network';
85
+ }
86
+ /**
87
+ * A fake receiver: records every request and answers from a script (the last
88
+ * answer repeats; the default is `200 ok`).
89
+ *
90
+ * @stability experimental
91
+ */
92
+ export declare class FakeWebhookReceiver implements WebhookTransport {
93
+ /** Every request received. */
94
+ readonly requests: WebhookTransportRequest[];
95
+ private script;
96
+ /** Sets the answers, in order. */
97
+ answerWith(...answers: FakeReceiverAnswer[]): this;
98
+ send(request: WebhookTransportRequest): Promise<WebhookTransportResponse>;
99
+ }
100
+ /**
101
+ * A DNS resolver whose answers a test scripts per host name (and changes
102
+ * between calls, to model DNS rebinding).
103
+ *
104
+ * @stability experimental
105
+ */
106
+ export declare class ScriptedHostResolver implements HostResolver {
107
+ private readonly answers;
108
+ /** Every name resolved, in order. */
109
+ readonly lookups: string[];
110
+ /** Sets the addresses of `hostname`; an empty list means "does not resolve". */
111
+ set(hostname: string, ...addresses: string[]): this;
112
+ resolveAll(hostname: string): Promise<ResolvedAddress[]>;
113
+ }
114
+ /** What {@link RecordingJobs} keeps of an enqueue. @stability experimental */
115
+ export interface RecordedJob {
116
+ /** The job type. */
117
+ type: string;
118
+ /** The subject id. */
119
+ subjectId?: string | null;
120
+ /** The organization. */
121
+ orgId?: string | null;
122
+ /** The payload. */
123
+ payload?: unknown;
124
+ }
125
+ /** One `notifyNow` call the kit recorded. @stability experimental */
126
+ export interface RecordedNotification {
127
+ /** The notification event key. */
128
+ eventKey: string;
129
+ /** The recipient. */
130
+ userId: string;
131
+ /** The event data. */
132
+ data: unknown;
133
+ }
134
+ /** A fake `JobsService` that records what it was asked to enqueue. @stability experimental */
135
+ export declare class RecordingJobs {
136
+ /** Every `enqueue` input. */
137
+ readonly enqueued: RecordedJob[];
138
+ /** Every `enqueueWithin` input. */
139
+ readonly enqueuedWithin: RecordedJob[];
140
+ /** Records the input. */
141
+ enqueue(input: RecordedJob): Promise<Job>;
142
+ /** Records the input. */
143
+ enqueueWithin(_tx: JobsTx, input: RecordedJob): Promise<Job>;
144
+ }
145
+ /** Builds a user with the given permissions, as `loadOwner` returns it. @stability experimental */
146
+ export declare function makeWebhookOwner(input: {
147
+ id: string;
148
+ /** The permissions of the organization role (and none of the system roles). */
149
+ permissions: readonly string[];
150
+ /** The organization the membership is in; omit for a system-only user. */
151
+ orgId?: string;
152
+ /** System-role permissions (an administrator). */
153
+ systemPermissions?: readonly string[];
154
+ isActive?: boolean;
155
+ }): WebhookUserRow;
156
+ //# sourceMappingURL=in-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"in-memory.d.ts","sourceRoot":"","sources":["../../../src/webhooks/testing/in-memory.ts"],"names":[],"mappings":"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"}