@actuate-media/cms-core 0.21.0 → 0.23.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.
Files changed (109) hide show
  1. package/dist/__tests__/actions/document-crud.test.js +74 -2
  2. package/dist/__tests__/actions/document-crud.test.js.map +1 -1
  3. package/dist/__tests__/api/cache-headers.test.d.ts +2 -0
  4. package/dist/__tests__/api/cache-headers.test.d.ts.map +1 -0
  5. package/dist/__tests__/api/cache-headers.test.js +135 -0
  6. package/dist/__tests__/api/cache-headers.test.js.map +1 -0
  7. package/dist/__tests__/api/collections-discovery.test.d.ts +2 -0
  8. package/dist/__tests__/api/collections-discovery.test.d.ts.map +1 -0
  9. package/dist/__tests__/api/collections-discovery.test.js +129 -0
  10. package/dist/__tests__/api/collections-discovery.test.js.map +1 -0
  11. package/dist/__tests__/api/comments-routes.test.d.ts +2 -0
  12. package/dist/__tests__/api/comments-routes.test.d.ts.map +1 -0
  13. package/dist/__tests__/api/comments-routes.test.js +266 -0
  14. package/dist/__tests__/api/comments-routes.test.js.map +1 -0
  15. package/dist/__tests__/api/notifications-routes.test.d.ts +2 -0
  16. package/dist/__tests__/api/notifications-routes.test.d.ts.map +1 -0
  17. package/dist/__tests__/api/notifications-routes.test.js +225 -0
  18. package/dist/__tests__/api/notifications-routes.test.js.map +1 -0
  19. package/dist/__tests__/api/preview-and-scheduling.test.js +53 -0
  20. package/dist/__tests__/api/preview-and-scheduling.test.js.map +1 -1
  21. package/dist/__tests__/fields/relations.test.js +62 -8
  22. package/dist/__tests__/fields/relations.test.js.map +1 -1
  23. package/dist/__tests__/preview-event-bus.test.d.ts +2 -0
  24. package/dist/__tests__/preview-event-bus.test.d.ts.map +1 -0
  25. package/dist/__tests__/preview-event-bus.test.js +89 -0
  26. package/dist/__tests__/preview-event-bus.test.js.map +1 -0
  27. package/dist/__tests__/preview-sse-stream.test.d.ts +2 -0
  28. package/dist/__tests__/preview-sse-stream.test.d.ts.map +1 -0
  29. package/dist/__tests__/preview-sse-stream.test.js +117 -0
  30. package/dist/__tests__/preview-sse-stream.test.js.map +1 -0
  31. package/dist/__tests__/realtime/comments.test.d.ts +2 -0
  32. package/dist/__tests__/realtime/comments.test.d.ts.map +1 -0
  33. package/dist/__tests__/realtime/comments.test.js +508 -0
  34. package/dist/__tests__/realtime/comments.test.js.map +1 -0
  35. package/dist/__tests__/realtime/gateway-ws-integration.test.d.ts +2 -0
  36. package/dist/__tests__/realtime/gateway-ws-integration.test.d.ts.map +1 -0
  37. package/dist/__tests__/realtime/gateway-ws-integration.test.js +170 -0
  38. package/dist/__tests__/realtime/gateway-ws-integration.test.js.map +1 -0
  39. package/dist/__tests__/realtime/gateway.test.d.ts +2 -0
  40. package/dist/__tests__/realtime/gateway.test.d.ts.map +1 -0
  41. package/dist/__tests__/realtime/gateway.test.js +402 -0
  42. package/dist/__tests__/realtime/gateway.test.js.map +1 -0
  43. package/dist/__tests__/realtime/notifications.test.d.ts +2 -0
  44. package/dist/__tests__/realtime/notifications.test.d.ts.map +1 -0
  45. package/dist/__tests__/realtime/notifications.test.js +317 -0
  46. package/dist/__tests__/realtime/notifications.test.js.map +1 -0
  47. package/dist/__tests__/realtime/persistence.test.d.ts +2 -0
  48. package/dist/__tests__/realtime/persistence.test.d.ts.map +1 -0
  49. package/dist/__tests__/realtime/persistence.test.js +124 -0
  50. package/dist/__tests__/realtime/persistence.test.js.map +1 -0
  51. package/dist/__tests__/schema-preview-features.test.d.ts +2 -0
  52. package/dist/__tests__/schema-preview-features.test.d.ts.map +1 -0
  53. package/dist/__tests__/schema-preview-features.test.js +42 -0
  54. package/dist/__tests__/schema-preview-features.test.js.map +1 -0
  55. package/dist/actions.d.ts.map +1 -1
  56. package/dist/actions.js +71 -26
  57. package/dist/actions.js.map +1 -1
  58. package/dist/api/handlers.d.ts.map +1 -1
  59. package/dist/api/handlers.js +772 -188
  60. package/dist/api/handlers.js.map +1 -1
  61. package/dist/cache/__tests__/http.test.d.ts +2 -0
  62. package/dist/cache/__tests__/http.test.d.ts.map +1 -0
  63. package/dist/cache/__tests__/http.test.js +285 -0
  64. package/dist/cache/__tests__/http.test.js.map +1 -0
  65. package/dist/cache/http.d.ts +119 -0
  66. package/dist/cache/http.d.ts.map +1 -0
  67. package/dist/cache/http.js +188 -0
  68. package/dist/cache/http.js.map +1 -0
  69. package/dist/config/types.d.ts +92 -0
  70. package/dist/config/types.d.ts.map +1 -1
  71. package/dist/fields/relations.d.ts.map +1 -1
  72. package/dist/fields/relations.js +43 -11
  73. package/dist/fields/relations.js.map +1 -1
  74. package/dist/index.d.ts +5 -0
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +2 -0
  77. package/dist/index.js.map +1 -1
  78. package/dist/page-builder/schema.d.ts +2 -2
  79. package/dist/preview/event-bus.d.ts +39 -0
  80. package/dist/preview/event-bus.d.ts.map +1 -0
  81. package/dist/preview/event-bus.js +73 -0
  82. package/dist/preview/event-bus.js.map +1 -0
  83. package/dist/preview/sse-stream.d.ts +50 -0
  84. package/dist/preview/sse-stream.d.ts.map +1 -0
  85. package/dist/preview/sse-stream.js +120 -0
  86. package/dist/preview/sse-stream.js.map +1 -0
  87. package/dist/realtime/comments.d.ts +217 -0
  88. package/dist/realtime/comments.d.ts.map +1 -0
  89. package/dist/realtime/comments.js +282 -0
  90. package/dist/realtime/comments.js.map +1 -0
  91. package/dist/realtime/gateway.d.ts +107 -0
  92. package/dist/realtime/gateway.d.ts.map +1 -0
  93. package/dist/realtime/gateway.js +215 -0
  94. package/dist/realtime/gateway.js.map +1 -0
  95. package/dist/realtime/index.d.ts +18 -0
  96. package/dist/realtime/index.d.ts.map +1 -0
  97. package/dist/realtime/index.js +18 -0
  98. package/dist/realtime/index.js.map +1 -0
  99. package/dist/realtime/notifications.d.ts +209 -0
  100. package/dist/realtime/notifications.d.ts.map +1 -0
  101. package/dist/realtime/notifications.js +209 -0
  102. package/dist/realtime/notifications.js.map +1 -0
  103. package/dist/realtime/persistence.d.ts +72 -0
  104. package/dist/realtime/persistence.d.ts.map +1 -0
  105. package/dist/realtime/persistence.js +53 -0
  106. package/dist/realtime/persistence.js.map +1 -0
  107. package/package.json +13 -4
  108. package/prisma/cms-schema.prisma +135 -4
  109. package/prisma/schema.prisma +17 -3
