@capybara-hq/kernel 0.1.0-rc.1 → 0.1.0-rc.3

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 (670) hide show
  1. package/dist/admin/admin.controller.d.ts +17 -17
  2. package/dist/admin/admin.controller.js +43 -26
  3. package/dist/admin/admin.module.d.ts +3 -0
  4. package/dist/admin/admin.module.js +22 -0
  5. package/dist/admin/extensions.controller.d.ts +14 -14
  6. package/dist/admin/extensions.controller.js +30 -17
  7. package/dist/admin/setup-lock.d.ts +16 -0
  8. package/dist/admin/setup-lock.js +47 -0
  9. package/dist/admin/setup.controller.d.ts +8 -8
  10. package/dist/admin/setup.controller.js +27 -25
  11. package/dist/admin/setup.service.d.ts +19 -27
  12. package/dist/admin/setup.service.js +61 -61
  13. package/dist/agents/agent-lookup.d.ts +53 -0
  14. package/dist/agents/agent-lookup.js +187 -0
  15. package/dist/agents/agents.controller.d.ts +1 -1
  16. package/dist/agents/agents.controller.js +14 -8
  17. package/dist/agents/agents.module.d.ts +7 -0
  18. package/dist/agents/agents.module.js +41 -0
  19. package/dist/agents/agents.service.d.ts +39 -58
  20. package/dist/agents/agents.service.js +280 -335
  21. package/dist/agents/definition.d.ts +39 -8
  22. package/dist/agents/definition.js +201 -17
  23. package/dist/agents/models.controller.d.ts +1 -1
  24. package/dist/agents/models.controller.js +2 -2
  25. package/dist/agents/templates.controller.d.ts +1 -1
  26. package/dist/agents/templates.controller.js +2 -2
  27. package/dist/agents/templates.d.ts +6 -8
  28. package/dist/agents/templates.js +39 -8
  29. package/dist/app.d.ts +93 -0
  30. package/dist/app.js +150 -0
  31. package/dist/catalog/admin-catalog.controller.d.ts +3 -3
  32. package/dist/catalog/admin-catalog.controller.js +27 -13
  33. package/dist/catalog/catalog-content.d.ts +185 -0
  34. package/dist/catalog/catalog-content.js +326 -0
  35. package/dist/catalog/catalog-items.d.ts +186 -0
  36. package/dist/catalog/catalog-items.js +410 -0
  37. package/dist/catalog/catalog.module.d.ts +14 -0
  38. package/dist/catalog/catalog.module.js +71 -0
  39. package/dist/catalog/catalog.service.d.ts +34 -188
  40. package/dist/catalog/catalog.service.js +155 -489
  41. package/dist/catalog/claude/agents.js +13 -10
  42. package/dist/catalog/cli.d.ts +3 -2
  43. package/dist/catalog/cli.js +13 -31
  44. package/dist/catalog/job-ids.d.ts +15 -0
  45. package/dist/catalog/job-ids.js +15 -0
  46. package/dist/catalog/jobs.d.ts +27 -0
  47. package/dist/catalog/jobs.js +70 -0
  48. package/dist/catalog/locks.d.ts +24 -0
  49. package/dist/catalog/locks.js +63 -0
  50. package/dist/catalog/marketplaces.controller.d.ts +4 -4
  51. package/dist/catalog/marketplaces.controller.js +22 -11
  52. package/dist/catalog/marketplaces.service.d.ts +31 -14
  53. package/dist/catalog/marketplaces.service.js +330 -256
  54. package/dist/catalog/org-catalog.controller.d.ts +4 -3
  55. package/dist/catalog/org-catalog.controller.js +29 -14
  56. package/dist/catalog/org-catalog.service.d.ts +32 -198
  57. package/dist/catalog/org-catalog.service.js +159 -400
  58. package/dist/catalog/plugin-import.d.ts +73 -34
  59. package/dist/catalog/plugin-import.js +356 -217
  60. package/dist/catalog/plugin-install.d.ts +83 -41
  61. package/dist/catalog/plugin-install.js +421 -269
  62. package/dist/catalog/plugin-upgrade.d.ts +59 -4
  63. package/dist/catalog/plugin-upgrade.js +407 -282
  64. package/dist/catalog/requests.service.d.ts +27 -15
  65. package/dist/catalog/requests.service.js +201 -145
  66. package/dist/catalog/upgrade-targets.d.ts +4 -7
  67. package/dist/channels/actions.d.ts +6 -4
  68. package/dist/channels/actions.js +1 -1
  69. package/dist/channels/cards.d.ts +10 -4
  70. package/dist/channels/cards.js +16 -8
  71. package/dist/channels/channels.module.d.ts +40 -0
  72. package/dist/channels/channels.module.js +128 -0
  73. package/dist/channels/connections.controller.d.ts +1 -1
  74. package/dist/channels/connections.controller.js +11 -6
  75. package/dist/channels/connections.service.d.ts +43 -21
  76. package/dist/channels/connections.service.js +236 -131
  77. package/dist/channels/inbound.d.ts +34 -38
  78. package/dist/channels/inbound.js +107 -41
  79. package/dist/channels/job-ids.d.ts +10 -0
  80. package/dist/channels/job-ids.js +10 -0
  81. package/dist/channels/jobs.d.ts +85 -0
  82. package/dist/channels/jobs.js +157 -0
  83. package/dist/channels/outbound.d.ts +60 -82
  84. package/dist/channels/outbound.js +165 -194
  85. package/dist/channels/supervisor.d.ts +88 -46
  86. package/dist/channels/supervisor.js +230 -132
  87. package/dist/channels/threads.d.ts +29 -8
  88. package/dist/channels/threads.js +71 -13
  89. package/dist/channels/webhook.d.ts +20 -14
  90. package/dist/channels/webhook.js +51 -20
  91. package/dist/config/load.d.ts +3 -2
  92. package/dist/config/load.js +3 -2
  93. package/dist/config/nacos-source.js +11 -2
  94. package/dist/config/schema.d.ts +1 -0
  95. package/dist/config/schema.js +12 -6
  96. package/dist/conversations/access.d.ts +29 -0
  97. package/dist/conversations/access.js +86 -0
  98. package/dist/conversations/artifacts.d.ts +11 -11
  99. package/dist/conversations/artifacts.js +36 -10
  100. package/dist/conversations/attachments.controller.d.ts +1 -1
  101. package/dist/conversations/attachments.controller.js +8 -6
  102. package/dist/conversations/attachments.module.d.ts +7 -0
  103. package/dist/conversations/attachments.module.js +25 -0
  104. package/dist/conversations/attachments.service.d.ts +30 -22
  105. package/dist/conversations/attachments.service.js +119 -46
  106. package/dist/conversations/conversations.controller.d.ts +8 -7
  107. package/dist/conversations/conversations.controller.js +59 -29
  108. package/dist/conversations/conversations.module.d.ts +8 -0
  109. package/dist/conversations/conversations.module.js +69 -0
  110. package/dist/conversations/conversations.service.d.ts +40 -38
  111. package/dist/conversations/conversations.service.js +130 -140
  112. package/dist/conversations/event-log.d.ts +39 -18
  113. package/dist/conversations/event-log.js +93 -27
  114. package/dist/conversations/events.d.ts +23 -3
  115. package/dist/conversations/events.js +26 -14
  116. package/dist/conversations/files.d.ts +10 -10
  117. package/dist/conversations/files.js +37 -11
  118. package/dist/conversations/idem-keys.d.ts +5 -0
  119. package/dist/conversations/idem-keys.js +5 -0
  120. package/dist/conversations/job-ids.d.ts +6 -0
  121. package/dist/conversations/job-ids.js +6 -0
  122. package/dist/conversations/outputs-read.d.ts +11 -11
  123. package/dist/conversations/outputs-read.js +31 -7
  124. package/dist/conversations/queue.d.ts +48 -56
  125. package/dist/conversations/queue.js +13 -289
  126. package/dist/conversations/queue.service.d.ts +60 -0
  127. package/dist/conversations/queue.service.js +343 -0
  128. package/dist/conversations/sandbox-status.d.ts +13 -10
  129. package/dist/conversations/sandbox-status.js +36 -8
  130. package/dist/conversations/titles.d.ts +71 -24
  131. package/dist/conversations/titles.js +159 -63
  132. package/dist/ctx/bus.js +9 -3
  133. package/dist/ctx/create-ctx.d.ts +6 -0
  134. package/dist/ctx/create-ctx.js +7 -9
  135. package/dist/ctx/lock.d.ts +7 -3
  136. package/dist/ctx/lock.js +9 -20
  137. package/dist/ctx/secrets.d.ts +10 -2
  138. package/dist/ctx/secrets.js +7 -3
  139. package/dist/db/kernel-schema.d.ts +4 -4
  140. package/dist/db/pool.d.ts +5 -0
  141. package/dist/db/pool.js +1 -0
  142. package/dist/errors.d.ts +1 -0
  143. package/dist/errors.js +1 -0
  144. package/dist/evals/budget.d.ts +42 -21
  145. package/dist/evals/budget.js +114 -62
  146. package/dist/evals/evals.module.d.ts +31 -0
  147. package/dist/evals/evals.module.js +114 -0
  148. package/dist/evals/jobs.d.ts +20 -0
  149. package/dist/evals/jobs.js +45 -0
  150. package/dist/evals/recorded-tools.d.ts +27 -1
  151. package/dist/evals/recorded-tools.js +85 -10
  152. package/dist/evals/run-replay.d.ts +61 -8
  153. package/dist/evals/run-replay.js +159 -85
  154. package/dist/evals/runs.controller.d.ts +1 -1
  155. package/dist/evals/runs.controller.js +17 -8
  156. package/dist/evals/runs.service.d.ts +23 -45
  157. package/dist/evals/runs.service.js +245 -234
  158. package/dist/evals/sets.controller.d.ts +1 -1
  159. package/dist/evals/sets.controller.js +17 -8
  160. package/dist/evals/sets.service.d.ts +22 -6
  161. package/dist/evals/sets.service.js +248 -194
  162. package/dist/evals/snapshot.d.ts +2 -2
  163. package/dist/evals/step-replay.d.ts +2 -2
  164. package/dist/evals/step-replay.js +1 -1
  165. package/dist/evals/trajectory.controller.d.ts +1 -1
  166. package/dist/evals/trajectory.controller.js +11 -7
  167. package/dist/evals/trajectory.d.ts +2 -2
  168. package/dist/evals/trajectory.service.d.ts +5 -4
  169. package/dist/evals/trajectory.service.js +30 -7
  170. package/dist/evals/worker.d.ts +44 -27
  171. package/dist/evals/worker.js +220 -121
  172. package/dist/extensions/admin-ops.d.ts +61 -33
  173. package/dist/extensions/admin-ops.js +248 -154
  174. package/dist/extensions/admin-view.d.ts +38 -27
  175. package/dist/extensions/admin-view.js +126 -55
  176. package/dist/extensions/approvals.d.ts +12 -8
  177. package/dist/extensions/approvals.js +73 -46
  178. package/dist/extensions/blobs.d.ts +27 -10
  179. package/dist/extensions/blobs.js +111 -45
  180. package/dist/extensions/bootstrap.d.ts +58 -31
  181. package/dist/extensions/bootstrap.js +175 -121
  182. package/dist/extensions/cli.d.ts +20 -10
  183. package/dist/extensions/cli.js +41 -96
  184. package/dist/extensions/config-issues.d.ts +7 -0
  185. package/dist/extensions/config-issues.js +31 -0
  186. package/dist/extensions/deployment-config-store.d.ts +49 -0
  187. package/dist/extensions/deployment-config-store.js +133 -0
  188. package/dist/extensions/deployment-config.d.ts +58 -67
  189. package/dist/extensions/deployment-config.js +202 -230
  190. package/dist/extensions/enabled.d.ts +5 -5
  191. package/dist/extensions/extensions.module.d.ts +8 -0
  192. package/dist/extensions/extensions.module.js +77 -0
  193. package/dist/extensions/hooks.d.ts +3 -2
  194. package/dist/extensions/hooks.js +1 -1
  195. package/dist/extensions/host.d.ts +72 -68
  196. package/dist/extensions/host.js +191 -152
  197. package/dist/extensions/installs.d.ts +49 -16
  198. package/dist/extensions/installs.js +128 -32
  199. package/dist/extensions/job-ids.d.ts +6 -0
  200. package/dist/extensions/job-ids.js +6 -0
  201. package/dist/extensions/lifecycle-topics.d.ts +18 -0
  202. package/dist/extensions/lifecycle-topics.js +18 -0
  203. package/dist/extensions/lifecycle.d.ts +35 -47
  204. package/dist/extensions/lifecycle.js +103 -39
  205. package/dist/extensions/locks.d.ts +33 -0
  206. package/dist/extensions/locks.js +86 -0
  207. package/dist/extensions/migrate-lock.d.ts +3 -4
  208. package/dist/extensions/org-config.controller.d.ts +1 -1
  209. package/dist/extensions/org-config.controller.js +8 -5
  210. package/dist/extensions/org-config.d.ts +48 -46
  211. package/dist/extensions/org-config.js +284 -226
  212. package/dist/extensions/registry.d.ts +50 -2
  213. package/dist/extensions/registry.js +89 -4
  214. package/dist/extensions/sources.d.ts +12 -8
  215. package/dist/extensions/sources.js +34 -13
  216. package/dist/files/files.module.d.ts +3 -0
  217. package/dist/files/files.module.js +22 -0
  218. package/dist/files/previewers.controller.d.ts +7 -2
  219. package/dist/files/previewers.controller.js +17 -9
  220. package/dist/files/previewers.d.ts +13 -18
  221. package/dist/files/previewers.js +83 -36
  222. package/dist/http/adapter.d.ts +3 -0
  223. package/dist/http/adapter.js +25 -0
  224. package/dist/http/api.module.d.ts +3 -110
  225. package/dist/http/api.module.js +47 -355
  226. package/dist/http/app.d.ts +11 -15
  227. package/dist/http/app.js +17 -62
  228. package/dist/http/error-filter.module.d.ts +5 -0
  229. package/dist/http/error-filter.module.js +18 -0
  230. package/dist/http/error.filter.js +2 -2
  231. package/dist/identity/accounts.d.ts +82 -29
  232. package/dist/identity/accounts.js +294 -175
  233. package/dist/identity/api-tokens.d.ts +11 -7
  234. package/dist/identity/api-tokens.js +71 -44
  235. package/dist/identity/audit.d.ts +7 -4
  236. package/dist/identity/audit.js +5 -1
  237. package/dist/identity/auth.controller.d.ts +11 -10
  238. package/dist/identity/auth.controller.js +31 -25
  239. package/dist/identity/auth.guard.d.ts +3 -3
  240. package/dist/identity/auth.guard.js +6 -4
  241. package/dist/identity/binding.d.ts +9 -11
  242. package/dist/identity/binding.js +41 -13
  243. package/dist/identity/enterprise-admin.d.ts +18 -12
  244. package/dist/identity/enterprise-admin.js +67 -13
  245. package/dist/identity/external-identity-lock.d.ts +17 -0
  246. package/dist/identity/external-identity-lock.js +39 -0
  247. package/dist/identity/external.d.ts +19 -15
  248. package/dist/identity/external.js +163 -125
  249. package/dist/identity/identity.module.d.ts +6 -0
  250. package/dist/identity/identity.module.js +56 -0
  251. package/dist/identity/me.controller.d.ts +16 -15
  252. package/dist/identity/me.controller.js +37 -31
  253. package/dist/identity/sessions.d.ts +12 -10
  254. package/dist/identity/sessions.js +74 -42
  255. package/dist/identity/settings.d.ts +20 -14
  256. package/dist/identity/settings.js +86 -58
  257. package/dist/identity/sso.controller.d.ts +7 -7
  258. package/dist/identity/sso.controller.js +13 -9
  259. package/dist/identity/sso.d.ts +9 -12
  260. package/dist/identity/sso.js +54 -24
  261. package/dist/inbox/inbox.module.d.ts +3 -0
  262. package/dist/inbox/inbox.module.js +22 -0
  263. package/dist/inbox/inbox.service.d.ts +7 -9
  264. package/dist/inbox/inbox.service.js +32 -11
  265. package/dist/index.d.ts +16 -11
  266. package/dist/index.js +9 -6
  267. package/dist/infra/cache/cache.module.d.ts +3 -0
  268. package/dist/infra/cache/cache.module.js +16 -0
  269. package/dist/infra/cache/cache.service.d.ts +21 -0
  270. package/dist/infra/cache/cache.service.js +80 -0
  271. package/dist/infra/cache/cacheable.decorator.d.ts +32 -0
  272. package/dist/infra/cache/cacheable.decorator.js +83 -0
  273. package/dist/infra/cli/kernel-cli.module.d.ts +66 -0
  274. package/dist/infra/cli/kernel-cli.module.js +165 -0
  275. package/dist/infra/close-within.d.ts +15 -0
  276. package/dist/infra/close-within.js +36 -0
  277. package/dist/infra/config/config.module.d.ts +13 -0
  278. package/dist/infra/config/config.module.js +39 -0
  279. package/dist/infra/config/kernel-config.service.d.ts +25 -0
  280. package/dist/infra/config/kernel-config.service.js +126 -0
  281. package/dist/infra/database/after-commit.d.ts +6 -0
  282. package/dist/infra/database/after-commit.js +9 -0
  283. package/dist/infra/database/database.module.d.ts +25 -0
  284. package/dist/infra/database/database.module.js +90 -0
  285. package/dist/infra/database/kernel-db.d.ts +22 -0
  286. package/dist/infra/database/kernel-db.js +65 -0
  287. package/dist/infra/database/transaction-host.d.ts +50 -0
  288. package/dist/infra/database/transaction-host.js +125 -0
  289. package/dist/infra/database/transactional.decorator.d.ts +15 -0
  290. package/dist/infra/database/transactional.decorator.js +27 -0
  291. package/dist/infra/database/xact-lock.d.ts +17 -0
  292. package/dist/infra/database/xact-lock.js +43 -0
  293. package/dist/infra/events/kernel-events.d.ts +96 -0
  294. package/dist/infra/events/kernel-events.js +65 -0
  295. package/dist/infra/health/health.controller.d.ts +26 -0
  296. package/dist/infra/health/health.controller.js +104 -0
  297. package/dist/infra/health/health.module.d.ts +9 -0
  298. package/dist/infra/health/health.module.js +24 -0
  299. package/dist/infra/health/health.options.d.ts +10 -0
  300. package/dist/infra/health/health.options.js +15 -0
  301. package/dist/infra/health/shutdown-state.d.ts +6 -0
  302. package/dist/infra/health/shutdown-state.js +2 -0
  303. package/dist/infra/lifecycle/graceful-shutdown.module.d.ts +6 -0
  304. package/dist/infra/lifecycle/graceful-shutdown.module.js +23 -0
  305. package/dist/infra/lifecycle/graceful-shutdown.service.d.ts +70 -0
  306. package/dist/infra/lifecycle/graceful-shutdown.service.js +135 -0
  307. package/dist/infra/lifecycle/process-guards.d.ts +52 -0
  308. package/dist/infra/lifecycle/process-guards.js +86 -0
  309. package/dist/infra/lifecycle/shutdown-signals.d.ts +30 -0
  310. package/dist/infra/lifecycle/shutdown-signals.js +48 -0
  311. package/dist/infra/lock/key-template.d.ts +13 -0
  312. package/dist/infra/lock/key-template.js +46 -0
  313. package/dist/infra/lock/lock.module.d.ts +3 -0
  314. package/dist/infra/lock/lock.module.js +16 -0
  315. package/dist/infra/lock/lock.service.d.ts +120 -0
  316. package/dist/infra/lock/lock.service.js +343 -0
  317. package/dist/infra/lock/shared-lease.d.ts +44 -0
  318. package/dist/infra/lock/shared-lease.js +121 -0
  319. package/dist/infra/lock/with-lock.decorator.d.ts +28 -0
  320. package/dist/infra/lock/with-lock.decorator.js +49 -0
  321. package/dist/infra/logging/logging.module.d.ts +16 -0
  322. package/dist/infra/logging/logging.module.js +34 -0
  323. package/dist/infra/queue/configured-processor.d.ts +18 -0
  324. package/dist/infra/queue/configured-processor.js +23 -0
  325. package/dist/infra/queue/job-failure.d.ts +18 -0
  326. package/dist/infra/queue/job-failure.js +26 -0
  327. package/dist/infra/queue/queue-shutdown.d.ts +27 -0
  328. package/dist/infra/queue/queue-shutdown.js +81 -0
  329. package/dist/infra/queue/queue.module.d.ts +16 -0
  330. package/dist/infra/queue/queue.module.js +61 -0
  331. package/dist/infra/queue/redis-connection.d.ts +7 -0
  332. package/dist/infra/queue/redis-connection.js +18 -0
  333. package/dist/infra/queue/retired-schedulers.d.ts +7 -0
  334. package/dist/infra/queue/retired-schedulers.js +9 -0
  335. package/dist/infra/queue/run-job.d.ts +16 -0
  336. package/dist/infra/queue/run-job.js +19 -0
  337. package/dist/infra/redis/redis.module.d.ts +24 -0
  338. package/dist/infra/redis/redis.module.js +87 -0
  339. package/dist/infra/schedule/cron-tick.d.ts +12 -0
  340. package/dist/infra/schedule/cron-tick.js +25 -0
  341. package/dist/infra/schedule/locked-cron.decorator.d.ts +27 -0
  342. package/dist/infra/schedule/locked-cron.decorator.js +53 -0
  343. package/dist/infra/schedule/locked-interval.d.ts +69 -0
  344. package/dist/infra/schedule/locked-interval.js +190 -0
  345. package/dist/infra/schedule/locked-tick.d.ts +90 -0
  346. package/dist/infra/schedule/locked-tick.js +137 -0
  347. package/dist/infra/schedule/schedule.module.d.ts +8 -0
  348. package/dist/infra/schedule/schedule.module.js +27 -0
  349. package/dist/infra/schedule/scheduled-runs.d.ts +69 -0
  350. package/dist/infra/schedule/scheduled-runs.js +163 -0
  351. package/dist/infra/swagger/swagger.d.ts +16 -0
  352. package/dist/infra/swagger/swagger.js +31 -0
  353. package/dist/infra/throttler/credential-throttler.d.ts +35 -0
  354. package/dist/infra/throttler/credential-throttler.js +77 -0
  355. package/dist/infra/throttler/named-throttlers.d.ts +31 -0
  356. package/dist/infra/throttler/named-throttlers.js +119 -0
  357. package/dist/infra/throttler/redis-throttler-storage.d.ts +38 -0
  358. package/dist/infra/throttler/redis-throttler-storage.js +130 -0
  359. package/dist/infra/throttler/throttler.guard.d.ts +23 -0
  360. package/dist/infra/throttler/throttler.guard.js +68 -0
  361. package/dist/infra/throttler/throttler.module.d.ts +15 -0
  362. package/dist/infra/throttler/throttler.module.js +53 -0
  363. package/dist/infra/tokens.d.ts +15 -0
  364. package/dist/infra/tokens.js +15 -0
  365. package/dist/infra/validation/create-zod-dto.d.ts +23 -0
  366. package/dist/infra/validation/create-zod-dto.js +35 -0
  367. package/dist/infra/validation/parse-with-zod.d.ts +7 -0
  368. package/dist/infra/validation/parse-with-zod.js +12 -0
  369. package/dist/infra/validation/validation.module.d.ts +3 -0
  370. package/dist/infra/validation/validation.module.js +16 -0
  371. package/dist/infra/validation/zod-params.d.ts +7 -0
  372. package/dist/infra/validation/zod-params.js +42 -0
  373. package/dist/infra/validation/zod-validation.pipe.d.ts +11 -0
  374. package/dist/infra/validation/zod-validation.pipe.js +31 -0
  375. package/dist/kernel.d.ts +9 -244
  376. package/dist/kernel.js +8 -1305
  377. package/dist/kernel.module.d.ts +17 -0
  378. package/dist/kernel.module.js +136 -0
  379. package/dist/lifecycle/kernel-lifecycle.d.ts +140 -0
  380. package/dist/lifecycle/kernel-lifecycle.js +456 -0
  381. package/dist/lifecycle/tokens.d.ts +3 -0
  382. package/dist/lifecycle/tokens.js +3 -0
  383. package/dist/log-context.d.ts +2 -0
  384. package/dist/log-context.js +4 -0
  385. package/dist/models/models.module.d.ts +3 -0
  386. package/dist/models/models.module.js +24 -0
  387. package/dist/models/prices.d.ts +8 -2
  388. package/dist/models/prices.js +65 -37
  389. package/dist/models/purposes.controller.d.ts +1 -1
  390. package/dist/models/purposes.controller.js +5 -6
  391. package/dist/models/purposes.d.ts +35 -13
  392. package/dist/models/purposes.js +101 -51
  393. package/dist/orgs/directory-sync.controller.d.ts +1 -1
  394. package/dist/orgs/directory-sync.controller.js +2 -2
  395. package/dist/orgs/directory-sync.d.ts +61 -31
  396. package/dist/orgs/directory-sync.js +212 -125
  397. package/dist/orgs/invitations.controller.d.ts +8 -8
  398. package/dist/orgs/invitations.controller.js +27 -26
  399. package/dist/orgs/invitations.service.d.ts +12 -9
  400. package/dist/orgs/invitations.service.js +130 -92
  401. package/dist/orgs/job-ids.d.ts +8 -0
  402. package/dist/orgs/job-ids.js +8 -0
  403. package/dist/orgs/members.service.d.ts +19 -12
  404. package/dist/orgs/members.service.js +161 -117
  405. package/dist/orgs/offboarding.d.ts +54 -57
  406. package/dist/orgs/offboarding.js +161 -71
  407. package/dist/orgs/org-lock.d.ts +28 -19
  408. package/dist/orgs/org-lock.js +81 -35
  409. package/dist/orgs/org.guard.d.ts +1 -1
  410. package/dist/orgs/org.guard.js +2 -2
  411. package/dist/orgs/orgs.controller.d.ts +13 -13
  412. package/dist/orgs/orgs.controller.js +29 -17
  413. package/dist/orgs/orgs.module.d.ts +6 -0
  414. package/dist/orgs/orgs.module.js +68 -0
  415. package/dist/orgs/orgs.service.d.ts +30 -19
  416. package/dist/orgs/orgs.service.js +139 -86
  417. package/dist/orgs/settings.controller.d.ts +1 -1
  418. package/dist/orgs/settings.controller.js +8 -6
  419. package/dist/orgs/settings.service.d.ts +16 -10
  420. package/dist/orgs/settings.service.js +77 -48
  421. package/dist/overrides.d.ts +56 -0
  422. package/dist/overrides.js +30 -0
  423. package/dist/roles/gateway-role.d.ts +43 -0
  424. package/dist/roles/gateway-role.js +98 -0
  425. package/dist/roles/gateway.module.d.ts +8 -0
  426. package/dist/roles/gateway.module.js +28 -0
  427. package/dist/roles/worker-role.d.ts +63 -0
  428. package/dist/roles/worker-role.js +144 -0
  429. package/dist/roles/worker.module.d.ts +14 -0
  430. package/dist/roles/worker.module.js +90 -0
  431. package/dist/runtime/abort.js +19 -2
  432. package/dist/runtime/checkpointer.d.ts +8 -3
  433. package/dist/runtime/checkpointer.js +87 -55
  434. package/dist/runtime/context/build.d.ts +6 -6
  435. package/dist/runtime/context/build.js +18 -8
  436. package/dist/runtime/context/claude-tools.d.ts +2 -1
  437. package/dist/runtime/context/claude-tools.js +9 -10
  438. package/dist/runtime/context/legacy-text.d.ts +22 -0
  439. package/dist/runtime/context/legacy-text.js +37 -0
  440. package/dist/runtime/context/skills.d.ts +29 -11
  441. package/dist/runtime/context/skills.js +37 -30
  442. package/dist/runtime/conversation-lock.d.ts +20 -11
  443. package/dist/runtime/conversation-lock.js +62 -72
  444. package/dist/runtime/hook-calls.d.ts +3 -3
  445. package/dist/runtime/hook-calls.js +1 -6
  446. package/dist/runtime/job-ids.d.ts +10 -0
  447. package/dist/runtime/job-ids.js +10 -0
  448. package/dist/runtime/langgraph-loop.js +1 -1
  449. package/dist/runtime/loop.d.ts +8 -1
  450. package/dist/runtime/loop.js +14 -0
  451. package/dist/runtime/maintenance-queue.d.ts +10 -0
  452. package/dist/runtime/maintenance-queue.js +10 -0
  453. package/dist/runtime/maintenance.d.ts +45 -74
  454. package/dist/runtime/maintenance.js +139 -137
  455. package/dist/runtime/model-call.d.ts +7 -4
  456. package/dist/runtime/model-call.js +25 -58
  457. package/dist/runtime/providers.d.ts +17 -6
  458. package/dist/runtime/providers.js +66 -25
  459. package/dist/runtime/quota.d.ts +17 -3
  460. package/dist/runtime/quota.js +27 -2
  461. package/dist/runtime/retired-schedulers.d.ts +7 -0
  462. package/dist/runtime/retired-schedulers.js +31 -0
  463. package/dist/runtime/run-control.d.ts +33 -0
  464. package/dist/runtime/run-control.js +77 -0
  465. package/dist/runtime/run-finish.d.ts +27 -18
  466. package/dist/runtime/run-finish.js +98 -51
  467. package/dist/runtime/run-jobs.d.ts +48 -0
  468. package/dist/runtime/run-jobs.js +95 -0
  469. package/dist/runtime/run-processors.d.ts +60 -0
  470. package/dist/runtime/run-processors.js +185 -0
  471. package/dist/runtime/run-queue.d.ts +32 -57
  472. package/dist/runtime/run-queue.js +291 -295
  473. package/dist/runtime/run-steps.d.ts +39 -0
  474. package/dist/runtime/run-steps.js +96 -0
  475. package/dist/runtime/run-worker.d.ts +122 -76
  476. package/dist/runtime/run-worker.js +343 -229
  477. package/dist/runtime/runtime.module.d.ts +10 -0
  478. package/dist/runtime/runtime.module.js +112 -0
  479. package/dist/runtime/step-log.d.ts +40 -0
  480. package/dist/runtime/step-log.js +94 -0
  481. package/dist/runtime/stream.controller.d.ts +5 -8
  482. package/dist/runtime/stream.controller.js +14 -12
  483. package/dist/runtime/stream.d.ts +24 -6
  484. package/dist/runtime/stream.js +78 -7
  485. package/dist/runtime/subagents/child.d.ts +3 -44
  486. package/dist/runtime/subagents/child.js +0 -79
  487. package/dist/runtime/subagents/definition.d.ts +5 -10
  488. package/dist/runtime/subagents/definition.js +13 -14
  489. package/dist/runtime/subagents/dispatch.d.ts +89 -8
  490. package/dist/runtime/subagents/dispatch.js +137 -142
  491. package/dist/runtime/subagents/limits.d.ts +9 -4
  492. package/dist/runtime/subagents/limits.js +4 -2
  493. package/dist/runtime/subagents/org-agents.d.ts +4 -4
  494. package/dist/runtime/subagents/org-agents.js +3 -2
  495. package/dist/runtime/subagents/progress.d.ts +2 -2
  496. package/dist/runtime/subagents/roster.d.ts +4 -4
  497. package/dist/runtime/subagents/roster.js +2 -2
  498. package/dist/runtime/subagents/skill-fork.d.ts +8 -9
  499. package/dist/runtime/subagents/skill-fork.js +17 -6
  500. package/dist/runtime/subagents/subagents.service.d.ts +40 -0
  501. package/dist/runtime/subagents/subagents.service.js +101 -0
  502. package/dist/runtime/usage-report.d.ts +94 -52
  503. package/dist/runtime/usage-report.js +200 -100
  504. package/dist/runtime/waits.d.ts +127 -59
  505. package/dist/runtime/waits.js +433 -210
  506. package/dist/sandbox/job-ids.d.ts +10 -0
  507. package/dist/sandbox/job-ids.js +10 -0
  508. package/dist/sandbox/jobs.d.ts +41 -0
  509. package/dist/sandbox/jobs.js +113 -0
  510. package/dist/sandbox/leases.d.ts +39 -31
  511. package/dist/sandbox/leases.js +117 -257
  512. package/dist/sandbox/providers.d.ts +19 -0
  513. package/dist/sandbox/providers.js +38 -0
  514. package/dist/sandbox/sandbox.module.d.ts +8 -0
  515. package/dist/sandbox/sandbox.module.js +30 -0
  516. package/dist/sandbox/sandbox.service.d.ts +24 -29
  517. package/dist/sandbox/sandbox.service.js +106 -75
  518. package/dist/skills/catalog.d.ts +37 -24
  519. package/dist/skills/catalog.js +100 -57
  520. package/dist/skills/changes.controller.d.ts +4 -4
  521. package/dist/skills/changes.controller.js +15 -9
  522. package/dist/skills/changes.service.d.ts +30 -20
  523. package/dist/skills/changes.service.js +425 -367
  524. package/dist/skills/invocable.controller.d.ts +1 -1
  525. package/dist/skills/invocable.controller.js +8 -5
  526. package/dist/skills/invocation-keys.d.ts +1 -1
  527. package/dist/skills/invocation-keys.js +1 -1
  528. package/dist/skills/invoke.d.ts +17 -16
  529. package/dist/skills/invoke.js +53 -21
  530. package/dist/skills/skills.controller.d.ts +1 -1
  531. package/dist/skills/skills.controller.js +11 -6
  532. package/dist/skills/skills.module.d.ts +6 -0
  533. package/dist/skills/skills.module.js +30 -0
  534. package/dist/skills/skills.service.d.ts +47 -30
  535. package/dist/skills/skills.service.js +221 -158
  536. package/dist/storage/job-ids.d.ts +6 -0
  537. package/dist/storage/job-ids.js +6 -0
  538. package/dist/storage/purge.d.ts +22 -7
  539. package/dist/storage/purge.js +55 -3
  540. package/dist/storage/storage.module.d.ts +6 -0
  541. package/dist/storage/storage.module.js +23 -0
  542. package/dist/storage/storage.service.d.ts +18 -4
  543. package/dist/storage/storage.service.js +44 -3
  544. package/dist/tools/approvals.controller.d.ts +1 -1
  545. package/dist/tools/approvals.controller.js +12 -8
  546. package/dist/tools/approvals.service.d.ts +33 -25
  547. package/dist/tools/approvals.service.js +343 -259
  548. package/dist/tools/breaker.d.ts +2 -2
  549. package/dist/tools/breaker.js +21 -3
  550. package/dist/tools/builtin-names.d.ts +73 -0
  551. package/dist/tools/builtin-names.js +116 -0
  552. package/dist/tools/builtins/agent.d.ts +7 -7
  553. package/dist/tools/builtins/agent.js +7 -11
  554. package/dist/tools/builtins/ask-user.d.ts +3 -3
  555. package/dist/tools/builtins/ask-user.js +3 -3
  556. package/dist/tools/builtins/builtin-tools.d.ts +21 -0
  557. package/dist/tools/builtins/builtin-tools.js +80 -0
  558. package/dist/tools/builtins/read-tool-output.d.ts +3 -3
  559. package/dist/tools/builtins/read-tool-output.js +3 -3
  560. package/dist/tools/builtins/sandbox/bash.d.ts +5 -5
  561. package/dist/tools/builtins/sandbox/bash.js +33 -30
  562. package/dist/tools/builtins/sandbox/common.d.ts +5 -4
  563. package/dist/tools/builtins/sandbox/common.js +2 -2
  564. package/dist/tools/builtins/sandbox/deliver.d.ts +1 -1
  565. package/dist/tools/builtins/sandbox/deliver.js +13 -13
  566. package/dist/tools/builtins/sandbox/edit.d.ts +1 -1
  567. package/dist/tools/builtins/sandbox/edit.js +42 -31
  568. package/dist/tools/builtins/sandbox/file-state.d.ts +34 -0
  569. package/dist/tools/builtins/sandbox/file-state.js +34 -0
  570. package/dist/tools/builtins/sandbox/glob-match.d.ts +1 -1
  571. package/dist/tools/builtins/sandbox/glob-match.js +1 -1
  572. package/dist/tools/builtins/sandbox/glob.d.ts +1 -1
  573. package/dist/tools/builtins/sandbox/glob.js +6 -6
  574. package/dist/tools/builtins/sandbox/grep.d.ts +7 -4
  575. package/dist/tools/builtins/sandbox/grep.js +149 -32
  576. package/dist/tools/builtins/sandbox/index.d.ts +1 -1
  577. package/dist/tools/builtins/sandbox/index.js +1 -1
  578. package/dist/tools/builtins/sandbox/read.d.ts +2 -2
  579. package/dist/tools/builtins/sandbox/read.js +22 -15
  580. package/dist/tools/builtins/sandbox/write.d.ts +1 -1
  581. package/dist/tools/builtins/sandbox/write.js +38 -34
  582. package/dist/tools/builtins/skill-load.d.ts +6 -6
  583. package/dist/tools/builtins/skill-load.js +33 -17
  584. package/dist/tools/builtins/skill-write.d.ts +4 -4
  585. package/dist/tools/builtins/skill-write.js +10 -10
  586. package/dist/tools/builtins/tool-search.d.ts +13 -9
  587. package/dist/tools/builtins/tool-search.js +25 -14
  588. package/dist/tools/canonical-json.d.ts +6 -0
  589. package/dist/tools/canonical-json.js +16 -0
  590. package/dist/tools/connector-content.controller.d.ts +1 -1
  591. package/dist/tools/connector-content.controller.js +11 -6
  592. package/dist/tools/connector-content.d.ts +12 -15
  593. package/dist/tools/connector-content.js +53 -18
  594. package/dist/tools/connectors.controller.d.ts +1 -1
  595. package/dist/tools/connectors.controller.js +21 -10
  596. package/dist/tools/connectors.service.d.ts +31 -13
  597. package/dist/tools/connectors.service.js +438 -348
  598. package/dist/tools/credentials.d.ts +17 -20
  599. package/dist/tools/credentials.js +55 -34
  600. package/dist/tools/display-names.d.ts +9 -0
  601. package/dist/tools/display-names.js +24 -0
  602. package/dist/tools/drift.d.ts +29 -41
  603. package/dist/tools/drift.js +116 -84
  604. package/dist/tools/elicitation.js +1 -1
  605. package/dist/tools/info.d.ts +32 -13
  606. package/dist/tools/info.js +88 -39
  607. package/dist/tools/job-ids.d.ts +13 -0
  608. package/dist/tools/job-ids.js +15 -0
  609. package/dist/tools/jobs.d.ts +24 -0
  610. package/dist/tools/jobs.js +69 -0
  611. package/dist/tools/legacy-data.d.ts +34 -0
  612. package/dist/tools/legacy-data.js +76 -0
  613. package/dist/tools/legacy-keys.d.ts +51 -0
  614. package/dist/tools/legacy-keys.js +115 -0
  615. package/dist/tools/naming.d.ts +1 -5
  616. package/dist/tools/naming.js +1 -7
  617. package/dist/tools/oauth/flow-paths.d.ts +16 -0
  618. package/dist/tools/oauth/flow-paths.js +38 -0
  619. package/dist/tools/oauth/flow.d.ts +30 -30
  620. package/dist/tools/oauth/flow.js +109 -81
  621. package/dist/tools/oauth/oauth.controller.d.ts +3 -3
  622. package/dist/tools/oauth/oauth.controller.js +12 -9
  623. package/dist/tools/oauth/tokens.d.ts +11 -3
  624. package/dist/tools/oauth/tokens.js +15 -14
  625. package/dist/tools/outputs.d.ts +13 -4
  626. package/dist/tools/outputs.js +48 -4
  627. package/dist/tools/pipeline.d.ts +72 -50
  628. package/dist/tools/pipeline.js +239 -100
  629. package/dist/tools/policy.d.ts +3 -16
  630. package/dist/tools/policy.js +13 -19
  631. package/dist/tools/questions.controller.d.ts +2 -2
  632. package/dist/tools/questions.controller.js +9 -6
  633. package/dist/tools/questions.service.d.ts +26 -25
  634. package/dist/tools/questions.service.js +201 -142
  635. package/dist/tools/registry.d.ts +43 -38
  636. package/dist/tools/registry.js +100 -72
  637. package/dist/tools/resources.d.ts +1 -1
  638. package/dist/tools/resources.js +1 -1
  639. package/dist/tools/specs.d.ts +5 -4
  640. package/dist/tools/specs.js +3 -1
  641. package/dist/tools/tools.module.d.ts +10 -0
  642. package/dist/tools/tools.module.js +91 -0
  643. package/dist/ui/call-extension.d.ts +16 -0
  644. package/dist/ui/call-extension.js +38 -0
  645. package/dist/ui/embed-token.d.ts +9 -5
  646. package/dist/ui/embed-token.js +34 -6
  647. package/dist/ui/ui-stream.d.ts +22 -17
  648. package/dist/ui/ui-stream.js +72 -12
  649. package/dist/ui/ui.module.d.ts +7 -0
  650. package/dist/ui/ui.module.js +28 -0
  651. package/dist/ui/views.controller.d.ts +14 -12
  652. package/dist/ui/views.controller.js +32 -25
  653. package/dist/ui/views.d.ts +9 -57
  654. package/dist/ui/views.js +43 -45
  655. package/package.json +10 -3
  656. package/src/migrations/0063_tool_keys_claude_code.sql +220 -0
  657. package/dist/http/health.controller.d.ts +0 -26
  658. package/dist/http/health.controller.js +0 -79
  659. package/dist/http/tokens.d.ts +0 -131
  660. package/dist/http/tokens.js +0 -131
  661. package/dist/http/zod.pipe.d.ts +0 -8
  662. package/dist/http/zod.pipe.js +0 -14
  663. package/dist/identity/rate-limit.d.ts +0 -55
  664. package/dist/identity/rate-limit.js +0 -121
  665. package/dist/sandbox/lifecycle.d.ts +0 -21
  666. package/dist/sandbox/lifecycle.js +0 -68
  667. package/dist/tools/builtins/sandbox/names.d.ts +0 -7
  668. package/dist/tools/builtins/sandbox/names.js +0 -20
  669. /package/dist/http/{gateway.module.d.ts → gateway-routes.d.ts} +0 -0
  670. /package/dist/http/{gateway.module.js → gateway-routes.js} +0 -0
