@byline/host-tanstack-start 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (511) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +48 -0
  3. package/dist/admin-shell/admin-roles/container.d.ts +34 -0
  4. package/dist/admin-shell/admin-roles/container.d.ts.map +1 -0
  5. package/dist/admin-shell/admin-roles/container.js +259 -0
  6. package/dist/admin-shell/admin-roles/container.module.js +17 -0
  7. package/dist/admin-shell/admin-roles/container_module.css +93 -0
  8. package/dist/admin-shell/admin-roles/delete.d.ts +9 -0
  9. package/dist/admin-shell/admin-roles/delete.d.ts.map +1 -0
  10. package/dist/admin-shell/admin-roles/delete.js +107 -0
  11. package/dist/admin-shell/admin-roles/delete.module.js +10 -0
  12. package/dist/admin-shell/admin-roles/delete_module.css +35 -0
  13. package/dist/admin-shell/admin-roles/list.d.ts +25 -0
  14. package/dist/admin-shell/admin-roles/list.d.ts.map +1 -0
  15. package/dist/admin-shell/admin-roles/list.js +292 -0
  16. package/dist/admin-shell/admin-roles/list.module.js +24 -0
  17. package/dist/admin-shell/admin-roles/list_module.css +113 -0
  18. package/dist/admin-shell/admin-users/container.d.ts +18 -0
  19. package/dist/admin-shell/admin-users/container.d.ts.map +1 -0
  20. package/dist/admin-shell/admin-users/container.js +418 -0
  21. package/dist/admin-shell/admin-users/container.module.js +22 -0
  22. package/dist/admin-shell/admin-users/container_module.css +136 -0
  23. package/dist/admin-shell/admin-users/delete.d.ts +9 -0
  24. package/dist/admin-shell/admin-users/delete.d.ts.map +1 -0
  25. package/dist/admin-shell/admin-users/delete.js +115 -0
  26. package/dist/admin-shell/admin-users/delete.module.js +10 -0
  27. package/dist/admin-shell/admin-users/delete_module.css +35 -0
  28. package/dist/admin-shell/admin-users/list.d.ts +13 -0
  29. package/dist/admin-shell/admin-users/list.d.ts.map +1 -0
  30. package/dist/admin-shell/admin-users/list.js +328 -0
  31. package/dist/admin-shell/admin-users/list.module.js +22 -0
  32. package/dist/admin-shell/admin-users/list_module.css +112 -0
  33. package/dist/admin-shell/chrome/admin-app-bar.d.ts +7 -0
  34. package/dist/admin-shell/chrome/admin-app-bar.d.ts.map +1 -0
  35. package/dist/admin-shell/chrome/admin-app-bar.js +71 -0
  36. package/dist/admin-shell/chrome/admin-app-bar.module.js +9 -0
  37. package/dist/admin-shell/chrome/admin-app-bar_module.css +54 -0
  38. package/dist/admin-shell/chrome/admin-layout.module.js +5 -0
  39. package/dist/admin-shell/chrome/admin-layout_module.css +8 -0
  40. package/dist/admin-shell/chrome/branding.d.ts +9 -0
  41. package/dist/admin-shell/chrome/branding.d.ts.map +1 -0
  42. package/dist/admin-shell/chrome/branding.js +17 -0
  43. package/dist/admin-shell/chrome/branding.module.js +6 -0
  44. package/dist/admin-shell/chrome/branding_module.css +11 -0
  45. package/dist/admin-shell/chrome/breadcrumbs/@types.d.ts +6 -0
  46. package/dist/admin-shell/chrome/breadcrumbs/@types.d.ts.map +1 -0
  47. package/dist/admin-shell/chrome/breadcrumbs/@types.js +1 -0
  48. package/dist/admin-shell/chrome/breadcrumbs/breadcrumbs-client.d.ts +7 -0
  49. package/dist/admin-shell/chrome/breadcrumbs/breadcrumbs-client.d.ts.map +1 -0
  50. package/dist/admin-shell/chrome/breadcrumbs/breadcrumbs-client.js +20 -0
  51. package/dist/admin-shell/chrome/breadcrumbs/breadcrumbs-provider.d.ts +24 -0
  52. package/dist/admin-shell/chrome/breadcrumbs/breadcrumbs-provider.d.ts.map +1 -0
  53. package/dist/admin-shell/chrome/breadcrumbs/breadcrumbs-provider.js +23 -0
  54. package/dist/admin-shell/chrome/breadcrumbs/breadcrumbs.d.ts +15 -0
  55. package/dist/admin-shell/chrome/breadcrumbs/breadcrumbs.d.ts.map +1 -0
  56. package/dist/admin-shell/chrome/breadcrumbs/breadcrumbs.js +77 -0
  57. package/dist/admin-shell/chrome/breadcrumbs/breadcrumbs.module.js +12 -0
  58. package/dist/admin-shell/chrome/breadcrumbs/breadcrumbs_module.css +81 -0
  59. package/dist/admin-shell/chrome/byline-logo.d.ts +12 -0
  60. package/dist/admin-shell/chrome/byline-logo.d.ts.map +1 -0
  61. package/dist/admin-shell/chrome/byline-logo.js +178 -0
  62. package/dist/admin-shell/chrome/content.d.ts +24 -0
  63. package/dist/admin-shell/chrome/content.d.ts.map +1 -0
  64. package/dist/admin-shell/chrome/content.js +31 -0
  65. package/dist/admin-shell/chrome/content.module.js +5 -0
  66. package/dist/admin-shell/chrome/content_module.css +10 -0
  67. package/dist/admin-shell/chrome/dashboard.d.ts +14 -0
  68. package/dist/admin-shell/chrome/dashboard.d.ts.map +1 -0
  69. package/dist/admin-shell/chrome/dashboard.js +129 -0
  70. package/dist/admin-shell/chrome/dashboard.module.js +19 -0
  71. package/dist/admin-shell/chrome/dashboard_module.css +175 -0
  72. package/dist/admin-shell/chrome/drawer-toggle.d.ts +9 -0
  73. package/dist/admin-shell/chrome/drawer-toggle.d.ts.map +1 -0
  74. package/dist/admin-shell/chrome/drawer-toggle.js +57 -0
  75. package/dist/admin-shell/chrome/drawer-toggle.module.js +8 -0
  76. package/dist/admin-shell/chrome/drawer-toggle_module.css +21 -0
  77. package/dist/admin-shell/chrome/hamburger.d.ts +10 -0
  78. package/dist/admin-shell/chrome/hamburger.d.ts.map +1 -0
  79. package/dist/admin-shell/chrome/hamburger.js +30 -0
  80. package/dist/admin-shell/chrome/hamburger.module.js +5 -0
  81. package/dist/admin-shell/chrome/hamburger_module.css +7 -0
  82. package/dist/admin-shell/chrome/loose-router.d.ts +33 -0
  83. package/dist/admin-shell/chrome/loose-router.d.ts.map +1 -0
  84. package/dist/admin-shell/chrome/loose-router.js +6 -0
  85. package/dist/admin-shell/chrome/menu-drawer.d.ts +10 -0
  86. package/dist/admin-shell/chrome/menu-drawer.d.ts.map +1 -0
  87. package/dist/admin-shell/chrome/menu-drawer.js +141 -0
  88. package/dist/admin-shell/chrome/menu-drawer.module.js +12 -0
  89. package/dist/admin-shell/chrome/menu-drawer_module.css +137 -0
  90. package/dist/admin-shell/chrome/menu-provider.d.ts +21 -0
  91. package/dist/admin-shell/chrome/menu-provider.d.ts.map +1 -0
  92. package/dist/admin-shell/chrome/menu-provider.js +54 -0
  93. package/dist/admin-shell/chrome/preview-toggle.d.ts +13 -0
  94. package/dist/admin-shell/chrome/preview-toggle.d.ts.map +1 -0
  95. package/dist/admin-shell/chrome/preview-toggle.js +75 -0
  96. package/dist/admin-shell/chrome/route-error.d.ts +22 -0
  97. package/dist/admin-shell/chrome/route-error.d.ts.map +1 -0
  98. package/dist/admin-shell/chrome/route-error.js +119 -0
  99. package/dist/admin-shell/chrome/route-error.module.js +14 -0
  100. package/dist/admin-shell/chrome/route-error_module.css +94 -0
  101. package/dist/admin-shell/chrome/router-pager.d.ts +19 -0
  102. package/dist/admin-shell/chrome/router-pager.d.ts.map +1 -0
  103. package/dist/admin-shell/chrome/router-pager.js +91 -0
  104. package/dist/admin-shell/chrome/sign-in-page.d.ts +19 -0
  105. package/dist/admin-shell/chrome/sign-in-page.d.ts.map +1 -0
  106. package/dist/admin-shell/chrome/sign-in-page.js +20 -0
  107. package/dist/admin-shell/chrome/sign-in-page.module.js +6 -0
  108. package/dist/admin-shell/chrome/sign-in-page_module.css +22 -0
  109. package/dist/admin-shell/chrome/sort-icons.d.ts +10 -0
  110. package/dist/admin-shell/chrome/sort-icons.d.ts.map +1 -0
  111. package/dist/admin-shell/chrome/sort-icons.js +103 -0
  112. package/dist/admin-shell/chrome/th-sortable.d.ts +23 -0
  113. package/dist/admin-shell/chrome/th-sortable.d.ts.map +1 -0
  114. package/dist/admin-shell/chrome/th-sortable.js +75 -0
  115. package/dist/admin-shell/chrome/th-sortable.module.js +10 -0
  116. package/dist/admin-shell/chrome/th-sortable_module.css +37 -0
  117. package/dist/admin-shell/chrome/use-media-query.d.ts +9 -0
  118. package/dist/admin-shell/chrome/use-media-query.d.ts.map +1 -0
  119. package/dist/admin-shell/chrome/use-media-query.js +20 -0
  120. package/dist/admin-shell/chrome/utils.d.ts +12 -0
  121. package/dist/admin-shell/chrome/utils.d.ts.map +1 -0
  122. package/dist/admin-shell/chrome/utils.js +8 -0
  123. package/dist/admin-shell/collections/api.d.ts +28 -0
  124. package/dist/admin-shell/collections/api.d.ts.map +1 -0
  125. package/dist/admin-shell/collections/api.js +51 -0
  126. package/dist/admin-shell/collections/api.module.js +9 -0
  127. package/dist/admin-shell/collections/api_module.css +42 -0
  128. package/dist/admin-shell/collections/create.d.ts +14 -0
  129. package/dist/admin-shell/collections/create.d.ts.map +1 -0
  130. package/dist/admin-shell/collections/create.js +77 -0
  131. package/dist/admin-shell/collections/edit.d.ts +19 -0
  132. package/dist/admin-shell/collections/edit.d.ts.map +1 -0
  133. package/dist/admin-shell/collections/edit.js +279 -0
  134. package/dist/admin-shell/collections/history.d.ts +20 -0
  135. package/dist/admin-shell/collections/history.d.ts.map +1 -0
  136. package/dist/admin-shell/collections/history.js +252 -0
  137. package/dist/admin-shell/collections/history.module.js +18 -0
  138. package/dist/admin-shell/collections/history_module.css +121 -0
  139. package/dist/admin-shell/collections/list.d.ts +16 -0
  140. package/dist/admin-shell/collections/list.d.ts.map +1 -0
  141. package/dist/admin-shell/collections/list.js +253 -0
  142. package/dist/admin-shell/collections/list.module.js +16 -0
  143. package/dist/admin-shell/collections/list_module.css +88 -0
  144. package/dist/admin-shell/collections/preview-link.d.ts +32 -0
  145. package/dist/admin-shell/collections/preview-link.d.ts.map +1 -0
  146. package/dist/admin-shell/collections/preview-link.js +54 -0
  147. package/dist/admin-shell/collections/tanstack-navigation-guard.d.ts +16 -0
  148. package/dist/admin-shell/collections/tanstack-navigation-guard.d.ts.map +1 -0
  149. package/dist/admin-shell/collections/tanstack-navigation-guard.js +19 -0
  150. package/dist/admin-shell/collections/view-menu.d.ts +58 -0
  151. package/dist/admin-shell/collections/view-menu.d.ts.map +1 -0
  152. package/dist/admin-shell/collections/view-menu.js +203 -0
  153. package/dist/admin-shell/collections/view-menu.module.js +11 -0
  154. package/dist/admin-shell/collections/view-menu_module.css +43 -0
  155. package/dist/auth/auth-context.d.ts +38 -0
  156. package/dist/auth/auth-context.d.ts.map +1 -0
  157. package/dist/auth/auth-context.js +57 -0
  158. package/dist/auth/auth-cookies.d.ts +35 -0
  159. package/dist/auth/auth-cookies.d.ts.map +1 -0
  160. package/dist/auth/auth-cookies.js +46 -0
  161. package/dist/auth/preview-cookies.d.ts +20 -0
  162. package/dist/auth/preview-cookies.d.ts.map +1 -0
  163. package/dist/auth/preview-cookies.js +26 -0
  164. package/dist/index.d.ts +43 -0
  165. package/dist/index.d.ts.map +1 -0
  166. package/dist/index.js +1 -0
  167. package/dist/integrations/abilities.d.ts +67 -0
  168. package/dist/integrations/abilities.d.ts.map +1 -0
  169. package/dist/integrations/abilities.js +25 -0
  170. package/dist/integrations/api-utils.d.ts +34 -0
  171. package/dist/integrations/api-utils.d.ts.map +1 -0
  172. package/dist/integrations/api-utils.js +22 -0
  173. package/dist/integrations/byline-admin-services.d.ts +25 -0
  174. package/dist/integrations/byline-admin-services.d.ts.map +1 -0
  175. package/dist/integrations/byline-admin-services.js +26 -0
  176. package/dist/integrations/byline-client.d.ts +22 -0
  177. package/dist/integrations/byline-client.d.ts.map +1 -0
  178. package/dist/integrations/byline-client.js +13 -0
  179. package/dist/integrations/byline-core.d.ts +28 -0
  180. package/dist/integrations/byline-core.d.ts.map +1 -0
  181. package/dist/integrations/byline-core.js +5 -0
  182. package/dist/integrations/byline-field-services.d.ts +19 -0
  183. package/dist/integrations/byline-field-services.d.ts.map +1 -0
  184. package/dist/integrations/byline-field-services.js +14 -0
  185. package/dist/integrations/byline-public-client.d.ts +10 -0
  186. package/dist/integrations/byline-public-client.d.ts.map +1 -0
  187. package/dist/integrations/byline-public-client.js +15 -0
  188. package/dist/integrations/byline-viewer-client.d.ts +21 -0
  189. package/dist/integrations/byline-viewer-client.d.ts.map +1 -0
  190. package/dist/integrations/byline-viewer-client.js +39 -0
  191. package/dist/integrations/start-errors.d.ts +23 -0
  192. package/dist/integrations/start-errors.d.ts.map +1 -0
  193. package/dist/integrations/start-errors.js +32 -0
  194. package/dist/routes/create-admin-account-route.d.ts +9 -0
  195. package/dist/routes/create-admin-account-route.d.ts.map +1 -0
  196. package/dist/routes/create-admin-account-route.js +68 -0
  197. package/dist/routes/create-admin-dashboard-route.d.ts +9 -0
  198. package/dist/routes/create-admin-dashboard-route.d.ts.map +1 -0
  199. package/dist/routes/create-admin-dashboard-route.js +44 -0
  200. package/dist/routes/create-admin-layout-route.d.ts +14 -0
  201. package/dist/routes/create-admin-layout-route.d.ts.map +1 -0
  202. package/dist/routes/create-admin-layout-route.js +64 -0
  203. package/dist/routes/create-admin-permissions-route.d.ts +9 -0
  204. package/dist/routes/create-admin-permissions-route.d.ts.map +1 -0
  205. package/dist/routes/create-admin-permissions-route.js +39 -0
  206. package/dist/routes/create-admin-role-edit-route.d.ts +9 -0
  207. package/dist/routes/create-admin-role-edit-route.d.ts.map +1 -0
  208. package/dist/routes/create-admin-role-edit-route.js +79 -0
  209. package/dist/routes/create-admin-roles-list-route.d.ts +9 -0
  210. package/dist/routes/create-admin-roles-list-route.d.ts.map +1 -0
  211. package/dist/routes/create-admin-roles-list-route.js +39 -0
  212. package/dist/routes/create-admin-user-edit-route.d.ts +9 -0
  213. package/dist/routes/create-admin-user-edit-route.d.ts.map +1 -0
  214. package/dist/routes/create-admin-user-edit-route.js +86 -0
  215. package/dist/routes/create-admin-users-list-route.d.ts +9 -0
  216. package/dist/routes/create-admin-users-list-route.d.ts.map +1 -0
  217. package/dist/routes/create-admin-users-list-route.js +71 -0
  218. package/dist/routes/create-collection-api-route.d.ts +15 -0
  219. package/dist/routes/create-collection-api-route.d.ts.map +1 -0
  220. package/dist/routes/create-collection-api-route.js +71 -0
  221. package/dist/routes/create-collection-create-route.d.ts +9 -0
  222. package/dist/routes/create-collection-create-route.d.ts.map +1 -0
  223. package/dist/routes/create-collection-create-route.js +53 -0
  224. package/dist/routes/create-collection-edit-route.d.ts +15 -0
  225. package/dist/routes/create-collection-edit-route.d.ts.map +1 -0
  226. package/dist/routes/create-collection-edit-route.js +65 -0
  227. package/dist/routes/create-collection-history-route.d.ts +15 -0
  228. package/dist/routes/create-collection-history-route.d.ts.map +1 -0
  229. package/dist/routes/create-collection-history-route.js +94 -0
  230. package/dist/routes/create-collection-list-route.d.ts +9 -0
  231. package/dist/routes/create-collection-list-route.d.ts.map +1 -0
  232. package/dist/routes/create-collection-list-route.js +130 -0
  233. package/dist/routes/create-sign-in-route.d.ts +9 -0
  234. package/dist/routes/create-sign-in-route.d.ts.map +1 -0
  235. package/dist/routes/create-sign-in-route.js +21 -0
  236. package/dist/routes/index.d.ts +35 -0
  237. package/dist/routes/index.d.ts.map +1 -0
  238. package/dist/routes/index.js +14 -0
  239. package/dist/server-fns/admin-account/change-password.d.ts +30 -0
  240. package/dist/server-fns/admin-account/change-password.d.ts.map +1 -0
  241. package/dist/server-fns/admin-account/change-password.js +13 -0
  242. package/dist/server-fns/admin-account/get.d.ts +31 -0
  243. package/dist/server-fns/admin-account/get.d.ts.map +1 -0
  244. package/dist/server-fns/admin-account/get.js +13 -0
  245. package/dist/server-fns/admin-account/index.d.ts +22 -0
  246. package/dist/server-fns/admin-account/index.d.ts.map +1 -0
  247. package/dist/server-fns/admin-account/index.js +3 -0
  248. package/dist/server-fns/admin-account/update.d.ts +34 -0
  249. package/dist/server-fns/admin-account/update.d.ts.map +1 -0
  250. package/dist/server-fns/admin-account/update.js +13 -0
  251. package/dist/server-fns/admin-permissions/get-role-abilities.d.ts +16 -0
  252. package/dist/server-fns/admin-permissions/get-role-abilities.d.ts.map +1 -0
  253. package/dist/server-fns/admin-permissions/get-role-abilities.js +14 -0
  254. package/dist/server-fns/admin-permissions/index.d.ts +25 -0
  255. package/dist/server-fns/admin-permissions/index.d.ts.map +1 -0
  256. package/dist/server-fns/admin-permissions/index.js +4 -0
  257. package/dist/server-fns/admin-permissions/list-registered.d.ts +33 -0
  258. package/dist/server-fns/admin-permissions/list-registered.d.ts.map +1 -0
  259. package/dist/server-fns/admin-permissions/list-registered.js +14 -0
  260. package/dist/server-fns/admin-permissions/set-role-abilities.d.ts +16 -0
  261. package/dist/server-fns/admin-permissions/set-role-abilities.d.ts.map +1 -0
  262. package/dist/server-fns/admin-permissions/set-role-abilities.js +14 -0
  263. package/dist/server-fns/admin-permissions/who-has.d.ts +26 -0
  264. package/dist/server-fns/admin-permissions/who-has.d.ts.map +1 -0
  265. package/dist/server-fns/admin-permissions/who-has.js +14 -0
  266. package/dist/server-fns/admin-roles/create.d.ts +24 -0
  267. package/dist/server-fns/admin-roles/create.d.ts.map +1 -0
  268. package/dist/server-fns/admin-roles/create.js +13 -0
  269. package/dist/server-fns/admin-roles/delete.d.ts +17 -0
  270. package/dist/server-fns/admin-roles/delete.d.ts.map +1 -0
  271. package/dist/server-fns/admin-roles/delete.js +13 -0
  272. package/dist/server-fns/admin-roles/get.d.ts +22 -0
  273. package/dist/server-fns/admin-roles/get.d.ts.map +1 -0
  274. package/dist/server-fns/admin-roles/get.js +13 -0
  275. package/dist/server-fns/admin-roles/index.d.ts +23 -0
  276. package/dist/server-fns/admin-roles/index.d.ts.map +1 -0
  277. package/dist/server-fns/admin-roles/index.js +6 -0
  278. package/dist/server-fns/admin-roles/list.d.ts +26 -0
  279. package/dist/server-fns/admin-roles/list.d.ts.map +1 -0
  280. package/dist/server-fns/admin-roles/list.js +13 -0
  281. package/dist/server-fns/admin-roles/reorder.d.ts +15 -0
  282. package/dist/server-fns/admin-roles/reorder.d.ts.map +1 -0
  283. package/dist/server-fns/admin-roles/reorder.js +13 -0
  284. package/dist/server-fns/admin-roles/update.d.ts +27 -0
  285. package/dist/server-fns/admin-roles/update.d.ts.map +1 -0
  286. package/dist/server-fns/admin-roles/update.js +13 -0
  287. package/dist/server-fns/admin-users/create.d.ts +35 -0
  288. package/dist/server-fns/admin-users/create.d.ts.map +1 -0
  289. package/dist/server-fns/admin-users/create.js +13 -0
  290. package/dist/server-fns/admin-users/delete.d.ts +17 -0
  291. package/dist/server-fns/admin-users/delete.d.ts.map +1 -0
  292. package/dist/server-fns/admin-users/delete.js +13 -0
  293. package/dist/server-fns/admin-users/disable.d.ts +15 -0
  294. package/dist/server-fns/admin-users/disable.d.ts.map +1 -0
  295. package/dist/server-fns/admin-users/disable.js +13 -0
  296. package/dist/server-fns/admin-users/enable.d.ts +15 -0
  297. package/dist/server-fns/admin-users/enable.d.ts.map +1 -0
  298. package/dist/server-fns/admin-users/enable.js +13 -0
  299. package/dist/server-fns/admin-users/get-user-roles.d.ts +25 -0
  300. package/dist/server-fns/admin-users/get-user-roles.d.ts.map +1 -0
  301. package/dist/server-fns/admin-users/get-user-roles.js +13 -0
  302. package/dist/server-fns/admin-users/get.d.ts +29 -0
  303. package/dist/server-fns/admin-users/get.d.ts.map +1 -0
  304. package/dist/server-fns/admin-users/get.js +13 -0
  305. package/dist/server-fns/admin-users/index.d.ts +28 -0
  306. package/dist/server-fns/admin-users/index.d.ts.map +1 -0
  307. package/dist/server-fns/admin-users/index.js +10 -0
  308. package/dist/server-fns/admin-users/list.d.ts +51 -0
  309. package/dist/server-fns/admin-users/list.d.ts.map +1 -0
  310. package/dist/server-fns/admin-users/list.js +13 -0
  311. package/dist/server-fns/admin-users/set-password.d.ts +30 -0
  312. package/dist/server-fns/admin-users/set-password.d.ts.map +1 -0
  313. package/dist/server-fns/admin-users/set-password.js +13 -0
  314. package/dist/server-fns/admin-users/set-user-roles.d.ts +25 -0
  315. package/dist/server-fns/admin-users/set-user-roles.d.ts.map +1 -0
  316. package/dist/server-fns/admin-users/set-user-roles.js +13 -0
  317. package/dist/server-fns/admin-users/update.d.ts +37 -0
  318. package/dist/server-fns/admin-users/update.d.ts.map +1 -0
  319. package/dist/server-fns/admin-users/update.js +13 -0
  320. package/dist/server-fns/auth/current-user.d.ts +38 -0
  321. package/dist/server-fns/auth/current-user.d.ts.map +1 -0
  322. package/dist/server-fns/auth/current-user.js +52 -0
  323. package/dist/server-fns/auth/index.d.ts +11 -0
  324. package/dist/server-fns/auth/index.d.ts.map +1 -0
  325. package/dist/server-fns/auth/index.js +3 -0
  326. package/dist/server-fns/auth/sign-in.d.ts +19 -0
  327. package/dist/server-fns/auth/sign-in.d.ts.map +1 -0
  328. package/dist/server-fns/auth/sign-in.js +31 -0
  329. package/dist/server-fns/auth/sign-out.d.ts +11 -0
  330. package/dist/server-fns/auth/sign-out.d.ts.map +1 -0
  331. package/dist/server-fns/auth/sign-out.js +17 -0
  332. package/dist/server-fns/collections/create.d.ts +21 -0
  333. package/dist/server-fns/collections/create.d.ts.map +1 -0
  334. package/dist/server-fns/collections/create.js +40 -0
  335. package/dist/server-fns/collections/delete.d.ts +18 -0
  336. package/dist/server-fns/collections/delete.d.ts.map +1 -0
  337. package/dist/server-fns/collections/delete.js +44 -0
  338. package/dist/server-fns/collections/get.d.ts +26 -0
  339. package/dist/server-fns/collections/get.d.ts.map +1 -0
  340. package/dist/server-fns/collections/get.js +133 -0
  341. package/dist/server-fns/collections/history.d.ts +43 -0
  342. package/dist/server-fns/collections/history.d.ts.map +1 -0
  343. package/dist/server-fns/collections/history.js +29 -0
  344. package/dist/server-fns/collections/index.d.ts +16 -0
  345. package/dist/server-fns/collections/index.d.ts.map +1 -0
  346. package/dist/server-fns/collections/index.js +9 -0
  347. package/dist/server-fns/collections/list.d.ts +54 -0
  348. package/dist/server-fns/collections/list.d.ts.map +1 -0
  349. package/dist/server-fns/collections/list.js +65 -0
  350. package/dist/server-fns/collections/stats.d.ts +17 -0
  351. package/dist/server-fns/collections/stats.d.ts.map +1 -0
  352. package/dist/server-fns/collections/stats.js +28 -0
  353. package/dist/server-fns/collections/status.d.ts +31 -0
  354. package/dist/server-fns/collections/status.d.ts.map +1 -0
  355. package/dist/server-fns/collections/status.js +79 -0
  356. package/dist/server-fns/collections/update.d.ts +26 -0
  357. package/dist/server-fns/collections/update.d.ts.map +1 -0
  358. package/dist/server-fns/collections/update.js +41 -0
  359. package/dist/server-fns/collections/upload.d.ts +57 -0
  360. package/dist/server-fns/collections/upload.d.ts.map +1 -0
  361. package/dist/server-fns/collections/upload.js +132 -0
  362. package/dist/server-fns/collections/utils.d.ts +15 -0
  363. package/dist/server-fns/collections/utils.d.ts.map +1 -0
  364. package/dist/server-fns/collections/utils.js +4 -0
  365. package/dist/server-fns/preview/disable.d.ts +12 -0
  366. package/dist/server-fns/preview/disable.d.ts.map +1 -0
  367. package/dist/server-fns/preview/disable.js +12 -0
  368. package/dist/server-fns/preview/enable.d.ts +12 -0
  369. package/dist/server-fns/preview/enable.d.ts.map +1 -0
  370. package/dist/server-fns/preview/enable.js +14 -0
  371. package/dist/server-fns/preview/index.d.ts +11 -0
  372. package/dist/server-fns/preview/index.d.ts.map +1 -0
  373. package/dist/server-fns/preview/index.js +3 -0
  374. package/dist/server-fns/preview/state.d.ts +11 -0
  375. package/dist/server-fns/preview/state.d.ts.map +1 -0
  376. package/dist/server-fns/preview/state.js +8 -0
  377. package/package.json +164 -0
  378. package/src/admin-shell/admin-roles/container.module.css +132 -0
  379. package/src/admin-shell/admin-roles/container.tsx +209 -0
  380. package/src/admin-shell/admin-roles/delete.module.css +52 -0
  381. package/src/admin-shell/admin-roles/delete.tsx +117 -0
  382. package/src/admin-shell/admin-roles/list.module.css +158 -0
  383. package/src/admin-shell/admin-roles/list.tsx +308 -0
  384. package/src/admin-shell/admin-users/container.module.css +199 -0
  385. package/src/admin-shell/admin-users/container.tsx +344 -0
  386. package/src/admin-shell/admin-users/delete.module.css +52 -0
  387. package/src/admin-shell/admin-users/delete.tsx +129 -0
  388. package/src/admin-shell/admin-users/list.module.css +164 -0
  389. package/src/admin-shell/admin-users/list.tsx +314 -0
  390. package/src/admin-shell/chrome/admin-app-bar.module.css +72 -0
  391. package/src/admin-shell/chrome/admin-app-bar.tsx +74 -0
  392. package/src/admin-shell/chrome/admin-layout.module.css +16 -0
  393. package/src/admin-shell/chrome/branding.module.css +20 -0
  394. package/src/admin-shell/chrome/branding.tsx +23 -0
  395. package/src/admin-shell/chrome/breadcrumbs/@types.ts +5 -0
  396. package/src/admin-shell/chrome/breadcrumbs/breadcrumbs-client.tsx +30 -0
  397. package/src/admin-shell/chrome/breadcrumbs/breadcrumbs-provider.tsx +48 -0
  398. package/src/admin-shell/chrome/breadcrumbs/breadcrumbs.module.css +93 -0
  399. package/src/admin-shell/chrome/breadcrumbs/breadcrumbs.tsx +96 -0
  400. package/src/admin-shell/chrome/byline-logo.tsx +151 -0
  401. package/src/admin-shell/chrome/content.module.css +16 -0
  402. package/src/admin-shell/chrome/content.tsx +60 -0
  403. package/src/admin-shell/chrome/dashboard.module.css +245 -0
  404. package/src/admin-shell/chrome/dashboard.tsx +128 -0
  405. package/src/admin-shell/chrome/drawer-toggle.module.css +30 -0
  406. package/src/admin-shell/chrome/drawer-toggle.tsx +62 -0
  407. package/src/admin-shell/chrome/hamburger.module.css +16 -0
  408. package/src/admin-shell/chrome/hamburger.tsx +56 -0
  409. package/src/admin-shell/chrome/loose-router.ts +47 -0
  410. package/src/admin-shell/chrome/menu-drawer.module.css +196 -0
  411. package/src/admin-shell/chrome/menu-drawer.tsx +155 -0
  412. package/src/admin-shell/chrome/menu-provider.tsx +95 -0
  413. package/src/admin-shell/chrome/preview-toggle.tsx +107 -0
  414. package/src/admin-shell/chrome/route-error.module.css +114 -0
  415. package/src/admin-shell/chrome/route-error.tsx +125 -0
  416. package/src/admin-shell/chrome/router-pager.tsx +179 -0
  417. package/src/admin-shell/chrome/sign-in-page.module.css +32 -0
  418. package/src/admin-shell/chrome/sign-in-page.tsx +35 -0
  419. package/src/admin-shell/chrome/sort-icons.tsx +127 -0
  420. package/src/admin-shell/chrome/th-sortable.module.css +51 -0
  421. package/src/admin-shell/chrome/th-sortable.tsx +114 -0
  422. package/src/admin-shell/chrome/use-media-query.ts +28 -0
  423. package/src/admin-shell/chrome/utils.ts +20 -0
  424. package/src/admin-shell/collections/api.module.css +62 -0
  425. package/src/admin-shell/collections/api.tsx +70 -0
  426. package/src/admin-shell/collections/create.tsx +108 -0
  427. package/src/admin-shell/collections/edit.tsx +319 -0
  428. package/src/admin-shell/collections/history.module.css +156 -0
  429. package/src/admin-shell/collections/history.tsx +352 -0
  430. package/src/admin-shell/collections/list.module.css +124 -0
  431. package/src/admin-shell/collections/list.tsx +313 -0
  432. package/src/admin-shell/collections/preview-link.tsx +138 -0
  433. package/src/admin-shell/collections/tanstack-navigation-guard.ts +43 -0
  434. package/src/admin-shell/collections/view-menu.module.css +60 -0
  435. package/src/admin-shell/collections/view-menu.tsx +238 -0
  436. package/src/auth/auth-context.test.node.ts +200 -0
  437. package/src/auth/auth-context.ts +119 -0
  438. package/src/auth/auth-cookies.ts +113 -0
  439. package/src/auth/preview-cookies.ts +73 -0
  440. package/src/declarations.d.ts +4 -0
  441. package/src/index.ts +44 -0
  442. package/src/integrations/abilities.tsx +90 -0
  443. package/src/integrations/api-utils.ts +66 -0
  444. package/src/integrations/byline-admin-services.ts +86 -0
  445. package/src/integrations/byline-client.ts +40 -0
  446. package/src/integrations/byline-core.ts +32 -0
  447. package/src/integrations/byline-field-services.ts +35 -0
  448. package/src/integrations/byline-public-client.ts +53 -0
  449. package/src/integrations/byline-viewer-client.ts +99 -0
  450. package/src/integrations/start-errors.ts +86 -0
  451. package/src/routes/create-admin-account-route.tsx +65 -0
  452. package/src/routes/create-admin-dashboard-route.tsx +52 -0
  453. package/src/routes/create-admin-layout-route.tsx +89 -0
  454. package/src/routes/create-admin-permissions-route.tsx +43 -0
  455. package/src/routes/create-admin-role-edit-route.tsx +88 -0
  456. package/src/routes/create-admin-roles-list-route.tsx +39 -0
  457. package/src/routes/create-admin-user-edit-route.tsx +105 -0
  458. package/src/routes/create-admin-users-list-route.tsx +84 -0
  459. package/src/routes/create-collection-api-route.tsx +111 -0
  460. package/src/routes/create-collection-create-route.tsx +66 -0
  461. package/src/routes/create-collection-edit-route.tsx +102 -0
  462. package/src/routes/create-collection-history-route.tsx +130 -0
  463. package/src/routes/create-collection-list-route.tsx +175 -0
  464. package/src/routes/create-sign-in-route.tsx +39 -0
  465. package/src/routes/index.ts +36 -0
  466. package/src/server-fns/admin-account/change-password.ts +27 -0
  467. package/src/server-fns/admin-account/get.ts +27 -0
  468. package/src/server-fns/admin-account/index.ts +28 -0
  469. package/src/server-fns/admin-account/update.ts +31 -0
  470. package/src/server-fns/admin-permissions/get-role-abilities.ts +27 -0
  471. package/src/server-fns/admin-permissions/index.ts +36 -0
  472. package/src/server-fns/admin-permissions/list-registered.ts +36 -0
  473. package/src/server-fns/admin-permissions/set-role-abilities.ts +32 -0
  474. package/src/server-fns/admin-permissions/who-has.ts +24 -0
  475. package/src/server-fns/admin-roles/create.ts +28 -0
  476. package/src/server-fns/admin-roles/delete.ts +25 -0
  477. package/src/server-fns/admin-roles/get.ts +21 -0
  478. package/src/server-fns/admin-roles/index.ts +25 -0
  479. package/src/server-fns/admin-roles/list.ts +27 -0
  480. package/src/server-fns/admin-roles/reorder.ts +21 -0
  481. package/src/server-fns/admin-roles/update.ts +31 -0
  482. package/src/server-fns/admin-users/create.ts +32 -0
  483. package/src/server-fns/admin-users/delete.ts +21 -0
  484. package/src/server-fns/admin-users/disable.ts +24 -0
  485. package/src/server-fns/admin-users/enable.ts +24 -0
  486. package/src/server-fns/admin-users/get-user-roles.ts +21 -0
  487. package/src/server-fns/admin-users/get.ts +21 -0
  488. package/src/server-fns/admin-users/index.ts +35 -0
  489. package/src/server-fns/admin-users/list.ts +40 -0
  490. package/src/server-fns/admin-users/set-password.ts +27 -0
  491. package/src/server-fns/admin-users/set-user-roles.ts +26 -0
  492. package/src/server-fns/admin-users/update.ts +34 -0
  493. package/src/server-fns/auth/current-user.ts +117 -0
  494. package/src/server-fns/auth/index.ts +15 -0
  495. package/src/server-fns/auth/sign-in.ts +71 -0
  496. package/src/server-fns/auth/sign-out.ts +42 -0
  497. package/src/server-fns/collections/create.ts +58 -0
  498. package/src/server-fns/collections/delete.ts +62 -0
  499. package/src/server-fns/collections/get.ts +233 -0
  500. package/src/server-fns/collections/history.ts +73 -0
  501. package/src/server-fns/collections/index.ts +16 -0
  502. package/src/server-fns/collections/list.ts +121 -0
  503. package/src/server-fns/collections/stats.ts +52 -0
  504. package/src/server-fns/collections/status.ts +102 -0
  505. package/src/server-fns/collections/update.ts +67 -0
  506. package/src/server-fns/collections/upload.ts +274 -0
  507. package/src/server-fns/collections/utils.ts +17 -0
  508. package/src/server-fns/preview/disable.ts +24 -0
  509. package/src/server-fns/preview/enable.ts +27 -0
  510. package/src/server-fns/preview/index.ts +11 -0
  511. package/src/server-fns/preview/state.ts +30 -0
