@shipfox/api-runners 5.0.0 → 7.0.1

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 (400) hide show
  1. package/.turbo/turbo-build.log +6 -6
  2. package/CHANGELOG.md +80 -0
  3. package/dist/config.d.ts +5 -1
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +54 -7
  6. package/dist/config.js.map +1 -1
  7. package/dist/core/demand.d.ts +6 -6
  8. package/dist/core/demand.d.ts.map +1 -1
  9. package/dist/core/demand.js +10 -10
  10. package/dist/core/demand.js.map +1 -1
  11. package/dist/core/entities/ephemeral-registration-token.d.ts +1 -1
  12. package/dist/core/entities/ephemeral-registration-token.d.ts.map +1 -1
  13. package/dist/core/entities/ephemeral-registration-token.js.map +1 -1
  14. package/dist/core/entities/provisioner-capability-snapshot.d.ts +13 -0
  15. package/dist/core/entities/provisioner-capability-snapshot.d.ts.map +1 -0
  16. package/dist/core/entities/provisioner-capability-snapshot.js +3 -0
  17. package/dist/core/entities/provisioner-capability-snapshot.js.map +1 -0
  18. package/dist/core/entities/provisioner-token.d.ts +10 -2
  19. package/dist/core/entities/provisioner-token.d.ts.map +1 -1
  20. package/dist/core/entities/provisioner-token.js.map +1 -1
  21. package/dist/core/entities/{provisioned-runner.d.ts → runner-instance.d.ts} +7 -6
  22. package/dist/core/entities/runner-instance.d.ts.map +1 -0
  23. package/dist/core/entities/runner-instance.js +3 -0
  24. package/dist/core/entities/runner-instance.js.map +1 -0
  25. package/dist/core/entities/runner-session.d.ts +4 -2
  26. package/dist/core/entities/runner-session.d.ts.map +1 -1
  27. package/dist/core/entities/runner-session.js.map +1 -1
  28. package/dist/core/ephemeral-registration-tokens.d.ts +5 -5
  29. package/dist/core/ephemeral-registration-tokens.d.ts.map +1 -1
  30. package/dist/core/ephemeral-registration-tokens.js +12 -12
  31. package/dist/core/ephemeral-registration-tokens.js.map +1 -1
  32. package/dist/core/errors.d.ts +16 -4
  33. package/dist/core/errors.d.ts.map +1 -1
  34. package/dist/core/errors.js +22 -4
  35. package/dist/core/errors.js.map +1 -1
  36. package/dist/core/index.d.ts +9 -5
  37. package/dist/core/index.d.ts.map +1 -1
  38. package/dist/core/index.js +6 -3
  39. package/dist/core/index.js.map +1 -1
  40. package/dist/core/job-executions.d.ts +2 -0
  41. package/dist/core/job-executions.d.ts.map +1 -1
  42. package/dist/core/job-executions.js +1 -2
  43. package/dist/core/job-executions.js.map +1 -1
  44. package/dist/core/maintenance.d.ts +1 -1
  45. package/dist/core/maintenance.d.ts.map +1 -1
  46. package/dist/core/maintenance.js +5 -5
  47. package/dist/core/maintenance.js.map +1 -1
  48. package/dist/core/provisioner-capability-snapshots.d.ts +5 -0
  49. package/dist/core/provisioner-capability-snapshots.d.ts.map +1 -0
  50. package/dist/core/provisioner-capability-snapshots.js +10 -0
  51. package/dist/core/provisioner-capability-snapshots.js.map +1 -0
  52. package/dist/core/provisioner-tokens.d.ts +10 -0
  53. package/dist/core/provisioner-tokens.d.ts.map +1 -1
  54. package/dist/core/provisioner-tokens.js +23 -1
  55. package/dist/core/provisioner-tokens.js.map +1 -1
  56. package/dist/core/rate-limit.d.ts.map +1 -1
  57. package/dist/core/rate-limit.js +2 -7
  58. package/dist/core/rate-limit.js.map +1 -1
  59. package/dist/core/runner-activation.d.ts +13 -0
  60. package/dist/core/runner-activation.d.ts.map +1 -0
  61. package/dist/core/runner-activation.js +36 -0
  62. package/dist/core/runner-activation.js.map +1 -0
  63. package/dist/core/runner-assignments.d.ts +6 -0
  64. package/dist/core/runner-assignments.d.ts.map +1 -0
  65. package/dist/core/runner-assignments.js +6 -0
  66. package/dist/core/runner-assignments.js.map +1 -0
  67. package/dist/core/runner-control-sessions.d.ts +46 -0
  68. package/dist/core/runner-control-sessions.d.ts.map +1 -0
  69. package/dist/core/runner-control-sessions.js +121 -0
  70. package/dist/core/runner-control-sessions.js.map +1 -0
  71. package/dist/core/runner-instances.d.ts +72 -0
  72. package/dist/core/runner-instances.d.ts.map +1 -0
  73. package/dist/core/runner-instances.js +165 -0
  74. package/dist/core/runner-instances.js.map +1 -0
  75. package/dist/core/runner-sessions.d.ts +8 -2
  76. package/dist/core/runner-sessions.d.ts.map +1 -1
  77. package/dist/core/runner-sessions.js +8 -5
  78. package/dist/core/runner-sessions.js.map +1 -1
  79. package/dist/db/db.d.ts +2698 -1054
  80. package/dist/db/db.d.ts.map +1 -1
  81. package/dist/db/db.js +9 -2
  82. package/dist/db/db.js.map +1 -1
  83. package/dist/db/ephemeral-registration-tokens.d.ts +2 -2
  84. package/dist/db/ephemeral-registration-tokens.d.ts.map +1 -1
  85. package/dist/db/ephemeral-registration-tokens.js +21 -21
  86. package/dist/db/ephemeral-registration-tokens.js.map +1 -1
  87. package/dist/db/index.d.ts +7 -4
  88. package/dist/db/index.d.ts.map +1 -1
  89. package/dist/db/index.js +5 -2
  90. package/dist/db/index.js.map +1 -1
  91. package/dist/db/job-executions.d.ts +6 -6
  92. package/dist/db/job-executions.d.ts.map +1 -1
  93. package/dist/db/job-executions.js +20 -19
  94. package/dist/db/job-executions.js.map +1 -1
  95. package/dist/db/provisioner-capability-snapshots.d.ts +21 -0
  96. package/dist/db/provisioner-capability-snapshots.d.ts.map +1 -0
  97. package/dist/db/provisioner-capability-snapshots.js +57 -0
  98. package/dist/db/provisioner-capability-snapshots.js.map +1 -0
  99. package/dist/db/provisioner-tokens.d.ts +7 -2
  100. package/dist/db/provisioner-tokens.d.ts.map +1 -1
  101. package/dist/db/provisioner-tokens.js +59 -10
  102. package/dist/db/provisioner-tokens.js.map +1 -1
  103. package/dist/db/reservations.d.ts +18 -0
  104. package/dist/db/reservations.d.ts.map +1 -1
  105. package/dist/db/reservations.js +88 -1
  106. package/dist/db/reservations.js.map +1 -1
  107. package/dist/db/runner-assignments.d.ts +7 -0
  108. package/dist/db/runner-assignments.d.ts.map +1 -0
  109. package/dist/db/runner-assignments.js +55 -0
  110. package/dist/db/runner-assignments.js.map +1 -0
  111. package/dist/db/runner-instances.d.ts +84 -0
  112. package/dist/db/runner-instances.d.ts.map +1 -0
  113. package/dist/db/runner-instances.js +497 -0
  114. package/dist/db/runner-instances.js.map +1 -0
  115. package/dist/db/runner-sessions.d.ts +5 -0
  116. package/dist/db/runner-sessions.d.ts.map +1 -1
  117. package/dist/db/runner-sessions.js +48 -2
  118. package/dist/db/runner-sessions.js.map +1 -1
  119. package/dist/db/schema/ephemeral-registration-tokens.d.ts +2 -2
  120. package/dist/db/schema/ephemeral-registration-tokens.js +3 -3
  121. package/dist/db/schema/ephemeral-registration-tokens.js.map +1 -1
  122. package/dist/db/schema/provisioner-capability-snapshots.d.ts +207 -0
  123. package/dist/db/schema/provisioner-capability-snapshots.d.ts.map +1 -0
  124. package/dist/db/schema/provisioner-capability-snapshots.js +38 -0
  125. package/dist/db/schema/provisioner-capability-snapshots.js.map +1 -0
  126. package/dist/db/schema/provisioner-tokens.d.ts +19 -1
  127. package/dist/db/schema/provisioner-tokens.d.ts.map +1 -1
  128. package/dist/db/schema/provisioner-tokens.js +29 -3
  129. package/dist/db/schema/provisioner-tokens.js.map +1 -1
  130. package/dist/db/schema/runner-activation-tokens.d.ts +161 -0
  131. package/dist/db/schema/runner-activation-tokens.d.ts.map +1 -0
  132. package/dist/db/schema/runner-activation-tokens.js +27 -0
  133. package/dist/db/schema/runner-activation-tokens.js.map +1 -0
  134. package/dist/db/schema/runner-control-sessions.d.ts +338 -0
  135. package/dist/db/schema/runner-control-sessions.d.ts.map +1 -0
  136. package/dist/db/schema/runner-control-sessions.js +52 -0
  137. package/dist/db/schema/runner-control-sessions.js.map +1 -0
  138. package/dist/db/schema/{provisioned-runners.d.ts → runner-instances.d.ts} +105 -34
  139. package/dist/db/schema/runner-instances.d.ts.map +1 -0
  140. package/dist/db/schema/{provisioned-runners.js → runner-instances.js} +23 -14
  141. package/dist/db/schema/runner-instances.js.map +1 -0
  142. package/dist/db/schema/runner-sessions.d.ts +39 -5
  143. package/dist/db/schema/runner-sessions.d.ts.map +1 -1
  144. package/dist/db/schema/runner-sessions.js +13 -6
  145. package/dist/db/schema/runner-sessions.js.map +1 -1
  146. package/dist/db/schema/running-job-executions.d.ts +2 -2
  147. package/dist/db/schema/running-job-executions.js +4 -4
  148. package/dist/db/schema/running-job-executions.js.map +1 -1
  149. package/dist/index.d.ts +6 -2
  150. package/dist/index.d.ts.map +1 -1
  151. package/dist/index.js +45 -39
  152. package/dist/index.js.map +1 -1
  153. package/dist/installation-provisioning.d.ts +14 -0
  154. package/dist/installation-provisioning.d.ts.map +1 -0
  155. package/dist/installation-provisioning.js +7 -0
  156. package/dist/installation-provisioning.js.map +1 -0
  157. package/dist/metrics/index.d.ts +1 -1
  158. package/dist/metrics/index.d.ts.map +1 -1
  159. package/dist/metrics/index.js +1 -1
  160. package/dist/metrics/index.js.map +1 -1
  161. package/dist/metrics/instance.d.ts +11 -7
  162. package/dist/metrics/instance.d.ts.map +1 -1
  163. package/dist/metrics/instance.js +13 -7
  164. package/dist/metrics/instance.js.map +1 -1
  165. package/dist/presentation/auth/index.d.ts +1 -0
  166. package/dist/presentation/auth/index.d.ts.map +1 -1
  167. package/dist/presentation/auth/index.js +1 -0
  168. package/dist/presentation/auth/index.js.map +1 -1
  169. package/dist/presentation/auth/provisioner-token-auth.d.ts.map +1 -1
  170. package/dist/presentation/auth/provisioner-token-auth.js +5 -1
  171. package/dist/presentation/auth/provisioner-token-auth.js.map +1 -1
  172. package/dist/presentation/auth/runner-control-session-auth.d.ts +4 -0
  173. package/dist/presentation/auth/runner-control-session-auth.d.ts.map +1 -0
  174. package/dist/presentation/auth/runner-control-session-auth.js +29 -0
  175. package/dist/presentation/auth/runner-control-session-auth.js.map +1 -0
  176. package/dist/presentation/auth/runner-registration-token-auth.d.ts +5 -1
  177. package/dist/presentation/auth/runner-registration-token-auth.d.ts.map +1 -1
  178. package/dist/presentation/auth/runner-registration-token-auth.js +21 -1
  179. package/dist/presentation/auth/runner-registration-token-auth.js.map +1 -1
  180. package/dist/presentation/dto/index.d.ts +1 -2
  181. package/dist/presentation/dto/index.d.ts.map +1 -1
  182. package/dist/presentation/dto/index.js +1 -2
  183. package/dist/presentation/dto/index.js.map +1 -1
  184. package/dist/presentation/dto/poll-demand.d.ts.map +1 -1
  185. package/dist/presentation/dto/poll-demand.js +7 -1
  186. package/dist/presentation/dto/poll-demand.js.map +1 -1
  187. package/dist/presentation/dto/provisioner-token.d.ts +1 -0
  188. package/dist/presentation/dto/provisioner-token.d.ts.map +1 -1
  189. package/dist/presentation/dto/provisioner-token.js +5 -1
  190. package/dist/presentation/dto/provisioner-token.js.map +1 -1
  191. package/dist/presentation/dto/{provisioned-runners.d.ts → runner-instances.d.ts} +9 -9
  192. package/dist/presentation/dto/runner-instances.d.ts.map +1 -0
  193. package/dist/presentation/dto/{provisioned-runners.js → runner-instances.js} +6 -6
  194. package/dist/presentation/dto/runner-instances.js.map +1 -0
  195. package/dist/presentation/index.d.ts +2 -2
  196. package/dist/presentation/index.d.ts.map +1 -1
  197. package/dist/presentation/index.js +2 -2
  198. package/dist/presentation/index.js.map +1 -1
  199. package/dist/presentation/inter-module.d.ts +5 -0
  200. package/dist/presentation/inter-module.d.ts.map +1 -0
  201. package/dist/presentation/inter-module.js +43 -0
  202. package/dist/presentation/inter-module.js.map +1 -0
  203. package/dist/presentation/routes/assign-runner-instances.d.ts +2 -0
  204. package/dist/presentation/routes/assign-runner-instances.d.ts.map +1 -0
  205. package/dist/presentation/routes/assign-runner-instances.js +40 -0
  206. package/dist/presentation/routes/assign-runner-instances.js.map +1 -0
  207. package/dist/presentation/routes/get-provisioner-me.d.ts.map +1 -1
  208. package/dist/presentation/routes/get-provisioner-me.js +5 -1
  209. package/dist/presentation/routes/get-provisioner-me.js.map +1 -1
  210. package/dist/presentation/routes/heartbeat.d.ts +2 -1
  211. package/dist/presentation/routes/heartbeat.d.ts.map +1 -1
  212. package/dist/presentation/routes/heartbeat.js +60 -50
  213. package/dist/presentation/routes/heartbeat.js.map +1 -1
  214. package/dist/presentation/routes/index.d.ts +3 -1
  215. package/dist/presentation/routes/index.d.ts.map +1 -1
  216. package/dist/presentation/routes/index.js +80 -51
  217. package/dist/presentation/routes/index.js.map +1 -1
  218. package/dist/presentation/routes/poll-demand.d.ts +2 -0
  219. package/dist/presentation/routes/poll-demand.d.ts.map +1 -1
  220. package/dist/presentation/routes/poll-demand.js +86 -45
  221. package/dist/presentation/routes/poll-demand.js.map +1 -1
  222. package/dist/presentation/routes/reconcile-runner-instances.d.ts +2 -0
  223. package/dist/presentation/routes/reconcile-runner-instances.d.ts.map +1 -0
  224. package/dist/presentation/routes/reconcile-runner-instances.js +27 -0
  225. package/dist/presentation/routes/reconcile-runner-instances.js.map +1 -0
  226. package/dist/presentation/routes/register.d.ts +2 -1
  227. package/dist/presentation/routes/register.d.ts.map +1 -1
  228. package/dist/presentation/routes/register.js +55 -52
  229. package/dist/presentation/routes/register.js.map +1 -1
  230. package/dist/presentation/routes/report-runner-instances.d.ts +2 -0
  231. package/dist/presentation/routes/report-runner-instances.d.ts.map +1 -0
  232. package/dist/presentation/routes/report-runner-instances.js +37 -0
  233. package/dist/presentation/routes/report-runner-instances.js.map +1 -0
  234. package/dist/presentation/routes/request-job.d.ts +2 -1
  235. package/dist/presentation/routes/request-job.d.ts.map +1 -1
  236. package/dist/presentation/routes/request-job.js +39 -36
  237. package/dist/presentation/routes/request-job.js.map +1 -1
  238. package/dist/presentation/routes/runner-enrollment.d.ts +8 -0
  239. package/dist/presentation/routes/runner-enrollment.d.ts.map +1 -0
  240. package/dist/presentation/routes/runner-enrollment.js +212 -0
  241. package/dist/presentation/routes/runner-enrollment.js.map +1 -0
  242. package/dist/temporal/activities/index.d.ts +2 -2
  243. package/dist/temporal/activities/index.d.ts.map +1 -1
  244. package/dist/temporal/activities/index.js +2 -2
  245. package/dist/temporal/activities/index.js.map +1 -1
  246. package/dist/temporal/activities/maintenance-activities.d.ts +1 -1
  247. package/dist/temporal/activities/maintenance-activities.d.ts.map +1 -1
  248. package/dist/temporal/activities/maintenance-activities.js +3 -3
  249. package/dist/temporal/activities/maintenance-activities.js.map +1 -1
  250. package/dist/temporal/workflows/index.bundle.js +3 -3
  251. package/dist/temporal/workflows/stuck-job-detector.js +2 -2
  252. package/dist/temporal/workflows/stuck-job-detector.js.map +1 -1
  253. package/dist/tsconfig.test.tsbuildinfo +1 -1
  254. package/drizzle/0000_initial.sql +91 -24
  255. package/drizzle/meta/0000_snapshot.json +392 -63
  256. package/package.json +21 -16
  257. package/src/config.test.ts +0 -26
  258. package/src/config.ts +48 -7
  259. package/src/core/demand.test.ts +29 -29
  260. package/src/core/demand.ts +22 -22
  261. package/src/core/entities/ephemeral-registration-token.ts +1 -1
  262. package/src/core/entities/provisioner-capability-snapshot.ts +12 -0
  263. package/src/core/entities/provisioner-token.ts +8 -2
  264. package/src/core/entities/{provisioned-runner.ts → runner-instance.ts} +6 -5
  265. package/src/core/entities/runner-session.ts +4 -2
  266. package/src/core/ephemeral-registration-tokens.test.ts +11 -11
  267. package/src/core/ephemeral-registration-tokens.ts +18 -20
  268. package/src/core/errors.ts +23 -4
  269. package/src/core/index.ts +37 -22
  270. package/src/core/job-executions.ts +3 -2
  271. package/src/core/maintenance.test.ts +13 -17
  272. package/src/core/maintenance.ts +5 -5
  273. package/src/core/provisioner-capability-snapshots.test.ts +35 -0
  274. package/src/core/provisioner-capability-snapshots.ts +12 -0
  275. package/src/core/provisioner-tokens.test.ts +20 -0
  276. package/src/core/provisioner-tokens.ts +33 -0
  277. package/src/core/rate-limit.test.ts +11 -27
  278. package/src/core/rate-limit.ts +3 -11
  279. package/src/core/runner-activation.ts +72 -0
  280. package/src/core/runner-assignments.ts +9 -0
  281. package/src/core/runner-control-sessions.ts +190 -0
  282. package/src/core/{provisioned-runners.test.ts → runner-instances.test.ts} +24 -24
  283. package/src/core/runner-instances.ts +301 -0
  284. package/src/core/runner-sessions.test.ts +112 -22
  285. package/src/core/runner-sessions.ts +25 -14
  286. package/src/db/db.ts +9 -2
  287. package/src/db/ephemeral-registration-tokens.test.ts +9 -9
  288. package/src/db/ephemeral-registration-tokens.ts +26 -26
  289. package/src/db/index.ts +30 -21
  290. package/src/db/job-executions.test.ts +13 -11
  291. package/src/db/job-executions.ts +33 -27
  292. package/src/db/provisioner-capability-snapshots.test.ts +175 -0
  293. package/src/db/provisioner-capability-snapshots.ts +130 -0
  294. package/src/db/provisioner-tokens.test.ts +139 -2
  295. package/src/db/provisioner-tokens.ts +123 -15
  296. package/src/db/reservations.test.ts +49 -0
  297. package/src/db/reservations.ts +146 -1
  298. package/src/db/runner-assignments.test.ts +163 -0
  299. package/src/db/runner-assignments.ts +115 -0
  300. package/src/db/{provisioned-runners.test.ts → runner-instances.test.ts} +442 -353
  301. package/src/db/runner-instances.ts +922 -0
  302. package/src/db/runner-sessions.test.ts +19 -6
  303. package/src/db/runner-sessions.ts +78 -2
  304. package/src/db/schema/ephemeral-registration-tokens.ts +4 -4
  305. package/src/db/schema/provisioner-capability-snapshots.ts +46 -0
  306. package/src/db/schema/provisioner-tokens.ts +33 -2
  307. package/src/db/schema/runner-activation-tokens.ts +22 -0
  308. package/src/db/schema/runner-control-sessions.ts +46 -0
  309. package/src/db/schema/{provisioned-runners.ts → runner-instances.ts} +28 -27
  310. package/src/db/schema/runner-sessions.ts +11 -7
  311. package/src/db/schema/running-job-executions.ts +5 -5
  312. package/src/index.test.ts +26 -0
  313. package/src/index.ts +38 -27
  314. package/src/installation-provisioning.ts +14 -0
  315. package/src/metrics/index.ts +5 -5
  316. package/src/metrics/instance.ts +25 -14
  317. package/src/presentation/auth/index.ts +4 -0
  318. package/src/presentation/auth/provisioner-token-auth.ts +8 -4
  319. package/src/presentation/auth/runner-control-session-auth.ts +31 -0
  320. package/src/presentation/auth/runner-registration-token-auth.ts +39 -3
  321. package/src/presentation/dto/index.ts +4 -8
  322. package/src/presentation/dto/poll-demand.ts +3 -1
  323. package/src/presentation/dto/provisioner-token.ts +5 -0
  324. package/src/presentation/dto/{provisioned-runners.ts → runner-instances.ts} +13 -15
  325. package/src/presentation/index.ts +2 -1
  326. package/src/presentation/inter-module.test.ts +15 -0
  327. package/src/presentation/inter-module.ts +53 -0
  328. package/src/presentation/routes/assign-runner-instances.ts +49 -0
  329. package/src/presentation/routes/get-provisioner-me.ts +3 -4
  330. package/src/presentation/routes/heartbeat.test.ts +4 -3
  331. package/src/presentation/routes/heartbeat.ts +67 -64
  332. package/src/presentation/routes/index.ts +91 -44
  333. package/src/presentation/routes/list-active-runners.test.ts +23 -23
  334. package/src/presentation/routes/manual-registration-tokens.test.ts +4 -3
  335. package/src/presentation/routes/poll-demand-release.test.ts +4 -4
  336. package/src/presentation/routes/poll-demand.test.ts +161 -22
  337. package/src/presentation/routes/poll-demand.ts +105 -45
  338. package/src/presentation/routes/provisioner-me.test.ts +37 -3
  339. package/src/presentation/routes/{reconcile-provisioned-runners.test.ts → reconcile-runner-instances.test.ts} +66 -61
  340. package/src/presentation/routes/reconcile-runner-instances.ts +30 -0
  341. package/src/presentation/routes/register.test.ts +9 -5
  342. package/src/presentation/routes/register.ts +61 -57
  343. package/src/presentation/routes/{report-provisioned-runners.test.ts → report-runner-instances.test.ts} +28 -28
  344. package/src/presentation/routes/{report-provisioned-runners.ts → report-runner-instances.ts} +14 -14
  345. package/src/presentation/routes/request-job.test.ts +5 -3
  346. package/src/presentation/routes/request-job.ts +41 -37
  347. package/src/presentation/routes/runner-enrollment.test.ts +319 -0
  348. package/src/presentation/routes/runner-enrollment.ts +196 -0
  349. package/src/temporal/activities/index.ts +2 -2
  350. package/src/temporal/activities/maintenance-activities.test.ts +7 -7
  351. package/src/temporal/activities/maintenance-activities.ts +3 -3
  352. package/src/temporal/workflows/stuck-job-detector.test.ts +3 -3
  353. package/src/temporal/workflows/stuck-job-detector.ts +2 -2
  354. package/test/env.ts +1 -3
  355. package/test/factories/ephemeral-registration-token.ts +2 -2
  356. package/test/factories/provisioner-token.ts +3 -1
  357. package/test/factories/runner-instance.ts +57 -0
  358. package/test/factories/runner-session.ts +3 -1
  359. package/test/fixtures/auth-inter-module.ts +30 -0
  360. package/test/globalSetup.ts +4 -1
  361. package/test/index.ts +2 -1
  362. package/tsconfig.build.tsbuildinfo +1 -1
  363. package/dist/core/entities/provisioned-runner.d.ts.map +0 -1
  364. package/dist/core/entities/provisioned-runner.js +0 -3
  365. package/dist/core/entities/provisioned-runner.js.map +0 -1
  366. package/dist/core/provisioned-runners.d.ts +0 -67
  367. package/dist/core/provisioned-runners.d.ts.map +0 -1
  368. package/dist/core/provisioned-runners.js +0 -162
  369. package/dist/core/provisioned-runners.js.map +0 -1
  370. package/dist/db/provisioned-runners.d.ts +0 -79
  371. package/dist/db/provisioned-runners.d.ts.map +0 -1
  372. package/dist/db/provisioned-runners.js +0 -466
  373. package/dist/db/provisioned-runners.js.map +0 -1
  374. package/dist/db/schema/provisioned-runners.d.ts.map +0 -1
  375. package/dist/db/schema/provisioned-runners.js.map +0 -1
  376. package/dist/presentation/dto/mint-registration-tokens.d.ts +0 -5
  377. package/dist/presentation/dto/mint-registration-tokens.d.ts.map +0 -1
  378. package/dist/presentation/dto/mint-registration-tokens.js +0 -19
  379. package/dist/presentation/dto/mint-registration-tokens.js.map +0 -1
  380. package/dist/presentation/dto/provisioned-runners.d.ts.map +0 -1
  381. package/dist/presentation/dto/provisioned-runners.js.map +0 -1
  382. package/dist/presentation/routes/mint-registration-tokens.d.ts +0 -2
  383. package/dist/presentation/routes/mint-registration-tokens.d.ts.map +0 -1
  384. package/dist/presentation/routes/mint-registration-tokens.js +0 -74
  385. package/dist/presentation/routes/mint-registration-tokens.js.map +0 -1
  386. package/dist/presentation/routes/reconcile-provisioned-runners.d.ts +0 -2
  387. package/dist/presentation/routes/reconcile-provisioned-runners.d.ts.map +0 -1
  388. package/dist/presentation/routes/reconcile-provisioned-runners.js +0 -27
  389. package/dist/presentation/routes/reconcile-provisioned-runners.js.map +0 -1
  390. package/dist/presentation/routes/report-provisioned-runners.d.ts +0 -2
  391. package/dist/presentation/routes/report-provisioned-runners.d.ts.map +0 -1
  392. package/dist/presentation/routes/report-provisioned-runners.js +0 -37
  393. package/dist/presentation/routes/report-provisioned-runners.js.map +0 -1
  394. package/src/core/provisioned-runners.ts +0 -301
  395. package/src/db/provisioned-runners.ts +0 -886
  396. package/src/presentation/dto/mint-registration-tokens.ts +0 -35
  397. package/src/presentation/routes/mint-registration-tokens.test.ts +0 -453
  398. package/src/presentation/routes/mint-registration-tokens.ts +0 -82
  399. package/src/presentation/routes/reconcile-provisioned-runners.ts +0 -30
  400. package/test/factories/provisioned-runner.ts +0 -78
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/presentation/routes/register.ts"],"sourcesContent":["import {registerRunnerBodySchema, registerRunnerResponseSchema} from '@shipfox/api-runners-dto';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {\n EmptyRunnerLabelsError,\n RegistrationTokenConsumedError,\n RegistrationTokenExpiredError,\n} from '#core/errors.js';\nimport {registerRunnerSession} from '#core/runner-sessions.js';\nimport {getRunnerContext} from '#presentation/auth/index.js';\nimport {createEphemeralRegisterRateLimitPreHandler} from './rate-limit.js';\n\nexport const registerRoute = defineRoute({\n method: 'POST',\n path: '/register',\n description: 'Exchange a runner registration token for a runner session token',\n schema: {\n body: registerRunnerBodySchema,\n response: {\n 200: registerRunnerResponseSchema,\n },\n },\n preHandler: createEphemeralRegisterRateLimitPreHandler(),\n errorHandler: (error, request) => {\n if (error instanceof EmptyRunnerLabelsError) {\n throw new ClientError(error.message, 'empty-runner-labels', {status: 400});\n }\n if (error instanceof RegistrationTokenConsumedError) {\n const runner = getRunnerContext(request);\n if (runner.kind === 'ephemeral') {\n request.log.warn(\n {\n ephemeralTokenId: error.ephemeralTokenId,\n provisionerId: runner.provisionerId,\n },\n 'Ephemeral registration token reuse rejected',\n );\n }\n throw new ClientError(\n 'Registration token has already been consumed',\n 'registration-token-consumed',\n {\n status: 409,\n },\n );\n }\n if (error instanceof RegistrationTokenExpiredError) {\n throw new ClientError('Registration token has expired', 'registration-token-expired', {\n status: 401,\n });\n }\n throw error;\n },\n handler: async (request) => {\n const runner = getRunnerContext(request);\n const result = await registerRunnerSession({\n credential:\n runner.kind === 'manual'\n ? {\n kind: 'manual',\n registrationTokenId: runner.registrationTokenId,\n workspaceId: runner.workspaceId,\n }\n : runner,\n labels: request.body.labels,\n toolCapabilities: request.body.capabilities ?? null,\n });\n\n return {\n session_token: result.sessionToken,\n session_id: result.session.id,\n mode: result.mode,\n max_claims: result.maxClaims,\n };\n },\n});\n"],"names":["registerRunnerBodySchema","registerRunnerResponseSchema","ClientError","defineRoute","EmptyRunnerLabelsError","RegistrationTokenConsumedError","RegistrationTokenExpiredError","registerRunnerSession","getRunnerContext","createEphemeralRegisterRateLimitPreHandler","registerRoute","method","path","description","schema","body","response","preHandler","errorHandler","error","request","message","status","runner","kind","log","warn","ephemeralTokenId","provisionerId","handler","result","credential","registrationTokenId","workspaceId","labels","toolCapabilities","capabilities","session_token","sessionToken","session_id","session","id","mode","max_claims","maxClaims"],"mappings":"AAAA,SAAQA,wBAAwB,EAAEC,4BAA4B,QAAO,2BAA2B;AAChG,SAAQC,WAAW,EAAEC,WAAW,QAAO,wBAAwB;AAC/D,SACEC,sBAAsB,EACtBC,8BAA8B,EAC9BC,6BAA6B,QACxB,kBAAkB;AACzB,SAAQC,qBAAqB,QAAO,2BAA2B;AAC/D,SAAQC,gBAAgB,QAAO,8BAA8B;AAC7D,SAAQC,0CAA0C,QAAO,kBAAkB;AAE3E,OAAO,MAAMC,gBAAgBP,YAAY;IACvCQ,QAAQ;IACRC,MAAM;IACNC,aAAa;IACbC,QAAQ;QACNC,MAAMf;QACNgB,UAAU;YACR,KAAKf;QACP;IACF;IACAgB,YAAYR;IACZS,cAAc,CAACC,OAAOC;QACpB,IAAID,iBAAiBf,wBAAwB;YAC3C,MAAM,IAAIF,YAAYiB,MAAME,OAAO,EAAE,uBAAuB;gBAACC,QAAQ;YAAG;QAC1E;QACA,IAAIH,iBAAiBd,gCAAgC;YACnD,MAAMkB,SAASf,iBAAiBY;YAChC,IAAIG,OAAOC,IAAI,KAAK,aAAa;gBAC/BJ,QAAQK,GAAG,CAACC,IAAI,CACd;oBACEC,kBAAkBR,MAAMQ,gBAAgB;oBACxCC,eAAeL,OAAOK,aAAa;gBACrC,GACA;YAEJ;YACA,MAAM,IAAI1B,YACR,gDACA,+BACA;gBACEoB,QAAQ;YACV;QAEJ;QACA,IAAIH,iBAAiBb,+BAA+B;YAClD,MAAM,IAAIJ,YAAY,kCAAkC,8BAA8B;gBACpFoB,QAAQ;YACV;QACF;QACA,MAAMH;IACR;IACAU,SAAS,OAAOT;QACd,MAAMG,SAASf,iBAAiBY;QAChC,MAAMU,SAAS,MAAMvB,sBAAsB;YACzCwB,YACER,OAAOC,IAAI,KAAK,WACZ;gBACEA,MAAM;gBACNQ,qBAAqBT,OAAOS,mBAAmB;gBAC/CC,aAAaV,OAAOU,WAAW;YACjC,IACAV;YACNW,QAAQd,QAAQL,IAAI,CAACmB,MAAM;YAC3BC,kBAAkBf,QAAQL,IAAI,CAACqB,YAAY,IAAI;QACjD;QAEA,OAAO;YACLC,eAAeP,OAAOQ,YAAY;YAClCC,YAAYT,OAAOU,OAAO,CAACC,EAAE;YAC7BC,MAAMZ,OAAOY,IAAI;YACjBC,YAAYb,OAAOc,SAAS;QAC9B;IACF;AACF,GAAG"}
1
+ {"version":3,"sources":["../../../src/presentation/routes/register.ts"],"sourcesContent":["import type {AuthInterModuleClient} from '@shipfox/api-auth-dto/inter-module';\nimport {registerRunnerBodySchema, registerRunnerResponseSchema} from '@shipfox/api-runners-dto';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {\n EmptyRunnerLabelsError,\n RegistrationTokenConsumedError,\n RegistrationTokenExpiredError,\n} from '#core/errors.js';\nimport {registerRunnerSession} from '#core/runner-sessions.js';\nimport {getRunnerContext} from '#presentation/auth/index.js';\nimport {createEphemeralRegisterRateLimitPreHandler} from './rate-limit.js';\n\nexport function createRegisterRoute(auth: AuthInterModuleClient) {\n return defineRoute({\n method: 'POST',\n path: '/register',\n description: 'Exchange a runner registration token for a runner session token',\n schema: {\n body: registerRunnerBodySchema,\n response: {\n 200: registerRunnerResponseSchema,\n },\n },\n preHandler: createEphemeralRegisterRateLimitPreHandler(),\n errorHandler: (error, request) => {\n if (error instanceof EmptyRunnerLabelsError) {\n throw new ClientError(error.message, 'empty-runner-labels', {status: 400});\n }\n if (error instanceof RegistrationTokenConsumedError) {\n const runner = getRunnerContext(request);\n if (runner.kind === 'ephemeral') {\n request.log.warn(\n {\n ephemeralTokenId: error.ephemeralTokenId,\n provisionerId: runner.provisionerId,\n },\n 'Ephemeral registration token reuse rejected',\n );\n }\n throw new ClientError(\n 'Registration token has already been consumed',\n 'registration-token-consumed',\n {\n status: 409,\n },\n );\n }\n if (error instanceof RegistrationTokenExpiredError) {\n throw new ClientError('Registration token has expired', 'registration-token-expired', {\n status: 401,\n });\n }\n throw error;\n },\n handler: async (request) => {\n const runner = getRunnerContext(request);\n const result = await registerRunnerSession({\n auth,\n credential:\n runner.kind === 'manual'\n ? {\n kind: 'manual',\n registrationTokenId: runner.registrationTokenId,\n workspaceId: runner.workspaceId,\n }\n : runner,\n labels: request.body.labels,\n toolCapabilities: request.body.capabilities ?? null,\n });\n\n return {\n session_token: result.sessionToken,\n session_id: result.session.id,\n mode: result.mode,\n max_claims: result.maxClaims,\n };\n },\n });\n}\n"],"names":["registerRunnerBodySchema","registerRunnerResponseSchema","ClientError","defineRoute","EmptyRunnerLabelsError","RegistrationTokenConsumedError","RegistrationTokenExpiredError","registerRunnerSession","getRunnerContext","createEphemeralRegisterRateLimitPreHandler","createRegisterRoute","auth","method","path","description","schema","body","response","preHandler","errorHandler","error","request","message","status","runner","kind","log","warn","ephemeralTokenId","provisionerId","handler","result","credential","registrationTokenId","workspaceId","labels","toolCapabilities","capabilities","session_token","sessionToken","session_id","session","id","mode","max_claims","maxClaims"],"mappings":"AACA,SAAQA,wBAAwB,EAAEC,4BAA4B,QAAO,2BAA2B;AAChG,SAAQC,WAAW,EAAEC,WAAW,QAAO,wBAAwB;AAC/D,SACEC,sBAAsB,EACtBC,8BAA8B,EAC9BC,6BAA6B,QACxB,kBAAkB;AACzB,SAAQC,qBAAqB,QAAO,2BAA2B;AAC/D,SAAQC,gBAAgB,QAAO,8BAA8B;AAC7D,SAAQC,0CAA0C,QAAO,kBAAkB;AAE3E,OAAO,SAASC,oBAAoBC,IAA2B;IAC7D,OAAOR,YAAY;QACjBS,QAAQ;QACRC,MAAM;QACNC,aAAa;QACbC,QAAQ;YACNC,MAAMhB;YACNiB,UAAU;gBACR,KAAKhB;YACP;QACF;QACAiB,YAAYT;QACZU,cAAc,CAACC,OAAOC;YACpB,IAAID,iBAAiBhB,wBAAwB;gBAC3C,MAAM,IAAIF,YAAYkB,MAAME,OAAO,EAAE,uBAAuB;oBAACC,QAAQ;gBAAG;YAC1E;YACA,IAAIH,iBAAiBf,gCAAgC;gBACnD,MAAMmB,SAAShB,iBAAiBa;gBAChC,IAAIG,OAAOC,IAAI,KAAK,aAAa;oBAC/BJ,QAAQK,GAAG,CAACC,IAAI,CACd;wBACEC,kBAAkBR,MAAMQ,gBAAgB;wBACxCC,eAAeL,OAAOK,aAAa;oBACrC,GACA;gBAEJ;gBACA,MAAM,IAAI3B,YACR,gDACA,+BACA;oBACEqB,QAAQ;gBACV;YAEJ;YACA,IAAIH,iBAAiBd,+BAA+B;gBAClD,MAAM,IAAIJ,YAAY,kCAAkC,8BAA8B;oBACpFqB,QAAQ;gBACV;YACF;YACA,MAAMH;QACR;QACAU,SAAS,OAAOT;YACd,MAAMG,SAAShB,iBAAiBa;YAChC,MAAMU,SAAS,MAAMxB,sBAAsB;gBACzCI;gBACAqB,YACER,OAAOC,IAAI,KAAK,WACZ;oBACEA,MAAM;oBACNQ,qBAAqBT,OAAOS,mBAAmB;oBAC/CC,aAAaV,OAAOU,WAAW;gBACjC,IACAV;gBACNW,QAAQd,QAAQL,IAAI,CAACmB,MAAM;gBAC3BC,kBAAkBf,QAAQL,IAAI,CAACqB,YAAY,IAAI;YACjD;YAEA,OAAO;gBACLC,eAAeP,OAAOQ,YAAY;gBAClCC,YAAYT,OAAOU,OAAO,CAACC,EAAE;gBAC7BC,MAAMZ,OAAOY,IAAI;gBACjBC,YAAYb,OAAOc,SAAS;YAC9B;QACF;IACF;AACF"}
@@ -0,0 +1,2 @@
1
+ export declare const reportRunnerInstancesRoute: import("@shipfox/node-fastify").RouteDefinition;
2
+ //# sourceMappingURL=report-runner-instances.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-runner-instances.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/report-runner-instances.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,0BAA0B,iDA8BrC,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { requireProvisionerContext } from '@shipfox/api-auth-context';
2
+ import { reportRunnerInstancesBodySchema, reportRunnerInstancesResponseSchema } from '@shipfox/api-runners-dto';
3
+ import { defineRoute } from '@shipfox/node-fastify';
4
+ import { reportRunnerInstances } from '#core/index.js';
5
+ import { toReportRunnerInstancesResponseDto } from '#presentation/dto/index.js';
6
+ export const reportRunnerInstancesRoute = defineRoute({
7
+ method: 'POST',
8
+ path: '/runner-instances/report',
9
+ description: 'Report provisioned runner lifecycle state',
10
+ schema: {
11
+ body: reportRunnerInstancesBodySchema,
12
+ response: {
13
+ 200: reportRunnerInstancesResponseSchema
14
+ }
15
+ },
16
+ handler: async (request)=>{
17
+ const context = requireProvisionerContext(request);
18
+ const result = await reportRunnerInstances({
19
+ workspaceId: context.scope === 'workspace' ? context.workspaceId : null,
20
+ provisionerId: context.provisionerTokenId,
21
+ events: request.body.events.map((event)=>({
22
+ providerRunnerId: event.provider_runner_id,
23
+ reservationId: event.reservation_id ?? null,
24
+ templateKey: event.template_key ?? null,
25
+ labels: event.labels,
26
+ state: event.state,
27
+ reason: event.reason ?? null,
28
+ runnerSessionId: event.runner_session_id ?? null,
29
+ providerKind: event.provider_kind ?? null,
30
+ reportedAt: new Date(event.reported_at)
31
+ }))
32
+ });
33
+ return toReportRunnerInstancesResponseDto(result);
34
+ }
35
+ });
36
+
37
+ //# sourceMappingURL=report-runner-instances.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/presentation/routes/report-runner-instances.ts"],"sourcesContent":["import {requireProvisionerContext} from '@shipfox/api-auth-context';\nimport {\n reportRunnerInstancesBodySchema,\n reportRunnerInstancesResponseSchema,\n} from '@shipfox/api-runners-dto';\nimport {defineRoute} from '@shipfox/node-fastify';\nimport {reportRunnerInstances} from '#core/index.js';\nimport {toReportRunnerInstancesResponseDto} from '#presentation/dto/index.js';\n\nexport const reportRunnerInstancesRoute = defineRoute({\n method: 'POST',\n path: '/runner-instances/report',\n description: 'Report provisioned runner lifecycle state',\n schema: {\n body: reportRunnerInstancesBodySchema,\n response: {\n 200: reportRunnerInstancesResponseSchema,\n },\n },\n handler: async (request) => {\n const context = requireProvisionerContext(request);\n const result = await reportRunnerInstances({\n workspaceId: context.scope === 'workspace' ? context.workspaceId : null,\n provisionerId: context.provisionerTokenId,\n events: request.body.events.map((event) => ({\n providerRunnerId: event.provider_runner_id,\n reservationId: event.reservation_id ?? null,\n templateKey: event.template_key ?? null,\n labels: event.labels,\n state: event.state,\n reason: event.reason ?? null,\n runnerSessionId: event.runner_session_id ?? null,\n providerKind: event.provider_kind ?? null,\n reportedAt: new Date(event.reported_at),\n })),\n });\n\n return toReportRunnerInstancesResponseDto(result);\n },\n});\n"],"names":["requireProvisionerContext","reportRunnerInstancesBodySchema","reportRunnerInstancesResponseSchema","defineRoute","reportRunnerInstances","toReportRunnerInstancesResponseDto","reportRunnerInstancesRoute","method","path","description","schema","body","response","handler","request","context","result","workspaceId","scope","provisionerId","provisionerTokenId","events","map","event","providerRunnerId","provider_runner_id","reservationId","reservation_id","templateKey","template_key","labels","state","reason","runnerSessionId","runner_session_id","providerKind","provider_kind","reportedAt","Date","reported_at"],"mappings":"AAAA,SAAQA,yBAAyB,QAAO,4BAA4B;AACpE,SACEC,+BAA+B,EAC/BC,mCAAmC,QAC9B,2BAA2B;AAClC,SAAQC,WAAW,QAAO,wBAAwB;AAClD,SAAQC,qBAAqB,QAAO,iBAAiB;AACrD,SAAQC,kCAAkC,QAAO,6BAA6B;AAE9E,OAAO,MAAMC,6BAA6BH,YAAY;IACpDI,QAAQ;IACRC,MAAM;IACNC,aAAa;IACbC,QAAQ;QACNC,MAAMV;QACNW,UAAU;YACR,KAAKV;QACP;IACF;IACAW,SAAS,OAAOC;QACd,MAAMC,UAAUf,0BAA0Bc;QAC1C,MAAME,SAAS,MAAMZ,sBAAsB;YACzCa,aAAaF,QAAQG,KAAK,KAAK,cAAcH,QAAQE,WAAW,GAAG;YACnEE,eAAeJ,QAAQK,kBAAkB;YACzCC,QAAQP,QAAQH,IAAI,CAACU,MAAM,CAACC,GAAG,CAAC,CAACC,QAAW,CAAA;oBAC1CC,kBAAkBD,MAAME,kBAAkB;oBAC1CC,eAAeH,MAAMI,cAAc,IAAI;oBACvCC,aAAaL,MAAMM,YAAY,IAAI;oBACnCC,QAAQP,MAAMO,MAAM;oBACpBC,OAAOR,MAAMQ,KAAK;oBAClBC,QAAQT,MAAMS,MAAM,IAAI;oBACxBC,iBAAiBV,MAAMW,iBAAiB,IAAI;oBAC5CC,cAAcZ,MAAMa,aAAa,IAAI;oBACrCC,YAAY,IAAIC,KAAKf,MAAMgB,WAAW;gBACxC,CAAA;QACF;QAEA,OAAOlC,mCAAmCW;IAC5C;AACF,GAAG"}
@@ -1,2 +1,3 @@
1
- export declare const requestJobRoute: import("@shipfox/node-fastify").RouteDefinition;
1
+ import type { AuthInterModuleClient } from '@shipfox/api-auth-dto/inter-module';
2
+ export declare function createRequestJobRoute(auth: AuthInterModuleClient): import("@shipfox/node-fastify").RouteDefinition;
2
3
  //# sourceMappingURL=request-job.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"request-job.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/request-job.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,eAAe,iDAwC1B,CAAC"}
