@agilesyndrome/cf-genai-base 5.0.2 → 6.0.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 (696) hide show
  1. package/CHANGELOG.md +99 -0
  2. package/CLI.md +9 -13
  3. package/CONTRACT.md +32 -15
  4. package/README.md +95 -28
  5. package/bin/cf-genai.js +24 -8
  6. package/dist/admin/auth.d.ts +12 -0
  7. package/dist/admin/auth.d.ts.map +1 -0
  8. package/dist/admin/auth.js +103 -0
  9. package/dist/admin/auth.js.map +1 -0
  10. package/dist/admin/index.d.ts +2 -0
  11. package/dist/admin/index.d.ts.map +1 -0
  12. package/dist/admin/index.js +2 -0
  13. package/dist/admin/index.js.map +1 -0
  14. package/dist/admin/router.d.ts +4 -0
  15. package/dist/admin/router.d.ts.map +1 -0
  16. package/dist/admin/router.js +24 -0
  17. package/dist/admin/router.js.map +1 -0
  18. package/dist/admin/types.d.ts +43 -0
  19. package/dist/admin/types.d.ts.map +1 -0
  20. package/dist/admin/types.js +2 -0
  21. package/dist/admin/types.js.map +1 -0
  22. package/dist/api/client.d.ts +34 -0
  23. package/dist/api/client.d.ts.map +1 -0
  24. package/dist/api/client.js +59 -0
  25. package/dist/api/client.js.map +1 -0
  26. package/dist/api/contracts.d.ts +31 -0
  27. package/dist/api/contracts.d.ts.map +1 -0
  28. package/dist/api/contracts.js +101 -0
  29. package/dist/api/contracts.js.map +1 -0
  30. package/dist/api/http.d.ts +12 -0
  31. package/dist/api/http.d.ts.map +1 -0
  32. package/dist/api/http.js +36 -0
  33. package/dist/api/http.js.map +1 -0
  34. package/dist/api/index.d.ts +14 -0
  35. package/dist/api/index.d.ts.map +1 -0
  36. package/dist/api/index.js +11 -0
  37. package/dist/api/index.js.map +1 -0
  38. package/dist/api/testing.d.ts +10 -0
  39. package/dist/api/testing.d.ts.map +1 -0
  40. package/dist/api/testing.js +26 -0
  41. package/dist/api/testing.js.map +1 -0
  42. package/dist/app.d.ts +21 -0
  43. package/dist/app.d.ts.map +1 -0
  44. package/dist/app.js +23 -0
  45. package/dist/app.js.map +1 -0
  46. package/dist/auth/constants.d.ts +9 -0
  47. package/dist/auth/constants.d.ts.map +1 -0
  48. package/{src → dist}/auth/constants.js +2 -2
  49. package/dist/auth/constants.js.map +1 -0
  50. package/dist/auth/domains.d.ts +3 -0
  51. package/dist/auth/domains.d.ts.map +1 -0
  52. package/dist/auth/domains.js +8 -0
  53. package/dist/auth/domains.js.map +1 -0
  54. package/dist/auth/encoding.d.ts +7 -0
  55. package/dist/auth/encoding.d.ts.map +1 -0
  56. package/dist/auth/encoding.js +41 -0
  57. package/dist/auth/encoding.js.map +1 -0
  58. package/dist/auth/groups/d1.d.ts +16 -0
  59. package/dist/auth/groups/d1.d.ts.map +1 -0
  60. package/dist/auth/groups/d1.js +66 -0
  61. package/dist/auth/groups/d1.js.map +1 -0
  62. package/dist/auth/groups/domain.d.ts +8 -0
  63. package/dist/auth/groups/domain.d.ts.map +1 -0
  64. package/dist/auth/groups/domain.js +99 -0
  65. package/dist/auth/groups/domain.js.map +1 -0
  66. package/dist/auth/groups/index.d.ts +7 -0
  67. package/dist/auth/groups/index.d.ts.map +1 -0
  68. package/dist/auth/groups/index.js +7 -0
  69. package/dist/auth/groups/index.js.map +1 -0
  70. package/dist/auth/groups/model.d.ts +38 -0
  71. package/dist/auth/groups/model.d.ts.map +1 -0
  72. package/dist/auth/groups/model.js +2 -0
  73. package/dist/auth/groups/model.js.map +1 -0
  74. package/dist/auth/groups/policy.d.ts +5 -0
  75. package/dist/auth/groups/policy.d.ts.map +1 -0
  76. package/dist/auth/groups/policy.js +8 -0
  77. package/dist/auth/groups/policy.js.map +1 -0
  78. package/dist/auth/groups/service.d.ts +20 -0
  79. package/dist/auth/groups/service.d.ts.map +1 -0
  80. package/dist/auth/groups/service.js +40 -0
  81. package/dist/auth/groups/service.js.map +1 -0
  82. package/dist/auth/groups/validation.d.ts +5 -0
  83. package/dist/auth/groups/validation.d.ts.map +1 -0
  84. package/dist/auth/groups/validation.js +22 -0
  85. package/dist/auth/groups/validation.js.map +1 -0
  86. package/dist/auth/groups/views/list.d.ts +10 -0
  87. package/dist/auth/groups/views/list.d.ts.map +1 -0
  88. package/dist/auth/groups/views/list.js +4 -0
  89. package/dist/auth/groups/views/list.js.map +1 -0
  90. package/dist/auth/identity/index.d.ts +58 -0
  91. package/dist/auth/identity/index.d.ts.map +1 -0
  92. package/dist/auth/identity/index.js +58 -0
  93. package/dist/auth/identity/index.js.map +1 -0
  94. package/dist/auth/impersonation/constants.d.ts +2 -0
  95. package/dist/auth/impersonation/constants.d.ts.map +1 -0
  96. package/dist/auth/impersonation/constants.js +2 -0
  97. package/dist/auth/impersonation/constants.js.map +1 -0
  98. package/dist/auth/impersonation/domain.d.ts +6 -0
  99. package/dist/auth/impersonation/domain.d.ts.map +1 -0
  100. package/dist/auth/impersonation/domain.js +16 -0
  101. package/dist/auth/impersonation/domain.js.map +1 -0
  102. package/dist/auth/impersonation/index.d.ts +6 -0
  103. package/dist/auth/impersonation/index.d.ts.map +1 -0
  104. package/dist/auth/impersonation/index.js +6 -0
  105. package/dist/auth/impersonation/index.js.map +1 -0
  106. package/dist/auth/impersonation/model.d.ts +12 -0
  107. package/dist/auth/impersonation/model.d.ts.map +1 -0
  108. package/dist/auth/impersonation/model.js +2 -0
  109. package/dist/auth/impersonation/model.js.map +1 -0
  110. package/dist/auth/impersonation/service.d.ts +4 -0
  111. package/dist/auth/impersonation/service.d.ts.map +1 -0
  112. package/dist/auth/impersonation/service.js +32 -0
  113. package/dist/auth/impersonation/service.js.map +1 -0
  114. package/dist/auth/impersonation/validation.d.ts +4 -0
  115. package/dist/auth/impersonation/validation.d.ts.map +1 -0
  116. package/dist/auth/impersonation/validation.js +14 -0
  117. package/dist/auth/impersonation/validation.js.map +1 -0
  118. package/dist/auth/index.d.ts +13 -0
  119. package/dist/auth/index.d.ts.map +1 -0
  120. package/dist/auth/index.js +13 -0
  121. package/dist/auth/index.js.map +1 -0
  122. package/dist/auth/oauth-single/constants.d.ts +4 -0
  123. package/dist/auth/oauth-single/constants.d.ts.map +1 -0
  124. package/dist/auth/oauth-single/constants.js +5 -0
  125. package/dist/auth/oauth-single/constants.js.map +1 -0
  126. package/dist/auth/oauth-single/cookies.d.ts +10 -0
  127. package/dist/auth/oauth-single/cookies.d.ts.map +1 -0
  128. package/dist/auth/oauth-single/cookies.js +59 -0
  129. package/dist/auth/oauth-single/cookies.js.map +1 -0
  130. package/dist/auth/oauth-single/domain.d.ts +14 -0
  131. package/dist/auth/oauth-single/domain.d.ts.map +1 -0
  132. package/dist/auth/oauth-single/domain.js +12 -0
  133. package/dist/auth/oauth-single/domain.js.map +1 -0
  134. package/dist/auth/oauth-single/index.d.ts +31 -0
  135. package/dist/auth/oauth-single/index.d.ts.map +1 -0
  136. package/dist/auth/oauth-single/index.js +215 -0
  137. package/dist/auth/oauth-single/index.js.map +1 -0
  138. package/dist/auth/oauth-single/model.d.ts +75 -0
  139. package/dist/auth/oauth-single/model.d.ts.map +1 -0
  140. package/dist/auth/oauth-single/model.js +2 -0
  141. package/dist/auth/oauth-single/model.js.map +1 -0
  142. package/dist/auth/oauth-single/protocol.d.ts +9 -0
  143. package/dist/auth/oauth-single/protocol.d.ts.map +1 -0
  144. package/dist/auth/oauth-single/protocol.js +190 -0
  145. package/dist/auth/oauth-single/protocol.js.map +1 -0
  146. package/dist/auth/oauth-single/session.d.ts +7 -0
  147. package/dist/auth/oauth-single/session.d.ts.map +1 -0
  148. package/dist/auth/oauth-single/session.js +78 -0
  149. package/dist/auth/oauth-single/session.js.map +1 -0
  150. package/dist/auth/repositories.d.ts +58 -0
  151. package/dist/auth/repositories.d.ts.map +1 -0
  152. package/dist/auth/repositories.js +31 -0
  153. package/dist/auth/repositories.js.map +1 -0
  154. package/dist/auth/scopes/d1.d.ts +17 -0
  155. package/dist/auth/scopes/d1.d.ts.map +1 -0
  156. package/dist/auth/scopes/d1.js +54 -0
  157. package/dist/auth/scopes/d1.js.map +1 -0
  158. package/dist/auth/scopes/domain.d.ts +7 -0
  159. package/dist/auth/scopes/domain.d.ts.map +1 -0
  160. package/dist/auth/scopes/domain.js +25 -0
  161. package/dist/auth/scopes/domain.js.map +1 -0
  162. package/dist/auth/scopes/index.d.ts +4 -0
  163. package/dist/auth/scopes/index.d.ts.map +1 -0
  164. package/dist/auth/scopes/index.js +4 -0
  165. package/dist/auth/scopes/index.js.map +1 -0
  166. package/dist/auth/scopes/model.d.ts +26 -0
  167. package/dist/auth/scopes/model.d.ts.map +1 -0
  168. package/dist/auth/scopes/model.js +2 -0
  169. package/dist/auth/scopes/model.js.map +1 -0
  170. package/dist/auth/scopes/policy.d.ts +3 -0
  171. package/dist/auth/scopes/policy.d.ts.map +1 -0
  172. package/dist/auth/scopes/policy.js +4 -0
  173. package/dist/auth/scopes/policy.js.map +1 -0
  174. package/dist/auth/scopes/service.d.ts +4 -0
  175. package/dist/auth/scopes/service.d.ts.map +1 -0
  176. package/dist/auth/scopes/service.js +4 -0
  177. package/dist/auth/scopes/service.js.map +1 -0
  178. package/dist/auth/scopes/validation.d.ts +6 -0
  179. package/dist/auth/scopes/validation.d.ts.map +1 -0
  180. package/dist/auth/scopes/validation.js +33 -0
  181. package/dist/auth/scopes/validation.js.map +1 -0
  182. package/dist/auth/scopes/views/list.d.ts +9 -0
  183. package/dist/auth/scopes/views/list.d.ts.map +1 -0
  184. package/dist/auth/scopes/views/list.js +4 -0
  185. package/dist/auth/scopes/views/list.js.map +1 -0
  186. package/dist/auth/subscriptions/d1.d.ts +10 -0
  187. package/dist/auth/subscriptions/d1.d.ts.map +1 -0
  188. package/dist/auth/subscriptions/d1.js +86 -0
  189. package/dist/auth/subscriptions/d1.js.map +1 -0
  190. package/dist/auth/subscriptions/domain.d.ts +10 -0
  191. package/dist/auth/subscriptions/domain.d.ts.map +1 -0
  192. package/dist/auth/subscriptions/domain.js +33 -0
  193. package/dist/auth/subscriptions/domain.js.map +1 -0
  194. package/dist/auth/subscriptions/index.d.ts +6 -0
  195. package/dist/auth/subscriptions/index.d.ts.map +1 -0
  196. package/dist/auth/subscriptions/index.js +6 -0
  197. package/dist/auth/subscriptions/index.js.map +1 -0
  198. package/dist/auth/subscriptions/model.d.ts +20 -0
  199. package/dist/auth/subscriptions/model.d.ts.map +1 -0
  200. package/dist/auth/subscriptions/model.js +2 -0
  201. package/dist/auth/subscriptions/model.js.map +1 -0
  202. package/dist/auth/subscriptions/service.d.ts +12 -0
  203. package/dist/auth/subscriptions/service.d.ts.map +1 -0
  204. package/dist/auth/subscriptions/service.js +71 -0
  205. package/dist/auth/subscriptions/service.js.map +1 -0
  206. package/dist/auth/subscriptions/validation.d.ts +3 -0
  207. package/dist/auth/subscriptions/validation.d.ts.map +1 -0
  208. package/dist/auth/subscriptions/validation.js +21 -0
  209. package/dist/auth/subscriptions/validation.js.map +1 -0
  210. package/dist/auth/tenants/d1.d.ts +12 -0
  211. package/dist/auth/tenants/d1.d.ts.map +1 -0
  212. package/dist/auth/tenants/d1.js +40 -0
  213. package/dist/auth/tenants/d1.js.map +1 -0
  214. package/dist/auth/tenants/delete.d.ts +3 -0
  215. package/dist/auth/tenants/delete.d.ts.map +1 -0
  216. package/dist/auth/tenants/delete.js +28 -0
  217. package/dist/auth/tenants/delete.js.map +1 -0
  218. package/dist/auth/tenants/domain.d.ts +8 -0
  219. package/dist/auth/tenants/domain.d.ts.map +1 -0
  220. package/dist/auth/tenants/domain.js +64 -0
  221. package/dist/auth/tenants/domain.js.map +1 -0
  222. package/dist/auth/tenants/index.d.ts +7 -0
  223. package/dist/auth/tenants/index.d.ts.map +1 -0
  224. package/dist/auth/tenants/index.js +7 -0
  225. package/dist/auth/tenants/index.js.map +1 -0
  226. package/dist/auth/tenants/model.d.ts +28 -0
  227. package/dist/auth/tenants/model.d.ts.map +1 -0
  228. package/dist/auth/tenants/model.js +2 -0
  229. package/dist/auth/tenants/model.js.map +1 -0
  230. package/dist/auth/tenants/policy.d.ts +3 -0
  231. package/dist/auth/tenants/policy.d.ts.map +1 -0
  232. package/dist/auth/tenants/policy.js +4 -0
  233. package/dist/auth/tenants/policy.js.map +1 -0
  234. package/dist/auth/tenants/service.d.ts +14 -0
  235. package/dist/auth/tenants/service.d.ts.map +1 -0
  236. package/dist/auth/tenants/service.js +37 -0
  237. package/dist/auth/tenants/service.js.map +1 -0
  238. package/dist/auth/tenants/validation.d.ts +5 -0
  239. package/dist/auth/tenants/validation.d.ts.map +1 -0
  240. package/dist/auth/tenants/validation.js +21 -0
  241. package/dist/auth/tenants/validation.js.map +1 -0
  242. package/dist/auth/tenants/views/list.d.ts +8 -0
  243. package/dist/auth/tenants/views/list.d.ts.map +1 -0
  244. package/dist/auth/tenants/views/list.js +3 -0
  245. package/dist/auth/tenants/views/list.js.map +1 -0
  246. package/dist/auth/users/access.d.ts +9 -0
  247. package/dist/auth/users/access.d.ts.map +1 -0
  248. package/dist/auth/users/access.js +53 -0
  249. package/dist/auth/users/access.js.map +1 -0
  250. package/dist/auth/users/d1.d.ts +19 -0
  251. package/dist/auth/users/d1.d.ts.map +1 -0
  252. package/dist/auth/users/d1.js +68 -0
  253. package/dist/auth/users/d1.js.map +1 -0
  254. package/dist/auth/users/domain.d.ts +13 -0
  255. package/dist/auth/users/domain.d.ts.map +1 -0
  256. package/dist/auth/users/domain.js +129 -0
  257. package/dist/auth/users/domain.js.map +1 -0
  258. package/dist/auth/users/index.d.ts +7 -0
  259. package/dist/auth/users/index.d.ts.map +1 -0
  260. package/dist/auth/users/index.js +7 -0
  261. package/dist/auth/users/index.js.map +1 -0
  262. package/dist/auth/users/model.d.ts +44 -0
  263. package/dist/auth/users/model.d.ts.map +1 -0
  264. package/dist/auth/users/model.js +2 -0
  265. package/dist/auth/users/model.js.map +1 -0
  266. package/dist/auth/users/service.d.ts +8 -0
  267. package/dist/auth/users/service.d.ts.map +1 -0
  268. package/dist/auth/users/service.js +62 -0
  269. package/dist/auth/users/service.js.map +1 -0
  270. package/dist/auth/users/validation.d.ts +4 -0
  271. package/dist/auth/users/validation.d.ts.map +1 -0
  272. package/dist/auth/users/validation.js +23 -0
  273. package/dist/auth/users/validation.js.map +1 -0
  274. package/dist/cli/cli.d.ts +9 -0
  275. package/dist/cli/cli.d.ts.map +1 -0
  276. package/dist/cli/cli.js +201 -0
  277. package/dist/cli/cli.js.map +1 -0
  278. package/dist/cli/d1.d.ts +24 -0
  279. package/dist/cli/d1.d.ts.map +1 -0
  280. package/dist/cli/d1.js +175 -0
  281. package/dist/cli/d1.js.map +1 -0
  282. package/dist/cli/operations.d.ts +3 -0
  283. package/dist/cli/operations.d.ts.map +1 -0
  284. package/dist/cli/operations.js +63 -0
  285. package/dist/cli/operations.js.map +1 -0
  286. package/dist/cli/project.d.ts +136 -0
  287. package/dist/cli/project.d.ts.map +1 -0
  288. package/dist/cli/project.js +738 -0
  289. package/dist/cli/project.js.map +1 -0
  290. package/dist/cli/status.d.ts +24 -0
  291. package/dist/cli/status.d.ts.map +1 -0
  292. package/dist/cli/status.js +55 -0
  293. package/dist/cli/status.js.map +1 -0
  294. package/dist/cli/tenants.d.ts +9 -0
  295. package/dist/cli/tenants.d.ts.map +1 -0
  296. package/dist/cli/tenants.js +32 -0
  297. package/dist/cli/tenants.js.map +1 -0
  298. package/dist/cli/types.d.ts +43 -0
  299. package/dist/cli/types.d.ts.map +1 -0
  300. package/dist/cli/types.js +2 -0
  301. package/dist/cli/types.js.map +1 -0
  302. package/dist/cli/users.d.ts +8 -0
  303. package/dist/cli/users.d.ts.map +1 -0
  304. package/dist/cli/users.js +74 -0
  305. package/dist/cli/users.js.map +1 -0
  306. package/dist/cli/version.d.ts +12 -0
  307. package/dist/cli/version.d.ts.map +1 -0
  308. package/dist/cli/version.js +60 -0
  309. package/dist/cli/version.js.map +1 -0
  310. package/dist/core/circuits/availability.d.ts +48 -0
  311. package/dist/core/circuits/availability.d.ts.map +1 -0
  312. package/dist/core/circuits/availability.js +87 -0
  313. package/dist/core/circuits/availability.js.map +1 -0
  314. package/dist/core/circuits/d1.d.ts +11 -0
  315. package/dist/core/circuits/d1.d.ts.map +1 -0
  316. package/dist/core/circuits/d1.js +83 -0
  317. package/dist/core/circuits/d1.js.map +1 -0
  318. package/dist/core/circuits/domain.d.ts +7 -0
  319. package/dist/core/circuits/domain.d.ts.map +1 -0
  320. package/dist/core/circuits/domain.js +36 -0
  321. package/dist/core/circuits/domain.js.map +1 -0
  322. package/dist/core/circuits/index.d.ts +6 -0
  323. package/dist/core/circuits/index.d.ts.map +1 -0
  324. package/dist/core/circuits/index.js +6 -0
  325. package/dist/core/circuits/index.js.map +1 -0
  326. package/dist/core/circuits/model.d.ts +50 -0
  327. package/dist/core/circuits/model.d.ts.map +1 -0
  328. package/dist/core/circuits/model.js +2 -0
  329. package/dist/core/circuits/model.js.map +1 -0
  330. package/dist/core/circuits/service.d.ts +9 -0
  331. package/dist/core/circuits/service.d.ts.map +1 -0
  332. package/dist/core/circuits/service.js +63 -0
  333. package/dist/core/circuits/service.js.map +1 -0
  334. package/dist/core/circuits/validation.d.ts +4 -0
  335. package/dist/core/circuits/validation.d.ts.map +1 -0
  336. package/dist/core/circuits/validation.js +35 -0
  337. package/dist/core/circuits/validation.js.map +1 -0
  338. package/dist/core/constants.d.ts +9 -0
  339. package/dist/core/constants.d.ts.map +1 -0
  340. package/{src → dist}/core/constants.js +2 -1
  341. package/dist/core/constants.js.map +1 -0
  342. package/dist/core/database/index.d.ts +14 -0
  343. package/dist/core/database/index.d.ts.map +1 -0
  344. package/dist/core/database/index.js +65 -0
  345. package/dist/core/database/index.js.map +1 -0
  346. package/dist/core/domains.d.ts +2 -0
  347. package/dist/core/domains.d.ts.map +1 -0
  348. package/dist/core/domains.js +7 -0
  349. package/dist/core/domains.js.map +1 -0
  350. package/dist/core/events/audit.d.ts +8 -0
  351. package/dist/core/events/audit.d.ts.map +1 -0
  352. package/dist/core/events/audit.js +27 -0
  353. package/dist/core/events/audit.js.map +1 -0
  354. package/dist/core/events/domain.d.ts +19 -0
  355. package/dist/core/events/domain.d.ts.map +1 -0
  356. package/dist/core/events/domain.js +39 -0
  357. package/dist/core/events/domain.js.map +1 -0
  358. package/dist/core/events/hub.d.ts +10 -0
  359. package/dist/core/events/hub.d.ts.map +1 -0
  360. package/dist/core/events/hub.js +56 -0
  361. package/dist/core/events/hub.js.map +1 -0
  362. package/dist/core/events/index.d.ts +57 -0
  363. package/dist/core/events/index.d.ts.map +1 -0
  364. package/dist/core/events/index.js +170 -0
  365. package/dist/core/events/index.js.map +1 -0
  366. package/dist/core/healthchecks/d1.d.ts +7 -0
  367. package/dist/core/healthchecks/d1.d.ts.map +1 -0
  368. package/dist/core/healthchecks/d1.js +43 -0
  369. package/dist/core/healthchecks/d1.js.map +1 -0
  370. package/dist/core/healthchecks/domain.d.ts +7 -0
  371. package/dist/core/healthchecks/domain.d.ts.map +1 -0
  372. package/dist/core/healthchecks/domain.js +51 -0
  373. package/dist/core/healthchecks/domain.js.map +1 -0
  374. package/dist/core/healthchecks/features.d.ts +19 -0
  375. package/dist/core/healthchecks/features.d.ts.map +1 -0
  376. package/dist/core/healthchecks/features.js +100 -0
  377. package/dist/core/healthchecks/features.js.map +1 -0
  378. package/dist/core/healthchecks/index.d.ts +6 -0
  379. package/dist/core/healthchecks/index.d.ts.map +1 -0
  380. package/dist/core/healthchecks/index.js +6 -0
  381. package/dist/core/healthchecks/index.js.map +1 -0
  382. package/dist/core/healthchecks/model.d.ts +64 -0
  383. package/dist/core/healthchecks/model.d.ts.map +1 -0
  384. package/dist/core/healthchecks/model.js +2 -0
  385. package/dist/core/healthchecks/model.js.map +1 -0
  386. package/dist/core/healthchecks/service.d.ts +8 -0
  387. package/dist/core/healthchecks/service.d.ts.map +1 -0
  388. package/dist/core/healthchecks/service.js +29 -0
  389. package/dist/core/healthchecks/service.js.map +1 -0
  390. package/dist/core/healthchecks/validation.d.ts +5 -0
  391. package/dist/core/healthchecks/validation.d.ts.map +1 -0
  392. package/dist/core/healthchecks/validation.js +51 -0
  393. package/dist/core/healthchecks/validation.js.map +1 -0
  394. package/dist/core/index.d.ts +9 -0
  395. package/dist/core/index.d.ts.map +1 -0
  396. package/dist/core/index.js +9 -0
  397. package/dist/core/index.js.map +1 -0
  398. package/dist/core/jobs/d1.d.ts +19 -0
  399. package/dist/core/jobs/d1.d.ts.map +1 -0
  400. package/dist/core/jobs/d1.js +139 -0
  401. package/dist/core/jobs/d1.js.map +1 -0
  402. package/dist/core/jobs/domain.d.ts +8 -0
  403. package/dist/core/jobs/domain.d.ts.map +1 -0
  404. package/dist/core/jobs/domain.js +59 -0
  405. package/dist/core/jobs/domain.js.map +1 -0
  406. package/dist/core/jobs/events.d.ts +3 -0
  407. package/dist/core/jobs/events.d.ts.map +1 -0
  408. package/dist/core/jobs/events.js +25 -0
  409. package/dist/core/jobs/events.js.map +1 -0
  410. package/dist/core/jobs/index.d.ts +7 -0
  411. package/dist/core/jobs/index.d.ts.map +1 -0
  412. package/dist/core/jobs/index.js +7 -0
  413. package/dist/core/jobs/index.js.map +1 -0
  414. package/dist/core/jobs/model.d.ts +86 -0
  415. package/dist/core/jobs/model.d.ts.map +1 -0
  416. package/dist/core/jobs/model.js +2 -0
  417. package/dist/core/jobs/model.js.map +1 -0
  418. package/dist/core/jobs/service.d.ts +39 -0
  419. package/dist/core/jobs/service.d.ts.map +1 -0
  420. package/dist/core/jobs/service.js +84 -0
  421. package/dist/core/jobs/service.js.map +1 -0
  422. package/dist/core/jobs/validation.d.ts +8 -0
  423. package/dist/core/jobs/validation.d.ts.map +1 -0
  424. package/dist/core/jobs/validation.js +39 -0
  425. package/dist/core/jobs/validation.js.map +1 -0
  426. package/dist/core/security/index.d.ts +30 -0
  427. package/dist/core/security/index.d.ts.map +1 -0
  428. package/dist/core/security/index.js +138 -0
  429. package/dist/core/security/index.js.map +1 -0
  430. package/dist/data/context.d.ts +20 -0
  431. package/dist/data/context.d.ts.map +1 -0
  432. package/dist/data/context.js +65 -0
  433. package/dist/data/context.js.map +1 -0
  434. package/dist/data/index.d.ts +5 -0
  435. package/dist/data/index.d.ts.map +1 -0
  436. package/{src → dist}/data/index.js +2 -0
  437. package/dist/data/index.js.map +1 -0
  438. package/dist/data/json.d.ts +3 -0
  439. package/dist/data/json.d.ts.map +1 -0
  440. package/dist/data/json.js +14 -0
  441. package/dist/data/json.js.map +1 -0
  442. package/dist/data/model.d.ts +96 -0
  443. package/dist/data/model.d.ts.map +1 -0
  444. package/dist/data/model.js +3 -0
  445. package/dist/data/model.js.map +1 -0
  446. package/dist/data/policy.d.ts +14 -0
  447. package/dist/data/policy.d.ts.map +1 -0
  448. package/dist/data/policy.js +89 -0
  449. package/dist/data/policy.js.map +1 -0
  450. package/dist/data/reader.d.ts +9 -0
  451. package/dist/data/reader.d.ts.map +1 -0
  452. package/dist/data/reader.js +203 -0
  453. package/dist/data/reader.js.map +1 -0
  454. package/dist/data/resources.d.ts +9 -0
  455. package/dist/data/resources.d.ts.map +1 -0
  456. package/dist/data/resources.js +129 -0
  457. package/dist/data/resources.js.map +1 -0
  458. package/dist/domain/app-domain.d.ts +36 -0
  459. package/dist/domain/app-domain.d.ts.map +1 -0
  460. package/dist/domain/app-domain.js +79 -0
  461. package/dist/domain/app-domain.js.map +1 -0
  462. package/dist/domain/index.d.ts +3 -0
  463. package/dist/domain/index.d.ts.map +1 -0
  464. package/dist/domain/index.js +3 -0
  465. package/dist/domain/index.js.map +1 -0
  466. package/dist/domain/model.d.ts +37 -0
  467. package/dist/domain/model.d.ts.map +1 -0
  468. package/dist/domain/model.js +2 -0
  469. package/dist/domain/model.js.map +1 -0
  470. package/dist/features/index.d.ts +25 -0
  471. package/dist/features/index.d.ts.map +1 -0
  472. package/dist/features/index.js +61 -0
  473. package/dist/features/index.js.map +1 -0
  474. package/dist/features/llm/client.d.ts +3 -0
  475. package/dist/features/llm/client.d.ts.map +1 -0
  476. package/dist/features/llm/client.js +327 -0
  477. package/dist/features/llm/client.js.map +1 -0
  478. package/dist/features/llm/config.d.ts +7 -0
  479. package/dist/features/llm/config.d.ts.map +1 -0
  480. package/dist/features/llm/config.js +93 -0
  481. package/dist/features/llm/config.js.map +1 -0
  482. package/dist/features/llm/constants.d.ts +5 -0
  483. package/dist/features/llm/constants.d.ts.map +1 -0
  484. package/dist/features/llm/constants.js +6 -0
  485. package/dist/features/llm/constants.js.map +1 -0
  486. package/dist/features/llm/errors.d.ts +12 -0
  487. package/dist/features/llm/errors.d.ts.map +1 -0
  488. package/dist/features/llm/errors.js +19 -0
  489. package/dist/features/llm/errors.js.map +1 -0
  490. package/dist/features/llm/feature.d.ts +6 -0
  491. package/dist/features/llm/feature.d.ts.map +1 -0
  492. package/dist/features/llm/feature.js +37 -0
  493. package/dist/features/llm/feature.js.map +1 -0
  494. package/dist/features/llm/index.d.ts +9 -0
  495. package/dist/features/llm/index.d.ts.map +1 -0
  496. package/dist/features/llm/index.js +6 -0
  497. package/dist/features/llm/index.js.map +1 -0
  498. package/dist/features/llm/model.d.ts +171 -0
  499. package/dist/features/llm/model.d.ts.map +1 -0
  500. package/dist/features/llm/model.js +2 -0
  501. package/dist/features/llm/model.js.map +1 -0
  502. package/dist/features/llm/schema.d.ts +4 -0
  503. package/dist/features/llm/schema.d.ts.map +1 -0
  504. package/dist/features/llm/schema.js +82 -0
  505. package/dist/features/llm/schema.js.map +1 -0
  506. package/dist/features/llm/service.d.ts +29 -0
  507. package/dist/features/llm/service.d.ts.map +1 -0
  508. package/dist/features/llm/service.js +55 -0
  509. package/dist/features/llm/service.js.map +1 -0
  510. package/dist/features/messaging/constants.d.ts +3 -0
  511. package/dist/features/messaging/constants.d.ts.map +1 -0
  512. package/dist/features/messaging/constants.js +4 -0
  513. package/dist/features/messaging/constants.js.map +1 -0
  514. package/dist/features/messaging/domain.d.ts +9 -0
  515. package/dist/features/messaging/domain.d.ts.map +1 -0
  516. package/dist/features/messaging/domain.js +14 -0
  517. package/dist/features/messaging/domain.js.map +1 -0
  518. package/dist/features/messaging/feature.d.ts +7 -0
  519. package/dist/features/messaging/feature.d.ts.map +1 -0
  520. package/dist/features/messaging/feature.js +23 -0
  521. package/dist/features/messaging/feature.js.map +1 -0
  522. package/dist/features/messaging/index.d.ts +12 -0
  523. package/dist/features/messaging/index.d.ts.map +1 -0
  524. package/dist/features/messaging/index.js +8 -0
  525. package/dist/features/messaging/index.js.map +1 -0
  526. package/dist/features/messaging/jobs.d.ts +38 -0
  527. package/dist/features/messaging/jobs.d.ts.map +1 -0
  528. package/dist/features/messaging/jobs.js +40 -0
  529. package/dist/features/messaging/jobs.js.map +1 -0
  530. package/dist/features/messaging/models.d.ts +65 -0
  531. package/dist/features/messaging/models.d.ts.map +1 -0
  532. package/dist/features/messaging/models.js +97 -0
  533. package/dist/features/messaging/models.js.map +1 -0
  534. package/dist/features/messaging/resources.d.ts +8 -0
  535. package/dist/features/messaging/resources.d.ts.map +1 -0
  536. package/dist/features/messaging/resources.js +11 -0
  537. package/dist/features/messaging/resources.js.map +1 -0
  538. package/dist/features/messaging/store.d.ts +46 -0
  539. package/dist/features/messaging/store.d.ts.map +1 -0
  540. package/dist/features/messaging/store.js +208 -0
  541. package/dist/features/messaging/store.js.map +1 -0
  542. package/dist/index.d.ts +20 -0
  543. package/dist/index.d.ts.map +1 -0
  544. package/{src → dist}/index.js +7 -2
  545. package/dist/index.js.map +1 -0
  546. package/dist/input.d.ts +18 -0
  547. package/dist/input.d.ts.map +1 -0
  548. package/dist/input.js +49 -0
  549. package/dist/input.js.map +1 -0
  550. package/dist/repository/model.d.ts +61 -0
  551. package/dist/repository/model.d.ts.map +1 -0
  552. package/dist/repository/model.js +2 -0
  553. package/dist/repository/model.js.map +1 -0
  554. package/dist/repository.d.ts +11 -0
  555. package/dist/repository.d.ts.map +1 -0
  556. package/dist/repository.js +118 -0
  557. package/dist/repository.js.map +1 -0
  558. package/dist/runtime/domains.d.ts +14 -0
  559. package/dist/runtime/domains.d.ts.map +1 -0
  560. package/dist/runtime/domains.js +42 -0
  561. package/dist/runtime/domains.js.map +1 -0
  562. package/dist/runtime/features.d.ts +10 -0
  563. package/dist/runtime/features.d.ts.map +1 -0
  564. package/dist/runtime/features.js +37 -0
  565. package/dist/runtime/features.js.map +1 -0
  566. package/dist/runtime/health.d.ts +6 -0
  567. package/dist/runtime/health.d.ts.map +1 -0
  568. package/dist/runtime/health.js +28 -0
  569. package/dist/runtime/health.js.map +1 -0
  570. package/dist/runtime/hono.d.ts +30 -0
  571. package/dist/runtime/hono.d.ts.map +1 -0
  572. package/dist/runtime/hono.js +50 -0
  573. package/dist/runtime/hono.js.map +1 -0
  574. package/dist/runtime/model.d.ts +133 -0
  575. package/dist/runtime/model.d.ts.map +1 -0
  576. package/dist/runtime/model.js +2 -0
  577. package/dist/runtime/model.js.map +1 -0
  578. package/dist/runtime/responses.d.ts +9 -0
  579. package/dist/runtime/responses.d.ts.map +1 -0
  580. package/dist/runtime/responses.js +14 -0
  581. package/dist/runtime/responses.js.map +1 -0
  582. package/dist/runtime/worker.d.ts +10 -0
  583. package/dist/runtime/worker.d.ts.map +1 -0
  584. package/dist/runtime/worker.js +216 -0
  585. package/dist/runtime/worker.js.map +1 -0
  586. package/dist/ui/index.d.ts +3 -0
  587. package/dist/ui/index.d.ts.map +1 -0
  588. package/dist/ui/index.js +3 -0
  589. package/dist/ui/index.js.map +1 -0
  590. package/dist/ui/react/admin-access.d.ts +2 -0
  591. package/dist/ui/react/admin-access.d.ts.map +1 -0
  592. package/dist/ui/react/admin-access.js +47 -0
  593. package/dist/ui/react/admin-access.js.map +1 -0
  594. package/dist/ui/react/admin-audit.d.ts +2 -0
  595. package/dist/ui/react/admin-audit.d.ts.map +1 -0
  596. package/dist/ui/react/admin-audit.js +13 -0
  597. package/dist/ui/react/admin-audit.js.map +1 -0
  598. package/dist/ui/react/admin-catalogs.d.ts +6 -0
  599. package/dist/ui/react/admin-catalogs.d.ts.map +1 -0
  600. package/dist/ui/react/admin-catalogs.js +37 -0
  601. package/dist/ui/react/admin-catalogs.js.map +1 -0
  602. package/dist/ui/react/admin-dashboard.d.ts +39 -0
  603. package/dist/ui/react/admin-dashboard.d.ts.map +1 -0
  604. package/dist/ui/react/admin-dashboard.js +135 -0
  605. package/dist/ui/react/admin-dashboard.js.map +1 -0
  606. package/dist/ui/react/admin-details.d.ts +27 -0
  607. package/dist/ui/react/admin-details.d.ts.map +1 -0
  608. package/dist/ui/react/admin-details.js +82 -0
  609. package/dist/ui/react/admin-details.js.map +1 -0
  610. package/dist/ui/react/admin-shell.d.ts +20 -0
  611. package/dist/ui/react/admin-shell.d.ts.map +1 -0
  612. package/dist/ui/react/admin-shell.js +24 -0
  613. package/dist/ui/react/admin-shell.js.map +1 -0
  614. package/dist/ui/react/bootstrap.d.ts +9 -0
  615. package/dist/ui/react/bootstrap.d.ts.map +1 -0
  616. package/dist/ui/react/bootstrap.js +45 -0
  617. package/dist/ui/react/bootstrap.js.map +1 -0
  618. package/dist/ui/react/foundation.d.ts +35 -0
  619. package/dist/ui/react/foundation.d.ts.map +1 -0
  620. package/dist/ui/react/foundation.js +62 -0
  621. package/dist/ui/react/foundation.js.map +1 -0
  622. package/dist/ui/react/index.d.ts +12 -0
  623. package/dist/ui/react/index.d.ts.map +1 -0
  624. package/dist/ui/react/index.js +12 -0
  625. package/dist/ui/react/index.js.map +1 -0
  626. package/dist/ui/react/jobs.d.ts +62 -0
  627. package/dist/ui/react/jobs.d.ts.map +1 -0
  628. package/dist/ui/react/jobs.js +114 -0
  629. package/dist/ui/react/jobs.js.map +1 -0
  630. package/dist/ui/react/live-events.d.ts +18 -0
  631. package/dist/ui/react/live-events.d.ts.map +1 -0
  632. package/dist/ui/react/live-events.js +94 -0
  633. package/dist/ui/react/live-events.js.map +1 -0
  634. package/dist/ui/react/types.d.ts +79 -0
  635. package/dist/ui/react/types.d.ts.map +1 -0
  636. package/dist/ui/react/types.js +32 -0
  637. package/dist/ui/react/types.js.map +1 -0
  638. package/dist/ui/ssr.d.ts +55 -0
  639. package/dist/ui/ssr.d.ts.map +1 -0
  640. package/dist/ui/ssr.js +30 -0
  641. package/dist/ui/ssr.js.map +1 -0
  642. package/{src → dist}/ui/styles.css +22 -1
  643. package/migrations/0007_messaging.sql +52 -0
  644. package/migrations/0008_messaging_tenant_integrity.sql +44 -0
  645. package/migrations/0009_healthcheck_measurements.sql +3 -0
  646. package/migrations/0010_admin_dashboard_refinements.sql +24 -0
  647. package/package.json +162 -21
  648. package/changelog.md +0 -25
  649. package/src/admin/index.js +0 -1
  650. package/src/admin/routes.js +0 -64
  651. package/src/api/client.js +0 -8
  652. package/src/api/contracts.js +0 -24
  653. package/src/api/index.js +0 -7
  654. package/src/api/jobs.js +0 -37
  655. package/src/api/testing.js +0 -13
  656. package/src/app.js +0 -5
  657. package/src/auth/encoding.js +0 -6
  658. package/src/auth/groups.js +0 -5
  659. package/src/auth/impersonation.js +0 -15
  660. package/src/auth/index.js +0 -8
  661. package/src/auth/oauth-single.js +0 -204
  662. package/src/auth/scopes.js +0 -32
  663. package/src/auth/subscriptions.js +0 -42
  664. package/src/auth/tenants.js +0 -34
  665. package/src/auth/users.js +0 -40
  666. package/src/cli/cli.js +0 -133
  667. package/src/cli/d1.js +0 -165
  668. package/src/cli/operations.js +0 -34
  669. package/src/cli/project.js +0 -560
  670. package/src/cli/status.js +0 -46
  671. package/src/cli/tenants.js +0 -16
  672. package/src/cli/users.js +0 -34
  673. package/src/cli/version.js +0 -54
  674. package/src/core/circuits.js +0 -134
  675. package/src/core/d1.js +0 -54
  676. package/src/core/event-hub.js +0 -29
  677. package/src/core/events.js +0 -63
  678. package/src/core/identity.js +0 -39
  679. package/src/core/index.js +0 -7
  680. package/src/core/jobs.js +0 -185
  681. package/src/core/security.js +0 -88
  682. package/src/data/context.js +0 -16
  683. package/src/data/reader.js +0 -63
  684. package/src/data/resources.js +0 -42
  685. package/src/repository.js +0 -63
  686. package/src/runtime/features.js +0 -17
  687. package/src/runtime/health.js +0 -17
  688. package/src/runtime/worker.js +0 -58
  689. package/src/ui/index.js +0 -1
  690. package/src/ui/react/admin-access.jsx +0 -29
  691. package/src/ui/react/admin-catalogs.jsx +0 -39
  692. package/src/ui/react/admin-shell.jsx +0 -17
  693. package/src/ui/react/foundation.jsx +0 -40
  694. package/src/ui/react/index.jsx +0 -6
  695. package/src/ui/react/jobs.jsx +0 -63
  696. package/src/ui/react/live-events.jsx +0 -55