@@ -0,0 +1,233 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+
9
+ import { createServerFn } from '@tanstack/react-start'
10
+
11
+ import {
12
+ BylineError,
13
+ buildRelationSummaryPopulateMap,
14
+ ERR_NOT_FOUND,
15
+ ErrorCodes,
16
+ getCollectionAdminConfig,
17
+ getCollectionDefinition,
18
+ getCollectionSchemasForPath,
19
+ getLogger,
20
+ getServerConfig,
21
+ type PopulateSpec,
22
+ } from '@byline/core'
23
+
24
+ import { ensureCollection } from '../../integrations/api-utils.js'
25
+ import { getAdminBylineClient } from '../../integrations/byline-client.js'
26
+ import { serialise } from './utils'
27
+
28
+ // ---------------------------------------------------------------------------
29
+ // Get document (current version, with optional published-version metadata)
30
+ // ---------------------------------------------------------------------------
31
+
32
+ const getDocumentFn = createServerFn({ method: 'GET' })
33
+ .inputValidator(
34
+ (input: {
35
+ collection: string
36
+ id: string
37
+ locale?: string
38
+ depth?: number
39
+ populateRelations?: boolean
40
+ }) => input
41
+ )
42
+ .handler(async ({ data }) => {
43
+ const { collection: path, id, locale, depth, populateRelations } = data
44
+ const logger = getLogger()
45
+ const config = await ensureCollection(path)
46
+ if (!config) {
47
+ throw ERR_NOT_FOUND({
48
+ message: 'Collection not found',
49
+ details: { collectionPath: path },
50
+ }).log(logger)
51
+ }
52
+
53
+ const client = getAdminBylineClient()
54
+ const handle = client.collection(path)
55
+
56
+ // Determine populate strategy. The admin API-preview path passes an
57
+ // explicit `depth > 0` and uses `'*'` to walk every relation with the
58
+ // full document projection — useful for the debug/preview UI but
59
+ // wasteful elsewhere. The admin edit loader sets `populateRelations`
60
+ // to auto-build a depth-1 projection from the schema's relation
61
+ // fields, so each target gets just its picker columns + useAsTitle
62
+ // and relation-summary tiles render on first paint without per-tile
63
+ // fetches.
64
+ const populateRequested = typeof depth === 'number' && depth > 0
65
+ const autoRelationsActive = !populateRequested && populateRelations === true
66
+
67
+ let populate: PopulateSpec | undefined
68
+ let resolvedDepth: number | undefined
69
+ if (populateRequested) {
70
+ populate = '*'
71
+ resolvedDepth = depth
72
+ } else if (autoRelationsActive) {
73
+ const populateMap = buildRelationSummaryPopulateMap(
74
+ config.definition.fields,
75
+ (targetPath) => ({
76
+ def: getCollectionDefinition(targetPath),
77
+ admin: getCollectionAdminConfig(targetPath),
78
+ })
79
+ )
80
+ if (Object.keys(populateMap).length > 0) {
81
+ populate = populateMap
82
+ resolvedDepth = 1
83
+ }
84
+ }
85
+
86
+ const document = await handle.findById(id, {
87
+ locale: locale ?? 'en',
88
+ populate,
89
+ depth: resolvedDepth,
90
+ status: 'any',
91
+ })
92
+
93
+ if (!document) {
94
+ throw ERR_NOT_FOUND({
95
+ message: 'Document not found',
96
+ details: { documentId: id, collectionPath: path },
97
+ }).log(logger)
98
+ }
99
+
100
+ const serialised = serialise(document)
101
+
102
+ // Skip the strict per-locale Zod parse when:
103
+ // - locale === 'all' (fields are locale-keyed objects, not per-locale values)
104
+ // - populated (the tree now contains nested populated documents that
105
+ // don't match the raw relation-ref shape the schema expects —
106
+ // applies equally to the depth-based preview path and the
107
+ // admin-edit relation-summary path)
108
+ const populatedTree = populateRequested || autoRelationsActive
109
+ const parsed =
110
+ locale === 'all' || populatedTree
111
+ ? (serialised as Record<string, any>)
112
+ : (() => {
113
+ const { get } = getCollectionSchemasForPath(path)
114
+ return get.parse(serialised)
115
+ })()
116
+
117
+ // If the current version is not published, check whether a separate
118
+ // published version exists so the UI can show a "published is live"
119
+ // badge. This is admin-bespoke metadata — `db.queries.documents.*` is
120
+ // the documented escape hatch for it. Reshaped to camelCase to match
121
+ // the surrounding ClientDocument shape.
122
+ let publishedVersion: Record<string, any> | null = null
123
+ if ((parsed as any).status !== 'published') {
124
+ const pv = await getServerConfig().db.queries.documents.getPublishedVersion({
125
+ collection_id: config.collection.id,
126
+ document_id: id,
127
+ })
128
+ publishedVersion = pv
129
+ ? serialise({
130
+ id: pv.document_id,
131
+ versionId: pv.document_version_id,
132
+ status: pv.status,
133
+ createdAt: pv.created_at,
134
+ updatedAt: pv.updated_at,
135
+ })
136
+ : null
137
+ }
138
+
139
+ return { ...(parsed as Record<string, any>), _publishedVersion: publishedVersion }
140
+ })
141
+
142
+ // ---------------------------------------------------------------------------
143
+ // Get document by specific version ID (for history / diff views)
144
+ // ---------------------------------------------------------------------------
145
+
146
+ const getDocumentByVersionFn = createServerFn({ method: 'GET' })
147
+ .inputValidator((input: { collection: string; versionId: string; locale?: string }) => input)
148
+ .handler(async ({ data }) => {
149
+ const { collection: path, versionId, locale } = data
150
+ const resolvedLocale = locale ?? 'all'
151
+
152
+ const logger = getLogger()
153
+ const config = await ensureCollection(path)
154
+ if (!config) {
155
+ throw ERR_NOT_FOUND({
156
+ message: 'Collection not found',
157
+ details: { collectionPath: path },
158
+ }).log(logger)
159
+ }
160
+
161
+ const document = await getAdminBylineClient()
162
+ .collection(path)
163
+ .findByVersion(versionId, { locale: resolvedLocale })
164
+
165
+ if (!document) {
166
+ throw ERR_NOT_FOUND({
167
+ message: 'Document version not found',
168
+ details: { documentVersionId: versionId, collectionPath: path },
169
+ }).log(logger)
170
+ }
171
+
172
+ const serialised = serialise(document)
173
+
174
+ // When fetching all locales the storage layer returns localized fields as
175
+ // locale-keyed objects — skip Zod validation in that case (same rationale
176
+ // as getDocumentFn). For a specific locale, parse for runtime safety.
177
+ if (resolvedLocale === 'all') {
178
+ return serialised as Record<string, any>
179
+ }
180
+
181
+ // Parse through the same Zod schema used by getDocumentFn so that key
182
+ // ordering and datetime formats are normalised identically on both sides
183
+ // of the diff — otherwise identical content renders as changed.
184
+ const { get } = getCollectionSchemasForPath(path)
185
+ return get.parse(serialised) as Record<string, any>
186
+ })
187
+
188
+ /**
189
+ * Fetch a single document by ID. Returns `null` when the document is not found
190
+ * so callers can degrade gracefully (e.g. `notFound()`).
191
+ *
192
+ * When `depth > 0` is supplied, relation leaves are populated before the
193
+ * response is returned — this is the hook that powers the admin
194
+ * API-preview Depth selector. The returned tree then contains nested
195
+ * shaped `ClientDocument`s at relation sites instead of bare
196
+ * `{target_document_id, target_collection_id}` refs.
197
+ */
198
+ export async function getCollectionDocument(
199
+ collection: string,
200
+ id: string,
201
+ locale?: string,
202
+ depth?: number,
203
+ populateRelations?: boolean
204
+ ) {
205
+ try {
206
+ return await getDocumentFn({
207
+ data: { collection, id, locale, depth, populateRelations },
208
+ })
209
+ } catch (err) {
210
+ if (err instanceof BylineError && err.code === ErrorCodes.NOT_FOUND) return null
211
+ throw err
212
+ }
213
+ }
214
+
215
+ /**
216
+ * Fetch a specific historical version of a document. Returns `null` when the
217
+ * version is not found.
218
+ */
219
+ export async function getCollectionDocumentVersion(
220
+ collection: string,
221
+ _documentId: string,
222
+ versionId: string,
223
+ locale?: string
224
+ ) {
225
+ try {
226
+ return await getDocumentByVersionFn({
227
+ data: { collection, versionId, locale },
228
+ })
229
+ } catch (err) {
230
+ if (err instanceof BylineError && err.code === ErrorCodes.NOT_FOUND) return null
231
+ throw err
232
+ }
233
+ }
@@ -0,0 +1,73 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+
9
+ import { createServerFn } from '@tanstack/react-start'
10
+
11
+ import { ERR_NOT_FOUND, getCollectionSchemasForPath, getLogger } from '@byline/core'
12
+
13
+ import { ensureCollection } from '../../integrations/api-utils.js'
14
+ import { getAdminBylineClient } from '../../integrations/byline-client.js'
15
+ import { serialise } from './utils'
16
+
17
+ // ---------------------------------------------------------------------------
18
+ // Shared param types
19
+ // ---------------------------------------------------------------------------
20
+
21
+ export interface HistorySearchParams {
22
+ page?: number
23
+ page_size?: number
24
+ order?: string
25
+ desc?: boolean
26
+ locale?: string
27
+ }
28
+
29
+ // ---------------------------------------------------------------------------
30
+ // Get document version history
31
+ // ---------------------------------------------------------------------------
32
+
33
+ export const getCollectionDocumentHistory = createServerFn({ method: 'GET' })
34
+ .inputValidator((input: { collection: string; id: string; params: HistorySearchParams }) => input)
35
+ .handler(async ({ data }) => {
36
+ const { collection: path, id, params } = data
37
+ const config = await ensureCollection(path)
38
+ if (!config) {
39
+ throw ERR_NOT_FOUND({
40
+ message: 'Collection not found',
41
+ details: { collectionPath: path },
42
+ }).log(getLogger())
43
+ }
44
+
45
+ // Routes through CollectionHandle.history so the access gate
46
+ // (`beforeRead` via `findById`) is applied consistently with the rest
47
+ // of the read pipeline. When the actor's predicate excludes the
48
+ // document, history returns an empty result rather than leaking
49
+ // version metadata.
50
+ const result = await getAdminBylineClient()
51
+ .collection(path)
52
+ .history(id, {
53
+ locale: params.locale ?? 'en',
54
+ page: params.page,
55
+ pageSize: params.page_size,
56
+ order: params.order,
57
+ desc: params.desc,
58
+ })
59
+
60
+ const serialised = serialise(result)
61
+ const { history } = getCollectionSchemasForPath(path)
62
+
63
+ // When locale is 'all' the storage layer returns localized fields as
64
+ // locale-keyed objects which don't conform to the typed Zod schema — skip
65
+ // validation in that case, same as getCollectionDocument. Cast through
66
+ // the inferred Zod type so both branches share one return shape; the
67
+ // runtime contents are structurally compatible.
68
+ if (params.locale === 'all') {
69
+ return serialised as unknown as ReturnType<typeof history.parse>
70
+ }
71
+
72
+ return history.parse(serialised)
73
+ })
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Barrel re-exports for admin collection operations.
3
+ *
4
+ * Each module is self-contained: it defines the TanStack Start server
5
+ * function and exports a clean public API.
6
+ */
7
+
8
+ export * from './create'
9
+ export * from './delete'
10
+ export * from './get'
11
+ export * from './history'
12
+ export * from './list'
13
+ export * from './stats'
14
+ export * from './status'
15
+ export * from './update'
16
+ export * from './upload'
@@ -0,0 +1,121 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+
9
+ import { createServerFn } from '@tanstack/react-start'
10
+
11
+ import {
12
+ ERR_NOT_FOUND,
13
+ getCollectionSchemasForPath,
14
+ getLogger,
15
+ getServerConfig,
16
+ type QueryPredicate,
17
+ } from '@byline/core'
18
+
19
+ import { ensureCollection } from '../../integrations/api-utils.js'
20
+ import { getAdminBylineClient } from '../../integrations/byline-client.js'
21
+ import { serialise } from './utils'
22
+
23
+ // ---------------------------------------------------------------------------
24
+ // Shared param types
25
+ // ---------------------------------------------------------------------------
26
+
27
+ export interface CollectionSearchParams {
28
+ page?: number
29
+ page_size?: number
30
+ order?: string
31
+ desc?: boolean
32
+ query?: string
33
+ locale?: string
34
+ status?: string
35
+ fields?: string[]
36
+ }
37
+
38
+ // ---------------------------------------------------------------------------
39
+ // List documents
40
+ // ---------------------------------------------------------------------------
41
+
42
+ export const getCollectionDocuments = createServerFn({ method: 'GET' })
43
+ .inputValidator((input: { collection: string; params: CollectionSearchParams }) => input)
44
+ .handler(async ({ data }) => {
45
+ const { collection: path, params } = data
46
+ const config = await ensureCollection(path)
47
+ if (!config) {
48
+ throw ERR_NOT_FOUND({
49
+ message: 'Collection not found',
50
+ details: { collectionPath: path },
51
+ }).log(getLogger())
52
+ }
53
+
54
+ const client = getAdminBylineClient()
55
+ const handle = client.collection(path)
56
+ const pageSize = params.page_size ?? 20
57
+
58
+ // Routes through CollectionHandle.find so the read pipeline (beforeRead
59
+ // → findDocuments → afterRead) is identical to any non-admin client.
60
+ // `status: 'any'` keeps admin behaviour: in-progress drafts are visible
61
+ // even when no published version exists. The `where.status` filter
62
+ // (when supplied) further narrows to a specific exact status, and
63
+ // `where.query` triggers the configured search-fields text search.
64
+ const where: QueryPredicate = {}
65
+ if (params.status) where.status = params.status
66
+ if (params.query) where.query = params.query
67
+
68
+ const result = await handle.find({
69
+ where: Object.keys(where).length > 0 ? where : undefined,
70
+ sort: params.order ? { [params.order]: params.desc === false ? 'asc' : 'desc' } : undefined,
71
+ locale: params.locale ?? 'en',
72
+ page: params.page,
73
+ pageSize,
74
+ select: params.fields,
75
+ status: 'any',
76
+ })
77
+
78
+ // Decorate each doc with `hasPublishedVersion` so the list UI can show a
79
+ // "live" indicator on documents that still have a published version
80
+ // even when the current row is a newer draft. This is admin-bespoke
81
+ // metadata, so it sits alongside the public ClientDocument shape rather
82
+ // than inside it.
83
+ const documentIds = result.docs.map((d) => d.id)
84
+ const publishedSet =
85
+ documentIds.length > 0
86
+ ? await getServerConfig().db.queries.documents.getPublishedDocumentIds({
87
+ collection_id: config.collection.id,
88
+ document_ids: documentIds,
89
+ })
90
+ : new Set<string>()
91
+
92
+ const docs = result.docs.map((d) => ({
93
+ ...d,
94
+ hasPublishedVersion: publishedSet.has(d.id),
95
+ }))
96
+
97
+ const response = {
98
+ docs,
99
+ meta: {
100
+ ...result.meta,
101
+ order: params.order,
102
+ desc: params.desc,
103
+ },
104
+ included: {
105
+ collection: {
106
+ id: config.collection.id,
107
+ path: config.collection.path,
108
+ labels: {
109
+ singular: config.definition.labels.singular || config.collection.path,
110
+ plural: config.definition.labels.plural || config.collection.path,
111
+ },
112
+ },
113
+ },
114
+ }
115
+
116
+ const serialised = serialise(response)
117
+
118
+ // Validate with schema for runtime type safety and field normalisation.
119
+ const { list } = getCollectionSchemasForPath(path)
120
+ return list.parse(serialised)
121
+ })
@@ -0,0 +1,52 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+
9
+ import { createServerFn } from '@tanstack/react-start'
10
+
11
+ import { ensureCollection } from '../../integrations/api-utils.js'
12
+ import { getAdminBylineClient } from '../../integrations/byline-client.js'
13
+
14
+ // ---------------------------------------------------------------------------
15
+ // Shared types
16
+ // ---------------------------------------------------------------------------
17
+
18
+ export interface CollectionStatusCount {
19
+ status: string
20
+ count: number
21
+ }
22
+
23
+ // ---------------------------------------------------------------------------
24
+ // Collection stats (per-status document counts)
25
+ // ---------------------------------------------------------------------------
26
+
27
+ const getCollectionStatsFn = createServerFn({ method: 'GET' })
28
+ .inputValidator((input: { collection: string }) => input)
29
+ .handler(async ({ data }) => {
30
+ const config = await ensureCollection(data.collection)
31
+ if (!config) return { stats: [] as CollectionStatusCount[] }
32
+
33
+ // Routes through CollectionHandle.countByStatus so per-status counts
34
+ // reflect the actor's beforeRead predicate (multi-tenant scoping,
35
+ // owner-only drafts, etc).
36
+ const counts = await getAdminBylineClient().collection(data.collection).countByStatus()
37
+
38
+ return { stats: counts as CollectionStatusCount[] }
39
+ })
40
+
41
+ /**
42
+ * Fetch per-status document counts for a collection.
43
+ * Returns an empty array on any error so the caller can degrade gracefully.
44
+ */
45
+ export async function getCollectionStats(collection: string): Promise<CollectionStatusCount[]> {
46
+ try {
47
+ const result = await getCollectionStatsFn({ data: { collection } })
48
+ return result.stats
49
+ } catch {
50
+ return []
51
+ }
52
+ }
@@ -0,0 +1,102 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+
9
+ import { createServerFn } from '@tanstack/react-start'
10
+
11
+ import { ERR_NOT_FOUND, getLogger, getServerConfig } from '@byline/core'
12
+ import type { DocumentLifecycleContext } from '@byline/core/services'
13
+ import {
14
+ changeDocumentStatus,
15
+ unpublishDocument as unpublishDocumentService,
16
+ } from '@byline/core/services'
17
+
18
+ import { getAdminRequestContext } from '../../auth/auth-context.js'
19
+ import { ensureCollection } from '../../integrations/api-utils.js'
20
+
21
+ // ---------------------------------------------------------------------------
22
+ // Change document workflow status
23
+ // ---------------------------------------------------------------------------
24
+
25
+ export const updateDocumentStatus = createServerFn({ method: 'POST' })
26
+ .inputValidator((input: { collection: string; id: string; status: string }) => input)
27
+ .handler(async ({ data: input }) => {
28
+ const { collection: path, id, status: nextStatus } = input
29
+ const logger = getLogger()
30
+ const config = await ensureCollection(path)
31
+ if (!config) {
32
+ throw ERR_NOT_FOUND({
33
+ message: 'Collection not found',
34
+ details: { collectionPath: path },
35
+ }).log(logger)
36
+ }
37
+
38
+ const serverConfig = getServerConfig()
39
+ const ctx: DocumentLifecycleContext = {
40
+ db: serverConfig.db,
41
+ definition: config.definition,
42
+ collectionId: config.collection.id,
43
+ collectionVersion: config.collection.version,
44
+ collectionPath: path,
45
+ logger,
46
+ defaultLocale: serverConfig.i18n.content.defaultLocale,
47
+ slugifier: serverConfig.slugifier,
48
+ requestContext: await getAdminRequestContext(),
49
+ }
50
+
51
+ const result = await changeDocumentStatus(ctx, {
52
+ documentId: id,
53
+ nextStatus,
54
+ })
55
+ return {
56
+ status: 'ok' as const,
57
+ previousStatus: result.previousStatus,
58
+ newStatus: result.newStatus,
59
+ }
60
+ })
61
+
62
+ // ---------------------------------------------------------------------------
63
+ // Unpublish document (archive the live published version)
64
+ // ---------------------------------------------------------------------------
65
+
66
+ export const unpublishDocument = createServerFn({ method: 'POST' })
67
+ .inputValidator((input: { collection: string; id: string }) => input)
68
+ .handler(async ({ data: input }) => {
69
+ const { collection: path, id } = input
70
+ const logger = getLogger()
71
+ const config = await ensureCollection(path)
72
+ if (!config) {
73
+ throw ERR_NOT_FOUND({
74
+ message: 'Collection not found',
75
+ details: { collectionPath: path },
76
+ }).log(logger)
77
+ }
78
+
79
+ const serverConfig = getServerConfig()
80
+ const ctx: DocumentLifecycleContext = {
81
+ db: serverConfig.db,
82
+ definition: config.definition,
83
+ collectionId: config.collection.id,
84
+ collectionVersion: config.collection.version,
85
+ collectionPath: path,
86
+ logger,
87
+ defaultLocale: serverConfig.i18n.content.defaultLocale,
88
+ slugifier: serverConfig.slugifier,
89
+ requestContext: await getAdminRequestContext(),
90
+ }
91
+
92
+ const result = await unpublishDocumentService(ctx, { documentId: id })
93
+
94
+ if (result.archivedCount === 0) {
95
+ throw ERR_NOT_FOUND({
96
+ message: 'No published version found for this document',
97
+ details: { documentId: id, collectionPath: path },
98
+ }).log(logger)
99
+ }
100
+
101
+ return { status: 'ok' as const, archivedCount: result.archivedCount }
102
+ })
@@ -0,0 +1,67 @@
1
+ /**
2
+ * This Source Code is subject to the terms of the Mozilla Public
3
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
4
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
5
+ *
6
+ * Copyright (c) Infonomic Company Limited
7
+ */
8
+
9
+ import { createServerFn } from '@tanstack/react-start'
10
+
11
+ import { ERR_NOT_FOUND, getLogger, getServerConfig } from '@byline/core'
12
+ import type { DocumentPatch } from '@byline/core/patches'
13
+ import type { DocumentLifecycleContext } from '@byline/core/services'
14
+ import { updateDocumentWithPatches } from '@byline/core/services'
15
+
16
+ import { getAdminRequestContext } from '../../auth/auth-context.js'
17
+ import { ensureCollection } from '../../integrations/api-utils.js'
18
+
19
+ // ---------------------------------------------------------------------------
20
+ // Apply patches (patch-based update — creates a new immutable version)
21
+ // ---------------------------------------------------------------------------
22
+
23
+ export const updateCollectionDocumentWithPatches = createServerFn({ method: 'POST' })
24
+ .inputValidator(
25
+ (input: {
26
+ collection: string
27
+ id: string
28
+ patches: DocumentPatch[]
29
+ versionId?: string
30
+ locale?: string
31
+ path?: string
32
+ }) => input
33
+ )
34
+ .handler(async ({ data: input }) => {
35
+ const { collection: path, id, patches, versionId, locale, path: explicitPath } = input
36
+ const logger = getLogger()
37
+ const config = await ensureCollection(path)
38
+ if (!config) {
39
+ throw ERR_NOT_FOUND({
40
+ message: 'Collection not found',
41
+ details: { collectionPath: path },
42
+ }).log(logger)
43
+ }
44
+
45
+ const serverConfig = getServerConfig()
46
+ const ctx: DocumentLifecycleContext = {
47
+ db: serverConfig.db,
48
+ definition: config.definition,
49
+ collectionId: config.collection.id,
50
+ collectionVersion: config.collection.version,
51
+ collectionPath: path,
52
+ logger,
53
+ defaultLocale: serverConfig.i18n.content.defaultLocale,
54
+ slugifier: serverConfig.slugifier,
55
+ requestContext: await getAdminRequestContext(),
56
+ }
57
+
58
+ await updateDocumentWithPatches(ctx, {
59
+ documentId: id,
60
+ patches,
61
+ documentVersionId: versionId,
62
+ locale: locale ?? serverConfig.i18n.content.defaultLocale,
63
+ path: explicitPath,
64
+ })
65
+
66
+ return { status: 'ok' as const }
67
+ })