@@ -1,18 +1,34 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
8
+ return function (target, key) { decorator(target, key, paramIndex); }
9
+ };
1
10
  import { randomUUID } from "node:crypto";
2
11
  import { CATALOG_ITEM_NAME_RE, marketplaceEntryVersion, PLUGIN_MANIFEST_FILE, parseMarketplaceManifest, parsePluginManifest, SDK_VERSION, SEMVER_VERSION_RE, } from "@capybara-hq/plugin-sdk";
12
+ import { Inject, Injectable } from "@nestjs/common";
3
13
  import { sql } from "kysely";
4
14
  import semver from "semver";
5
15
  import { MARKETPLACE_MAX_MIRRORS } from "../config/schema.js";
6
16
  import { ConfigError } from "../config/types.js";
7
17
  import { createSecrets } from "../ctx/secrets.js";
8
18
  import { ApiError } from "../errors.js";
9
- import { DEPLOYMENT_SECRETS_ORG } from "../extensions/deployment-config.js";
19
+ import { DEPLOYMENT_SECRETS_ORG } from "../extensions/deployment-config-store.js";
10
20
  import { audit } from "../identity/audit.js";
11
- import { lockEnterpriseAdminsAndAuthorize } from "../identity/enterprise-admin.js";
21
+ import { EnterpriseAdminLock } from "../identity/enterprise-admin.js";
22
+ import { KernelConfigService } from "../infra/config/kernel-config.service.js";
23
+ import { KernelDb } from "../infra/database/kernel-db.js";
24
+ import { TransactionHost } from "../infra/database/transaction-host.js";
25
+ import { Transactional } from "../infra/database/transactional.decorator.js";
26
+ import { KERNEL_LOGGER, KEYRING } from "../infra/tokens.js";
12
27
  import { KERNEL_VERSION } from "../version.js";
