@actuate-media/cms-core 0.61.0 → 0.63.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 (72) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/dist/__tests__/api/email-settings-routes.test.d.ts +2 -0
  3. package/dist/__tests__/api/email-settings-routes.test.d.ts.map +1 -0
  4. package/dist/__tests__/api/email-settings-routes.test.js +240 -0
  5. package/dist/__tests__/api/email-settings-routes.test.js.map +1 -0
  6. package/dist/__tests__/api/field-values-routes.test.d.ts +2 -0
  7. package/dist/__tests__/api/field-values-routes.test.d.ts.map +1 -0
  8. package/dist/__tests__/api/field-values-routes.test.js +147 -0
  9. package/dist/__tests__/api/field-values-routes.test.js.map +1 -0
  10. package/dist/__tests__/api/route-contracts.test.js +5 -0
  11. package/dist/__tests__/api/route-contracts.test.js.map +1 -1
  12. package/dist/__tests__/collections/presets.test.js +24 -0
  13. package/dist/__tests__/collections/presets.test.js.map +1 -1
  14. package/dist/__tests__/email/resolve.test.d.ts +2 -0
  15. package/dist/__tests__/email/resolve.test.d.ts.map +1 -0
  16. package/dist/__tests__/email/resolve.test.js +90 -0
  17. package/dist/__tests__/email/resolve.test.js.map +1 -0
  18. package/dist/__tests__/email/settings-store.test.d.ts +2 -0
  19. package/dist/__tests__/email/settings-store.test.d.ts.map +1 -0
  20. package/dist/__tests__/email/settings-store.test.js +149 -0
  21. package/dist/__tests__/email/settings-store.test.js.map +1 -0
  22. package/dist/api/handlers.d.ts.map +1 -1
  23. package/dist/api/handlers.js +2 -0
  24. package/dist/api/handlers.js.map +1 -1
  25. package/dist/api/route-helpers.d.ts +6 -0
  26. package/dist/api/route-helpers.d.ts.map +1 -1
  27. package/dist/api/route-helpers.js +13 -0
  28. package/dist/api/route-helpers.js.map +1 -1
  29. package/dist/api/routes/documents.d.ts.map +1 -1
  30. package/dist/api/routes/documents.js +76 -0
  31. package/dist/api/routes/documents.js.map +1 -1
  32. package/dist/api/routes/email-settings.d.ts +3 -0
  33. package/dist/api/routes/email-settings.d.ts.map +1 -0
  34. package/dist/api/routes/email-settings.js +248 -0
  35. package/dist/api/routes/email-settings.js.map +1 -0
  36. package/dist/api/routes/users.js +3 -3
  37. package/dist/api/routes/users.js.map +1 -1
  38. package/dist/auth/invites.js +2 -2
  39. package/dist/auth/invites.js.map +1 -1
  40. package/dist/auth/reset.js +2 -2
  41. package/dist/auth/reset.js.map +1 -1
  42. package/dist/collections/presets.d.ts +8 -0
  43. package/dist/collections/presets.d.ts.map +1 -1
  44. package/dist/collections/presets.js +12 -3
  45. package/dist/collections/presets.js.map +1 -1
  46. package/dist/email/resolve.d.ts +27 -0
  47. package/dist/email/resolve.d.ts.map +1 -0
  48. package/dist/email/resolve.js +68 -0
  49. package/dist/email/resolve.js.map +1 -0
  50. package/dist/email/sender.d.ts +36 -0
  51. package/dist/email/sender.d.ts.map +1 -1
  52. package/dist/email/sender.js +16 -0
  53. package/dist/email/sender.js.map +1 -1
  54. package/dist/email/settings-store.d.ts +116 -0
  55. package/dist/email/settings-store.d.ts.map +1 -0
  56. package/dist/email/settings-store.js +222 -0
  57. package/dist/email/settings-store.js.map +1 -0
  58. package/dist/fields/index.d.ts +2 -1
  59. package/dist/fields/index.d.ts.map +1 -1
  60. package/dist/fields/index.js +1 -1
  61. package/dist/fields/index.js.map +1 -1
  62. package/dist/fields/presets.d.ts +15 -0
  63. package/dist/fields/presets.d.ts.map +1 -1
  64. package/dist/fields/presets.js +32 -0
  65. package/dist/fields/presets.js.map +1 -1
  66. package/dist/forms/notify.js +3 -3
  67. package/dist/forms/notify.js.map +1 -1
  68. package/dist/index.d.ts +7 -3
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +4 -2
  71. package/dist/index.js.map +1 -1
  72. package/package.json +1 -1
