@byline/host-tanstack-start 5.0.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/integrations/byline-admin-services.js +7 -1
- 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-sign-in-route.js +4 -2
- 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 +10 -1
- package/dist/server-fns/collections/copy-to-locale.js +5 -2
- package/dist/server-fns/collections/create.d.ts +10 -1
- package/dist/server-fns/collections/create.js +5 -2
- package/dist/server-fns/collections/delete-locale.d.ts +10 -1
- package/dist/server-fns/collections/delete-locale.js +5 -2
- package/dist/server-fns/collections/delete.d.ts +10 -1
- package/dist/server-fns/collections/delete.js +5 -2
- package/dist/server-fns/collections/duplicate.d.ts +10 -1
- package/dist/server-fns/collections/duplicate.js +5 -2
- package/dist/server-fns/collections/get.d.ts +7 -0
- package/dist/server-fns/collections/get.js +8 -3
- 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 +10 -1
- package/dist/server-fns/collections/list.js +5 -2
- 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 -1
- package/dist/server-fns/collections/reorder.js +5 -2
- package/dist/server-fns/collections/restore-version.d.ts +10 -1
- package/dist/server-fns/collections/restore-version.js +5 -2
- package/dist/server-fns/collections/scheduled-publication.d.ts +22 -5
- package/dist/server-fns/collections/scheduled-publication.js +17 -6
- 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 +13 -2
- package/dist/server-fns/collections/status.js +8 -3
- package/dist/server-fns/collections/tree.d.ts +22 -5
- package/dist/server-fns/collections/tree.js +17 -6
- package/dist/server-fns/collections/update.d.ts +13 -2
- package/dist/server-fns/collections/update.js +8 -3
- package/dist/server-fns/collections/upload.d.ts +10 -1
- package/dist/server-fns/collections/upload.js +4 -1
- 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/singletons/cancel-scheduled-publish.d.ts +10 -1
- package/dist/server-fns/singletons/cancel-scheduled-publish.js +5 -2
- package/dist/server-fns/singletons/change-status.d.ts +10 -1
- package/dist/server-fns/singletons/change-status.js +5 -2
- package/dist/server-fns/singletons/confirm-scheduled-publish.d.ts +10 -1
- package/dist/server-fns/singletons/confirm-scheduled-publish.js +5 -2
- package/dist/server-fns/singletons/copy-to-locale.d.ts +10 -1
- package/dist/server-fns/singletons/copy-to-locale.js +5 -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 +3 -1
- 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 +10 -1
- package/dist/server-fns/singletons/restore-version.js +5 -2
- package/dist/server-fns/singletons/schedule-publish.d.ts +10 -1
- package/dist/server-fns/singletons/schedule-publish.js +5 -2
- package/dist/server-fns/singletons/unpublish.d.ts +10 -1
- package/dist/server-fns/singletons/unpublish.js +5 -2
- package/dist/server-fns/singletons/update.d.ts +10 -1
- package/dist/server-fns/singletons/update.js +5 -2
- package/package.json +19 -19
- 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/integrations/byline-admin-services.ts +7 -1
- 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-sign-in-route.tsx +10 -2
- 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 +3 -1
- package/src/server-fns/collections/create.ts +3 -1
- package/src/server-fns/collections/delete-locale.ts +3 -1
- package/src/server-fns/collections/delete.ts +3 -1
- package/src/server-fns/collections/duplicate.ts +3 -1
- package/src/server-fns/collections/get.ts +4 -1
- package/src/server-fns/collections/history.ts +2 -0
- package/src/server-fns/collections/list.ts +3 -1
- package/src/server-fns/collections/reindex.ts +2 -0
- package/src/server-fns/collections/reorder.ts +3 -1
- package/src/server-fns/collections/restore-version.ts +3 -1
- package/src/server-fns/collections/revision-input.test.node.ts +14 -0
- package/src/server-fns/collections/scheduled-publication.ts +14 -7
- 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 +4 -1
- package/src/server-fns/collections/tree.ts +7 -1
- package/src/server-fns/collections/update.ts +4 -1
- package/src/server-fns/collections/upload-singleton.test.node.ts +8 -1
- package/src/server-fns/collections/upload.ts +10 -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/singletons/cancel-scheduled-publish.ts +3 -1
- package/src/server-fns/singletons/change-status.ts +3 -1
- package/src/server-fns/singletons/confirm-scheduled-publish.ts +3 -1
- package/src/server-fns/singletons/copy-to-locale.ts +3 -1
- 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 +2 -0
- package/src/server-fns/singletons/history.ts +2 -0
- package/src/server-fns/singletons/restore-version.ts +3 -1
- package/src/server-fns/singletons/schedule-publish.ts +3 -1
- package/src/server-fns/singletons/singletons.test.node.ts +6 -0
- package/src/server-fns/singletons/unpublish.ts +3 -1
- package/src/server-fns/singletons/update.ts +3 -1
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
2
1
|
/**
|
|
3
2
|
* This Source Code is subject to the terms of the Mozilla Public
|
|
4
3
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
@@ -15,6 +14,8 @@ import type { DocumentLifecycleContext } from '@byline/core/services'
|
|
|
15
14
|
import { restoreDocumentVersion as restoreDocumentVersionService } from '@byline/core/services'
|
|
16
15
|
|
|
17
16
|
import { ensureCollection } from '../../integrations/api-utils.js'
|
|
17
|
+
import { adminSessionMiddleware } from '../../integrations/session-middleware.js'
|
|
18
|
+
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
18
19
|
import { toCommittedDocumentHookFailureResponse } from './save-outcome.js'
|
|
19
20
|
|
|
20
21
|
// ---------------------------------------------------------------------------
|
|
@@ -22,6 +23,7 @@ import { toCommittedDocumentHookFailureResponse } from './save-outcome.js'
|
|
|
22
23
|
// ---------------------------------------------------------------------------
|
|
23
24
|
|
|
24
25
|
export const restoreDocumentVersion = createServerFn({ method: 'POST' })
|
|
26
|
+
.middleware([adminSessionMiddleware])
|
|
25
27
|
.validator(
|
|
26
28
|
(input: { expectedRevision: number; collection: string; id: string; versionId: string }) =>
|
|
27
29
|
input
|
|
@@ -1,3 +1,14 @@
|
|
|
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
|
+
// Handler-level tests isolate transport; session-middleware tests exercise the real pre-handler boundary.
|
|
10
|
+
vi.mock('../../integrations/session-middleware.js', () => ({ adminSessionMiddleware: {} }))
|
|
11
|
+
|
|
1
12
|
import { createSuperAdminContext } from '@byline/auth'
|
|
2
13
|
import {
|
|
3
14
|
defineCollection,
|
|
@@ -16,6 +27,9 @@ vi.mock('@tanstack/react-start', () => ({
|
|
|
16
27
|
createServerFn: () => {
|
|
17
28
|
let validate = (value: unknown) => value
|
|
18
29
|
const chain = {
|
|
30
|
+
middleware() {
|
|
31
|
+
return chain
|
|
32
|
+
},
|
|
19
33
|
validator(fn: (value: unknown) => unknown) {
|
|
20
34
|
validate = fn
|
|
21
35
|
return chain
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
2
1
|
/**
|
|
3
2
|
* This Source Code is subject to the terms of the Mozilla Public
|
|
4
3
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
@@ -22,6 +21,8 @@ import {
|
|
|
22
21
|
import { listDocumentPublishSchedules } from '@byline/core/services'
|
|
23
22
|
|
|
24
23
|
import { bylineCore } from '../../integrations/byline-core.js'
|
|
24
|
+
import { adminSessionMiddleware } from '../../integrations/session-middleware.js'
|
|
25
|
+
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
25
26
|
import { omitScheduleExecutionState } from './scheduled-publication-response.js'
|
|
26
27
|
import { serialise } from './utils.js'
|
|
27
28
|
|
|
@@ -138,14 +139,17 @@ async function scheduledPublicationRuntime(): Promise<ScheduledPublicationRuntim
|
|
|
138
139
|
}
|
|
139
140
|
|
|
140
141
|
/** Authenticated feature discovery for the admin shell and health warning. */
|
|
141
|
-
export const getScheduledPublicationRuntime = createServerFn({ method: 'GET' })
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
)
|
|
142
|
+
export const getScheduledPublicationRuntime = createServerFn({ method: 'GET' })
|
|
143
|
+
.middleware([adminSessionMiddleware])
|
|
144
|
+
.handler(
|
|
145
|
+
withDocumentMutationErrors(async () => {
|
|
146
|
+
await getAdminRequestContext()
|
|
147
|
+
return scheduledPublicationRuntime()
|
|
148
|
+
})
|
|
149
|
+
)
|
|
147
150
|
|
|
148
151
|
export const scheduleCollectionDocumentPublish = createServerFn({ method: 'POST' })
|
|
152
|
+
.middleware([adminSessionMiddleware])
|
|
149
153
|
.validator(
|
|
150
154
|
(input: {
|
|
151
155
|
expectedRevision: number
|
|
@@ -170,6 +174,7 @@ export const scheduleCollectionDocumentPublish = createServerFn({ method: 'POST'
|
|
|
170
174
|
)
|
|
171
175
|
|
|
172
176
|
export const confirmCollectionDocumentScheduledPublish = createServerFn({ method: 'POST' })
|
|
177
|
+
.middleware([adminSessionMiddleware])
|
|
173
178
|
.validator(
|
|
174
179
|
(input: {
|
|
175
180
|
expectedRevision: number
|
|
@@ -192,6 +197,7 @@ export const confirmCollectionDocumentScheduledPublish = createServerFn({ method
|
|
|
192
197
|
)
|
|
193
198
|
|
|
194
199
|
export const cancelCollectionDocumentScheduledPublish = createServerFn({ method: 'POST' })
|
|
200
|
+
.middleware([adminSessionMiddleware])
|
|
195
201
|
.validator((input: { expectedRevision: number; collection: string; id: string }) => input)
|
|
196
202
|
.handler(
|
|
197
203
|
withDocumentMutationErrors(async ({ data }) => {
|
|
@@ -210,6 +216,7 @@ export const cancelCollectionDocumentScheduledPublish = createServerFn({ method:
|
|
|
210
216
|
)
|
|
211
217
|
|
|
212
218
|
export const listScheduledPublications = createServerFn({ method: 'GET' })
|
|
219
|
+
.middleware([adminSessionMiddleware])
|
|
213
220
|
.validator(
|
|
214
221
|
(input: {
|
|
215
222
|
states?: readonly DocumentPublishScheduleState[]
|
|
@@ -27,6 +27,7 @@ import { ERR_NOT_FOUND, getLogger } from '@byline/core'
|
|
|
27
27
|
|
|
28
28
|
import { ensureCollection } from '../../integrations/api-utils.js'
|
|
29
29
|
import { bylineCore } from '../../integrations/byline-core.js'
|
|
30
|
+
import { adminSessionMiddleware } from '../../integrations/session-middleware.js'
|
|
30
31
|
|
|
31
32
|
export interface SetListViewPreferenceInput {
|
|
32
33
|
collection: string
|
|
@@ -38,6 +39,7 @@ export interface SetListViewPreferenceInput {
|
|
|
38
39
|
}
|
|
39
40
|
|
|
40
41
|
export const setListViewPreference = createServerFn({ method: 'POST' })
|
|
42
|
+
.middleware([adminSessionMiddleware])
|
|
41
43
|
.validator((input: SetListViewPreferenceInput) => input)
|
|
42
44
|
.handler(async ({ data }) => {
|
|
43
45
|
// Scopes are keyed by collection path — refuse to mint rows for
|
|
@@ -11,6 +11,7 @@ import { createServerFn } from '@tanstack/react-start'
|
|
|
11
11
|
import { getAdminBylineClient } from '@byline/client/server'
|
|
12
12
|
|
|
13
13
|
import { ensureCollection } from '../../integrations/api-utils.js'
|
|
14
|
+
import { adminSessionMiddleware } from '../../integrations/session-middleware.js'
|
|
14
15
|
|
|
15
16
|
// ---------------------------------------------------------------------------
|
|
16
17
|
// Shared types
|
|
@@ -26,6 +27,7 @@ export interface CollectionStatusCount {
|
|
|
26
27
|
// ---------------------------------------------------------------------------
|
|
27
28
|
|
|
28
29
|
const getCollectionStatsFn = createServerFn({ method: 'GET' })
|
|
30
|
+
.middleware([adminSessionMiddleware])
|
|
29
31
|
.validator((input: { collection: string }) => input)
|
|
30
32
|
.handler(async ({ data }) => {
|
|
31
33
|
const config = await ensureCollection(data.collection)
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
2
1
|
/**
|
|
3
2
|
* This Source Code is subject to the terms of the Mozilla Public
|
|
4
3
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
@@ -18,12 +17,15 @@ import {
|
|
|
18
17
|
} from '@byline/core/services'
|
|
19
18
|
|
|
20
19
|
import { ensureCollection } from '../../integrations/api-utils.js'
|
|
20
|
+
import { adminSessionMiddleware } from '../../integrations/session-middleware.js'
|
|
21
|
+
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
21
22
|
|
|
22
23
|
// ---------------------------------------------------------------------------
|
|
23
24
|
// Change document workflow status
|
|
24
25
|
// ---------------------------------------------------------------------------
|
|
25
26
|
|
|
26
27
|
export const updateDocumentStatus = createServerFn({ method: 'POST' })
|
|
28
|
+
.middleware([adminSessionMiddleware])
|
|
27
29
|
.validator(
|
|
28
30
|
(input: { expectedRevision: number; collection: string; id: string; status: string }) => input
|
|
29
31
|
)
|
|
@@ -72,6 +74,7 @@ export const updateDocumentStatus = createServerFn({ method: 'POST' })
|
|
|
72
74
|
// ---------------------------------------------------------------------------
|
|
73
75
|
|
|
74
76
|
export const unpublishDocument = createServerFn({ method: 'POST' })
|
|
77
|
+
.middleware([adminSessionMiddleware])
|
|
75
78
|
.validator((input: { expectedRevision: number; collection: string; id: string }) => input)
|
|
76
79
|
.handler(
|
|
77
80
|
withDocumentMutationErrors(async ({ data: input }) => {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
2
1
|
/**
|
|
3
2
|
* This Source Code is subject to the terms of the Mozilla Public
|
|
4
3
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
@@ -21,6 +20,8 @@ import { getAdminBylineClient } from '@byline/client/server'
|
|
|
21
20
|
import { createReadContext, ERR_NOT_FOUND, getLogger } from '@byline/core'
|
|
22
21
|
|
|
23
22
|
import { ensureCollection } from '../../integrations/api-utils.js'
|
|
23
|
+
import { adminSessionMiddleware } from '../../integrations/session-middleware.js'
|
|
24
|
+
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
24
25
|
import { placeAdminTreeNode, removeAdminTreeNode } from './tree-mutation.js'
|
|
25
26
|
import { getAdminTreeParent } from './tree-read.js'
|
|
26
27
|
|
|
@@ -29,6 +30,7 @@ import { getAdminTreeParent } from './tree-read.js'
|
|
|
29
30
|
// ---------------------------------------------------------------------------
|
|
30
31
|
|
|
31
32
|
export const placeTreeNode = createServerFn({ method: 'POST' })
|
|
33
|
+
.middleware([adminSessionMiddleware])
|
|
32
34
|
.validator(
|
|
33
35
|
(input: {
|
|
34
36
|
expectedRevision: number
|
|
@@ -67,6 +69,7 @@ export const placeTreeNode = createServerFn({ method: 'POST' })
|
|
|
67
69
|
// ---------------------------------------------------------------------------
|
|
68
70
|
|
|
69
71
|
export const removeFromTree = createServerFn({ method: 'POST' })
|
|
72
|
+
.middleware([adminSessionMiddleware])
|
|
70
73
|
.validator(
|
|
71
74
|
(input: {
|
|
72
75
|
expectedRevision: number
|
|
@@ -102,6 +105,7 @@ export const removeFromTree = createServerFn({ method: 'POST' })
|
|
|
102
105
|
// ---------------------------------------------------------------------------
|
|
103
106
|
|
|
104
107
|
export const getTreeAncestors = createServerFn({ method: 'GET' })
|
|
108
|
+
.middleware([adminSessionMiddleware])
|
|
105
109
|
.validator((input: { collection: string; documentId: string }) => input)
|
|
106
110
|
.handler(
|
|
107
111
|
withDocumentMutationErrors(async ({ data }) => {
|
|
@@ -135,6 +139,7 @@ export const getTreeAncestors = createServerFn({ method: 'GET' })
|
|
|
135
139
|
// ---------------------------------------------------------------------------
|
|
136
140
|
|
|
137
141
|
export const getTreeParent = createServerFn({ method: 'GET' })
|
|
142
|
+
.middleware([adminSessionMiddleware])
|
|
138
143
|
.validator((input: { collection: string; documentId: string }) => input)
|
|
139
144
|
.handler(
|
|
140
145
|
withDocumentMutationErrors(async ({ data }) => {
|
|
@@ -173,6 +178,7 @@ export interface CollectionTreeRow {
|
|
|
173
178
|
}
|
|
174
179
|
|
|
175
180
|
export const getCollectionTree = createServerFn({ method: 'GET' })
|
|
181
|
+
.middleware([adminSessionMiddleware])
|
|
176
182
|
.validator((input: { collection: string; locale?: string }) => input)
|
|
177
183
|
.handler(
|
|
178
184
|
withDocumentMutationErrors(async ({ data }) => {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
2
1
|
/**
|
|
3
2
|
* This Source Code is subject to the terms of the Mozilla Public
|
|
4
3
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
@@ -16,6 +15,8 @@ import type { DocumentLifecycleContext } from '@byline/core/services'
|
|
|
16
15
|
import { saveDocument, updateDocumentSystemFields } from '@byline/core/services'
|
|
17
16
|
|
|
18
17
|
import { ensureCollection } from '../../integrations/api-utils.js'
|
|
18
|
+
import { adminSessionMiddleware } from '../../integrations/session-middleware.js'
|
|
19
|
+
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
19
20
|
import { toCommittedDocumentHookFailureResponse } from './save-outcome.js'
|
|
20
21
|
|
|
21
22
|
// ---------------------------------------------------------------------------
|
|
@@ -24,6 +25,7 @@ import { toCommittedDocumentHookFailureResponse } from './save-outcome.js'
|
|
|
24
25
|
// ---------------------------------------------------------------------------
|
|
25
26
|
|
|
26
27
|
export const updateCollectionDocumentWithPatches = createServerFn({ method: 'POST' })
|
|
28
|
+
.middleware([adminSessionMiddleware])
|
|
27
29
|
.validator(
|
|
28
30
|
(input: {
|
|
29
31
|
collection: string
|
|
@@ -102,6 +104,7 @@ export const updateCollectionDocumentWithPatches = createServerFn({ method: 'POS
|
|
|
102
104
|
// ---------------------------------------------------------------------------
|
|
103
105
|
|
|
104
106
|
export const updateCollectionDocumentSystemFields = createServerFn({ method: 'POST' })
|
|
107
|
+
.middleware([adminSessionMiddleware])
|
|
105
108
|
.validator(
|
|
106
109
|
(input: {
|
|
107
110
|
collection: string
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { testAdapter } from '../../../../core/src/storage/db-adapter.test-helper.js'
|
|
2
1
|
/**
|
|
3
2
|
* This Source Code is subject to the terms of the Mozilla Public
|
|
4
3
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
@@ -21,6 +20,9 @@ vi.mock('@tanstack/react-start', () => ({
|
|
|
21
20
|
createServerFn: () => {
|
|
22
21
|
let validate = (input: unknown) => input
|
|
23
22
|
const chain = {
|
|
23
|
+
middleware() {
|
|
24
|
+
return chain
|
|
25
|
+
},
|
|
24
26
|
validator(validator: (input: unknown) => unknown) {
|
|
25
27
|
validate = validator
|
|
26
28
|
return chain
|
|
@@ -50,6 +52,11 @@ vi.mock('../../integrations/byline-core.js', () => ({
|
|
|
50
52
|
import { ensureCollection, ensureDocumentResource } from '../../integrations/api-utils.js'
|
|
51
53
|
import { uploadField } from './upload.js'
|
|
52
54
|
|
|
55
|
+
// Handler-level tests isolate transport; session-middleware tests exercise the real pre-handler boundary.
|
|
56
|
+
vi.mock('../../integrations/session-middleware.js', () => ({ adminSessionMiddleware: {} }))
|
|
57
|
+
|
|
58
|
+
import { testAdapter } from '../../../../core/src/storage/db-adapter.test-helper.js'
|
|
59
|
+
|
|
53
60
|
const SERVER_CONFIG = Symbol.for('__byline_server_config__')
|
|
54
61
|
const BYLINE_LOGGER = Symbol.for('__byline_logger__')
|
|
55
62
|
const previousServer = (globalThis as Record<PropertyKey, unknown>)[SERVER_CONFIG]
|
|
@@ -1,3 +1,11 @@
|
|
|
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
|
+
|
|
1
9
|
import { createServerFn } from '@tanstack/react-start'
|
|
2
10
|
|
|
3
11
|
import { getAdminRequestContext } from '@byline/client/server'
|
|
@@ -14,6 +22,7 @@ import { getLogger, withLogContext } from '@byline/core/logger'
|
|
|
14
22
|
import { uploadField as coreUploadField } from '@byline/core/services'
|
|
15
23
|
|
|
16
24
|
import { ensureDocumentResource } from '../../integrations/api-utils.js'
|
|
25
|
+
import { adminSessionMiddleware } from '../../integrations/session-middleware.js'
|
|
17
26
|
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
18
27
|
|
|
19
28
|
/**
|
|
@@ -150,6 +159,7 @@ function resolveUploadField(
|
|
|
150
159
|
* without depending on TanStack Start server-function transport details.
|
|
151
160
|
*/
|
|
152
161
|
export const uploadCollectionField = createServerFn({ method: 'POST' })
|
|
162
|
+
.middleware([adminSessionMiddleware])
|
|
153
163
|
.validator(parseUploadFormData)
|
|
154
164
|
.handler(
|
|
155
165
|
withDocumentMutationErrors(async ({ data }) => {
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* switcher works on the sign-in surface — the DB write simply skips.
|
|
26
26
|
*/
|
|
27
27
|
|
|
28
|
-
import { createServerFn } from '@tanstack/react-start'
|
|
28
|
+
import { createMiddleware, createServerFn } from '@tanstack/react-start'
|
|
29
29
|
|
|
30
30
|
import type { AccountResponse } from '@byline/admin/admin-account'
|
|
31
31
|
import { setPreferredLocaleCommand } from '@byline/admin/admin-account'
|
|
@@ -34,6 +34,7 @@ import { getAdminRequestContext } from '@byline/client/server'
|
|
|
34
34
|
|
|
35
35
|
import { clearAdminLocaleCookie, setAdminLocaleCookie } from '../../i18n/locale-cookie.js'
|
|
36
36
|
import { bylineCore } from '../../integrations/byline-core.js'
|
|
37
|
+
import { expectedSession } from '../../integrations/session-coordination.js'
|
|
37
38
|
|
|
38
39
|
export interface SetAdminLocaleInput {
|
|
39
40
|
/** BCP 47 tag, or `null` to clear the preference. */
|
|
@@ -53,9 +54,18 @@ export interface SetAdminLocaleResult {
|
|
|
53
54
|
account: AccountResponse | null
|
|
54
55
|
}
|
|
55
56
|
|
|
57
|
+
const localeSession = createMiddleware({ type: 'function' }).client(({ next }) =>
|
|
58
|
+
next({
|
|
59
|
+
sendContext: {
|
|
60
|
+
expectedSessionId: expectedSession(),
|
|
61
|
+
},
|
|
62
|
+
})
|
|
63
|
+
)
|
|
64
|
+
|
|
56
65
|
export const setAdminLocaleFn = createServerFn({ method: 'POST' })
|
|
66
|
+
.middleware([localeSession])
|
|
57
67
|
.validator((input: SetAdminLocaleInput) => input)
|
|
58
|
-
.handler(async ({ data }): Promise<SetAdminLocaleResult> => {
|
|
68
|
+
.handler(async ({ data, context: caller }): Promise<SetAdminLocaleResult> => {
|
|
59
69
|
const core = bylineCore()
|
|
60
70
|
const locales = core.config.i18n.admin.locales
|
|
61
71
|
|
|
@@ -87,6 +97,9 @@ export const setAdminLocaleFn = createServerFn({ method: 'POST' })
|
|
|
87
97
|
|
|
88
98
|
try {
|
|
89
99
|
const context = await getAdminRequestContext()
|
|
100
|
+
if (!caller.expectedSessionId || caller.expectedSessionId !== context.sessionId) {
|
|
101
|
+
return { ok: true as const, locale: data.locale, account: null }
|
|
102
|
+
}
|
|
90
103
|
const account = await setPreferredLocaleCommand(
|
|
91
104
|
context,
|
|
92
105
|
{ locale: data.locale },
|
|
@@ -94,7 +107,10 @@ export const setAdminLocaleFn = createServerFn({ method: 'POST' })
|
|
|
94
107
|
)
|
|
95
108
|
return { ok: true as const, locale: data.locale, account }
|
|
96
109
|
} catch (err) {
|
|
97
|
-
if (
|
|
110
|
+
if (
|
|
111
|
+
err instanceof AuthError &&
|
|
112
|
+
(err.code === AuthErrorCodes.UNAUTHENTICATED || err.code === AuthErrorCodes.ACCESS_EXPIRED)
|
|
113
|
+
) {
|
|
98
114
|
// Expected on the pre-auth path. Cookie already written.
|
|
99
115
|
return { ok: true as const, locale: data.locale, account: null }
|
|
100
116
|
}
|
|
@@ -18,7 +18,11 @@ import { createServerFn } from '@tanstack/react-start'
|
|
|
18
18
|
|
|
19
19
|
import { clearPreviewCookie } from '@byline/client/server'
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
import { adminSessionMiddleware } from '../../integrations/session-middleware.js'
|
|
22
|
+
|
|
23
|
+
export const disablePreviewModeFn = createServerFn({ method: 'POST' })
|
|
24
|
+
.middleware([adminSessionMiddleware])
|
|
25
|
+
.handler(async () => {
|
|
26
|
+
clearPreviewCookie()
|
|
27
|
+
return { status: 'ok' as const, preview: false as const }
|
|
28
|
+
})
|
|
@@ -19,8 +19,12 @@ import { createServerFn } from '@tanstack/react-start'
|
|
|
19
19
|
|
|
20
20
|
import { getAdminRequestContext, setPreviewCookie } from '@byline/client/server'
|
|
21
21
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
import { adminSessionMiddleware } from '../../integrations/session-middleware.js'
|
|
23
|
+
|
|
24
|
+
export const enablePreviewModeFn = createServerFn({ method: 'POST' })
|
|
25
|
+
.middleware([adminSessionMiddleware])
|
|
26
|
+
.handler(async () => {
|
|
27
|
+
await getAdminRequestContext()
|
|
28
|
+
setPreviewCookie()
|
|
29
|
+
return { status: 'ok' as const, preview: true as const }
|
|
30
|
+
})
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
2
1
|
/**
|
|
3
2
|
* This Source Code is subject to the terms of the Mozilla Public
|
|
4
3
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
@@ -11,9 +10,12 @@ import { createServerFn } from '@tanstack/react-start'
|
|
|
11
10
|
|
|
12
11
|
import { getAdminBylineClient } from '@byline/client/server'
|
|
13
12
|
|
|
13
|
+
import { adminSessionMiddleware } from '../../integrations/session-middleware.js'
|
|
14
|
+
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
14
15
|
import { serialise } from '../serialise.js'
|
|
15
16
|
|
|
16
17
|
export const cancelSingletonScheduledPublish = createServerFn({ method: 'POST' })
|
|
18
|
+
.middleware([adminSessionMiddleware])
|
|
17
19
|
.validator((input: { expectedRevision: number; singleton: string }) => input)
|
|
18
20
|
.handler(
|
|
19
21
|
withDocumentMutationErrors(async ({ data }) =>
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
2
1
|
/**
|
|
3
2
|
* This Source Code is subject to the terms of the Mozilla Public
|
|
4
3
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
@@ -11,9 +10,12 @@ import { createServerFn } from '@tanstack/react-start'
|
|
|
11
10
|
|
|
12
11
|
import { getAdminBylineClient } from '@byline/client/server'
|
|
13
12
|
|
|
13
|
+
import { adminSessionMiddleware } from '../../integrations/session-middleware.js'
|
|
14
|
+
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
14
15
|
import { serialise } from '../serialise.js'
|
|
15
16
|
|
|
16
17
|
export const changeSingletonStatus = createServerFn({ method: 'POST' })
|
|
18
|
+
.middleware([adminSessionMiddleware])
|
|
17
19
|
.validator((input: { expectedRevision: number; singleton: string; status: string }) => input)
|
|
18
20
|
.handler(
|
|
19
21
|
withDocumentMutationErrors(async ({ data }) =>
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
2
1
|
/**
|
|
3
2
|
* This Source Code is subject to the terms of the Mozilla Public
|
|
4
3
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
@@ -11,9 +10,12 @@ import { createServerFn } from '@tanstack/react-start'
|
|
|
11
10
|
|
|
12
11
|
import { getAdminBylineClient } from '@byline/client/server'
|
|
13
12
|
|
|
13
|
+
import { adminSessionMiddleware } from '../../integrations/session-middleware.js'
|
|
14
|
+
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
14
15
|
import { serialise } from '../serialise.js'
|
|
15
16
|
|
|
16
17
|
export const confirmSingletonScheduledPublish = createServerFn({ method: 'POST' })
|
|
18
|
+
.middleware([adminSessionMiddleware])
|
|
17
19
|
.validator(
|
|
18
20
|
(input: { expectedRevision: number; singleton: string; expectedVersionId: string }) => input
|
|
19
21
|
)
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
2
1
|
/**
|
|
3
2
|
* This Source Code is subject to the terms of the Mozilla Public
|
|
4
3
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
@@ -11,10 +10,13 @@ import { createServerFn } from '@tanstack/react-start'
|
|
|
11
10
|
|
|
12
11
|
import { getAdminBylineClient } from '@byline/client/server'
|
|
13
12
|
|
|
13
|
+
import { adminSessionMiddleware } from '../../integrations/session-middleware.js'
|
|
14
14
|
import { toCommittedDocumentHookFailureResponse } from '../collections/save-outcome.js'
|
|
15
|
+
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
15
16
|
import { serialise } from '../serialise.js'
|
|
16
17
|
|
|
17
18
|
export const copySingletonToLocale = createServerFn({ method: 'POST' })
|
|
19
|
+
.middleware([adminSessionMiddleware])
|
|
18
20
|
.validator(
|
|
19
21
|
(input: {
|
|
20
22
|
expectedRevision: number
|
|
@@ -10,9 +10,11 @@ import { createServerFn } from '@tanstack/react-start'
|
|
|
10
10
|
|
|
11
11
|
import { getAdminBylineClient } from '@byline/client/server'
|
|
12
12
|
|
|
13
|
+
import { adminSessionMiddleware } from '../../integrations/session-middleware.js'
|
|
13
14
|
import { serialise } from '../serialise.js'
|
|
14
15
|
|
|
15
16
|
export const findSingletonByVersion = createServerFn({ method: 'GET' })
|
|
17
|
+
.middleware([adminSessionMiddleware])
|
|
16
18
|
.validator((input: { singleton: string; versionId: string; locale?: string }) => input)
|
|
17
19
|
.handler(async ({ data }) =>
|
|
18
20
|
serialise(
|
|
@@ -10,9 +10,11 @@ import { createServerFn } from '@tanstack/react-start'
|
|
|
10
10
|
|
|
11
11
|
import { getAdminBylineClient } from '@byline/client/server'
|
|
12
12
|
|
|
13
|
+
import { adminSessionMiddleware } from '../../integrations/session-middleware.js'
|
|
13
14
|
import { serialise } from '../serialise.js'
|
|
14
15
|
|
|
15
16
|
export const getSingletonScheduledPublish = createServerFn({ method: 'GET' })
|
|
17
|
+
.middleware([adminSessionMiddleware])
|
|
16
18
|
.validator((input: { singleton: string }) => input)
|
|
17
19
|
.handler(async ({ data }) =>
|
|
18
20
|
serialise(await getAdminBylineClient().singleton(data.singleton).getScheduledPublish())
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
|
|
9
9
|
import { createServerFn } from '@tanstack/react-start'
|
|
10
10
|
|
|
11
|
+
import { adminSessionMiddleware } from '../../integrations/session-middleware.js'
|
|
11
12
|
import { readSingletonDocument } from '../singleton-document-read.js'
|
|
12
13
|
|
|
13
14
|
export interface GetSingletonInput {
|
|
@@ -28,5 +29,6 @@ export interface GetSingletonInput {
|
|
|
28
29
|
* from the same editable snapshot as the source document.
|
|
29
30
|
*/
|
|
30
31
|
export const getSingleton = createServerFn({ method: 'GET' })
|
|
32
|
+
.middleware([adminSessionMiddleware])
|
|
31
33
|
.validator((input: GetSingletonInput) => input)
|
|
32
34
|
.handler(async ({ data }) => readSingletonDocument(data))
|
|
@@ -10,6 +10,7 @@ import { createServerFn } from '@tanstack/react-start'
|
|
|
10
10
|
|
|
11
11
|
import { getAdminBylineClient } from '@byline/client/server'
|
|
12
12
|
|
|
13
|
+
import { adminSessionMiddleware } from '../../integrations/session-middleware.js'
|
|
13
14
|
import { type ActorLabelMap, resolveActorLabels } from '../actors.js'
|
|
14
15
|
import { serialise } from '../serialise.js'
|
|
15
16
|
|
|
@@ -22,6 +23,7 @@ export interface SingletonHistorySearchParams {
|
|
|
22
23
|
}
|
|
23
24
|
|
|
24
25
|
export const getSingletonHistory = createServerFn({ method: 'GET' })
|
|
26
|
+
.middleware([adminSessionMiddleware])
|
|
25
27
|
.validator((input: { singleton: string; params?: SingletonHistorySearchParams }) => input)
|
|
26
28
|
.handler(async ({ data }) => {
|
|
27
29
|
const params = data.params ?? {}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
2
1
|
/**
|
|
3
2
|
* This Source Code is subject to the terms of the Mozilla Public
|
|
4
3
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
@@ -11,10 +10,13 @@ import { createServerFn } from '@tanstack/react-start'
|
|
|
11
10
|
|
|
12
11
|
import { getAdminBylineClient } from '@byline/client/server'
|
|
13
12
|
|
|
13
|
+
import { adminSessionMiddleware } from '../../integrations/session-middleware.js'
|
|
14
14
|
import { toCommittedDocumentHookFailureResponse } from '../collections/save-outcome.js'
|
|
15
|
+
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
15
16
|
import { serialise } from '../serialise.js'
|
|
16
17
|
|
|
17
18
|
export const restoreSingletonVersion = createServerFn({ method: 'POST' })
|
|
19
|
+
.middleware([adminSessionMiddleware])
|
|
18
20
|
.validator((input: { expectedRevision: number; singleton: string; versionId: string }) => input)
|
|
19
21
|
.handler(
|
|
20
22
|
withDocumentMutationErrors(async ({ data }) => {
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
2
1
|
/**
|
|
3
2
|
* This Source Code is subject to the terms of the Mozilla Public
|
|
4
3
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
@@ -11,9 +10,12 @@ import { createServerFn } from '@tanstack/react-start'
|
|
|
11
10
|
|
|
12
11
|
import { getAdminBylineClient } from '@byline/client/server'
|
|
13
12
|
|
|
13
|
+
import { adminSessionMiddleware } from '../../integrations/session-middleware.js'
|
|
14
|
+
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
14
15
|
import { serialise } from '../serialise.js'
|
|
15
16
|
|
|
16
17
|
export const scheduleSingletonPublish = createServerFn({ method: 'POST' })
|
|
18
|
+
.middleware([adminSessionMiddleware])
|
|
17
19
|
.validator(
|
|
18
20
|
(input: {
|
|
19
21
|
expectedRevision: number
|
|
@@ -23,6 +23,9 @@ vi.mock('@tanstack/react-start', () => ({
|
|
|
23
23
|
createServerFn: () => {
|
|
24
24
|
let validate = (input: unknown) => input
|
|
25
25
|
const chain = {
|
|
26
|
+
middleware() {
|
|
27
|
+
return chain
|
|
28
|
+
},
|
|
26
29
|
validator(validator: (input: unknown) => unknown) {
|
|
27
30
|
validate = validator
|
|
28
31
|
return chain
|
|
@@ -56,6 +59,9 @@ import { scheduleSingletonPublish } from './schedule-publish.js'
|
|
|
56
59
|
import { unpublishSingleton } from './unpublish.js'
|
|
57
60
|
import { updateSingleton } from './update.js'
|
|
58
61
|
|
|
62
|
+
// Handler-level tests isolate transport; session-middleware tests exercise the real pre-handler boundary.
|
|
63
|
+
vi.mock('../../integrations/session-middleware.js', () => ({ adminSessionMiddleware: {} }))
|
|
64
|
+
|
|
59
65
|
type ServerFunction = (options: { data: any }) => Promise<any>
|
|
60
66
|
|
|
61
67
|
const invoke = (serverFunction: unknown, data: Record<string, any>) =>
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
2
1
|
/**
|
|
3
2
|
* This Source Code is subject to the terms of the Mozilla Public
|
|
4
3
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
@@ -11,9 +10,12 @@ import { createServerFn } from '@tanstack/react-start'
|
|
|
11
10
|
|
|
12
11
|
import { getAdminBylineClient } from '@byline/client/server'
|
|
13
12
|
|
|
13
|
+
import { adminSessionMiddleware } from '../../integrations/session-middleware.js'
|
|
14
|
+
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
14
15
|
import { serialise } from '../serialise.js'
|
|
15
16
|
|
|
16
17
|
export const unpublishSingleton = createServerFn({ method: 'POST' })
|
|
18
|
+
.middleware([adminSessionMiddleware])
|
|
17
19
|
.validator((input: { expectedRevision: number; singleton: string }) => input)
|
|
18
20
|
.handler(
|
|
19
21
|
withDocumentMutationErrors(async ({ data }) =>
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
2
1
|
/**
|
|
3
2
|
* This Source Code is subject to the terms of the Mozilla Public
|
|
4
3
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
@@ -12,7 +11,9 @@ import { createServerFn } from '@tanstack/react-start'
|
|
|
12
11
|
import { getAdminBylineClient } from '@byline/client/server'
|
|
13
12
|
import type { SingletonSavePrecondition } from '@byline/core'
|
|
14
13
|
|
|
14
|
+
import { adminSessionMiddleware } from '../../integrations/session-middleware.js'
|
|
15
15
|
import { toCommittedDocumentHookFailureResponse } from '../collections/save-outcome.js'
|
|
16
|
+
import { withDocumentMutationErrors } from '../document-mutation-errors.js'
|
|
16
17
|
import { serialise } from '../serialise.js'
|
|
17
18
|
|
|
18
19
|
export type UpdateSingletonInput = SingletonSavePrecondition & {
|
|
@@ -22,6 +23,7 @@ export type UpdateSingletonInput = SingletonSavePrecondition & {
|
|
|
22
23
|
}
|
|
23
24
|
|
|
24
25
|
export const updateSingleton = createServerFn({ method: 'POST' })
|
|
26
|
+
.middleware([adminSessionMiddleware])
|
|
25
27
|
.validator((input: UpdateSingletonInput) => input)
|
|
26
28
|
.handler(
|
|
27
29
|
withDocumentMutationErrors(async ({ data }) => {
|