13
28
  import { CLAUDE_PLUGIN_FILE } from "./claude/manifest.js";
14
29
  import { CLAUDE_MARKETPLACE_FILE, parseClaudeMarketplace, } from "./claude/marketplace.js";
15
30
  import { expandGitUrl, GitSourceError, gitErrorDetails, gitLocationIdentity, gitUrlIdentity, normalGitPath, readGitTreeAndOids, resolveGitCommit, } from "./git-source.js";
31
+ import { CatalogSourceLock } from "./locks.js";
16
32
  import { fetchMarketplaceManifest, MarketplaceFetchError, MarketplaceInvalidError, marketplaceNetPolicy, marketplaceUrlProblem, } from "./marketplace-fetch.js";
17
33
  import { compareVersions, newestFirst, sameRelease } from "./versions.js";
18
34
  /** 官方清单来源的 id。 */
@@ -346,10 +362,28 @@ export async function loadMarketplaceEntry(db, config, sourceId, name, version)
346
362
  * status `error`. A status change audits `marketplace.refreshed` and logs once. Stateless, shared
347
363
  * by every replica.
348
364
  */
349
- export class MarketplacesService {
350
- d;
351
- constructor(d) {
352
- this.d = d;
365
+ let MarketplacesService = class MarketplacesService {
366
+ kdb;
367
+ adminLock;
368
+ sourceLock;
369
+ config;
370
+ keyring;
371
+ log;
372
+ txHost;
373
+ constructor(kdb,
374
+ /** The enterprise admin lock (identity/enterprise-admin.ts): joins the caller's transaction. */
375
+ adminLock, sourceLock, config, keyring, log, txHost) {
376
+ this.kdb = kdb;
377
+ this.adminLock = adminLock;
378
+ this.sourceLock = sourceLock;
379
+ this.config = config;
380
+ this.keyring = keyring;
381
+ this.log = log;
382
+ this.txHost = txHost;
383
+ }
384
+ /** The kernel-schema handle of the current context (the transaction, else the pool). */
385
+ get db() {
386
+ return this.kdb.db;
353
387
  }
354
388
  /**
355
389
  * Creates / updates the official marketplace from config (name, URL, its form per
@@ -360,14 +394,14 @@ export class MarketplacesService {
360
394
  * without the schema).
361
395
  */
362
396
  async syncOfficialFromConfig() {
363
- const o = this.d.config().marketplaces.official;
397
+ const o = this.config.get().marketplaces.official;
364
398
  const { form, url } = marketplaceForm(o.url);
365
399
  if (form === "git" && o.mirrors.length > 0) {
366
400
  throw new ConfigError("invalid configuration:\n - marketplaces.official.mirrors: a git marketplace has no mirrors (point marketplaces.official.url at a mirror repository instead)");
367
401
  }
368
402
  const mirrors = JSON.stringify(o.mirrors);
369
403
  const same = sql `marketplaces.url = excluded.url AND marketplaces.form = excluded.form`;
370
- await this.d.db
404
+ await this.db
371
405
  .insertInto("marketplaces")
372
406
  .values({
373
407
  id: OFFICIAL_MARKETPLACE_ID,
@@ -393,7 +427,7 @@ export class MarketplacesService {
393
427
  }
394
428
  /** 全部来源(official 在前,其余按创建时间)。 */
395
429
  async list() {
396
- const rows = (await this.d.db
430
+ const rows = (await this.db
397
431
  .selectFrom("marketplaces")
398
432
  .selectAll()
399
433
  .orderBy("builtin", "desc")
@@ -403,7 +437,7 @@ export class MarketplacesService {
403
437
  return this.views(rows);
404
438
  }
405
439
  async get(id) {
406
- const row = (await this.d.db
440
+ const row = (await this.db
407
441
  .selectFrom("marketplaces")
408
442
  .selectAll()
409
443
  .where("id", "=", id)
@@ -425,41 +459,44 @@ export class MarketplacesService {
425
459
  if (input.token !== undefined)
426
460
  this.checkToken(input.token);
427
461
  const id = randomUUID();
428
- await this.d.db.transaction().execute(async (trx) => {
429
- await lockEnterpriseAdminsAndAuthorize(trx, actor);
430
- await trx
431
- .insertInto("marketplaces")
432
- .values({
433
- id,
462
+ await this.writeAdd(actor, id, { ...input, name, form, url }, opts);
463
+ return this.get(id);
464
+ }
465
+ async writeAdd(actor, id, input, opts) {
466
+ const { name, url, form } = input;
467
+ const t = this.db;
468
+ await this.adminLock.lockAndAuthorize(actor);
469
+ await t
470
+ .insertInto("marketplaces")
471
+ .values({
472
+ id,
473
+ name,
474
+ url,
475
+ form,
476
+ ref: input.ref ?? null,
477
+ mirrors: JSON.stringify(input.mirrors ?? []),
478
+ builtin: false,
479
+ enabled: true,
480
+ created_by: actor,
481
+ })
482
+ .execute();
483
+ if (input.token !== undefined) {
484
+ await this.secrets().set(DEPLOYMENT_SECRETS_ORG, tokenKey(id), input.token);
485
+ }
486
+ await audit(t, {
487
+ actorAccountId: actor,
488
+ ...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
489
+ action: "marketplace.added",
490
+ target: id,
491
+ detail: {
434
492
  name,
435
493
  url,
436
494
  form,
437
- ref: input.ref ?? null,
438
- mirrors: JSON.stringify(input.mirrors ?? []),
439
- builtin: false,
440
- enabled: true,
441
- created_by: actor,
442
- })
443
- .execute();
444
- if (input.token !== undefined) {
445
- await this.secrets(trx).set(DEPLOYMENT_SECRETS_ORG, tokenKey(id), input.token);
446
- }
447
- await audit(trx, {
448
- actorAccountId: actor,
449
- ...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
450
- action: "marketplace.added",
451
- target: id,
452
- detail: {
453
- name,
454
- url,
455
- form,
456
- ...(input.ref !== undefined && { ref: input.ref }),
457
- mirrors: input.mirrors ?? [],
458
- hasToken: input.token !== undefined,
459
- },
460
- });
495
+ ...(input.ref !== undefined && { ref: input.ref }),
496
+ mirrors: input.mirrors ?? [],
497
+ hasToken: input.token !== undefined,
498
+ },
461
499
  });
462
- return this.get(id);
463
500
  }
464
501
  /**
465
502
  * Updates an enterprise marketplace (audit `marketplace.updated`, listing the changed fields, the
@@ -472,101 +509,103 @@ export class MarketplacesService {
472
509
  */
473
510
  async update(actor, id, patch, opts = {}) {
474
511
  const name = patch.name !== undefined ? this.checkName(patch.name) : undefined;
475
- await this.d.db.transaction().execute(async (trx) => {
476
- await lockEnterpriseAdminsAndAuthorize(trx, actor);
477
- const row = (await trx
478
- .selectFrom("marketplaces")
479
- .selectAll()
480
- .where("id", "=", id)
481
- .forUpdate()
482
- .executeTakeFirst());
483
- if (!row)
484
- throw notFound();
485
- if (row.builtin &&
486
- (name !== undefined ||
487
- patch.url !== undefined ||
488
- patch.form !== undefined ||
489
- patch.ref !== undefined ||
490
- patch.mirrors !== undefined ||
491
- patch.token !== undefined)) {
492
- throw builtinErr("changed");
493
- }
494
- const target = patch.url !== undefined || patch.form !== undefined
495
- ? marketplaceForm(patch.url ?? row.url, patch.form)
496
- : { form: row.form, url: row.url };
497
- // Switching form clears the other form's fields unless the patch sets them: the ref when
498
- // becoming http, the mirrors when becoming git
499
- const switched = target.form !== row.form;
500
- const ref = patch.ref !== undefined ? patch.ref : switched && target.form === "http" ? null : row.ref;
501
- const mirrors = patch.mirrors ?? (switched && target.form === "git" ? [] : row.mirrors);
502
- this.checkUrls(target.url, mirrors);
503
- this.checkGitFields(target.form, ref, mirrors);
504
- if (typeof patch.token === "string")
505
- this.checkToken(patch.token);
506
- const changed = [];
507
- const set = {};
508
- if (name !== undefined && name !== row.name) {
509
- set.name = name;
510
- changed.push("name");
511
- }
512
- if (target.url !== row.url) {
513
- set.url = target.url;
514
- changed.push("url");
515
- }
516
- if (target.form !== row.form) {
517
- set.form = target.form;
518
- changed.push("form");
519
- }
520
- if (ref !== row.ref) {
521
- set.ref = ref;
522
- changed.push("ref");
523
- }
524
- if (set.url !== undefined || set.form !== undefined || set.ref !== undefined) {
525
- set.etag = null;
526
- set.last_commit = null;
527
- }
528
- if (JSON.stringify(mirrors) !== JSON.stringify(row.mirrors)) {
529
- set.mirrors = JSON.stringify(mirrors);
530
- changed.push("mirrors");
531
- }
532
- if (patch.enabled !== undefined && patch.enabled !== row.enabled) {
533
- set.enabled = patch.enabled;
534
- changed.push("enabled");
535
- }
536
- if (Object.keys(set).length > 0) {
537
- await trx.updateTable("marketplaces").set(set).where("id", "=", id).execute();
538
- }
539
- if (patch.token !== undefined) {
540
- const secrets = this.secrets(trx);
541
- const had = (await secrets.get(DEPLOYMENT_SECRETS_ORG, tokenKey(id))) !== null;
542
- if (patch.token === null) {
543
- if (had) {
544
- await secrets.delete(DEPLOYMENT_SECRETS_ORG, tokenKey(id));
545
- changed.push("token");
546
- }
547
- }
548
- else {
549
- await secrets.set(DEPLOYMENT_SECRETS_ORG, tokenKey(id), patch.token);
512
+ await this.writeUpdate(actor, id, name, patch, opts);
513
+ return this.get(id);
514
+ }
515
+ async writeUpdate(actor, id, name, patch, opts) {
516
+ const t = this.db;
517
+ await this.adminLock.lockAndAuthorize(actor);
518
+ const row = (await t
519
+ .selectFrom("marketplaces")
520
+ .selectAll()
521
+ .where("id", "=", id)
522
+ .forUpdate()
523
+ .executeTakeFirst());
524
+ if (!row)
525
+ throw notFound();
526
+ if (row.builtin &&
527
+ (name !== undefined ||
528
+ patch.url !== undefined ||
529
+ patch.form !== undefined ||
530
+ patch.ref !== undefined ||
531
+ patch.mirrors !== undefined ||
532
+ patch.token !== undefined)) {
533
+ throw builtinErr("changed");
534
+ }
535
+ const target = patch.url !== undefined || patch.form !== undefined
536
+ ? marketplaceForm(patch.url ?? row.url, patch.form)
537
+ : { form: row.form, url: row.url };
538
+ // Switching form clears the other form's fields unless the patch sets them: the ref when
539
+ // becoming http, the mirrors when becoming git
540
+ const switched = target.form !== row.form;
541
+ const ref = patch.ref !== undefined ? patch.ref : switched && target.form === "http" ? null : row.ref;
542
+ const mirrors = patch.mirrors ?? (switched && target.form === "git" ? [] : row.mirrors);
543
+ this.checkUrls(target.url, mirrors);
544
+ this.checkGitFields(target.form, ref, mirrors);
545
+ if (typeof patch.token === "string")
546
+ this.checkToken(patch.token);
547
+ const changed = [];
548
+ const set = {};
549
+ if (name !== undefined && name !== row.name) {
550
+ set.name = name;
551
+ changed.push("name");
552
+ }
553
+ if (target.url !== row.url) {
554
+ set.url = target.url;
555
+ changed.push("url");
556
+ }
557
+ if (target.form !== row.form) {
558
+ set.form = target.form;
559
+ changed.push("form");
560
+ }
561
+ if (ref !== row.ref) {
562
+ set.ref = ref;
563
+ changed.push("ref");
564
+ }
565
+ if (set.url !== undefined || set.form !== undefined || set.ref !== undefined) {
566
+ set.etag = null;
567
+ set.last_commit = null;
568
+ }
569
+ if (JSON.stringify(mirrors) !== JSON.stringify(row.mirrors)) {
570
+ set.mirrors = JSON.stringify(mirrors);
571
+ changed.push("mirrors");
572
+ }
573
+ if (patch.enabled !== undefined && patch.enabled !== row.enabled) {
574
+ set.enabled = patch.enabled;
575
+ changed.push("enabled");
576
+ }
577
+ if (Object.keys(set).length > 0) {
578
+ await t.updateTable("marketplaces").set(set).where("id", "=", id).execute();
579
+ }
580
+ if (patch.token !== undefined) {
581
+ const secrets = this.secrets();
582
+ const had = (await secrets.get(DEPLOYMENT_SECRETS_ORG, tokenKey(id))) !== null;
583
+ if (patch.token === null) {
584
+ if (had) {
585
+ await secrets.delete(DEPLOYMENT_SECRETS_ORG, tokenKey(id));
550
586
  changed.push("token");
551
587
  }
552
588
  }
553
- if (changed.length === 0)
554
- return;
555
- await audit(trx, {
556
- actorAccountId: actor,
557
- ...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
558
- action: "marketplace.updated",
559
- target: id,
560
- detail: {
561
- changed,
562
- ...(set.enabled !== undefined && { enabled: set.enabled }),
563
- ...(set.url !== undefined && { url: set.url }),
564
- ...(set.form !== undefined && { form: set.form }),
565
- ...(set.ref !== undefined && { ref: set.ref }),
566
- },
567
- });
589
+ else {
590
+ await secrets.set(DEPLOYMENT_SECRETS_ORG, tokenKey(id), patch.token);
591
+ changed.push("token");
592
+ }
593
+ }
594
+ if (changed.length === 0)
595
+ return;
596
+ await audit(t, {
597
+ actorAccountId: actor,
598
+ ...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
599
+ action: "marketplace.updated",
600
+ target: id,
601
+ detail: {
602
+ changed,
603
+ ...(set.enabled !== undefined && { enabled: set.enabled }),
604
+ ...(set.url !== undefined && { url: set.url }),
605
+ ...(set.form !== undefined && { form: set.form }),
606
+ ...(set.ref !== undefined && { ref: set.ref }),
607
+ },
568
608
  });
569
- return this.get(id);
570
609
  }
571
610
  /**
572
611
  * Deletes an enterprise marketplace (audit `marketplace.removed`): its cached entries and token
@@ -574,27 +613,26 @@ export class MarketplacesService {
574
613
  * only be disabled -> `marketplace.builtin`.
575
614
  */
576
615
  async remove(actor, id, opts = {}) {
577
- await this.d.db.transaction().execute(async (trx) => {
578
- await lockEnterpriseAdminsAndAuthorize(trx, actor);
579
- const row = await trx
580
- .selectFrom("marketplaces")
581
- .select(["builtin", "name", "url"])
582
- .where("id", "=", id)
583
- .forUpdate()
584
- .executeTakeFirst();
585
- if (!row)
586
- throw notFound();
587
- if (row.builtin)
588
- throw builtinErr("deleted");
589
- await trx.deleteFrom("marketplaces").where("id", "=", id).execute();
590
- await this.secrets(trx).delete(DEPLOYMENT_SECRETS_ORG, tokenKey(id));
591
- await audit(trx, {
592
- actorAccountId: actor,
593
- ...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
594
- action: "marketplace.removed",
595
- target: id,
596
- detail: { name: row.name, url: row.url },
597
- });
616
+ const t = this.db;
617
+ await this.adminLock.lockAndAuthorize(actor);
618
+ const row = await t
619
+ .selectFrom("marketplaces")
620
+ .select(["builtin", "name", "url"])
621
+ .where("id", "=", id)
622
+ .forUpdate()
623
+ .executeTakeFirst();
624
+ if (!row)
625
+ throw notFound();
626
+ if (row.builtin)
627
+ throw builtinErr("deleted");
628
+ await t.deleteFrom("marketplaces").where("id", "=", id).execute();
629
+ await this.secrets().delete(DEPLOYMENT_SECRETS_ORG, tokenKey(id));
630
+ await audit(t, {
631
+ actorAccountId: actor,
632
+ ...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
633
+ action: "marketplace.removed",
634
+ target: id,
635
+ detail: { name: row.name, url: row.url },
598
636
  });
599
637
  }
600
638
  /**
@@ -609,8 +647,8 @@ export class MarketplacesService {
609
647
  * (the message gives each URL's failure).
610
648
  */
611
649
  async refresh(id, signal, actor, opts = {}) {
612
- const config = this.d.config();
613
- const row = (await this.d.db
650
+ const config = this.config.get();
651
+ const row = (await this.db
614
652
  .selectFrom("marketplaces")
615
653
  .selectAll()
616
654
  .where("id", "=", id)
@@ -624,7 +662,7 @@ export class MarketplacesService {
624
662
  }
625
663
  const token = row.builtin
626
664
  ? undefined
627
- : ((await this.secrets(this.d.db).get(DEPLOYMENT_SECRETS_ORG, tokenKey(id))) ?? undefined);
665
+ : ((await this.secrets().get(DEPLOYMENT_SECRETS_ORG, tokenKey(id))) ?? undefined);
628
666
  const tokenOrigin = new URL(row.url).origin;
629
667
  const errors = [];
630
668
  // the API code of each failed URL (undefined: an ordinary fetch failure)
@@ -660,7 +698,7 @@ export class MarketplacesService {
660
698
  etag: row.etag,
661
699
  ...(token !== undefined && { token, tokenOrigin }),
662
700
  maxBytes: config.marketplaces.maxIndexBytes,
663
- timeoutMs: this.d.fetchTimeoutMs ?? MARKETPLACE_FETCH_TIMEOUT_MS,
701
+ timeoutMs: MARKETPLACE_FETCH_TIMEOUT_MS,
664
702
  net: marketplaceNetPolicy(config),
665
703
  signal,
666
704
  });
@@ -688,89 +726,17 @@ export class MarketplacesService {
688
726
  ? new Map()
689
727
  : await this.resolveHeads(id, outcome === "not_modified" ? undefined : outcome.manifest.plugins, { url: row.url, token }, signal);
690
728
  const lastError = status === "error" ? errors.join("\n").slice(0, MAX_ERROR_CHARS) : null;
691
- const from = await this.d.db.transaction().execute(async (trx) => {
692
- await sql `SELECT pg_advisory_xact_lock(hashtext(${`capybara.catalog-source:${id}`}))`.execute(trx);
693
- const cur = await trx
694
- .selectFrom("marketplaces")
695
- .select(["last_status", "url", "mirrors", "form", "ref", "last_commit"])
696
- .where("id", "=", id)
697
- .forUpdate()
698
- .executeTakeFirst();
699
- if (!cur)
700
- throw notFound();
701
- // The admin changed the URL / mirrors during the fetch: what we fetched is the old address's
702
- // content, so write no entries, ETag or status (the next refresh uses the new address)
703
- if (cur.url !== row.url ||
704
- cur.form !== row.form ||
705
- cur.ref !== row.ref ||
706
- // another refresh wrote a commit meanwhile: ours may be older, never move it back
707
- cur.last_commit !== row.last_commit ||
708
- JSON.stringify(cur.mirrors) !== JSON.stringify(row.mirrors)) {
709
- return "stale";
710
- }
711
- if (outcome !== undefined && outcome !== "not_modified") {
712
- await this.replaceEntries(trx, id, outcome.manifest.plugins, outcome.trees, outcome.overlays);
713
- }
714
- if (outcome !== undefined) {
715
- // heads not resolved this time are unknown again (never a stale head)
716
- await trx
717
- .updateTable("marketplace_entries")
718
- .set({ head_commit: null, tree_oid: null })
719
- .where("source_id", "=", id)
720
- .where("head_commit", "is not", null)
721
- .execute();
722
- }
723
- for (const [key, head] of heads) {
724
- const [name, version] = key.split("\0");
725
- await trx
726
- .updateTable("marketplace_entries")
727
- .set({ head_commit: head.commit, tree_oid: head.tree })
728
- .where("source_id", "=", id)
729
- .where("name", "=", name)
730
- .where("version", "=", version)
731
- .execute();
732
- }
733
- await trx
734
- .updateTable("marketplaces")
735
- .set({
736
- last_status: status,
737
- last_error: lastError,
738
- last_refreshed_at: sql `now()`,
739
- ...(outcome !== undefined &&
740
- outcome !== "not_modified" && {
741
- etag: outcome.etag,
742
- last_commit: outcome.commit ?? null,
743
- owner_name: outcome.manifest.owner?.name ?? null,
744
- skipped: JSON.stringify(outcome.skipped ?? []),
745
- }),
746
- })
747
- .where("id", "=", id)
748
- .execute();
749
- if (cur.last_status !== status) {
750
- await audit(trx, {
751
- ...(actor !== undefined && { actorAccountId: actor }),
752
- ...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
753
- action: "marketplace.refreshed",
754
- target: id,
755
- detail: {
756
- from: cur.last_status,
757
- to: status,
758
- ...(lastError !== null && { error: lastError }),
759
- },
760
- });
761
- }
762
- return cur.last_status;
763
- });
729
+ const from = await this.recordRefresh(row, { outcome, heads, status, lastError }, actor, opts);
764
730
  if (from === "stale") {
765
- this.d.log.info("marketplace changed during refresh; result discarded", { marketplace: id });
731
+ this.log.info("marketplace changed during refresh; result discarded", { marketplace: id });
766
732
  return this.get(id);
767
733
  }
768
734
  if (from !== status) {
769
735
  if (status === "error") {
770
- this.d.log.warn("marketplace refresh failed", { marketplace: id, error: lastError });
736
+ this.log.warn("marketplace refresh failed", { marketplace: id, error: lastError });
771
737
  }
772
738
  else {
773
- this.d.log.info("marketplace refreshed", { marketplace: id });
739
+ this.log.info("marketplace refreshed", { marketplace: id });
774
740
  }
775
741
  }
776
742
  if (status === "error" && opts.throwOnError) {
@@ -794,7 +760,7 @@ export class MarketplacesService {
794
760
  * (Decision 3). Throws {@link GitSourceError} or {@link MarketplaceInvalidError}.
795
761
  */
796
762
  async fetchGit(row, token, signal) {
797
- const config = this.d.config();
763
+ const config = this.config.get();
798
764
  const options = {
799
765
  net: marketplaceNetPolicy(config),
800
766
  maxBytes: config.packages.maxBytes,
@@ -914,9 +880,9 @@ export class MarketplacesService {
914
880
  * entry unknown (never fails the refresh). Returns `name\0version` -> head.
915
881
  */
916
882
  async resolveHeads(id, fresh, m, signal) {
917
- const config = this.d.config();
883
+ const config = this.config.get();
918
884
  const listed = fresh ??
919
- (await this.d.db
885
+ (await this.db
920
886
  .selectFrom("marketplace_entries")
921
887
  .select("entry")
922
888
  .where("source_id", "=", id)
@@ -925,7 +891,7 @@ export class MarketplacesService {
925
891
  const names = [...new Set(listed.filter((e) => "git" in e.source).map((e) => e.name))];
926
892
  if (names.length === 0)
927
893
  return out;
928
- const imported = await this.d.db
894
+ const imported = await this.db
929
895
  .selectFrom("catalog_items as i")
930
896
  .innerJoin("catalog_item_versions as v", "v.item_id", "i.id")
931
897
  .select(["i.name", "v.version", "v.source", "v.source_ref", "v.integrity", "v.source_detail"])
@@ -933,7 +899,7 @@ export class MarketplacesService {
933
899
  .where("i.name", "in", names)
934
900
  .execute();
935
901
  const todo = headsToResolve(listed, imported, config, MARKETPLACE_HEADS_MAX);
936
- const timeoutMs = this.d.fetchTimeoutMs ?? MARKETPLACE_FETCH_TIMEOUT_MS;
902
+ const timeoutMs = MARKETPLACE_FETCH_TIMEOUT_MS;
937
903
  const queue = [...todo];
938
904
  await Promise.all(Array.from({ length: Math.min(HEADS_CONCURRENCY, queue.length) }, async () => {
939
905
  for (let e = queue.shift(); e !== undefined; e = queue.shift()) {
@@ -959,7 +925,7 @@ export class MarketplacesService {
959
925
  }
960
926
  catch (err) {
961
927
  // a head lookup never fails the refresh: that entry stays unknown
962
- this.d.log.warn("cannot resolve the branch head of a marketplace entry", {
928
+ this.log.warn("cannot resolve the branch head of a marketplace entry", {
963
929
  marketplace: id,
964
930
  entry: e.name,
965
931
  error: err instanceof Error ? err.message : String(err),
@@ -971,12 +937,12 @@ export class MarketplacesService {
971
937
  }
972
938
  /** The token of an enterprise marketplace (undefined without one; official never has one). */
973
939
  async token(id) {
974
- return (await this.secrets(this.d.db).get(DEPLOYMENT_SECRETS_ORG, tokenKey(id))) ?? undefined;
940
+ return (await this.secrets().get(DEPLOYMENT_SECRETS_ORG, tokenKey(id))) ?? undefined;
975
941
  }
976
942
  /** Refreshes every effective marketplace (maintenance job `catalogs-refresh`), one failing not stopping the rest. */
977
943
  async refreshAll(signal) {
978
- const config = this.d.config();
979
- const rows = await this.d.db
944
+ const config = this.config.get();
945
+ const rows = await this.db
980
946
  .selectFrom("marketplaces")
981
947
  .select(["id", "builtin", "enabled"])
982
948
  .orderBy("id")
@@ -990,7 +956,7 @@ export class MarketplacesService {
990
956
  await this.refresh(r.id, signal);
991
957
  }
992
958
  catch (err) {
993
- this.d.log.error("marketplace refresh crashed", { marketplace: r.id, err });
959
+ this.log.error("marketplace refresh crashed", { marketplace: r.id, err });
994
960
  }
995
961
  }
996
962
  }
@@ -1001,8 +967,8 @@ export class MarketplacesService {
1001
967
  * (the UI suggests narrowing the filter).
1002
968
  */
1003
969
  async entries(q = {}) {
1004
- const config = this.d.config();
1005
- let query = this.d.db
970
+ const config = this.config.get();
971
+ let query = this.db
1006
972
  .selectFrom("marketplace_entries as e")
1007
973
  .innerJoin("marketplaces as s", "s.id", "e.source_id")
1008
974
  .select([
@@ -1043,7 +1009,7 @@ export class MarketplacesService {
1043
1009
  a.source_id.localeCompare(b.source_id));
1044
1010
  if (rows.length === 0)
1045
1011
  return { items: [], truncated: false };
1046
- const items = await this.d.db
1012
+ const items = await this.db
1047
1013
  .selectFrom("catalog_items as i")
1048
1014
  .leftJoin("catalog_item_versions as v", "v.item_id", "i.id")
1049
1015
  .select([
@@ -1114,14 +1080,95 @@ export class MarketplacesService {
1114
1080
  });
1115
1081
  return { items: views, truncated };
1116
1082
  }
1083
+ /**
1084
+ * Writes a refresh's result under the marketplace's lock (entries, heads, status, the status
1085
+ * change audit); `stale` when the marketplace changed during the fetch (nothing is written).
1086
+ */
1087
+ async recordRefresh(row, r, actor, opts) {
1088
+ const { id } = row;
1089
+ const { outcome, heads, status, lastError } = r;
1090
+ await this.sourceLock.lock(id);
1091
+ const t = this.db;
1092
+ const cur = await t
1093
+ .selectFrom("marketplaces")
1094
+ .select(["last_status", "url", "mirrors", "form", "ref", "last_commit"])
1095
+ .where("id", "=", id)
1096
+ .forUpdate()
1097
+ .executeTakeFirst();
1098
+ if (!cur)
1099
+ throw notFound();
1100
+ // The admin changed the URL / mirrors during the fetch: what we fetched is the old address's
1101
+ // content, so write no entries, ETag or status (the next refresh uses the new address)
1102
+ if (cur.url !== row.url ||
1103
+ cur.form !== row.form ||
1104
+ cur.ref !== row.ref ||
1105
+ // another refresh wrote a commit meanwhile: ours may be older, never move it back
1106
+ cur.last_commit !== row.last_commit ||
1107
+ JSON.stringify(cur.mirrors) !== JSON.stringify(row.mirrors)) {
1108
+ return "stale";
1109
+ }
1110
+ if (outcome !== undefined && outcome !== "not_modified") {
1111
+ await this.replaceEntries(id, outcome.manifest.plugins, outcome.trees, outcome.overlays);
1112
+ }
1113
+ if (outcome !== undefined) {
1114
+ // heads not resolved this time are unknown again (never a stale head)
1115
+ await t
1116
+ .updateTable("marketplace_entries")
1117
+ .set({ head_commit: null, tree_oid: null })
1118
+ .where("source_id", "=", id)
1119
+ .where("head_commit", "is not", null)
1120
+ .execute();
1121
+ }
1122
+ for (const [key, head] of heads) {
1123
+ const [name, version] = key.split("\0");
1124
+ await t
1125
+ .updateTable("marketplace_entries")
1126
+ .set({ head_commit: head.commit, tree_oid: head.tree })
1127
+ .where("source_id", "=", id)
1128
+ .where("name", "=", name)
1129
+ .where("version", "=", version)
1130
+ .execute();
1131
+ }
1132
+ await t
1133
+ .updateTable("marketplaces")
1134
+ .set({
1135
+ last_status: status,
1136
+ last_error: lastError,
1137
+ last_refreshed_at: sql `now()`,
1138
+ ...(outcome !== undefined &&
1139
+ outcome !== "not_modified" && {
1140
+ etag: outcome.etag,
1141
+ last_commit: outcome.commit ?? null,
1142
+ owner_name: outcome.manifest.owner?.name ?? null,
1143
+ skipped: JSON.stringify(outcome.skipped ?? []),
1144
+ }),
1145
+ })
1146
+ .where("id", "=", id)
1147
+ .execute();
1148
+ if (cur.last_status !== status) {
1149
+ await audit(t, {
1150
+ ...(actor !== undefined && { actorAccountId: actor }),
1151
+ ...(opts.actorTokenId !== undefined && { actorTokenId: opts.actorTokenId }),
1152
+ action: "marketplace.refreshed",
1153
+ target: id,
1154
+ detail: {
1155
+ from: cur.last_status,
1156
+ to: status,
1157
+ ...(lastError !== null && { error: lastError }),
1158
+ },
1159
+ });
1160
+ }
1161
+ return cur.last_status;
1162
+ }
1117
1163
  /**
1118
1164
  * Replaces the entries of a marketplace; `trees` (a git marketplace) gives each path entry the
1119
1165
  * tree oid of its directory.
1120
1166
  */
1121
- async replaceEntries(trx, id, entries, trees, overlays) {
1122
- await trx.deleteFrom("marketplace_entries").where("source_id", "=", id).execute();
1167
+ async replaceEntries(id, entries, trees, overlays) {
1168
+ const t = this.db;
1169
+ await t.deleteFrom("marketplace_entries").where("source_id", "=", id).execute();
1123
1170
  for (let i = 0; i < entries.length; i += INSERT_BATCH) {
1124
- await trx
1171
+ await t
1125
1172
  .insertInto("marketplace_entries")
1126
1173
  .values(entries.slice(i, i + INSERT_BATCH).map((e) => ({
1127
1174
  source_id: id,
@@ -1138,15 +1185,15 @@ export class MarketplacesService {
1138
1185
  async views(rows) {
1139
1186
  if (rows.length === 0)
1140
1187
  return [];
1141
- const config = this.d.config();
1188
+ const config = this.config.get();
1142
1189
  const ids = rows.map((r) => r.id);
1143
- const counts = await this.d.db
1190
+ const counts = await this.db
1144
1191
  .selectFrom("marketplace_entries")
1145
1192
  .select(["source_id", (eb) => eb.fn.countAll().as("n")])
1146
1193
  .where("source_id", "in", ids)
1147
1194
  .groupBy("source_id")
1148
1195
  .execute();
1149
- const tokens = await this.d.db
1196
+ const tokens = await this.db
1150
1197
  .selectFrom("secrets")
1151
1198
  .select("key")
1152
1199
  .where("namespace", "=", SECRETS_NAMESPACE)
@@ -1176,8 +1223,9 @@ export class MarketplacesService {
1176
1223
  createdAt: r.created_at.toISOString(),
1177
1224
  }));
1178
1225
  }
1179
- secrets(db) {
1180
- return createSecrets(db, this.d.keyring, SECRETS_NAMESPACE);
1226
+ /** The deployment secrets on the current context's handle (the transaction, else the pool). */
1227
+ secrets() {
1228
+ return createSecrets(this.db, this.keyring, SECRETS_NAMESPACE);
1181
1229
  }
1182
1230
  checkName(name) {
1183
1231
  const n = name.trim();
@@ -1187,7 +1235,7 @@ export class MarketplacesService {
1187
1235
  return n;
1188
1236
  }
1189
1237
  checkUrls(url, mirrors) {
1190
- const allow = this.d.config().marketplaces.allowInsecureLoopback;
1238
+ const allow = this.config.get().marketplaces.allowInsecureLoopback;
1191
1239
  if (mirrors.length > MARKETPLACE_MAX_MIRRORS) {
1192
1240
  throw new ApiError("validation_failed", `at most ${MARKETPLACE_MAX_MIRRORS} mirrors`);
1193
1241
  }
@@ -1214,4 +1262,30 @@ export class MarketplacesService {
1214
1262
  throw new ApiError("validation_failed", `token must be 1–${MAX_TOKEN_CHARS} characters without line breaks`);
1215
1263
  }
1216
1264
  }
1217
- }
1265
+ };
1266
+ __decorate([
1267
+ Transactional()
1268
+ ], MarketplacesService.prototype, "writeAdd", null);
1269
+ __decorate([
1270
+ Transactional()
1271
+ ], MarketplacesService.prototype, "writeUpdate", null);
1272
+ __decorate([
1273
+ Transactional()
1274
+ ], MarketplacesService.prototype, "remove", null);
1275
+ __decorate([
1276
+ Transactional()
1277
+ ], MarketplacesService.prototype, "recordRefresh", null);
1278
+ __decorate([
1279
+ Transactional({ propagation: "mandatory" })
1280
+ ], MarketplacesService.prototype, "replaceEntries", null);
1281
+ MarketplacesService = __decorate([
1282
+ Injectable(),
1283
+ __param(0, Inject(KernelDb)),
1284
+ __param(1, Inject(EnterpriseAdminLock)),
1285
+ __param(2, Inject(CatalogSourceLock)),
1286
+ __param(3, Inject(KernelConfigService)),
1287
+ __param(4, Inject(KEYRING)),
1288
+ __param(5, Inject(KERNEL_LOGGER)),
1289
+ __param(6, Inject(TransactionHost))
1290
+ ], MarketplacesService);
1291
+ export { MarketplacesService };