@@ -61,6 +61,82 @@ export function registerDocumentRoutes(router) {
61
61
  return internalError(err);
62
62
  }
63
63
  });
64
+ // Distinct values in use for one field across a collection — powers tag
65
+ // autocomplete and category suggestions in the admin ("UpChat" taxonomy
66
+ // feedback: avoid `AI` / `ai` / `Artificial Intelligence` drift). Registered
67
+ // BEFORE `/collections/:slug/:id` so the literal segment wins the match.
68
+ router.get('/collections/:slug/field-values', async (request, params) => {
69
+ try {
70
+ const auth = await requireAuth(request);
71
+ if (auth.error)
72
+ return auth.error;
73
+ const scopeErr = requireCollectionScope(auth.session, params.slug, 'read');
74
+ if (scopeErr)
75
+ return scopeErr;
76
+ const url = new URL(request.url);
77
+ const fieldName = (url.searchParams.get('field') ?? '').trim();
78
+ const query = (url.searchParams.get('q') ?? '').trim().slice(0, 100).toLowerCase();
79
+ const collectionConfig = getActuateConfig()?.collections?.[params.slug];
80
+ if (!collectionConfig)
81
+ return errorResponse('Collection not found', 404);
82
+ const field = collectionConfig.fields?.[fieldName];
83
+ // Only fields whose values are short editorial labels are aggregatable.
84
+ // Rejecting undeclared fields keeps this from probing arbitrary JSON.
85
+ if (!field || !['text', 'select', 'array'].includes(field.type)) {
86
+ return errorResponse('Field is not suggestible', 400);
87
+ }
88
+ const rows = await db().document.findMany({
89
+ where: { collection: params.slug, deletedAt: null },
90
+ select: { data: true },
91
+ orderBy: { updatedAt: 'desc' },
92
+ // Aggregation cap: recent documents dominate active vocabularies.
93
+ take: 1000,
94
+ });
95
+ // For array fields, values live on each row — either plain strings or
96
+ // objects keyed by the array's first text sub-field (e.g. `{ tag }`).
97
+ const subKey = field.type === 'array'
98
+ ? Object.entries(field.fields ?? {}).find(([, def]) => def?.type === 'text')?.[0]
99
+ : undefined;
100
+ const counts = new Map();
101
+ const record = (raw) => {
102
+ const value = typeof raw === 'string' ? raw.trim() : '';
103
+ if (!value)
104
+ return;
105
+ const key = value.toLowerCase();
106
+ const existing = counts.get(key);
107
+ if (existing)
108
+ existing.count += 1;
109
+ else
110
+ counts.set(key, { value, count: 1 });
111
+ };
112
+ for (const row of rows) {
113
+ const data = row.data;
114
+ const raw = data?.[fieldName];
115
+ if (field.type === 'array') {
116
+ if (!Array.isArray(raw))
117
+ continue;
118
+ for (const item of raw) {
119
+ if (typeof item === 'string')
120
+ record(item);
121
+ else if (item && typeof item === 'object' && subKey) {
122
+ record(item[subKey]);
123
+ }
124
+ }
125
+ }
126
+ else {
127
+ record(raw);
128
+ }
129
+ }
130
+ const values = [...counts.values()]
131
+ .filter((v) => !query || v.value.toLowerCase().includes(query))
132
+ .sort((a, b) => b.count - a.count || a.value.localeCompare(b.value))
133
+ .slice(0, 25);
134
+ return json({ data: { field: fieldName, values } });
135
+ }
136
+ catch (err) {
137
+ return internalError(err);
138
+ }
139
+ });
64
140
  router.get('/collections/:slug/:id', async (request, params) => {
65
141
  try {
66
142
  const auth = await requireAuth(request);
@@ -1 +1 @@
1
- {"version":3,"file":"documents.js","sourceRoot":"","sources":["../../../src/api/routes/documents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"documents.js","sourceRoot":"","sources":["../../../src/api/routes/documents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ApiRouter } from '../router.js';
2
+ export declare function registerEmailSettingsRoutes(router: ApiRouter): void;
3
+ //# sourceMappingURL=email-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-settings.d.ts","sourceRoot":"","sources":["../../../src/api/routes/email-settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAgB7C,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyRnE"}
@@ -0,0 +1,248 @@
1
+ import { logEvent } from '../../security/audit.js';
2
+ import { getClientIp } from '../../security/client-ip.js';
3
+ import { getActuateConfig } from '../../config/runtime.js';
4
+ import { guardedDb } from '../guarded-db.js';
5
+ import { json, errorResponse, internalError, hasModel, requireAuth, requireAdminScope, emailTestLimiter, checkRateLimitAsync, } from '../route-helpers.js';
6
+ export function registerEmailSettingsRoutes(router) {
7
+ const db = guardedDb;
8
+ // ---------------------------------------------------------------------------
9
+ // Settings > Email — transactional email provider configuration.
10
+ // Backed by the `__email_config__` document (see `../email/settings-store.ts`).
11
+ // ADMIN-gated. API keys / SMTP passwords are encrypted at rest, NEVER returned.
12
+ // ---------------------------------------------------------------------------
13
+ router.get('/email/settings', async (request) => {
14
+ try {
15
+ const auth = await requireAuth(request);
16
+ if (auth.error)
17
+ return auth.error;
18
+ const adminErr = requireAdminScope(auth.session);
19
+ if (adminErr)
20
+ return adminErr;
21
+ const { getEmailConfig, toPublicEmailConfig, detectEnvEmailProvider } = await import('../../email/settings-store.js');
22
+ const { getEmailProviderFactory, getRegisteredEmailSender } = await import('../../email/sender.js');
23
+ const config = await getEmailConfig(db());
24
+ return json({
25
+ data: {
26
+ settings: toPublicEmailConfig(config),
27
+ /** Provider configured via env vars (informational; DB settings win). */
28
+ envProvider: detectEnvEmailProvider(),
29
+ /** Whether plugin-email registered its factory (required for DB-configured sends). */
30
+ factoryAvailable: Boolean(getEmailProviderFactory()),
31
+ /** Whether an env-configured sender is registered as fallback. */
32
+ envSenderActive: Boolean(getRegisteredEmailSender()),
33
+ /** A platform adapter in code takes precedence over everything. */
34
+ platformAdapter: Boolean(getActuateConfig()?.platform?.email),
35
+ },
36
+ });
37
+ }
38
+ catch (err) {
39
+ return internalError(err, 'email/settings GET');
40
+ }
41
+ });
42
+ router.put('/email/settings', async (request) => {
43
+ try {
44
+ const auth = await requireAuth(request);
45
+ if (auth.error)
46
+ return auth.error;
47
+ const adminErr = requireAdminScope(auth.session);
48
+ if (adminErr)
49
+ return adminErr;
50
+ const body = (await request.json().catch(() => null));
51
+ if (!body || typeof body !== 'object') {
52
+ return errorResponse('Request body must be an object', 400);
53
+ }
54
+ const { getEmailConfig, putEmailConfig, toPublicEmailConfig, validateEmailSettingsInput, encryptEmailSecret, isEmailProviderKey, detectEnvEmailProvider, } = await import('../../email/settings-store.js');
55
+ const { clearEmailSenderCache } = await import('../../email/resolve.js');
56
+ const current = await getEmailConfig(db());
57
+ // Keeping an existing key only makes sense while staying on the same
58
+ // provider — switching providers must not silently reuse the old secret.
59
+ const sameProvider = isEmailProviderKey(body.provider) && body.provider === current.provider;
60
+ const validationError = validateEmailSettingsInput(body, {
61
+ hasApiKey: sameProvider && Boolean(current.apiKeyEncrypted),
62
+ });
63
+ if (validationError)
64
+ return errorResponse(validationError, 400);
65
+ // Clearing the configuration (provider: null) wipes everything,
66
+ // including stored secrets.
67
+ if (body.provider === null) {
68
+ const saved = await putEmailConfig(db(), { provider: null }, auth.session.userId);
69
+ clearEmailSenderCache();
70
+ try {
71
+ await logEvent({
72
+ event: 'update_email_settings',
73
+ userId: auth.session.userId,
74
+ ipAddress: getClientIp(request),
75
+ details: { provider: null, source: 'settings.email' },
76
+ });
77
+ }
78
+ catch {
79
+ /* never block on audit */
80
+ }
81
+ return json({
82
+ data: { settings: toPublicEmailConfig(saved), envProvider: detectEnvEmailProvider() },
83
+ });
84
+ }
85
+ const provider = body.provider;
86
+ // Secrets: undefined = keep existing (same provider only), ''/null = clear,
87
+ // string = encrypt + replace.
88
+ let apiKeyEncrypted = sameProvider ? current.apiKeyEncrypted : undefined;
89
+ let apiKeyLast4 = sameProvider ? current.apiKeyLast4 : undefined;
90
+ let keyChanged = false;
91
+ if (body.apiKey !== undefined) {
92
+ if (body.apiKey === null || body.apiKey === '') {
93
+ apiKeyEncrypted = undefined;
94
+ apiKeyLast4 = undefined;
95
+ keyChanged = true;
96
+ }
97
+ else if (typeof body.apiKey === 'string' && body.apiKey.trim()) {
98
+ const enc = await encryptEmailSecret(body.apiKey.trim());
99
+ apiKeyEncrypted = enc.encrypted;
100
+ apiKeyLast4 = enc.last4;
101
+ keyChanged = true;
102
+ }
103
+ }
104
+ let smtpPassEncrypted = sameProvider ? current.smtpPassEncrypted : undefined;
105
+ let passChanged = false;
106
+ if (body.smtpPass !== undefined) {
107
+ if (body.smtpPass === null || body.smtpPass === '') {
108
+ smtpPassEncrypted = undefined;
109
+ passChanged = true;
110
+ }
111
+ else if (typeof body.smtpPass === 'string' && body.smtpPass.trim()) {
112
+ smtpPassEncrypted = (await encryptEmailSecret(body.smtpPass)).encrypted;
113
+ passChanged = true;
114
+ }
115
+ }
116
+ const next = {
117
+ provider,
118
+ from: typeof body.from === 'string' ? body.from.trim() : undefined,
119
+ apiKeyEncrypted,
120
+ apiKeyLast4,
121
+ channel: provider === 'smtpcom' && typeof body.channel === 'string' && body.channel.trim()
122
+ ? body.channel.trim()
123
+ : undefined,
124
+ region: provider === 'ses' && typeof body.region === 'string' ? body.region.trim() : undefined,
125
+ host: provider === 'smtp' && typeof body.host === 'string' ? body.host.trim() : undefined,
126
+ port: provider === 'smtp' && typeof body.port === 'number' && Number.isInteger(body.port)
127
+ ? body.port
128
+ : undefined,
129
+ secure: provider === 'smtp' && typeof body.secure === 'boolean' ? body.secure : undefined,
130
+ smtpUser: provider === 'smtp' && typeof body.smtpUser === 'string' && body.smtpUser.trim()
131
+ ? body.smtpUser.trim()
132
+ : undefined,
133
+ smtpPassEncrypted: provider === 'smtp' ? smtpPassEncrypted : undefined,
134
+ // Changing the config invalidates the previous test result.
135
+ lastTestStatus: undefined,
136
+ lastTestedAt: undefined,
137
+ lastTestError: undefined,
138
+ };
139
+ const saved = await putEmailConfig(db(), next, auth.session.userId);
140
+ clearEmailSenderCache();
141
+ try {
142
+ await logEvent({
143
+ event: 'update_email_settings',
144
+ userId: auth.session.userId,
145
+ ipAddress: getClientIp(request),
146
+ // Config metadata only — never key material.
147
+ details: {
148
+ provider,
149
+ from: next.from ?? null,
150
+ keyChanged: keyChanged || passChanged,
151
+ source: 'settings.email',
152
+ },
153
+ });
154
+ }
155
+ catch {
156
+ /* never block on audit */
157
+ }
158
+ return json({
159
+ data: { settings: toPublicEmailConfig(saved), envProvider: detectEnvEmailProvider() },
160
+ });
161
+ }
162
+ catch (err) {
163
+ return internalError(err, 'email/settings PUT');
164
+ }
165
+ });
166
+ router.post('/email/settings/test', async (request) => {
167
+ try {
168
+ const auth = await requireAuth(request);
169
+ if (auth.error)
170
+ return auth.error;
171
+ const adminErr = requireAdminScope(auth.session);
172
+ if (adminErr)
173
+ return adminErr;
174
+ if (!(await checkRateLimitAsync(emailTestLimiter, `email-test:${auth.session.userId}`))) {
175
+ return errorResponse('Too many test emails. Please try again later.', 429);
176
+ }
177
+ const d = db();
178
+ // The test recipient is ALWAYS the signed-in admin's own address — never
179
+ // a caller-supplied one — so this endpoint can't be used to spam others.
180
+ if (!hasModel(d, 'user')) {
181
+ return errorResponse('User model unavailable; cannot determine recipient.', 500);
182
+ }
183
+ const user = await d.user.findUnique({
184
+ where: { id: auth.session.userId },
185
+ select: { email: true, name: true },
186
+ });
187
+ if (!user?.email) {
188
+ return errorResponse('Your account has no email address to send the test to.', 400);
189
+ }
190
+ const { resolveEmailSenderAsync, clearEmailSenderCache } = await import('../../email/resolve.js');
191
+ const { getEmailConfig, putEmailConfig } = await import('../../email/settings-store.js');
192
+ clearEmailSenderCache(); // always test the freshest configuration
193
+ const sender = await resolveEmailSenderAsync(d);
194
+ if (!sender) {
195
+ return errorResponse('No email provider is configured. Save provider settings (or set env vars) first.', 400);
196
+ }
197
+ let success = false;
198
+ let errorMessage = null;
199
+ try {
200
+ await sender.send({
201
+ to: user.email,
202
+ subject: 'Actuate CMS test email',
203
+ html: `<div style="font-family:system-ui,sans-serif;color:#111;max-width:640px"><p style="font-size:15px">This is a test email from your Actuate CMS email settings${user.name ? `, requested by ${user.name}` : ''}. If you received it, your provider is configured correctly.</p></div>`,
204
+ text: 'This is a test email from your Actuate CMS email settings. If you received it, your provider is configured correctly.',
205
+ });
206
+ success = true;
207
+ }
208
+ catch (err) {
209
+ errorMessage = err instanceof Error ? err.message : 'Send failed';
210
+ }
211
+ // Record the outcome on the config doc (best-effort) so the UI can show
212
+ // "last tested" state across sessions. Skip when only env config exists.
213
+ try {
214
+ const config = await getEmailConfig(d);
215
+ if (config.provider) {
216
+ await putEmailConfig(d, {
217
+ ...config,
218
+ lastTestStatus: success ? 'success' : 'failed',
219
+ lastTestedAt: new Date().toISOString(),
220
+ lastTestError: errorMessage ?? undefined,
221
+ }, auth.session.userId);
222
+ }
223
+ }
224
+ catch {
225
+ /* recording the result must not mask the send outcome */
226
+ }
227
+ try {
228
+ await logEvent({
229
+ event: 'test_email_settings',
230
+ userId: auth.session.userId,
231
+ ipAddress: getClientIp(request),
232
+ details: { success, source: 'settings.email' },
233
+ });
234
+ }
235
+ catch {
236
+ /* never block on audit */
237
+ }
238
+ if (!success) {
239
+ return errorResponse(errorMessage ?? 'Test send failed', 502);
240
+ }
241
+ return json({ data: { success: true, sentTo: user.email } });
242
+ }
243
+ catch (err) {
244
+ return internalError(err, 'email/settings test');
245
+ }
246
+ });
247
+ }
248
+ //# sourceMappingURL=email-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email-settings.js","sourceRoot":"","sources":["../../../src/api/routes/email-settings.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ import { logEvent } from '../../security/audit.js';
7
7
  import { getActuateConfig } from '../../config/runtime.js';
8
8
  import { generateApiKey } from '../../security/api-key-enhanced.js';
9
9
  import { guardedDb } from '../guarded-db.js';
10
- import { json, errorResponse, internalError, hasModel, modelNotAvailable, requirePasswordReauth, requireAuth, requireAdminScope, ADMIN_ROLES, requireRole, teamOptionsFor, isEmailConfigured, inviteLimiter, checkRateLimitAsync, clientIp, } from '../route-helpers.js';
10
+ import { json, errorResponse, internalError, hasModel, modelNotAvailable, requirePasswordReauth, requireAuth, requireAdminScope, ADMIN_ROLES, requireRole, teamOptionsFor, isEmailConfiguredAsync, inviteLimiter, checkRateLimitAsync, clientIp, } from '../route-helpers.js';
11
11
  export function registerUserRoutes(router) {
12
12
  const db = guardedDb;
13
13
  // ---------------------------------------------------------------------------
@@ -205,7 +205,7 @@ export function registerUserRoutes(router) {
205
205
  if (!hasModel(d, 'user'))
206
206
  return modelNotAvailable('user');
207
207
  const stats = await getUserStats(d, teamOptionsFor(auth.session));
208
- return json({ data: { ...stats, emailConfigured: isEmailConfigured() } });
208
+ return json({ data: { ...stats, emailConfigured: await isEmailConfiguredAsync(d) } });
209
209
  }
210
210
  catch (err) {
211
211
  return internalError(err, 'user stats');
@@ -673,7 +673,7 @@ export function registerUserRoutes(router) {
673
673
  if (reauthErr)
674
674
  return reauthErr;
675
675
  }
676
- if (!isEmailConfigured()) {
676
+ if (!(await isEmailConfiguredAsync(db()))) {
677
677
  return errorResponse('Email is not configured, so a reset link cannot be sent. Configure an email provider first.', 409);
678
678
  }
679
679
  const cmsConfig = getActuateConfig();