@noodleseed/one 0.16.0 → 0.18.0

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 (348) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +52 -5
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/alerts-ops.d.ts +2 -0
  5. package/dist/commands/alerts-ops.d.ts.map +1 -0
  6. package/dist/commands/alerts-ops.js +249 -0
  7. package/dist/commands/alerts-ops.js.map +1 -0
  8. package/dist/commands/analytics-ops.d.ts +13 -0
  9. package/dist/commands/analytics-ops.d.ts.map +1 -1
  10. package/dist/commands/analytics-ops.js +5 -2
  11. package/dist/commands/analytics-ops.js.map +1 -1
  12. package/dist/commands/apps-ops.d.ts +17 -0
  13. package/dist/commands/apps-ops.d.ts.map +1 -0
  14. package/dist/commands/apps-ops.js +285 -0
  15. package/dist/commands/apps-ops.js.map +1 -0
  16. package/dist/commands/archive-ops.js +2 -2
  17. package/dist/commands/archive-ops.js.map +1 -1
  18. package/dist/commands/catalog-data-config.d.ts +9 -0
  19. package/dist/commands/catalog-data-config.d.ts.map +1 -0
  20. package/dist/commands/catalog-data-config.js +67 -0
  21. package/dist/commands/catalog-data-config.js.map +1 -0
  22. package/dist/commands/catalog-data-core.d.ts +13 -0
  23. package/dist/commands/catalog-data-core.d.ts.map +1 -0
  24. package/dist/commands/catalog-data-core.js +354 -0
  25. package/dist/commands/catalog-data-core.js.map +1 -0
  26. package/dist/commands/catalog-data-resources.d.ts +8 -0
  27. package/dist/commands/catalog-data-resources.d.ts.map +1 -0
  28. package/dist/commands/catalog-data-resources.js +551 -0
  29. package/dist/commands/catalog-data-resources.js.map +1 -0
  30. package/dist/commands/catalog-dispatch.d.ts +15 -0
  31. package/dist/commands/catalog-dispatch.d.ts.map +1 -0
  32. package/dist/commands/catalog-dispatch.js +95 -0
  33. package/dist/commands/catalog-dispatch.js.map +1 -0
  34. package/dist/commands/catalog-render.d.ts +28 -0
  35. package/dist/commands/catalog-render.d.ts.map +1 -0
  36. package/dist/commands/catalog-render.js +142 -0
  37. package/dist/commands/catalog-render.js.map +1 -0
  38. package/dist/commands/catalog-types.d.ts +46 -0
  39. package/dist/commands/catalog-types.d.ts.map +1 -0
  40. package/dist/commands/catalog-types.js +7 -0
  41. package/dist/commands/catalog-types.js.map +1 -0
  42. package/dist/commands/catalog.d.ts +30 -0
  43. package/dist/commands/catalog.d.ts.map +1 -0
  44. package/dist/commands/catalog.js +108 -0
  45. package/dist/commands/catalog.js.map +1 -0
  46. package/dist/commands/commands-ops.d.ts +2 -0
  47. package/dist/commands/commands-ops.d.ts.map +1 -0
  48. package/dist/commands/commands-ops.js +19 -0
  49. package/dist/commands/commands-ops.js.map +1 -0
  50. package/dist/commands/deploy-ops.d.ts +45 -3
  51. package/dist/commands/deploy-ops.d.ts.map +1 -1
  52. package/dist/commands/deploy-ops.js +200 -227
  53. package/dist/commands/deploy-ops.js.map +1 -1
  54. package/dist/commands/deploy-status-ops.d.ts +13 -0
  55. package/dist/commands/deploy-status-ops.d.ts.map +1 -0
  56. package/dist/commands/deploy-status-ops.js +252 -0
  57. package/dist/commands/deploy-status-ops.js.map +1 -0
  58. package/dist/commands/deployments-ops.d.ts +30 -0
  59. package/dist/commands/deployments-ops.d.ts.map +1 -0
  60. package/dist/commands/deployments-ops.js +248 -0
  61. package/dist/commands/deployments-ops.js.map +1 -0
  62. package/dist/commands/envs-ops.d.ts +8 -0
  63. package/dist/commands/envs-ops.d.ts.map +1 -0
  64. package/dist/commands/envs-ops.js +240 -0
  65. package/dist/commands/envs-ops.js.map +1 -0
  66. package/dist/commands/github-ops.d.ts +15 -0
  67. package/dist/commands/github-ops.d.ts.map +1 -0
  68. package/dist/commands/github-ops.js +316 -0
  69. package/dist/commands/github-ops.js.map +1 -0
  70. package/dist/commands/github-runs-ops.d.ts +32 -0
  71. package/dist/commands/github-runs-ops.d.ts.map +1 -0
  72. package/dist/commands/github-runs-ops.js +132 -0
  73. package/dist/commands/github-runs-ops.js.map +1 -0
  74. package/dist/commands/github-shared.d.ts +60 -0
  75. package/dist/commands/github-shared.d.ts.map +1 -0
  76. package/dist/commands/github-shared.js +175 -0
  77. package/dist/commands/github-shared.js.map +1 -0
  78. package/dist/commands/org-admin.d.ts.map +1 -1
  79. package/dist/commands/org-admin.js +223 -43
  80. package/dist/commands/org-admin.js.map +1 -1
  81. package/dist/commands/output.d.ts +35 -0
  82. package/dist/commands/output.d.ts.map +1 -0
  83. package/dist/commands/output.js +34 -0
  84. package/dist/commands/output.js.map +1 -0
  85. package/dist/commands/resource-shared.d.ts +132 -0
  86. package/dist/commands/resource-shared.d.ts.map +1 -0
  87. package/dist/commands/resource-shared.js +159 -0
  88. package/dist/commands/resource-shared.js.map +1 -0
  89. package/dist/commands/session.d.ts +6 -9
  90. package/dist/commands/session.d.ts.map +1 -1
  91. package/dist/commands/session.js +42 -116
  92. package/dist/commands/session.js.map +1 -1
  93. package/dist/commands/shared.d.ts.map +1 -1
  94. package/dist/commands/shared.js +3 -91
  95. package/dist/commands/shared.js.map +1 -1
  96. package/dist/commands/target-picker.d.ts +44 -0
  97. package/dist/commands/target-picker.d.ts.map +1 -0
  98. package/dist/commands/target-picker.js +88 -0
  99. package/dist/commands/target-picker.js.map +1 -0
  100. package/dist/commands/update-ops.js +1 -1
  101. package/dist/diagnostics.d.ts +5 -0
  102. package/dist/diagnostics.d.ts.map +1 -1
  103. package/dist/diagnostics.js +1 -1
  104. package/dist/diagnostics.js.map +1 -1
  105. package/dist/doctor.d.ts.map +1 -1
  106. package/dist/doctor.js +33 -0
  107. package/dist/doctor.js.map +1 -1
  108. package/dist/fire.d.ts +94 -0
  109. package/dist/fire.d.ts.map +1 -0
  110. package/dist/fire.js +418 -0
  111. package/dist/fire.js.map +1 -0
  112. package/dist/flavor.d.ts +19 -0
  113. package/dist/flavor.d.ts.map +1 -0
  114. package/dist/flavor.js +95 -0
  115. package/dist/flavor.js.map +1 -0
  116. package/dist/project.js +2 -2
  117. package/dist/prompts.d.ts.map +1 -1
  118. package/dist/prompts.js +30 -17
  119. package/dist/prompts.js.map +1 -1
  120. package/dist/relative-time.d.ts +8 -0
  121. package/dist/relative-time.d.ts.map +1 -0
  122. package/dist/relative-time.js +29 -0
  123. package/dist/relative-time.js.map +1 -0
  124. package/dist/table.d.ts +47 -0
  125. package/dist/table.d.ts.map +1 -0
  126. package/dist/table.js +152 -0
  127. package/dist/table.js.map +1 -0
  128. package/dist/update-binary.js +1 -1
  129. package/dist/update-check.d.ts +1 -1
  130. package/dist/update-check.js +1 -1
  131. package/dist/update.js +1 -1
  132. package/dist/watch.d.ts +52 -0
  133. package/dist/watch.d.ts.map +1 -0
  134. package/dist/watch.js +177 -0
  135. package/dist/watch.js.map +1 -0
  136. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.d.ts.map +1 -1
  137. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js +28 -1
  138. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js.map +1 -1
  139. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
  140. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +6 -0
  141. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
  142. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  143. package/node_modules/@noodle-borg/authoring/dist/connectors.js +14 -0
  144. package/node_modules/@noodle-borg/authoring/dist/connectors.js.map +1 -1
  145. package/node_modules/@noodle-borg/authoring/dist/recording.js +18 -23
  146. package/node_modules/@noodle-borg/authoring/dist/recording.js.map +1 -1
  147. package/node_modules/@noodle-borg/connector-defs/dist/compile.js +9 -0
  148. package/node_modules/@noodle-borg/connector-defs/dist/compile.js.map +1 -1
  149. package/node_modules/@noodle-borg/openapi-import/dist/index.d.ts.map +1 -1
  150. package/node_modules/@noodle-borg/openapi-import/dist/index.js +3 -1
  151. package/node_modules/@noodle-borg/openapi-import/dist/index.js.map +1 -1
  152. package/node_modules/@noodle-borg/service/dist/alert-evaluator.d.ts +57 -0
  153. package/node_modules/@noodle-borg/service/dist/alert-evaluator.d.ts.map +1 -0
  154. package/node_modules/@noodle-borg/service/dist/alert-evaluator.js +158 -0
  155. package/node_modules/@noodle-borg/service/dist/alert-evaluator.js.map +1 -0
  156. package/node_modules/@noodle-borg/service/dist/alert-webhook.d.ts +72 -0
  157. package/node_modules/@noodle-borg/service/dist/alert-webhook.d.ts.map +1 -0
  158. package/node_modules/@noodle-borg/service/dist/alert-webhook.js +138 -0
  159. package/node_modules/@noodle-borg/service/dist/alert-webhook.js.map +1 -0
  160. package/node_modules/@noodle-borg/service/dist/github/app-client.d.ts +49 -0
  161. package/node_modules/@noodle-borg/service/dist/github/app-client.d.ts.map +1 -0
  162. package/node_modules/@noodle-borg/service/dist/github/app-client.js +23 -0
  163. package/node_modules/@noodle-borg/service/dist/github/app-client.js.map +1 -0
  164. package/node_modules/@noodle-borg/service/dist/github/install-nonce.d.ts +23 -0
  165. package/node_modules/@noodle-borg/service/dist/github/install-nonce.d.ts.map +1 -0
  166. package/node_modules/@noodle-borg/service/dist/github/install-nonce.js +57 -0
  167. package/node_modules/@noodle-borg/service/dist/github/install-nonce.js.map +1 -0
  168. package/node_modules/@noodle-borg/service/dist/github/pending-installations.d.ts +38 -0
  169. package/node_modules/@noodle-borg/service/dist/github/pending-installations.d.ts.map +1 -0
  170. package/node_modules/@noodle-borg/service/dist/github/pending-installations.js +41 -0
  171. package/node_modules/@noodle-borg/service/dist/github/pending-installations.js.map +1 -0
  172. package/node_modules/@noodle-borg/service/dist/index.d.ts +15 -1
  173. package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
  174. package/node_modules/@noodle-borg/service/dist/index.js +15 -1
  175. package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
  176. package/node_modules/@noodle-borg/service/dist/options.d.ts +47 -1
  177. package/node_modules/@noodle-borg/service/dist/options.d.ts.map +1 -1
  178. package/node_modules/@noodle-borg/service/dist/registry-state.d.ts +28 -7
  179. package/node_modules/@noodle-borg/service/dist/registry-state.d.ts.map +1 -1
  180. package/node_modules/@noodle-borg/service/dist/registry-state.js +116 -3
  181. package/node_modules/@noodle-borg/service/dist/registry-state.js.map +1 -1
  182. package/node_modules/@noodle-borg/service/dist/registry.d.ts +14 -1
  183. package/node_modules/@noodle-borg/service/dist/registry.d.ts.map +1 -1
  184. package/node_modules/@noodle-borg/service/dist/registry.js +20 -45
  185. package/node_modules/@noodle-borg/service/dist/registry.js.map +1 -1
  186. package/node_modules/@noodle-borg/service/dist/routes/alerts-dispatch.d.ts +28 -0
  187. package/node_modules/@noodle-borg/service/dist/routes/alerts-dispatch.d.ts.map +1 -0
  188. package/node_modules/@noodle-borg/service/dist/routes/alerts-dispatch.js +50 -0
  189. package/node_modules/@noodle-borg/service/dist/routes/alerts-dispatch.js.map +1 -0
  190. package/node_modules/@noodle-borg/service/dist/routes/alerts.d.ts +39 -0
  191. package/node_modules/@noodle-borg/service/dist/routes/alerts.d.ts.map +1 -0
  192. package/node_modules/@noodle-borg/service/dist/routes/alerts.js +204 -0
  193. package/node_modules/@noodle-borg/service/dist/routes/alerts.js.map +1 -0
  194. package/node_modules/@noodle-borg/service/dist/routes/analytics-dispatch.d.ts +23 -0
  195. package/node_modules/@noodle-borg/service/dist/routes/analytics-dispatch.d.ts.map +1 -0
  196. package/node_modules/@noodle-borg/service/dist/routes/analytics-dispatch.js +53 -0
  197. package/node_modules/@noodle-borg/service/dist/routes/analytics-dispatch.js.map +1 -0
  198. package/node_modules/@noodle-borg/service/dist/routes/apps.d.ts +24 -0
  199. package/node_modules/@noodle-borg/service/dist/routes/apps.d.ts.map +1 -0
  200. package/node_modules/@noodle-borg/service/dist/routes/apps.js +72 -0
  201. package/node_modules/@noodle-borg/service/dist/routes/apps.js.map +1 -0
  202. package/node_modules/@noodle-borg/service/dist/routes/contracts.d.ts +465 -0
  203. package/node_modules/@noodle-borg/service/dist/routes/contracts.d.ts.map +1 -0
  204. package/node_modules/@noodle-borg/service/dist/routes/contracts.js +233 -0
  205. package/node_modules/@noodle-borg/service/dist/routes/contracts.js.map +1 -0
  206. package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts +12 -1
  207. package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts.map +1 -1
  208. package/node_modules/@noodle-borg/service/dist/routes/deployments.js +31 -2
  209. package/node_modules/@noodle-borg/service/dist/routes/deployments.js.map +1 -1
  210. package/node_modules/@noodle-borg/service/dist/routes/endpoint-enrichment.d.ts +17 -0
  211. package/node_modules/@noodle-borg/service/dist/routes/endpoint-enrichment.d.ts.map +1 -0
  212. package/node_modules/@noodle-borg/service/dist/routes/endpoint-enrichment.js +15 -0
  213. package/node_modules/@noodle-borg/service/dist/routes/endpoint-enrichment.js.map +1 -0
  214. package/node_modules/@noodle-borg/service/dist/routes/envs.d.ts +22 -0
  215. package/node_modules/@noodle-borg/service/dist/routes/envs.d.ts.map +1 -0
  216. package/node_modules/@noodle-borg/service/dist/routes/envs.js +46 -0
  217. package/node_modules/@noodle-borg/service/dist/routes/envs.js.map +1 -0
  218. package/node_modules/@noodle-borg/service/dist/routes/github-connection.d.ts +29 -0
  219. package/node_modules/@noodle-borg/service/dist/routes/github-connection.d.ts.map +1 -0
  220. package/node_modules/@noodle-borg/service/dist/routes/github-connection.js +202 -0
  221. package/node_modules/@noodle-borg/service/dist/routes/github-connection.js.map +1 -0
  222. package/node_modules/@noodle-borg/service/dist/routes/github-dispatch.d.ts +30 -0
  223. package/node_modules/@noodle-borg/service/dist/routes/github-dispatch.d.ts.map +1 -0
  224. package/node_modules/@noodle-borg/service/dist/routes/github-dispatch.js +95 -0
  225. package/node_modules/@noodle-borg/service/dist/routes/github-dispatch.js.map +1 -0
  226. package/node_modules/@noodle-borg/service/dist/routes/github-runs.d.ts +8 -0
  227. package/node_modules/@noodle-borg/service/dist/routes/github-runs.d.ts.map +1 -0
  228. package/node_modules/@noodle-borg/service/dist/routes/github-runs.js +33 -0
  229. package/node_modules/@noodle-borg/service/dist/routes/github-runs.js.map +1 -0
  230. package/node_modules/@noodle-borg/service/dist/routes/github-setup.d.ts +28 -0
  231. package/node_modules/@noodle-borg/service/dist/routes/github-setup.d.ts.map +1 -0
  232. package/node_modules/@noodle-borg/service/dist/routes/github-setup.js +80 -0
  233. package/node_modules/@noodle-borg/service/dist/routes/github-setup.js.map +1 -0
  234. package/node_modules/@noodle-borg/service/dist/routes/github-webhook.d.ts +29 -0
  235. package/node_modules/@noodle-borg/service/dist/routes/github-webhook.d.ts.map +1 -0
  236. package/node_modules/@noodle-borg/service/dist/routes/github-webhook.js +355 -0
  237. package/node_modules/@noodle-borg/service/dist/routes/github-webhook.js.map +1 -0
  238. package/node_modules/@noodle-borg/service/dist/routes/org-admin-dispatch.d.ts +27 -0
  239. package/node_modules/@noodle-borg/service/dist/routes/org-admin-dispatch.d.ts.map +1 -0
  240. package/node_modules/@noodle-borg/service/dist/routes/org-admin-dispatch.js +61 -0
  241. package/node_modules/@noodle-borg/service/dist/routes/org-admin-dispatch.js.map +1 -0
  242. package/node_modules/@noodle-borg/service/dist/routes/org-admin.d.ts +5 -0
  243. package/node_modules/@noodle-borg/service/dist/routes/org-admin.d.ts.map +1 -1
  244. package/node_modules/@noodle-borg/service/dist/routes/org-admin.js +13 -1
  245. package/node_modules/@noodle-borg/service/dist/routes/org-admin.js.map +1 -1
  246. package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts +64 -1
  247. package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts.map +1 -1
  248. package/node_modules/@noodle-borg/service/dist/routes/paths.js +170 -1
  249. package/node_modules/@noodle-borg/service/dist/routes/paths.js.map +1 -1
  250. package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.d.ts +33 -0
  251. package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.d.ts.map +1 -0
  252. package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.js +69 -0
  253. package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.js.map +1 -0
  254. package/node_modules/@noodle-borg/service/dist/serve.d.ts.map +1 -1
  255. package/node_modules/@noodle-borg/service/dist/serve.js +42 -1
  256. package/node_modules/@noodle-borg/service/dist/serve.js.map +1 -1
  257. package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -1
  258. package/node_modules/@noodle-borg/service/dist/service.js +81 -82
  259. package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
  260. package/node_modules/@noodle-borg/service/dist/store/alert-rules-json-file.d.ts +21 -0
  261. package/node_modules/@noodle-borg/service/dist/store/alert-rules-json-file.d.ts.map +1 -0
  262. package/node_modules/@noodle-borg/service/dist/store/alert-rules-json-file.js +115 -0
  263. package/node_modules/@noodle-borg/service/dist/store/alert-rules-json-file.js.map +1 -0
  264. package/node_modules/@noodle-borg/service/dist/store/alert-rules.d.ts +108 -0
  265. package/node_modules/@noodle-borg/service/dist/store/alert-rules.d.ts.map +1 -0
  266. package/node_modules/@noodle-borg/service/dist/store/alert-rules.js +181 -0
  267. package/node_modules/@noodle-borg/service/dist/store/alert-rules.js.map +1 -0
  268. package/node_modules/@noodle-borg/service/dist/store/control-plane.d.ts +1 -0
  269. package/node_modules/@noodle-borg/service/dist/store/control-plane.d.ts.map +1 -1
  270. package/node_modules/@noodle-borg/service/dist/store/control-plane.js +3 -0
  271. package/node_modules/@noodle-borg/service/dist/store/control-plane.js.map +1 -1
  272. package/node_modules/@noodle-borg/service/dist/store/github-connections-json-file.d.ts +24 -0
  273. package/node_modules/@noodle-borg/service/dist/store/github-connections-json-file.d.ts.map +1 -0
  274. package/node_modules/@noodle-borg/service/dist/store/github-connections-json-file.js +141 -0
  275. package/node_modules/@noodle-borg/service/dist/store/github-connections-json-file.js.map +1 -0
  276. package/node_modules/@noodle-borg/service/dist/store/github-connections.d.ts +31 -0
  277. package/node_modules/@noodle-borg/service/dist/store/github-connections.d.ts.map +1 -0
  278. package/node_modules/@noodle-borg/service/dist/store/github-connections.js +120 -0
  279. package/node_modules/@noodle-borg/service/dist/store/github-connections.js.map +1 -0
  280. package/node_modules/@noodle-borg/service/dist/store/github-runs-json-file.d.ts +22 -0
  281. package/node_modules/@noodle-borg/service/dist/store/github-runs-json-file.d.ts.map +1 -0
  282. package/node_modules/@noodle-borg/service/dist/store/github-runs-json-file.js +116 -0
  283. package/node_modules/@noodle-borg/service/dist/store/github-runs-json-file.js.map +1 -0
  284. package/node_modules/@noodle-borg/service/dist/store/github-runs.d.ts +51 -0
  285. package/node_modules/@noodle-borg/service/dist/store/github-runs.d.ts.map +1 -0
  286. package/node_modules/@noodle-borg/service/dist/store/github-runs.js +158 -0
  287. package/node_modules/@noodle-borg/service/dist/store/github-runs.js.map +1 -0
  288. package/node_modules/@noodle-borg/service/dist/store/in-memory.d.ts +32 -0
  289. package/node_modules/@noodle-borg/service/dist/store/in-memory.d.ts.map +1 -0
  290. package/node_modules/@noodle-borg/service/dist/store/in-memory.js +169 -0
  291. package/node_modules/@noodle-borg/service/dist/store/in-memory.js.map +1 -0
  292. package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts +14 -1
  293. package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts.map +1 -1
  294. package/node_modules/@noodle-borg/service/dist/store/json-file.js +54 -1
  295. package/node_modules/@noodle-borg/service/dist/store/json-file.js.map +1 -1
  296. package/node_modules/@noodle-borg/service/dist/store/pending-installations-postgres.d.ts +19 -0
  297. package/node_modules/@noodle-borg/service/dist/store/pending-installations-postgres.d.ts.map +1 -0
  298. package/node_modules/@noodle-borg/service/dist/store/pending-installations-postgres.js +46 -0
  299. package/node_modules/@noodle-borg/service/dist/store/pending-installations-postgres.js.map +1 -0
  300. package/node_modules/@noodle-borg/service/dist/store/postgres-alerts.d.ts +26 -0
  301. package/node_modules/@noodle-borg/service/dist/store/postgres-alerts.d.ts.map +1 -0
  302. package/node_modules/@noodle-borg/service/dist/store/postgres-alerts.js +142 -0
  303. package/node_modules/@noodle-borg/service/dist/store/postgres-alerts.js.map +1 -0
  304. package/node_modules/@noodle-borg/service/dist/store/postgres-apps.d.ts +11 -0
  305. package/node_modules/@noodle-borg/service/dist/store/postgres-apps.d.ts.map +1 -0
  306. package/node_modules/@noodle-borg/service/dist/store/postgres-apps.js +31 -0
  307. package/node_modules/@noodle-borg/service/dist/store/postgres-apps.js.map +1 -0
  308. package/node_modules/@noodle-borg/service/dist/store/postgres-config.d.ts +21 -0
  309. package/node_modules/@noodle-borg/service/dist/store/postgres-config.d.ts.map +1 -0
  310. package/node_modules/@noodle-borg/service/dist/store/postgres-config.js +80 -0
  311. package/node_modules/@noodle-borg/service/dist/store/postgres-config.js.map +1 -0
  312. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.d.ts +1 -0
  313. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.d.ts.map +1 -1
  314. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.js +6 -0
  315. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.js.map +1 -1
  316. package/node_modules/@noodle-borg/service/dist/store/postgres-envs.d.ts +7 -0
  317. package/node_modules/@noodle-borg/service/dist/store/postgres-envs.d.ts.map +1 -0
  318. package/node_modules/@noodle-borg/service/dist/store/postgres-envs.js +34 -0
  319. package/node_modules/@noodle-borg/service/dist/store/postgres-envs.js.map +1 -0
  320. package/node_modules/@noodle-borg/service/dist/store/postgres-github-runs.d.ts +9 -0
  321. package/node_modules/@noodle-borg/service/dist/store/postgres-github-runs.d.ts.map +1 -0
  322. package/node_modules/@noodle-borg/service/dist/store/postgres-github-runs.js +113 -0
  323. package/node_modules/@noodle-borg/service/dist/store/postgres-github-runs.js.map +1 -0
  324. package/node_modules/@noodle-borg/service/dist/store/postgres-github.d.ts +13 -0
  325. package/node_modules/@noodle-borg/service/dist/store/postgres-github.d.ts.map +1 -0
  326. package/node_modules/@noodle-borg/service/dist/store/postgres-github.js +130 -0
  327. package/node_modules/@noodle-borg/service/dist/store/postgres-github.js.map +1 -0
  328. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.d.ts.map +1 -1
  329. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js +85 -0
  330. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js.map +1 -1
  331. package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts +32 -2
  332. package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts.map +1 -1
  333. package/node_modules/@noodle-borg/service/dist/store/postgres.js +72 -75
  334. package/node_modules/@noodle-borg/service/dist/store/postgres.js.map +1 -1
  335. package/node_modules/@noodle-borg/service/dist/store/records.d.ts +56 -3
  336. package/node_modules/@noodle-borg/service/dist/store/records.d.ts.map +1 -1
  337. package/node_modules/@noodle-borg/service/dist/store/records.js +158 -0
  338. package/node_modules/@noodle-borg/service/dist/store/records.js.map +1 -1
  339. package/node_modules/@noodle-borg/service/dist/store/validate.d.ts +2 -0
  340. package/node_modules/@noodle-borg/service/dist/store/validate.d.ts.map +1 -1
  341. package/node_modules/@noodle-borg/service/dist/store/validate.js +7 -0
  342. package/node_modules/@noodle-borg/service/dist/store/validate.js.map +1 -1
  343. package/node_modules/@noodle-borg/service/dist/store.d.ts +265 -17
  344. package/node_modules/@noodle-borg/service/dist/store.d.ts.map +1 -1
  345. package/node_modules/@noodle-borg/service/dist/store.js +10 -118
  346. package/node_modules/@noodle-borg/service/dist/store.js.map +1 -1
  347. package/node_modules/@noodle-borg/service/package.json +2 -1
  348. package/package.json +2 -2
