@forge-cms/runtime 0.4.0 → 0.6.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/auth-managed.d.ts +19 -0
- package/dist/auth-managed.d.ts.map +1 -0
- package/dist/auth-managed.js +24 -0
- package/dist/auth-managed.js.map +1 -0
- package/dist/concurrency.d.ts +8 -0
- package/dist/concurrency.d.ts.map +1 -0
- package/dist/concurrency.js +15 -0
- package/dist/concurrency.js.map +1 -0
- package/dist/context.d.ts +5 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/errors.d.ts +29 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +38 -0
- package/dist/errors.js.map +1 -1
- package/dist/files.d.ts +15 -1
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +55 -14
- package/dist/files.js.map +1 -1
- package/dist/globals.d.ts +21 -3
- package/dist/globals.d.ts.map +1 -1
- package/dist/globals.js +240 -31
- package/dist/globals.js.map +1 -1
- package/dist/handlers.d.ts +16 -9
- package/dist/handlers.d.ts.map +1 -1
- package/dist/handlers.js +63 -99
- package/dist/handlers.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -4
- package/dist/index.js.map +1 -1
- package/dist/localization.d.ts +17 -0
- package/dist/localization.d.ts.map +1 -1
- package/dist/localization.js +56 -0
- package/dist/localization.js.map +1 -1
- package/dist/operations.d.ts +89 -0
- package/dist/operations.d.ts.map +1 -1
- package/dist/operations.js +824 -116
- package/dist/operations.js.map +1 -1
- package/dist/populate.d.ts +23 -3
- package/dist/populate.d.ts.map +1 -1
- package/dist/populate.js +40 -8
- package/dist/populate.js.map +1 -1
- package/dist/read-policy.d.ts +35 -0
- package/dist/read-policy.d.ts.map +1 -0
- package/dist/read-policy.js +59 -0
- package/dist/read-policy.js.map +1 -0
- package/dist/relation-integrity.d.ts +90 -11
- package/dist/relation-integrity.d.ts.map +1 -1
- package/dist/relation-integrity.js +145 -60
- package/dist/relation-integrity.js.map +1 -1
- package/dist/relation-lifecycle.d.ts +95 -0
- package/dist/relation-lifecycle.d.ts.map +1 -0
- package/dist/relation-lifecycle.js +424 -0
- package/dist/relation-lifecycle.js.map +1 -0
- package/dist/runtime.d.ts +26 -2
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +120 -49
- package/dist/runtime.js.map +1 -1
- package/dist/storage-intents.d.ts +96 -0
- package/dist/storage-intents.d.ts.map +1 -0
- package/dist/storage-intents.js +217 -0
- package/dist/storage-intents.js.map +1 -0
- package/dist/system-fields.d.ts +27 -0
- package/dist/system-fields.d.ts.map +1 -0
- package/dist/system-fields.js +74 -0
- package/dist/system-fields.js.map +1 -0
- package/dist/typed-api.d.ts +2 -2
- package/dist/typed-api.d.ts.map +1 -1
- package/dist/versions.d.ts +76 -6
- package/dist/versions.d.ts.map +1 -1
- package/dist/versions.js +258 -44
- package/dist/versions.js.map +1 -1
- package/package.json +9 -7
package/dist/globals.js
CHANGED
|
@@ -1,10 +1,55 @@
|
|
|
1
1
|
import { validateCollection } from '@forge-cms/core';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
2
|
+
import { isAtomicWriteConditionError, isUniqueConstraintError as isDbUniqueConstraintError } from '@forge-cms/db';
|
|
3
|
+
import { AccessDeniedError, ConcurrentModificationError, ForgeError, InvalidInputError, NotFoundError, ValidationFailedError } from './errors.js';
|
|
4
|
+
import { documentMatches, resolveAccess } from './access.js';
|
|
5
|
+
import { afterStamp } from './concurrency.js';
|
|
6
|
+
import { applyAutoSlugs, applyFieldDefaults } from './defaults.js';
|
|
7
|
+
import { statusConstraint } from './read-policy.js';
|
|
8
|
+
import { populateRecord } from './populate.js';
|
|
5
9
|
import { runAfterChangeHooks, runAfterOperationHooks, runAfterReadHooks, runBeforeChangeHooks, runBeforeOperationHooks, runBeforeValidateHooks, runFieldHooks } from './hooks.js';
|
|
6
10
|
import { assertWritableFields, filterReadableFields, FieldAccessError } from './field-access.js';
|
|
11
|
+
import { screenHookOutput, screenUpdateInput } from './system-fields.js';
|
|
12
|
+
import { isLocalizedField, resolveLocalizedDocument, storeLocalizedDocument } from './localization.js';
|
|
13
|
+
import { collectWrittenTargets, targetAssertions, verifyTargetsExist } from './relation-lifecycle.js';
|
|
7
14
|
const GLOBAL_ID = 'global';
|
|
15
|
+
/**
|
|
16
|
+
* The global options that exist on the shared collection types but can never apply to a singleton that
|
|
17
|
+
* is never created through `create` nor deleted (spec 066): delete hooks, and `create`/`delete` access
|
|
18
|
+
* rules. Refused at startup instead of being accepted and silently ignored. One message per problem.
|
|
19
|
+
* (Localized fields of globals are checked with collections', by `validateLocalizationSchema`.)
|
|
20
|
+
*/
|
|
21
|
+
export function validateGlobalSchema(globals) {
|
|
22
|
+
const errors = [];
|
|
23
|
+
for (const global of globals) {
|
|
24
|
+
const label = `Global '${global.slug}'`;
|
|
25
|
+
for (const hook of ['beforeDelete', 'afterDelete']) {
|
|
26
|
+
if ((global.hooks?.[hook]?.length ?? 0) > 0) {
|
|
27
|
+
errors.push(`${label} declares ${hook} hooks, but a global is never deleted, so they could never run (spec 066). Remove them.`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
for (const rule of ['create', 'delete']) {
|
|
31
|
+
if (global.access?.[rule] !== undefined) {
|
|
32
|
+
errors.push(`${label} declares access.${rule}, but a global only has read and update: its first write is ` +
|
|
33
|
+
`an update and it is never deleted, so this rule could never apply (spec 066). Gate the ` +
|
|
34
|
+
`first write with access.update.`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
return errors;
|
|
39
|
+
}
|
|
40
|
+
/** The collection-shaped view of a global the shared pipeline stages (hooks, validation, locales) take. */
|
|
41
|
+
function proxyOf(global) {
|
|
42
|
+
return { ...global, upload: false };
|
|
43
|
+
}
|
|
44
|
+
function assertKnownLocale(global, locale) {
|
|
45
|
+
if (locale === undefined)
|
|
46
|
+
return;
|
|
47
|
+
if (!global.locales?.includes(locale)) {
|
|
48
|
+
throw new InvalidInputError(global.locales && global.locales.length > 0
|
|
49
|
+
? `Unknown locale '${locale}' for global '${global.slug}'; expected one of ${global.locales.map((l) => `'${l}'`).join(', ')}`
|
|
50
|
+
: `Global '${global.slug}' is not localized; locale '${locale}' cannot be written`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
8
53
|
function getGlobalOrThrow(ctx, slug) {
|
|
9
54
|
const global = ctx.getGlobal(slug);
|
|
10
55
|
if (!global)
|
|
@@ -42,17 +87,27 @@ async function prepareGlobalForRead(ctx, global, record, args) {
|
|
|
42
87
|
return null;
|
|
43
88
|
const user = args.user ?? null;
|
|
44
89
|
const overrideAccess = args.overrideAccess !== false;
|
|
90
|
+
const collectionProxy = proxyOf(global);
|
|
45
91
|
let doc = record;
|
|
92
|
+
if (args.depth === 1) {
|
|
93
|
+
doc = await populateRecord(doc, collectionProxy, ctx, {
|
|
94
|
+
user,
|
|
95
|
+
...(args.overrideAccess !== undefined && { overrideAccess: args.overrideAccess })
|
|
96
|
+
});
|
|
97
|
+
}
|
|
46
98
|
if (args.overrideAccess === false) {
|
|
47
|
-
doc = await filterReadableFields(doc,
|
|
99
|
+
doc = await filterReadableFields(doc, collectionProxy, user);
|
|
48
100
|
}
|
|
49
|
-
|
|
101
|
+
if (args.locale !== undefined) {
|
|
102
|
+
doc = resolveLocalizedDocument(doc, collectionProxy, args.locale);
|
|
103
|
+
}
|
|
104
|
+
const withFieldHooks = await runFieldHooks(collectionProxy, 'afterRead', {
|
|
50
105
|
data: doc,
|
|
51
106
|
operation: 'read',
|
|
52
107
|
user,
|
|
53
108
|
overrideAccess
|
|
54
109
|
});
|
|
55
|
-
return runAfterReadHooks(
|
|
110
|
+
return runAfterReadHooks(collectionProxy, { user, overrideAccess, doc: withFieldHooks });
|
|
56
111
|
}
|
|
57
112
|
/**
|
|
58
113
|
* Reads the singleton global document. Returns `null` if the global has never been written.
|
|
@@ -62,8 +117,31 @@ export async function getGlobal(ctx, args) {
|
|
|
62
117
|
const user = args.user ?? null;
|
|
63
118
|
const overrideAccess = args.overrideAccess !== false;
|
|
64
119
|
await runBeforeOperationHooks({ ...global, upload: false }, { operation: 'read', user, overrideAccess });
|
|
65
|
-
await checkGlobalAccess(global, 'read', args);
|
|
120
|
+
const decision = await checkGlobalAccess(global, 'read', args);
|
|
66
121
|
const record = await ctx.adapters.database.findById(`_global_${global.slug}`, GLOBAL_ID);
|
|
122
|
+
// Spec 066: a query-returning read rule is a row-level grant, as on a collection read. A global row
|
|
123
|
+
// it does not match reads as `null` — the same answer as "never configured", confirming nothing.
|
|
124
|
+
if (record && decision.where && !documentMatches(record, decision.where)) {
|
|
125
|
+
await runAfterOperationHooks(proxyOf(global), {
|
|
126
|
+
operation: 'read',
|
|
127
|
+
user,
|
|
128
|
+
overrideAccess,
|
|
129
|
+
result: null
|
|
130
|
+
});
|
|
131
|
+
return null;
|
|
132
|
+
}
|
|
133
|
+
// Draft visibility (spec 058 §8): a global was previously written but never gated its own
|
|
134
|
+
// `_status` on read, so an anonymous caller could read a global's unpublished draft content the
|
|
135
|
+
// exact same way an anonymous single-document read of a `drafts: true` collection cannot. Mirrors
|
|
136
|
+
// `findByID`'s "known id" reasoning — any authenticated caller sees a draft global, since there is
|
|
137
|
+
// no listing surface for globals to leak it through; anonymous is restricted to published. A hidden
|
|
138
|
+
// draft resolves to the same `null` as "never configured" rather than a distinct error, so neither
|
|
139
|
+
// shape confirms whether the global has ever been written.
|
|
140
|
+
const draftStatus = statusConstraint({ ...global, upload: false }, undefined, user, overrideAccess, 'all');
|
|
141
|
+
if (record && draftStatus && !documentMatches(record, draftStatus)) {
|
|
142
|
+
await runAfterOperationHooks({ ...global, upload: false }, { operation: 'read', user, overrideAccess, result: null });
|
|
143
|
+
return null;
|
|
144
|
+
}
|
|
67
145
|
if (!record) {
|
|
68
146
|
await runAfterOperationHooks({ ...global, upload: false }, { operation: 'read', user, overrideAccess, result: null });
|
|
69
147
|
return null;
|
|
@@ -73,23 +151,39 @@ export async function getGlobal(ctx, args) {
|
|
|
73
151
|
return doc;
|
|
74
152
|
}
|
|
75
153
|
/**
|
|
76
|
-
* Creates or updates the singleton global document. Unlike collections, globals always have
|
|
77
|
-
*
|
|
154
|
+
* Creates or updates the singleton global document. Unlike collections, globals always have exactly one
|
|
155
|
+
* document — the first write creates it, later writes update it.
|
|
156
|
+
*
|
|
157
|
+
* Later writes are **partial**, exactly like a collection `update()` (spec 066): omitted fields keep
|
|
158
|
+
* their stored values (defaults and the draft status apply to the first write only), validation runs on
|
|
159
|
+
* the merged document, and a `locale` write changes that locale of each `localized` field and keeps the
|
|
160
|
+
* others. A query-returning `access.update` rule must match the stored row, and cannot authorize the
|
|
161
|
+
* first write (there is no row to match). Two simultaneous first writes: one commits, the other gets
|
|
162
|
+
* `409 CONCURRENT_MODIFICATION` with nothing written.
|
|
78
163
|
*/
|
|
79
164
|
export async function updateGlobal(ctx, args) {
|
|
80
165
|
const global = getGlobalOrThrow(ctx, args.global);
|
|
81
166
|
const user = args.user ?? null;
|
|
82
167
|
const overrideAccess = args.overrideAccess !== false;
|
|
83
|
-
const collectionProxy =
|
|
168
|
+
const collectionProxy = proxyOf(global);
|
|
169
|
+
assertKnownLocale(global, args.locale);
|
|
84
170
|
await runBeforeOperationHooks(collectionProxy, { operation: 'update', user, overrideAccess });
|
|
85
171
|
const existing = await ctx.adapters.database.findById(`_global_${global.slug}`, GLOBAL_ID);
|
|
86
|
-
|
|
172
|
+
const operation = existing ? 'update' : 'create';
|
|
173
|
+
const decision = await checkGlobalAccess(global, 'update', {
|
|
87
174
|
...args,
|
|
88
175
|
...(existing !== null && { doc: existing })
|
|
89
176
|
});
|
|
177
|
+
if (decision.where && !(existing && documentMatches(existing, decision.where))) {
|
|
178
|
+
throw new AccessDeniedError();
|
|
179
|
+
}
|
|
180
|
+
// Spec 063: a global row's `id`/timestamps/`_storageKey` belong to Forge. Echoes of the stored row
|
|
181
|
+
// are dropped; before the first write there is nothing to echo, so any of them is refused.
|
|
182
|
+
const stored = existing ?? {};
|
|
183
|
+
const input = screenUpdateInput(args.data, stored);
|
|
90
184
|
if (args.overrideAccess === false) {
|
|
91
185
|
try {
|
|
92
|
-
await assertWritableFields(
|
|
186
|
+
await assertWritableFields(input, collectionProxy, user, operation);
|
|
93
187
|
}
|
|
94
188
|
catch (err) {
|
|
95
189
|
if (err instanceof FieldAccessError)
|
|
@@ -97,33 +191,61 @@ export async function updateGlobal(ctx, args) {
|
|
|
97
191
|
throw err;
|
|
98
192
|
}
|
|
99
193
|
}
|
|
100
|
-
|
|
194
|
+
// A locale write merges into the stored per-locale maps, so it is derived from `existing` and must
|
|
195
|
+
// commit only while the row is still the one it was merged from (compare-and-set below).
|
|
196
|
+
const localized = storeLocalizedDocument(input, collectionProxy, args.locale, existing ?? undefined);
|
|
197
|
+
const mergesLocales = existing !== null &&
|
|
198
|
+
args.locale !== undefined &&
|
|
199
|
+
Object.keys(input).some((name) => {
|
|
200
|
+
const field = global.fields[name];
|
|
201
|
+
return field !== undefined && isLocalizedField(field);
|
|
202
|
+
});
|
|
203
|
+
const seeded = existing
|
|
204
|
+
? applyAutoSlugs(collectionProxy, localized, existing)
|
|
205
|
+
: applyAutoSlugs(collectionProxy, applyFieldDefaults(collectionProxy, localized));
|
|
101
206
|
let data = await runRejectableStage(async () => runBeforeValidateHooks(collectionProxy, {
|
|
102
|
-
operation
|
|
207
|
+
operation,
|
|
103
208
|
data: await runFieldHooks(collectionProxy, 'beforeValidate', {
|
|
104
209
|
data: seeded,
|
|
105
|
-
|
|
210
|
+
...(existing !== null && { previousData: existing }),
|
|
211
|
+
operation,
|
|
106
212
|
user,
|
|
107
213
|
overrideAccess
|
|
108
214
|
}),
|
|
215
|
+
...(existing !== null && { previousData: existing }),
|
|
109
216
|
user,
|
|
110
217
|
overrideAccess
|
|
111
218
|
}), 'beforeValidate hook');
|
|
112
|
-
|
|
219
|
+
data = screenHookOutput(data, stored, 'beforeValidate', `global '${global.slug}'`);
|
|
220
|
+
if (global.drafts === true && !existing && data._status === undefined) {
|
|
113
221
|
data = { ...data, _status: 'draft' };
|
|
114
222
|
}
|
|
115
223
|
if (data._status !== undefined && data._status !== 'draft' && data._status !== 'published') {
|
|
116
224
|
throw new InvalidInputError(`Invalid status '${String(data._status)}', expected 'draft' or 'published'`);
|
|
117
225
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
226
|
+
if (existing) {
|
|
227
|
+
// As a collection update: validate the merged document, report only what the caller can act on.
|
|
228
|
+
const validation = validateCollection(collectionProxy, { ...existing, ...data });
|
|
229
|
+
if (!validation.valid) {
|
|
230
|
+
const relevant = validation.errors.filter((e) => {
|
|
231
|
+
const top = e.field.split('.')[0] ?? e.field;
|
|
232
|
+
return data[top] !== undefined || existing[top] === undefined;
|
|
233
|
+
});
|
|
234
|
+
if (relevant.length > 0)
|
|
235
|
+
throw new ValidationFailedError(relevant);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
const validation = validateCollection(collectionProxy, data);
|
|
240
|
+
if (!validation.valid)
|
|
241
|
+
throw new ValidationFailedError(validation.errors);
|
|
242
|
+
}
|
|
121
243
|
data = await runRejectableStage(async () => runBeforeChangeHooks(collectionProxy, {
|
|
122
|
-
operation
|
|
244
|
+
operation,
|
|
123
245
|
data: await runFieldHooks(collectionProxy, 'beforeChange', {
|
|
124
246
|
data,
|
|
125
247
|
...(existing !== null && { previousData: existing }),
|
|
126
|
-
operation
|
|
248
|
+
operation,
|
|
127
249
|
user,
|
|
128
250
|
overrideAccess
|
|
129
251
|
}),
|
|
@@ -131,16 +253,22 @@ export async function updateGlobal(ctx, args) {
|
|
|
131
253
|
user,
|
|
132
254
|
overrideAccess
|
|
133
255
|
}), 'beforeChange hook');
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
256
|
+
data = screenHookOutput(data, stored, 'beforeChange', `global '${global.slug}'`);
|
|
257
|
+
// A global's relation/upload targets must exist, now and when it commits (spec 064 §4) — a global
|
|
258
|
+
// reference restricts deletion of its target, so it must never be written pointing at nothing.
|
|
259
|
+
const targets = collectWrittenTargets(global.fields, data, existing ?? undefined);
|
|
260
|
+
if (targets.size > 0)
|
|
261
|
+
await verifyTargetsExist(ctx, targets);
|
|
262
|
+
const record = await writeGlobal(ctx, {
|
|
263
|
+
global,
|
|
264
|
+
data,
|
|
265
|
+
existing,
|
|
266
|
+
compareAndSet: mergesLocales,
|
|
267
|
+
accessWhere: decision.where,
|
|
268
|
+
assertions: targets.size > 0 ? targetAssertions(targets) : []
|
|
269
|
+
});
|
|
142
270
|
await runAfterChangeHooks(collectionProxy, {
|
|
143
|
-
operation
|
|
271
|
+
operation,
|
|
144
272
|
data,
|
|
145
273
|
...(existing !== null && { previousData: existing }),
|
|
146
274
|
result: record,
|
|
@@ -148,7 +276,9 @@ export async function updateGlobal(ctx, args) {
|
|
|
148
276
|
user,
|
|
149
277
|
overrideAccess
|
|
150
278
|
});
|
|
151
|
-
|
|
279
|
+
// Being allowed to write the global is not permission to read it back (spec 068).
|
|
280
|
+
const readable = args.overrideAccess !== false || (await canReadGlobal(global, record, user));
|
|
281
|
+
const doc = readable ? await prepareGlobalForRead(ctx, global, record, args) : { id: GLOBAL_ID };
|
|
152
282
|
const result = doc ?? record;
|
|
153
283
|
await runAfterOperationHooks(collectionProxy, {
|
|
154
284
|
operation: 'update',
|
|
@@ -158,4 +288,83 @@ export async function updateGlobal(ctx, args) {
|
|
|
158
288
|
});
|
|
159
289
|
return result;
|
|
160
290
|
}
|
|
291
|
+
/** The read gate `getGlobal` applies, as a yes/no for the row just written. */
|
|
292
|
+
async function canReadGlobal(global, record, user) {
|
|
293
|
+
let decision;
|
|
294
|
+
try {
|
|
295
|
+
decision = await checkGlobalAccess(global, 'read', { user, overrideAccess: false });
|
|
296
|
+
}
|
|
297
|
+
catch (err) {
|
|
298
|
+
if (err instanceof AccessDeniedError)
|
|
299
|
+
return false;
|
|
300
|
+
throw err;
|
|
301
|
+
}
|
|
302
|
+
if (decision.where && !documentMatches(record, decision.where))
|
|
303
|
+
return false;
|
|
304
|
+
const status = statusConstraint(proxyOf(global), undefined, user, false, 'all');
|
|
305
|
+
return !status || documentMatches(record, status);
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Persists a prepared global write. The first write is a `create` of the fixed `global` row: of two
|
|
309
|
+
* simultaneous first writers, the row's primary key lets exactly one commit, and the other becomes a
|
|
310
|
+
* `409` instead of leaking the internal table's unique-constraint error (spec 066). A write carrying
|
|
311
|
+
* relation-target assertions (spec 064 §4), or a locale merge that must not overwrite a concurrent one
|
|
312
|
+
* (`compareAndSet`, on `updated_at`), is one `atomicWrite`; a failed condition is a `409`, nothing written.
|
|
313
|
+
*/
|
|
314
|
+
async function writeGlobal(ctx, input) {
|
|
315
|
+
const { global, data, existing, assertions } = input;
|
|
316
|
+
const table = `_global_${global.slug}`;
|
|
317
|
+
const database = ctx.adapters.database;
|
|
318
|
+
const concurrent = (message) => new ConcurrentModificationError(global.slug, GLOBAL_ID, message);
|
|
319
|
+
const conditions = [
|
|
320
|
+
...(input.compareAndSet && existing ? [{ updated_at: existing.updated_at }] : []),
|
|
321
|
+
...(input.accessWhere !== undefined ? [input.accessWhere] : [])
|
|
322
|
+
];
|
|
323
|
+
const condition = conditions.length === 0
|
|
324
|
+
? undefined
|
|
325
|
+
: conditions.length === 1
|
|
326
|
+
? conditions[0]
|
|
327
|
+
: { and: conditions };
|
|
328
|
+
const write = !existing
|
|
329
|
+
? { type: 'create', collection: table, data: { ...data, id: GLOBAL_ID } }
|
|
330
|
+
: condition !== undefined
|
|
331
|
+
? {
|
|
332
|
+
type: 'updateIf',
|
|
333
|
+
collection: table,
|
|
334
|
+
id: GLOBAL_ID,
|
|
335
|
+
data,
|
|
336
|
+
condition: { targetMatches: condition },
|
|
337
|
+
requireApplied: true
|
|
338
|
+
}
|
|
339
|
+
: { type: 'update', collection: table, id: GLOBAL_ID, data };
|
|
340
|
+
if (input.compareAndSet && existing)
|
|
341
|
+
await afterStamp(existing.updated_at);
|
|
342
|
+
try {
|
|
343
|
+
if (assertions.length === 0 && write.type === 'create') {
|
|
344
|
+
return await database.create(table, write.data);
|
|
345
|
+
}
|
|
346
|
+
if (assertions.length === 0 && write.type === 'update') {
|
|
347
|
+
return await database.update(table, GLOBAL_ID, write.data);
|
|
348
|
+
}
|
|
349
|
+
const results = await database.atomicWrite([...assertions, write]);
|
|
350
|
+
const written = results[assertions.length];
|
|
351
|
+
if (written?.type === 'create' || written?.type === 'update')
|
|
352
|
+
return written.record;
|
|
353
|
+
if (written?.type === 'updateIf' && written.applied)
|
|
354
|
+
return written.record;
|
|
355
|
+
throw new Error('atomicWrite returned no global record');
|
|
356
|
+
}
|
|
357
|
+
catch (err) {
|
|
358
|
+
if (!existing && isDbUniqueConstraintError(err) && err.collection === table) {
|
|
359
|
+
throw concurrent(`Global '${global.slug}' was first written by another request at the same time; nothing was ` +
|
|
360
|
+
`written. Reload and try again.`);
|
|
361
|
+
}
|
|
362
|
+
if (isAtomicWriteConditionError(err)) {
|
|
363
|
+
throw concurrent(`Global '${global.slug}' was changed by another request while this write was in progress (another ` +
|
|
364
|
+
`locale was edited, it no longer matches the caller's update access, or a document it references ` +
|
|
365
|
+
`was deleted); nothing was written. Reload and try again.`);
|
|
366
|
+
}
|
|
367
|
+
throw err;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
161
370
|
//# sourceMappingURL=globals.js.map
|
package/dist/globals.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"globals.js","sourceRoot":"","sources":["../src/globals.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"globals.js","sourceRoot":"","sources":["../src/globals.ts"],"names":[],"mappings":"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"}
|
package/dist/handlers.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ApiContext } from '@forge-cms/api';
|
|
2
|
-
import type { AnyForgeCmsRuntime } from './runtime.js';
|
|
3
|
-
import type { UserRole } from '@forge-cms/auth';
|
|
2
|
+
import type { AnyForgeCmsRuntime, ForgeCmsRuntime } from './runtime.js';
|
|
3
|
+
import type { AuthUser, UserRole } from '@forge-cms/auth';
|
|
4
4
|
import * as operations from './operations.js';
|
|
5
5
|
declare const DEFAULT_LIMIT = 50;
|
|
6
6
|
declare const MAX_LIMIT = 500;
|
|
@@ -13,6 +13,7 @@ export interface HandlerOptions<TEnv = unknown> {
|
|
|
13
13
|
mimeTypes?: string[];
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
|
+
export declare function resolveOptionalUser<TEnv>(context: ApiContext<TEnv>, runtime: ForgeCmsRuntime<TEnv>): Promise<AuthUser | null>;
|
|
16
17
|
export declare function handleList<TEnv = unknown>(context: ApiContext<TEnv>, options: HandlerOptions<TEnv>): Promise<Response>;
|
|
17
18
|
export declare function handleRead<TEnv = unknown>(context: ApiContext<TEnv>, options: HandlerOptions<TEnv>): Promise<Response>;
|
|
18
19
|
export declare function handleCreate<TEnv = unknown>(context: ApiContext<TEnv>, options: HandlerOptions<TEnv>): Promise<Response>;
|
|
@@ -23,15 +24,21 @@ export declare function handleGlobalUpdate<TEnv = unknown>(context: ApiContext<T
|
|
|
23
24
|
export declare function handleListVersions<TEnv = unknown>(context: ApiContext<TEnv>, options: HandlerOptions<TEnv>): Promise<Response>;
|
|
24
25
|
export declare function handleGetVersion<TEnv = unknown>(context: ApiContext<TEnv>, options: HandlerOptions<TEnv>): Promise<Response>;
|
|
25
26
|
export declare function handleRestoreVersion<TEnv = unknown>(context: ApiContext<TEnv>, options: HandlerOptions<TEnv>): Promise<Response>;
|
|
26
|
-
export interface PreviewOptions {
|
|
27
|
-
/** Allow previewing drafts without authentication (for preview tokens). */
|
|
28
|
-
allowDraftPreview?: boolean;
|
|
29
|
-
}
|
|
30
27
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
28
|
+
* A non-persistent simulation of a permitted create/update (spec 058 §3) — delegates entirely to
|
|
29
|
+
* `runtime.preview()`, which enforces the same access/field-projection policy `create`/`update`
|
|
30
|
+
* already get. Previously this duplicated preview end-to-end: it read the raw adapter row and merged
|
|
31
|
+
* caller-supplied data with **no** access enforcement of any kind (any authenticated caller, of any
|
|
32
|
+
* role, could preview — and see every hidden field of — any document in any collection) — a second,
|
|
33
|
+
* diverging implementation of the exact bug `runtime.preview()` itself had. The caller is resolved
|
|
34
|
+
* through the same `resolveRequest()` every other collection route uses, so CSRF, `allowedRoles`, and
|
|
35
|
+
* a collection's own `access.create`/`access.update` rule all apply exactly as they would for a real
|
|
36
|
+
* write. The previous `allowDraftPreview` escape hatch (never wired into any shipped route) is
|
|
37
|
+
* removed — it existed to let an unauthenticated caller bypass auth entirely for a "preview token"
|
|
38
|
+
* feature this codebase does not have; anonymous preview is still possible the same way anonymous
|
|
39
|
+
* create/update is possible: only if the collection's own access rule allows it.
|
|
33
40
|
*/
|
|
34
|
-
export declare function handlePreview<TEnv = unknown>(context: ApiContext<TEnv>, options: HandlerOptions<TEnv>
|
|
41
|
+
export declare function handlePreview<TEnv = unknown>(context: ApiContext<TEnv>, options: HandlerOptions<TEnv>): Promise<Response>;
|
|
35
42
|
export { operations };
|
|
36
43
|
export { DEFAULT_LIMIT, MAX_LIMIT };
|
|
37
44
|
//# sourceMappingURL=handlers.d.ts.map
|
package/dist/handlers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../src/handlers.ts"],"names":[],"mappings":"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"}
|