@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.
- package/LICENSE +373 -0
- package/README.md +48 -0
- package/dist/admin-shell/admin-roles/container.d.ts +34 -0
- package/dist/admin-shell/admin-roles/container.d.ts.map +1 -0
- package/dist/admin-shell/admin-roles/container.js +259 -0
- package/dist/admin-shell/admin-roles/container.module.js +17 -0
- package/dist/admin-shell/admin-roles/container_module.css +93 -0
- package/dist/admin-shell/admin-roles/delete.d.ts +9 -0
- package/dist/admin-shell/admin-roles/delete.d.ts.map +1 -0
- package/dist/admin-shell/admin-roles/delete.js +107 -0
- package/dist/admin-shell/admin-roles/delete.module.js +10 -0
- package/dist/admin-shell/admin-roles/delete_module.css +35 -0
- package/dist/admin-shell/admin-roles/list.d.ts +25 -0
- package/dist/admin-shell/admin-roles/list.d.ts.map +1 -0
- package/dist/admin-shell/admin-roles/list.js +292 -0
- package/dist/admin-shell/admin-roles/list.module.js +24 -0
- package/dist/admin-shell/admin-roles/list_module.css +113 -0
- package/dist/admin-shell/admin-users/container.d.ts +18 -0
- package/dist/admin-shell/admin-users/container.d.ts.map +1 -0
- package/dist/admin-shell/admin-users/container.js +418 -0
- package/dist/admin-shell/admin-users/container.module.js +22 -0
- package/dist/admin-shell/admin-users/container_module.css +136 -0
- package/dist/admin-shell/admin-users/delete.d.ts +9 -0
- package/dist/admin-shell/admin-users/delete.d.ts.map +1 -0
- package/dist/admin-shell/admin-users/delete.js +115 -0
- package/dist/admin-shell/admin-users/delete.module.js +10 -0
- package/dist/admin-shell/admin-users/delete_module.css +35 -0
- package/dist/admin-shell/admin-users/list.d.ts +13 -0
- package/dist/admin-shell/admin-users/list.d.ts.map +1 -0
- package/dist/admin-shell/admin-users/list.js +328 -0
- package/dist/admin-shell/admin-users/list.module.js +22 -0
- package/dist/admin-shell/admin-users/list_module.css +112 -0
- package/dist/admin-shell/chrome/admin-app-bar.d.ts +7 -0
- package/dist/admin-shell/chrome/admin-app-bar.d.ts.map +1 -0
- package/dist/admin-shell/chrome/admin-app-bar.js +71 -0
- package/dist/admin-shell/chrome/admin-app-bar.module.js +9 -0
- package/dist/admin-shell/chrome/admin-app-bar_module.css +54 -0
- package/dist/admin-shell/chrome/admin-layout.module.js +5 -0
- package/dist/admin-shell/chrome/admin-layout_module.css +8 -0
- package/dist/admin-shell/chrome/branding.d.ts +9 -0
- package/dist/admin-shell/chrome/branding.d.ts.map +1 -0
- package/dist/admin-shell/chrome/branding.js +17 -0
- package/dist/admin-shell/chrome/branding.module.js +6 -0
- package/dist/admin-shell/chrome/branding_module.css +11 -0
- package/dist/admin-shell/chrome/breadcrumbs/@types.d.ts +6 -0
- package/dist/admin-shell/chrome/breadcrumbs/@types.d.ts.map +1 -0
- package/dist/admin-shell/chrome/breadcrumbs/@types.js +1 -0
- package/dist/admin-shell/chrome/breadcrumbs/breadcrumbs-client.d.ts +7 -0
- package/dist/admin-shell/chrome/breadcrumbs/breadcrumbs-client.d.ts.map +1 -0
- package/dist/admin-shell/chrome/breadcrumbs/breadcrumbs-client.js +20 -0
- package/dist/admin-shell/chrome/breadcrumbs/breadcrumbs-provider.d.ts +24 -0
- package/dist/admin-shell/chrome/breadcrumbs/breadcrumbs-provider.d.ts.map +1 -0
- package/dist/admin-shell/chrome/breadcrumbs/breadcrumbs-provider.js +23 -0
- package/dist/admin-shell/chrome/breadcrumbs/breadcrumbs.d.ts +15 -0
- package/dist/admin-shell/chrome/breadcrumbs/breadcrumbs.d.ts.map +1 -0
- package/dist/admin-shell/chrome/breadcrumbs/breadcrumbs.js +77 -0
- package/dist/admin-shell/chrome/breadcrumbs/breadcrumbs.module.js +12 -0
- package/dist/admin-shell/chrome/breadcrumbs/breadcrumbs_module.css +81 -0
- package/dist/admin-shell/chrome/byline-logo.d.ts +12 -0
- package/dist/admin-shell/chrome/byline-logo.d.ts.map +1 -0
- package/dist/admin-shell/chrome/byline-logo.js +178 -0
- package/dist/admin-shell/chrome/content.d.ts +24 -0
- package/dist/admin-shell/chrome/content.d.ts.map +1 -0
- package/dist/admin-shell/chrome/content.js +31 -0
- package/dist/admin-shell/chrome/content.module.js +5 -0
- package/dist/admin-shell/chrome/content_module.css +10 -0
- package/dist/admin-shell/chrome/dashboard.d.ts +14 -0
- package/dist/admin-shell/chrome/dashboard.d.ts.map +1 -0
- package/dist/admin-shell/chrome/dashboard.js +129 -0
- package/dist/admin-shell/chrome/dashboard.module.js +19 -0
- package/dist/admin-shell/chrome/dashboard_module.css +175 -0
- package/dist/admin-shell/chrome/drawer-toggle.d.ts +9 -0
- package/dist/admin-shell/chrome/drawer-toggle.d.ts.map +1 -0
- package/dist/admin-shell/chrome/drawer-toggle.js +57 -0
- package/dist/admin-shell/chrome/drawer-toggle.module.js +8 -0
- package/dist/admin-shell/chrome/drawer-toggle_module.css +21 -0
- package/dist/admin-shell/chrome/hamburger.d.ts +10 -0
- package/dist/admin-shell/chrome/hamburger.d.ts.map +1 -0
- package/dist/admin-shell/chrome/hamburger.js +30 -0
- package/dist/admin-shell/chrome/hamburger.module.js +5 -0
- package/dist/admin-shell/chrome/hamburger_module.css +7 -0
- package/dist/admin-shell/chrome/loose-router.d.ts +33 -0
- package/dist/admin-shell/chrome/loose-router.d.ts.map +1 -0
- package/dist/admin-shell/chrome/loose-router.js +6 -0
- package/dist/admin-shell/chrome/menu-drawer.d.ts +10 -0
- package/dist/admin-shell/chrome/menu-drawer.d.ts.map +1 -0
- package/dist/admin-shell/chrome/menu-drawer.js +141 -0
- package/dist/admin-shell/chrome/menu-drawer.module.js +12 -0
- package/dist/admin-shell/chrome/menu-drawer_module.css +137 -0
- package/dist/admin-shell/chrome/menu-provider.d.ts +21 -0
- package/dist/admin-shell/chrome/menu-provider.d.ts.map +1 -0
- package/dist/admin-shell/chrome/menu-provider.js +54 -0
- package/dist/admin-shell/chrome/preview-toggle.d.ts +13 -0
- package/dist/admin-shell/chrome/preview-toggle.d.ts.map +1 -0
- package/dist/admin-shell/chrome/preview-toggle.js +75 -0
- package/dist/admin-shell/chrome/route-error.d.ts +22 -0
- package/dist/admin-shell/chrome/route-error.d.ts.map +1 -0
- package/dist/admin-shell/chrome/route-error.js +119 -0
- package/dist/admin-shell/chrome/route-error.module.js +14 -0
- package/dist/admin-shell/chrome/route-error_module.css +94 -0
- package/dist/admin-shell/chrome/router-pager.d.ts +19 -0
- package/dist/admin-shell/chrome/router-pager.d.ts.map +1 -0
- package/dist/admin-shell/chrome/router-pager.js +91 -0
- package/dist/admin-shell/chrome/sign-in-page.d.ts +19 -0
- package/dist/admin-shell/chrome/sign-in-page.d.ts.map +1 -0
- package/dist/admin-shell/chrome/sign-in-page.js +20 -0
- package/dist/admin-shell/chrome/sign-in-page.module.js +6 -0
- package/dist/admin-shell/chrome/sign-in-page_module.css +22 -0
- package/dist/admin-shell/chrome/sort-icons.d.ts +10 -0
- package/dist/admin-shell/chrome/sort-icons.d.ts.map +1 -0
- package/dist/admin-shell/chrome/sort-icons.js +103 -0
- package/dist/admin-shell/chrome/th-sortable.d.ts +23 -0
- package/dist/admin-shell/chrome/th-sortable.d.ts.map +1 -0
- package/dist/admin-shell/chrome/th-sortable.js +75 -0
- package/dist/admin-shell/chrome/th-sortable.module.js +10 -0
- package/dist/admin-shell/chrome/th-sortable_module.css +37 -0
- package/dist/admin-shell/chrome/use-media-query.d.ts +9 -0
- package/dist/admin-shell/chrome/use-media-query.d.ts.map +1 -0
- package/dist/admin-shell/chrome/use-media-query.js +20 -0
- package/dist/admin-shell/chrome/utils.d.ts +12 -0
- package/dist/admin-shell/chrome/utils.d.ts.map +1 -0
- package/dist/admin-shell/chrome/utils.js +8 -0
- package/dist/admin-shell/collections/api.d.ts +28 -0
- package/dist/admin-shell/collections/api.d.ts.map +1 -0
- package/dist/admin-shell/collections/api.js +51 -0
- package/dist/admin-shell/collections/api.module.js +9 -0
- package/dist/admin-shell/collections/api_module.css +42 -0
- package/dist/admin-shell/collections/create.d.ts +14 -0
- package/dist/admin-shell/collections/create.d.ts.map +1 -0
- package/dist/admin-shell/collections/create.js +77 -0
- package/dist/admin-shell/collections/edit.d.ts +19 -0
- package/dist/admin-shell/collections/edit.d.ts.map +1 -0
- package/dist/admin-shell/collections/edit.js +279 -0
- package/dist/admin-shell/collections/history.d.ts +20 -0
- package/dist/admin-shell/collections/history.d.ts.map +1 -0
- package/dist/admin-shell/collections/history.js +252 -0
- package/dist/admin-shell/collections/history.module.js +18 -0
- package/dist/admin-shell/collections/history_module.css +121 -0
- package/dist/admin-shell/collections/list.d.ts +16 -0
- package/dist/admin-shell/collections/list.d.ts.map +1 -0
- package/dist/admin-shell/collections/list.js +253 -0
- package/dist/admin-shell/collections/list.module.js +16 -0
- package/dist/admin-shell/collections/list_module.css +88 -0
- package/dist/admin-shell/collections/preview-link.d.ts +32 -0
- package/dist/admin-shell/collections/preview-link.d.ts.map +1 -0
- package/dist/admin-shell/collections/preview-link.js +54 -0
- package/dist/admin-shell/collections/tanstack-navigation-guard.d.ts +16 -0
- package/dist/admin-shell/collections/tanstack-navigation-guard.d.ts.map +1 -0
- package/dist/admin-shell/collections/tanstack-navigation-guard.js +19 -0
- package/dist/admin-shell/collections/view-menu.d.ts +58 -0
- package/dist/admin-shell/collections/view-menu.d.ts.map +1 -0
- package/dist/admin-shell/collections/view-menu.js +203 -0
- package/dist/admin-shell/collections/view-menu.module.js +11 -0
- package/dist/admin-shell/collections/view-menu_module.css +43 -0
- package/dist/auth/auth-context.d.ts +38 -0
- package/dist/auth/auth-context.d.ts.map +1 -0
- package/dist/auth/auth-context.js +57 -0
- package/dist/auth/auth-cookies.d.ts +35 -0
- package/dist/auth/auth-cookies.d.ts.map +1 -0
- package/dist/auth/auth-cookies.js +46 -0
- package/dist/auth/preview-cookies.d.ts +20 -0
- package/dist/auth/preview-cookies.d.ts.map +1 -0
- package/dist/auth/preview-cookies.js +26 -0
- package/dist/index.d.ts +43 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -0
- package/dist/integrations/abilities.d.ts +67 -0
- package/dist/integrations/abilities.d.ts.map +1 -0
- package/dist/integrations/abilities.js +25 -0
- package/dist/integrations/api-utils.d.ts +34 -0
- package/dist/integrations/api-utils.d.ts.map +1 -0
- package/dist/integrations/api-utils.js +22 -0
- package/dist/integrations/byline-admin-services.d.ts +25 -0
- package/dist/integrations/byline-admin-services.d.ts.map +1 -0
- package/dist/integrations/byline-admin-services.js +26 -0
- package/dist/integrations/byline-client.d.ts +22 -0
- package/dist/integrations/byline-client.d.ts.map +1 -0
- package/dist/integrations/byline-client.js +13 -0
- package/dist/integrations/byline-core.d.ts +28 -0
- package/dist/integrations/byline-core.d.ts.map +1 -0
- package/dist/integrations/byline-core.js +5 -0
- package/dist/integrations/byline-field-services.d.ts +19 -0
- package/dist/integrations/byline-field-services.d.ts.map +1 -0
- package/dist/integrations/byline-field-services.js +14 -0
- package/dist/integrations/byline-public-client.d.ts +10 -0
- package/dist/integrations/byline-public-client.d.ts.map +1 -0
- package/dist/integrations/byline-public-client.js +15 -0
- package/dist/integrations/byline-viewer-client.d.ts +21 -0
- package/dist/integrations/byline-viewer-client.d.ts.map +1 -0
- package/dist/integrations/byline-viewer-client.js +39 -0
- package/dist/integrations/start-errors.d.ts +23 -0
- package/dist/integrations/start-errors.d.ts.map +1 -0
- package/dist/integrations/start-errors.js +32 -0
- package/dist/routes/create-admin-account-route.d.ts +9 -0
- package/dist/routes/create-admin-account-route.d.ts.map +1 -0
- package/dist/routes/create-admin-account-route.js +68 -0
- package/dist/routes/create-admin-dashboard-route.d.ts +9 -0
- package/dist/routes/create-admin-dashboard-route.d.ts.map +1 -0
- package/dist/routes/create-admin-dashboard-route.js +44 -0
- package/dist/routes/create-admin-layout-route.d.ts +14 -0
- package/dist/routes/create-admin-layout-route.d.ts.map +1 -0
- package/dist/routes/create-admin-layout-route.js +64 -0
- package/dist/routes/create-admin-permissions-route.d.ts +9 -0
- package/dist/routes/create-admin-permissions-route.d.ts.map +1 -0
- package/dist/routes/create-admin-permissions-route.js +39 -0
- package/dist/routes/create-admin-role-edit-route.d.ts +9 -0
- package/dist/routes/create-admin-role-edit-route.d.ts.map +1 -0
- package/dist/routes/create-admin-role-edit-route.js +79 -0
- package/dist/routes/create-admin-roles-list-route.d.ts +9 -0
- package/dist/routes/create-admin-roles-list-route.d.ts.map +1 -0
- package/dist/routes/create-admin-roles-list-route.js +39 -0
- package/dist/routes/create-admin-user-edit-route.d.ts +9 -0
- package/dist/routes/create-admin-user-edit-route.d.ts.map +1 -0
- package/dist/routes/create-admin-user-edit-route.js +86 -0
- package/dist/routes/create-admin-users-list-route.d.ts +9 -0
- package/dist/routes/create-admin-users-list-route.d.ts.map +1 -0
- package/dist/routes/create-admin-users-list-route.js +71 -0
- package/dist/routes/create-collection-api-route.d.ts +15 -0
- package/dist/routes/create-collection-api-route.d.ts.map +1 -0
- package/dist/routes/create-collection-api-route.js +71 -0
- package/dist/routes/create-collection-create-route.d.ts +9 -0
- package/dist/routes/create-collection-create-route.d.ts.map +1 -0
- package/dist/routes/create-collection-create-route.js +53 -0
- package/dist/routes/create-collection-edit-route.d.ts +15 -0
- package/dist/routes/create-collection-edit-route.d.ts.map +1 -0
- package/dist/routes/create-collection-edit-route.js +65 -0
- package/dist/routes/create-collection-history-route.d.ts +15 -0
- package/dist/routes/create-collection-history-route.d.ts.map +1 -0
- package/dist/routes/create-collection-history-route.js +94 -0
- package/dist/routes/create-collection-list-route.d.ts +9 -0
- package/dist/routes/create-collection-list-route.d.ts.map +1 -0
- package/dist/routes/create-collection-list-route.js +130 -0
- package/dist/routes/create-sign-in-route.d.ts +9 -0
- package/dist/routes/create-sign-in-route.d.ts.map +1 -0
- package/dist/routes/create-sign-in-route.js +21 -0
- package/dist/routes/index.d.ts +35 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +14 -0
- package/dist/server-fns/admin-account/change-password.d.ts +30 -0
- package/dist/server-fns/admin-account/change-password.d.ts.map +1 -0
- package/dist/server-fns/admin-account/change-password.js +13 -0
- package/dist/server-fns/admin-account/get.d.ts +31 -0
- package/dist/server-fns/admin-account/get.d.ts.map +1 -0
- package/dist/server-fns/admin-account/get.js +13 -0
- package/dist/server-fns/admin-account/index.d.ts +22 -0
- package/dist/server-fns/admin-account/index.d.ts.map +1 -0
- package/dist/server-fns/admin-account/index.js +3 -0
- package/dist/server-fns/admin-account/update.d.ts +34 -0
- package/dist/server-fns/admin-account/update.d.ts.map +1 -0
- package/dist/server-fns/admin-account/update.js +13 -0
- package/dist/server-fns/admin-permissions/get-role-abilities.d.ts +16 -0
- package/dist/server-fns/admin-permissions/get-role-abilities.d.ts.map +1 -0
- package/dist/server-fns/admin-permissions/get-role-abilities.js +14 -0
- package/dist/server-fns/admin-permissions/index.d.ts +25 -0
- package/dist/server-fns/admin-permissions/index.d.ts.map +1 -0
- package/dist/server-fns/admin-permissions/index.js +4 -0
- package/dist/server-fns/admin-permissions/list-registered.d.ts +33 -0
- package/dist/server-fns/admin-permissions/list-registered.d.ts.map +1 -0
- package/dist/server-fns/admin-permissions/list-registered.js +14 -0
- package/dist/server-fns/admin-permissions/set-role-abilities.d.ts +16 -0
- package/dist/server-fns/admin-permissions/set-role-abilities.d.ts.map +1 -0
- package/dist/server-fns/admin-permissions/set-role-abilities.js +14 -0
- package/dist/server-fns/admin-permissions/who-has.d.ts +26 -0
- package/dist/server-fns/admin-permissions/who-has.d.ts.map +1 -0
- package/dist/server-fns/admin-permissions/who-has.js +14 -0
- package/dist/server-fns/admin-roles/create.d.ts +24 -0
- package/dist/server-fns/admin-roles/create.d.ts.map +1 -0
- package/dist/server-fns/admin-roles/create.js +13 -0
- package/dist/server-fns/admin-roles/delete.d.ts +17 -0
- package/dist/server-fns/admin-roles/delete.d.ts.map +1 -0
- package/dist/server-fns/admin-roles/delete.js +13 -0
- package/dist/server-fns/admin-roles/get.d.ts +22 -0
- package/dist/server-fns/admin-roles/get.d.ts.map +1 -0
- package/dist/server-fns/admin-roles/get.js +13 -0
- package/dist/server-fns/admin-roles/index.d.ts +23 -0
- package/dist/server-fns/admin-roles/index.d.ts.map +1 -0
- package/dist/server-fns/admin-roles/index.js +6 -0
- package/dist/server-fns/admin-roles/list.d.ts +26 -0
- package/dist/server-fns/admin-roles/list.d.ts.map +1 -0
- package/dist/server-fns/admin-roles/list.js +13 -0
- package/dist/server-fns/admin-roles/reorder.d.ts +15 -0
- package/dist/server-fns/admin-roles/reorder.d.ts.map +1 -0
- package/dist/server-fns/admin-roles/reorder.js +13 -0
- package/dist/server-fns/admin-roles/update.d.ts +27 -0
- package/dist/server-fns/admin-roles/update.d.ts.map +1 -0
- package/dist/server-fns/admin-roles/update.js +13 -0
- package/dist/server-fns/admin-users/create.d.ts +35 -0
- package/dist/server-fns/admin-users/create.d.ts.map +1 -0
- package/dist/server-fns/admin-users/create.js +13 -0
- package/dist/server-fns/admin-users/delete.d.ts +17 -0
- package/dist/server-fns/admin-users/delete.d.ts.map +1 -0
- package/dist/server-fns/admin-users/delete.js +13 -0
- package/dist/server-fns/admin-users/disable.d.ts +15 -0
- package/dist/server-fns/admin-users/disable.d.ts.map +1 -0
- package/dist/server-fns/admin-users/disable.js +13 -0
- package/dist/server-fns/admin-users/enable.d.ts +15 -0
- package/dist/server-fns/admin-users/enable.d.ts.map +1 -0
- package/dist/server-fns/admin-users/enable.js +13 -0
- package/dist/server-fns/admin-users/get-user-roles.d.ts +25 -0
- package/dist/server-fns/admin-users/get-user-roles.d.ts.map +1 -0
- package/dist/server-fns/admin-users/get-user-roles.js +13 -0
- package/dist/server-fns/admin-users/get.d.ts +29 -0
- package/dist/server-fns/admin-users/get.d.ts.map +1 -0
- package/dist/server-fns/admin-users/get.js +13 -0
- package/dist/server-fns/admin-users/index.d.ts +28 -0
- package/dist/server-fns/admin-users/index.d.ts.map +1 -0
- package/dist/server-fns/admin-users/index.js +10 -0
- package/dist/server-fns/admin-users/list.d.ts +51 -0
- package/dist/server-fns/admin-users/list.d.ts.map +1 -0
- package/dist/server-fns/admin-users/list.js +13 -0
- package/dist/server-fns/admin-users/set-password.d.ts +30 -0
- package/dist/server-fns/admin-users/set-password.d.ts.map +1 -0
- package/dist/server-fns/admin-users/set-password.js +13 -0
- package/dist/server-fns/admin-users/set-user-roles.d.ts +25 -0
- package/dist/server-fns/admin-users/set-user-roles.d.ts.map +1 -0
- package/dist/server-fns/admin-users/set-user-roles.js +13 -0
- package/dist/server-fns/admin-users/update.d.ts +37 -0
- package/dist/server-fns/admin-users/update.d.ts.map +1 -0
- package/dist/server-fns/admin-users/update.js +13 -0
- package/dist/server-fns/auth/current-user.d.ts +38 -0
- package/dist/server-fns/auth/current-user.d.ts.map +1 -0
- package/dist/server-fns/auth/current-user.js +52 -0
- package/dist/server-fns/auth/index.d.ts +11 -0
- package/dist/server-fns/auth/index.d.ts.map +1 -0
- package/dist/server-fns/auth/index.js +3 -0
- package/dist/server-fns/auth/sign-in.d.ts +19 -0
- package/dist/server-fns/auth/sign-in.d.ts.map +1 -0
- package/dist/server-fns/auth/sign-in.js +31 -0
- package/dist/server-fns/auth/sign-out.d.ts +11 -0
- package/dist/server-fns/auth/sign-out.d.ts.map +1 -0
- package/dist/server-fns/auth/sign-out.js +17 -0
- package/dist/server-fns/collections/create.d.ts +21 -0
- package/dist/server-fns/collections/create.d.ts.map +1 -0
- package/dist/server-fns/collections/create.js +40 -0
- package/dist/server-fns/collections/delete.d.ts +18 -0
- package/dist/server-fns/collections/delete.d.ts.map +1 -0
- package/dist/server-fns/collections/delete.js +44 -0
- package/dist/server-fns/collections/get.d.ts +26 -0
- package/dist/server-fns/collections/get.d.ts.map +1 -0
- package/dist/server-fns/collections/get.js +133 -0
- package/dist/server-fns/collections/history.d.ts +43 -0
- package/dist/server-fns/collections/history.d.ts.map +1 -0
- package/dist/server-fns/collections/history.js +29 -0
- package/dist/server-fns/collections/index.d.ts +16 -0
- package/dist/server-fns/collections/index.d.ts.map +1 -0
- package/dist/server-fns/collections/index.js +9 -0
- package/dist/server-fns/collections/list.d.ts +54 -0
- package/dist/server-fns/collections/list.d.ts.map +1 -0
- package/dist/server-fns/collections/list.js +65 -0
- package/dist/server-fns/collections/stats.d.ts +17 -0
- package/dist/server-fns/collections/stats.d.ts.map +1 -0
- package/dist/server-fns/collections/stats.js +28 -0
- package/dist/server-fns/collections/status.d.ts +31 -0
- package/dist/server-fns/collections/status.d.ts.map +1 -0
- package/dist/server-fns/collections/status.js +79 -0
- package/dist/server-fns/collections/update.d.ts +26 -0
- package/dist/server-fns/collections/update.d.ts.map +1 -0
- package/dist/server-fns/collections/update.js +41 -0
- package/dist/server-fns/collections/upload.d.ts +57 -0
- package/dist/server-fns/collections/upload.d.ts.map +1 -0
- package/dist/server-fns/collections/upload.js +132 -0
- package/dist/server-fns/collections/utils.d.ts +15 -0
- package/dist/server-fns/collections/utils.d.ts.map +1 -0
- package/dist/server-fns/collections/utils.js +4 -0
- package/dist/server-fns/preview/disable.d.ts +12 -0
- package/dist/server-fns/preview/disable.d.ts.map +1 -0
- package/dist/server-fns/preview/disable.js +12 -0
- package/dist/server-fns/preview/enable.d.ts +12 -0
- package/dist/server-fns/preview/enable.d.ts.map +1 -0
- package/dist/server-fns/preview/enable.js +14 -0
- package/dist/server-fns/preview/index.d.ts +11 -0
- package/dist/server-fns/preview/index.d.ts.map +1 -0
- package/dist/server-fns/preview/index.js +3 -0
- package/dist/server-fns/preview/state.d.ts +11 -0
- package/dist/server-fns/preview/state.d.ts.map +1 -0
- package/dist/server-fns/preview/state.js +8 -0
- package/package.json +164 -0
- package/src/admin-shell/admin-roles/container.module.css +132 -0
- package/src/admin-shell/admin-roles/container.tsx +209 -0
- package/src/admin-shell/admin-roles/delete.module.css +52 -0
- package/src/admin-shell/admin-roles/delete.tsx +117 -0
- package/src/admin-shell/admin-roles/list.module.css +158 -0
- package/src/admin-shell/admin-roles/list.tsx +308 -0
- package/src/admin-shell/admin-users/container.module.css +199 -0
- package/src/admin-shell/admin-users/container.tsx +344 -0
- package/src/admin-shell/admin-users/delete.module.css +52 -0
- package/src/admin-shell/admin-users/delete.tsx +129 -0
- package/src/admin-shell/admin-users/list.module.css +164 -0
- package/src/admin-shell/admin-users/list.tsx +314 -0
- package/src/admin-shell/chrome/admin-app-bar.module.css +72 -0
- package/src/admin-shell/chrome/admin-app-bar.tsx +74 -0
- package/src/admin-shell/chrome/admin-layout.module.css +16 -0
- package/src/admin-shell/chrome/branding.module.css +20 -0
- package/src/admin-shell/chrome/branding.tsx +23 -0
- package/src/admin-shell/chrome/breadcrumbs/@types.ts +5 -0
- package/src/admin-shell/chrome/breadcrumbs/breadcrumbs-client.tsx +30 -0
- package/src/admin-shell/chrome/breadcrumbs/breadcrumbs-provider.tsx +48 -0
- package/src/admin-shell/chrome/breadcrumbs/breadcrumbs.module.css +93 -0
- package/src/admin-shell/chrome/breadcrumbs/breadcrumbs.tsx +96 -0
- package/src/admin-shell/chrome/byline-logo.tsx +151 -0
- package/src/admin-shell/chrome/content.module.css +16 -0
- package/src/admin-shell/chrome/content.tsx +60 -0
- package/src/admin-shell/chrome/dashboard.module.css +245 -0
- package/src/admin-shell/chrome/dashboard.tsx +128 -0
- package/src/admin-shell/chrome/drawer-toggle.module.css +30 -0
- package/src/admin-shell/chrome/drawer-toggle.tsx +62 -0
- package/src/admin-shell/chrome/hamburger.module.css +16 -0
- package/src/admin-shell/chrome/hamburger.tsx +56 -0
- package/src/admin-shell/chrome/loose-router.ts +47 -0
- package/src/admin-shell/chrome/menu-drawer.module.css +196 -0
- package/src/admin-shell/chrome/menu-drawer.tsx +155 -0
- package/src/admin-shell/chrome/menu-provider.tsx +95 -0
- package/src/admin-shell/chrome/preview-toggle.tsx +107 -0
- package/src/admin-shell/chrome/route-error.module.css +114 -0
- package/src/admin-shell/chrome/route-error.tsx +125 -0
- package/src/admin-shell/chrome/router-pager.tsx +179 -0
- package/src/admin-shell/chrome/sign-in-page.module.css +32 -0
- package/src/admin-shell/chrome/sign-in-page.tsx +35 -0
- package/src/admin-shell/chrome/sort-icons.tsx +127 -0
- package/src/admin-shell/chrome/th-sortable.module.css +51 -0
- package/src/admin-shell/chrome/th-sortable.tsx +114 -0
- package/src/admin-shell/chrome/use-media-query.ts +28 -0
- package/src/admin-shell/chrome/utils.ts +20 -0
- package/src/admin-shell/collections/api.module.css +62 -0
- package/src/admin-shell/collections/api.tsx +70 -0
- package/src/admin-shell/collections/create.tsx +108 -0
- package/src/admin-shell/collections/edit.tsx +319 -0
- package/src/admin-shell/collections/history.module.css +156 -0
- package/src/admin-shell/collections/history.tsx +352 -0
- package/src/admin-shell/collections/list.module.css +124 -0
- package/src/admin-shell/collections/list.tsx +313 -0
- package/src/admin-shell/collections/preview-link.tsx +138 -0
- package/src/admin-shell/collections/tanstack-navigation-guard.ts +43 -0
- package/src/admin-shell/collections/view-menu.module.css +60 -0
- package/src/admin-shell/collections/view-menu.tsx +238 -0
- package/src/auth/auth-context.test.node.ts +200 -0
- package/src/auth/auth-context.ts +119 -0
- package/src/auth/auth-cookies.ts +113 -0
- package/src/auth/preview-cookies.ts +73 -0
- package/src/declarations.d.ts +4 -0
- package/src/index.ts +44 -0
- package/src/integrations/abilities.tsx +90 -0
- package/src/integrations/api-utils.ts +66 -0
- package/src/integrations/byline-admin-services.ts +86 -0
- package/src/integrations/byline-client.ts +40 -0
- package/src/integrations/byline-core.ts +32 -0
- package/src/integrations/byline-field-services.ts +35 -0
- package/src/integrations/byline-public-client.ts +53 -0
- package/src/integrations/byline-viewer-client.ts +99 -0
- package/src/integrations/start-errors.ts +86 -0
- package/src/routes/create-admin-account-route.tsx +65 -0
- package/src/routes/create-admin-dashboard-route.tsx +52 -0
- package/src/routes/create-admin-layout-route.tsx +89 -0
- package/src/routes/create-admin-permissions-route.tsx +43 -0
- package/src/routes/create-admin-role-edit-route.tsx +88 -0
- package/src/routes/create-admin-roles-list-route.tsx +39 -0
- package/src/routes/create-admin-user-edit-route.tsx +105 -0
- package/src/routes/create-admin-users-list-route.tsx +84 -0
- package/src/routes/create-collection-api-route.tsx +111 -0
- package/src/routes/create-collection-create-route.tsx +66 -0
- package/src/routes/create-collection-edit-route.tsx +102 -0
- package/src/routes/create-collection-history-route.tsx +130 -0
- package/src/routes/create-collection-list-route.tsx +175 -0
- package/src/routes/create-sign-in-route.tsx +39 -0
- package/src/routes/index.ts +36 -0
- package/src/server-fns/admin-account/change-password.ts +27 -0
- package/src/server-fns/admin-account/get.ts +27 -0
- package/src/server-fns/admin-account/index.ts +28 -0
- package/src/server-fns/admin-account/update.ts +31 -0
- package/src/server-fns/admin-permissions/get-role-abilities.ts +27 -0
- package/src/server-fns/admin-permissions/index.ts +36 -0
- package/src/server-fns/admin-permissions/list-registered.ts +36 -0
- package/src/server-fns/admin-permissions/set-role-abilities.ts +32 -0
- package/src/server-fns/admin-permissions/who-has.ts +24 -0
- package/src/server-fns/admin-roles/create.ts +28 -0
- package/src/server-fns/admin-roles/delete.ts +25 -0
- package/src/server-fns/admin-roles/get.ts +21 -0
- package/src/server-fns/admin-roles/index.ts +25 -0
- package/src/server-fns/admin-roles/list.ts +27 -0
- package/src/server-fns/admin-roles/reorder.ts +21 -0
- package/src/server-fns/admin-roles/update.ts +31 -0
- package/src/server-fns/admin-users/create.ts +32 -0
- package/src/server-fns/admin-users/delete.ts +21 -0
- package/src/server-fns/admin-users/disable.ts +24 -0
- package/src/server-fns/admin-users/enable.ts +24 -0
- package/src/server-fns/admin-users/get-user-roles.ts +21 -0
- package/src/server-fns/admin-users/get.ts +21 -0
- package/src/server-fns/admin-users/index.ts +35 -0
- package/src/server-fns/admin-users/list.ts +40 -0
- package/src/server-fns/admin-users/set-password.ts +27 -0
- package/src/server-fns/admin-users/set-user-roles.ts +26 -0
- package/src/server-fns/admin-users/update.ts +34 -0
- package/src/server-fns/auth/current-user.ts +117 -0
- package/src/server-fns/auth/index.ts +15 -0
- package/src/server-fns/auth/sign-in.ts +71 -0
- package/src/server-fns/auth/sign-out.ts +42 -0
- package/src/server-fns/collections/create.ts +58 -0
- package/src/server-fns/collections/delete.ts +62 -0
- package/src/server-fns/collections/get.ts +233 -0
- package/src/server-fns/collections/history.ts +73 -0
- package/src/server-fns/collections/index.ts +16 -0
- package/src/server-fns/collections/list.ts +121 -0
- package/src/server-fns/collections/stats.ts +52 -0
- package/src/server-fns/collections/status.ts +102 -0
- package/src/server-fns/collections/update.ts +67 -0
- package/src/server-fns/collections/upload.ts +274 -0
- package/src/server-fns/collections/utils.ts +17 -0
- package/src/server-fns/preview/disable.ts +24 -0
- package/src/server-fns/preview/enable.ts +27 -0
- package/src/server-fns/preview/index.ts +11 -0
- 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
|
+
})
|