@nocobase/app-plugin-releases 0.0.0-stage → 0.1.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (584) hide show
  1. package/CHANGELOG.md +71 -0
  2. package/README.md +118 -2
  3. package/dist/client/components/actor-name.d.ts +5 -0
  4. package/dist/client/components/actor-name.d.ts.map +1 -0
  5. package/dist/client/components/actor-name.js +11 -0
  6. package/dist/client/components/actor-name.js.map +1 -0
  7. package/dist/client/components/advanced-section.d.ts +8 -0
  8. package/dist/client/components/advanced-section.d.ts.map +1 -0
  9. package/dist/client/components/advanced-section.js +13 -0
  10. package/dist/client/components/advanced-section.js.map +1 -0
  11. package/dist/client/components/app-settings-card.d.ts +7 -0
  12. package/dist/client/components/app-settings-card.d.ts.map +1 -0
  13. package/dist/client/components/app-settings-card.js +69 -0
  14. package/dist/client/components/app-settings-card.js.map +1 -0
  15. package/dist/client/components/artifacts.d.ts +9 -0
  16. package/dist/client/components/artifacts.d.ts.map +1 -0
  17. package/dist/client/components/artifacts.js +26 -0
  18. package/dist/client/components/artifacts.js.map +1 -0
  19. package/dist/client/components/config-secrets.d.ts +10 -0
  20. package/dist/client/components/config-secrets.d.ts.map +1 -0
  21. package/dist/client/components/config-secrets.js +34 -0
  22. package/dist/client/components/config-secrets.js.map +1 -0
  23. package/dist/client/components/confirm-dialog.d.ts +22 -0
  24. package/dist/client/components/confirm-dialog.d.ts.map +1 -0
  25. package/dist/client/components/confirm-dialog.js +47 -0
  26. package/dist/client/components/confirm-dialog.js.map +1 -0
  27. package/dist/client/components/connection-check.d.ts +13 -0
  28. package/dist/client/components/connection-check.d.ts.map +1 -0
  29. package/dist/client/components/connection-check.js +69 -0
  30. package/dist/client/components/connection-check.js.map +1 -0
  31. package/dist/client/components/data-table.d.ts +27 -0
  32. package/dist/client/components/data-table.d.ts.map +1 -0
  33. package/dist/client/components/data-table.js +41 -0
  34. package/dist/client/components/data-table.js.map +1 -0
  35. package/dist/client/components/driver-settings.d.ts +28 -0
  36. package/dist/client/components/driver-settings.d.ts.map +1 -0
  37. package/dist/client/components/driver-settings.js +158 -0
  38. package/dist/client/components/driver-settings.js.map +1 -0
  39. package/dist/client/components/environment-form.d.ts +18 -0
  40. package/dist/client/components/environment-form.d.ts.map +1 -0
  41. package/dist/client/components/environment-form.js +284 -0
  42. package/dist/client/components/environment-form.js.map +1 -0
  43. package/dist/client/components/image-source-fields.d.ts +16 -0
  44. package/dist/client/components/image-source-fields.d.ts.map +1 -0
  45. package/dist/client/components/image-source-fields.js +53 -0
  46. package/dist/client/components/image-source-fields.js.map +1 -0
  47. package/dist/client/components/labels-editor.d.ts +15 -0
  48. package/dist/client/components/labels-editor.d.ts.map +1 -0
  49. package/dist/client/components/labels-editor.js +40 -0
  50. package/dist/client/components/labels-editor.js.map +1 -0
  51. package/dist/client/components/page-container.d.ts +11 -0
  52. package/dist/client/components/page-container.d.ts.map +1 -0
  53. package/dist/client/components/page-container.js +13 -0
  54. package/dist/client/components/page-container.js.map +1 -0
  55. package/dist/client/components/page-header.d.ts +14 -0
  56. package/dist/client/components/page-header.d.ts.map +1 -0
  57. package/dist/client/components/page-header.js +10 -0
  58. package/dist/client/components/page-header.js.map +1 -0
  59. package/dist/client/components/page-tabs.d.ts +20 -0
  60. package/dist/client/components/page-tabs.d.ts.map +1 -0
  61. package/dist/client/components/page-tabs.js +7 -0
  62. package/dist/client/components/page-tabs.js.map +1 -0
  63. package/dist/client/components/people-picker.d.ts +5 -0
  64. package/dist/client/components/people-picker.d.ts.map +1 -0
  65. package/dist/client/components/people-picker.js +22 -0
  66. package/dist/client/components/people-picker.js.map +1 -0
  67. package/dist/client/components/refresh-button.d.ts +7 -0
  68. package/dist/client/components/refresh-button.d.ts.map +1 -0
  69. package/dist/client/components/refresh-button.js +21 -0
  70. package/dist/client/components/refresh-button.js.map +1 -0
  71. package/dist/client/components/registry-fields.d.ts +20 -0
  72. package/dist/client/components/registry-fields.d.ts.map +1 -0
  73. package/dist/client/components/registry-fields.js +47 -0
  74. package/dist/client/components/registry-fields.js.map +1 -0
  75. package/dist/client/components/release-badges.d.ts +42 -0
  76. package/dist/client/components/release-badges.d.ts.map +1 -0
  77. package/dist/client/components/release-badges.js +100 -0
  78. package/dist/client/components/release-badges.js.map +1 -0
  79. package/dist/client/components/request-decision.d.ts +8 -0
  80. package/dist/client/components/request-decision.d.ts.map +1 -0
  81. package/dist/client/components/request-decision.js +7 -0
  82. package/dist/client/components/request-decision.js.map +1 -0
  83. package/dist/client/components/route-dialog.d.ts +6 -0
  84. package/dist/client/components/route-dialog.d.ts.map +1 -0
  85. package/dist/client/components/route-dialog.js +7 -0
  86. package/dist/client/components/route-dialog.js.map +1 -0
  87. package/dist/client/components/route-overlay.d.ts +21 -0
  88. package/dist/client/components/route-overlay.d.ts.map +1 -0
  89. package/dist/client/components/route-overlay.js +87 -0
  90. package/dist/client/components/route-overlay.js.map +1 -0
  91. package/dist/client/components/row-actions.d.ts +9 -0
  92. package/dist/client/components/row-actions.d.ts.map +1 -0
  93. package/dist/client/components/row-actions.js +16 -0
  94. package/dist/client/components/row-actions.js.map +1 -0
  95. package/dist/client/components/runtime-policy-fields.d.ts +9 -0
  96. package/dist/client/components/runtime-policy-fields.d.ts.map +1 -0
  97. package/dist/client/components/runtime-policy-fields.js +26 -0
  98. package/dist/client/components/runtime-policy-fields.js.map +1 -0
  99. package/dist/client/components/section.d.ts +15 -0
  100. package/dist/client/components/section.d.ts.map +1 -0
  101. package/dist/client/components/section.js +6 -0
  102. package/dist/client/components/section.js.map +1 -0
  103. package/dist/client/components/states.d.ts +21 -0
  104. package/dist/client/components/states.d.ts.map +1 -0
  105. package/dist/client/components/states.js +29 -0
  106. package/dist/client/components/states.js.map +1 -0
  107. package/dist/client/components/tag.d.ts +15 -0
  108. package/dist/client/components/tag.d.ts.map +1 -0
  109. package/dist/client/components/tag.js +15 -0
  110. package/dist/client/components/tag.js.map +1 -0
  111. package/dist/client/components/ui/alert-dialog.d.ts +19 -0
  112. package/dist/client/components/ui/alert-dialog.d.ts.map +1 -0
  113. package/dist/client/components/ui/alert-dialog.js +42 -0
  114. package/dist/client/components/ui/alert-dialog.js.map +1 -0
  115. package/dist/client/components/ui/alert.d.ts +13 -0
  116. package/dist/client/components/ui/alert.d.ts.map +1 -0
  117. package/dist/client/components/ui/alert.js +31 -0
  118. package/dist/client/components/ui/alert.js.map +1 -0
  119. package/dist/client/components/ui/badge.d.ts +11 -0
  120. package/dist/client/components/ui/badge.d.ts.map +1 -0
  121. package/dist/client/components/ui/badge.js +37 -0
  122. package/dist/client/components/ui/badge.js.map +1 -0
  123. package/dist/client/components/ui/button.d.ts +12 -0
  124. package/dist/client/components/ui/button.d.ts.map +1 -0
  125. package/dist/client/components/ui/button.js +38 -0
  126. package/dist/client/components/ui/button.js.map +1 -0
  127. package/dist/client/components/ui/card.d.ts +12 -0
  128. package/dist/client/components/ui/card.d.ts.map +1 -0
  129. package/dist/client/components/ui/card.js +25 -0
  130. package/dist/client/components/ui/card.js.map +1 -0
  131. package/dist/client/components/ui/checkbox.d.ts +5 -0
  132. package/dist/client/components/ui/checkbox.d.ts.map +1 -0
  133. package/dist/client/components/ui/checkbox.js +9 -0
  134. package/dist/client/components/ui/checkbox.js.map +1 -0
  135. package/dist/client/components/ui/collapsible.d.ts +7 -0
  136. package/dist/client/components/ui/collapsible.d.ts.map +1 -0
  137. package/dist/client/components/ui/collapsible.js +13 -0
  138. package/dist/client/components/ui/collapsible.js.map +1 -0
  139. package/dist/client/components/ui/dialog.d.ts +18 -0
  140. package/dist/client/components/ui/dialog.d.ts.map +1 -0
  141. package/dist/client/components/ui/dialog.js +40 -0
  142. package/dist/client/components/ui/dialog.js.map +1 -0
  143. package/dist/client/components/ui/dropdown-menu.d.ts +30 -0
  144. package/dist/client/components/ui/dropdown-menu.d.ts.map +1 -0
  145. package/dist/client/components/ui/dropdown-menu.js +51 -0
  146. package/dist/client/components/ui/dropdown-menu.js.map +1 -0
  147. package/dist/client/components/ui/empty.d.ts +15 -0
  148. package/dist/client/components/ui/empty.d.ts.map +1 -0
  149. package/dist/client/components/ui/empty.js +37 -0
  150. package/dist/client/components/ui/empty.js.map +1 -0
  151. package/dist/client/components/ui/field.d.ts +28 -0
  152. package/dist/client/components/ui/field.d.ts.map +1 -0
  153. package/dist/client/components/ui/field.js +71 -0
  154. package/dist/client/components/ui/field.js.map +1 -0
  155. package/dist/client/components/ui/input-group.d.ts +22 -0
  156. package/dist/client/components/ui/input-group.d.ts.map +1 -0
  157. package/dist/client/components/ui/input-group.js +63 -0
  158. package/dist/client/components/ui/input-group.js.map +1 -0
  159. package/dist/client/components/ui/input.d.ts +4 -0
  160. package/dist/client/components/ui/input.d.ts.map +1 -0
  161. package/dist/client/components/ui/input.js +8 -0
  162. package/dist/client/components/ui/input.js.map +1 -0
  163. package/dist/client/components/ui/label.d.ts +4 -0
  164. package/dist/client/components/ui/label.d.ts.map +1 -0
  165. package/dist/client/components/ui/label.js +7 -0
  166. package/dist/client/components/ui/label.js.map +1 -0
  167. package/dist/client/components/ui/radio-group.d.ts +7 -0
  168. package/dist/client/components/ui/radio-group.d.ts.map +1 -0
  169. package/dist/client/components/ui/radio-group.js +12 -0
  170. package/dist/client/components/ui/radio-group.js.map +1 -0
  171. package/dist/client/components/ui/select.d.ts +16 -0
  172. package/dist/client/components/ui/select.d.ts.map +1 -0
  173. package/dist/client/components/ui/select.js +34 -0
  174. package/dist/client/components/ui/select.js.map +1 -0
  175. package/dist/client/components/ui/separator.d.ts +5 -0
  176. package/dist/client/components/ui/separator.d.ts.map +1 -0
  177. package/dist/client/components/ui/separator.js +8 -0
  178. package/dist/client/components/ui/separator.js.map +1 -0
  179. package/dist/client/components/ui/sheet.d.ts +15 -0
  180. package/dist/client/components/ui/sheet.d.ts.map +1 -0
  181. package/dist/client/components/ui/sheet.js +39 -0
  182. package/dist/client/components/ui/sheet.js.map +1 -0
  183. package/dist/client/components/ui/skeleton.d.ts +4 -0
  184. package/dist/client/components/ui/skeleton.d.ts.map +1 -0
  185. package/dist/client/components/ui/skeleton.js +7 -0
  186. package/dist/client/components/ui/skeleton.js.map +1 -0
  187. package/dist/client/components/ui/spinner.d.ts +4 -0
  188. package/dist/client/components/ui/spinner.d.ts.map +1 -0
  189. package/dist/client/components/ui/spinner.js +11 -0
  190. package/dist/client/components/ui/spinner.js.map +1 -0
  191. package/dist/client/components/ui/table.d.ts +11 -0
  192. package/dist/client/components/ui/table.d.ts.map +1 -0
  193. package/dist/client/components/ui/table.js +28 -0
  194. package/dist/client/components/ui/table.js.map +1 -0
  195. package/dist/client/components/ui/tabs.d.ts +14 -0
  196. package/dist/client/components/ui/tabs.d.ts.map +1 -0
  197. package/dist/client/components/ui/tabs.js +32 -0
  198. package/dist/client/components/ui/tabs.js.map +1 -0
  199. package/dist/client/components/ui/textarea.d.ts +4 -0
  200. package/dist/client/components/ui/textarea.d.ts.map +1 -0
  201. package/dist/client/components/ui/textarea.js +7 -0
  202. package/dist/client/components/ui/textarea.js.map +1 -0
  203. package/dist/client/components/ui/tooltip.d.ts +8 -0
  204. package/dist/client/components/ui/tooltip.d.ts.map +1 -0
  205. package/dist/client/components/ui/tooltip.js +17 -0
  206. package/dist/client/components/ui/tooltip.js.map +1 -0
  207. package/dist/client/components/upload-release-dialog.d.ts +8 -0
  208. package/dist/client/components/upload-release-dialog.d.ts.map +1 -0
  209. package/dist/client/components/upload-release-dialog.js +39 -0
  210. package/dist/client/components/upload-release-dialog.js.map +1 -0
  211. package/dist/client/components/use-route-overlay.d.ts +15 -0
  212. package/dist/client/components/use-route-overlay.d.ts.map +1 -0
  213. package/dist/client/components/use-route-overlay.js +15 -0
  214. package/dist/client/components/use-route-overlay.js.map +1 -0
  215. package/dist/client/components/variable-alerts.d.ts +24 -0
  216. package/dist/client/components/variable-alerts.d.ts.map +1 -0
  217. package/dist/client/components/variable-alerts.js +85 -0
  218. package/dist/client/components/variable-alerts.js.map +1 -0
  219. package/dist/client/components/variable-dialogs.d.ts +30 -0
  220. package/dist/client/components/variable-dialogs.d.ts.map +1 -0
  221. package/dist/client/components/variable-dialogs.js +155 -0
  222. package/dist/client/components/variable-dialogs.js.map +1 -0
  223. package/dist/client/components/variables-table.d.ts +26 -0
  224. package/dist/client/components/variables-table.d.ts.map +1 -0
  225. package/dist/client/components/variables-table.js +374 -0
  226. package/dist/client/components/variables-table.js.map +1 -0
  227. package/dist/client/driver-forms/host.d.ts +3 -0
  228. package/dist/client/driver-forms/host.d.ts.map +1 -0
  229. package/dist/client/driver-forms/host.js +100 -0
  230. package/dist/client/driver-forms/host.js.map +1 -0
  231. package/dist/client/driver-forms/index.d.ts +25 -0
  232. package/dist/client/driver-forms/index.d.ts.map +1 -0
  233. package/dist/client/driver-forms/index.js +40 -0
  234. package/dist/client/driver-forms/index.js.map +1 -0
  235. package/dist/client/driver-forms/mapping.d.ts +56 -0
  236. package/dist/client/driver-forms/mapping.d.ts.map +1 -0
  237. package/dist/client/driver-forms/mapping.js +308 -0
  238. package/dist/client/driver-forms/mapping.js.map +1 -0
  239. package/dist/client/driver-forms/types.d.ts +168 -0
  240. package/dist/client/driver-forms/types.d.ts.map +1 -0
  241. package/dist/client/driver-forms/types.js +16 -0
  242. package/dist/client/driver-forms/types.js.map +1 -0
  243. package/dist/client/hooks/use-connection-check.d.ts +18 -0
  244. package/dist/client/hooks/use-connection-check.d.ts.map +1 -0
  245. package/dist/client/hooks/use-connection-check.js +19 -0
  246. package/dist/client/hooks/use-connection-check.js.map +1 -0
  247. package/dist/client/hooks/use-driver-forms.d.ts +4 -0
  248. package/dist/client/hooks/use-driver-forms.d.ts.map +1 -0
  249. package/dist/client/hooks/use-driver-forms.js +12 -0
  250. package/dist/client/hooks/use-driver-forms.js.map +1 -0
  251. package/dist/client/hooks/use-driver-names.d.ts +14 -0
  252. package/dist/client/hooks/use-driver-names.d.ts.map +1 -0
  253. package/dist/client/hooks/use-driver-names.js +33 -0
  254. package/dist/client/hooks/use-driver-names.js.map +1 -0
  255. package/dist/client/hooks/use-environment-check.d.ts +8 -0
  256. package/dist/client/hooks/use-environment-check.d.ts.map +1 -0
  257. package/dist/client/hooks/use-environment-check.js +28 -0
  258. package/dist/client/hooks/use-environment-check.js.map +1 -0
  259. package/dist/client/hooks/use-notify.d.ts +7 -0
  260. package/dist/client/hooks/use-notify.d.ts.map +1 -0
  261. package/dist/client/hooks/use-notify.js +22 -0
  262. package/dist/client/hooks/use-notify.js.map +1 -0
  263. package/dist/client/hooks/use-registries.d.ts +6 -0
  264. package/dist/client/hooks/use-registries.d.ts.map +1 -0
  265. package/dist/client/hooks/use-registries.js +9 -0
  266. package/dist/client/hooks/use-registries.js.map +1 -0
  267. package/dist/client/hooks/use-registry-check.d.ts +16 -0
  268. package/dist/client/hooks/use-registry-check.d.ts.map +1 -0
  269. package/dist/client/hooks/use-registry-check.js +29 -0
  270. package/dist/client/hooks/use-registry-check.js.map +1 -0
  271. package/dist/client/hooks/use-releases.d.ts +42 -0
  272. package/dist/client/hooks/use-releases.d.ts.map +1 -0
  273. package/dist/client/hooks/use-releases.js +82 -0
  274. package/dist/client/hooks/use-releases.js.map +1 -0
  275. package/dist/client/hooks/use-request-decisions.d.ts +15 -0
  276. package/dist/client/hooks/use-request-decisions.d.ts.map +1 -0
  277. package/dist/client/hooks/use-request-decisions.js +69 -0
  278. package/dist/client/hooks/use-request-decisions.js.map +1 -0
  279. package/dist/client/hooks/use-tab-param.d.ts +5 -0
  280. package/dist/client/hooks/use-tab-param.d.ts.map +1 -0
  281. package/dist/client/hooks/use-tab-param.js +33 -0
  282. package/dist/client/hooks/use-tab-param.js.map +1 -0
  283. package/dist/client/index.d.ts +12 -0
  284. package/dist/client/index.d.ts.map +1 -0
  285. package/dist/client/index.js +13 -0
  286. package/dist/client/index.js.map +1 -0
  287. package/dist/client/lib/actor-names.d.ts +16 -0
  288. package/dist/client/lib/actor-names.d.ts.map +1 -0
  289. package/dist/client/lib/actor-names.js +8 -0
  290. package/dist/client/lib/actor-names.js.map +1 -0
  291. package/dist/client/lib/app-groups.d.ts +20 -0
  292. package/dist/client/lib/app-groups.d.ts.map +1 -0
  293. package/dist/client/lib/app-groups.js +36 -0
  294. package/dist/client/lib/app-groups.js.map +1 -0
  295. package/dist/client/lib/app-origin.d.ts +22 -0
  296. package/dist/client/lib/app-origin.d.ts.map +1 -0
  297. package/dist/client/lib/app-origin.js +10 -0
  298. package/dist/client/lib/app-origin.js.map +1 -0
  299. package/dist/client/lib/app-state.d.ts +7 -0
  300. package/dist/client/lib/app-state.d.ts.map +1 -0
  301. package/dist/client/lib/app-state.js +15 -0
  302. package/dist/client/lib/app-state.js.map +1 -0
  303. package/dist/client/lib/config-secrets.d.ts +12 -0
  304. package/dist/client/lib/config-secrets.d.ts.map +1 -0
  305. package/dist/client/lib/config-secrets.js +16 -0
  306. package/dist/client/lib/config-secrets.js.map +1 -0
  307. package/dist/client/lib/delete-app-impact.d.ts +17 -0
  308. package/dist/client/lib/delete-app-impact.d.ts.map +1 -0
  309. package/dist/client/lib/delete-app-impact.js +10 -0
  310. package/dist/client/lib/delete-app-impact.js.map +1 -0
  311. package/dist/client/lib/errors.d.ts +9 -0
  312. package/dist/client/lib/errors.d.ts.map +1 -0
  313. package/dist/client/lib/errors.js +76 -0
  314. package/dist/client/lib/errors.js.map +1 -0
  315. package/dist/client/lib/format.d.ts +8 -0
  316. package/dist/client/lib/format.d.ts.map +1 -0
  317. package/dist/client/lib/format.js +29 -0
  318. package/dist/client/lib/format.js.map +1 -0
  319. package/dist/client/lib/labels.d.ts +14 -0
  320. package/dist/client/lib/labels.d.ts.map +1 -0
  321. package/dist/client/lib/labels.js +42 -0
  322. package/dist/client/lib/labels.js.map +1 -0
  323. package/dist/client/lib/paths.d.ts +25 -0
  324. package/dist/client/lib/paths.d.ts.map +1 -0
  325. package/dist/client/lib/paths.js +31 -0
  326. package/dist/client/lib/paths.js.map +1 -0
  327. package/dist/client/lib/pending-requests.d.ts +7 -0
  328. package/dist/client/lib/pending-requests.d.ts.map +1 -0
  329. package/dist/client/lib/pending-requests.js +12 -0
  330. package/dist/client/lib/pending-requests.js.map +1 -0
  331. package/dist/client/lib/people-picker.d.ts +19 -0
  332. package/dist/client/lib/people-picker.d.ts.map +1 -0
  333. package/dist/client/lib/people-picker.js +8 -0
  334. package/dist/client/lib/people-picker.js.map +1 -0
  335. package/dist/client/lib/permissions.d.ts +6 -0
  336. package/dist/client/lib/permissions.d.ts.map +1 -0
  337. package/dist/client/lib/permissions.js +14 -0
  338. package/dist/client/lib/permissions.js.map +1 -0
  339. package/dist/client/lib/registry-draft.d.ts +26 -0
  340. package/dist/client/lib/registry-draft.d.ts.map +1 -0
  341. package/dist/client/lib/registry-draft.js +41 -0
  342. package/dist/client/lib/registry-draft.js.map +1 -0
  343. package/dist/client/lib/runtime-policy.d.ts +21 -0
  344. package/dist/client/lib/runtime-policy.d.ts.map +1 -0
  345. package/dist/client/lib/runtime-policy.js +63 -0
  346. package/dist/client/lib/runtime-policy.js.map +1 -0
  347. package/dist/client/lib/system-labels.d.ts +15 -0
  348. package/dist/client/lib/system-labels.d.ts.map +1 -0
  349. package/dist/client/lib/system-labels.js +14 -0
  350. package/dist/client/lib/system-labels.js.map +1 -0
  351. package/dist/client/lib/utils.d.ts +2 -0
  352. package/dist/client/lib/utils.d.ts.map +1 -0
  353. package/dist/client/lib/utils.js +2 -0
  354. package/dist/client/lib/utils.js.map +1 -0
  355. package/dist/client/lib/variables-text.d.ts +67 -0
  356. package/dist/client/lib/variables-text.d.ts.map +1 -0
  357. package/dist/client/lib/variables-text.js +156 -0
  358. package/dist/client/lib/variables-text.js.map +1 -0
  359. package/dist/client/locales/en-US.d.ts +670 -0
  360. package/dist/client/locales/en-US.d.ts.map +1 -0
  361. package/dist/client/locales/en-US.js +655 -0
  362. package/dist/client/locales/en-US.js.map +1 -0
  363. package/dist/client/locales/index.d.ts +4 -0
  364. package/dist/client/locales/index.d.ts.map +1 -0
  365. package/dist/client/locales/index.js +7 -0
  366. package/dist/client/locales/index.js.map +1 -0
  367. package/dist/client/locales/zh-CN.d.ts +4 -0
  368. package/dist/client/locales/zh-CN.d.ts.map +1 -0
  369. package/dist/client/locales/zh-CN.js +650 -0
  370. package/dist/client/locales/zh-CN.js.map +1 -0
  371. package/dist/client/pages/app-page.d.ts +3 -0
  372. package/dist/client/pages/app-page.d.ts.map +1 -0
  373. package/dist/client/pages/app-page.js +532 -0
  374. package/dist/client/pages/app-page.js.map +1 -0
  375. package/dist/client/pages/apps-page.d.ts +4 -0
  376. package/dist/client/pages/apps-page.d.ts.map +1 -0
  377. package/dist/client/pages/apps-page.js +116 -0
  378. package/dist/client/pages/apps-page.js.map +1 -0
  379. package/dist/client/pages/environment-page.d.ts +3 -0
  380. package/dist/client/pages/environment-page.d.ts.map +1 -0
  381. package/dist/client/pages/environment-page.js +147 -0
  382. package/dist/client/pages/environment-page.js.map +1 -0
  383. package/dist/client/pages/environments-page.d.ts +4 -0
  384. package/dist/client/pages/environments-page.d.ts.map +1 -0
  385. package/dist/client/pages/environments-page.js +115 -0
  386. package/dist/client/pages/environments-page.js.map +1 -0
  387. package/dist/client/pages/new-app-page.d.ts +10 -0
  388. package/dist/client/pages/new-app-page.d.ts.map +1 -0
  389. package/dist/client/pages/new-app-page.js +101 -0
  390. package/dist/client/pages/new-app-page.js.map +1 -0
  391. package/dist/client/pages/request-page.d.ts +7 -0
  392. package/dist/client/pages/request-page.d.ts.map +1 -0
  393. package/dist/client/pages/request-page.js +70 -0
  394. package/dist/client/pages/request-page.js.map +1 -0
  395. package/dist/client/pages.d.ts +10 -0
  396. package/dist/client/pages.d.ts.map +1 -0
  397. package/dist/client/pages.js +25 -0
  398. package/dist/client/pages.js.map +1 -0
  399. package/dist/client/plugin.d.ts +12 -0
  400. package/dist/client/plugin.d.ts.map +1 -0
  401. package/dist/client/plugin.js +12 -0
  402. package/dist/client/plugin.js.map +1 -0
  403. package/dist/client/routes.d.ts +19 -0
  404. package/dist/client/routes.d.ts.map +1 -0
  405. package/dist/client/routes.js +89 -0
  406. package/dist/client/routes.js.map +1 -0
  407. package/dist/client/service-provider.d.ts +11 -0
  408. package/dist/client/service-provider.d.ts.map +1 -0
  409. package/dist/client/service-provider.js +14 -0
  410. package/dist/client/service-provider.js.map +1 -0
  411. package/dist/database/migrations/.manifest.json +21 -0
  412. package/dist/database/migrations/202610020001_rel_create_tables.d.ts +8 -0
  413. package/dist/database/migrations/202610020001_rel_create_tables.d.ts.map +1 -0
  414. package/dist/database/migrations/202610020001_rel_create_tables.js +247 -0
  415. package/dist/database/migrations/202610020001_rel_create_tables.js.map +1 -0
  416. package/dist/database/migrations/202610100001_rel_variables_initial_admin.d.ts +16 -0
  417. package/dist/database/migrations/202610100001_rel_variables_initial_admin.d.ts.map +1 -0
  418. package/dist/database/migrations/202610100001_rel_variables_initial_admin.js +94 -0
  419. package/dist/database/migrations/202610100001_rel_variables_initial_admin.js.map +1 -0
  420. package/dist/database/migrations/202610170001_rel_drop_app_preview_values.d.ts +8 -0
  421. package/dist/database/migrations/202610170001_rel_drop_app_preview_values.d.ts.map +1 -0
  422. package/dist/database/migrations/202610170001_rel_drop_app_preview_values.js +25 -0
  423. package/dist/database/migrations/202610170001_rel_drop_app_preview_values.js.map +1 -0
  424. package/dist/database/migrations/202610210001_rel_protected_requires_approval.d.ts +9 -0
  425. package/dist/database/migrations/202610210001_rel_protected_requires_approval.d.ts.map +1 -0
  426. package/dist/database/migrations/202610210001_rel_protected_requires_approval.js +32 -0
  427. package/dist/database/migrations/202610210001_rel_protected_requires_approval.js.map +1 -0
  428. package/dist/package.d.ts +2 -0
  429. package/dist/package.d.ts.map +1 -0
  430. package/dist/package.js +2 -0
  431. package/dist/package.js.map +1 -0
  432. package/dist/server/access/caller.d.ts +74 -0
  433. package/dist/server/access/caller.d.ts.map +1 -0
  434. package/dist/server/access/caller.js +141 -0
  435. package/dist/server/access/caller.js.map +1 -0
  436. package/dist/server/access/key-scope-objects.d.ts +20 -0
  437. package/dist/server/access/key-scope-objects.d.ts.map +1 -0
  438. package/dist/server/access/key-scope-objects.js +42 -0
  439. package/dist/server/access/key-scope-objects.js.map +1 -0
  440. package/dist/server/composition.d.ts +52 -0
  441. package/dist/server/composition.d.ts.map +1 -0
  442. package/dist/server/composition.js +105 -0
  443. package/dist/server/composition.js.map +1 -0
  444. package/dist/server/config.d.ts +127 -0
  445. package/dist/server/config.d.ts.map +1 -0
  446. package/dist/server/config.js +2 -0
  447. package/dist/server/config.js.map +1 -0
  448. package/dist/server/drivers/host/driver.d.ts +87 -0
  449. package/dist/server/drivers/host/driver.d.ts.map +1 -0
  450. package/dist/server/drivers/host/driver.js +636 -0
  451. package/dist/server/drivers/host/driver.js.map +1 -0
  452. package/dist/server/drivers/types.d.ts +221 -0
  453. package/dist/server/drivers/types.d.ts.map +1 -0
  454. package/dist/server/drivers/types.js +27 -0
  455. package/dist/server/drivers/types.js.map +1 -0
  456. package/dist/server/errors.d.ts +20 -0
  457. package/dist/server/errors.d.ts.map +1 -0
  458. package/dist/server/errors.js +44 -0
  459. package/dist/server/errors.js.map +1 -0
  460. package/dist/server/index.d.ts +14 -0
  461. package/dist/server/index.d.ts.map +1 -0
  462. package/dist/server/index.js +13 -0
  463. package/dist/server/index.js.map +1 -0
  464. package/dist/server/locales/en-US.d.ts +6 -0
  465. package/dist/server/locales/en-US.d.ts.map +1 -0
  466. package/dist/server/locales/en-US.js +4 -0
  467. package/dist/server/locales/en-US.js.map +1 -0
  468. package/dist/server/locales/index.d.ts +4 -0
  469. package/dist/server/locales/index.d.ts.map +1 -0
  470. package/dist/server/locales/index.js +6 -0
  471. package/dist/server/locales/index.js.map +1 -0
  472. package/dist/server/locales/zh-CN.d.ts +4 -0
  473. package/dist/server/locales/zh-CN.d.ts.map +1 -0
  474. package/dist/server/locales/zh-CN.js +4 -0
  475. package/dist/server/locales/zh-CN.js.map +1 -0
  476. package/dist/server/plugin.d.ts +4 -0
  477. package/dist/server/plugin.d.ts.map +1 -0
  478. package/dist/server/plugin.js +16 -0
  479. package/dist/server/plugin.js.map +1 -0
  480. package/dist/server/providers/authorization.d.ts +17 -0
  481. package/dist/server/providers/authorization.d.ts.map +1 -0
  482. package/dist/server/providers/authorization.js +60 -0
  483. package/dist/server/providers/authorization.js.map +1 -0
  484. package/dist/server/providers/index.d.ts +4 -0
  485. package/dist/server/providers/index.d.ts.map +1 -0
  486. package/dist/server/providers/index.js +8 -0
  487. package/dist/server/providers/index.js.map +1 -0
  488. package/dist/server/providers/releases.d.ts +23 -0
  489. package/dist/server/providers/releases.d.ts.map +1 -0
  490. package/dist/server/providers/releases.js +219 -0
  491. package/dist/server/providers/releases.js.map +1 -0
  492. package/dist/server/routes/api.d.ts +24 -0
  493. package/dist/server/routes/api.d.ts.map +1 -0
  494. package/dist/server/routes/api.js +1610 -0
  495. package/dist/server/routes/api.js.map +1 -0
  496. package/dist/server/routes/index.d.ts +7 -0
  497. package/dist/server/routes/index.d.ts.map +1 -0
  498. package/dist/server/routes/index.js +39 -0
  499. package/dist/server/routes/index.js.map +1 -0
  500. package/dist/server/routes/schemas.d.ts +184 -0
  501. package/dist/server/routes/schemas.d.ts.map +1 -0
  502. package/dist/server/routes/schemas.js +763 -0
  503. package/dist/server/routes/schemas.js.map +1 -0
  504. package/dist/server/secrets-stores.d.ts +9 -0
  505. package/dist/server/secrets-stores.d.ts.map +1 -0
  506. package/dist/server/secrets-stores.js +80 -0
  507. package/dist/server/secrets-stores.js.map +1 -0
  508. package/dist/server/services/artifact.d.ts +30 -0
  509. package/dist/server/services/artifact.d.ts.map +1 -0
  510. package/dist/server/services/artifact.js +234 -0
  511. package/dist/server/services/artifact.js.map +1 -0
  512. package/dist/server/services/codec.d.ts +15 -0
  513. package/dist/server/services/codec.d.ts.map +1 -0
  514. package/dist/server/services/codec.js +58 -0
  515. package/dist/server/services/codec.js.map +1 -0
  516. package/dist/server/services/config-file.d.ts +26 -0
  517. package/dist/server/services/config-file.d.ts.map +1 -0
  518. package/dist/server/services/config-file.js +154 -0
  519. package/dist/server/services/config-file.js.map +1 -0
  520. package/dist/server/services/config-secrets.d.ts +23 -0
  521. package/dist/server/services/config-secrets.d.ts.map +1 -0
  522. package/dist/server/services/config-secrets.js +269 -0
  523. package/dist/server/services/config-secrets.js.map +1 -0
  524. package/dist/server/services/credentials.d.ts +44 -0
  525. package/dist/server/services/credentials.d.ts.map +1 -0
  526. package/dist/server/services/credentials.js +137 -0
  527. package/dist/server/services/credentials.js.map +1 -0
  528. package/dist/server/services/environments.d.ts +75 -0
  529. package/dist/server/services/environments.d.ts.map +1 -0
  530. package/dist/server/services/environments.js +508 -0
  531. package/dist/server/services/environments.js.map +1 -0
  532. package/dist/server/services/events.d.ts +11 -0
  533. package/dist/server/services/events.d.ts.map +1 -0
  534. package/dist/server/services/events.js +26 -0
  535. package/dist/server/services/events.js.map +1 -0
  536. package/dist/server/services/registries.d.ts +67 -0
  537. package/dist/server/services/registries.d.ts.map +1 -0
  538. package/dist/server/services/registries.js +409 -0
  539. package/dist/server/services/registries.js.map +1 -0
  540. package/dist/server/services/release-artifacts.d.ts +42 -0
  541. package/dist/server/services/release-artifacts.d.ts.map +1 -0
  542. package/dist/server/services/release-artifacts.js +165 -0
  543. package/dist/server/services/release-artifacts.js.map +1 -0
  544. package/dist/server/services/releases.d.ts +417 -0
  545. package/dist/server/services/releases.d.ts.map +1 -0
  546. package/dist/server/services/releases.js +2725 -0
  547. package/dist/server/services/releases.js.map +1 -0
  548. package/dist/server/services/requests.d.ts +54 -0
  549. package/dist/server/services/requests.d.ts.map +1 -0
  550. package/dist/server/services/requests.js +342 -0
  551. package/dist/server/services/requests.js.map +1 -0
  552. package/dist/server/services/secrets.d.ts +11 -0
  553. package/dist/server/services/secrets.d.ts.map +1 -0
  554. package/dist/server/services/secrets.js +36 -0
  555. package/dist/server/services/secrets.js.map +1 -0
  556. package/dist/server/services/validation.d.ts +21 -0
  557. package/dist/server/services/validation.d.ts.map +1 -0
  558. package/dist/server/services/validation.js +111 -0
  559. package/dist/server/services/validation.js.map +1 -0
  560. package/dist/server/services/variables.d.ts +132 -0
  561. package/dist/server/services/variables.d.ts.map +1 -0
  562. package/dist/server/services/variables.js +501 -0
  563. package/dist/server/services/variables.js.map +1 -0
  564. package/dist/server/tokens.d.ts +110 -0
  565. package/dist/server/tokens.d.ts.map +1 -0
  566. package/dist/server/tokens.js +9 -0
  567. package/dist/server/tokens.js.map +1 -0
  568. package/dist/shared/access.d.ts +212 -0
  569. package/dist/shared/access.d.ts.map +1 -0
  570. package/dist/shared/access.js +228 -0
  571. package/dist/shared/access.js.map +1 -0
  572. package/dist/shared/locales/access.en-US.d.ts +137 -0
  573. package/dist/shared/locales/access.en-US.d.ts.map +1 -0
  574. package/dist/shared/locales/access.en-US.js +133 -0
  575. package/dist/shared/locales/access.en-US.js.map +1 -0
  576. package/dist/shared/locales/access.zh-CN.d.ts +4 -0
  577. package/dist/shared/locales/access.zh-CN.d.ts.map +1 -0
  578. package/dist/shared/locales/access.zh-CN.js +127 -0
  579. package/dist/shared/locales/access.zh-CN.js.map +1 -0
  580. package/dist/shared/releases.d.ts +657 -0
  581. package/dist/shared/releases.d.ts.map +1 -0
  582. package/dist/shared/releases.js +56 -0
  583. package/dist/shared/releases.js.map +1 -0
  584. package/package.json +118 -3