@@ -0,0 +1,62 @@
1
+ import { type JsonValue } from "../../api/client.js";
2
+ export interface Job {
3
+ id: string;
4
+ type: string;
5
+ status: string;
6
+ createdAt?: string;
7
+ updatedAt?: string;
8
+ progress?: JsonValue;
9
+ result?: JsonValue;
10
+ error?: JsonValue;
11
+ }
12
+ export interface JobEvent {
13
+ id: string;
14
+ type: string;
15
+ createdAt?: string;
16
+ }
17
+ export interface JobFilters {
18
+ [key: string]: string | number | boolean | null | undefined;
19
+ }
20
+ export interface JobsResource {
21
+ jobs: Job[];
22
+ loading: boolean;
23
+ error: unknown;
24
+ reload: () => Promise<void>;
25
+ }
26
+ export interface JobResource {
27
+ job: Job | null;
28
+ loading: boolean;
29
+ error: unknown;
30
+ reload: () => Promise<Job | null>;
31
+ }
32
+ export declare function useJobs(filters?: JobFilters): JobsResource;
33
+ export declare function useJob(jobId: string | null | undefined): JobResource;
34
+ export interface JobNotificationsOptions {
35
+ limit?: number;
36
+ }
37
+ export declare function useJobNotifications({ limit }?: JobNotificationsOptions): {
38
+ notifications: Job[];
39
+ loading: boolean;
40
+ error: unknown;
41
+ dismiss: (jobId: string) => void;
42
+ reload: () => Promise<void>;
43
+ };
44
+ export interface JobNotificationBannerProps {
45
+ job: Job;
46
+ onDismiss?: (jobId: string) => void;
47
+ }
48
+ export declare function JobNotificationBanner({ job, onDismiss }: JobNotificationBannerProps): import("react").JSX.Element;
49
+ export interface JobNotificationListProps {
50
+ notifications: readonly Job[];
51
+ onDismiss?: (jobId: string) => void;
52
+ }
53
+ export declare function JobNotificationList({ notifications, onDismiss }: JobNotificationListProps): import("react").JSX.Element;
54
+ export interface JobListProps {
55
+ filters?: JobFilters;
56
+ }
57
+ export declare function JobList({ filters }: JobListProps): import("react").JSX.Element;
58
+ export interface JobDetailProps {
59
+ jobId: string;
60
+ }
61
+ export declare function JobDetail({ jobId }: JobDetailProps): import("react").JSX.Element;
62
+ //# sourceMappingURL=jobs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../../src/ui/react/jobs.tsx"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAKxE,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AACD,MAAM,WAAW,QAAQ;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE;AAC1E,MAAM,WAAW,UAAU;IAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE;AAC3F,MAAM,WAAW,YAAY;IAAG,IAAI,EAAE,GAAG,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE;AAC5G,MAAM,WAAW,WAAW;IAAG,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAA;CAAE;AAQrH,wBAAgB,OAAO,CAAC,OAAO,GAAE,UAAe,GAAG,YAAY,CAoB9D;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,CAiBpE;AAED,MAAM,WAAW,uBAAuB;IAAG,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;AAC3D,wBAAgB,mBAAmB,CAAC,EAAE,KAAU,EAAE,GAAE,uBAA4B;;;;qBAI1C,MAAM;kBAvDiD,OAAO,CAAC,IAAI,CAAC;EAyDzG;AAED,MAAM,WAAW,0BAA0B;IAAG,GAAG,EAAE,GAAG,CAAC;IAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE;AAC7F,wBAAgB,qBAAqB,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,0BAA0B,+BAKnF;AAED,MAAM,WAAW,wBAAwB;IAAG,aAAa,EAAE,SAAS,GAAG,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE;AAChH,wBAAgB,mBAAmB,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,wBAAwB,+BAAuH;AAEjN,MAAM,WAAW,YAAY;IAAG,OAAO,CAAC,EAAE,UAAU,CAAA;CAAE;AACtD,wBAAgB,OAAO,CAAC,EAAE,OAAY,EAAE,EAAE,YAAY,+BAGrD;AAED,MAAM,WAAW,cAAc;IAAG,KAAK,EAAE,MAAM,CAAA;CAAE;AACjD,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,+BAYlD"}
@@ -0,0 +1,114 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useState } from "react";
3
+ import { apiFetch, apiJson } from "../../api/client.js";
4
+ import { isJsonValue } from "../../input.js";
5
+ import { ResourceState, StatusBadge } from "./foundation.js";
6
+ import { useLiveEvent, useLiveEvents } from "./live-events.js";
7
+ function jobQuery(filters) {
8
+ const query = new URLSearchParams();
9
+ for (const [key, value] of Object.entries(filters))
10
+ if (value !== undefined && value !== null && value !== "")
11
+ query.set(key, String(value));
12
+ return query.toString() ? `/api/jobs?${query}` : "/api/jobs";
13
+ }
14
+ export function useJobs(filters = {}) {
15
+ const key = useMemo(() => JSON.stringify(filters), [filters]);
16
+ const path = useMemo(() => jobQuery(parseJobFilters(key)), [key]);
17
+ const [jobs, setJobs] = useState([]);
18
+ const [loading, setLoading] = useState(true);
19
+ const [error, setError] = useState(null);
20
+ const { connection } = useLiveEvents();
21
+ const reload = useCallback(async () => {
22
+ setLoading(true);
23
+ try {
24
+ const result = await apiFetch(path, { validateJson: isJobsResponse });
25
+ setJobs(result instanceof Response ? [] : result.jobs);
26
+ setError(null);
27
+ }
28
+ catch (cause) {
29
+ setError(cause);
30
+ }
31
+ finally {
32
+ setLoading(false);
33
+ }
34
+ }, [path]);
35
+ useEffect(() => { void reload(); }, [reload]);
36
+ useEffect(() => { if (connection === "open")
37
+ void reload(); }, [connection, reload]);
38
+ useLiveEvent((event) => event.what.startsWith("job."), () => { void reload(); });
39
+ return { jobs, loading, error, reload };
40
+ }
41
+ export function useJob(jobId) {
42
+ const [job, setJob] = useState(null);
43
+ const [loading, setLoading] = useState(Boolean(jobId));
44
+ const [error, setError] = useState(null);
45
+ const reload = useCallback(async () => {
46
+ if (!jobId)
47
+ return null;
48
+ setLoading(true);
49
+ try {
50
+ const result = await apiFetch(`/api/jobs/${encodeURIComponent(jobId)}`, { validateJson: isJobResponse });
51
+ const next = result instanceof Response ? null : result.job;
52
+ setJob(next);
53
+ setError(null);
54
+ return next;
55
+ }
56
+ catch (cause) {
57
+ setError(cause);
58
+ throw cause;
59
+ }
60
+ finally {
61
+ setLoading(false);
62
+ }
63
+ }, [jobId]);
64
+ useEffect(() => { void reload().catch(() => undefined); }, [reload]);
65
+ useLiveEvent((event) => event.details.jobId === jobId, () => { void reload().catch(() => undefined); });
66
+ return { job, loading, error, reload };
67
+ }
68
+ export function useJobNotifications({ limit = 20 } = {}) {
69
+ const { jobs, loading, error, reload } = useJobs({ limit });
70
+ const [dismissed, setDismissed] = useState(() => new Set());
71
+ const notifications = jobs.filter((job) => ["succeeded", "failed", "cancelled"].includes(job.status) && !dismissed.has(job.id));
72
+ const dismiss = useCallback((jobId) => setDismissed((current) => new Set([...current, jobId])), []);
73
+ return { notifications, loading, error, dismiss, reload };
74
+ }
75
+ export function JobNotificationBanner({ job, onDismiss }) {
76
+ const failed = job.status === "failed";
77
+ const cancelled = job.status === "cancelled";
78
+ const message = failed ? `${job.type} failed.` : cancelled ? `${job.type} was cancelled.` : `${job.type} finished.`;
79
+ return _jsxs("aside", { className: `cf-ui-job-banner cf-ui-job-${job.status}`, role: "status", "aria-live": "polite", children: [_jsx("span", { children: message }), _jsx("button", { type: "button", onClick: () => onDismiss?.(job.id), "aria-label": "Dismiss notification", children: "Dismiss" })] });
80
+ }
81
+ export function JobNotificationList({ notifications, onDismiss }) { return _jsx(_Fragment, { children: notifications.map((job) => _jsx(JobNotificationBanner, { job: job, onDismiss: onDismiss }, job.id)) }); }
82
+ export function JobList({ filters = {} }) {
83
+ const resource = useJobs(filters);
84
+ return _jsxs("section", { className: "cf-ui-card", children: [_jsx("h1", { children: "Jobs" }), _jsx(ResourceState, { ...resource, empty: "No jobs found.", children: resource.jobs.length ? _jsx("div", { className: "cf-ui-table-wrap", children: _jsxs("table", { children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "Job" }), _jsx("th", { children: "Status" }), _jsx("th", { children: "Updated" })] }) }), _jsx("tbody", { children: resource.jobs.map((job) => _jsxs("tr", { children: [_jsxs("th", { scope: "row", children: [_jsx("a", { href: `/admin/jobs/${encodeURIComponent(job.id)}`, children: job.type }), _jsx("small", { children: job.id })] }), _jsx("td", { children: _jsx(StatusBadge, { state: job.status }) }), _jsx("td", { children: job.updatedAt || job.createdAt || "—" })] }, job.id)) })] }) }) : null })] });
85
+ }
86
+ export function JobDetail({ jobId }) {
87
+ const resource = useJob(jobId);
88
+ const [events, setEvents] = useState([]);
89
+ const reloadEvents = useCallback(async () => {
90
+ if (!jobId)
91
+ return;
92
+ const result = await apiFetch(`/api/jobs/${encodeURIComponent(jobId)}/events`, { validateJson: isJobEventsResponse });
93
+ setEvents(result instanceof Response ? [] : result.events);
94
+ }, [jobId]);
95
+ useEffect(() => { void reloadEvents().catch(() => undefined); }, [reloadEvents, resource.job?.updatedAt]);
96
+ const cancel = async () => { await apiJson(`/api/jobs/${encodeURIComponent(jobId)}/cancel`, {}, { method: "POST" }); await resource.reload(); };
97
+ const job = resource.job;
98
+ return _jsx("section", { className: "cf-ui-card", children: _jsx(ResourceState, { ...resource, empty: "Job not found.", children: job ? _jsxs(_Fragment, { children: [_jsxs("header", { children: [_jsx("h1", { children: job.type }), _jsx(StatusBadge, { state: job.status }), _jsx("small", { children: job.id })] }), ["queued", "running"].includes(job.status) ? _jsx("button", { type: "button", onClick: cancel, children: "Cancel job" }) : null, _jsx("h2", { children: "Progress" }), _jsx("pre", { children: JSON.stringify(job.progress, null, 2) }), _jsx("h2", { children: "Result" }), _jsx("pre", { children: JSON.stringify(job.result, null, 2) }), job.error ? _jsxs(_Fragment, { children: [_jsx("h2", { children: "Error" }), _jsx("pre", { children: JSON.stringify(job.error, null, 2) })] }) : null, _jsx("h2", { children: "Events" }), events.length ? _jsx("ol", { children: events.map((event) => _jsxs("li", { children: [_jsx("strong", { children: event.type }), " ", _jsx("small", { children: event.createdAt })] }, event.id)) }) : _jsx("p", { children: "No events." })] }) : null }) });
99
+ }
100
+ function isJobsResponse(value) { if (!isObject(value))
101
+ return false; const jobs = Reflect.get(value, "jobs"); return Array.isArray(jobs) && jobs.every(isJob); }
102
+ function isJobResponse(value) { return isObject(value) && isJob(Reflect.get(value, "job")); }
103
+ function isJobEventsResponse(value) { if (!isObject(value))
104
+ return false; const events = Reflect.get(value, "events"); return Array.isArray(events) && events.every(isJobEvent); }
105
+ function isJob(value) { return isObject(value) && typeof Reflect.get(value, "id") === "string" && typeof Reflect.get(value, "type") === "string" && typeof Reflect.get(value, "status") === "string" && optionalString(value, "createdAt") && optionalString(value, "updatedAt") && optionalJson(value, "progress") && optionalJson(value, "result") && optionalJson(value, "error"); }
106
+ function isJobEvent(value) { return isObject(value) && typeof Reflect.get(value, "id") === "string" && typeof Reflect.get(value, "type") === "string" && optionalString(value, "createdAt"); }
107
+ function isObject(value) { return value !== null && typeof value === "object" && !Array.isArray(value); }
108
+ function optionalString(value, key) { const field = Reflect.get(value, key); return field === undefined || typeof field === "string"; }
109
+ function optionalJson(value, key) { const field = Reflect.get(value, key); return field === undefined || isJsonValue(field); }
110
+ function parseJobFilters(value) { const parsed = JSON.parse(value); if (!isObject(parsed))
111
+ return {}; const result = {}; for (const [key, item] of Object.entries(parsed))
112
+ if (item === null || ["string", "number", "boolean"].includes(typeof item))
113
+ result[key] = item === null || typeof item === "string" || typeof item === "number" || typeof item === "boolean" ? item : undefined; return result; }
114
+ //# sourceMappingURL=jobs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../../src/ui/react/jobs.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { type ReactNode } from "react";
2
+ import type { AppEvent } from "../../core/events/index.js";
3
+ export type LiveEventConnection = "connecting" | "disabled" | "unsupported" | "open" | "error" | "reconnecting" | "closed" | "unavailable";
4
+ export type LiveEventListener = (event: AppEvent) => void;
5
+ export type LiveEventMatcher = (event: AppEvent) => boolean;
6
+ export interface LiveEventsContextValue {
7
+ connection: LiveEventConnection;
8
+ subscribe: (listener: LiveEventListener) => () => void;
9
+ }
10
+ export interface LiveEventsProviderProps {
11
+ children?: ReactNode;
12
+ url?: string;
13
+ enabled?: boolean;
14
+ }
15
+ export declare function LiveEventsProvider({ children, url, enabled }: LiveEventsProviderProps): import("react").JSX.Element;
16
+ export declare function useLiveEvents(): LiveEventsContextValue;
17
+ export declare function useLiveEvent(matcher: LiveEventMatcher | null | undefined, callback: LiveEventListener): void;
18
+ //# sourceMappingURL=live-events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-events.d.ts","sourceRoot":"","sources":["../../../src/ui/react/live-events.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgF,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACrH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAG3D,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,UAAU,GAAG,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,cAAc,GAAG,QAAQ,GAAG,aAAa,CAAC;AAC3I,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;AAC1D,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC5D,MAAM,WAAW,sBAAsB;IAAG,UAAU,EAAE,mBAAmB,CAAC;IAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,MAAM,IAAI,CAAA;CAAE;AACnI,MAAM,WAAW,uBAAuB;IAAG,QAAQ,CAAC,EAAE,SAAS,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE;AAKlG,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,GAAmB,EAAE,OAAc,EAAE,EAAE,uBAAuB,+BAwC5G;AAED,wBAAgB,aAAa,IAAI,sBAAsB,CAAgE;AAEvH,wBAAgB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,EAAE,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAO5G"}
@@ -0,0 +1,94 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
3
+ import { isJsonValue } from "../../input.js";
4
+ const unavailableContext = { connection: "unavailable", subscribe: () => () => undefined };
5
+ const LiveEventsContext = createContext(null);
6
+ export function LiveEventsProvider({ children, url = "/api/events", enabled = true }) {
7
+ const listeners = useRef(new Set());
8
+ const [connection, setConnection] = useState(enabled ? "connecting" : "disabled");
9
+ const subscribe = useCallback((listener) => {
10
+ listeners.current.add(listener);
11
+ return () => { listeners.current.delete(listener); };
12
+ }, []);
13
+ useEffect(() => {
14
+ if (!enabled || typeof WebSocket === "undefined") {
15
+ setConnection(enabled ? "unsupported" : "disabled");
16
+ return undefined;
17
+ }
18
+ let socket;
19
+ let timer;
20
+ let stopped = false;
21
+ let attempts = 0;
22
+ const connect = () => {
23
+ if (stopped)
24
+ return;
25
+ const target = new URL(url, window.location.href);
26
+ target.protocol = target.protocol === "https:" ? "wss:" : "ws:";
27
+ socket = new WebSocket(target);
28
+ socket.onopen = () => { attempts = 0; setConnection("open"); };
29
+ socket.onmessage = ({ data }) => {
30
+ if (typeof data !== "string")
31
+ return;
32
+ try {
33
+ const payload = JSON.parse(data);
34
+ const event = readTransportEvent(payload);
35
+ if (event)
36
+ for (const listener of listeners.current)
37
+ listener(event);
38
+ }
39
+ catch { /* Ignore malformed transport messages. */ }
40
+ };
41
+ socket.onerror = () => setConnection("error");
42
+ socket.onclose = () => {
43
+ if (stopped)
44
+ return;
45
+ setConnection("reconnecting");
46
+ const delay = Math.min(30000, 500 * (2 ** attempts++));
47
+ timer = setTimeout(connect, delay);
48
+ };
49
+ };
50
+ connect();
51
+ return () => { stopped = true; if (timer !== undefined)
52
+ clearTimeout(timer); socket?.close(); setConnection("closed"); };
53
+ }, [enabled, url]);
54
+ const value = useMemo(() => ({ connection, subscribe }), [connection, subscribe]);
55
+ return _jsx(LiveEventsContext.Provider, { value: value, children: children });
56
+ }
57
+ export function useLiveEvents() { return useContext(LiveEventsContext) || unavailableContext; }
58
+ export function useLiveEvent(matcher, callback) {
59
+ const { subscribe } = useLiveEvents();
60
+ const matcherRef = useRef(matcher);
61
+ const callbackRef = useRef(callback);
62
+ matcherRef.current = matcher;
63
+ callbackRef.current = callback;
64
+ useEffect(() => subscribe((event) => { if (!matcherRef.current || matcherRef.current(event))
65
+ callbackRef.current(event); }), [subscribe]);
66
+ }
67
+ function readTransportEvent(value) {
68
+ if (value === null || typeof value !== "object" || Array.isArray(value))
69
+ return null;
70
+ const nested = Reflect.get(value, "event");
71
+ const candidate = nested ?? value;
72
+ if (candidate === null || typeof candidate !== "object" || Array.isArray(candidate))
73
+ return null;
74
+ const id = Reflect.get(candidate, "id");
75
+ const details = Reflect.get(candidate, "details");
76
+ if (typeof id !== "string" || typeof Reflect.get(candidate, "what") !== "string" || details === null || typeof details !== "object" || Array.isArray(details))
77
+ return null;
78
+ return {
79
+ id,
80
+ what: String(Reflect.get(candidate, "what")),
81
+ who: String(Reflect.get(candidate, "who") || "system"),
82
+ where: String(Reflect.get(candidate, "where") || "application"),
83
+ when: String(Reflect.get(candidate, "when") || ""),
84
+ details: jsonObject(details),
85
+ };
86
+ }
87
+ function jsonObject(value) {
88
+ const result = {};
89
+ for (const [key, item] of Object.entries(value))
90
+ if (isJsonValue(item))
91
+ result[key] = item;
92
+ return result;
93
+ }
94
+ //# sourceMappingURL=live-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"live-events.js","sourceRoot":"","sources":["../../../src/ui/react/live-events.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import type { ComponentType, ReactNode } from "react";
2
+ import type { JsonObject, JsonValue } from "../../api/client.js";
3
+ export interface UiRecord {
4
+ id?: string;
5
+ name?: string;
6
+ type?: string;
7
+ status?: string;
8
+ state?: string;
9
+ feature?: string;
10
+ component?: string;
11
+ who?: string;
12
+ operation?: string;
13
+ resource?: string;
14
+ display_name?: string;
15
+ email?: string;
16
+ provider?: string;
17
+ is_admin?: boolean | number;
18
+ description?: string;
19
+ label?: string;
20
+ system?: boolean | number;
21
+ package_name?: string;
22
+ version?: string;
23
+ health?: string;
24
+ healthcheck_mode?: string;
25
+ allow_self_healing?: boolean | number;
26
+ active?: boolean | number;
27
+ user_count?: number;
28
+ created_at?: string;
29
+ updated_at?: string;
30
+ createdAt?: string;
31
+ updatedAt?: string;
32
+ group_name?: string;
33
+ scope_name?: string;
34
+ entitlement?: string;
35
+ value?: JsonValue;
36
+ progress?: JsonValue;
37
+ result?: JsonValue;
38
+ error?: JsonValue;
39
+ scopes?: readonly (string | UiRecord)[];
40
+ tenants?: readonly UiRecord[];
41
+ groups?: readonly UiRecord[];
42
+ users?: readonly UiRecord[];
43
+ healthchecks?: readonly UiRecord[];
44
+ circuit_breakers?: readonly UiRecord[];
45
+ entitlements?: readonly UiRecord[];
46
+ circuit_breaker?: UiRecord | null;
47
+ details?: JsonValue;
48
+ metadata?: JsonValue;
49
+ reason?: string;
50
+ automated?: boolean | number;
51
+ registeredFeatures?: readonly UiRecord[];
52
+ domains?: readonly string[];
53
+ ui?: boolean;
54
+ api?: boolean;
55
+ admin?: boolean;
56
+ }
57
+ export interface AdminLinkItem {
58
+ key: string;
59
+ label: string;
60
+ href: string;
61
+ }
62
+ export interface AdminSelection {
63
+ key: string;
64
+ id: string | null;
65
+ }
66
+ export interface ApplicationAdminSection {
67
+ key: string;
68
+ label: string;
69
+ href?: string;
70
+ render?: (selection: AdminSelection) => ReactNode;
71
+ component?: ComponentType<{
72
+ selection: AdminSelection;
73
+ }>;
74
+ }
75
+ export declare function recordValue(value: JsonValue | undefined): UiRecord | null;
76
+ export declare function recordField(value: JsonObject | null, key: string): UiRecord | null;
77
+ export declare function recordArray(value: JsonValue | undefined): UiRecord[];
78
+ export declare function recordArrayField(value: JsonObject | null, key: string): UiRecord[];
79
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ui/react/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import { isJsonValue } from "../../input.js";
2
+ export function recordValue(value) { return isUiRecord(value) ? value : null; }
3
+ export function recordField(value, key) { return value ? recordValue(value[key]) : null; }
4
+ export function recordArray(value) { return Array.isArray(value) && value.every(isUiRecord) ? [...value] : []; }
5
+ export function recordArrayField(value, key) { return recordArray(value?.[key]); }
6
+ function isUiRecord(value) {
7
+ if (value === null || typeof value !== "object" || Array.isArray(value))
8
+ return false;
9
+ const stringFields = ["id", "name", "type", "status", "state", "feature", "component", "who", "operation", "resource", "display_name", "email", "provider", "description", "label", "package_name", "version", "health", "healthcheck_mode", "created_at", "updated_at", "createdAt", "updatedAt", "group_name", "scope_name", "entitlement", "reason"];
10
+ const scalarFields = ["is_admin", "system", "allow_self_healing", "active", "automated"];
11
+ const recordArrays = ["tenants", "groups", "users", "healthchecks", "circuit_breakers", "entitlements"];
12
+ if (!stringFields.every((key) => optionalString(value, key)))
13
+ return false;
14
+ if (!scalarFields.every((key) => optionalBooleanNumber(value, key)))
15
+ return false;
16
+ const userCount = Reflect.get(value, "user_count");
17
+ if (userCount !== undefined && typeof userCount !== "number")
18
+ return false;
19
+ if (!recordArrays.every((key) => optionalRecordArray(value, key)))
20
+ return false;
21
+ const scopes = Reflect.get(value, "scopes");
22
+ if (scopes !== undefined && (!Array.isArray(scopes) || !scopes.every((scope) => typeof scope === "string" || isUiRecord(scope))))
23
+ return false;
24
+ const circuit = Reflect.get(value, "circuit_breaker");
25
+ if (circuit !== undefined && circuit !== null && !isUiRecord(circuit))
26
+ return false;
27
+ return ["value", "progress", "result", "error", "details", "metadata"].every((key) => { const field = Reflect.get(value, key); return field === undefined || isJsonValue(field); });
28
+ }
29
+ function optionalString(value, key) { const field = Reflect.get(value, key); return field === undefined || typeof field === "string"; }
30
+ function optionalBooleanNumber(value, key) { const field = Reflect.get(value, key); return field === undefined || typeof field === "boolean" || typeof field === "number"; }
31
+ function optionalRecordArray(value, key) { const field = Reflect.get(value, key); return key === "healthchecks" ? field === undefined || (Array.isArray(field) && field.every((item) => typeof item === "string" || isUiRecord(item))) : field === undefined || (Array.isArray(field) && field.every(isUiRecord)); }
32
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ui/react/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /** @jsxImportSource hono/jsx */
2
+ import type { MiddlewareHandler } from "hono";
3
+ import type { Child } from "hono/jsx";
4
+ export interface SiteMeta {
5
+ name?: string;
6
+ property?: string;
7
+ content: string;
8
+ }
9
+ export interface SiteScript {
10
+ src: string;
11
+ type?: string;
12
+ async?: boolean;
13
+ defer?: boolean;
14
+ }
15
+ export interface SsrDocumentOptions {
16
+ title?: string;
17
+ description?: string;
18
+ canonicalUrl?: string;
19
+ lang?: string;
20
+ bodyClass?: string;
21
+ bodyData?: Record<string, string>;
22
+ themeColor?: string;
23
+ siteName?: string;
24
+ openGraph?: {
25
+ title?: string;
26
+ description?: string;
27
+ type?: string;
28
+ url?: string;
29
+ image?: string;
30
+ };
31
+ meta?: readonly SiteMeta[];
32
+ stylesheets?: readonly string[];
33
+ scripts?: readonly SiteScript[];
34
+ }
35
+ export interface SiteDocumentProps extends SsrDocumentOptions {
36
+ children?: Child;
37
+ }
38
+ /**
39
+ * Render a complete, metadata-aware site document for Worker responses.
40
+ * Content sites provide their own children and stylesheets; the base owns the
41
+ * document contract and safe attribute rendering.
42
+ */
43
+ export declare function SiteDocument({ children, ...options }: SiteDocumentProps): import("hono/jsx/jsx-dev-runtime").JSX.Element;
44
+ export declare function renderSiteDocument(document: SiteDocumentProps): string;
45
+ /**
46
+ * Create the standard Worker-side HTML shell. This is intentionally separate from
47
+ * the React UI exports: Hono JSX is excellent for edge-rendered documents, while
48
+ * React remains the right runtime for the interactive browser admin components.
49
+ *
50
+ * Usage:
51
+ * app.use("/admin/*", createSsrRenderer({ title: "Administration" }));
52
+ * app.get("/admin", (c) => c.render(<AdminLanding />));
53
+ */
54
+ export declare function createSsrRenderer(options?: SsrDocumentOptions): MiddlewareHandler;
55
+ //# sourceMappingURL=ssr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssr.d.ts","sourceRoot":"","sources":["../../src/ui/ssr.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAIhC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE;QACV,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,IAAI,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,OAAO,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;IAC3D,QAAQ,CAAC,EAAE,KAAK,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,EAAE,iBAAiB,kDAyCvE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAEtE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CAEnB"}
package/dist/ui/ssr.js ADDED
@@ -0,0 +1,30 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "hono/jsx/jsx-runtime";
2
+ /** @jsxImportSource hono/jsx */
3
+ import { jsxRenderer } from "hono/jsx-renderer";
4
+ import { renderToString } from "hono/jsx/dom/server";
5
+ /**
6
+ * Render a complete, metadata-aware site document for Worker responses.
7
+ * Content sites provide their own children and stylesheets; the base owns the
8
+ * document contract and safe attribute rendering.
9
+ */
10
+ export function SiteDocument({ children, ...options }) {
11
+ const { title = "Cloudflare Worker", description, canonicalUrl, lang = "en", bodyClass, bodyData = {}, themeColor, siteName, openGraph, meta = [], stylesheets = [], scripts = [], } = options;
12
+ const graph = openGraph || {};
13
+ return (_jsxs("html", { lang: lang, children: [_jsxs("head", { children: [_jsx("meta", { charSet: "utf-8" }), _jsx("meta", { name: "viewport", content: "width=device-width, initial-scale=1" }), _jsx("title", { children: title }), description ? _jsx("meta", { name: "description", content: description }) : null, canonicalUrl ? _jsx("link", { rel: "canonical", href: canonicalUrl }) : null, themeColor ? _jsx("meta", { name: "theme-color", content: themeColor }) : null, siteName ? _jsx("meta", { property: "og:site_name", content: siteName }) : null, graph.title || title ? _jsx("meta", { property: "og:title", content: graph.title || title }) : null, graph.description || description ? _jsx("meta", { property: "og:description", content: graph.description || description }) : null, graph.type ? _jsx("meta", { property: "og:type", content: graph.type }) : null, graph.url || canonicalUrl ? _jsx("meta", { property: "og:url", content: graph.url || canonicalUrl }) : null, graph.image ? _jsx("meta", { property: "og:image", content: graph.image }) : null, meta.map((item, index) => _jsx("meta", { ...item }, `${item.name || item.property}-${index}`)), stylesheets.map((href) => _jsx("link", { rel: "stylesheet", href: href }, href))] }), _jsxs("body", { class: bodyClass, ...Object.fromEntries(Object.entries(bodyData).map(([key, value]) => [`data-${key}`, value])), children: [children, scripts.map((script) => _jsx("script", { src: script.src, type: script.type, async: script.async, defer: script.defer }, script.src))] })] }));
14
+ }
15
+ export function renderSiteDocument(document) {
16
+ return renderToString(_jsx(SiteDocument, { ...document }));
17
+ }
18
+ /**
19
+ * Create the standard Worker-side HTML shell. This is intentionally separate from
20
+ * the React UI exports: Hono JSX is excellent for edge-rendered documents, while
21
+ * React remains the right runtime for the interactive browser admin components.
22
+ *
23
+ * Usage:
24
+ * app.use("/admin/*", createSsrRenderer({ title: "Administration" }));
25
+ * app.get("/admin", (c) => c.render(<AdminLanding />));
26
+ */
27
+ export function createSsrRenderer(options = {}) {
28
+ return jsxRenderer(({ children }) => _jsx(SiteDocument, { ...options, children: children }));
29
+ }
30
+ //# sourceMappingURL=ssr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssr.js","sourceRoot":"","sources":["../../src/ui/ssr.tsx"],"names":[],"mappings":"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"}
@@ -17,6 +17,11 @@
17
17
  .cf-ui-admin-title, .cf-ui-nav-label { margin: 0 0 .5rem; font-weight: 700; }