@@ -1,5 +1,6 @@
1
- import { describe, it, expect, vi, beforeEach } from 'vitest';
2
- import { createDocument, updateDocument, deleteDocument, getDocument, listDocuments, duplicateDocument, getGlobal, } from '../../actions.js';
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import { createDocument, updateDocument, deleteDocument, getDocument, listDocuments, duplicateDocument, getGlobal, updateGlobal, } from '../../actions.js';
3
+ import { setActuateConfig } from '../../config/runtime.js';
3
4
  function createMockDB() {
4
5
  const docs = new Map();
5
6
  const versions = [];
@@ -169,4 +170,75 @@ describe('Document CRUD actions', () => {
169
170
  expect(copy.status).toBe('DRAFT');
170
171
  });
171
172
  });
173
+ describe('cache.onInvalidate dispatch (Phase 5.5 #1)', () => {
174
+ let db;
175
+ let ctx;
176
+ let onInvalidate;
177
+ beforeEach(() => {
178
+ db = createMockDB();
179
+ ctx = createCtx(db);
180
+ onInvalidate = vi.fn(async () => undefined);
181
+ // The runtime config global is read by actions.ts via getActuateConfig();
182
+ // wire just the cache.onInvalidate hook for these cases.
183
+ setActuateConfig({ cache: { onInvalidate } });
184
+ });
185
+ afterEach(() => {
186
+ // Clear the runtime config between cases so an earlier test's hook
187
+ // can't bleed into a later test that expects "no hook".
188
+ setActuateConfig({});
189
+ });
190
+ it('fires onInvalidate with collection + doc tags after createDocument', async () => {
191
+ const doc = await createDocument('posts', { title: 'Hello', slug: 'hello' }, ctx);
192
+ const id = doc.id;
193
+ expect(onInvalidate).toHaveBeenCalledTimes(1);
194
+ expect(new Set(onInvalidate.mock.calls[0][0])).toEqual(new Set(['actuate', 'actuate:collection:posts', `actuate:doc:${id}`]));
195
+ });
196
+ it('fires onInvalidate after updateDocument with the doc id from the update target', async () => {
197
+ const created = await createDocument('posts', { title: 'Initial', slug: 'init' }, ctx);
198
+ const docId = created.id;
199
+ onInvalidate.mockClear();
200
+ db.document.findFirst.mockResolvedValueOnce({
201
+ id: docId,
202
+ collection: 'posts',
203
+ data: { title: 'Initial', slug: 'init' },
204
+ deletedAt: null,
205
+ });
206
+ await updateDocument('posts', docId, { title: 'Updated' }, ctx);
207
+ expect(onInvalidate).toHaveBeenCalledTimes(1);
208
+ expect(new Set(onInvalidate.mock.calls[0][0])).toEqual(new Set(['actuate', 'actuate:collection:posts', `actuate:doc:${docId}`]));
209
+ });
210
+ it('fires onInvalidate after deleteDocument so CDN tiers drop the cached row', async () => {
211
+ const created = await createDocument('posts', { title: 'Doomed' }, ctx);
212
+ const docId = created.id;
213
+ onInvalidate.mockClear();
214
+ db.document.findFirst.mockResolvedValueOnce({
215
+ id: docId,
216
+ collection: 'posts',
217
+ data: { title: 'Doomed' },
218
+ deletedAt: null,
219
+ });
220
+ await deleteDocument('posts', docId, ctx);
221
+ expect(onInvalidate).toHaveBeenCalledTimes(1);
222
+ expect(new Set(onInvalidate.mock.calls[0][0])).toEqual(new Set(['actuate', 'actuate:collection:posts', `actuate:doc:${docId}`]));
223
+ });
224
+ it('fires onInvalidate with the global tag set after updateGlobal', async () => {
225
+ // updateGlobal upserts — with no existing doc it falls through to the
226
+ // create branch. Either branch must invalidate.
227
+ await updateGlobal('site-settings', { siteName: 'X' }, ctx);
228
+ expect(onInvalidate).toHaveBeenCalledTimes(1);
229
+ expect(new Set(onInvalidate.mock.calls[0][0])).toEqual(new Set(['actuate', 'actuate:global:site-settings']));
230
+ });
231
+ it('does not throw when onInvalidate itself fails — write must still succeed', async () => {
232
+ // Cache invalidation is best-effort. A broken hook (e.g. a transient
233
+ // failure calling revalidateTag) must never roll back the underlying
234
+ // write or surface to the caller as an error.
235
+ onInvalidate.mockImplementation(() => {
236
+ throw new Error('CDN unreachable');
237
+ });
238
+ await expect(createDocument('posts', { title: 'Resilient' }, ctx)).resolves.toMatchObject({
239
+ collection: 'posts',
240
+ });
241
+ expect(onInvalidate).toHaveBeenCalledTimes(1);
242
+ });
243
+ });
172
244
  //# sourceMappingURL=document-crud.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"document-crud.test.js","sourceRoot":"","sources":["../../../src/__tests__/actions/document-crud.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"document-crud.test.js","sourceRoot":"","sources":["../../../src/__tests__/actions/document-crud.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cache-headers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-headers.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/api/cache-headers.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,135 @@