@@ -0,0 +1,141 @@
1
+ import { BUSINESS_KEYS, HUMAN_ONLY_ACTIONS, PAGES, SETTINGS_KEYS, allPermissions, businessKey, businessResource, levelActionsOf, noPermissions, reaches, settingsKey, } from '../../shared/access.js';
2
+ import { forbidden } from '../errors.js';
3
+ /** The App business, as `KeyScope.objects` names it. */
4
+ export const APPS_BUSINESS = 'rel.apps';
5
+ /**
6
+ * Permissions cut down to a credential's scope, each as the authorization plugin names it: pages (`page:<id>/access`),
7
+ * settings items (`settings:<item>/<action>`) and business actions (`rel:rel.apps/deploy.related`). A business action
8
+ * the scope covers at no level is off; one it covers keeps the caller's own reach.
9
+ */
10
+ export function narrowedByScope(permissions, scope) {
11
+ const scopes = { ...permissions.scopes };
12
+ for (const { business, key } of BUSINESS_KEYS)
13
+ if (!levelActionsOf(key).some(({ name }) => scope.allows(businessResource(business), name)))
14
+ scopes[key] = 'none';
15
+ const settings = { ...permissions.settings };
16
+ for (const { item, action, key } of SETTINGS_KEYS)
17
+ if (!scope.allows({ type: 'settings', id: item }, action))
18
+ settings[key] = false;
19
+ const pages = { ...permissions.pages };
20
+ for (const page of PAGES)
21
+ if (!scope.allows({ type: 'page', id: page }, 'access'))
22
+ pages[page] = false;
23
+ return { scopes, settings, pages };
24
+ }
25
+ /** The Apps a scoped caller is limited to; undefined when it reaches every App. */
26
+ function pickedApps(caller) {
27
+ const objects = caller.keyScope?.objects(APPS_BUSINESS);
28
+ return objects === undefined || objects === 'all' ? undefined : objects;
29
+ }
30
+ /** The plugin acting on its own, for expiry cleanup and startup recovery. */
31
+ export const SYSTEM_CALLER = {
32
+ userId: null,
33
+ kind: 'system',
34
+ permissions: allPermissions(),
35
+ };
36
+ export function actorOf(caller) {
37
+ return { userId: caller.userId, kind: caller.kind };
38
+ }
39
+ export class AccessGuard {
40
+ access;
41
+ constructor(access) {
42
+ this.access = access;
43
+ }
44
+ /** Builds the caller for a user ID: the application's permissions for them. */
45
+ async callerForUser(userId, kind = 'human') {
46
+ const access = this.access();
47
+ return {
48
+ userId,
49
+ kind,
50
+ permissions: access
51
+ ? await access.permissionsOfUser(userId)
52
+ : noPermissions(),
53
+ };
54
+ }
55
+ scope(caller, action) {
56
+ if (caller.kind === 'system')
57
+ return 'all';
58
+ if ((caller.kind === 'agent' || caller.kind === 'key') &&
59
+ HUMAN_ONLY_ACTIONS.includes(action))
60
+ return 'none';
61
+ // An action the application left out reaches nothing.
62
+ return caller.permissions.scopes[businessKey('rel.apps', action)] ?? 'none';
63
+ }
64
+ async canApp(caller, action, app) {
65
+ const picked = pickedApps(caller);
66
+ if (picked && !picked.includes(app.id))
67
+ return false;
68
+ const scope = this.scope(caller, action);
69
+ if (scope === 'all' || scope === 'none')
70
+ return scope === 'all';
71
+ if (reaches(scope, app.createdBy))
72
+ return true;
73
+ if (scope.users.length === 0)
74
+ return false;
75
+ return ((await this.access()?.isRelated?.(app.id, scope.users, action)) ?? false);
76
+ }
77
+ async requireApp(caller, action, app) {
78
+ if (await this.canApp(caller, action, app))
79
+ return;
80
+ if ((caller.kind === 'agent' || caller.kind === 'key') &&
81
+ HUMAN_ONLY_ACTIONS.includes(action))
82
+ throw forbidden(`${caller.kind === 'agent' ? 'An agent' : 'A key'} may not ${action} an application.`, 'HUMAN_REQUIRED');
83
+ throw forbidden();
84
+ }
85
+ /**
86
+ * Refuses a caller who may take none of `actions` on any App. Routes check this before reading their input; the
87
+ * services check the App itself afterwards.
88
+ */
89
+ requireAnyApp(caller, ...actions) {
90
+ if (actions.some((action) => this.scope(caller, action) !== 'none'))
91
+ return;
92
+ if ((caller.kind === 'agent' || caller.kind === 'key') &&
93
+ actions.every((action) => HUMAN_ONLY_ACTIONS.includes(action)))
94
+ throw forbidden(`${caller.kind === 'agent' ? 'An agent' : 'A key'} may not ${actions[0]} an application.`, 'HUMAN_REQUIRED');
95
+ throw forbidden();
96
+ }
97
+ /** `create` has no records: it is either allowed or not, and never for a key limited to some Apps. */
98
+ requireCreate(caller) {
99
+ if (this.scope(caller, 'create') !== 'all' || pickedApps(caller))
100
+ throw forbidden();
101
+ }
102
+ /**
103
+ * The Apps a caller may see for an action: every App, or the ones the users of their scope created plus the
104
+ * application's related ones; null when they may see none.
105
+ */
106
+ async appFilter(caller, action) {
107
+ const scope = this.scope(caller, action);
108
+ const picked = pickedApps(caller);
109
+ const only = picked ? { only: picked } : {};
110
+ if (scope === 'all')
111
+ return { all: true, ...only };
112
+ if (scope === 'none' || scope.users.length === 0)
113
+ return null;
114
+ return {
115
+ all: false,
116
+ createdBy: scope.users,
117
+ ids: (await this.access()?.relatedAppIds?.(scope.users, action)) ?? [],
118
+ ...only,
119
+ };
120
+ }
121
+ hasSetting(caller, item, action) {
122
+ if (caller.kind === 'system')
123
+ return true;
124
+ // An upload ticket holds no settings; a scoped key holds what its scope left of its owner's.
125
+ return caller.permissions.settings[settingsKey(item, action)];
126
+ }
127
+ requireSetting(caller, item, action) {
128
+ if (!this.hasSetting(caller, item, action))
129
+ throw forbidden();
130
+ }
131
+ hasPage(caller, page) {
132
+ if (caller.kind === 'system')
133
+ return true;
134
+ return caller.permissions.pages[page];
135
+ }
136
+ requirePage(caller, page) {
137
+ if (!this.hasPage(caller, page))
138
+ throw forbidden();
139
+ }
140
+ }
141
+ //# sourceMappingURL=caller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caller.js","sourceRoot":"","sources":["../../../server/access/caller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * The Apps an API key's scope may be limited to (the `releases.apps` permission group's records), in the shape of the
3
+ * API keys plugin's `KeyScopeObjectSource`, without importing it: the application hands this to that plugin.
4
+ */
5
+ import type { AuthorizationIdentity } from '@nocobase/authorization/core';
6
+ import type { Releases } from '../composition.js';
7
+ export interface ReleasesKeyScopeObjects {
8
+ list(input: {
9
+ readonly identity: AuthorizationIdentity;
10
+ readonly search?: string;
11
+ readonly ids?: readonly string[];
12
+ }): Promise<readonly {
13
+ id: string;
14
+ title: string;
15
+ description?: string;
16
+ }[]>;
17
+ }
18
+ /** Lists the Apps the identity may see, by name, for choosing which ones a key reaches. */
19
+ export declare function releasesKeyScopeObjects(releases: () => Releases): ReleasesKeyScopeObjects;
20
+ //# sourceMappingURL=key-scope-objects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-scope-objects.d.ts","sourceRoot":"","sources":["../../../server/access/key-scope-objects.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAGlD,MAAM,WAAW,uBAAuB;IACtC,IAAI,CAAC,KAAK,EAAE;QACV,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;QACzC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,GAAG,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;KAClC,GAAG,OAAO,CAAC,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAC;CAC7E;AAKD,2FAA2F;AAC3F,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,QAAQ,GACvB,uBAAuB,CAoCzB"}
@@ -0,0 +1,42 @@
1
+ import { ReleasesError } from '../errors.js';
2
+ const PAGE_SIZE = 100;
3
+ const MAX_PAGES = 20;
4
+ /** Lists the Apps the identity may see, by name, for choosing which ones a key reaches. */
5
+ export function releasesKeyScopeObjects(releases) {
6
+ return {
7
+ async list({ identity, search, ids }) {
8
+ // The chooser's own view of the Apps, never a scoped one: a key cannot pick records for another key.
9
+ const { keyScope: _keyScope, ...person } = identity;
10
+ const caller = await releases().callerOf(person);
11
+ const wanted = ids ? new Set(ids) : null;
12
+ const found = [];
13
+ for (let page = 1; page <= MAX_PAGES; page += 1) {
14
+ let result;
15
+ try {
16
+ result = await releases().releases.listApps(caller, {
17
+ page,
18
+ pageSize: PAGE_SIZE,
19
+ ...(search?.trim() ? { search: search.trim() } : {}),
20
+ });
21
+ }
22
+ catch (error) {
23
+ if (error instanceof ReleasesError &&
24
+ error.status === 'PERMISSION_DENIED')
25
+ return [];
26
+ throw error;
27
+ }
28
+ for (const { app } of result.items)
29
+ if (!wanted || wanted.has(app.id))
30
+ found.push({
31
+ id: app.id,
32
+ title: app.name || app.id,
33
+ ...(app.description ? { description: app.description } : {}),
34
+ });
35
+ if (page * PAGE_SIZE >= result.total)
36
+ break;
37
+ }
38
+ return found;
39
+ },
40
+ };
41
+ }
42
+ //# sourceMappingURL=key-scope-objects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-scope-objects.js","sourceRoot":"","sources":["../../../server/access/key-scope-objects.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAU7C,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB,2FAA2F;AAC3F,MAAM,UAAU,uBAAuB,CACrC,QAAwB;IAExB,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE;YAClC,qGAAqG;YACrG,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,GAAG,QAAQ,CAAC;YACpD,MAAM,MAAM,GAAG,MAAM,QAAQ,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACzC,MAAM,KAAK,GAA0D,EAAE,CAAC;YACxE,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,SAAS,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;gBAChD,IAAI,MAAM,CAAC;gBACX,IAAI,CAAC;oBACH,MAAM,GAAG,MAAM,QAAQ,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE;wBAClD,IAAI;wBACJ,QAAQ,EAAE,SAAS;wBACnB,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBACrD,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IACE,KAAK,YAAY,aAAa;wBAC9B,KAAK,CAAC,MAAM,KAAK,mBAAmB;wBAEpC,OAAO,EAAE,CAAC;oBACZ,MAAM,KAAK,CAAC;gBACd,CAAC;gBACD,KAAK,MAAM,EAAE,GAAG,EAAE,IAAI,MAAM,CAAC,KAAK;oBAChC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC/B,KAAK,CAAC,IAAI,CAAC;4BACT,EAAE,EAAE,GAAG,CAAC,EAAE;4BACV,KAAK,EAAE,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE;4BACzB,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;yBAC7D,CAAC,CAAC;gBACP,IAAI,IAAI,GAAG,SAAS,IAAI,MAAM,CAAC,KAAK;oBAAE,MAAM;YAC9C,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * The plugin's services wired together, without a container: the provider builds them from the application, and tests
3
+ * and harnesses build them directly.
4
+ */
5
+ import type { AuthorizationIdentity } from '@nocobase/authorization/core';
6
+ import type { DatabaseManager } from '@nocobase/db';
7
+ import type { Logger } from '@nocobase/logging';
8
+ import type { ActorKind } from '../shared/releases.js';
9
+ import { AccessGuard, type Caller } from './access/caller.js';
10
+ import type { ReleasesPluginConfig } from './config.js';
11
+ import type { DriverRegistry } from './drivers/types.js';
12
+ import { UploadTicketService } from './services/credentials.js';
13
+ import { EnvironmentService } from './services/environments.js';
14
+ import { ReleasesEventBus } from './services/events.js';
15
+ import { RegistryService } from './services/registries.js';
16
+ import { ReleasesService } from './services/releases.js';
17
+ import { DeploymentRequestService } from './services/requests.js';
18
+ import type { ReleasesSecrets } from './services/secrets.js';
19
+ import type { ReleasesAccess } from './tokens.js';
20
+ export interface ReleasesCompositionOptions {
21
+ readonly database: DatabaseManager;
22
+ readonly config: Pick<ReleasesPluginConfig, 'artifact' | 'dataDir' | 'maxArtifactSizeMB' | 'logging' | 'uploadTicketTtlSeconds'>;
23
+ readonly drivers: DriverRegistry;
24
+ /** The application's roles; resolved on each use, so it may be bound after the plugin. */
25
+ readonly access: () => ReleasesAccess | undefined;
26
+ /** The application's secrets service: seals environment and registry credentials. */
27
+ readonly secrets?: ReleasesSecrets;
28
+ /** The application's own public base path, which no App may take. */
29
+ readonly reservedBasePath?: string;
30
+ /** The application's own origin (`app.publicOrigin`), which Apps served under a path of it take as theirs. */
31
+ readonly publicOrigin?: string | null;
32
+ readonly logger?: Logger;
33
+ }
34
+ export interface Releases {
35
+ readonly releases: ReleasesService;
36
+ readonly environments: EnvironmentService;
37
+ /** Image registries: settings and their write-only pull credentials. */
38
+ readonly registries: RegistryService;
39
+ readonly requests: DeploymentRequestService;
40
+ readonly tickets: UploadTicketService;
41
+ readonly events: ReleasesEventBus;
42
+ readonly drivers: DriverRegistry;
43
+ readonly guard: AccessGuard;
44
+ /** The caller for a signed-in identity: the application's permissions and actor kind. */
45
+ callerOf(identity: AuthorizationIdentity): Promise<Caller>;
46
+ /** The caller for a user ID, as a person, an agent or an application rule acting for them. */
47
+ callerForUser(userId: string, kind?: ActorKind): Promise<Caller>;
48
+ /** The plugin acting on its own (cleanup, recovery). */
49
+ readonly system: Caller;
50
+ }
51
+ export declare function createReleases(options: ReleasesCompositionOptions): Releases;
52
+ //# sourceMappingURL=composition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composition.d.ts","sourceRoot":"","sources":["../../server/composition.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EACL,WAAW,EAGX,KAAK,MAAM,EACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAElE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,IAAI,CACnB,oBAAoB,EAClB,UAAU,GACV,SAAS,GACT,mBAAmB,GACnB,SAAS,GACT,wBAAwB,CAC3B,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,0FAA0F;IAC1F,QAAQ,CAAC,MAAM,EAAE,MAAM,cAAc,GAAG,SAAS,CAAC;IAClD,qFAAqF;IACrF,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC;IACnC,qEAAqE;IACrE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,8GAA8G;IAC9G,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAC1C,wEAAwE;IACxE,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC;IACrC,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAC;IAC5C,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,yFAAyF;IACzF,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D,8FAA8F;IAC9F,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACjE,wDAAwD;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,0BAA0B,GAAG,QAAQ,CA+F5E"}
@@ -0,0 +1,105 @@
1
+ import { noPermissions } from '../shared/access.js';
2
+ import { AccessGuard, SYSTEM_CALLER, narrowedByScope, } from './access/caller.js';
3
+ import { UploadTicketService } from './services/credentials.js';
4
+ import { EnvironmentService } from './services/environments.js';
5
+ import { ReleasesEventBus } from './services/events.js';
6
+ import { RegistryService } from './services/registries.js';
7
+ import { ReleasesService } from './services/releases.js';
8
+ import { DeploymentRequestService } from './services/requests.js';
9
+ import { VariableStore } from './services/variables.js';
10
+ export function createReleases(options) {
11
+ const guard = new AccessGuard(options.access);
12
+ const events = new ReleasesEventBus(options.logger);
13
+ const variables = new VariableStore({
14
+ database: options.database,
15
+ secrets: options.secrets,
16
+ });
17
+ // The environment service reaches the releases service through these callbacks, created right after it.
18
+ // eslint-disable-next-line prefer-const
19
+ let releases;
20
+ const environments = new EnvironmentService({
21
+ database: options.database,
22
+ drivers: options.drivers,
23
+ guard,
24
+ secrets: options.secrets,
25
+ onChanged: (id) => releases.environmentChanged(id),
26
+ countApps: (id) => releases.countApps(id),
27
+ check: (id) => releases.checkEnvironment(id),
28
+ variables,
29
+ });
30
+ const registries = new RegistryService({
31
+ database: options.database,
32
+ guard,
33
+ secrets: options.secrets,
34
+ });
35
+ releases = new ReleasesService({
36
+ database: options.database,
37
+ environments,
38
+ registries,
39
+ guard,
40
+ events,
41
+ artifact: options.config.artifact,
42
+ dataDir: options.config.dataDir,
43
+ maxArtifactBytes: options.config.maxArtifactSizeMB === undefined
44
+ ? undefined
45
+ : options.config.maxArtifactSizeMB * 1024 * 1024,
46
+ logging: options.config.logging,
47
+ reservedBasePath: options.reservedBasePath,
48
+ publicOrigin: options.publicOrigin ?? null,
49
+ variables,
50
+ secrets: options.secrets,
51
+ logger: options.logger,
52
+ });
53
+ const requests = new DeploymentRequestService({
54
+ database: options.database,
55
+ releases,
56
+ environments,
57
+ guard,
58
+ events,
59
+ access: options.access,
60
+ });
61
+ const tickets = new UploadTicketService({
62
+ database: options.database,
63
+ releases,
64
+ environments,
65
+ guard,
66
+ defaultTtlSeconds: options.config.uploadTicketTtlSeconds,
67
+ });
68
+ return {
69
+ releases,
70
+ environments,
71
+ registries,
72
+ requests,
73
+ tickets,
74
+ events,
75
+ drivers: options.drivers,
76
+ guard,
77
+ system: SYSTEM_CALLER,
78
+ async callerOf(identity) {
79
+ const access = options.access();
80
+ if (identity.principal.type !== 'user')
81
+ return { userId: null, kind: 'human', permissions: noPermissions() };
82
+ const permissions = access
83
+ ? await access.permissionsOf(identity)
84
+ : noPermissions();
85
+ const { keyScope } = identity;
86
+ // A scoped credential (an API key with a scope, a service account's key) is a key, never a person: it may not
87
+ // take a person-only action or deploy to a protected environment. One the
88
+ // application names an agent's (an agent's run, bounded by its scope) acts as the agent, under the same limits.
89
+ if (keyScope)
90
+ return {
91
+ userId: identity.principal.id,
92
+ kind: access?.actorKindOf?.(identity) === 'agent' ? 'agent' : 'key',
93
+ permissions: narrowedByScope(permissions, keyScope),
94
+ keyScope,
95
+ };
96
+ return {
97
+ userId: identity.principal.id,
98
+ kind: access?.actorKindOf?.(identity) ?? 'human',
99
+ permissions,
100
+ };
101
+ },
102
+ callerForUser: (userId, kind) => guard.callerForUser(userId, kind),
103
+ };
104
+ }
105
+ //# sourceMappingURL=composition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composition.js","sourceRoot":"","sources":["../../server/composition.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,127 @@
1
+ import type { AppRuntimeLogging } from '@nocobase/app-server/logging';
2
+ import type { AppDriveDiskConfig } from '@nocobase/drive';
3
+ import type { LoggingConfig } from '@nocobase/logging';
4
+ /** The application's `releases` configuration section. */
5
+ export interface ReleasesPluginConfig {
6
+ /** Where release archives are stored. */
7
+ readonly artifact: AppDriveDiskConfig;
8
+ /** The plugin's own files: deployment logs and the configuration each deployment applied. */
9
+ readonly dataDir: string;
10
+ /** Largest accepted release archive, in MiB (256 by default). */
11
+ readonly maxArtifactSizeMB?: number;
12
+ /** Lifetime of an upload ticket when the request names none, in seconds (900 by default, at most 3600). */
13
+ readonly uploadTicketTtlSeconds?: number;
14
+ readonly logging?: {
15
+ readonly deployments?: {
16
+ readonly enabled?: boolean;
17
+ readonly retentionDays?: number;
18
+ readonly maxFileSizeMB?: number;
19
+ readonly maxTotalSizeMB?: number;
20
+ };
21
+ readonly apps?: AppRuntimeLogging;
22
+ };
23
+ /**
24
+ * The local App Host that runs Apps in process. Enabled, the plugin starts it as a child process and registers the
25
+ * `host` driver; an environment with run mode `in-process` deploys into it.
26
+ */
27
+ readonly host?: ReleasesHostConfig;
28
+ /**
29
+ * The Docker Host: a second App Host child that runs Apps in Docker containers (`@nocobase/app-host-docker`, which
30
+ * the application must install) and no App code itself. Enabled, environments may choose the run mode `docker`. Its
31
+ * listener is where Docker Apps are reached.
32
+ */
33
+ readonly docker?: ReleasesDockerHostConfig;
34
+ }
35
+ /** The Docker Host child (`releases.docker`). */
36
+ export interface ReleasesDockerHostConfig {
37
+ readonly enabled: boolean;
38
+ readonly driver?: 'auto' | 'node' | 'tsx';
39
+ /** Its executable; `@nocobase/app-host-docker/cli` resolved from this plugin by default. */
40
+ readonly entrypoint?: string;
41
+ readonly appRevisionsDir: string;
42
+ /** Where it keeps each App's configuration file (data lives in Docker volumes). */
43
+ readonly appVolumesDir: string;
44
+ readonly configPath: string;
45
+ /** Where it records deployment outcomes; `control/` next to the revisions directory by default. */
46
+ readonly controlDir?: string;
47
+ readonly childOutputDir?: string;
48
+ /** Its listener, which Docker Apps are reached through: `127.0.0.1` unless something in front must reach it. */
49
+ readonly host?: string;
50
+ readonly port?: number;
51
+ /** Public origin of its listener (or a pattern with `{appId}`) for environments without their own URL pattern. */
52
+ readonly publicUrl?: string;
53
+ readonly startTimeoutMs?: number;
54
+ readonly ipcTimeoutMs?: number;
55
+ readonly shutdownTimeoutMs?: number;
56
+ readonly autoRestart?: boolean;
57
+ readonly tsxCli?: string;
58
+ readonly tsconfig?: string;
59
+ readonly logging?: LoggingConfig;
60
+ /**
61
+ * Its environment; omitted, it inherits this application's (it runs no App code, and an environment's
62
+ * `env.allow` copies from it).
63
+ */
64
+ readonly env?: {
65
+ readonly allow?: readonly string[];
66
+ readonly set?: Readonly<Record<string, string>>;
67
+ };
68
+ /** How often it stops idle containers and makes Apps dormant, in seconds (60). */
69
+ readonly sweepIntervalSeconds?: number;
70
+ readonly activationHoldMs?: number;
71
+ readonly activationWaitMs?: number;
72
+ /** Host-wide settings of the Docker backend (`pollIntervalMs`, `reachTimeoutMs`). */
73
+ readonly backend?: Readonly<Record<string, unknown>>;
74
+ }
75
+ export interface ReleasesHostConfig {
76
+ readonly enabled: boolean;
77
+ readonly driver?: 'auto' | 'node' | 'tsx';
78
+ readonly appRevisionsDir: string;
79
+ readonly appVolumesDir: string;
80
+ readonly configPath: string;
81
+ readonly childOutputDir?: string;
82
+ readonly host?: string;
83
+ readonly port?: number;
84
+ /** Public origin of the Host listener for environments without their own URL pattern. */
85
+ readonly publicUrl?: string;
86
+ /** Where the Host records deployment outcomes; `control/` next to the revisions directory by default. */
87
+ readonly controlDir?: string;
88
+ readonly startTimeoutMs?: number;
89
+ readonly ipcTimeoutMs?: number;
90
+ readonly shutdownTimeoutMs?: number;
91
+ readonly autoRestart?: boolean;
92
+ readonly maxAutomaticRestarts?: number;
93
+ readonly automaticRestartWindowMs?: number;
94
+ readonly automaticRestartBaseDelayMs?: number;
95
+ readonly entrypoint?: string;
96
+ readonly tsxCli?: string;
97
+ readonly tsconfig?: string;
98
+ readonly logging?: LoggingConfig;
99
+ /**
100
+ * The Host child's environment (`AppHostSupervisor` `env`): with `allow`, only the listed variables reach it, so
101
+ * Apps cannot read this application's secrets; omitted, it inherits everything.
102
+ */
103
+ readonly env?: {
104
+ readonly allow?: readonly string[];
105
+ readonly set?: Readonly<Record<string, string>>;
106
+ };
107
+ /** User and group the Host child runs as (needs the privilege to switch users). */
108
+ readonly uid?: number;
109
+ readonly gid?: number;
110
+ /** A command the Host child is started through, such as `['setpriv', '--reuid=preview', '--']`. */
111
+ readonly launchPrefix?: readonly string[];
112
+ /**
113
+ * Restart the Host once this many Apps were removed, replaced, stopped for idleness or made dormant since it started,
114
+ * replaying the desired set: in-process Apps cannot unload their modules, so every runtime that goes away leaves
115
+ * memory behind. The restart waits while an on-demand App is running. Off when omitted.
116
+ */
117
+ readonly restartAfterChurn?: number;
118
+ /** How often the Host's idle stops and dormancies are read for `restartAfterChurn`, in milliseconds (60000). */
119
+ readonly churnCheckIntervalMs?: number;
120
+ /** How often the Host stops idle Apps and makes due Apps dormant, in seconds (60). */
121
+ readonly sweepIntervalSeconds?: number;
122
+ /** How long a page request to a stopped App waits before it gets the Host's starting page, in milliseconds (1500). */
123
+ readonly activationHoldMs?: number;
124
+ /** How long other requests to a stopped App wait for it to start, in milliseconds (60000). */
125
+ readonly activationWaitMs?: number;
126
+ }
127
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../server/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../server/config.ts"],"names":[],"mappings":""}
@@ -0,0 +1,87 @@
1
+ import type { HostManagementService } from '@nocobase/app-host/management';
2
+ import type { AppHostSupervisorInfo } from '@nocobase/app-host/supervisor';
3
+ import type { AppRuntimeLogging } from '@nocobase/app-server/logging';
4
+ import type { AppDriveDiskConfig } from '@nocobase/drive';
5
+ import { type Logger, type LoggingConfig } from '@nocobase/logging';
6
+ import { type DeploymentDriver, type DriverCapabilities } from '../types.js';
7
+ /** The backend of Apps that run in the Host process. */
8
+ export declare const IN_PROCESS_BACKEND = "in-process";
9
+ export declare const DOCKER_BACKEND = "docker";
10
+ /** What each backend this driver knows can do; another backend a Host offers is treated as the in-process one. */
11
+ export declare const HOST_BACKEND_CAPABILITIES: Readonly<Record<string, DriverCapabilities>>;
12
+ /** What the driver needs from `AppHostSupervisor`; tests pass a fake. */
13
+ export interface HostRuntimeController {
14
+ getInfo(): Pick<AppHostSupervisorInfo, 'status' | 'targetUrl'>;
15
+ onReady(listener: () => void): () => void;
16
+ ensureStarted(): Promise<URL>;
17
+ /** The child's management service; asked for per call, since a restarted child is reached through a new client. */
18
+ getManagementClient(): Promise<HostManagementService>;
19
+ /** Stops and starts the Host child; its `onReady` listeners then replay the desired sets. */
20
+ restart?(reason?: string): Promise<URL>;
21
+ }
22
+ /** A Host the driver deploys to, for the environments whose backend it runs. */
23
+ export interface HostEndpointOptions {
24
+ readonly controller: HostRuntimeController;
25
+ /** Prepares the Host before it first starts, such as writing its configuration file (`writeHostConfig`). */
26
+ readonly prepare?: () => Promise<void>;
27
+ /**
28
+ * The public origin and path its listener is reached at (`https://apps.example.com`, or `/` behind this
29
+ * application's own listener), with `{appId}` or as a base. An environment's URL pattern wins over it. Without
30
+ * either, URLs point at the Host's local listener.
31
+ */
32
+ readonly publicUrl?: string;
33
+ /**
34
+ * Restart the Host once this many Apps were replaced, removed, stopped for idleness or made dormant since it
35
+ * started: in-process Apps cannot unload their modules (ESM has no unload), so every runtime that goes away leaves
36
+ * memory behind; a restart replays the desired sets into a fresh process, where on-demand Apps stay stopped until
37
+ * requested. The restart waits while an on-demand App is running. Off when omitted.
38
+ */
39
+ readonly restartAfterChurn?: number;
40
+ }
41
+ export interface HostDriverOptions {
42
+ /** The Host for each backend environments may choose; `in-process` is required. */
43
+ readonly hosts: Readonly<Record<string, HostEndpointOptions>>;
44
+ /** The Apps' own logging, passed into every deployment. */
45
+ readonly appLogging?: AppRuntimeLogging;
46
+ /** How often the driver reads the Host's idle stops and dormancies for `restartAfterChurn` (60 s by default). */
47
+ readonly churnCheckIntervalMs?: number;
48
+ /** How the application configured each Host, shown read-only with an environment's settings, by backend. */
49
+ readonly facts?: Readonly<Record<string, Readonly<Record<string, unknown>>>>;
50
+ /** The driver kind; `host` unless an application registers two. */
51
+ readonly kind?: string;
52
+ readonly logger?: Logger;
53
+ }
54
+ /** The Host driver, plus what an application's listener needs to forward the in-process Host's traffic. */
55
+ export interface HostDeploymentDriver extends DeploymentDriver {
56
+ /** Where to forward requests outside this application's mount, or null while the in-process Host is not ready. */
57
+ proxyTarget(): URL | null;
58
+ /** Apps replaced, removed, stopped for idleness or made dormant since the in-process Host last started. */
59
+ churn(): number;
60
+ /** Restarts the in-process Host and replays its environments' desired sets, reclaiming unloaded Apps' memory. */
61
+ restartHost(reason?: string): Promise<void>;
62
+ }
63
+ /** An environment's Host settings. */
64
+ export interface HostEnvironmentSettings {
65
+ readonly backend: string;
66
+ readonly backendConfig: Readonly<Record<string, unknown>>;
67
+ }
68
+ export declare function hostEnvironmentSettings(config: Readonly<Record<string, unknown>>): HostEnvironmentSettings;
69
+ export declare function createHostDriver(options: HostDriverOptions): HostDeploymentDriver;
70
+ /** What a Host child's configuration file holds; see `writeHostConfig`. */
71
+ export interface HostConfigFile {
72
+ readonly artifact: AppDriveDiskConfig;
73
+ readonly appVolumesDir: string;
74
+ readonly appRevisionsDir?: string;
75
+ /** Where the Host records deployment outcomes. */
76
+ readonly controlDir?: string;
77
+ readonly logging?: LoggingConfig;
78
+ /** How often the Host stops idle Apps and makes Apps dormant, in seconds (60 by default). */
79
+ readonly sweepIntervalSeconds?: number;
80
+ readonly activationHoldMs?: number;
81
+ readonly activationWaitMs?: number;
82
+ /** Host-wide settings of the Host's backends (`host.backends.<name>`). */
83
+ readonly backends?: Readonly<Record<string, Record<string, unknown>>>;
84
+ }
85
+ /** Writes a managed Host child's configuration file (`AppHostSupervisor` `configPath`) before it starts. */
86
+ export declare function writeHostConfig(configPath: string, config: HostConfigFile): Promise<void>;
87
+ //# sourceMappingURL=driver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../../../server/drivers/host/driver.ts"],"names":[],"mappings":"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"}