@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,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
|
+
/**
|
|
10
|
+
* Cookie helpers for the front-end *preview mode* toggle.
|
|
11
|
+
*
|
|
12
|
+
* Preview mode lets a signed-in admin see draft (and other non-published)
|
|
13
|
+
* versions on the public host pages without changing any markup or route
|
|
14
|
+
* structure. The mechanic is intentionally narrow:
|
|
15
|
+
*
|
|
16
|
+
* - A single httpOnly cookie (`byline_preview=1`) carries the user's
|
|
17
|
+
* "show me drafts" intent across requests within the same browser
|
|
18
|
+
* session.
|
|
19
|
+
* - The cookie's mere *presence* is the signal — there is no payload to
|
|
20
|
+
* verify. The actual safety check is the admin session: when the
|
|
21
|
+
* viewer client (or a server fn) sees the cookie, it tries to resolve
|
|
22
|
+
* `getAdminRequestContext()` and only elevates the read mode when a
|
|
23
|
+
* valid admin session resolves. A stale preview cookie on an
|
|
24
|
+
* anonymous browser falls through to public/published reads silently.
|
|
25
|
+
*
|
|
26
|
+
* Cookie attributes:
|
|
27
|
+
* - `httpOnly: true` — inaccessible to JS; toggled only via server fns.
|
|
28
|
+
* - `sameSite: 'lax'` — sent on top-level navigations only.
|
|
29
|
+
* - `secure: true` in production — https-only.
|
|
30
|
+
* - `path: '/'` — visible to every public route.
|
|
31
|
+
* - `maxAge: 1 day` — preview is meant to be a short-lived editorial
|
|
32
|
+
* mode, not a permanent state. Admins can
|
|
33
|
+
* re-enable from the admin UI when needed.
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
import { getCookie, setCookie } from '@tanstack/react-start/server'
|
|
37
|
+
|
|
38
|
+
export const PREVIEW_COOKIE = 'byline_preview'
|
|
39
|
+
const PREVIEW_MAX_AGE_SECONDS = 60 * 60 * 24 // 1 day
|
|
40
|
+
|
|
41
|
+
const IS_PROD = process.env.NODE_ENV === 'production'
|
|
42
|
+
|
|
43
|
+
/** True iff the preview cookie is currently set on the request. */
|
|
44
|
+
export function readPreviewCookie(): boolean {
|
|
45
|
+
return getCookie(PREVIEW_COOKIE) === '1'
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Write the preview cookie. Callers should ensure the request is from a
|
|
50
|
+
* valid admin session before invoking — the cookie itself is just a flag
|
|
51
|
+
* and carries no proof of authorisation. See `enablePreviewModeFn` for
|
|
52
|
+
* the canonical entry point.
|
|
53
|
+
*/
|
|
54
|
+
export function setPreviewCookie(): void {
|
|
55
|
+
setCookie(PREVIEW_COOKIE, '1', {
|
|
56
|
+
httpOnly: true,
|
|
57
|
+
sameSite: 'lax',
|
|
58
|
+
secure: IS_PROD,
|
|
59
|
+
path: '/',
|
|
60
|
+
maxAge: PREVIEW_MAX_AGE_SECONDS,
|
|
61
|
+
})
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** Clear the preview cookie. Safe to call from any context. */
|
|
65
|
+
export function clearPreviewCookie(): void {
|
|
66
|
+
setCookie(PREVIEW_COOKIE, '', {
|
|
67
|
+
httpOnly: true,
|
|
68
|
+
sameSite: 'lax',
|
|
69
|
+
secure: IS_PROD,
|
|
70
|
+
path: '/',
|
|
71
|
+
maxAge: 0,
|
|
72
|
+
})
|
|
73
|
+
}
|
package/src/index.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
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
|
+
/**
|
|
10
|
+
* `@byline/host-tanstack-start` — TanStack Start host adapter for Byline.
|
|
11
|
+
*
|
|
12
|
+
* Houses everything that's framework-coupled to TanStack Start /
|
|
13
|
+
* Router so the framework-neutral packages (`@byline/core`, `@byline/admin`,
|
|
14
|
+
* `@byline/client`, `@byline/auth`, `@byline/ui`) stay framework-neutral.
|
|
15
|
+
*
|
|
16
|
+
* Surface is exposed via subpath exports rather than a single root barrel
|
|
17
|
+
* so hosts only pull in what they consume:
|
|
18
|
+
*
|
|
19
|
+
* - `@byline/host-tanstack-start/server-fns/<module>` — TanStack Start
|
|
20
|
+
* server functions for each admin module (admin-account, admin-roles,
|
|
21
|
+
* admin-users, admin-permissions, auth, collections).
|
|
22
|
+
* - `@byline/host-tanstack-start/auth/auth-context` — request-scoped
|
|
23
|
+
* `RequestContext` resolution that reads session cookies, refreshes
|
|
24
|
+
* transparently, and surfaces `ERR_UNAUTHENTICATED` to callers.
|
|
25
|
+
* - `@byline/host-tanstack-start/integrations/*` — host-side adapters
|
|
26
|
+
* binding TanStack Start primitives to the framework-neutral
|
|
27
|
+
* contracts in `@byline/ui` and `@byline/client`
|
|
28
|
+
* (`bylineFieldServices`, `bylineAdminServices`, the admin
|
|
29
|
+
* `BylineClient` singleton).
|
|
30
|
+
* - `@byline/host-tanstack-start/admin-shell/{chrome,collections,...}` —
|
|
31
|
+
* router-coupled admin UI: shared shell chrome (menu drawer, app bar,
|
|
32
|
+
* route-error, breadcrumbs, etc.) plus per-area page containers.
|
|
33
|
+
* - `@byline/host-tanstack-start/routes/*` — route factories. Each
|
|
34
|
+
* factory returns the result of `createFileRoute(path)({...})` ready
|
|
35
|
+
* for assignment to the host's `export const Route = ...`. The host
|
|
36
|
+
* supplies the filesystem-backed path string; the package owns the
|
|
37
|
+
* loader, `beforeLoad`, component, and error boundary.
|
|
38
|
+
*
|
|
39
|
+
* The root entry exports nothing intentionally — every consumption path
|
|
40
|
+
* is a subpath import. This keeps the public surface small and the
|
|
41
|
+
* boundaries explicit.
|
|
42
|
+
*/
|
|
43
|
+
|
|
44
|
+
export {}
|
|
@@ -0,0 +1,90 @@
|
|
|
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
|
+
/**
|
|
10
|
+
* Client-side ability helpers for the admin shell.
|
|
11
|
+
*
|
|
12
|
+
* These hooks read the current admin user's ability set off the admin
|
|
13
|
+
* route's TanStack Router context — which `route.tsx` populates in
|
|
14
|
+
* `beforeLoad` via `getCurrentAdminUser()`. No separate React Context
|
|
15
|
+
* provider is required because the route context already plays that
|
|
16
|
+
* role.
|
|
17
|
+
*
|
|
18
|
+
* **Cosmetic UI only.** A hidden menu item, disabled button, or
|
|
19
|
+
* un-rendered children block is an affordance, never a security
|
|
20
|
+
* boundary. Every server-side path is independently gated by
|
|
21
|
+
* `assertActorCanPerform` (document collections) or `assertAdminActor`
|
|
22
|
+
* (admin user / role / permission management). Callers can construct
|
|
23
|
+
* the matching ability key by hand or — preferred — import the
|
|
24
|
+
* `ADMIN_*_ABILITIES` constants from the relevant
|
|
25
|
+
* `@byline/admin/admin-*` subpath so a rename surfaces as a type error
|
|
26
|
+
* rather than a silent miss.
|
|
27
|
+
*
|
|
28
|
+
* Super-admin bypass mirrors the server: every `useAbility` call
|
|
29
|
+
* returns `true` when `is_super_admin` is set.
|
|
30
|
+
*
|
|
31
|
+
* Snapshot semantics: the ability set is the snapshot from the last
|
|
32
|
+
* `beforeLoad` of the admin route, refreshed on navigation. A grant
|
|
33
|
+
* revoked mid-session won't disappear from the UI until the next
|
|
34
|
+
* navigation — fine for cosmetic cues since the server still rejects
|
|
35
|
+
* the underlying action.
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
import type React from 'react'
|
|
39
|
+
import { useRouteContext } from '@tanstack/react-router'
|
|
40
|
+
|
|
41
|
+
/** Route id of the admin shell — the layout route that owns `user` on context. */
|
|
42
|
+
const ADMIN_ROUTE_ID = '/(byline)/admin' as const
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* `true` when the current admin holds the given ability (or is a
|
|
46
|
+
* super-admin). Cosmetic — see file-level docstring.
|
|
47
|
+
*/
|
|
48
|
+
export function useAbility(ability: string): boolean {
|
|
49
|
+
const { user } = useRouteContext({ from: ADMIN_ROUTE_ID })
|
|
50
|
+
if (user.is_super_admin) return true
|
|
51
|
+
return user.abilities.includes(ability)
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Bundle of ability checks for situations where a component needs more
|
|
56
|
+
* than one verb (e.g. the menu drawer asks about three keys at once).
|
|
57
|
+
* Avoids calling `useAbility` repeatedly when a single context read is
|
|
58
|
+
* sufficient.
|
|
59
|
+
*/
|
|
60
|
+
export function useAbilities(): {
|
|
61
|
+
has: (ability: string) => boolean
|
|
62
|
+
hasAny: (abilities: readonly string[]) => boolean
|
|
63
|
+
isSuperAdmin: boolean
|
|
64
|
+
} {
|
|
65
|
+
const { user } = useRouteContext({ from: ADMIN_ROUTE_ID })
|
|
66
|
+
const has = (ability: string): boolean => user.is_super_admin || user.abilities.includes(ability)
|
|
67
|
+
const hasAny = (abilities: readonly string[]): boolean =>
|
|
68
|
+
user.is_super_admin || abilities.some((key) => user.abilities.includes(key))
|
|
69
|
+
return { has, hasAny, isSuperAdmin: user.is_super_admin }
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* JSX wrapper. Renders `children` only when the current admin holds
|
|
74
|
+
* the given ability. Cosmetic — see file-level docstring.
|
|
75
|
+
*
|
|
76
|
+
* ```tsx
|
|
77
|
+
* <RequireAbility ability={ADMIN_USERS_ABILITIES.create}>
|
|
78
|
+
* <Button>New admin user</Button>
|
|
79
|
+
* </RequireAbility>
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
export function RequireAbility({
|
|
83
|
+
ability,
|
|
84
|
+
children,
|
|
85
|
+
}: {
|
|
86
|
+
ability: string
|
|
87
|
+
children: React.ReactNode
|
|
88
|
+
}): React.ReactNode {
|
|
89
|
+
return useAbility(ability) ? children : null
|
|
90
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
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
|
+
/**
|
|
10
|
+
* NOTE: Before you dunk on this, this is a prototype implementation
|
|
11
|
+
* of our API and used only for development.
|
|
12
|
+
* We'll extract a properly configured API server soon.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
// NOTE: The host's server config (e.g. byline/server.config.ts) is loaded by
|
|
16
|
+
// src/server.ts (TanStack Start server entry point) before any
|
|
17
|
+
// requests are handled. No need to import it here.
|
|
18
|
+
|
|
19
|
+
import type { CollectionDefinition, CollectionRecord } from '@byline/core'
|
|
20
|
+
import { getCollectionDefinition } from '@byline/core'
|
|
21
|
+
|
|
22
|
+
import { bylineCore } from './byline-core.js'
|
|
23
|
+
|
|
24
|
+
export interface EnsuredCollection {
|
|
25
|
+
definition: CollectionDefinition
|
|
26
|
+
collection: {
|
|
27
|
+
id: string
|
|
28
|
+
path: string
|
|
29
|
+
version: number
|
|
30
|
+
schemaHash: string
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Resolve a collection for an admin API request.
|
|
36
|
+
*
|
|
37
|
+
* Collections are reconciled with the database once at startup by
|
|
38
|
+
* `initBylineCore()` (see `packages/core/src/services/collection-bootstrap.ts`).
|
|
39
|
+
* This helper is a per-request cache lookup against the resulting in-memory
|
|
40
|
+
* registry — no DB I/O, no hash work.
|
|
41
|
+
*
|
|
42
|
+
* Returns `null` when the path is not registered in the client/server config.
|
|
43
|
+
*/
|
|
44
|
+
export async function ensureCollection(path: string): Promise<EnsuredCollection | null> {
|
|
45
|
+
const definition = getCollectionDefinition(path)
|
|
46
|
+
if (definition == null) {
|
|
47
|
+
return null
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
let record: CollectionRecord
|
|
51
|
+
try {
|
|
52
|
+
record = bylineCore().getCollectionRecord(path)
|
|
53
|
+
} catch {
|
|
54
|
+
return null
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
return {
|
|
58
|
+
definition,
|
|
59
|
+
collection: {
|
|
60
|
+
id: record.collectionId,
|
|
61
|
+
path,
|
|
62
|
+
version: record.version,
|
|
63
|
+
schemaHash: record.schemaHash,
|
|
64
|
+
},
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
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
|
+
/**
|
|
10
|
+
* Host-side adapter that binds the webapp's TanStack Start server functions
|
|
11
|
+
* to the framework-neutral `BylineAdminServices` contract consumed by
|
|
12
|
+
* `@byline/ui` admin components.
|
|
13
|
+
*
|
|
14
|
+
* Wired into the admin route once via `<BylineAdminServicesProvider>`. A
|
|
15
|
+
* future Next.js host would ship its own adapter file (server-actions in
|
|
16
|
+
* place of server fns) and Provider; the `@byline/ui` surface is unchanged.
|
|
17
|
+
*
|
|
18
|
+
* Contract scope: only the framework-neutral admin UI components consume
|
|
19
|
+
* this — sign-in, account self-service, admin-user/role write forms, the
|
|
20
|
+
* permissions inspector, role-permissions editor, and the diff modal.
|
|
21
|
+
* Page-container reads (list/edit) stay on direct server-fn imports
|
|
22
|
+
* inside the host's deferred router-coupled containers.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
import type { BylineAdminServices } from '@byline/ui'
|
|
26
|
+
|
|
27
|
+
import { changeAccountPassword, updateAccount } from '../server-fns/admin-account/index.js'
|
|
28
|
+
import { setRoleAbilities, whoHasAbility } from '../server-fns/admin-permissions/index.js'
|
|
29
|
+
import { createAdminRole, updateAdminRole } from '../server-fns/admin-roles/index.js'
|
|
30
|
+
import {
|
|
31
|
+
createAdminUser,
|
|
32
|
+
setAdminUserPassword,
|
|
33
|
+
setUserRoles,
|
|
34
|
+
updateAdminUser,
|
|
35
|
+
} from '../server-fns/admin-users/index.js'
|
|
36
|
+
import { adminSignIn } from '../server-fns/auth/index.js'
|
|
37
|
+
import { getCollectionDocumentVersion as serverGetCollectionDocumentVersion } from '../server-fns/collections/get.js'
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Diff helper adapter — the contract uses positional args; the underlying
|
|
41
|
+
* server-fn helper expects the same shape, so this is a one-line passthrough
|
|
42
|
+
* that maps `null` to a default-loader-friendly `Record<string, unknown>`
|
|
43
|
+
* fallback (the diff modal handles a `null` doc gracefully via its own
|
|
44
|
+
* loading/error states, but the contract types it as non-null because the
|
|
45
|
+
* happy-path always returns an object).
|
|
46
|
+
*/
|
|
47
|
+
const getCollectionDocumentVersion: BylineAdminServices['getCollectionDocumentVersion'] = async (
|
|
48
|
+
collection,
|
|
49
|
+
documentId,
|
|
50
|
+
versionId,
|
|
51
|
+
locale
|
|
52
|
+
) => {
|
|
53
|
+
const result = await serverGetCollectionDocumentVersion(collection, documentId, versionId, locale)
|
|
54
|
+
if (result == null) {
|
|
55
|
+
throw new Error(
|
|
56
|
+
`Document version not found: collection=${collection} document=${documentId} version=${versionId}`
|
|
57
|
+
)
|
|
58
|
+
}
|
|
59
|
+
return result as Record<string, unknown>
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export const bylineAdminServices: BylineAdminServices = {
|
|
63
|
+
// Auth
|
|
64
|
+
adminSignIn,
|
|
65
|
+
|
|
66
|
+
// Account self-service
|
|
67
|
+
updateAccount,
|
|
68
|
+
changeAccountPassword,
|
|
69
|
+
|
|
70
|
+
// Admin user writes
|
|
71
|
+
createAdminUser,
|
|
72
|
+
updateAdminUser,
|
|
73
|
+
setAdminUserPassword,
|
|
74
|
+
setUserRoles,
|
|
75
|
+
|
|
76
|
+
// Admin role writes
|
|
77
|
+
createAdminRole,
|
|
78
|
+
updateAdminRole,
|
|
79
|
+
|
|
80
|
+
// Permissions
|
|
81
|
+
setRoleAbilities,
|
|
82
|
+
whoHasAbility,
|
|
83
|
+
|
|
84
|
+
// Diff helper
|
|
85
|
+
getCollectionDocumentVersion,
|
|
86
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
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
|
+
/**
|
|
10
|
+
* The admin webapp's `BylineClient` singleton.
|
|
11
|
+
*
|
|
12
|
+
* Configured with a `requestContext` factory that resolves the
|
|
13
|
+
* authenticated admin actor per call via `getAdminRequestContext`. Every
|
|
14
|
+
* admin server fn that reads documents goes through this client, so the
|
|
15
|
+
* full read pipeline (`beforeRead` → `findDocuments` → `populate` →
|
|
16
|
+
* `afterRead`) is uniform between admin and any future external
|
|
17
|
+
* client. The collection runtime, db adapter, and storage provider are
|
|
18
|
+
* sourced from the shared `getServerConfig()` so we don't duplicate
|
|
19
|
+
* adapter wiring.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import { type BylineClient, createBylineClient } from '@byline/client'
|
|
23
|
+
import { getServerConfig } from '@byline/core'
|
|
24
|
+
|
|
25
|
+
import { getAdminRequestContext } from '../auth/auth-context.js'
|
|
26
|
+
|
|
27
|
+
let cachedClient: BylineClient | undefined
|
|
28
|
+
|
|
29
|
+
export function getAdminBylineClient(): BylineClient {
|
|
30
|
+
if (cachedClient) return cachedClient
|
|
31
|
+
cachedClient = createBylineClient({
|
|
32
|
+
config: getServerConfig(),
|
|
33
|
+
// Resolved per-call so each server fn picks up the actor from the
|
|
34
|
+
// current request's session cookies. `getAdminRequestContext` runs the
|
|
35
|
+
// refresh dance on its own and throws `ERR_UNAUTHENTICATED` when no
|
|
36
|
+
// session is present — the client surfaces the throw verbatim.
|
|
37
|
+
requestContext: getAdminRequestContext,
|
|
38
|
+
})
|
|
39
|
+
return cachedClient
|
|
40
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
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
|
+
/**
|
|
10
|
+
* Typed accessor for the composed `BylineCore` post-init.
|
|
11
|
+
*
|
|
12
|
+
* Wraps `@byline/core`'s framework-neutral `getBylineCore<TAdminStore>()`
|
|
13
|
+
* and pre-binds `TAdminStore` to `AdminStore` from `@byline/admin`. This
|
|
14
|
+
* package is the admin host adapter — every server fn here ultimately
|
|
15
|
+
* delegates to an `@byline/admin` command that wants the typed store, so
|
|
16
|
+
* baking the generic in once removes the need for each call site to
|
|
17
|
+
* repeat `getBylineCore<AdminStore>()` and to import `AdminStore`
|
|
18
|
+
* separately.
|
|
19
|
+
*
|
|
20
|
+
* Hosts that wire a different admin-store flavour through
|
|
21
|
+
* `initBylineCore<TOtherStore>()` should NOT use this helper — they
|
|
22
|
+
* import `getBylineCore<TOtherStore>()` from `@byline/core` directly.
|
|
23
|
+
* That escape hatch keeps the framework-neutral package agnostic to
|
|
24
|
+
* which admin store is configured.
|
|
25
|
+
*/
|
|
26
|
+
|
|
27
|
+
import type { AdminStore } from '@byline/admin'
|
|
28
|
+
import { type BylineCore, getBylineCore } from '@byline/core'
|
|
29
|
+
|
|
30
|
+
export function bylineCore(): BylineCore<AdminStore> {
|
|
31
|
+
return getBylineCore<AdminStore>()
|
|
32
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
+
/**
|
|
10
|
+
* Host-side adapters that bind the webapp's TanStack Start server functions
|
|
11
|
+
* to the framework-neutral `BylineFieldServices` contract consumed by
|
|
12
|
+
* `@byline/ui` field/form components.
|
|
13
|
+
*
|
|
14
|
+
* Wired into the admin route once via `<BylineFieldServicesProvider>`. A
|
|
15
|
+
* future Next.js host would ship its own adapter file and Provider; the
|
|
16
|
+
* @byline/ui surface is unchanged.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import type { BylineFieldServices, GetCollectionDocumentsFn, UploadFieldFn } from '@byline/ui'
|
|
20
|
+
|
|
21
|
+
import { getCollectionDocuments as serverGetCollectionDocuments } from '../server-fns/collections/list.js'
|
|
22
|
+
import { uploadField as serverUploadField } from '../server-fns/collections/upload.js'
|
|
23
|
+
|
|
24
|
+
const getCollectionDocuments: GetCollectionDocumentsFn = ({ collection, params }) =>
|
|
25
|
+
serverGetCollectionDocuments({
|
|
26
|
+
data: { collection, params },
|
|
27
|
+
}) as ReturnType<GetCollectionDocumentsFn>
|
|
28
|
+
|
|
29
|
+
const uploadField: UploadFieldFn = (collection, formData, createDocument) =>
|
|
30
|
+
serverUploadField(collection, formData, createDocument)
|
|
31
|
+
|
|
32
|
+
export const bylineFieldServices: BylineFieldServices = {
|
|
33
|
+
getCollectionDocuments,
|
|
34
|
+
uploadField,
|
|
35
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
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
|
+
/**
|
|
10
|
+
* The host's *public-read* `BylineClient` singleton — the strict
|
|
11
|
+
* "preview-can-never-apply" sibling of `getViewerBylineClient`.
|
|
12
|
+
*
|
|
13
|
+
* Configured with `actor: null` and `readMode: 'published'`, full stop.
|
|
14
|
+
* The `requestContext` factory does not consult the `byline_preview`
|
|
15
|
+
* cookie or attempt any admin-session resolution, so an admin browsing
|
|
16
|
+
* with preview mode on cannot accidentally elevate a read that flows
|
|
17
|
+
* through this client. `assertActorCanPerform` permits the null actor
|
|
18
|
+
* exactly on `read` with `readMode === 'published'`, which is what the
|
|
19
|
+
* factory always returns.
|
|
20
|
+
*
|
|
21
|
+
* **Use this client for:**
|
|
22
|
+
* - RSS feeds, Atom feeds, sitemaps
|
|
23
|
+
* - JSON or other endpoints exposed to third-party consumers
|
|
24
|
+
* - any response that an upstream CDN / cache might serve to multiple
|
|
25
|
+
* visitors without keying off the `byline_preview` cookie
|
|
26
|
+
*
|
|
27
|
+
* **Use `getViewerBylineClient` instead for:**
|
|
28
|
+
* - user-facing public pages where an admin's preview-mode session
|
|
29
|
+
* should be honoured
|
|
30
|
+
*
|
|
31
|
+
* Both clients share the same module-scoped singleton pattern so the
|
|
32
|
+
* SDK's per-instance `collectionRecordCache` is amortised across the
|
|
33
|
+
* process lifetime.
|
|
34
|
+
*
|
|
35
|
+
* Companion: `getAdminBylineClient` in `./byline-client.ts` for the
|
|
36
|
+
* admin webapp's authenticated reads (resolves a fresh `RequestContext`
|
|
37
|
+
* from session cookies on every call).
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
import { createRequestContext } from '@byline/auth'
|
|
41
|
+
import { type BylineClient, createBylineClient } from '@byline/client'
|
|
42
|
+
import { getServerConfig } from '@byline/core'
|
|
43
|
+
|
|
44
|
+
let cachedClient: BylineClient | undefined
|
|
45
|
+
|
|
46
|
+
export function getPublicBylineClient(): BylineClient {
|
|
47
|
+
if (cachedClient) return cachedClient
|
|
48
|
+
cachedClient = createBylineClient({
|
|
49
|
+
config: getServerConfig(),
|
|
50
|
+
requestContext: () => createRequestContext({ readMode: 'published' }),
|
|
51
|
+
})
|
|
52
|
+
return cachedClient
|
|
53
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
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
|
+
/**
|
|
10
|
+
* The host's *viewer* `BylineClient` singleton — the preview-aware
|
|
11
|
+
* sibling of `getPublicBylineClient` (`./byline-public-client.ts`).
|
|
12
|
+
* Behaves identically to the public client until both the
|
|
13
|
+
* `byline_preview` cookie is set **and** a valid admin session resolves;
|
|
14
|
+
* at that point the per-call `requestContext` factory returns the
|
|
15
|
+
* authenticated `AdminAuth` instead of the anonymous null actor.
|
|
16
|
+
*
|
|
17
|
+
* Why this matters: `assertActorCanPerform` (packages/core/src/auth) only
|
|
18
|
+
* permits anonymous reads when `readMode === 'published'`. So if a server
|
|
19
|
+
* fn passes `status: 'any'` to surface drafts, an anonymous request
|
|
20
|
+
* trips the gate and throws — but a preview-mode admin sails through. The
|
|
21
|
+
* source-view selection itself remains a per-call decision: the SDK's
|
|
22
|
+
* `resolveReadMode` defaults to `'published'` regardless of context, so
|
|
23
|
+
* every server fn still has to opt in by passing `status: 'any'`.
|
|
24
|
+
*
|
|
25
|
+
* The contract for callers:
|
|
26
|
+
*
|
|
27
|
+
* 1. Use `getViewerBylineClient()` on any user-facing public read
|
|
28
|
+
* where an admin's preview-mode session should be honoured. Use
|
|
29
|
+
* `getPublicBylineClient()` instead for endpoints where preview
|
|
30
|
+
* should never apply (RSS feeds, sitemaps, third-party endpoints,
|
|
31
|
+
* anything an upstream cache might serve without keying off the
|
|
32
|
+
* preview cookie).
|
|
33
|
+
* 2. Call `isPreviewActive()` once per server fn to decide whether to
|
|
34
|
+
* pass `status: 'any'` on the read.
|
|
35
|
+
*
|
|
36
|
+
* Stale cookies fail closed: if the preview cookie is present but no
|
|
37
|
+
* valid admin session resolves, the factory returns the same anonymous
|
|
38
|
+
* + `'published'` context the public client would have used, so the
|
|
39
|
+
* worst case is "preview cookie does nothing".
|
|
40
|
+
*
|
|
41
|
+
* The collection-record cache is per-instance, so a singleton here keeps
|
|
42
|
+
* the same amortisation benefit `getPublicBylineClient` has — the two
|
|
43
|
+
* helpers are parallel singletons (one cached `BylineClient` each).
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
import { createRequestContext } from '@byline/auth'
|
|
47
|
+
import { type BylineClient, createBylineClient } from '@byline/client'
|
|
48
|
+
import { getServerConfig } from '@byline/core'
|
|
49
|
+
|
|
50
|
+
import { getAdminRequestContext } from '../auth/auth-context.js'
|
|
51
|
+
import { readPreviewCookie } from '../auth/preview-cookies.js'
|
|
52
|
+
|
|
53
|
+
let cachedClient: BylineClient | undefined
|
|
54
|
+
|
|
55
|
+
export function getViewerBylineClient(): BylineClient {
|
|
56
|
+
if (cachedClient) return cachedClient
|
|
57
|
+
cachedClient = createBylineClient({
|
|
58
|
+
config: getServerConfig(),
|
|
59
|
+
requestContext: async () => {
|
|
60
|
+
// No preview cookie → behave exactly like the public client.
|
|
61
|
+
// Cheap path; no JWT verification, no DB lookup.
|
|
62
|
+
if (!readPreviewCookie()) {
|
|
63
|
+
return createRequestContext({ readMode: 'published' })
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Preview cookie present → try the admin context. A failure means
|
|
67
|
+
// the cookie is stale (admin signed out, session expired, refresh
|
|
68
|
+
// rejected). We swallow the error and fall back to the public
|
|
69
|
+
// context so the page renders instead of erroring.
|
|
70
|
+
try {
|
|
71
|
+
const ctx = await getAdminRequestContext()
|
|
72
|
+
return { ...ctx, readMode: 'any' }
|
|
73
|
+
} catch {
|
|
74
|
+
return createRequestContext({ readMode: 'published' })
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
})
|
|
78
|
+
return cachedClient
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Resolve whether the current request should surface non-published
|
|
83
|
+
* versions. True iff the preview cookie is set **and** a valid admin
|
|
84
|
+
* session resolves. Server fns call this once and pass the result to
|
|
85
|
+
* `status: preview ? 'any' : 'published'` on the SDK read.
|
|
86
|
+
*
|
|
87
|
+
* Defensive by design: the cookie alone is not enough. A signed-out
|
|
88
|
+
* browser carrying an old preview cookie still gets `false` here, which
|
|
89
|
+
* keeps stray query strings or shared links from leaking drafts.
|
|
90
|
+
*/
|
|
91
|
+
export async function isPreviewActive(): Promise<boolean> {
|
|
92
|
+
if (!readPreviewCookie()) return false
|
|
93
|
+
try {
|
|
94
|
+
await getAdminRequestContext()
|
|
95
|
+
return true
|
|
96
|
+
} catch {
|
|
97
|
+
return false
|
|
98
|
+
}
|
|
99
|
+
}
|