18
18
  .cf-ui-nav-label { color: var(--cf-ui-muted); font-size: .72rem; letter-spacing: .08em; text-transform: uppercase; }
19
19
  .cf-ui-admin-content { min-width: 0; padding: 2rem 1rem; }
20
+ .cf-ui-admin-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: .75rem; margin-top: 1rem; }
21
+ .cf-ui-admin-grid a { display: grid; gap: .2rem; padding: 1rem; border: 1px solid var(--cf-ui-border); border-radius: .6rem; color: inherit; text-decoration: none; }
22
+ .cf-ui-admin-grid a:hover { border-color: var(--cf-ui-primary); color: var(--cf-ui-primary); }
23
+ .cf-ui-admin-grid span { color: var(--cf-ui-muted); font-size: .9rem; }
24
+ .cf-ui-back { margin: 0 0 1rem; padding: .45rem .65rem; border: 1px solid var(--cf-ui-border); border-radius: .4rem; background: var(--cf-ui-bg); color: inherit; cursor: pointer; }
20
25
  .cf-ui-card { padding: 1rem; border: 1px solid var(--cf-ui-border); border-radius: .65rem; background: var(--cf-ui-bg); }
21
26
  .cf-ui-card + .cf-ui-card { margin-top: 1rem; }
22
27
  .cf-ui-card-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 1rem; }