@@ -0,0 +1,95 @@
1
+ import { handleGithubConnection, handleGithubInstallationClaim, handleGithubInstallUrl, } from './github-connection.js';
2
+ import { handleGithubRunsList } from './github-runs.js';
3
+ import { handleGithubInstallationPending, handleGithubSetup } from './github-setup.js';
4
+ import { handleGithubWebhook } from './github-webhook.js';
5
+ import { isGithubInstallationClaimPath, isGithubInstallationPendingPath, isGithubInstallUrlPath, isGithubSetupPath, isGithubWebhookPath, parseGithubConnectionPath, parseGithubRunsPath, } from './paths.js';
6
+ /** Try the GHD-1 GitHub routes; returns true when the request was handled (or a guard ended it). */
7
+ export function dispatchGithubRoutes(req, res, url, deps) {
8
+ const { applySecurityHeaders, enforceHttps, sendJson, tls } = deps;
9
+ const connectionRef = parseGithubConnectionPath(url.pathname);
10
+ if (connectionRef !== undefined &&
11
+ (req.method === 'GET' || req.method === 'POST' || req.method === 'DELETE')) {
12
+ applySecurityHeaders(res, tls);
13
+ if (enforceHttps(req, res, tls))
14
+ return true;
15
+ handleGithubConnection(req, res, deps.gate, deps.controlPlane, deps.githubConnectionStore, deps.githubAppClient, deps.githubApp, deps.maxBody, connectionRef, deps.audit).catch(() => {
16
+ if (!res.headersSent)
17
+ sendJson(res, 500, { error: 'internal error' });
18
+ });
19
+ return true;
20
+ }
21
+ if (isGithubInstallUrlPath(url.pathname) && req.method === 'GET') {
22
+ applySecurityHeaders(res, tls);
23
+ if (enforceHttps(req, res, tls))
24
+ return true;
25
+ handleGithubInstallUrl(req, res, deps.gate, deps.githubApp, url).catch(() => {
26
+ if (!res.headersSent)
27
+ sendJson(res, 500, { error: 'internal error' });
28
+ });
29
+ return true;
30
+ }
31
+ if (isGithubInstallationClaimPath(url.pathname) && req.method === 'POST') {
32
+ applySecurityHeaders(res, tls);
33
+ if (enforceHttps(req, res, tls))
34
+ return true;
35
+ handleGithubInstallationClaim(req, res, deps.gate, deps.controlPlane, deps.githubAppClient, deps.githubApp, deps.pendingGithubInstallationStore, deps.maxBody).catch(() => {
36
+ if (!res.headersSent)
37
+ sendJson(res, 500, { error: 'internal error' });
38
+ });
39
+ return true;
40
+ }
41
+ // GHD-2 deploy-runs read surface: org-member list behind `noodle github runs` + the console feed.
42
+ const runsRef = parseGithubRunsPath(url.pathname);
43
+ if (runsRef !== undefined && req.method === 'GET') {
44
+ applySecurityHeaders(res, tls);
45
+ if (enforceHttps(req, res, tls))
46
+ return true;
47
+ handleGithubRunsList(req, res, deps.gate, deps.controlPlane, deps.githubDeployRunStore, runsRef, url).catch(() => {
48
+ if (!res.headersSent)
49
+ sendJson(res, 500, { error: 'internal error' });
50
+ });
51
+ return true;
52
+ }
53
+ // GHD-2 webhook intake (ADR 0111 §6): signature-gated, unauthenticated by necessity. The handler
54
+ // owns the full defense stack — see `github-webhook.ts`.
55
+ if (isGithubWebhookPath(url.pathname) && req.method === 'POST') {
56
+ applySecurityHeaders(res, tls);
57
+ if (enforceHttps(req, res, tls))
58
+ return true;
59
+ handleGithubWebhook(req, res, {
60
+ connectionStore: deps.githubConnectionStore,
61
+ runStore: deps.githubDeployRunStore,
62
+ webhookSecret: deps.githubApp?.webhookSecret,
63
+ audit: deps.audit,
64
+ maxBody: deps.maxBody,
65
+ }).catch(() => {
66
+ if (!res.headersSent)
67
+ sendJson(res, 500, { error: 'internal error' });
68
+ });
69
+ return true;
70
+ }
71
+ // GHD-1.4 CLI hand-off: the GitHub App's Setup URL landing + the CLI's install poll. See
72
+ // `github-setup.ts` for why these two small routes exist.
73
+ if (isGithubSetupPath(url.pathname) && req.method === 'GET') {
74
+ applySecurityHeaders(res, tls);
75
+ if (enforceHttps(req, res, tls))
76
+ return true;
77
+ handleGithubSetup(req, res, deps.pendingGithubInstallationStore, deps.githubApp, url).catch(() => {
78
+ if (!res.headersSent)
79
+ sendJson(res, 500, { error: 'internal error' });
80
+ });
81
+ return true;
82
+ }
83
+ if (isGithubInstallationPendingPath(url.pathname) && req.method === 'GET') {
84
+ applySecurityHeaders(res, tls);
85
+ if (enforceHttps(req, res, tls))
86
+ return true;
87
+ handleGithubInstallationPending(req, res, deps.gate, deps.controlPlane, deps.pendingGithubInstallationStore, deps.githubApp, url).catch(() => {
88
+ if (!res.headersSent)
89
+ sendJson(res, 500, { error: 'internal error' });
90
+ });
91
+ return true;
92
+ }
93
+ return false;
94
+ }
95
+ //# sourceMappingURL=github-dispatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-dispatch.js","sourceRoot":"","sources":["../../src/routes/github-dispatch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import type { DeployAuthGate } from '../auth/deploy-gate.js';
3
+ import type { ControlPlaneStore, GithubDeployRunStore } from '../store.js';
4
+ export declare function handleGithubRunsList(req: IncomingMessage, res: ServerResponse, gate: DeployAuthGate, controlPlane: ControlPlaneStore, runStore: GithubDeployRunStore, ref: {
5
+ readonly org: string;
6
+ readonly app: string;
7
+ }, url: URL): Promise<void>;
8
+ //# sourceMappingURL=github-runs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-runs.d.ts","sourceRoot":"","sources":["../../src/routes/github-runs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAc3E,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,cAAc,EACpB,YAAY,EAAE,iBAAiB,EAC/B,QAAQ,EAAE,oBAAoB,EAC9B,GAAG,EAAE;IAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EACnD,GAAG,EAAE,GAAG,GACP,OAAO,CAAC,IAAI,CAAC,CAyBf"}
@@ -0,0 +1,33 @@
1
+ import { sendJson } from '../http-util.js';
2
+ import { sendContract } from './apps.js';
3
+ import { GithubRunsListResponseSchema } from './contracts.js';
4
+ import { authorizeTenantControl } from './control-plane.js';
5
+ /**
6
+ * `GET /v1/orgs/{org}/apps/{app}/github/runs` (GHD-2): the deploy-runs read surface behind
7
+ * `noodle github runs` and the console feed. Org MEMBER read (mirrors the connection GET — runs are
8
+ * operational visibility, not an owner-only control). Newest-first with the store's explicit cap +
9
+ * `truncated` flag; `?limit=` tightens it (1..200).
10
+ */
11
+ const MAX_LIST_LIMIT = 200;
12
+ export async function handleGithubRunsList(req, res, gate, controlPlane, runStore, ref, url) {
13
+ const identity = await authorizeTenantControl(req, res, gate, controlPlane, ref.org);
14
+ if (identity === false)
15
+ return;
16
+ const limitParam = url.searchParams.get('limit');
17
+ let limit;
18
+ if (limitParam !== null) {
19
+ const parsed = Number(limitParam);
20
+ if (!Number.isInteger(parsed) || parsed < 1 || parsed > MAX_LIST_LIMIT) {
21
+ return sendJson(res, 400, {
22
+ error: `"limit" must be an integer between 1 and ${MAX_LIST_LIMIT}`,
23
+ });
24
+ }
25
+ limit = parsed;
26
+ }
27
+ const result = await runStore.listDeployRuns(ref.org, ref.app, limit !== undefined ? { limit } : {});
28
+ return sendContract(res, () => GithubRunsListResponseSchema.parse({
29
+ ok: true,
30
+ data: { runs: result.runs, truncated: result.truncated },
31
+ }));
32
+ }
33
+ //# sourceMappingURL=github-runs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-runs.js","sourceRoot":"","sources":["../../src/routes/github-runs.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAE5D;;;;;GAKG;AAEH,MAAM,cAAc,GAAG,GAAG,CAAC;AAE3B,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,GAAoB,EACpB,GAAmB,EACnB,IAAoB,EACpB,YAA+B,EAC/B,QAA8B,EAC9B,GAAmD,EACnD,GAAQ;IAER,MAAM,QAAQ,GAAG,MAAM,sBAAsB,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IACrF,IAAI,QAAQ,KAAK,KAAK;QAAE,OAAO;IAC/B,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,KAAyB,CAAC;IAC9B,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,cAAc,EAAE,CAAC;YACvE,OAAO,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;gBACxB,KAAK,EAAE,4CAA4C,cAAc,EAAE;aACpE,CAAC,CAAC;QACL,CAAC;QACD,KAAK,GAAG,MAAM,CAAC;IACjB,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,cAAc,CAC1C,GAAG,CAAC,GAAG,EACP,GAAG,CAAC,GAAG,EACP,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CACrC,CAAC;IACF,OAAO,YAAY,CAAC,GAAG,EAAE,GAAG,EAAE,CAC5B,4BAA4B,CAAC,KAAK,CAAC;QACjC,EAAE,EAAE,IAAI;QACR,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE;KACzD,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * GHD-1.4 CLI hand-off routes: `GET /v1/github/setup` lands GitHub's post-install browser redirect (the
3
+ * GitHub App's configured Setup URL — an operator-side, one-time App-settings field, not a code path) and
4
+ * `GET /v1/github/installations/pending` lets the polling CLI discover the installationId it stashed. See
5
+ * `../github/pending-installations.ts` for the storage rationale. Neither route touches the durable
6
+ * `GithubConnectionStore` — connecting still requires the owner-gated `POST .../github/connection`
7
+ * (`github-connection.ts`) once the CLI has picked a repository via `installations/claim`.
8
+ */
9
+ import type { IncomingMessage, ServerResponse } from 'node:http';
10
+ import type { DeployAuthGate } from '../auth/deploy-gate.js';
11
+ import type { GithubAppConfig } from '../github/app-client.js';
12
+ import type { PendingGithubInstallationStore } from '../github/pending-installations.js';
13
+ import type { ControlPlaneStore } from '../store.js';
14
+ /**
15
+ * `GET /v1/github/setup?installation_id=...&state=...` — the GitHub App's Setup URL. Unauthenticated by
16
+ * necessity: GitHub's redirect is a bare browser GET with no bearer token, so the signed `state` nonce is
17
+ * the only protection. A tampered/expired/malformed state or a missing/non-numeric `installation_id` is
18
+ * rejected before anything is stored — no partial/garbage pending entry is ever written.
19
+ */
20
+ export declare function handleGithubSetup(_req: IncomingMessage, res: ServerResponse, pendingStore: PendingGithubInstallationStore, githubApp: GithubAppConfig | undefined, url: URL): Promise<void>;
21
+ /**
22
+ * `GET /v1/github/installations/pending?state=...` — the CLI's poll target. Requires the same signed-in
23
+ * subject who requested `install-url` (nonce subject match, mirroring `installations/claim`) and org
24
+ * membership on the nonce's bound org; 404 until the setup redirect has landed, 200 with
25
+ * `{installationId}` after.
26
+ */
27
+ export declare function handleGithubInstallationPending(req: IncomingMessage, res: ServerResponse, gate: DeployAuthGate, controlPlane: ControlPlaneStore, pendingStore: PendingGithubInstallationStore, githubApp: GithubAppConfig | undefined, url: URL): Promise<void>;
28
+ //# sourceMappingURL=github-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-setup.d.ts","sourceRoot":"","sources":["../../src/routes/github-setup.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,oCAAoC,CAAC;AAEzF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAuBrD;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,eAAe,EACrB,GAAG,EAAE,cAAc,EACnB,YAAY,EAAE,8BAA8B,EAC5C,SAAS,EAAE,eAAe,GAAG,SAAS,EACtC,GAAG,EAAE,GAAG,GACP,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;;;;GAKG;AACH,wBAAsB,+BAA+B,CACnD,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,cAAc,EACpB,YAAY,EAAE,iBAAiB,EAC/B,YAAY,EAAE,8BAA8B,EAC5C,SAAS,EAAE,eAAe,GAAG,SAAS,EACtC,GAAG,EAAE,GAAG,GACP,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
@@ -0,0 +1,80 @@
1
+ import { resolveGithubStateSecret, verifyInstallNonce } from '../github/install-nonce.js';
2
+ import { sendForbidden, sendJson } from '../http-util.js';
3
+ import { authorizeControlPlane } from './control-plane.js';
4
+ const SETUP_OK_HTML = '<!doctype html><html><head><meta charset="utf-8"><title>Noodle Seed</title></head>' +
5
+ '<body style="font-family:system-ui,sans-serif;padding:2rem"><p>GitHub installation received. ' +
6
+ 'You can return to your terminal.</p></body></html>';
7
+ const SETUP_ERROR_HTML = '<!doctype html><html><head><meta charset="utf-8"><title>Noodle Seed</title></head>' +
8
+ '<body style="font-family:system-ui,sans-serif;padding:2rem"><p>This installation link is invalid or ' +
9
+ 'has expired. Return to your terminal and run <code>noodle github connect</code> again.</p></body></html>';
10
+ function sendHtml(res, status, html) {
11
+ res.writeHead(status, { 'content-type': 'text/html; charset=utf-8' });
12
+ res.end(html);
13
+ }
14
+ function parsePositiveInt(value) {
15
+ if (value === null)
16
+ return undefined;
17
+ const n = Number(value);
18
+ return Number.isInteger(n) && n > 0 ? n : undefined;
19
+ }
20
+ /**
21
+ * `GET /v1/github/setup?installation_id=...&state=...` — the GitHub App's Setup URL. Unauthenticated by
22
+ * necessity: GitHub's redirect is a bare browser GET with no bearer token, so the signed `state` nonce is
23
+ * the only protection. A tampered/expired/malformed state or a missing/non-numeric `installation_id` is
24
+ * rejected before anything is stored — no partial/garbage pending entry is ever written.
25
+ */
26
+ export async function handleGithubSetup(_req, res, pendingStore, githubApp, url) {
27
+ const state = url.searchParams.get('state');
28
+ const installationId = parsePositiveInt(url.searchParams.get('installation_id'));
29
+ if (state === null || installationId === undefined) {
30
+ sendHtml(res, 400, SETUP_ERROR_HTML);
31
+ return;
32
+ }
33
+ const secret = resolveGithubStateSecret(githubApp?.webhookSecret);
34
+ const verification = verifyInstallNonce(state, secret);
35
+ if (!verification.ok) {
36
+ sendHtml(res, 400, SETUP_ERROR_HTML);
37
+ return;
38
+ }
39
+ await pendingStore.put(state, installationId);
40
+ sendHtml(res, 200, SETUP_OK_HTML);
41
+ }
42
+ /**
43
+ * `GET /v1/github/installations/pending?state=...` — the CLI's poll target. Requires the same signed-in
44
+ * subject who requested `install-url` (nonce subject match, mirroring `installations/claim`) and org
45
+ * membership on the nonce's bound org; 404 until the setup redirect has landed, 200 with
46
+ * `{installationId}` after.
47
+ */
48
+ export async function handleGithubInstallationPending(req, res, gate, controlPlane, pendingStore, githubApp, url) {
49
+ const identity = await authorizeControlPlane(req, res, gate, { requireIdentity: true });
50
+ if (identity === false)
51
+ return;
52
+ const state = url.searchParams.get('state');
53
+ if (state === null) {
54
+ sendJson(res, 400, { error: '"state" query parameter is required' });
55
+ return;
56
+ }
57
+ const secret = resolveGithubStateSecret(githubApp?.webhookSecret);
58
+ const verification = verifyInstallNonce(state, secret);
59
+ if (!verification.ok || verification.payload.subject !== identity.subject) {
60
+ sendForbidden(res, 'invalid or expired state');
61
+ return;
62
+ }
63
+ if (!identity.superAdmin) {
64
+ const member = await controlPlane.isOrgMember({
65
+ org: verification.payload.org,
66
+ subject: identity.subject,
67
+ });
68
+ if (!member) {
69
+ sendForbidden(res, 'forbidden');
70
+ return;
71
+ }
72
+ }
73
+ const installationId = await pendingStore.get(state);
74
+ if (installationId === undefined) {
75
+ sendJson(res, 404, { error: 'installation not landed yet' });
76
+ return;
77
+ }
78
+ sendJson(res, 200, { ok: true, data: { installationId } });
79
+ }
80
+ //# sourceMappingURL=github-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-setup.js","sourceRoot":"","sources":["../../src/routes/github-setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import type { IncomingMessage, ServerResponse } from 'node:http';
2
+ import type { AuditSink } from '../store/audit.js';
3
+ import type { GithubConnectionStore, GithubDeployRunStore } from '../store.js';
4
+ /**
5
+ * `POST /v1/github/webhook` (GHD-2, ADR 0111 §6) — the GitHub App's webhook receiver. Unauthenticated
6
+ * by necessity (GitHub is the caller), so the defense layers run strictly in order: the HMAC-SHA256
7
+ * signature is verified over the RAW body bytes before any header semantics or JSON parsing; then
8
+ * headers, then payload shape, then the connection binding (repository AND installation must match),
9
+ * and only then the idempotent run mutation (the store's delivery-id/target dedupe is the replay
10
+ * defense — see `GithubDeployRunStore`). Every response to GitHub is intentionally terse: no payload
11
+ * echo, no secret material, no verification oracle beyond the HTTP status.
12
+ *
13
+ * PR-B scope: runs are RECORDED (queued / queued+blocked), superseded, and canceled — never built.
14
+ * The build worker that walks queued runs forward is GHD-3, and it must skip runs carrying a
15
+ * `blockedReason`.
16
+ */
17
+ export interface GithubWebhookDeps {
18
+ readonly connectionStore: GithubConnectionStore;
19
+ readonly runStore: GithubDeployRunStore;
20
+ readonly webhookSecret: string | undefined;
21
+ readonly audit: AuditSink;
22
+ readonly maxBody: number;
23
+ /** Injectable run-id mint for deterministic tests. Default: `run-` + 12 hex chars. */
24
+ readonly newRunId?: () => string;
25
+ }
26
+ /** Timing-safe check of GitHub's `X-Hub-Signature-256: sha256=<hex>` over the raw body bytes. */
27
+ export declare function verifyWebhookSignature(rawBody: Buffer, signatureHeader: string | undefined, secret: string): boolean;
28
+ export declare function handleGithubWebhook(req: IncomingMessage, res: ServerResponse, deps: GithubWebhookDeps): Promise<void>;
29
+ //# sourceMappingURL=github-webhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-webhook.d.ts","sourceRoot":"","sources":["../../src/routes/github-webhook.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEjE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAEV,qBAAqB,EACrB,oBAAoB,EAErB,MAAM,aAAa,CAAC;AAErB;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,eAAe,EAAE,qBAAqB,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;IACxC,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,sFAAsF;IACtF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,MAAM,CAAC;CAClC;AAID,iGAAiG;AACjG,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,MAAM,EAAE,MAAM,GACb,OAAO,CAST;AAgVD,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,cAAc,EACnB,IAAI,EAAE,iBAAiB,GACtB,OAAO,CAAC,IAAI,CAAC,CAoDf"}