1
+ {"version":3,"file":"request-job.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/request-job.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,oCAAoC,CAAC;AAM9E,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,qBAAqB,mDA2ChE"}
@@ -3,43 +3,46 @@ import { claimedJobResponseSchema } from '@shipfox/api-runners-dto';
3
3
  import { ClientError, defineRoute } from '@shipfox/node-fastify';
4
4
  import { RunnerSessionExhaustedError } from '#core/errors.js';
5
5
  import { claimJobExecution } from '#core/job-executions.js';
6
- export const requestJobRoute = defineRoute({
7
- method: 'POST',
8
- path: '/request',
9
- description: 'Claim the next available job execution and receive its lease token',
10
- schema: {
11
- response: {
12
- 200: claimedJobResponseSchema
13
- }
14
- },
15
- errorHandler: (error)=>{
16
- if (error instanceof RunnerSessionExhaustedError) {
17
- throw new ClientError('Runner session claim limit exhausted', 'runner-session-exhausted', {
18
- status: 409
6
+ export function createRequestJobRoute(auth) {
7
+ return defineRoute({
8
+ method: 'POST',
9
+ path: '/request',
10
+ description: 'Claim the next available job execution and receive its lease token',
11
+ schema: {
12
+ response: {
13
+ 200: claimedJobResponseSchema
14
+ }
15
+ },
16
+ errorHandler: (error)=>{
17
+ if (error instanceof RunnerSessionExhaustedError) {
18
+ throw new ClientError('Runner session claim limit exhausted', 'runner-session-exhausted', {
19
+ status: 409
20
+ });
21
+ }
22
+ throw error;
23
+ },
24
+ handler: async (_request, reply)=>{
25
+ const runner = requireRunnerSessionContext(_request);
26
+ const jobExecution = await claimJobExecution({
27
+ auth,
28
+ workspaceId: runner.workspaceId,
29
+ runnerSessionId: runner.runnerSessionId,
30
+ sessionLabels: runner.labels,
31
+ maxClaims: runner.maxClaims
19
32
  });
33
+ if (!jobExecution) {
34
+ reply.status(204);
35
+ return;
36
+ }
37
+ return {
38
+ workflow_run_id: jobExecution.workflowRunId,
39
+ workflow_run_attempt_id: jobExecution.workflowRunAttemptId,
40
+ job_id: jobExecution.jobId,
41
+ job_execution_id: jobExecution.jobExecutionId,
42
+ lease_token: jobExecution.leaseToken
43
+ };
20
44
  }
21
- throw error;
22
- },
23
- handler: async (_request, reply)=>{
24
- const runner = requireRunnerSessionContext(_request);
25
- const jobExecution = await claimJobExecution({
26
- workspaceId: runner.workspaceId,
27
- runnerSessionId: runner.runnerSessionId,
28
- sessionLabels: runner.labels,
29
- maxClaims: runner.maxClaims
30
- });
31
- if (!jobExecution) {
32
- reply.status(204);
33
- return;
34
- }
35
- return {
36
- workflow_run_id: jobExecution.workflowRunId,
37
- workflow_run_attempt_id: jobExecution.workflowRunAttemptId,
38
- job_id: jobExecution.jobId,
39
- job_execution_id: jobExecution.jobExecutionId,
40
- lease_token: jobExecution.leaseToken
41
- };
42
- }
43
- });
45
+ });
46
+ }
44
47
 
45
48
  //# sourceMappingURL=request-job.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/presentation/routes/request-job.ts"],"sourcesContent":["import {requireRunnerSessionContext} from '@shipfox/api-auth-context';\nimport {claimedJobResponseSchema} from '@shipfox/api-runners-dto';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {RunnerSessionExhaustedError} from '#core/errors.js';\nimport {claimJobExecution} from '#core/job-executions.js';\n\nexport const requestJobRoute = defineRoute({\n method: 'POST',\n path: '/request',\n description: 'Claim the next available job execution and receive its lease token',\n schema: {\n response: {\n 200: claimedJobResponseSchema,\n },\n },\n errorHandler: (error) => {\n if (error instanceof RunnerSessionExhaustedError) {\n throw new ClientError('Runner session claim limit exhausted', 'runner-session-exhausted', {\n status: 409,\n });\n }\n throw error;\n },\n handler: async (_request, reply) => {\n const runner = requireRunnerSessionContext(_request);\n\n const jobExecution = await claimJobExecution({\n workspaceId: runner.workspaceId,\n runnerSessionId: runner.runnerSessionId,\n sessionLabels: runner.labels,\n maxClaims: runner.maxClaims,\n });\n\n if (!jobExecution) {\n reply.status(204);\n return;\n }\n\n return {\n workflow_run_id: jobExecution.workflowRunId,\n workflow_run_attempt_id: jobExecution.workflowRunAttemptId,\n job_id: jobExecution.jobId,\n job_execution_id: jobExecution.jobExecutionId,\n lease_token: jobExecution.leaseToken,\n };\n },\n});\n"],"names":["requireRunnerSessionContext","claimedJobResponseSchema","ClientError","defineRoute","RunnerSessionExhaustedError","claimJobExecution","requestJobRoute","method","path","description","schema","response","errorHandler","error","status","handler","_request","reply","runner","jobExecution","workspaceId","runnerSessionId","sessionLabels","labels","maxClaims","workflow_run_id","workflowRunId","workflow_run_attempt_id","workflowRunAttemptId","job_id","jobId","job_execution_id","jobExecutionId","lease_token","leaseToken"],"mappings":"AAAA,SAAQA,2BAA2B,QAAO,4BAA4B;AACtE,SAAQC,wBAAwB,QAAO,2BAA2B;AAClE,SAAQC,WAAW,EAAEC,WAAW,QAAO,wBAAwB;AAC/D,SAAQC,2BAA2B,QAAO,kBAAkB;AAC5D,SAAQC,iBAAiB,QAAO,0BAA0B;AAE1D,OAAO,MAAMC,kBAAkBH,YAAY;IACzCI,QAAQ;IACRC,MAAM;IACNC,aAAa;IACbC,QAAQ;QACNC,UAAU;YACR,KAAKV;QACP;IACF;IACAW,cAAc,CAACC;QACb,IAAIA,iBAAiBT,6BAA6B;YAChD,MAAM,IAAIF,YAAY,wCAAwC,4BAA4B;gBACxFY,QAAQ;YACV;QACF;QACA,MAAMD;IACR;IACAE,SAAS,OAAOC,UAAUC;QACxB,MAAMC,SAASlB,4BAA4BgB;QAE3C,MAAMG,eAAe,MAAMd,kBAAkB;YAC3Ce,aAAaF,OAAOE,WAAW;YAC/BC,iBAAiBH,OAAOG,eAAe;YACvCC,eAAeJ,OAAOK,MAAM;YAC5BC,WAAWN,OAAOM,SAAS;QAC7B;QAEA,IAAI,CAACL,cAAc;YACjBF,MAAMH,MAAM,CAAC;YACb;QACF;QAEA,OAAO;YACLW,iBAAiBN,aAAaO,aAAa;YAC3CC,yBAAyBR,aAAaS,oBAAoB;YAC1DC,QAAQV,aAAaW,KAAK;YAC1BC,kBAAkBZ,aAAaa,cAAc;YAC7CC,aAAad,aAAae,UAAU;QACtC;IACF;AACF,GAAG"}
1
+ {"version":3,"sources":["../../../src/presentation/routes/request-job.ts"],"sourcesContent":["import {requireRunnerSessionContext} from '@shipfox/api-auth-context';\nimport type {AuthInterModuleClient} from '@shipfox/api-auth-dto/inter-module';\nimport {claimedJobResponseSchema} from '@shipfox/api-runners-dto';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {RunnerSessionExhaustedError} from '#core/errors.js';\nimport {claimJobExecution} from '#core/job-executions.js';\n\nexport function createRequestJobRoute(auth: AuthInterModuleClient) {\n return defineRoute({\n method: 'POST',\n path: '/request',\n description: 'Claim the next available job execution and receive its lease token',\n schema: {\n response: {\n 200: claimedJobResponseSchema,\n },\n },\n errorHandler: (error) => {\n if (error instanceof RunnerSessionExhaustedError) {\n throw new ClientError('Runner session claim limit exhausted', 'runner-session-exhausted', {\n status: 409,\n });\n }\n throw error;\n },\n handler: async (_request, reply) => {\n const runner = requireRunnerSessionContext(_request);\n\n const jobExecution = await claimJobExecution({\n auth,\n workspaceId: runner.workspaceId,\n runnerSessionId: runner.runnerSessionId,\n sessionLabels: runner.labels,\n maxClaims: runner.maxClaims,\n });\n\n if (!jobExecution) {\n reply.status(204);\n return;\n }\n\n return {\n workflow_run_id: jobExecution.workflowRunId,\n workflow_run_attempt_id: jobExecution.workflowRunAttemptId,\n job_id: jobExecution.jobId,\n job_execution_id: jobExecution.jobExecutionId,\n lease_token: jobExecution.leaseToken,\n };\n },\n });\n}\n"],"names":["requireRunnerSessionContext","claimedJobResponseSchema","ClientError","defineRoute","RunnerSessionExhaustedError","claimJobExecution","createRequestJobRoute","auth","method","path","description","schema","response","errorHandler","error","status","handler","_request","reply","runner","jobExecution","workspaceId","runnerSessionId","sessionLabels","labels","maxClaims","workflow_run_id","workflowRunId","workflow_run_attempt_id","workflowRunAttemptId","job_id","jobId","job_execution_id","jobExecutionId","lease_token","leaseToken"],"mappings":"AAAA,SAAQA,2BAA2B,QAAO,4BAA4B;AAEtE,SAAQC,wBAAwB,QAAO,2BAA2B;AAClE,SAAQC,WAAW,EAAEC,WAAW,QAAO,wBAAwB;AAC/D,SAAQC,2BAA2B,QAAO,kBAAkB;AAC5D,SAAQC,iBAAiB,QAAO,0BAA0B;AAE1D,OAAO,SAASC,sBAAsBC,IAA2B;IAC/D,OAAOJ,YAAY;QACjBK,QAAQ;QACRC,MAAM;QACNC,aAAa;QACbC,QAAQ;YACNC,UAAU;gBACR,KAAKX;YACP;QACF;QACAY,cAAc,CAACC;YACb,IAAIA,iBAAiBV,6BAA6B;gBAChD,MAAM,IAAIF,YAAY,wCAAwC,4BAA4B;oBACxFa,QAAQ;gBACV;YACF;YACA,MAAMD;QACR;QACAE,SAAS,OAAOC,UAAUC;YACxB,MAAMC,SAASnB,4BAA4BiB;YAE3C,MAAMG,eAAe,MAAMf,kBAAkB;gBAC3CE;gBACAc,aAAaF,OAAOE,WAAW;gBAC/BC,iBAAiBH,OAAOG,eAAe;gBACvCC,eAAeJ,OAAOK,MAAM;gBAC5BC,WAAWN,OAAOM,SAAS;YAC7B;YAEA,IAAI,CAACL,cAAc;gBACjBF,MAAMH,MAAM,CAAC;gBACb;YACF;YAEA,OAAO;gBACLW,iBAAiBN,aAAaO,aAAa;gBAC3CC,yBAAyBR,aAAaS,oBAAoB;gBAC1DC,QAAQV,aAAaW,KAAK;gBAC1BC,kBAAkBZ,aAAaa,cAAc;gBAC7CC,aAAad,aAAae,UAAU;YACtC;QACF;IACF;AACF"}
@@ -0,0 +1,8 @@
1
+ export declare const createRunnerInstancesRoute: import("@shipfox/node-fastify").RouteDefinition;
2
+ export declare const attachRunnerInstanceProviderIdRoute: import("@shipfox/node-fastify").RouteDefinition;
3
+ export declare const exchangeRunnerBootstrapRoute: import("@shipfox/node-fastify").RouteDefinition;
4
+ export declare const enrollRunnerRoute: import("@shipfox/node-fastify").RouteDefinition;
5
+ export declare const attachRunnerControlProviderIdRoute: import("@shipfox/node-fastify").RouteDefinition;
6
+ export declare const runnerControlHeartbeatRoute: import("@shipfox/node-fastify").RouteDefinition;
7
+ export declare const runnerAssignmentPollRoute: import("@shipfox/node-fastify").RouteDefinition;
8
+ //# sourceMappingURL=runner-enrollment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner-enrollment.d.ts","sourceRoot":"","sources":["../../../src/presentation/routes/runner-enrollment.ts"],"names":[],"mappings":"AA+BA,eAAO,MAAM,0BAA0B,iDA0BrC,CAAC;AAEH,eAAO,MAAM,mCAAmC,iDAmB9C,CAAC;AAEH,eAAO,MAAM,4BAA4B,iDA2BvC,CAAC;AAEH,eAAO,MAAM,iBAAiB,iDAuB5B,CAAC;AAEH,eAAO,MAAM,kCAAkC,iDAkB7C,CAAC;AAEH,eAAO,MAAM,2BAA2B,iDAYtC,CAAC;AAEH,eAAO,MAAM,yBAAyB,iDA2BpC,CAAC"}
@@ -0,0 +1,212 @@
1
+ import { requireProvisionerContext, requireRunnerControlSessionContext } from '@shipfox/api-auth-context';
2
+ import { attachRunnerControlProviderIdBodySchema, createRunnerInstancesBodySchema, createRunnerInstancesResponseSchema, runnerAssignmentPollResponseSchema, runnerBootstrapExchangeBodySchema, runnerBootstrapExchangeResponseSchema, runnerControlHeartbeatResponseSchema, runnerEnrollmentBodySchema } from '@shipfox/api-runners-dto';
3
+ import { ClientError, defineRoute } from '@shipfox/node-fastify';
4
+ import { z } from 'zod';
5
+ import { config } from '#config.js';
6
+ import { getRunnerAssignment, issueRunnerActivationToken } from '#core/runner-activation.js';
7
+ import { attachRunnerControlProviderId, createRunnerInstancesWithBootstrapTokens, enrollRunnerControlSession, exchangeRunnerBootstrapToken, RunnerBootstrapTokenInvalidError, RunnerControlSessionInvalidError, touchRunnerControlSession } from '#core/runner-control-sessions.js';
8
+ import { attachRunnerInstanceProviderId } from '#core/runner-instances.js';
9
+ import { runnerBootstrapExchangeCount, runnerControlHeartbeatCount } from '#metrics/instance.js';
10
+ import { authenticateRunnerControlSession } from '#presentation/auth/index.js';
11
+ export const createRunnerInstancesRoute = defineRoute({
12
+ method: 'POST',
13
+ path: '/runner-instances/batch',
14
+ description: 'Create provisioner-owned runner instances and one-use bootstrap tokens before launch',
15
+ schema: {
16
+ body: createRunnerInstancesBodySchema,
17
+ response: {
18
+ 200: createRunnerInstancesResponseSchema
19
+ }
20
+ },
21
+ handler: async (request)=>{
22
+ const { provisionerTokenId } = requireProvisionerContext(request);
23
+ const results = await createRunnerInstancesWithBootstrapTokens({
24
+ provisionerId: provisionerTokenId,
25
+ ...request.body.provider_kind ? {
26
+ providerKind: request.body.provider_kind
27
+ } : {},
28
+ runnerInstances: request.body.runner_instances.map((runner)=>runner.template_key ? {
29
+ templateKey: runner.template_key
30
+ } : {}),
31
+ ttlSeconds: config.RUNNER_BOOTSTRAP_TOKEN_TTL_SECONDS
32
+ });
33
+ return {
34
+ runner_instances: results.map((result)=>({
35
+ runner_instance_id: result.runnerInstanceId,
36
+ bootstrap_token: result.bootstrapToken
37
+ }))
38
+ };
39
+ }
40
+ });
41
+ export const attachRunnerInstanceProviderIdRoute = defineRoute({
42
+ method: 'POST',
43
+ path: '/runner-instances/:runnerInstanceId/provider-runner',
44
+ description: 'Attach the provider identity after the provisioner launches a runner instance',
45
+ schema: {
46
+ params: z.object({
47
+ runnerInstanceId: z.string().uuid()
48
+ }),
49
+ body: attachRunnerControlProviderIdBodySchema,
50
+ response: {
51
+ 200: z.object({
52
+ attached: z.boolean()
53
+ })
54
+ }
55
+ },
56
+ handler: async (request)=>{
57
+ const { provisionerTokenId } = requireProvisionerContext(request);
58
+ return {
59
+ attached: await attachRunnerInstanceProviderId({
60
+ runnerInstanceId: request.params.runnerInstanceId,
61
+ provisionerId: provisionerTokenId,
62
+ providerRunnerId: request.body.provider_runner_id
63
+ })
64
+ };
65
+ }
66
+ });
67
+ export const exchangeRunnerBootstrapRoute = defineRoute({
68
+ method: 'POST',
69
+ path: '/exchange',
70
+ description: 'Exchange a one-use runner bootstrap token for a workspace-neutral control session',
71
+ schema: {
72
+ body: runnerBootstrapExchangeBodySchema,
73
+ response: {
74
+ 200: runnerBootstrapExchangeResponseSchema
75
+ }
76
+ },
77
+ errorHandler: (error)=>{
78
+ if (error instanceof RunnerBootstrapTokenInvalidError) runnerBootstrapExchangeCount.add(1, {
79
+ outcome: 'rejected'
80
+ });
81
+ if (error instanceof RunnerBootstrapTokenInvalidError) throw new ClientError(error.message, 'runner-bootstrap-token-invalid', {
82
+ status: 401
83
+ });
84
+ throw error;
85
+ },
86
+ handler: async (request)=>{
87
+ const result = await exchangeRunnerBootstrapToken({
88
+ rawToken: request.body.bootstrap_token,
89
+ ttlSeconds: config.RUNNER_CONTROL_SESSION_TTL_SECONDS
90
+ });
91
+ runnerBootstrapExchangeCount.add(1, {
92
+ outcome: 'accepted'
93
+ });
94
+ return {
95
+ runner_instance_id: result.runnerInstanceId,
96
+ control_session_token: result.controlSessionToken,
97
+ expires_at: result.expiresAt.toISOString()
98
+ };
99
+ }
100
+ });
101
+ export const enrollRunnerRoute = defineRoute({
102
+ method: 'POST',
103
+ path: '/enrollment',
104
+ description: 'Declare the authenticated runner instance labels and protocol capabilities',
105
+ schema: {
106
+ body: runnerEnrollmentBodySchema,
107
+ response: {
108
+ 204: z.null()
109
+ }
110
+ },
111
+ preHandler: authenticateRunnerControlSession,
112
+ errorHandler: (error)=>{
113
+ if (error instanceof RunnerControlSessionInvalidError) throw new ClientError(error.message, 'runner-control-session-invalid', {
114
+ status: 409
115
+ });
116
+ throw error;
117
+ },
118
+ handler: async (request, reply)=>{
119
+ const session = requireRunnerControlSessionContext(request);
120
+ await enrollRunnerControlSession({
121
+ runnerInstanceId: session.runnerInstanceId,
122
+ provisionerId: session.provisionerId,
123
+ labels: request.body.labels,
124
+ ...request.body.capabilities ? {
125
+ capabilities: request.body.capabilities
126
+ } : {},
127
+ providerKind: request.body.provider_kind,
128
+ protocolVersion: request.body.protocol_version
129
+ });
130
+ return await reply.code(204).send();
131
+ }
132
+ });
133
+ export const attachRunnerControlProviderIdRoute = defineRoute({
134
+ method: 'POST',
135
+ path: '/provider-runner',
136
+ description: 'Attach the authenticated runner instance provider identity once',
137
+ schema: {
138
+ body: attachRunnerControlProviderIdBodySchema,
139
+ response: {
140
+ 200: z.object({
141
+ attached: z.boolean()
142
+ })
143
+ }
144
+ },
145
+ preHandler: authenticateRunnerControlSession,
146
+ handler: async (request)=>{
147
+ const session = requireRunnerControlSessionContext(request);
148
+ return {
149
+ attached: await attachRunnerControlProviderId({
150
+ ...session,
151
+ providerRunnerId: request.body.provider_runner_id
152
+ })
153
+ };
154
+ }
155
+ });
156
+ export const runnerControlHeartbeatRoute = defineRoute({
157
+ method: 'POST',
158
+ path: '/heartbeat',
159
+ description: 'Record liveness for only the authenticated runner instance',
160
+ schema: {
161
+ response: {
162
+ 200: runnerControlHeartbeatResponseSchema
163
+ }
164
+ },
165
+ preHandler: authenticateRunnerControlSession,
166
+ handler: async (request)=>{
167
+ const session = requireRunnerControlSessionContext(request);
168
+ await touchRunnerControlSession(session.runnerInstanceId, session.provisionerId);
169
+ runnerControlHeartbeatCount.add(1);
170
+ return {
171
+ ok: true
172
+ };
173
+ }
174
+ });
175
+ export const runnerAssignmentPollRoute = defineRoute({
176
+ method: 'GET',
177
+ path: '/assignment',
178
+ description: 'Wait for only the authenticated runner instance assignment',
179
+ schema: {
180
+ response: {
181
+ 200: runnerAssignmentPollResponseSchema
182
+ }
183
+ },
184
+ preHandler: authenticateRunnerControlSession,
185
+ handler: async (request, reply)=>{
186
+ const session = requireRunnerControlSessionContext(request);
187
+ const deadline = Date.now() + config.RUNNER_ASSIGNMENT_POLL_MAX_WAIT_SECONDS * 1000;
188
+ const abortController = new AbortController();
189
+ reply.raw.on('close', ()=>abortController.abort());
190
+ while(Date.now() <= deadline){
191
+ if (abortController.signal.aborted) return {
192
+ activation_token: null
193
+ };
194
+ const assignment = await getRunnerAssignment(session);
195
+ if (assignment) {
196
+ const activationToken = await issueRunnerActivationToken({
197
+ ...session,
198
+ ttlSeconds: config.RUNNER_ACTIVATION_TOKEN_TTL_SECONDS
199
+ });
200
+ return {
201
+ activation_token: activationToken
202
+ };
203
+ }
204
+ await new Promise((resolve)=>setTimeout(resolve, config.RUNNER_ASSIGNMENT_POLL_INTERVAL_MS));
205
+ }
206
+ return {
207
+ activation_token: null
208
+ };
209
+ }
210
+ });
211
+
212
+ //# sourceMappingURL=runner-enrollment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/presentation/routes/runner-enrollment.ts"],"sourcesContent":["import {\n requireProvisionerContext,\n requireRunnerControlSessionContext,\n} from '@shipfox/api-auth-context';\nimport {\n attachRunnerControlProviderIdBodySchema,\n createRunnerInstancesBodySchema,\n createRunnerInstancesResponseSchema,\n runnerAssignmentPollResponseSchema,\n runnerBootstrapExchangeBodySchema,\n runnerBootstrapExchangeResponseSchema,\n runnerControlHeartbeatResponseSchema,\n runnerEnrollmentBodySchema,\n} from '@shipfox/api-runners-dto';\nimport {ClientError, defineRoute} from '@shipfox/node-fastify';\nimport {z} from 'zod';\nimport {config} from '#config.js';\nimport {getRunnerAssignment, issueRunnerActivationToken} from '#core/runner-activation.js';\nimport {\n attachRunnerControlProviderId,\n createRunnerInstancesWithBootstrapTokens,\n enrollRunnerControlSession,\n exchangeRunnerBootstrapToken,\n RunnerBootstrapTokenInvalidError,\n RunnerControlSessionInvalidError,\n touchRunnerControlSession,\n} from '#core/runner-control-sessions.js';\nimport {attachRunnerInstanceProviderId} from '#core/runner-instances.js';\nimport {runnerBootstrapExchangeCount, runnerControlHeartbeatCount} from '#metrics/instance.js';\nimport {authenticateRunnerControlSession} from '#presentation/auth/index.js';\n\nexport const createRunnerInstancesRoute = defineRoute({\n method: 'POST',\n path: '/runner-instances/batch',\n description:\n 'Create provisioner-owned runner instances and one-use bootstrap tokens before launch',\n schema: {\n body: createRunnerInstancesBodySchema,\n response: {200: createRunnerInstancesResponseSchema},\n },\n handler: async (request) => {\n const {provisionerTokenId} = requireProvisionerContext(request);\n const results = await createRunnerInstancesWithBootstrapTokens({\n provisionerId: provisionerTokenId,\n ...(request.body.provider_kind ? {providerKind: request.body.provider_kind} : {}),\n runnerInstances: request.body.runner_instances.map((runner) =>\n runner.template_key ? {templateKey: runner.template_key} : {},\n ),\n ttlSeconds: config.RUNNER_BOOTSTRAP_TOKEN_TTL_SECONDS,\n });\n return {\n runner_instances: results.map((result) => ({\n runner_instance_id: result.runnerInstanceId,\n bootstrap_token: result.bootstrapToken,\n })),\n };\n },\n});\n\nexport const attachRunnerInstanceProviderIdRoute = defineRoute({\n method: 'POST',\n path: '/runner-instances/:runnerInstanceId/provider-runner',\n description: 'Attach the provider identity after the provisioner launches a runner instance',\n schema: {\n params: z.object({runnerInstanceId: z.string().uuid()}),\n body: attachRunnerControlProviderIdBodySchema,\n response: {200: z.object({attached: z.boolean()})},\n },\n handler: async (request) => {\n const {provisionerTokenId} = requireProvisionerContext(request);\n return {\n attached: await attachRunnerInstanceProviderId({\n runnerInstanceId: request.params.runnerInstanceId,\n provisionerId: provisionerTokenId,\n providerRunnerId: request.body.provider_runner_id,\n }),\n };\n },\n});\n\nexport const exchangeRunnerBootstrapRoute = defineRoute({\n method: 'POST',\n path: '/exchange',\n description: 'Exchange a one-use runner bootstrap token for a workspace-neutral control session',\n schema: {\n body: runnerBootstrapExchangeBodySchema,\n response: {200: runnerBootstrapExchangeResponseSchema},\n },\n errorHandler: (error) => {\n if (error instanceof RunnerBootstrapTokenInvalidError)\n runnerBootstrapExchangeCount.add(1, {outcome: 'rejected'});\n if (error instanceof RunnerBootstrapTokenInvalidError)\n throw new ClientError(error.message, 'runner-bootstrap-token-invalid', {status: 401});\n throw error;\n },\n handler: async (request) => {\n const result = await exchangeRunnerBootstrapToken({\n rawToken: request.body.bootstrap_token,\n ttlSeconds: config.RUNNER_CONTROL_SESSION_TTL_SECONDS,\n });\n runnerBootstrapExchangeCount.add(1, {outcome: 'accepted'});\n return {\n runner_instance_id: result.runnerInstanceId,\n control_session_token: result.controlSessionToken,\n expires_at: result.expiresAt.toISOString(),\n };\n },\n});\n\nexport const enrollRunnerRoute = defineRoute({\n method: 'POST',\n path: '/enrollment',\n description: 'Declare the authenticated runner instance labels and protocol capabilities',\n schema: {body: runnerEnrollmentBodySchema, response: {204: z.null()}},\n preHandler: authenticateRunnerControlSession,\n errorHandler: (error) => {\n if (error instanceof RunnerControlSessionInvalidError)\n throw new ClientError(error.message, 'runner-control-session-invalid', {status: 409});\n throw error;\n },\n handler: async (request, reply) => {\n const session = requireRunnerControlSessionContext(request);\n await enrollRunnerControlSession({\n runnerInstanceId: session.runnerInstanceId,\n provisionerId: session.provisionerId,\n labels: request.body.labels,\n ...(request.body.capabilities ? {capabilities: request.body.capabilities} : {}),\n providerKind: request.body.provider_kind,\n protocolVersion: request.body.protocol_version,\n });\n return await reply.code(204).send();\n },\n});\n\nexport const attachRunnerControlProviderIdRoute = defineRoute({\n method: 'POST',\n path: '/provider-runner',\n description: 'Attach the authenticated runner instance provider identity once',\n schema: {\n body: attachRunnerControlProviderIdBodySchema,\n response: {200: z.object({attached: z.boolean()})},\n },\n preHandler: authenticateRunnerControlSession,\n handler: async (request) => {\n const session = requireRunnerControlSessionContext(request);\n return {\n attached: await attachRunnerControlProviderId({\n ...session,\n providerRunnerId: request.body.provider_runner_id,\n }),\n };\n },\n});\n\nexport const runnerControlHeartbeatRoute = defineRoute({\n method: 'POST',\n path: '/heartbeat',\n description: 'Record liveness for only the authenticated runner instance',\n schema: {response: {200: runnerControlHeartbeatResponseSchema}},\n preHandler: authenticateRunnerControlSession,\n handler: async (request) => {\n const session = requireRunnerControlSessionContext(request);\n await touchRunnerControlSession(session.runnerInstanceId, session.provisionerId);\n runnerControlHeartbeatCount.add(1);\n return {ok: true};\n },\n});\n\nexport const runnerAssignmentPollRoute = defineRoute({\n method: 'GET',\n path: '/assignment',\n description: 'Wait for only the authenticated runner instance assignment',\n schema: {response: {200: runnerAssignmentPollResponseSchema}},\n preHandler: authenticateRunnerControlSession,\n handler: async (request, reply) => {\n const session = requireRunnerControlSessionContext(request);\n const deadline = Date.now() + config.RUNNER_ASSIGNMENT_POLL_MAX_WAIT_SECONDS * 1000;\n const abortController = new AbortController();\n reply.raw.on('close', () => abortController.abort());\n while (Date.now() <= deadline) {\n if (abortController.signal.aborted) return {activation_token: null};\n const assignment = await getRunnerAssignment(session);\n if (assignment) {\n const activationToken = await issueRunnerActivationToken({\n ...session,\n ttlSeconds: config.RUNNER_ACTIVATION_TOKEN_TTL_SECONDS,\n });\n return {activation_token: activationToken};\n }\n await new Promise((resolve) =>\n setTimeout(resolve, config.RUNNER_ASSIGNMENT_POLL_INTERVAL_MS),\n );\n }\n return {activation_token: null};\n },\n});\n"],"names":["requireProvisionerContext","requireRunnerControlSessionContext","attachRunnerControlProviderIdBodySchema","createRunnerInstancesBodySchema","createRunnerInstancesResponseSchema","runnerAssignmentPollResponseSchema","runnerBootstrapExchangeBodySchema","runnerBootstrapExchangeResponseSchema","runnerControlHeartbeatResponseSchema","runnerEnrollmentBodySchema","ClientError","defineRoute","z","config","getRunnerAssignment","issueRunnerActivationToken","attachRunnerControlProviderId","createRunnerInstancesWithBootstrapTokens","enrollRunnerControlSession","exchangeRunnerBootstrapToken","RunnerBootstrapTokenInvalidError","RunnerControlSessionInvalidError","touchRunnerControlSession","attachRunnerInstanceProviderId","runnerBootstrapExchangeCount","runnerControlHeartbeatCount","authenticateRunnerControlSession","createRunnerInstancesRoute","method","path","description","schema","body","response","handler","request","provisionerTokenId","results","provisionerId","provider_kind","providerKind","runnerInstances","runner_instances","map","runner","template_key","templateKey","ttlSeconds","RUNNER_BOOTSTRAP_TOKEN_TTL_SECONDS","result","runner_instance_id","runnerInstanceId","bootstrap_token","bootstrapToken","attachRunnerInstanceProviderIdRoute","params","object","string","uuid","attached","boolean","providerRunnerId","provider_runner_id","exchangeRunnerBootstrapRoute","errorHandler","error","add","outcome","message","status","rawToken","RUNNER_CONTROL_SESSION_TTL_SECONDS","control_session_token","controlSessionToken","expires_at","expiresAt","toISOString","enrollRunnerRoute","null","preHandler","reply","session","labels","capabilities","protocolVersion","protocol_version","code","send","attachRunnerControlProviderIdRoute","runnerControlHeartbeatRoute","ok","runnerAssignmentPollRoute","deadline","Date","now","RUNNER_ASSIGNMENT_POLL_MAX_WAIT_SECONDS","abortController","AbortController","raw","on","abort","signal","aborted","activation_token","assignment","activationToken","RUNNER_ACTIVATION_TOKEN_TTL_SECONDS","Promise","resolve","setTimeout","RUNNER_ASSIGNMENT_POLL_INTERVAL_MS"],"mappings":"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"}
@@ -1,9 +1,9 @@
1
- import { deleteExpiredEphemeralRegistrationTokensActivity, deleteExpiredReservationsActivity, deleteExpiredRunnerSessionsActivity, detectAndExpireStuckJobsActivity, reapStaleProvisionedRunnersActivity } from './maintenance-activities.js';
1
+ import { deleteExpiredEphemeralRegistrationTokensActivity, deleteExpiredReservationsActivity, deleteExpiredRunnerSessionsActivity, detectAndExpireStuckJobsActivity, reapStaleRunnerInstancesActivity } from './maintenance-activities.js';
2
2
  export declare function createRunnersMaintenanceActivities(): {
3
3
  deleteExpiredEphemeralRegistrationTokensActivity: typeof deleteExpiredEphemeralRegistrationTokensActivity;
4
4
  deleteExpiredReservationsActivity: typeof deleteExpiredReservationsActivity;
5
5
  deleteExpiredRunnerSessionsActivity: typeof deleteExpiredRunnerSessionsActivity;
6
6
  detectAndExpireStuckJobsActivity: typeof detectAndExpireStuckJobsActivity;
7
- reapStaleProvisionedRunnersActivity: typeof reapStaleProvisionedRunnersActivity;
7
+ reapStaleRunnerInstancesActivity: typeof reapStaleRunnerInstancesActivity;
8
8
  };
9
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/temporal/activities/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gDAAgD,EAChD,iCAAiC,EACjC,mCAAmC,EACnC,gCAAgC,EAChC,mCAAmC,EACpC,MAAM,6BAA6B,CAAC;AAErC,wBAAgB,kCAAkC;;;;;;EAQjD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/temporal/activities/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gDAAgD,EAChD,iCAAiC,EACjC,mCAAmC,EACnC,gCAAgC,EAChC,gCAAgC,EACjC,MAAM,6BAA6B,CAAC;AAErC,wBAAgB,kCAAkC;;;;;;EAQjD"}
@@ -1,11 +1,11 @@
1
- import { deleteExpiredEphemeralRegistrationTokensActivity, deleteExpiredReservationsActivity, deleteExpiredRunnerSessionsActivity, detectAndExpireStuckJobsActivity, reapStaleProvisionedRunnersActivity } from './maintenance-activities.js';
1
+ import { deleteExpiredEphemeralRegistrationTokensActivity, deleteExpiredReservationsActivity, deleteExpiredRunnerSessionsActivity, detectAndExpireStuckJobsActivity, reapStaleRunnerInstancesActivity } from './maintenance-activities.js';
2
2
  export function createRunnersMaintenanceActivities() {
3
3
  return {
4
4
  deleteExpiredEphemeralRegistrationTokensActivity,
5
5
  deleteExpiredReservationsActivity,
6
6
  deleteExpiredRunnerSessionsActivity,
7
7
  detectAndExpireStuckJobsActivity,
8
- reapStaleProvisionedRunnersActivity
8
+ reapStaleRunnerInstancesActivity
9
9
  };
10
10
  }
11
11
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/temporal/activities/index.ts"],"sourcesContent":["import {\n deleteExpiredEphemeralRegistrationTokensActivity,\n deleteExpiredReservationsActivity,\n deleteExpiredRunnerSessionsActivity,\n detectAndExpireStuckJobsActivity,\n reapStaleProvisionedRunnersActivity,\n} from './maintenance-activities.js';\n\nexport function createRunnersMaintenanceActivities() {\n return {\n deleteExpiredEphemeralRegistrationTokensActivity,\n deleteExpiredReservationsActivity,\n deleteExpiredRunnerSessionsActivity,\n detectAndExpireStuckJobsActivity,\n reapStaleProvisionedRunnersActivity,\n };\n}\n"],"names":["deleteExpiredEphemeralRegistrationTokensActivity","deleteExpiredReservationsActivity","deleteExpiredRunnerSessionsActivity","detectAndExpireStuckJobsActivity","reapStaleProvisionedRunnersActivity","createRunnersMaintenanceActivities"],"mappings":"AAAA,SACEA,gDAAgD,EAChDC,iCAAiC,EACjCC,mCAAmC,EACnCC,gCAAgC,EAChCC,mCAAmC,QAC9B,8BAA8B;AAErC,OAAO,SAASC;IACd,OAAO;QACLL;QACAC;QACAC;QACAC;QACAC;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/temporal/activities/index.ts"],"sourcesContent":["import {\n deleteExpiredEphemeralRegistrationTokensActivity,\n deleteExpiredReservationsActivity,\n deleteExpiredRunnerSessionsActivity,\n detectAndExpireStuckJobsActivity,\n reapStaleRunnerInstancesActivity,\n} from './maintenance-activities.js';\n\nexport function createRunnersMaintenanceActivities() {\n return {\n deleteExpiredEphemeralRegistrationTokensActivity,\n deleteExpiredReservationsActivity,\n deleteExpiredRunnerSessionsActivity,\n detectAndExpireStuckJobsActivity,\n reapStaleRunnerInstancesActivity,\n };\n}\n"],"names":["deleteExpiredEphemeralRegistrationTokensActivity","deleteExpiredReservationsActivity","deleteExpiredRunnerSessionsActivity","detectAndExpireStuckJobsActivity","reapStaleRunnerInstancesActivity","createRunnersMaintenanceActivities"],"mappings":"AAAA,SACEA,gDAAgD,EAChDC,iCAAiC,EACjCC,mCAAmC,EACnCC,gCAAgC,EAChCC,gCAAgC,QAC3B,8BAA8B;AAErC,OAAO,SAASC;IACd,OAAO;QACLL;QACAC;QACAC;QACAC;QACAC;IACF;AACF"}
@@ -8,7 +8,7 @@ export declare function deleteExpiredReservationsActivity(params?: {
8
8
  }): Promise<{
9
9
  deleted: number;
10
10
  }>;
11
- export declare function reapStaleProvisionedRunnersActivity(params?: {
11
+ export declare function reapStaleRunnerInstancesActivity(params?: {
12
12
  thresholdSeconds: number;
13
13
  limit: number;
14
14
  }): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"maintenance-activities.d.ts","sourceRoot":"","sources":["../../../src/temporal/activities/maintenance-activities.ts"],"names":[],"mappings":"AAQA,wBAAgB,gCAAgC,CAAC,MAAM,EAAE;IACvD,gBAAgB,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CAAC,CAE7B;AAED,wBAAgB,iCAAiC,CAAC,MAAM,CAAC,EAAE;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CAAC,CAE7B;AAED,wBAAgB,mCAAmC,CAAC,MAAM,CAAC,EAAE;IAC3D,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,oBAAoB,EAAE,MAAM,CAAA;CAAC,CAAC,CAE1D;AAED,wBAAgB,mCAAmC,CAAC,MAAM,CAAC,EAAE;IAC3D,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CAAC,CAE7B;AAED,wBAAgB,gDAAgD,CAAC,MAAM,CAAC,EAAE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CAAC,CAE7B"}
1
+ {"version":3,"file":"maintenance-activities.d.ts","sourceRoot":"","sources":["../../../src/temporal/activities/maintenance-activities.ts"],"names":[],"mappings":"AAQA,wBAAgB,gCAAgC,CAAC,MAAM,EAAE;IACvD,gBAAgB,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CAAC,CAE7B;AAED,wBAAgB,iCAAiC,CAAC,MAAM,CAAC,EAAE;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CAAC,CAE7B;AAED,wBAAgB,gCAAgC,CAAC,MAAM,CAAC,EAAE;IACxD,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,oBAAoB,EAAE,MAAM,CAAA;CAAC,CAAC,CAE1D;AAED,wBAAgB,mCAAmC,CAAC,MAAM,CAAC,EAAE;IAC3D,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CAAC,CAE7B;AAED,wBAAgB,gDAAgD,CAAC,MAAM,CAAC,EAAE;IACxE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAC,CAAC,CAE7B"}
@@ -1,12 +1,12 @@
1
- import { deleteExpiredEphemeralRegistrationTokens, deleteExpiredRunnerReservations, deleteExpiredRunnerSessions, detectAndExpireStuckJobs, reapStaleProvisionedRunners } from '#core/maintenance.js';
1
+ import { deleteExpiredEphemeralRegistrationTokens, deleteExpiredRunnerReservations, deleteExpiredRunnerSessions, detectAndExpireStuckJobs, reapStaleRunnerInstances } from '#core/maintenance.js';
2
2
  export function detectAndExpireStuckJobsActivity(params) {
3
3
  return detectAndExpireStuckJobs(params);
4
4
  }
5
5
  export function deleteExpiredReservationsActivity(params) {
6
6
  return deleteExpiredRunnerReservations(params);
7
7
  }
8
- export function reapStaleProvisionedRunnersActivity(params) {
9
- return reapStaleProvisionedRunners(params);
8
+ export function reapStaleRunnerInstancesActivity(params) {
9
+ return reapStaleRunnerInstances(params);
10
10
  }
11
11
  export function deleteExpiredRunnerSessionsActivity(params) {
12
12
  return deleteExpiredRunnerSessions(params);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/temporal/activities/maintenance-activities.ts"],"sourcesContent":["import {\n deleteExpiredEphemeralRegistrationTokens,\n deleteExpiredRunnerReservations,\n deleteExpiredRunnerSessions,\n detectAndExpireStuckJobs,\n reapStaleProvisionedRunners,\n} from '#core/maintenance.js';\n\nexport function detectAndExpireStuckJobsActivity(params: {\n thresholdSeconds: number;\n}): Promise<{expired: number}> {\n return detectAndExpireStuckJobs(params);\n}\n\nexport function deleteExpiredReservationsActivity(params?: {\n limit?: number;\n}): Promise<{deleted: number}> {\n return deleteExpiredRunnerReservations(params);\n}\n\nexport function reapStaleProvisionedRunnersActivity(params?: {\n thresholdSeconds: number;\n limit: number;\n}): Promise<{reaped: number; reservationsReleased: number}> {\n return reapStaleProvisionedRunners(params);\n}\n\nexport function deleteExpiredRunnerSessionsActivity(params?: {\n manualRetentionDays?: number;\n ephemeralRetentionDays?: number;\n limit?: number;\n}): Promise<{deleted: number}> {\n return deleteExpiredRunnerSessions(params);\n}\n\nexport function deleteExpiredEphemeralRegistrationTokensActivity(params?: {\n retentionDays?: number;\n limit?: number;\n}): Promise<{deleted: number}> {\n return deleteExpiredEphemeralRegistrationTokens(params);\n}\n"],"names":["deleteExpiredEphemeralRegistrationTokens","deleteExpiredRunnerReservations","deleteExpiredRunnerSessions","detectAndExpireStuckJobs","reapStaleProvisionedRunners","detectAndExpireStuckJobsActivity","params","deleteExpiredReservationsActivity","reapStaleProvisionedRunnersActivity","deleteExpiredRunnerSessionsActivity","deleteExpiredEphemeralRegistrationTokensActivity"],"mappings":"AAAA,SACEA,wCAAwC,EACxCC,+BAA+B,EAC/BC,2BAA2B,EAC3BC,wBAAwB,EACxBC,2BAA2B,QACtB,uBAAuB;AAE9B,OAAO,SAASC,iCAAiCC,MAEhD;IACC,OAAOH,yBAAyBG;AAClC;AAEA,OAAO,SAASC,kCAAkCD,MAEjD;IACC,OAAOL,gCAAgCK;AACzC;AAEA,OAAO,SAASE,oCAAoCF,MAGnD;IACC,OAAOF,4BAA4BE;AACrC;AAEA,OAAO,SAASG,oCAAoCH,MAInD;IACC,OAAOJ,4BAA4BI;AACrC;AAEA,OAAO,SAASI,iDAAiDJ,MAGhE;IACC,OAAON,yCAAyCM;AAClD"}
1
+ {"version":3,"sources":["../../../src/temporal/activities/maintenance-activities.ts"],"sourcesContent":["import {\n deleteExpiredEphemeralRegistrationTokens,\n deleteExpiredRunnerReservations,\n deleteExpiredRunnerSessions,\n detectAndExpireStuckJobs,\n reapStaleRunnerInstances,\n} from '#core/maintenance.js';\n\nexport function detectAndExpireStuckJobsActivity(params: {\n thresholdSeconds: number;\n}): Promise<{expired: number}> {\n return detectAndExpireStuckJobs(params);\n}\n\nexport function deleteExpiredReservationsActivity(params?: {\n limit?: number;\n}): Promise<{deleted: number}> {\n return deleteExpiredRunnerReservations(params);\n}\n\nexport function reapStaleRunnerInstancesActivity(params?: {\n thresholdSeconds: number;\n limit: number;\n}): Promise<{reaped: number; reservationsReleased: number}> {\n return reapStaleRunnerInstances(params);\n}\n\nexport function deleteExpiredRunnerSessionsActivity(params?: {\n manualRetentionDays?: number;\n ephemeralRetentionDays?: number;\n limit?: number;\n}): Promise<{deleted: number}> {\n return deleteExpiredRunnerSessions(params);\n}\n\nexport function deleteExpiredEphemeralRegistrationTokensActivity(params?: {\n retentionDays?: number;\n limit?: number;\n}): Promise<{deleted: number}> {\n return deleteExpiredEphemeralRegistrationTokens(params);\n}\n"],"names":["deleteExpiredEphemeralRegistrationTokens","deleteExpiredRunnerReservations","deleteExpiredRunnerSessions","detectAndExpireStuckJobs","reapStaleRunnerInstances","detectAndExpireStuckJobsActivity","params","deleteExpiredReservationsActivity","reapStaleRunnerInstancesActivity","deleteExpiredRunnerSessionsActivity","deleteExpiredEphemeralRegistrationTokensActivity"],"mappings":"AAAA,SACEA,wCAAwC,EACxCC,+BAA+B,EAC/BC,2BAA2B,EAC3BC,wBAAwB,EACxBC,wBAAwB,QACnB,uBAAuB;AAE9B,OAAO,SAASC,iCAAiCC,MAEhD;IACC,OAAOH,yBAAyBG;AAClC;AAEA,OAAO,SAASC,kCAAkCD,MAEjD;IACC,OAAOL,gCAAgCK;AACzC;AAEA,OAAO,SAASE,iCAAiCF,MAGhD;IACC,OAAOF,yBAAyBE;AAClC;AAEA,OAAO,SAASG,oCAAoCH,MAInD;IACC,OAAOJ,4BAA4BI;AACrC;AAEA,OAAO,SAASI,iDAAiDJ,MAGhE;IACC,OAAON,yCAAyCM;AAClD"}