@@ -38,6 +43,22 @@
38
43
  .cf-ui-card button { padding: .45rem .65rem; border: 1px solid var(--cf-ui-border); border-radius: .4rem; background: var(--cf-ui-bg); color: inherit; cursor: pointer; }
39
44
  .cf-ui-card button:disabled { cursor: wait; opacity: .6; }
40
45
  .cf-ui-check-list label { display: flex; align-items: center; gap: .35rem; }
46
+ .cf-ui-filter-bar { display: flex; flex-wrap: wrap; gap: .5rem; margin: 1rem 0; }
47
+ .cf-ui-filter-bar input, .cf-ui-filter-bar select, .cf-ui-filter-bar button, .cf-ui-breaker select { padding: .45rem .6rem; border: 1px solid var(--cf-ui-border); border-radius: .4rem; background: var(--cf-ui-bg); color: inherit; }
48
+ .cf-ui-list-row { display: flex; justify-content: space-between; gap: 1rem; padding: .75rem 0; border-bottom: 1px solid var(--cf-ui-border); }
49
+ .cf-ui-feature-row { display: grid; grid-template-columns: auto minmax(0, 1fr) auto auto auto; align-items: center; gap: 1rem; padding: .9rem 0; border-bottom: 1px solid var(--cf-ui-border); }
50
+ .cf-ui-feature-row h2, .cf-ui-breaker h2 { margin: 0; font-size: 1rem; }
51
+ .cf-ui-health-icon { font-size: 1.4rem; line-height: 1; }
52
+ .cf-ui-status-badge { display: inline-flex; align-items: center; gap: .25rem; }
53
+ .cf-ui-active-pill { display: inline-block; padding: .15rem .45rem; border-radius: 999px; font-size: .8rem; font-weight: 700; }
54
+ .cf-ui-active-pill.active { background: #dff3e7; color: #26734d; }
55
+ .cf-ui-active-pill.inactive { background: #eee; color: var(--cf-ui-muted); }
56
+ .cf-ui-scope-list { display: grid; gap: .35rem; padding: 0; list-style: none; }
57
+ .cf-ui-scope-list label { display: flex; gap: .4rem; align-items: center; }
58
+ .cf-ui-feature-heading { display: flex; align-items: center; gap: .75rem; }
59
+ .cf-ui-feature-heading h1 { margin-bottom: 0; }
60
+ .cf-ui-feature-heading p { margin-top: .2rem; }
61
+ code { white-space: pre-wrap; word-break: break-word; }
41
62
  .cf-ui-job-banner { display: flex; align-items: center; justify-content: space-between; gap: 1rem; position: fixed; right: 1rem; bottom: 1rem; z-index: 10; max-width: min(32rem, calc(100vw - 2rem)); padding: .8rem 1rem; border: 1px solid var(--cf-ui-border); border-radius: .6rem; background: var(--cf-ui-bg); box-shadow: 0 .5rem 2rem #0002; }
42
63
  .cf-ui-job-banner button { border: 0; background: transparent; color: inherit; cursor: pointer; text-decoration: underline; }
43
- @media (max-width: 720px) { .cf-ui-admin-shell { grid-template-columns: 1fr; } .cf-ui-admin-nav { border-right: 0; border-bottom: 1px solid var(--cf-ui-border); } .cf-ui-breaker { grid-template-columns: 1fr; } }
64
+ @media (max-width: 720px) { .cf-ui-admin-shell { grid-template-columns: 1fr; } .cf-ui-admin-nav { border-right: 0; border-bottom: 1px solid var(--cf-ui-border); } .cf-ui-breaker { grid-template-columns: 1fr; } .cf-ui-feature-row { grid-template-columns: auto 1fr; } }