@byline/host-tanstack-start 4.19.0 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin-shell/chrome/admin-app-bar.d.ts +7 -0
- package/dist/admin-shell/chrome/admin-app-bar.js +10 -2
- package/dist/admin-shell/chrome/session-change-boundary.d.ts +14 -0
- package/dist/admin-shell/chrome/session-change-boundary.js +87 -0
- package/dist/admin-shell/chrome/session-change-boundary.test.d.ts +8 -0
- package/dist/admin-shell/chrome/sign-in-page.d.ts +2 -1
- package/dist/admin-shell/chrome/sign-in-page.js +60 -3
- package/dist/admin-shell/collections/edit.d.ts +1 -1
- package/dist/admin-shell/collections/edit.js +151 -31
- package/dist/admin-shell/collections/history.js +4 -2
- package/dist/admin-shell/collections/list.js +30 -6
- package/dist/admin-shell/collections/restore-version-modal.d.ts +3 -1
- package/dist/admin-shell/collections/restore-version-modal.js +9 -4
- package/dist/admin-shell/collections/tree-list.js +16 -6
- package/dist/admin-shell/collections/version-history.d.ts +2 -1
- package/dist/admin-shell/collections/version-history.js +11 -2
- package/dist/admin-shell/document-mutation-notice.d.ts +6 -0
- package/dist/admin-shell/document-mutation-notice.js +53 -0
- package/dist/admin-shell/document-mutation-state.d.ts +22 -0
- package/dist/admin-shell/document-mutation-state.js +71 -0
- package/dist/admin-shell/document-mutation-state.test.d.ts +1 -0
- package/dist/admin-shell/scheduled-publications/list.js +15 -5
- package/dist/admin-shell/singletons/history.js +4 -2
- package/dist/admin-shell/singletons/view.d.ts +1 -1
- package/dist/admin-shell/singletons/view.js +98 -19
- package/dist/integrations/byline-admin-services.js +7 -1
- package/dist/integrations/byline-field-services.js +2 -9
- package/dist/integrations/client-ip.d.ts +19 -0
- package/dist/integrations/client-ip.js +34 -0
- package/dist/integrations/session-coordination.d.ts +24 -0
- package/dist/integrations/session-coordination.js +85 -0
- package/dist/integrations/session-middleware.d.ts +11 -0
- package/dist/integrations/session-middleware.js +94 -0
- package/dist/integrations/session-request-kind.d.ts +9 -0
- package/dist/integrations/session-request-kind.js +10 -0
- package/dist/integrations/session-request-middleware.d.ts +9 -0
- package/dist/integrations/session-request-middleware.js +7 -0
- package/dist/integrations/sign-in-body.d.ts +12 -0
- package/dist/integrations/sign-in-body.js +52 -0
- package/dist/integrations/sign-in-middleware.d.ts +9 -0
- package/dist/integrations/sign-in-middleware.js +10 -0
- package/dist/routes/create-admin-layout-route.js +46 -31
- package/dist/routes/create-collection-edit-route.js +1 -1
- package/dist/routes/create-collection-list-route.d.ts +0 -7
- package/dist/routes/create-collection-list-route.js +7 -9
- package/dist/routes/create-sign-in-route.js +4 -2
- package/dist/routes/create-singleton-route.d.ts +2 -0
- package/dist/routes/create-singleton-route.js +4 -3
- package/dist/server-fns/admin-account/change-password.d.ts +3 -1
- package/dist/server-fns/admin-account/change-password.js +9 -3
- package/dist/server-fns/admin-account/get.d.ts +3 -1
- package/dist/server-fns/admin-account/get.js +4 -1
- package/dist/server-fns/admin-account/index.d.ts +5 -5
- package/dist/server-fns/admin-account/update.d.ts +3 -1
- package/dist/server-fns/admin-account/update.js +4 -1
- package/dist/server-fns/admin-activity/get.d.ts +3 -1
- package/dist/server-fns/admin-activity/get.js +4 -1
- package/dist/server-fns/admin-permissions/get-role-abilities.d.ts +3 -1
- package/dist/server-fns/admin-permissions/get-role-abilities.js +4 -1
- package/dist/server-fns/admin-permissions/index.d.ts +4 -4
- package/dist/server-fns/admin-permissions/list-registered.d.ts +3 -1
- package/dist/server-fns/admin-permissions/list-registered.js +4 -1
- package/dist/server-fns/admin-permissions/set-role-abilities.d.ts +3 -1
- package/dist/server-fns/admin-permissions/set-role-abilities.js +4 -1
- package/dist/server-fns/admin-permissions/who-has.d.ts +3 -1
- package/dist/server-fns/admin-permissions/who-has.js +4 -1
- package/dist/server-fns/admin-roles/create.d.ts +3 -1
- package/dist/server-fns/admin-roles/create.js +4 -1
- package/dist/server-fns/admin-roles/delete.d.ts +3 -1
- package/dist/server-fns/admin-roles/delete.js +4 -1
- package/dist/server-fns/admin-roles/get.d.ts +3 -1
- package/dist/server-fns/admin-roles/get.js +4 -1
- package/dist/server-fns/admin-roles/index.d.ts +6 -6
- package/dist/server-fns/admin-roles/list.d.ts +3 -1
- package/dist/server-fns/admin-roles/list.js +4 -1
- package/dist/server-fns/admin-roles/reorder.d.ts +3 -1
- package/dist/server-fns/admin-roles/reorder.js +4 -1
- package/dist/server-fns/admin-roles/update.d.ts +3 -1
- package/dist/server-fns/admin-roles/update.js +4 -1
- package/dist/server-fns/admin-users/create.d.ts +3 -1
- package/dist/server-fns/admin-users/create.js +4 -1
- package/dist/server-fns/admin-users/delete.d.ts +3 -1
- package/dist/server-fns/admin-users/delete.js +4 -1
- package/dist/server-fns/admin-users/disable.d.ts +3 -1
- package/dist/server-fns/admin-users/disable.js +4 -1
- package/dist/server-fns/admin-users/enable.d.ts +3 -1
- package/dist/server-fns/admin-users/enable.js +4 -1
- package/dist/server-fns/admin-users/get-user-roles.d.ts +3 -1
- package/dist/server-fns/admin-users/get-user-roles.js +4 -1
- package/dist/server-fns/admin-users/get.d.ts +3 -1
- package/dist/server-fns/admin-users/get.js +4 -1
- package/dist/server-fns/admin-users/index.d.ts +10 -10
- package/dist/server-fns/admin-users/list.d.ts +3 -1
- package/dist/server-fns/admin-users/list.js +4 -1
- package/dist/server-fns/admin-users/set-password.d.ts +3 -1
- package/dist/server-fns/admin-users/set-password.js +4 -1
- package/dist/server-fns/admin-users/set-user-roles.d.ts +3 -1
- package/dist/server-fns/admin-users/set-user-roles.js +4 -1
- package/dist/server-fns/admin-users/update.d.ts +3 -1
- package/dist/server-fns/admin-users/update.js +4 -1
- package/dist/server-fns/ai/execute.d.ts +3 -1
- package/dist/server-fns/ai/execute.js +4 -1
- package/dist/server-fns/ai/index.d.ts +1 -1
- package/dist/server-fns/analytics/maintenance.d.ts +6 -2
- package/dist/server-fns/analytics/maintenance.js +7 -2
- package/dist/server-fns/analytics/queries.d.ts +18 -6
- package/dist/server-fns/analytics/queries.js +19 -6
- package/dist/server-fns/auth/current-user.d.ts +1 -0
- package/dist/server-fns/auth/current-user.js +5 -2
- package/dist/server-fns/auth/renew.d.ts +13 -0
- package/dist/server-fns/auth/renew.js +45 -0
- package/dist/server-fns/auth/sign-in.d.ts +2 -1
- package/dist/server-fns/auth/sign-in.js +88 -17
- package/dist/server-fns/auth/sign-out.d.ts +3 -1
- package/dist/server-fns/auth/sign-out.js +38 -6
- package/dist/server-fns/collections/audit.d.ts +3 -1
- package/dist/server-fns/collections/audit.js +4 -1
- package/dist/server-fns/collections/copy-to-locale.d.ts +5 -1
- package/dist/server-fns/collections/copy-to-locale.js +7 -2
- package/dist/server-fns/collections/create.d.ts +4 -1
- package/dist/server-fns/collections/create.js +8 -3
- package/dist/server-fns/collections/delete-locale.d.ts +5 -1
- package/dist/server-fns/collections/delete-locale.js +7 -2
- package/dist/server-fns/collections/delete-outcome.d.ts +7 -3
- package/dist/server-fns/collections/delete-outcome.js +4 -0
- package/dist/server-fns/collections/delete.d.ts +5 -1
- package/dist/server-fns/collections/delete.js +8 -3
- package/dist/server-fns/collections/duplicate.d.ts +5 -1
- package/dist/server-fns/collections/duplicate.js +8 -3
- package/dist/server-fns/collections/get.d.ts +1 -0
- package/dist/server-fns/collections/get.js +12 -6
- package/dist/server-fns/collections/history.d.ts +3 -1
- package/dist/server-fns/collections/history.js +4 -1
- package/dist/server-fns/collections/index.d.ts +21 -21
- package/dist/server-fns/collections/list.d.ts +3 -1
- package/dist/server-fns/collections/list.js +15 -4
- package/dist/server-fns/collections/reindex.d.ts +3 -1
- package/dist/server-fns/collections/reindex.js +4 -1
- package/dist/server-fns/collections/reorder.d.ts +10 -2
- package/dist/server-fns/collections/reorder.js +23 -76
- package/dist/server-fns/collections/restore-version.d.ts +6 -1
- package/dist/server-fns/collections/restore-version.js +8 -2
- package/dist/server-fns/collections/save-outcome.d.ts +1 -0
- package/dist/server-fns/collections/save-outcome.js +1 -0
- package/dist/server-fns/collections/scheduled-publication.d.ts +64 -7
- package/dist/server-fns/collections/scheduled-publication.js +42 -21
- package/dist/server-fns/collections/set-list-view-preference.d.ts +3 -1
- package/dist/server-fns/collections/set-list-view-preference.js +4 -1
- package/dist/server-fns/collections/stats.js +4 -1
- package/dist/server-fns/collections/status.d.ts +14 -2
- package/dist/server-fns/collections/status.js +18 -5
- package/dist/server-fns/collections/tree-mutation.d.ts +7 -6
- package/dist/server-fns/collections/tree-mutation.js +17 -5
- package/dist/server-fns/collections/tree.d.ts +29 -6
- package/dist/server-fns/collections/tree.js +32 -17
- package/dist/server-fns/collections/update.d.ts +18 -6
- package/dist/server-fns/collections/update.js +39 -20
- package/dist/server-fns/collections/upload.d.ts +11 -1
- package/dist/server-fns/collections/upload.js +6 -2
- package/dist/server-fns/document-mutation-errors.d.ts +5 -0
- package/dist/server-fns/document-mutation-errors.js +50 -0
- package/dist/server-fns/editable-revision.d.ts +9 -0
- package/dist/server-fns/editable-revision.js +11 -0
- package/dist/server-fns/i18n/set-locale.d.ts +3 -1
- package/dist/server-fns/i18n/set-locale.js +18 -3
- package/dist/server-fns/preview/disable.d.ts +3 -1
- package/dist/server-fns/preview/disable.js +4 -1
- package/dist/server-fns/preview/enable.d.ts +3 -1
- package/dist/server-fns/preview/enable.js +4 -1
- package/dist/server-fns/singleton-document-read.d.ts +1 -1
- package/dist/server-fns/singleton-document-read.js +7 -3
- package/dist/server-fns/singletons/cancel-scheduled-publish.d.ts +9 -2
- package/dist/server-fns/singletons/cancel-scheduled-publish.js +7 -1
- package/dist/server-fns/singletons/change-status.d.ts +5 -1
- package/dist/server-fns/singletons/change-status.js +7 -1
- package/dist/server-fns/singletons/confirm-scheduled-publish.d.ts +8 -2
- package/dist/server-fns/singletons/confirm-scheduled-publish.js +7 -2
- package/dist/server-fns/singletons/copy-to-locale.d.ts +5 -1
- package/dist/server-fns/singletons/copy-to-locale.js +7 -2
- package/dist/server-fns/singletons/find-by-version.d.ts +3 -1
- package/dist/server-fns/singletons/find-by-version.js +4 -1
- package/dist/server-fns/singletons/get-scheduled-publish.d.ts +3 -1
- package/dist/server-fns/singletons/get-scheduled-publish.js +4 -1
- package/dist/server-fns/singletons/get.d.ts +6 -4
- package/dist/server-fns/singletons/get.js +4 -1
- package/dist/server-fns/singletons/history.d.ts +3 -1
- package/dist/server-fns/singletons/history.js +4 -1
- package/dist/server-fns/singletons/restore-version.d.ts +5 -1
- package/dist/server-fns/singletons/restore-version.js +9 -3
- package/dist/server-fns/singletons/schedule-publish.d.ts +8 -2
- package/dist/server-fns/singletons/schedule-publish.js +7 -2
- package/dist/server-fns/singletons/unpublish.d.ts +5 -1
- package/dist/server-fns/singletons/unpublish.js +7 -1
- package/dist/server-fns/singletons/update.d.ts +6 -4
- package/dist/server-fns/singletons/update.js +8 -4
- package/dist/server-fns/structural-receipt.d.ts +4 -0
- package/dist/server-fns/structural-receipt.js +31 -0
- package/package.json +20 -20
- package/src/admin-shell/chrome/admin-app-bar.tsx +11 -6
- package/src/admin-shell/chrome/session-change-boundary.test.tsx +78 -0
- package/src/admin-shell/chrome/session-change-boundary.tsx +94 -0
- package/src/admin-shell/chrome/sign-in-page.tsx +68 -3
- package/src/admin-shell/collections/edit.tsx +173 -54
- package/src/admin-shell/collections/history.tsx +11 -2
- package/src/admin-shell/collections/list.tsx +22 -6
- package/src/admin-shell/collections/restore-version-modal.tsx +12 -3
- package/src/admin-shell/collections/save-navigation.test.tsx +156 -8
- package/src/admin-shell/collections/tree-list.tsx +16 -6
- package/src/admin-shell/collections/version-history.tsx +13 -3
- package/src/admin-shell/document-mutation-notice.tsx +45 -0
- package/src/admin-shell/document-mutation-state.test.tsx +146 -0
- package/src/admin-shell/document-mutation-state.ts +95 -0
- package/src/admin-shell/scheduled-publications/list.tsx +16 -6
- package/src/admin-shell/singletons/history.test.tsx +3 -1
- package/src/admin-shell/singletons/history.tsx +10 -2
- package/src/admin-shell/singletons/view.test.tsx +59 -18
- package/src/admin-shell/singletons/view.tsx +110 -29
- package/src/integrations/byline-admin-services.ts +7 -1
- package/src/integrations/byline-field-services.ts +2 -3
- package/src/integrations/client-ip.test.node.ts +45 -0
- package/src/integrations/client-ip.ts +54 -0
- package/src/integrations/framework-fetch-shape.test.node.ts +56 -0
- package/src/integrations/session-client.test.node.ts +121 -0
- package/src/integrations/session-coordination.test.node.ts +77 -0
- package/src/integrations/session-coordination.ts +96 -0
- package/src/integrations/session-middleware.test.node.ts +87 -0
- package/src/integrations/session-middleware.ts +107 -0
- package/src/integrations/session-request-kind.ts +18 -0
- package/src/integrations/session-request-middleware.ts +17 -0
- package/src/integrations/sign-in-body.test.node.ts +59 -0
- package/src/integrations/sign-in-body.ts +50 -0
- package/src/integrations/sign-in-middleware.ts +24 -0
- package/src/routes/create-admin-layout-route.tsx +48 -30
- package/src/routes/create-collection-edit-route.tsx +1 -0
- package/src/routes/create-collection-list-route.tsx +13 -2
- package/src/routes/create-sign-in-route.tsx +10 -2
- package/src/routes/create-singleton-route.test.node.ts +10 -2
- package/src/routes/create-singleton-route.tsx +6 -4
- package/src/server-fns/admin-account/change-password.test.node.ts +69 -0
- package/src/server-fns/admin-account/change-password.ts +13 -2
- package/src/server-fns/admin-account/get.ts +2 -0
- package/src/server-fns/admin-account/update.ts +2 -0
- package/src/server-fns/admin-activity/get.ts +2 -0
- package/src/server-fns/admin-permissions/get-role-abilities.ts +2 -0
- package/src/server-fns/admin-permissions/list-registered.ts +5 -4
- package/src/server-fns/admin-permissions/set-role-abilities.ts +2 -0
- package/src/server-fns/admin-permissions/who-has.ts +2 -0
- package/src/server-fns/admin-roles/create.ts +2 -0
- package/src/server-fns/admin-roles/delete.ts +2 -0
- package/src/server-fns/admin-roles/get.ts +2 -0
- package/src/server-fns/admin-roles/list.ts +5 -4
- package/src/server-fns/admin-roles/reorder.ts +2 -0
- package/src/server-fns/admin-roles/update.ts +2 -0
- package/src/server-fns/admin-users/create.ts +2 -0
- package/src/server-fns/admin-users/delete.ts +2 -0
- package/src/server-fns/admin-users/disable.ts +2 -0
- package/src/server-fns/admin-users/enable.ts +2 -0
- package/src/server-fns/admin-users/get-user-roles.ts +2 -0
- package/src/server-fns/admin-users/get.ts +2 -0
- package/src/server-fns/admin-users/list.ts +2 -0
- package/src/server-fns/admin-users/set-password.ts +2 -0
- package/src/server-fns/admin-users/set-user-roles.ts +2 -0
- package/src/server-fns/admin-users/update.ts +2 -0
- package/src/server-fns/ai/execute.ts +3 -0
- package/src/server-fns/analytics/maintenance.ts +4 -0
- package/src/server-fns/analytics/queries.ts +14 -8
- package/src/server-fns/auth/current-user.ts +7 -3
- package/src/server-fns/auth/renew.test.node.ts +85 -0
- package/src/server-fns/auth/renew.ts +54 -0
- package/src/server-fns/auth/sign-in.test.node.ts +114 -0
- package/src/server-fns/auth/sign-in.ts +80 -27
- package/src/server-fns/auth/sign-out.test.node.ts +85 -0
- package/src/server-fns/auth/sign-out.ts +44 -19
- package/src/server-fns/collections/audit.ts +2 -0
- package/src/server-fns/collections/copy-to-locale.ts +43 -36
- package/src/server-fns/collections/create.ts +56 -50
- package/src/server-fns/collections/delete-locale.ts +43 -32
- package/src/server-fns/collections/delete-outcome.test.node.ts +16 -0
- package/src/server-fns/collections/delete-outcome.ts +27 -16
- package/src/server-fns/collections/delete.ts +46 -38
- package/src/server-fns/collections/duplicate.ts +40 -32
- package/src/server-fns/collections/get.ts +11 -4
- package/src/server-fns/collections/history.ts +2 -0
- package/src/server-fns/collections/list.ts +10 -3
- package/src/server-fns/collections/reindex.ts +2 -0
- package/src/server-fns/collections/reorder.ts +34 -124
- package/src/server-fns/collections/restore-version.ts +49 -39
- package/src/server-fns/collections/revision-input.test.node.ts +122 -0
- package/src/server-fns/collections/save-outcome.test.node.ts +3 -0
- package/src/server-fns/collections/save-outcome.ts +2 -0
- package/src/server-fns/collections/scheduled-publication.ts +149 -115
- package/src/server-fns/collections/set-list-view-preference.ts +2 -0
- package/src/server-fns/collections/stats.ts +2 -0
- package/src/server-fns/collections/status.ts +89 -64
- package/src/server-fns/collections/tree-mutation.test.node.ts +87 -29
- package/src/server-fns/collections/tree-mutation.ts +28 -11
- package/src/server-fns/collections/tree.ts +156 -122
- package/src/server-fns/collections/update.ts +113 -86
- package/src/server-fns/collections/upload-singleton.test.node.ts +10 -7
- package/src/server-fns/collections/upload.ts +91 -77
- package/src/server-fns/document-mutation-errors.ts +67 -0
- package/src/server-fns/document-mutation-transport.test.node.ts +211 -0
- package/src/server-fns/editable-revision.test.node.ts +23 -0
- package/src/server-fns/editable-revision.ts +18 -0
- package/src/server-fns/i18n/set-locale.ts +19 -3
- package/src/server-fns/preview/disable.ts +8 -4
- package/src/server-fns/preview/enable.ts +9 -5
- package/src/server-fns/singleton-document-read.ts +7 -3
- package/src/server-fns/singletons/cancel-scheduled-publish.ts +12 -3
- package/src/server-fns/singletons/change-status.ts +12 -3
- package/src/server-fns/singletons/confirm-scheduled-publish.ts +14 -6
- package/src/server-fns/singletons/copy-to-locale.ts +22 -15
- package/src/server-fns/singletons/find-by-version.ts +2 -0
- package/src/server-fns/singletons/get-scheduled-publish.ts +2 -0
- package/src/server-fns/singletons/get.ts +5 -3
- package/src/server-fns/singletons/history.ts +2 -0
- package/src/server-fns/singletons/restore-version.ts +19 -12
- package/src/server-fns/singletons/schedule-publish.ts +20 -7
- package/src/server-fns/singletons/singletons.test.node.ts +69 -25
- package/src/server-fns/singletons/unpublish.ts +12 -3
- package/src/server-fns/singletons/update.ts +23 -16
- package/src/server-fns/structural-receipt.ts +41 -0
|
@@ -3,6 +3,8 @@ import { getAdminBylineClient, getAdminRequestContext } from "@byline/client/ser
|
|
|
3
3
|
import { ERR_NOT_FOUND, ERR_VALIDATION, isSingleton } from "@byline/core";
|
|
4
4
|
import { listDocumentPublishSchedules } from "@byline/core/services";
|
|
5
5
|
import { bylineCore } from "../../integrations/byline-core.js";
|
|
6
|
+
import { adminSessionMiddleware } from "../../integrations/session-middleware.js";
|
|
7
|
+
import { withDocumentMutationErrors } from "../document-mutation-errors.js";
|
|
6
8
|
import { omitScheduleExecutionState } from "./scheduled-publication-response.js";
|
|
7
9
|
import { serialise } from "./utils.js";
|
|
8
10
|
const TASK_NAME = 'documents.publish-scheduled';
|
|
@@ -52,44 +54,66 @@ async function scheduledPublicationRuntime() {
|
|
|
52
54
|
}
|
|
53
55
|
const getScheduledPublicationRuntime = createServerFn({
|
|
54
56
|
method: 'GET'
|
|
55
|
-
}).
|
|
57
|
+
}).middleware([
|
|
58
|
+
adminSessionMiddleware
|
|
59
|
+
]).handler(withDocumentMutationErrors(async ()=>{
|
|
56
60
|
await getAdminRequestContext();
|
|
57
61
|
return scheduledPublicationRuntime();
|
|
58
|
-
});
|
|
62
|
+
}));
|
|
59
63
|
const scheduleCollectionDocumentPublish = createServerFn({
|
|
60
64
|
method: 'POST'
|
|
61
|
-
}).
|
|
65
|
+
}).middleware([
|
|
66
|
+
adminSessionMiddleware
|
|
67
|
+
]).validator((input)=>input).handler(withDocumentMutationErrors(async ({ data })=>{
|
|
62
68
|
assertFeatureEnabled();
|
|
63
69
|
const schedule = await getAdminBylineClient().collection(data.collection).schedulePublish(data.id, {
|
|
64
70
|
publishAt: data.publishAt,
|
|
71
|
+
expectedRevision: data.expectedRevision,
|
|
65
72
|
expectedVersionId: data.expectedVersionId
|
|
66
73
|
});
|
|
67
|
-
return
|
|
68
|
-
|
|
74
|
+
return {
|
|
75
|
+
...serializeSchedule(schedule),
|
|
76
|
+
revision: schedule.revision
|
|
77
|
+
};
|
|
78
|
+
}));
|
|
69
79
|
const confirmCollectionDocumentScheduledPublish = createServerFn({
|
|
70
80
|
method: 'POST'
|
|
71
|
-
}).
|
|
81
|
+
}).middleware([
|
|
82
|
+
adminSessionMiddleware
|
|
83
|
+
]).validator((input)=>input).handler(withDocumentMutationErrors(async ({ data })=>{
|
|
72
84
|
assertFeatureEnabled();
|
|
73
85
|
const schedule = await getAdminBylineClient().collection(data.collection).confirmScheduledPublish(data.id, {
|
|
86
|
+
expectedRevision: data.expectedRevision,
|
|
74
87
|
expectedVersionId: data.expectedVersionId
|
|
75
88
|
});
|
|
76
|
-
return
|
|
77
|
-
|
|
89
|
+
return {
|
|
90
|
+
...serializeSchedule(schedule),
|
|
91
|
+
revision: schedule.revision
|
|
92
|
+
};
|
|
93
|
+
}));
|
|
78
94
|
const cancelCollectionDocumentScheduledPublish = createServerFn({
|
|
79
95
|
method: 'POST'
|
|
80
|
-
}).
|
|
96
|
+
}).middleware([
|
|
97
|
+
adminSessionMiddleware
|
|
98
|
+
]).validator((input)=>input).handler(withDocumentMutationErrors(async ({ data })=>{
|
|
81
99
|
assertFeatureEnabled();
|
|
82
|
-
const schedule = await getAdminBylineClient().collection(data.collection).cancelScheduledPublish(data.id
|
|
83
|
-
|
|
84
|
-
|
|
100
|
+
const schedule = await getAdminBylineClient().collection(data.collection).cancelScheduledPublish(data.id, {
|
|
101
|
+
expectedRevision: data.expectedRevision
|
|
102
|
+
});
|
|
103
|
+
return null == schedule.schedule ? {
|
|
104
|
+
status: 'not_found',
|
|
105
|
+
revision: schedule.revision
|
|
85
106
|
} : {
|
|
86
107
|
status: 'cancelled',
|
|
87
|
-
schedule: serializeSchedule(schedule)
|
|
108
|
+
schedule: serializeSchedule(schedule.schedule),
|
|
109
|
+
revision: schedule.revision
|
|
88
110
|
};
|
|
89
|
-
});
|
|
111
|
+
}));
|
|
90
112
|
const listScheduledPublications = createServerFn({
|
|
91
113
|
method: 'GET'
|
|
92
|
-
}).
|
|
114
|
+
}).middleware([
|
|
115
|
+
adminSessionMiddleware
|
|
116
|
+
]).validator((input)=>input).handler(withDocumentMutationErrors(async ({ data })=>{
|
|
93
117
|
assertFeatureEnabled();
|
|
94
118
|
if (data.states?.some((state)=>'armed' !== state && 'needs_reconfirm' !== state) === true) throw ERR_VALIDATION({
|
|
95
119
|
message: 'state must be armed or needs_reconfirm'
|
|
@@ -131,15 +155,12 @@ const listScheduledPublications = createServerFn({
|
|
|
131
155
|
}
|
|
132
156
|
const schedules = await Promise.all(result.schedules.map(async (schedule)=>{
|
|
133
157
|
const definition = collections.get(schedule.collectionId);
|
|
134
|
-
const documentPath = await core.db.queries.documents.getCurrentPath({
|
|
135
|
-
collection_id: schedule.collectionId,
|
|
136
|
-
document_id: schedule.documentId
|
|
137
|
-
});
|
|
138
158
|
return {
|
|
139
159
|
...serializeSchedule(schedule),
|
|
140
160
|
collectionPath: definition?.path ?? schedule.collectionId,
|
|
141
161
|
collectionLabel: null == definition ? schedule.collectionId : isSingleton(definition) ? definition.label : definition.labels.plural,
|
|
142
|
-
documentPath,
|
|
162
|
+
documentPath: schedule.documentPath,
|
|
163
|
+
revision: schedule.revision,
|
|
143
164
|
lastAuthorizedByName: null == schedule.lastAuthorizedBy ? null : authorizerNames.get(schedule.lastAuthorizedBy) ?? null
|
|
144
165
|
};
|
|
145
166
|
}));
|
|
@@ -153,5 +174,5 @@ const listScheduledPublications = createServerFn({
|
|
|
153
174
|
},
|
|
154
175
|
runtime: await scheduledPublicationRuntime()
|
|
155
176
|
};
|
|
156
|
-
});
|
|
177
|
+
}));
|
|
157
178
|
export { cancelCollectionDocumentScheduledPublish, confirmCollectionDocumentScheduledPublish, getScheduledPublicationRuntime, listScheduledPublications, scheduleCollectionDocumentPublish };
|
|
@@ -13,6 +13,8 @@ export interface SetListViewPreferenceInput {
|
|
|
13
13
|
desc?: boolean;
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
|
-
export declare const setListViewPreference: import("@tanstack/react-start").RequiredFetcher<
|
|
16
|
+
export declare const setListViewPreference: import("@tanstack/react-start").RequiredFetcher<readonly [import("@tanstack/react-start").FunctionMiddlewareAfterServer<{}, unknown, undefined, undefined, {
|
|
17
|
+
bylineExpectedSessionId: string | null;
|
|
18
|
+
}, undefined, undefined>], (input: SetListViewPreferenceInput) => SetListViewPreferenceInput, Promise<{
|
|
17
19
|
ok: true;
|
|
18
20
|
}>>;
|
|
@@ -4,9 +4,12 @@ import { getAdminRequestContext } from "@byline/client/server";
|
|
|
4
4
|
import { ERR_NOT_FOUND, getLogger } from "@byline/core";
|
|
5
5
|
import { ensureCollection } from "../../integrations/api-utils.js";
|
|
6
6
|
import { bylineCore } from "../../integrations/byline-core.js";
|
|
7
|
+
import { adminSessionMiddleware } from "../../integrations/session-middleware.js";
|
|
7
8
|
const setListViewPreference = createServerFn({
|
|
8
9
|
method: 'POST'
|
|
9
|
-
}).
|
|
10
|
+
}).middleware([
|
|
11
|
+
adminSessionMiddleware
|
|
12
|
+
]).validator((input)=>input).handler(async ({ data })=>{
|
|
10
13
|
const config = await ensureCollection(data.collection);
|
|
11
14
|
if (!config) throw ERR_NOT_FOUND({
|
|
12
15
|
message: 'Collection not found',
|
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { createServerFn } from "@tanstack/react-start";
|
|
2
2
|
import { getAdminBylineClient } from "@byline/client/server";
|
|
3
3
|
import { ensureCollection } from "../../integrations/api-utils.js";
|
|
4
|
+
import { adminSessionMiddleware } from "../../integrations/session-middleware.js";
|
|
4
5
|
const getCollectionStatsFn = createServerFn({
|
|
5
6
|
method: 'GET'
|
|
6
|
-
}).
|
|
7
|
+
}).middleware([
|
|
8
|
+
adminSessionMiddleware
|
|
9
|
+
]).validator((input)=>input).handler(async ({ data })=>{
|
|
7
10
|
const config = await ensureCollection(data.collection);
|
|
8
11
|
if (!config) return {
|
|
9
12
|
stats: []
|
|
@@ -5,26 +5,38 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Copyright (c) Infonomic Company Limited
|
|
7
7
|
*/
|
|
8
|
-
export declare const updateDocumentStatus: import("@tanstack/react-start").RequiredFetcher<undefined,
|
|
8
|
+
export declare const updateDocumentStatus: import("@tanstack/react-start").RequiredFetcher<readonly [import("@tanstack/react-start").FunctionMiddlewareAfterServer<{}, unknown, undefined, undefined, {
|
|
9
|
+
bylineExpectedSessionId: string | null;
|
|
10
|
+
}, undefined, undefined>], (input: {
|
|
11
|
+
expectedRevision: number;
|
|
9
12
|
collection: string;
|
|
10
13
|
id: string;
|
|
11
14
|
status: string;
|
|
12
15
|
}) => {
|
|
16
|
+
expectedRevision: number;
|
|
13
17
|
collection: string;
|
|
14
18
|
id: string;
|
|
15
19
|
status: string;
|
|
16
20
|
}, Promise<{
|
|
17
21
|
status: 'ok';
|
|
22
|
+
documentId: string;
|
|
23
|
+
revision: number;
|
|
18
24
|
previousStatus: string;
|
|
19
25
|
newStatus: string;
|
|
20
26
|
}>>;
|
|
21
|
-
export declare const unpublishDocument: import("@tanstack/react-start").RequiredFetcher<undefined,
|
|
27
|
+
export declare const unpublishDocument: import("@tanstack/react-start").RequiredFetcher<readonly [import("@tanstack/react-start").FunctionMiddlewareAfterServer<{}, unknown, undefined, undefined, {
|
|
28
|
+
bylineExpectedSessionId: string | null;
|
|
29
|
+
}, undefined, undefined>], (input: {
|
|
30
|
+
expectedRevision: number;
|
|
22
31
|
collection: string;
|
|
23
32
|
id: string;
|
|
24
33
|
}) => {
|
|
34
|
+
expectedRevision: number;
|
|
25
35
|
collection: string;
|
|
26
36
|
id: string;
|
|
27
37
|
}, Promise<{
|
|
28
38
|
status: 'ok';
|
|
39
|
+
documentId: string;
|
|
40
|
+
revision: number;
|
|
29
41
|
archivedCount: number;
|
|
30
42
|
}>>;
|
|
@@ -3,9 +3,13 @@ import { getAdminRequestContext } from "@byline/client/server";
|
|
|
3
3
|
import { ERR_NOT_FOUND, getLogger, getServerConfig } from "@byline/core";
|
|
4
4
|
import { changeDocumentStatus, unpublishDocument } from "@byline/core/services";
|
|
5
5
|
import { ensureCollection } from "../../integrations/api-utils.js";
|
|
6
|
+
import { adminSessionMiddleware } from "../../integrations/session-middleware.js";
|
|
7
|
+
import { withDocumentMutationErrors } from "../document-mutation-errors.js";
|
|
6
8
|
const updateDocumentStatus = createServerFn({
|
|
7
9
|
method: 'POST'
|
|
8
|
-
}).
|
|
10
|
+
}).middleware([
|
|
11
|
+
adminSessionMiddleware
|
|
12
|
+
]).validator((input)=>input).handler(withDocumentMutationErrors(async ({ data: input })=>{
|
|
9
13
|
const { collection: path, id, status: nextStatus } = input;
|
|
10
14
|
const logger = getLogger();
|
|
11
15
|
const config = await ensureCollection(path);
|
|
@@ -29,17 +33,22 @@ const updateDocumentStatus = createServerFn({
|
|
|
29
33
|
};
|
|
30
34
|
const result = await changeDocumentStatus(ctx, {
|
|
31
35
|
documentId: id,
|
|
36
|
+
expectedRevision: input.expectedRevision,
|
|
32
37
|
nextStatus
|
|
33
38
|
});
|
|
34
39
|
return {
|
|
35
40
|
status: 'ok',
|
|
41
|
+
documentId: result.documentId,
|
|
42
|
+
revision: result.revision,
|
|
36
43
|
previousStatus: result.previousStatus,
|
|
37
44
|
newStatus: result.newStatus
|
|
38
45
|
};
|
|
39
|
-
});
|
|
46
|
+
}));
|
|
40
47
|
const status_unpublishDocument = createServerFn({
|
|
41
48
|
method: 'POST'
|
|
42
|
-
}).
|
|
49
|
+
}).middleware([
|
|
50
|
+
adminSessionMiddleware
|
|
51
|
+
]).validator((input)=>input).handler(withDocumentMutationErrors(async ({ data: input })=>{
|
|
43
52
|
const { collection: path, id } = input;
|
|
44
53
|
const logger = getLogger();
|
|
45
54
|
const config = await ensureCollection(path);
|
|
@@ -62,18 +71,22 @@ const status_unpublishDocument = createServerFn({
|
|
|
62
71
|
requestContext: await getAdminRequestContext()
|
|
63
72
|
};
|
|
64
73
|
const result = await unpublishDocument(ctx, {
|
|
65
|
-
documentId: id
|
|
74
|
+
documentId: id,
|
|
75
|
+
expectedRevision: input.expectedRevision
|
|
66
76
|
});
|
|
67
77
|
if (0 === result.archivedCount) throw ERR_NOT_FOUND({
|
|
68
78
|
message: 'No published version found for this document',
|
|
69
79
|
details: {
|
|
70
80
|
documentId: id,
|
|
81
|
+
expectedRevision: input.expectedRevision,
|
|
71
82
|
collectionPath: path
|
|
72
83
|
}
|
|
73
84
|
}).log(logger);
|
|
74
85
|
return {
|
|
75
86
|
status: 'ok',
|
|
87
|
+
documentId: result.documentId,
|
|
88
|
+
revision: result.revision,
|
|
76
89
|
archivedCount: result.archivedCount
|
|
77
90
|
};
|
|
78
|
-
});
|
|
91
|
+
}));
|
|
79
92
|
export { status_unpublishDocument as unpublishDocument, updateDocumentStatus };
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import type { CollectionHandle, PlaceTreeNodeOptions, RemoveFromTreeOptions } from '@byline/client';
|
|
2
|
+
import { structuralReceipt } from '../structural-receipt.js';
|
|
2
3
|
/** Prefer the code; the marker survives transports that reconstruct a code-less Error. */
|
|
3
4
|
export declare function isTreeMutationConflict(error: unknown): boolean;
|
|
4
5
|
/** Detect when tree/audit committed even if transport reconstruction dropped the code. */
|
|
5
6
|
export declare function isCommittedTreeHookFailure(error: unknown): boolean;
|
|
6
7
|
export type AdminTreeMoveOutcome = {
|
|
7
8
|
status: 'ok';
|
|
9
|
+
receipt?: ReturnType<typeof structuralReceipt>;
|
|
8
10
|
} | {
|
|
9
11
|
status: 'suppressed';
|
|
10
12
|
} | {
|
|
@@ -18,6 +20,7 @@ export type AdminTreeMoveOutcome = {
|
|
|
18
20
|
} | {
|
|
19
21
|
status: 'refresh-failed';
|
|
20
22
|
error: unknown;
|
|
23
|
+
receipt?: ReturnType<typeof structuralReceipt>;
|
|
21
24
|
};
|
|
22
25
|
export interface AdminTreeMoveUiEffects {
|
|
23
26
|
rollback: boolean;
|
|
@@ -38,9 +41,7 @@ export interface AdminTreeMoveController {
|
|
|
38
41
|
}
|
|
39
42
|
/** Single-flight controller shared by pointer and keyboard tree moves. */
|
|
40
43
|
export declare function createAdminTreeMoveController(): AdminTreeMoveController;
|
|
41
|
-
/**
|
|
42
|
-
export declare function placeAdminTreeNode(handle: Pick<CollectionHandle, 'placeTreeNode'>, documentId: string, options: PlaceTreeNodeOptions):
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
/** Admin retries reconcile post-commit tree hooks unless explicitly disabled. */
|
|
46
|
-
export declare function removeAdminTreeNode(handle: Pick<CollectionHandle, 'removeFromTree'>, documentId: string, options?: RemoveFromTreeOptions): Promise<void>;
|
|
44
|
+
/** Request reconciliation for explicit caller actions; never retry or replace their revision. */
|
|
45
|
+
export declare function placeAdminTreeNode(handle: Pick<CollectionHandle, 'placeTreeNode'>, documentId: string, options: PlaceTreeNodeOptions): ReturnType<CollectionHandle['placeTreeNode']>;
|
|
46
|
+
/** Request reconciliation for explicit caller actions; never retry or replace their revision. */
|
|
47
|
+
export declare function removeAdminTreeNode(handle: Pick<CollectionHandle, 'removeFromTree'>, documentId: string, options: RemoveFromTreeOptions): ReturnType<CollectionHandle['removeFromTree']>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { ErrorCodes, TREE_HOOK_COMMITTED_MARKER, TREE_PLACEMENT_STALE_MARKER } from "@byline/core";
|
|
1
|
+
import { ErrorCodes, TREE_HOOK_COMMITTED_MARKER, TREE_PLACEMENT_STALE_MARKER, getDocumentRevisionValidationDetails, getDocumentStaleDetails, getLockConflictDetails } from "@byline/core";
|
|
2
|
+
import { structuralReceipt } from "../structural-receipt.js";
|
|
2
3
|
function hasErrorCode(error, code) {
|
|
3
4
|
return 'object' == typeof error && null != error && 'code' in error && error.code === code;
|
|
4
5
|
}
|
|
@@ -47,9 +48,14 @@ function shouldSyncAdminTreeRows(rows, preservedRows, isMoving) {
|
|
|
47
48
|
return !isMoving && rows !== preservedRows;
|
|
48
49
|
}
|
|
49
50
|
async function executeAdminTreeMove(mutate, refresh) {
|
|
51
|
+
let receipt;
|
|
50
52
|
try {
|
|
51
|
-
await mutate();
|
|
53
|
+
receipt = structuralReceipt(await mutate());
|
|
52
54
|
} catch (error) {
|
|
55
|
+
if (getDocumentStaleDetails(error) || getDocumentRevisionValidationDetails(error) || getLockConflictDetails(error) || hasErrorCode(error, ErrorCodes.NOT_FOUND)) return {
|
|
56
|
+
status: 'mutation-failed',
|
|
57
|
+
error
|
|
58
|
+
};
|
|
53
59
|
const status = isCommittedTreeHookFailure(error) ? 'committed-hook-failed' : 'mutation-failed';
|
|
54
60
|
try {
|
|
55
61
|
await refresh();
|
|
@@ -68,12 +74,18 @@ async function executeAdminTreeMove(mutate, refresh) {
|
|
|
68
74
|
try {
|
|
69
75
|
await refresh();
|
|
70
76
|
return {
|
|
71
|
-
status: 'ok'
|
|
77
|
+
status: 'ok',
|
|
78
|
+
...receipt ? {
|
|
79
|
+
receipt
|
|
80
|
+
} : {}
|
|
72
81
|
};
|
|
73
82
|
} catch (error) {
|
|
74
83
|
return {
|
|
75
84
|
status: 'refresh-failed',
|
|
76
|
-
error
|
|
85
|
+
error,
|
|
86
|
+
...receipt ? {
|
|
87
|
+
receipt
|
|
88
|
+
} : {}
|
|
77
89
|
};
|
|
78
90
|
}
|
|
79
91
|
}
|
|
@@ -100,7 +112,7 @@ function placeAdminTreeNode(handle, documentId, options) {
|
|
|
100
112
|
reconcile: options.reconcile ?? true
|
|
101
113
|
});
|
|
102
114
|
}
|
|
103
|
-
function removeAdminTreeNode(handle, documentId, options
|
|
115
|
+
function removeAdminTreeNode(handle, documentId, options) {
|
|
104
116
|
return handle.removeFromTree(documentId, {
|
|
105
117
|
...options,
|
|
106
118
|
reconcile: options.reconcile ?? true
|
|
@@ -5,7 +5,10 @@
|
|
|
5
5
|
*
|
|
6
6
|
* Copyright (c) Infonomic Company Limited
|
|
7
7
|
*/
|
|
8
|
-
export declare const placeTreeNode: import("@tanstack/react-start").RequiredFetcher<undefined,
|
|
8
|
+
export declare const placeTreeNode: import("@tanstack/react-start").RequiredFetcher<readonly [import("@tanstack/react-start").FunctionMiddlewareAfterServer<{}, unknown, undefined, undefined, {
|
|
9
|
+
bylineExpectedSessionId: string | null;
|
|
10
|
+
}, undefined, undefined>], (input: {
|
|
11
|
+
expectedRevision: number;
|
|
9
12
|
collection: string;
|
|
10
13
|
documentId: string;
|
|
11
14
|
parentDocumentId: string | null;
|
|
@@ -13,6 +16,7 @@ export declare const placeTreeNode: import("@tanstack/react-start").RequiredFetc
|
|
|
13
16
|
afterDocumentId?: string | null;
|
|
14
17
|
reconcile?: boolean;
|
|
15
18
|
}) => {
|
|
19
|
+
expectedRevision: number;
|
|
16
20
|
collection: string;
|
|
17
21
|
documentId: string;
|
|
18
22
|
parentDocumentId: string | null;
|
|
@@ -20,21 +24,35 @@ export declare const placeTreeNode: import("@tanstack/react-start").RequiredFetc
|
|
|
20
24
|
afterDocumentId?: string | null;
|
|
21
25
|
reconcile?: boolean;
|
|
22
26
|
}, Promise<{
|
|
23
|
-
|
|
27
|
+
documentId: string;
|
|
28
|
+
revision: number;
|
|
29
|
+
affectedDocuments: import("@byline/core").DocumentRevisionReceipt[];
|
|
30
|
+
scheduledPublicationsNeedReconfirmation: boolean;
|
|
24
31
|
orderKey: string;
|
|
32
|
+
status: 'ok';
|
|
25
33
|
}>>;
|
|
26
|
-
export declare const removeFromTree: import("@tanstack/react-start").RequiredFetcher<undefined,
|
|
34
|
+
export declare const removeFromTree: import("@tanstack/react-start").RequiredFetcher<readonly [import("@tanstack/react-start").FunctionMiddlewareAfterServer<{}, unknown, undefined, undefined, {
|
|
35
|
+
bylineExpectedSessionId: string | null;
|
|
36
|
+
}, undefined, undefined>], (input: {
|
|
37
|
+
expectedRevision: number;
|
|
27
38
|
collection: string;
|
|
28
39
|
documentId: string;
|
|
29
40
|
reconcile?: boolean;
|
|
30
41
|
}) => {
|
|
42
|
+
expectedRevision: number;
|
|
31
43
|
collection: string;
|
|
32
44
|
documentId: string;
|
|
33
45
|
reconcile?: boolean;
|
|
34
46
|
}, Promise<{
|
|
47
|
+
documentId: string;
|
|
48
|
+
revision: number;
|
|
49
|
+
affectedDocuments: import("@byline/core").DocumentRevisionReceipt[];
|
|
50
|
+
scheduledPublicationsNeedReconfirmation: boolean;
|
|
35
51
|
status: 'ok';
|
|
36
52
|
}>>;
|
|
37
|
-
export declare const getTreeAncestors: import("@tanstack/react-start").RequiredFetcher<undefined,
|
|
53
|
+
export declare const getTreeAncestors: import("@tanstack/react-start").RequiredFetcher<readonly [import("@tanstack/react-start").FunctionMiddlewareAfterServer<{}, unknown, undefined, undefined, {
|
|
54
|
+
bylineExpectedSessionId: string | null;
|
|
55
|
+
}, undefined, undefined>], (input: {
|
|
38
56
|
collection: string;
|
|
39
57
|
documentId: string;
|
|
40
58
|
}) => {
|
|
@@ -45,7 +63,9 @@ export declare const getTreeAncestors: import("@tanstack/react-start").RequiredF
|
|
|
45
63
|
title: string;
|
|
46
64
|
path: string;
|
|
47
65
|
}[]>>;
|
|
48
|
-
export declare const getTreeParent: import("@tanstack/react-start").RequiredFetcher<undefined,
|
|
66
|
+
export declare const getTreeParent: import("@tanstack/react-start").RequiredFetcher<readonly [import("@tanstack/react-start").FunctionMiddlewareAfterServer<{}, unknown, undefined, undefined, {
|
|
67
|
+
bylineExpectedSessionId: string | null;
|
|
68
|
+
}, undefined, undefined>], (input: {
|
|
49
69
|
collection: string;
|
|
50
70
|
documentId: string;
|
|
51
71
|
}) => {
|
|
@@ -53,6 +73,7 @@ export declare const getTreeParent: import("@tanstack/react-start").RequiredFetc
|
|
|
53
73
|
documentId: string;
|
|
54
74
|
}, Promise<import("@byline/client").TreeParentResult>>;
|
|
55
75
|
export interface CollectionTreeRow {
|
|
76
|
+
revision: number;
|
|
56
77
|
id: string;
|
|
57
78
|
/** Parent document id, or `null` for a root or unplaced node. Drives the
|
|
58
79
|
* client-side tree reconstruction for drag-to-reorder / re-parent. */
|
|
@@ -65,7 +86,9 @@ export interface CollectionTreeRow {
|
|
|
65
86
|
updatedAt: Date;
|
|
66
87
|
fields: Record<string, any>;
|
|
67
88
|
}
|
|
68
|
-
export declare const getCollectionTree: import("@tanstack/react-start").RequiredFetcher<undefined,
|
|
89
|
+
export declare const getCollectionTree: import("@tanstack/react-start").RequiredFetcher<readonly [import("@tanstack/react-start").FunctionMiddlewareAfterServer<{}, unknown, undefined, undefined, {
|
|
90
|
+
bylineExpectedSessionId: string | null;
|
|
91
|
+
}, undefined, undefined>], (input: {
|
|
69
92
|
collection: string;
|
|
70
93
|
locale?: string;
|
|
71
94
|
}) => {
|
|
@@ -2,11 +2,15 @@ import { createServerFn } from "@tanstack/react-start";
|
|
|
2
2
|
import { getAdminBylineClient } from "@byline/client/server";
|
|
3
3
|
import { ERR_NOT_FOUND, createReadContext, getLogger } from "@byline/core";
|
|
4
4
|
import { ensureCollection } from "../../integrations/api-utils.js";
|
|
5
|
+
import { adminSessionMiddleware } from "../../integrations/session-middleware.js";
|
|
6
|
+
import { withDocumentMutationErrors } from "../document-mutation-errors.js";
|
|
5
7
|
import { placeAdminTreeNode, removeAdminTreeNode } from "./tree-mutation.js";
|
|
6
|
-
import { getAdminTreeParent
|
|
8
|
+
import { getAdminTreeParent } from "./tree-read.js";
|
|
7
9
|
const placeTreeNode = createServerFn({
|
|
8
10
|
method: 'POST'
|
|
9
|
-
}).
|
|
11
|
+
}).middleware([
|
|
12
|
+
adminSessionMiddleware
|
|
13
|
+
]).validator((input)=>input).handler(withDocumentMutationErrors(async ({ data })=>{
|
|
10
14
|
const { collection: path, documentId } = data;
|
|
11
15
|
const config = await ensureCollection(path);
|
|
12
16
|
if (!config) throw ERR_NOT_FOUND({
|
|
@@ -17,6 +21,7 @@ const placeTreeNode = createServerFn({
|
|
|
17
21
|
}).log(getLogger());
|
|
18
22
|
const handle = getAdminBylineClient().collection(path);
|
|
19
23
|
const result = await placeAdminTreeNode(handle, documentId, {
|
|
24
|
+
expectedRevision: data.expectedRevision,
|
|
20
25
|
parentDocumentId: data.parentDocumentId,
|
|
21
26
|
beforeDocumentId: data.beforeDocumentId ?? null,
|
|
22
27
|
afterDocumentId: data.afterDocumentId ?? null,
|
|
@@ -24,12 +29,14 @@ const placeTreeNode = createServerFn({
|
|
|
24
29
|
});
|
|
25
30
|
return {
|
|
26
31
|
status: 'ok',
|
|
27
|
-
|
|
32
|
+
...result
|
|
28
33
|
};
|
|
29
|
-
});
|
|
34
|
+
}));
|
|
30
35
|
const removeFromTree = createServerFn({
|
|
31
36
|
method: 'POST'
|
|
32
|
-
}).
|
|
37
|
+
}).middleware([
|
|
38
|
+
adminSessionMiddleware
|
|
39
|
+
]).validator((input)=>input).handler(withDocumentMutationErrors(async ({ data })=>{
|
|
33
40
|
const { collection: path, documentId } = data;
|
|
34
41
|
const config = await ensureCollection(path);
|
|
35
42
|
if (!config) throw ERR_NOT_FOUND({
|
|
@@ -38,16 +45,20 @@ const removeFromTree = createServerFn({
|
|
|
38
45
|
collectionPath: path
|
|
39
46
|
}
|
|
40
47
|
}).log(getLogger());
|
|
41
|
-
await removeAdminTreeNode(getAdminBylineClient().collection(path), documentId, {
|
|
48
|
+
const result = await removeAdminTreeNode(getAdminBylineClient().collection(path), documentId, {
|
|
49
|
+
expectedRevision: data.expectedRevision,
|
|
42
50
|
reconcile: data.reconcile
|
|
43
51
|
});
|
|
44
52
|
return {
|
|
45
|
-
status: 'ok'
|
|
53
|
+
status: 'ok',
|
|
54
|
+
...result
|
|
46
55
|
};
|
|
47
|
-
});
|
|
56
|
+
}));
|
|
48
57
|
const getTreeAncestors = createServerFn({
|
|
49
58
|
method: 'GET'
|
|
50
|
-
}).
|
|
59
|
+
}).middleware([
|
|
60
|
+
adminSessionMiddleware
|
|
61
|
+
]).validator((input)=>input).handler(withDocumentMutationErrors(async ({ data })=>{
|
|
51
62
|
const { collection: path, documentId } = data;
|
|
52
63
|
const config = await ensureCollection(path);
|
|
53
64
|
if (!config) throw ERR_NOT_FOUND({
|
|
@@ -69,10 +80,12 @@ const getTreeAncestors = createServerFn({
|
|
|
69
80
|
path: doc.path
|
|
70
81
|
};
|
|
71
82
|
});
|
|
72
|
-
});
|
|
83
|
+
}));
|
|
73
84
|
const getTreeParent = createServerFn({
|
|
74
85
|
method: 'GET'
|
|
75
|
-
}).
|
|
86
|
+
}).middleware([
|
|
87
|
+
adminSessionMiddleware
|
|
88
|
+
]).validator((input)=>input).handler(withDocumentMutationErrors(async ({ data })=>{
|
|
76
89
|
const { collection: path, documentId } = data;
|
|
77
90
|
const config = await ensureCollection(path);
|
|
78
91
|
if (!config) throw ERR_NOT_FOUND({
|
|
@@ -82,10 +95,12 @@ const getTreeParent = createServerFn({
|
|
|
82
95
|
}
|
|
83
96
|
}).log(getLogger());
|
|
84
97
|
return getAdminTreeParent(getAdminBylineClient().collection(path), documentId);
|
|
85
|
-
});
|
|
98
|
+
}));
|
|
86
99
|
const getCollectionTree = createServerFn({
|
|
87
100
|
method: 'GET'
|
|
88
|
-
}).
|
|
101
|
+
}).middleware([
|
|
102
|
+
adminSessionMiddleware
|
|
103
|
+
]).validator((input)=>input).handler(withDocumentMutationErrors(async ({ data })=>{
|
|
89
104
|
const { collection: path } = data;
|
|
90
105
|
const config = await ensureCollection(path);
|
|
91
106
|
if (!config) throw ERR_NOT_FOUND({
|
|
@@ -96,8 +111,7 @@ const getCollectionTree = createServerFn({
|
|
|
96
111
|
}).log(getLogger());
|
|
97
112
|
const handle = getAdminBylineClient().collection(path);
|
|
98
113
|
const readContext = createReadContext();
|
|
99
|
-
const forest = await handle.
|
|
100
|
-
status: 'any',
|
|
114
|
+
const { forest, unplaced } = await handle.getTreeForEdit({
|
|
101
115
|
locale: data.locale,
|
|
102
116
|
_readContext: readContext
|
|
103
117
|
});
|
|
@@ -108,6 +122,7 @@ const getCollectionTree = createServerFn({
|
|
|
108
122
|
const doc = node.document;
|
|
109
123
|
rows.push({
|
|
110
124
|
id: doc.id,
|
|
125
|
+
revision: doc.revision,
|
|
111
126
|
parentId,
|
|
112
127
|
depth,
|
|
113
128
|
unplaced: false,
|
|
@@ -122,9 +137,9 @@ const getCollectionTree = createServerFn({
|
|
|
122
137
|
}
|
|
123
138
|
};
|
|
124
139
|
walk(forest, 0, null);
|
|
125
|
-
const unplaced = await getAdminUnplacedTreeDocuments(handle, placed, readContext, data.locale);
|
|
126
140
|
for (const doc of unplaced)rows.push({
|
|
127
141
|
id: doc.id,
|
|
142
|
+
revision: doc.revision,
|
|
128
143
|
parentId: null,
|
|
129
144
|
depth: 0,
|
|
130
145
|
unplaced: true,
|
|
@@ -143,5 +158,5 @@ const getCollectionTree = createServerFn({
|
|
|
143
158
|
}
|
|
144
159
|
}
|
|
145
160
|
};
|
|
146
|
-
});
|
|
161
|
+
}));
|
|
147
162
|
export { getCollectionTree, getTreeAncestors, getTreeParent, placeTreeNode, removeFromTree };
|
|
@@ -6,26 +6,36 @@
|
|
|
6
6
|
* Copyright (c) Infonomic Company Limited
|
|
7
7
|
*/
|
|
8
8
|
import type { DocumentPatch } from '@byline/core/patches';
|
|
9
|
-
export declare const updateCollectionDocumentWithPatches: import("@tanstack/react-start").RequiredFetcher<undefined,
|
|
9
|
+
export declare const updateCollectionDocumentWithPatches: import("@tanstack/react-start").RequiredFetcher<readonly [import("@tanstack/react-start").FunctionMiddlewareAfterServer<{}, unknown, undefined, undefined, {
|
|
10
|
+
bylineExpectedSessionId: string | null;
|
|
11
|
+
}, undefined, undefined>], (input: {
|
|
10
12
|
collection: string;
|
|
11
13
|
id: string;
|
|
12
14
|
patches: DocumentPatch[];
|
|
13
|
-
|
|
15
|
+
expectedRevision: number;
|
|
16
|
+
path?: string | null;
|
|
17
|
+
availableLocales?: string[];
|
|
14
18
|
locale?: string;
|
|
15
19
|
}) => {
|
|
16
20
|
collection: string;
|
|
17
21
|
id: string;
|
|
18
22
|
patches: DocumentPatch[];
|
|
19
|
-
|
|
23
|
+
expectedRevision: number;
|
|
24
|
+
path?: string | null;
|
|
25
|
+
availableLocales?: string[];
|
|
20
26
|
locale?: string;
|
|
21
27
|
}, Promise<import("./save-outcome.js").CollectionDocumentCommittedHookFailureResponse | {
|
|
22
28
|
status: 'ok';
|
|
23
29
|
documentId: string;
|
|
24
|
-
documentVersionId
|
|
30
|
+
documentVersionId?: string | undefined;
|
|
31
|
+
revision: number;
|
|
25
32
|
}>>;
|
|
26
|
-
export declare const updateCollectionDocumentSystemFields: import("@tanstack/react-start").RequiredFetcher<undefined,
|
|
33
|
+
export declare const updateCollectionDocumentSystemFields: import("@tanstack/react-start").RequiredFetcher<readonly [import("@tanstack/react-start").FunctionMiddlewareAfterServer<{}, unknown, undefined, undefined, {
|
|
34
|
+
bylineExpectedSessionId: string | null;
|
|
35
|
+
}, undefined, undefined>], (input: {
|
|
27
36
|
collection: string;
|
|
28
37
|
id: string;
|
|
38
|
+
expectedRevision: number;
|
|
29
39
|
locale?: string;
|
|
30
40
|
/** Path override; `null`/omitted means no path write. */
|
|
31
41
|
path?: string | null;
|
|
@@ -34,11 +44,13 @@ export declare const updateCollectionDocumentSystemFields: import("@tanstack/rea
|
|
|
34
44
|
}) => {
|
|
35
45
|
collection: string;
|
|
36
46
|
id: string;
|
|
47
|
+
expectedRevision: number;
|
|
37
48
|
locale?: string;
|
|
38
49
|
/** Path override; `null`/omitted means no path write. */
|
|
39
50
|
path?: string | null;
|
|
40
51
|
/** Editorial advertised-locale set; omitted means no advertised-locale write. */
|
|
41
52
|
availableLocales?: string[];
|
|
42
|
-
}, Promise<{
|
|
53
|
+
}, Promise<import("./save-outcome.js").CollectionDocumentCommittedHookFailureResponse | {
|
|
43
54
|
status: 'ok';
|
|
55
|
+
revision: number;
|
|
44
56
|
}>>;
|