@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,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
|
+
* Serialization adapter for coded errors thrown from server fns.
|
|
11
|
+
*
|
|
12
|
+
* TanStack Start's default `ShallowErrorPlugin` matches any `Error` and
|
|
13
|
+
* serialises only `message` — `code`, `cause`, and custom fields are
|
|
14
|
+
* dropped on the wire. That makes client-side branching on `err.code`
|
|
15
|
+
* dead code: every failure reaches the caller as a plain `Error(message)`.
|
|
16
|
+
*
|
|
17
|
+
* This adapter is registered via `createStart(...)` in `src/start.ts`.
|
|
18
|
+
* TanStack prepends `serializationAdapters` before the default plugins,
|
|
19
|
+
* so our `test` matches first and our errors skip the shallow fallback.
|
|
20
|
+
*
|
|
21
|
+
* The adapter is intentionally duck-typed (`name + code`) rather than
|
|
22
|
+
* using `instanceof AdminUsersError` / `instanceof AuthError`. Both error
|
|
23
|
+
* classes live in packages whose barrel exports pull argon2 / other
|
|
24
|
+
* server-only code into whatever bundle imports them — a direct import
|
|
25
|
+
* here would drag that into the browser bundle. The string check is
|
|
26
|
+
* equally reliable in practice and keeps this module client-safe.
|
|
27
|
+
*
|
|
28
|
+
* On the client side we rebuild the error as `BylineCodedError` — a
|
|
29
|
+
* lightweight local class that preserves `name`, `code`, and `message`.
|
|
30
|
+
* The admin forms branch on `err.code === '...'` (string), not on the
|
|
31
|
+
* original class, so the UI behaves identically to a real throw.
|
|
32
|
+
*/
|
|
33
|
+
|
|
34
|
+
import { createSerializationAdapter } from '@tanstack/react-router'
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Names of server-side error classes we want to preserve across the
|
|
38
|
+
* server-fn boundary. Add a new entry when introducing another typed
|
|
39
|
+
* error class that carries a string `code`.
|
|
40
|
+
*/
|
|
41
|
+
const CODED_ERROR_NAMES = new Set([
|
|
42
|
+
'AdminAccountError',
|
|
43
|
+
'AdminPermissionsError',
|
|
44
|
+
'AdminRolesError',
|
|
45
|
+
'AdminUsersError',
|
|
46
|
+
'AuthError',
|
|
47
|
+
])
|
|
48
|
+
|
|
49
|
+
export interface BylineCodedErrorPayload {
|
|
50
|
+
name: string
|
|
51
|
+
code: string
|
|
52
|
+
message: string
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Minimal `Error` subclass reconstructed on the deserialize side. Does
|
|
57
|
+
* not reference the original server-side classes — intentional, to keep
|
|
58
|
+
* this module free of server-only dependencies.
|
|
59
|
+
*/
|
|
60
|
+
export class BylineCodedError extends Error {
|
|
61
|
+
public readonly code: string
|
|
62
|
+
|
|
63
|
+
constructor(payload: BylineCodedErrorPayload) {
|
|
64
|
+
super(payload.message)
|
|
65
|
+
this.name = payload.name
|
|
66
|
+
this.code = payload.code
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
function isCodedError(value: unknown): value is Error & { code: string } {
|
|
71
|
+
if (!(value instanceof Error)) return false
|
|
72
|
+
if (!CODED_ERROR_NAMES.has(value.name)) return false
|
|
73
|
+
const code = (value as { code?: unknown }).code
|
|
74
|
+
return typeof code === 'string'
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export const bylineCodedErrorAdapter = createSerializationAdapter({
|
|
78
|
+
key: 'BylineCodedError',
|
|
79
|
+
test: isCodedError,
|
|
80
|
+
toSerializable: (err): BylineCodedErrorPayload => ({
|
|
81
|
+
name: err.name,
|
|
82
|
+
code: err.code,
|
|
83
|
+
message: err.message,
|
|
84
|
+
}),
|
|
85
|
+
fromSerializable: (payload: BylineCodedErrorPayload) => new BylineCodedError(payload),
|
|
86
|
+
})
|
|
@@ -0,0 +1,65 @@
|
|
|
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 { createFileRoute } from '@tanstack/react-router'
|
|
10
|
+
|
|
11
|
+
import { AccountSelfContainer } from '@byline/ui'
|
|
12
|
+
import { Container, Section } from '@infonomic/uikit/react'
|
|
13
|
+
|
|
14
|
+
import { BreadcrumbsClient } from '../admin-shell/chrome/breadcrumbs/breadcrumbs-client.js'
|
|
15
|
+
import { type AccountResponse, getAccount } from '../server-fns/admin-account/index.js'
|
|
16
|
+
|
|
17
|
+
function displayNameFor(account: {
|
|
18
|
+
given_name: string | null
|
|
19
|
+
family_name: string | null
|
|
20
|
+
email: string
|
|
21
|
+
}): string {
|
|
22
|
+
const parts = [account.given_name, account.family_name].filter(
|
|
23
|
+
(part): part is string => typeof part === 'string' && part.length > 0
|
|
24
|
+
)
|
|
25
|
+
return parts.length > 0 ? parts.join(' ') : account.email
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function createAdminAccountRoute(path: string) {
|
|
29
|
+
// biome-ignore lint/suspicious/noExplicitAny: dynamic path bypasses route-tree typing
|
|
30
|
+
const Route: any = createFileRoute(path as never)({
|
|
31
|
+
loader: async () => {
|
|
32
|
+
// The slim `user` on the admin route's context (CurrentAdminUser)
|
|
33
|
+
// doesn't carry `vid` or the createdAt/updatedAt/lastLogin
|
|
34
|
+
// timestamps, so the self-service drawer needs the full row.
|
|
35
|
+
const account = await getAccount({ data: {} })
|
|
36
|
+
return { account }
|
|
37
|
+
},
|
|
38
|
+
component: function AdminAccountComponent() {
|
|
39
|
+
const { account } = Route.useLoaderData() as { account: AccountResponse }
|
|
40
|
+
return (
|
|
41
|
+
<>
|
|
42
|
+
<BreadcrumbsClient
|
|
43
|
+
breadcrumbs={[
|
|
44
|
+
{ label: 'Dashboard', href: '/admin' },
|
|
45
|
+
{ label: 'Account', href: '/admin/account' },
|
|
46
|
+
]}
|
|
47
|
+
/>
|
|
48
|
+
<Section className="pb-2">
|
|
49
|
+
<Container>
|
|
50
|
+
<h1 className="mb-2">{displayNameFor(account)}</h1>
|
|
51
|
+
<p className="muted">Manage your own profile and password.</p>
|
|
52
|
+
</Container>
|
|
53
|
+
</Section>
|
|
54
|
+
<Section>
|
|
55
|
+
<Container>
|
|
56
|
+
<AccountSelfContainer account={account} />
|
|
57
|
+
</Container>
|
|
58
|
+
</Section>
|
|
59
|
+
</>
|
|
60
|
+
)
|
|
61
|
+
},
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
return Route
|
|
65
|
+
}
|
|
@@ -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 { createFileRoute } from '@tanstack/react-router'
|
|
10
|
+
|
|
11
|
+
import { getClientConfig } from '@byline/core'
|
|
12
|
+
|
|
13
|
+
import { BreadcrumbsClient } from '../admin-shell/chrome/breadcrumbs/breadcrumbs-client.js'
|
|
14
|
+
import { AdminDashboard } from '../admin-shell/chrome/dashboard.js'
|
|
15
|
+
import { type CollectionStatusCount, getCollectionStats } from '../server-fns/collections/index.js'
|
|
16
|
+
|
|
17
|
+
export function createAdminDashboardRoute(path: string) {
|
|
18
|
+
// biome-ignore lint/suspicious/noExplicitAny: dynamic path bypasses route-tree typing
|
|
19
|
+
const Route: any = createFileRoute(path as never)({
|
|
20
|
+
loader: async () => {
|
|
21
|
+
const { collections } = getClientConfig()
|
|
22
|
+
const statsMap: Record<string, CollectionStatusCount[]> = {}
|
|
23
|
+
|
|
24
|
+
await Promise.all(
|
|
25
|
+
collections
|
|
26
|
+
.filter((c) => c.showStats === true)
|
|
27
|
+
.map(async (c) => {
|
|
28
|
+
try {
|
|
29
|
+
statsMap[c.path] = await getCollectionStats(c.path)
|
|
30
|
+
} catch {
|
|
31
|
+
statsMap[c.path] = []
|
|
32
|
+
}
|
|
33
|
+
})
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
return { statsMap }
|
|
37
|
+
},
|
|
38
|
+
component: function AdminDashboardComponent() {
|
|
39
|
+
const { statsMap } = Route.useLoaderData() as {
|
|
40
|
+
statsMap: Record<string, CollectionStatusCount[]>
|
|
41
|
+
}
|
|
42
|
+
return (
|
|
43
|
+
<>
|
|
44
|
+
<BreadcrumbsClient breadcrumbs={[{ label: 'Dashboard', href: '/admin' }]} />
|
|
45
|
+
<AdminDashboard statsMap={statsMap} />
|
|
46
|
+
</>
|
|
47
|
+
)
|
|
48
|
+
},
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
return Route
|
|
52
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
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
|
+
* Admin shell layout — authenticated-only.
|
|
11
|
+
*
|
|
12
|
+
* `beforeLoad` resolves the current admin user (which internally verifies
|
|
13
|
+
* the session cookies, refreshes transparently when needed, and throws
|
|
14
|
+
* `ERR_UNAUTHENTICATED` when there is no session). On unauthenticated
|
|
15
|
+
* requests we redirect to `/sign-in` with a `callbackUrl` so the user
|
|
16
|
+
* lands back on the page they originally requested.
|
|
17
|
+
*
|
|
18
|
+
* The resolved user is returned as route context so every nested admin
|
|
19
|
+
* route (and the `AdminAppBar`) can read it without an extra fetch.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import { createFileRoute, Outlet, redirect } from '@tanstack/react-router'
|
|
23
|
+
|
|
24
|
+
import { BylineAdminServicesProvider, BylineFieldServicesProvider } from '@byline/ui'
|
|
25
|
+
import cx from 'classnames'
|
|
26
|
+
|
|
27
|
+
import { AdminAppBar } from '../admin-shell/chrome/admin-app-bar.js'
|
|
28
|
+
import layoutStyles from '../admin-shell/chrome/admin-layout.module.css'
|
|
29
|
+
import { Content } from '../admin-shell/chrome/content.js'
|
|
30
|
+
import { DrawerToggle } from '../admin-shell/chrome/drawer-toggle.js'
|
|
31
|
+
import { AdminMenuDrawer } from '../admin-shell/chrome/menu-drawer.js'
|
|
32
|
+
import { AdminMenuProvider } from '../admin-shell/chrome/menu-provider.js'
|
|
33
|
+
import { RouteError, RouteNotFound } from '../admin-shell/chrome/route-error.js'
|
|
34
|
+
import { bylineAdminServices } from '../integrations/byline-admin-services.js'
|
|
35
|
+
import { bylineFieldServices } from '../integrations/byline-field-services.js'
|
|
36
|
+
import { getCurrentAdminUser } from '../server-fns/auth/index.js'
|
|
37
|
+
|
|
38
|
+
interface AdminLayoutOpts {
|
|
39
|
+
/** Path users are redirected to when unauthenticated. Defaults to `/sign-in`. */
|
|
40
|
+
signInPath?: string
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export function createAdminLayoutRoute(path: string, opts: AdminLayoutOpts = {}) {
|
|
44
|
+
const signInPath = opts.signInPath ?? '/sign-in'
|
|
45
|
+
|
|
46
|
+
// biome-ignore lint/suspicious/noExplicitAny: dynamic path bypasses route-tree typing
|
|
47
|
+
const Route: any = createFileRoute(path as never)({
|
|
48
|
+
beforeLoad: async ({ location }: { location: { href: string } }) => {
|
|
49
|
+
try {
|
|
50
|
+
const user = await getCurrentAdminUser()
|
|
51
|
+
return { user }
|
|
52
|
+
} catch {
|
|
53
|
+
// `getCurrentAdminUser` (via `getAdminRequestContext`) throws
|
|
54
|
+
// `ERR_UNAUTHENTICATED` or a related auth error when no valid
|
|
55
|
+
// session is present. Redirect to sign-in with the original path
|
|
56
|
+
// so we can send the user back after they authenticate.
|
|
57
|
+
throw redirect({
|
|
58
|
+
to: signInPath as never,
|
|
59
|
+
search: { callbackUrl: location.href } as never,
|
|
60
|
+
})
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
component: function AdminLayoutComponent() {
|
|
64
|
+
const { user } = Route.useRouteContext() as {
|
|
65
|
+
user: Awaited<ReturnType<typeof getCurrentAdminUser>>
|
|
66
|
+
}
|
|
67
|
+
return (
|
|
68
|
+
<BylineAdminServicesProvider services={bylineAdminServices}>
|
|
69
|
+
<BylineFieldServicesProvider services={bylineFieldServices}>
|
|
70
|
+
<AdminMenuProvider>
|
|
71
|
+
<AdminAppBar user={user} />
|
|
72
|
+
<main className={cx('byline-admin-layout-main', layoutStyles.main)}>
|
|
73
|
+
<DrawerToggle />
|
|
74
|
+
<AdminMenuDrawer />
|
|
75
|
+
<Content>
|
|
76
|
+
<Outlet />
|
|
77
|
+
</Content>
|
|
78
|
+
</main>
|
|
79
|
+
</AdminMenuProvider>
|
|
80
|
+
</BylineFieldServicesProvider>
|
|
81
|
+
</BylineAdminServicesProvider>
|
|
82
|
+
)
|
|
83
|
+
},
|
|
84
|
+
errorComponent: RouteError,
|
|
85
|
+
notFoundComponent: RouteNotFound,
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
return Route
|
|
89
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
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 { createFileRoute } from '@tanstack/react-router'
|
|
10
|
+
|
|
11
|
+
import { AbilitiesInspector } from '@byline/ui'
|
|
12
|
+
|
|
13
|
+
import { BreadcrumbsClient } from '../admin-shell/chrome/breadcrumbs/breadcrumbs-client.js'
|
|
14
|
+
import {
|
|
15
|
+
type ListRegisteredAbilitiesResponse,
|
|
16
|
+
listRegisteredAbilities,
|
|
17
|
+
} from '../server-fns/admin-permissions/index.js'
|
|
18
|
+
|
|
19
|
+
export function createAdminPermissionsRoute(path: string) {
|
|
20
|
+
// biome-ignore lint/suspicious/noExplicitAny: dynamic path bypasses route-tree typing
|
|
21
|
+
const Route: any = createFileRoute(path as never)({
|
|
22
|
+
loader: async () => {
|
|
23
|
+
const data = await listRegisteredAbilities()
|
|
24
|
+
return { data }
|
|
25
|
+
},
|
|
26
|
+
component: function AdminPermissionsComponent() {
|
|
27
|
+
const { data } = Route.useLoaderData() as { data: ListRegisteredAbilitiesResponse }
|
|
28
|
+
return (
|
|
29
|
+
<>
|
|
30
|
+
<BreadcrumbsClient
|
|
31
|
+
breadcrumbs={[
|
|
32
|
+
{ label: 'Dashboard', href: '/admin' },
|
|
33
|
+
{ label: 'Permissions', href: '/admin/permissions' },
|
|
34
|
+
]}
|
|
35
|
+
/>
|
|
36
|
+
<AbilitiesInspector data={data} />
|
|
37
|
+
</>
|
|
38
|
+
)
|
|
39
|
+
},
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
return Route
|
|
43
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
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 { createFileRoute, notFound } from '@tanstack/react-router'
|
|
10
|
+
|
|
11
|
+
import { Container, Section } from '@infonomic/uikit/react'
|
|
12
|
+
|
|
13
|
+
import { RoleContainer } from '../admin-shell/admin-roles/container.js'
|
|
14
|
+
import { BreadcrumbsClient } from '../admin-shell/chrome/breadcrumbs/breadcrumbs-client.js'
|
|
15
|
+
import {
|
|
16
|
+
getRoleAbilities,
|
|
17
|
+
type ListRegisteredAbilitiesResponse,
|
|
18
|
+
listRegisteredAbilities,
|
|
19
|
+
} from '../server-fns/admin-permissions/index.js'
|
|
20
|
+
import { type AdminRoleResponse, getAdminRole } from '../server-fns/admin-roles/index.js'
|
|
21
|
+
|
|
22
|
+
interface LoaderData {
|
|
23
|
+
role: AdminRoleResponse
|
|
24
|
+
registered: ListRegisteredAbilitiesResponse
|
|
25
|
+
initialAbilities: string[]
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function createAdminRoleEditRoute(path: string) {
|
|
29
|
+
// biome-ignore lint/suspicious/noExplicitAny: dynamic path bypasses route-tree typing
|
|
30
|
+
const Route: any = createFileRoute(path as never)({
|
|
31
|
+
loader: async ({ params }: { params: { id: string } }): Promise<LoaderData> => {
|
|
32
|
+
try {
|
|
33
|
+
// Three independent reads — fetch in parallel so the role-detail
|
|
34
|
+
// page lands ready to open the permissions editor without a
|
|
35
|
+
// second waterfall.
|
|
36
|
+
const [role, registered, currentAbilities] = await Promise.all([
|
|
37
|
+
getAdminRole({ data: { id: params.id } }),
|
|
38
|
+
listRegisteredAbilities(),
|
|
39
|
+
getRoleAbilities({ data: { id: params.id } }),
|
|
40
|
+
])
|
|
41
|
+
return { role, registered, initialAbilities: currentAbilities.abilities }
|
|
42
|
+
} catch (err) {
|
|
43
|
+
// Match on the string code rather than importing the error class —
|
|
44
|
+
// the subpath would pull argon2 into the browser bundle transitively.
|
|
45
|
+
if (
|
|
46
|
+
typeof err === 'object' &&
|
|
47
|
+
err !== null &&
|
|
48
|
+
'code' in err &&
|
|
49
|
+
((err as { code?: unknown }).code === 'admin.roles.notFound' ||
|
|
50
|
+
(err as { code?: unknown }).code === 'admin.permissions.roleNotFound')
|
|
51
|
+
) {
|
|
52
|
+
throw notFound()
|
|
53
|
+
}
|
|
54
|
+
throw err
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
component: function AdminRoleEditComponent() {
|
|
58
|
+
const { role, registered, initialAbilities } = Route.useLoaderData() as LoaderData
|
|
59
|
+
return (
|
|
60
|
+
<>
|
|
61
|
+
<BreadcrumbsClient
|
|
62
|
+
breadcrumbs={[
|
|
63
|
+
{ label: 'Dashboard', href: '/admin' },
|
|
64
|
+
{ label: 'Admin Roles', href: '/admin/roles' },
|
|
65
|
+
{ label: 'Role', href: `/admin/roles/${role.id}` },
|
|
66
|
+
]}
|
|
67
|
+
/>
|
|
68
|
+
<Section className="py-5 pb-2">
|
|
69
|
+
<Container>
|
|
70
|
+
<h1 className="mb-2">{role.name}</h1>
|
|
71
|
+
</Container>
|
|
72
|
+
</Section>
|
|
73
|
+
<Section>
|
|
74
|
+
<Container>
|
|
75
|
+
<RoleContainer
|
|
76
|
+
role={role}
|
|
77
|
+
registered={registered}
|
|
78
|
+
initialAbilities={initialAbilities}
|
|
79
|
+
/>
|
|
80
|
+
</Container>
|
|
81
|
+
</Section>
|
|
82
|
+
</>
|
|
83
|
+
)
|
|
84
|
+
},
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
return Route
|
|
88
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
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 { createFileRoute } from '@tanstack/react-router'
|
|
10
|
+
|
|
11
|
+
import { AdminRolesListView } from '../admin-shell/admin-roles/list.js'
|
|
12
|
+
import { BreadcrumbsClient } from '../admin-shell/chrome/breadcrumbs/breadcrumbs-client.js'
|
|
13
|
+
import { type AdminRoleListResponse, listAdminRoles } from '../server-fns/admin-roles/index.js'
|
|
14
|
+
|
|
15
|
+
export function createAdminRolesListRoute(path: string) {
|
|
16
|
+
// biome-ignore lint/suspicious/noExplicitAny: dynamic path bypasses route-tree typing
|
|
17
|
+
const Route: any = createFileRoute(path as never)({
|
|
18
|
+
loader: async () => {
|
|
19
|
+
const data = await listAdminRoles()
|
|
20
|
+
return { data }
|
|
21
|
+
},
|
|
22
|
+
component: function AdminRolesListComponent() {
|
|
23
|
+
const { data } = Route.useLoaderData() as { data: AdminRoleListResponse }
|
|
24
|
+
return (
|
|
25
|
+
<>
|
|
26
|
+
<BreadcrumbsClient
|
|
27
|
+
breadcrumbs={[
|
|
28
|
+
{ label: 'Dashboard', href: '/admin' },
|
|
29
|
+
{ label: 'Admin Roles', href: '/admin/roles' },
|
|
30
|
+
]}
|
|
31
|
+
/>
|
|
32
|
+
<AdminRolesListView data={data} />
|
|
33
|
+
</>
|
|
34
|
+
)
|
|
35
|
+
},
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
return Route
|
|
39
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
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 { createFileRoute, notFound } from '@tanstack/react-router'
|
|
10
|
+
|
|
11
|
+
import { Container, Section } from '@infonomic/uikit/react'
|
|
12
|
+
|
|
13
|
+
import { AccountContainer } from '../admin-shell/admin-users/container.js'
|
|
14
|
+
import { BreadcrumbsClient } from '../admin-shell/chrome/breadcrumbs/breadcrumbs-client.js'
|
|
15
|
+
import { type AdminRoleResponse, listAdminRoles } from '../server-fns/admin-roles/index.js'
|
|
16
|
+
import {
|
|
17
|
+
type AdminUserResponse,
|
|
18
|
+
getAdminUser,
|
|
19
|
+
getUserRoles,
|
|
20
|
+
} from '../server-fns/admin-users/index.js'
|
|
21
|
+
|
|
22
|
+
interface LoaderData {
|
|
23
|
+
user: AdminUserResponse
|
|
24
|
+
allRoles: AdminRoleResponse[]
|
|
25
|
+
initialUserRoles: AdminRoleResponse[]
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function displayNameFor(user: {
|
|
29
|
+
given_name: string | null
|
|
30
|
+
family_name: string | null
|
|
31
|
+
email: string
|
|
32
|
+
}): string {
|
|
33
|
+
const parts = [user.given_name, user.family_name].filter(
|
|
34
|
+
(part): part is string => typeof part === 'string' && part.length > 0
|
|
35
|
+
)
|
|
36
|
+
return parts.length > 0 ? parts.join(' ') : user.email
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function createAdminUserEditRoute(path: string) {
|
|
40
|
+
// biome-ignore lint/suspicious/noExplicitAny: dynamic path bypasses route-tree typing
|
|
41
|
+
const Route: any = createFileRoute(path as never)({
|
|
42
|
+
loader: async ({ params }: { params: { id: string } }): Promise<LoaderData> => {
|
|
43
|
+
try {
|
|
44
|
+
// Three independent reads in parallel — the user row, the full
|
|
45
|
+
// role catalog (for the roles drawer's checkbox list), and the
|
|
46
|
+
// user's current role assignments.
|
|
47
|
+
const [user, rolesList, userRoles] = await Promise.all([
|
|
48
|
+
getAdminUser({ data: { id: params.id } }),
|
|
49
|
+
listAdminRoles(),
|
|
50
|
+
getUserRoles({ data: { userId: params.id } }),
|
|
51
|
+
])
|
|
52
|
+
return { user, allRoles: rolesList.roles, initialUserRoles: userRoles.roles }
|
|
53
|
+
} catch (err) {
|
|
54
|
+
// Service emits `AdminUsersError(NOT_FOUND)` when the id resolves
|
|
55
|
+
// to no row; the user-roles command uses
|
|
56
|
+
// `admin.roles.userNotFound` for the same condition. Map either
|
|
57
|
+
// to the framework `notFound()` so the route renders the 404
|
|
58
|
+
// boundary rather than the generic error boundary. Matching on
|
|
59
|
+
// the string avoids importing from `@byline/admin` in a
|
|
60
|
+
// client-reachable module — the subpath pulls argon2 into the
|
|
61
|
+
// browser bundle transitively.
|
|
62
|
+
if (
|
|
63
|
+
typeof err === 'object' &&
|
|
64
|
+
err !== null &&
|
|
65
|
+
'code' in err &&
|
|
66
|
+
((err as { code?: unknown }).code === 'admin.users.notFound' ||
|
|
67
|
+
(err as { code?: unknown }).code === 'admin.roles.userNotFound')
|
|
68
|
+
) {
|
|
69
|
+
throw notFound()
|
|
70
|
+
}
|
|
71
|
+
throw err
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
component: function AdminUserEditComponent() {
|
|
75
|
+
const { user, allRoles, initialUserRoles } = Route.useLoaderData() as LoaderData
|
|
76
|
+
return (
|
|
77
|
+
<>
|
|
78
|
+
<BreadcrumbsClient
|
|
79
|
+
breadcrumbs={[
|
|
80
|
+
{ label: 'Dashboard', href: '/admin' },
|
|
81
|
+
{ label: 'Admin Users', href: '/admin/users' },
|
|
82
|
+
{ label: 'User', href: `/admin/users/${user.id}` },
|
|
83
|
+
]}
|
|
84
|
+
/>
|
|
85
|
+
<Section className="py-5 pb-2">
|
|
86
|
+
<Container>
|
|
87
|
+
<h1 className="mb-2">{displayNameFor(user)}</h1>
|
|
88
|
+
</Container>
|
|
89
|
+
</Section>
|
|
90
|
+
<Section>
|
|
91
|
+
<Container>
|
|
92
|
+
<AccountContainer
|
|
93
|
+
user={user}
|
|
94
|
+
allRoles={allRoles}
|
|
95
|
+
initialUserRoles={initialUserRoles}
|
|
96
|
+
/>
|
|
97
|
+
</Container>
|
|
98
|
+
</Section>
|
|
99
|
+
</>
|
|
100
|
+
)
|
|
101
|
+
},
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
return Route
|
|
105
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
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 { createFileRoute } from '@tanstack/react-router'
|
|
10
|
+
|
|
11
|
+
import { z } from 'zod'
|
|
12
|
+
|
|
13
|
+
import { AdminUsersListView } from '../admin-shell/admin-users/list.js'
|
|
14
|
+
import { BreadcrumbsClient } from '../admin-shell/chrome/breadcrumbs/breadcrumbs-client.js'
|
|
15
|
+
import { type AdminUserListResponse, listAdminUsers } from '../server-fns/admin-users/index.js'
|
|
16
|
+
|
|
17
|
+
const orderSchema = z.enum([
|
|
18
|
+
'given_name',
|
|
19
|
+
'family_name',
|
|
20
|
+
'email',
|
|
21
|
+
'username',
|
|
22
|
+
'created_at',
|
|
23
|
+
'updated_at',
|
|
24
|
+
])
|
|
25
|
+
|
|
26
|
+
const searchSchema = z.object({
|
|
27
|
+
page: z.coerce.number().int().min(1).optional(),
|
|
28
|
+
page_size: z.coerce.number().int().min(1).max(100).optional(),
|
|
29
|
+
query: z.string().optional(),
|
|
30
|
+
order: orderSchema.optional(),
|
|
31
|
+
desc: z.coerce.boolean().optional(),
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
export function createAdminUsersListRoute(path: string) {
|
|
35
|
+
// biome-ignore lint/suspicious/noExplicitAny: dynamic path bypasses route-tree typing
|
|
36
|
+
const Route: any = createFileRoute(path as never)({
|
|
37
|
+
validateSearch: searchSchema,
|
|
38
|
+
loaderDeps: ({ search }: { search: z.infer<typeof searchSchema> }) => ({
|
|
39
|
+
page: search.page,
|
|
40
|
+
page_size: search.page_size,
|
|
41
|
+
query: search.query,
|
|
42
|
+
order: search.order,
|
|
43
|
+
desc: search.desc,
|
|
44
|
+
}),
|
|
45
|
+
loader: async ({
|
|
46
|
+
deps,
|
|
47
|
+
}: {
|
|
48
|
+
deps: {
|
|
49
|
+
page?: number
|
|
50
|
+
page_size?: number
|
|
51
|
+
query?: string
|
|
52
|
+
order?: string
|
|
53
|
+
desc?: boolean
|
|
54
|
+
}
|
|
55
|
+
}) => {
|
|
56
|
+
const data = await listAdminUsers({
|
|
57
|
+
data: {
|
|
58
|
+
page: deps.page,
|
|
59
|
+
pageSize: deps.page_size,
|
|
60
|
+
query: deps.query,
|
|
61
|
+
order: deps.order as never,
|
|
62
|
+
desc: deps.desc,
|
|
63
|
+
},
|
|
64
|
+
})
|
|
65
|
+
return { data }
|
|
66
|
+
},
|
|
67
|
+
component: function AdminUsersListComponent() {
|
|
68
|
+
const { data } = Route.useLoaderData() as { data: AdminUserListResponse }
|
|
69
|
+
return (
|
|
70
|
+
<>
|
|
71
|
+
<BreadcrumbsClient
|
|
72
|
+
breadcrumbs={[
|
|
73
|
+
{ label: 'Dashboard', href: '/admin' },
|
|
74
|
+
{ label: 'Admin Users', href: '/admin/users' },
|
|
75
|
+
]}
|
|
76
|
+
/>
|
|
77
|
+
<AdminUsersListView data={data} />
|
|
78
|
+
</>
|
|
79
|
+
)
|
|
80
|
+
},
|
|
81
|
+
})
|
|
82
|
+
|
|
83
|
+
return Route
|
|
84
|
+
}
|