1
+ import { beforeEach, describe, expect, it } from 'vitest';
2
+ import { handleActuateAPI } from '../../api/index.js';
3
+ import { initDB } from '../../db.js';
4
+ import { generateApiKey } from '../../security/api-key-enhanced.js';
5
+ /**
6
+ * Phase 5.5 #1: verify the public-read endpoints emit (or refuse to emit)
7
+ * the `Cache-Control` header per the rules in `cache/http.ts`.
8
+ *
9
+ * The unit tests in `cache/__tests__/http.test.ts` already cover the
10
+ * pure helper. These tests prove the wiring inside the handlers is
11
+ * intact end-to-end.
12
+ */
13
+ const VALID_SECRET = 'a'.repeat(48);
14
+ function createMockDB(opts) {
15
+ const apiKey = opts.apiKey;
16
+ return {
17
+ apiKey: {
18
+ findMany: async () => (apiKey ? [apiKey] : []),
19
+ findUnique: async ({ where }) => {
20
+ if (!apiKey)
21
+ return null;
22
+ if (apiKey.keyHash !== where.keyHash)
23
+ return null;
24
+ return apiKey;
25
+ },
26
+ update: async () => apiKey,
27
+ },
28
+ document: {
29
+ findFirst: async () => opts.global ?? null,
30
+ findMany: async () => [],
31
+ count: async () => 0,
32
+ },
33
+ user: {},
34
+ session: {},
35
+ media: {},
36
+ };
37
+ }
38
+ async function makeKey(scopes) {
39
+ const { key, keyHash, keyPrefix } = await generateApiKey({ prefix: 'act_sk', scopes });
40
+ return {
41
+ key,
42
+ record: {
43
+ id: 'apikey-1',
44
+ keyHash,
45
+ keyPrefix,
46
+ userId: 'user-1',
47
+ scopes,
48
+ ipRestrictions: null,
49
+ expiresAt: null,
50
+ lastUsedAt: null,
51
+ revokedAt: null,
52
+ },
53
+ };
54
+ }
55
+ describe('Public-read Cache-Control (Phase 5.5 #1)', () => {
56
+ beforeEach(() => {
57
+ delete globalThis.__actuateConfig;
58
+ process.env.CMS_SECRET = VALID_SECRET;
59
+ });
60
+ it('emits public s-maxage on /collections/:slug when publicReads is enabled', async () => {
61
+ const { key, record } = await makeKey({ collections: ['posts'], actions: ['read'] });
62
+ const db = createMockDB({ apiKey: record });
63
+ initDB(db);
64
+ const handler = handleActuateAPI({
65
+ prismaClient: db,
66
+ config: {
67
+ collections: {
68
+ posts: { slug: 'posts', labels: { singular: 'Post', plural: 'Posts' }, fields: {} },
69
+ },
70
+ cache: {
71
+ publicReads: { enabled: true, maxAge: 60, staleWhileRevalidate: 300 },
72
+ },
73
+ },
74
+ });
75
+ const response = await handler(new Request('https://example.com/api/cms/collections/posts', {
76
+ headers: { Authorization: `Bearer ${key}` },
77
+ }));
78
+ expect(response.status).toBe(200);
79
+ expect(response.headers.get('cache-control')).toBe('public, s-maxage=60, stale-while-revalidate=300');
80
+ });
81
+ it('emits no Cache-Control when publicReads is disabled (default behaviour)', async () => {
82
+ const { key, record } = await makeKey({ collections: ['posts'], actions: ['read'] });
83
+ const db = createMockDB({ apiKey: record });
84
+ initDB(db);
85
+ const handler = handleActuateAPI({
86
+ prismaClient: db,
87
+ config: {
88
+ collections: {
89
+ posts: { slug: 'posts', labels: { singular: 'Post', plural: 'Posts' }, fields: {} },
90
+ },
91
+ // cache is intentionally absent — this is the pre-5.5 default.
92
+ },
93
+ });
94
+ const response = await handler(new Request('https://example.com/api/cms/collections/posts', {
95
+ headers: { Authorization: `Bearer ${key}` },
96
+ }));
97
+ expect(response.status).toBe(200);
98
+ expect(response.headers.get('cache-control')).toBeNull();
99
+ });
100
+ it('emits private/no-store on /globals/:slug for session-cookie requests', async () => {
101
+ // No API key — we send an Actuate session cookie instead. Even though
102
+ // the cookie value is junk (so the request will eventually 401), the
103
+ // Cache-Control branch is evaluated before auth and must already
104
+ // refuse the shared cache.
105
+ const db = createMockDB({ apiKey: undefined, global: { data: { siteName: 'X' } } });
106
+ initDB(db);
107
+ const handler = handleActuateAPI({
108
+ prismaClient: db,
109
+ config: {
110
+ collections: {},
111
+ globals: {
112
+ settings: {
113
+ slug: 'settings',
114
+ label: 'Settings',
115
+ fields: {},
116
+ access: { read: () => true },
117
+ },
118
+ },
119
+ cache: { publicReads: { enabled: true, maxAge: 60 } },
120
+ },
121
+ });
122
+ const response = await handler(new Request('https://example.com/api/cms/globals/settings', {
123
+ headers: { Cookie: 'actuate_session=bogus' },
124
+ }));
125
+ // Whether the response is 200 or 401, the cache header rule fires
126
+ // identically — and is enforced on the response that DOES come back
127
+ // (errorResponse uses plain `json()` so no Cache-Control on 401).
128
+ // The asymmetric check below is deliberate: we accept either no
129
+ // header (error path) or the private/no-store header (success path),
130
+ // but NEVER the public variant.
131
+ const cc = response.headers.get('cache-control');
132
+ expect(cc === null || cc === 'private, no-store').toBe(true);
133
+ });
134
+ });
135
+ //# sourceMappingURL=cache-headers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache-headers.test.js","sourceRoot":"","sources":["../../../src/__tests__/api/cache-headers.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AAEzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAA;AAGnE;;;;;;;GAOG;AACH,MAAM,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAcnC,SAAS,YAAY,CAAC,IAAqD;IACzE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAC1B,OAAO;QACL,MAAM,EAAE;YACN,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,UAAU,EAAE,KAAK,EAAE,EAAE,KAAK,EAAkC,EAAE,EAAE;gBAC9D,IAAI,CAAC,MAAM;oBAAE,OAAO,IAAI,CAAA;gBACxB,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;oBAAE,OAAO,IAAI,CAAA;gBACjD,OAAO,MAAM,CAAA;YACf,CAAC;YACD,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM;SAC3B;QACD,QAAQ,EAAE;YACR,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI;YAC1C,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;YACxB,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;SACrB;QACD,IAAI,EAAE,EAAE;QACR,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,EAAE;KACH,CAAA;AACV,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,MAAmB;IACxC,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,cAAc,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAA;IACtF,OAAO;QACL,GAAG;QACH,MAAM,EAAE;YACN,EAAE,EAAE,UAAU;YACd,OAAO;YACP,SAAS;YACT,MAAM,EAAE,QAAQ;YAChB,MAAM;YACN,cAAc,EAAE,IAAI;YACpB,SAAS,EAAE,IAAI;YACf,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,IAAI;SACW;KAC7B,CAAA;AACH,CAAC;AAED,QAAQ,CAAC,0CAA0C,EAAE,GAAG,EAAE;IACxD,UAAU,CAAC,GAAG,EAAE;QACd,OAAQ,UAAkB,CAAC,eAAe,CAAA;QAC1C,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,YAAY,CAAA;IACvC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACpF,MAAM,EAAE,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;QAC3C,MAAM,CAAC,EAAE,CAAC,CAAA;QACV,MAAM,OAAO,GAAG,gBAAgB,CAAC;YAC/B,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE;gBACN,WAAW,EAAE;oBACX,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;iBACpF;gBACD,KAAK,EAAE;oBACL,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,oBAAoB,EAAE,GAAG,EAAE;iBACtE;aACF;SACF,CAAC,CAAA;QAEF,MAAM,QAAQ,GAAG,MAAM,OAAO,CAC5B,IAAI,OAAO,CAAC,+CAA+C,EAAE;YAC3D,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,GAAG,EAAE,EAAE;SAC5C,CAAC,CACH,CAAA;QAED,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACjC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAChD,iDAAiD,CAClD,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QACpF,MAAM,EAAE,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;QAC3C,MAAM,CAAC,EAAE,CAAC,CAAA;QACV,MAAM,OAAO,GAAG,gBAAgB,CAAC;YAC/B,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE;gBACN,WAAW,EAAE;oBACX,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE;iBACpF;gBACD,+DAA+D;aAChE;SACF,CAAC,CAAA;QAEF,MAAM,QAAQ,GAAG,MAAM,OAAO,CAC5B,IAAI,OAAO,CAAC,+CAA+C,EAAE;YAC3D,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,GAAG,EAAE,EAAE;SAC5C,CAAC,CACH,CAAA;QAED,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACjC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IAC1D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,sEAAsE,EAAE,KAAK,IAAI,EAAE;QACpF,sEAAsE;QACtE,qEAAqE;QACrE,iEAAiE;QACjE,2BAA2B;QAC3B,MAAM,EAAE,GAAG,YAAY,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAA;QACnF,MAAM,CAAC,EAAE,CAAC,CAAA;QACV,MAAM,OAAO,GAAG,gBAAgB,CAAC;YAC/B,YAAY,EAAE,EAAE;YAChB,MAAM,EAAE;gBACN,WAAW,EAAE,EAAE;gBACf,OAAO,EAAE;oBACP,QAAQ,EAAE;wBACR,IAAI,EAAE,UAAU;wBAChB,KAAK,EAAE,UAAU;wBACjB,MAAM,EAAE,EAAE;wBACV,MAAM,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE;qBAC7B;iBACF;gBACD,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE;aACtD;SACF,CAAC,CAAA;QAEF,MAAM,QAAQ,GAAG,MAAM,OAAO,CAC5B,IAAI,OAAO,CAAC,8CAA8C,EAAE;YAC1D,OAAO,EAAE,EAAE,MAAM,EAAE,uBAAuB,EAAE;SAC7C,CAAC,CACH,CAAA;QAED,kEAAkE;QAClE,oEAAoE;QACpE,kEAAkE;QAClE,gEAAgE;QAChE,qEAAqE;QACrE,gCAAgC;QAChC,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;QAChD,MAAM,CAAC,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC9D,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=collections-discovery.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collections-discovery.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/api/collections-discovery.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Regression tests for the `/api/cms/collections` discovery endpoint
3
+ * shipped in PR F (Phase 7 — MCP-parity stylistic cleanup).
4
+ *
5
+ * Purpose: enumerate the configured collections without relying on the
6
+ * OpenAPI generator, which has historically drifted out of sync with
7
+ * the admin-visible surface. The endpoint is unauthenticated by design
8
+ * — the response contains schema-shape metadata that is already public
9
+ * via `/openapi.json` — but we test that contract here so a future
10
+ * change can't silently widen it.
11
+ */
12
+ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
13
+ import { handleActuateAPI } from '../../api/index.js';
14
+ import { setActuateConfig } from '../../config/runtime.js';
15
+ const SECRET = 'test-secret-collections-discovery-pr-f-12345';
16
+ describe('GET /api/cms/collections (PR F discovery endpoint)', () => {
17
+ // Snapshot every env var any test in this file touches so we can
18
+ // restore them in `afterEach`. Mirrors the pattern in health.test.ts —
19
+ // PR #155 review (Bugbot) caught that the prior implementation set
20
+ // CMS_SECRET in beforeEach but never restored it, leaking state into
21
+ // any other test that runs after this file.
22
+ const original = {
23
+ CMS_SECRET: process.env.CMS_SECRET,
24
+ CMS_SESSION_SECRET: process.env.CMS_SESSION_SECRET,
25
+ };
26
+ beforeEach(() => {
27
+ process.env.CMS_SECRET = SECRET;
28
+ delete process.env.CMS_SESSION_SECRET;
29
+ });
30
+ afterEach(() => {
31
+ for (const [k, v] of Object.entries(original)) {
32
+ if (v === undefined)
33
+ delete process.env[k];
34
+ else
35
+ process.env[k] = v;
36
+ }
37
+ delete globalThis.__actuateConfig;
38
+ });
39
+ function makeHandler() {
40
+ setActuateConfig({
41
+ secret: SECRET,
42
+ collections: {
43
+ posts: {
44
+ slug: 'posts',
45
+ labels: { singular: 'Post', plural: 'Posts' },
46
+ type: 'post',
47
+ urlPrefix: 'blog',
48
+ fields: {
49
+ title: { type: 'text', required: true },
50
+ body: { type: 'richText' },
51
+ author: { type: 'relationship', relationTo: 'users' },
52
+ },
53
+ },
54
+ pages: {
55
+ slug: 'pages',
56
+ labels: { singular: 'Page', plural: 'Pages' },
57
+ type: 'page',
58
+ fields: {
59
+ title: { type: 'text', required: true },
60
+ slug: { type: 'slug', required: true },
61
+ },
62
+ },
63
+ hidden_internal: {
64
+ slug: 'hidden_internal',
65
+ labels: { singular: 'Internal', plural: 'Internal' },
66
+ fields: { name: { type: 'text' } },
67
+ admin: { hidden: true },
68
+ },
69
+ },
70
+ });
71
+ return handleActuateAPI({ prismaClient: {} });
72
+ }
73
+ it('returns one entry per configured collection with field summaries', async () => {
74
+ const handler = makeHandler();
75
+ const response = await handler(new Request('https://example.com/api/cms/collections', { method: 'GET' }));
76
+ expect(response.status).toBe(200);
77
+ const payload = (await response.json());
78
+ expect(payload.data).toHaveLength(3);
79
+ const bySlug = new Map(payload.data.map((c) => [c.slug, c]));
80
+ const posts = bySlug.get('posts');
81
+ expect(posts.labels).toEqual({ singular: 'Post', plural: 'Posts' });
82
+ expect(posts.type).toBe('post');
83
+ expect(posts.fieldCount).toBe(3);
84
+ expect(posts.fields).toEqual(expect.arrayContaining([
85
+ { name: 'title', type: 'text', required: true },
86
+ { name: 'body', type: 'richText', required: false },
87
+ { name: 'author', type: 'relationship', required: false },
88
+ ]));
89
+ const pages = bySlug.get('pages');
90
+ expect(pages.type).toBe('page');
91
+ expect(pages.fieldCount).toBe(2);
92
+ expect(pages.fields.find((f) => f.name === 'title')?.required).toBe(true);
93
+ });
94
+ it('surfaces admin.hidden as `hidden: true` so agents can choose to skip them', async () => {
95
+ // Internal collections should still be discoverable — the agent
96
+ // might legitimately want to read from them — but the flag lets
97
+ // the agent down-rank them in its planning.
98
+ const handler = makeHandler();
99
+ const response = await handler(new Request('https://example.com/api/cms/collections', { method: 'GET' }));
100
+ const payload = (await response.json());
101
+ const hiddenEntry = payload.data.find((c) => c.slug === 'hidden_internal');
102
+ expect(hiddenEntry?.hidden).toBe(true);
103
+ const postsEntry = payload.data.find((c) => c.slug === 'posts');
104
+ expect(postsEntry?.hidden).toBe(false);
105
+ });
106
+ it('returns 500 when no CMS config is registered (deploy misconfig)', async () => {
107
+ // Defensive: route must error loudly when getActuateConfig() is
108
+ // missing instead of returning `{ data: [] }`, which would lie to
109
+ // the MCP fallback chain about the server's actual state.
110
+ const handler = handleActuateAPI({ prismaClient: {} });
111
+ const response = await handler(new Request('https://example.com/api/cms/collections', { method: 'GET' }));
112
+ expect(response.status).toBe(500);
113
+ });
114
+ it('does not leak deeper schema (validators, hooks, access functions)', async () => {
115
+ // The response is unauthenticated — field-level validators or
116
+ // access functions could include source pointers / closure state
117
+ // that mustn't ship in the public surface. Keep the contract
118
+ // tight: only `name`, `type`, `required` per field.
119
+ const handler = makeHandler();
120
+ const response = await handler(new Request('https://example.com/api/cms/collections', { method: 'GET' }));
121
+ const payload = (await response.json());
122
+ for (const collection of payload.data) {
123
+ for (const field of collection.fields) {
124
+ expect(Object.keys(field).sort()).toEqual(['name', 'required', 'type']);
125
+ }
126
+ }
127
+ });
128
+ });
129
+ //# sourceMappingURL=collections-discovery.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collections-discovery.test.js","sourceRoot":"","sources":["../../../src/__tests__/api/collections-discovery.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=comments-routes.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"comments-routes.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/api/comments-routes.test.ts"],"names":[],"mappings":""}