@actuate-media/cms-core 0.11.2 → 0.13.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/__tests__/api/cron-routes.test.d.ts +2 -0
- package/dist/__tests__/api/cron-routes.test.d.ts.map +1 -0
- package/dist/__tests__/api/cron-routes.test.js +67 -0
- package/dist/__tests__/api/cron-routes.test.js.map +1 -0
- package/dist/__tests__/api/health.test.d.ts +2 -0
- package/dist/__tests__/api/health.test.d.ts.map +1 -0
- package/dist/__tests__/api/health.test.js +140 -0
- package/dist/__tests__/api/health.test.js.map +1 -0
- package/dist/__tests__/auth/oauth.test.d.ts +2 -0
- package/dist/__tests__/auth/oauth.test.d.ts.map +1 -0
- package/dist/__tests__/auth/oauth.test.js +406 -0
- package/dist/__tests__/auth/oauth.test.js.map +1 -0
- package/dist/__tests__/auth/password.test.js +82 -3
- package/dist/__tests__/auth/password.test.js.map +1 -1
- package/dist/__tests__/auth/reset.test.d.ts +2 -0
- package/dist/__tests__/auth/reset.test.d.ts.map +1 -0
- package/dist/__tests__/auth/reset.test.js +303 -0
- package/dist/__tests__/auth/reset.test.js.map +1 -0
- package/dist/__tests__/auth/session.test.js +54 -1
- package/dist/__tests__/auth/session.test.js.map +1 -1
- package/dist/__tests__/cron/cron.test.d.ts +2 -0
- package/dist/__tests__/cron/cron.test.d.ts.map +1 -0
- package/dist/__tests__/cron/cron.test.js +262 -0
- package/dist/__tests__/cron/cron.test.js.map +1 -0
- package/dist/__tests__/diagnostics/env.test.d.ts +2 -0
- package/dist/__tests__/diagnostics/env.test.d.ts.map +1 -0
- package/dist/__tests__/diagnostics/env.test.js +119 -0
- package/dist/__tests__/diagnostics/env.test.js.map +1 -0
- package/dist/__tests__/diagnostics/logger.test.d.ts +2 -0
- package/dist/__tests__/diagnostics/logger.test.d.ts.map +1 -0
- package/dist/__tests__/diagnostics/logger.test.js +111 -0
- package/dist/__tests__/diagnostics/logger.test.js.map +1 -0
- package/dist/__tests__/security/encrypted-fields.test.d.ts +2 -0
- package/dist/__tests__/security/encrypted-fields.test.d.ts.map +1 -0
- package/dist/__tests__/security/encrypted-fields.test.js +60 -0
- package/dist/__tests__/security/encrypted-fields.test.js.map +1 -0
- package/dist/__tests__/security/rate-limit.test.js +42 -0
- package/dist/__tests__/security/rate-limit.test.js.map +1 -1
- package/dist/__tests__/security/safe-fetch.test.d.ts +2 -0
- package/dist/__tests__/security/safe-fetch.test.d.ts.map +1 -0
- package/dist/__tests__/security/safe-fetch.test.js +97 -0
- package/dist/__tests__/security/safe-fetch.test.js.map +1 -0
- package/dist/__tests__/security/ssrf.test.d.ts +2 -0
- package/dist/__tests__/security/ssrf.test.d.ts.map +1 -0
- package/dist/__tests__/security/ssrf.test.js +209 -0
- package/dist/__tests__/security/ssrf.test.js.map +1 -0
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +7 -6
- package/dist/actions.js.map +1 -1
- package/dist/api/handler-factory.d.ts.map +1 -1
- package/dist/api/handler-factory.js +15 -6
- package/dist/api/handler-factory.js.map +1 -1
- package/dist/api/handlers.d.ts.map +1 -1
- package/dist/api/handlers.js +165 -26
- package/dist/api/handlers.js.map +1 -1
- package/dist/auth/oauth.d.ts +8 -0
- package/dist/auth/oauth.d.ts.map +1 -1
- package/dist/auth/oauth.js +44 -2
- package/dist/auth/oauth.js.map +1 -1
- package/dist/auth/password.d.ts +35 -2
- package/dist/auth/password.d.ts.map +1 -1
- package/dist/auth/password.js +97 -7
- package/dist/auth/password.js.map +1 -1
- package/dist/auth/reset.d.ts.map +1 -1
- package/dist/auth/reset.js +2 -1
- package/dist/auth/reset.js.map +1 -1
- package/dist/auth/session.d.ts +9 -0
- package/dist/auth/session.d.ts.map +1 -1
- package/dist/auth/session.js +54 -1
- package/dist/auth/session.js.map +1 -1
- package/dist/config/runtime.d.ts +99 -0
- package/dist/config/runtime.d.ts.map +1 -0
- package/dist/config/runtime.js +43 -0
- package/dist/config/runtime.js.map +1 -0
- package/dist/config/types.d.ts +21 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/cron/index.d.ts +72 -0
- package/dist/cron/index.d.ts.map +1 -0
- package/dist/cron/index.js +222 -0
- package/dist/cron/index.js.map +1 -0
- package/dist/diagnostics/env.d.ts +44 -0
- package/dist/diagnostics/env.d.ts.map +1 -0
- package/dist/diagnostics/env.js +293 -0
- package/dist/diagnostics/env.js.map +1 -0
- package/dist/diagnostics/logger.d.ts +38 -0
- package/dist/diagnostics/logger.d.ts.map +1 -0
- package/dist/diagnostics/logger.js +89 -0
- package/dist/diagnostics/logger.js.map +1 -0
- package/dist/page-builder/blocks.d.ts.map +1 -1
- package/dist/page-builder/blocks.js +6 -1
- package/dist/page-builder/blocks.js.map +1 -1
- package/dist/security/audit.d.ts.map +1 -1
- package/dist/security/audit.js +3 -1
- package/dist/security/audit.js.map +1 -1
- package/dist/security/encrypted-fields.d.ts +9 -0
- package/dist/security/encrypted-fields.d.ts.map +1 -1
- package/dist/security/encrypted-fields.js +52 -1
- package/dist/security/encrypted-fields.js.map +1 -1
- package/dist/security/ip-canon.d.ts +71 -0
- package/dist/security/ip-canon.d.ts.map +1 -0
- package/dist/security/ip-canon.js +352 -0
- package/dist/security/ip-canon.js.map +1 -0
- package/dist/security/rate-limit.d.ts +8 -0
- package/dist/security/rate-limit.d.ts.map +1 -1
- package/dist/security/rate-limit.js +81 -3
- package/dist/security/rate-limit.js.map +1 -1
- package/dist/security/safe-fetch.d.ts +30 -8
- package/dist/security/safe-fetch.d.ts.map +1 -1
- package/dist/security/safe-fetch.js +32 -6
- package/dist/security/safe-fetch.js.map +1 -1
- package/dist/security/webhook.d.ts +20 -2
- package/dist/security/webhook.d.ts.map +1 -1
- package/dist/security/webhook.js +100 -30
- package/dist/security/webhook.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Environment shape validation for the Actuate CMS runtime.
|
|
3
|
+
*
|
|
4
|
+
* The `/health` and admin diagnostics endpoints surface this so operators
|
|
5
|
+
* notice mis-configured secrets *before* a runtime call hits them. We never
|
|
6
|
+
* return the values themselves — only the validation verdict and a redacted
|
|
7
|
+
* preview where it helps debugging (e.g. "first 4 hex chars match").
|
|
8
|
+
*
|
|
9
|
+
* Why a dedicated module:
|
|
10
|
+
* - Centralises all "is this env var well-formed" rules so consumers don't
|
|
11
|
+
* re-invent length / hex / placeholder checks per call site.
|
|
12
|
+
* - Fails closed on shape errors (e.g. a 31-char CMS_SECRET, an
|
|
13
|
+
* `aes256-local-dev-key-...` placeholder still in production) which the
|
|
14
|
+
* prior `presence-only` check missed entirely (audit issue M6).
|
|
15
|
+
*/
|
|
16
|
+
const HEX_RE = /^[0-9a-fA-F]+$/;
|
|
17
|
+
const PLACEHOLDER_PATTERNS = [
|
|
18
|
+
/change-?(me|in-?prod)/i,
|
|
19
|
+
/your-?(secret|key|token)/i,
|
|
20
|
+
/placeholder/i,
|
|
21
|
+
/example/i,
|
|
22
|
+
/todo/i,
|
|
23
|
+
/aes256-local-dev-key/i,
|
|
24
|
+
];
|
|
25
|
+
function isPlaceholder(value) {
|
|
26
|
+
return PLACEHOLDER_PATTERNS.some((p) => p.test(value));
|
|
27
|
+
}
|
|
28
|
+
const PROCESS_ENV = {
|
|
29
|
+
get: (name) => process.env[name],
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Validate the shape of every well-known runtime env var. Pass a custom
|
|
33
|
+
* `source` to test without mutating `process.env`.
|
|
34
|
+
*/
|
|
35
|
+
export function validateEnvShape(source = PROCESS_ENV) {
|
|
36
|
+
const checks = [];
|
|
37
|
+
// ─── CMS_SECRET ──────────────────────────────────────────────
|
|
38
|
+
// The `source.get('CMS_SECRET')` lookup is intentionally pluggable: the
|
|
39
|
+
// runtime caller (`/api/cms/health`) wraps this so the lookup also covers
|
|
40
|
+
// the legacy `CMS_SESSION_SECRET` env var and `actuate.config.ts → secret`
|
|
41
|
+
// — those are equally valid sources at runtime via `getSessionSecret()`.
|
|
42
|
+
// Without that wrapping, a config-file-only deploy would be falsely
|
|
43
|
+
// reported as `missing` (Bugbot review on PR #43, Medium).
|
|
44
|
+
const secret = source.get('CMS_SECRET');
|
|
45
|
+
if (!secret) {
|
|
46
|
+
checks.push({
|
|
47
|
+
name: 'CMS_SECRET',
|
|
48
|
+
status: 'missing',
|
|
49
|
+
message: 'Required. Generate with `node -e "console.log(crypto.randomBytes(32).toString(\'hex\'))"` and set `CMS_SECRET`, or pass `secret` in `actuate.config.ts`.',
|
|
50
|
+
required: true,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
else if (secret.length < 32) {
|
|
54
|
+
checks.push({
|
|
55
|
+
name: 'CMS_SECRET',
|
|
56
|
+
status: 'error',
|
|
57
|
+
message: `Must be ≥ 32 characters (got ${secret.length}). JWT signing requires this minimum.`,
|
|
58
|
+
required: true,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
else if (isPlaceholder(secret)) {
|
|
62
|
+
checks.push({
|
|
63
|
+
name: 'CMS_SECRET',
|
|
64
|
+
status: 'error',
|
|
65
|
+
message: 'Looks like a placeholder string. Replace with a real 32+ char random secret.',
|
|
66
|
+
required: true,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
// Intentionally do not include `secret.length` here — `/health` is
|
|
71
|
+
// unauthenticated and exact secret lengths narrow brute-force search
|
|
72
|
+
// space for an attacker. The error/warn branches above can stay verbose
|
|
73
|
+
// because they only trigger on operator-visible misconfigurations.
|
|
74
|
+
checks.push({
|
|
75
|
+
name: 'CMS_SECRET',
|
|
76
|
+
status: 'ok',
|
|
77
|
+
message: 'Configured.',
|
|
78
|
+
required: true,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
// ─── CMS_ENCRYPTION_KEY ──────────────────────────────────────
|
|
82
|
+
const encKey = source.get('CMS_ENCRYPTION_KEY');
|
|
83
|
+
if (!encKey) {
|
|
84
|
+
checks.push({
|
|
85
|
+
name: 'CMS_ENCRYPTION_KEY',
|
|
86
|
+
status: 'warn',
|
|
87
|
+
message: 'Optional but recommended. AES-256-GCM field encryption will throw at runtime when not set. Provide 64 hex chars.',
|
|
88
|
+
required: false,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
else if (encKey.length !== 64) {
|
|
92
|
+
checks.push({
|
|
93
|
+
name: 'CMS_ENCRYPTION_KEY',
|
|
94
|
+
status: 'error',
|
|
95
|
+
message: `Must be exactly 64 hex characters (32 bytes). Got ${encKey.length}.`,
|
|
96
|
+
required: false,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
else if (!HEX_RE.test(encKey)) {
|
|
100
|
+
// No `isPlaceholder()` branch follows — by this point the value has
|
|
101
|
+
// already passed length-64 and `HEX_RE`, meaning it's pure hex chars.
|
|
102
|
+
// Every pattern in `PLACEHOLDER_PATTERNS` requires non-hex letters
|
|
103
|
+
// (`g`, `h`, `l`, `m`, `o`, `p`, `r`, `s`, `t`, `u`, `v`, `w`, `x`, `y`, `z`,
|
|
104
|
+
// hyphens) so a passing hex string can never match a placeholder. The
|
|
105
|
+
// message below already says "Looks like a placeholder" for the common
|
|
106
|
+
// case where the configured value is a documented dev placeholder
|
|
107
|
+
// (e.g. `aes256-local-dev-key-change-in-prod`, which fails this branch).
|
|
108
|
+
checks.push({
|
|
109
|
+
name: 'CMS_ENCRYPTION_KEY',
|
|
110
|
+
status: 'error',
|
|
111
|
+
message: 'Must contain only hex characters (0-9, a-f). Looks like a placeholder.',
|
|
112
|
+
required: false,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
checks.push({
|
|
117
|
+
name: 'CMS_ENCRYPTION_KEY',
|
|
118
|
+
status: 'ok',
|
|
119
|
+
message: 'Configured.',
|
|
120
|
+
required: false,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
// ─── DATABASE_URL ────────────────────────────────────────────
|
|
124
|
+
const dbUrl = source.get('DATABASE_URL');
|
|
125
|
+
if (!dbUrl) {
|
|
126
|
+
checks.push({
|
|
127
|
+
name: 'DATABASE_URL',
|
|
128
|
+
status: 'missing',
|
|
129
|
+
message: 'Required. Connection string for the Prisma client.',
|
|
130
|
+
required: true,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
else if (!/^(postgres(ql)?|mysql|file|sqlite):/i.test(dbUrl)) {
|
|
134
|
+
checks.push({
|
|
135
|
+
name: 'DATABASE_URL',
|
|
136
|
+
status: 'error',
|
|
137
|
+
message: 'Must start with a known DB scheme (postgres://, mysql://, file:, sqlite://).',
|
|
138
|
+
required: true,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
checks.push({
|
|
143
|
+
name: 'DATABASE_URL',
|
|
144
|
+
status: 'ok',
|
|
145
|
+
message: 'Configured.',
|
|
146
|
+
required: true,
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
// ─── BLOB_READ_WRITE_TOKEN ──────────────────────────────────
|
|
150
|
+
const blob = source.get('BLOB_READ_WRITE_TOKEN');
|
|
151
|
+
if (!blob) {
|
|
152
|
+
checks.push({
|
|
153
|
+
name: 'BLOB_READ_WRITE_TOKEN',
|
|
154
|
+
status: 'warn',
|
|
155
|
+
message: 'Required for media uploads on Vercel Blob storage. Without it, /media/upload will fail.',
|
|
156
|
+
required: false,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
else if (!blob.startsWith('vercel_blob_')) {
|
|
160
|
+
checks.push({
|
|
161
|
+
name: 'BLOB_READ_WRITE_TOKEN',
|
|
162
|
+
status: 'warn',
|
|
163
|
+
message: 'Does not start with `vercel_blob_` — verify this is a real Vercel Blob token.',
|
|
164
|
+
required: false,
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
checks.push({
|
|
169
|
+
name: 'BLOB_READ_WRITE_TOKEN',
|
|
170
|
+
status: 'ok',
|
|
171
|
+
message: 'Configured.',
|
|
172
|
+
required: false,
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
// ─── UPSTASH_REDIS_REST_URL / TOKEN ─────────────────────────
|
|
176
|
+
const upstashUrl = source.get('UPSTASH_REDIS_REST_URL');
|
|
177
|
+
const upstashToken = source.get('UPSTASH_REDIS_REST_TOKEN');
|
|
178
|
+
if (!upstashUrl && !upstashToken) {
|
|
179
|
+
checks.push({
|
|
180
|
+
name: 'UPSTASH_REDIS_REST_URL',
|
|
181
|
+
status: 'warn',
|
|
182
|
+
message: 'Optional. Without Upstash, rate limiting falls back to in-memory (single-process only — unsafe across serverless invocations).',
|
|
183
|
+
required: false,
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
else if (upstashUrl && !upstashToken) {
|
|
187
|
+
checks.push({
|
|
188
|
+
name: 'UPSTASH_REDIS_REST_TOKEN',
|
|
189
|
+
status: 'error',
|
|
190
|
+
message: 'URL is set but token is missing — rate limiter will refuse to start.',
|
|
191
|
+
required: false,
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
else if (!upstashUrl && upstashToken) {
|
|
195
|
+
checks.push({
|
|
196
|
+
name: 'UPSTASH_REDIS_REST_URL',
|
|
197
|
+
status: 'error',
|
|
198
|
+
message: 'Token is set but URL is missing — rate limiter will refuse to start.',
|
|
199
|
+
required: false,
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
else {
|
|
203
|
+
try {
|
|
204
|
+
// eslint-disable-next-line no-new
|
|
205
|
+
new URL(upstashUrl);
|
|
206
|
+
checks.push({
|
|
207
|
+
name: 'UPSTASH_REDIS_REST_URL',
|
|
208
|
+
status: 'ok',
|
|
209
|
+
message: 'Configured (Upstash backend active).',
|
|
210
|
+
required: false,
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
catch {
|
|
214
|
+
checks.push({
|
|
215
|
+
name: 'UPSTASH_REDIS_REST_URL',
|
|
216
|
+
status: 'error',
|
|
217
|
+
message: 'Not a valid URL.',
|
|
218
|
+
required: false,
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
// ─── RESEND_API_KEY ─────────────────────────────────────────
|
|
223
|
+
const resend = source.get('RESEND_API_KEY');
|
|
224
|
+
if (!resend) {
|
|
225
|
+
checks.push({
|
|
226
|
+
name: 'RESEND_API_KEY',
|
|
227
|
+
status: 'warn',
|
|
228
|
+
message: 'Optional. Without it, transactional email (lead notifications, password reset) is silently skipped.',
|
|
229
|
+
required: false,
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
else if (!resend.startsWith('re_')) {
|
|
233
|
+
checks.push({
|
|
234
|
+
name: 'RESEND_API_KEY',
|
|
235
|
+
status: 'warn',
|
|
236
|
+
message: 'Does not start with `re_` — verify this is a real Resend API key.',
|
|
237
|
+
required: false,
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
checks.push({
|
|
242
|
+
name: 'RESEND_API_KEY',
|
|
243
|
+
status: 'ok',
|
|
244
|
+
message: 'Configured.',
|
|
245
|
+
required: false,
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
// ─── CRON_SECRET ────────────────────────────────────────────
|
|
249
|
+
const cronSecret = source.get('CRON_SECRET');
|
|
250
|
+
if (!cronSecret) {
|
|
251
|
+
checks.push({
|
|
252
|
+
name: 'CRON_SECRET',
|
|
253
|
+
status: 'warn',
|
|
254
|
+
message: 'Required to authorise /api/cms/cron/* endpoints. Without it, cron routes return 401 to all callers.',
|
|
255
|
+
required: false,
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
else if (cronSecret.length < 16) {
|
|
259
|
+
checks.push({
|
|
260
|
+
name: 'CRON_SECRET',
|
|
261
|
+
status: 'error',
|
|
262
|
+
message: `Should be ≥ 16 chars (got ${cronSecret.length}). Cron endpoints are publicly addressable.`,
|
|
263
|
+
required: false,
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
else if (isPlaceholder(cronSecret)) {
|
|
267
|
+
checks.push({
|
|
268
|
+
name: 'CRON_SECRET',
|
|
269
|
+
status: 'error',
|
|
270
|
+
message: 'Looks like a placeholder string.',
|
|
271
|
+
required: false,
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
// Same reasoning as CMS_SECRET above — keep the length out of the
|
|
276
|
+
// unauthenticated /health surface.
|
|
277
|
+
checks.push({
|
|
278
|
+
name: 'CRON_SECRET',
|
|
279
|
+
status: 'ok',
|
|
280
|
+
message: 'Configured.',
|
|
281
|
+
required: false,
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
const errorCount = checks.filter((c) => c.status === 'error' || (c.status === 'missing' && c.required)).length;
|
|
285
|
+
const warnCount = checks.filter((c) => c.status === 'warn').length;
|
|
286
|
+
return {
|
|
287
|
+
ok: errorCount === 0,
|
|
288
|
+
errorCount,
|
|
289
|
+
warnCount,
|
|
290
|
+
checks,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/diagnostics/env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured logger for Actuate CMS (audit issue L7).
|
|
3
|
+
*
|
|
4
|
+
* Why a dedicated module instead of `console.*`:
|
|
5
|
+
*
|
|
6
|
+
* 1. **Filterable in production.** Operators can set
|
|
7
|
+
* `ACTUATE_LOG_LEVEL=warn` to silence routine info logs without losing
|
|
8
|
+
* error visibility — `console.*` calls can't be silenced without
|
|
9
|
+
* monkey-patching.
|
|
10
|
+
*
|
|
11
|
+
* 2. **Structured output for log aggregators.** Setting
|
|
12
|
+
* `ACTUATE_LOG_FORMAT=json` switches to one-line JSON entries with
|
|
13
|
+
* consistent fields (`ts`, `level`, `scope`, `msg`, `details`),
|
|
14
|
+
* ready for ingestion by Datadog, Sentry, or CloudWatch.
|
|
15
|
+
*
|
|
16
|
+
* 3. **Scoped namespaces.** `createLogger('rate-limit')` prefixes every
|
|
17
|
+
* message with `[actuate][rate-limit]` so a grep finds related
|
|
18
|
+
* entries instantly.
|
|
19
|
+
*
|
|
20
|
+
* **Migration path:** existing `console.*` calls keep working. New code and
|
|
21
|
+
* security-sensitive paths use the logger. Replace `console.*` callsites
|
|
22
|
+
* incrementally as files are touched.
|
|
23
|
+
*/
|
|
24
|
+
export type LogLevel = 'silent' | 'error' | 'warn' | 'info' | 'debug';
|
|
25
|
+
export interface ScopedLogger {
|
|
26
|
+
error(msg: string, details?: Record<string, unknown>): void;
|
|
27
|
+
warn(msg: string, details?: Record<string, unknown>): void;
|
|
28
|
+
info(msg: string, details?: Record<string, unknown>): void;
|
|
29
|
+
debug(msg: string, details?: Record<string, unknown>): void;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Create a logger scoped to a subsystem name (e.g. `rate-limit`, `oauth`).
|
|
33
|
+
* Output format:
|
|
34
|
+
* text: `[actuate][rate-limit] Upstash failed { reason: '...' }`
|
|
35
|
+
* json: `{"ts":"...","level":"error","scope":"rate-limit","msg":"...","details":{...}}`
|
|
36
|
+
*/
|
|
37
|
+
export declare function createLogger(scope: string): ScopedLogger;
|
|
38
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/diagnostics/logger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAkErE,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IAC3D,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IAC1D,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IAC1D,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;CAC5D;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAOxD"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured logger for Actuate CMS (audit issue L7).
|
|
3
|
+
*
|
|
4
|
+
* Why a dedicated module instead of `console.*`:
|
|
5
|
+
*
|
|
6
|
+
* 1. **Filterable in production.** Operators can set
|
|
7
|
+
* `ACTUATE_LOG_LEVEL=warn` to silence routine info logs without losing
|
|
8
|
+
* error visibility — `console.*` calls can't be silenced without
|
|
9
|
+
* monkey-patching.
|
|
10
|
+
*
|
|
11
|
+
* 2. **Structured output for log aggregators.** Setting
|
|
12
|
+
* `ACTUATE_LOG_FORMAT=json` switches to one-line JSON entries with
|
|
13
|
+
* consistent fields (`ts`, `level`, `scope`, `msg`, `details`),
|
|
14
|
+
* ready for ingestion by Datadog, Sentry, or CloudWatch.
|
|
15
|
+
*
|
|
16
|
+
* 3. **Scoped namespaces.** `createLogger('rate-limit')` prefixes every
|
|
17
|
+
* message with `[actuate][rate-limit]` so a grep finds related
|
|
18
|
+
* entries instantly.
|
|
19
|
+
*
|
|
20
|
+
* **Migration path:** existing `console.*` calls keep working. New code and
|
|
21
|
+
* security-sensitive paths use the logger. Replace `console.*` callsites
|
|
22
|
+
* incrementally as files are touched.
|
|
23
|
+
*/
|
|
24
|
+
const LEVEL_RANK = {
|
|
25
|
+
silent: 0,
|
|
26
|
+
error: 10,
|
|
27
|
+
warn: 20,
|
|
28
|
+
info: 30,
|
|
29
|
+
debug: 40,
|
|
30
|
+
};
|
|
31
|
+
function resolveLevel() {
|
|
32
|
+
const raw = (process.env.ACTUATE_LOG_LEVEL ?? '').toLowerCase();
|
|
33
|
+
if (raw === 'silent' || raw === 'error' || raw === 'warn' || raw === 'info' || raw === 'debug') {
|
|
34
|
+
return raw;
|
|
35
|
+
}
|
|
36
|
+
// Default: warn in production, info elsewhere. Tests run with NODE_ENV=test
|
|
37
|
+
// and benefit from `info` so failing assertions show context.
|
|
38
|
+
return process.env.NODE_ENV === 'production' ? 'warn' : 'info';
|
|
39
|
+
}
|
|
40
|
+
function isJsonFormat() {
|
|
41
|
+
return (process.env.ACTUATE_LOG_FORMAT ?? '').toLowerCase() === 'json';
|
|
42
|
+
}
|
|
43
|
+
function shouldLog(level) {
|
|
44
|
+
const current = resolveLevel();
|
|
45
|
+
return LEVEL_RANK[level] <= LEVEL_RANK[current];
|
|
46
|
+
}
|
|
47
|
+
function emit(level, scope, msg, details) {
|
|
48
|
+
if (!shouldLog(level))
|
|
49
|
+
return;
|
|
50
|
+
const sink = level === 'error'
|
|
51
|
+
? console.error
|
|
52
|
+
: level === 'warn'
|
|
53
|
+
? console.warn
|
|
54
|
+
: level === 'info'
|
|
55
|
+
? console.info
|
|
56
|
+
: console.debug;
|
|
57
|
+
if (isJsonFormat()) {
|
|
58
|
+
sink(JSON.stringify({
|
|
59
|
+
ts: new Date().toISOString(),
|
|
60
|
+
level,
|
|
61
|
+
scope,
|
|
62
|
+
msg,
|
|
63
|
+
...(details ? { details } : {}),
|
|
64
|
+
}));
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const prefix = `[actuate][${scope}]`;
|
|
68
|
+
if (details) {
|
|
69
|
+
sink(prefix, msg, details);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
sink(prefix, msg);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Create a logger scoped to a subsystem name (e.g. `rate-limit`, `oauth`).
|
|
77
|
+
* Output format:
|
|
78
|
+
* text: `[actuate][rate-limit] Upstash failed { reason: '...' }`
|
|
79
|
+
* json: `{"ts":"...","level":"error","scope":"rate-limit","msg":"...","details":{...}}`
|
|
80
|
+
*/
|
|
81
|
+
export function createLogger(scope) {
|
|
82
|
+
return {
|
|
83
|
+
error: (msg, details) => emit('error', scope, msg, details),
|
|
84
|
+
warn: (msg, details) => emit('warn', scope, msg, details),
|
|
85
|
+
info: (msg, details) => emit('info', scope, msg, details),
|
|
86
|
+
debug: (msg, details) => emit('debug', scope, msg, details),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/diagnostics/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../src/page-builder/blocks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AA0QxE,MAAM,WAAW,mBAAmB;IAClC;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,mBAAmB,EAAE,CAAA;IACpC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;
|
|
1
|
+
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../src/page-builder/blocks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AA0QxE,MAAM,WAAW,mBAAmB;IAClC;;;;;;;;OAQG;IACH,YAAY,CAAC,EAAE,mBAAmB,EAAE,CAAA;IACpC;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAiBD,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAkC;gBAEpC,OAAO,GAAE,mBAAwB;IAmB7C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS;IAIlD,MAAM,IAAI,mBAAmB,EAAE;IAI/B,QAAQ,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI;IAI1C,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;CAKlF"}
|
|
@@ -264,7 +264,12 @@ const CORE_BLOCKS = [
|
|
|
264
264
|
function readCustomBlocksFromGlobalConfig() {
|
|
265
265
|
if (typeof globalThis === 'undefined')
|
|
266
266
|
return [];
|
|
267
|
-
|
|
267
|
+
// We read directly from `globalThis` (rather than via `getActuateConfig()`)
|
|
268
|
+
// so this stays synchronous at module-load time and avoids importing the
|
|
269
|
+
// wider runtime module from inside page-builder. The shape we need is
|
|
270
|
+
// narrow enough that a local typed cast is safer than `as any`.
|
|
271
|
+
const config = globalThis
|
|
272
|
+
.__actuateConfig;
|
|
268
273
|
const blocks = config?.pageBuilder?.blocks;
|
|
269
274
|
if (Array.isArray(blocks)) {
|
|
270
275
|
return blocks.filter((b) => !!b && typeof b.type === 'string');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../src/page-builder/blocks.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"blocks.js","sourceRoot":"","sources":["../../src/page-builder/blocks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/security/audit.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/security/audit.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,SAAS,CAAC,EAAE,IAAI,CAAA;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,EAAE,CAAC,EAAE,IAAI,CAAA;IACT,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,UAAU,EAAE,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,iCAAiC;AACjC,wBAAsB,QAAQ,CAAC,KAAK,EAAE;IACpC,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBhB;AAED,2DAA2D;AAC3D,wBAAsB,WAAW,CAC/B,OAAO,GAAE;IACP,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;CACb,GACL,OAAO,CAAC;IAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAmB5C"}
|
package/dist/security/audit.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { getDB } from '../db.js';
|
|
2
|
+
import { createLogger } from '../diagnostics/logger.js';
|
|
3
|
+
const logger = createLogger('audit');
|
|
2
4
|
/** Record an audit log event. */
|
|
3
5
|
export async function logEvent(event) {
|
|
4
6
|
try {
|
|
@@ -17,7 +19,7 @@ export async function logEvent(event) {
|
|
|
17
19
|
// Fail open — audit logging should never block the primary operation,
|
|
18
20
|
// but still surface the failure so the operator can fix it.
|
|
19
21
|
if (process.env.NODE_ENV !== 'test') {
|
|
20
|
-
|
|
22
|
+
logger.error('logEvent failed', { reason: err instanceof Error ? err.message : String(err) });
|
|
21
23
|
}
|
|
22
24
|
}
|
|
23
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/security/audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/security/audit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAEvD,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAA;AAyBpC,iCAAiC;AACjC,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,KAM9B;IACC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,KAAK,EAAO,CAAA;QACvB,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC;YACvB,IAAI,EAAE;gBACJ,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI;gBAC5B,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;gBAClC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;gBAClC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;aAC/B;SACF,CAAC,CAAA;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,sEAAsE;QACtE,4DAA4D;QAC5D,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;YACpC,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAC/F,CAAC;IACH,CAAC;AACH,CAAC;AAED,2DAA2D;AAC3D,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,UAKI,EAAE;IAEN,MAAM,EAAE,GAAG,KAAK,EAAO,CAAA;IACvB,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,CAAC,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,OAAO,CAAA;IAE1D,MAAM,KAAK,GAAQ,EAAE,CAAA;IACrB,IAAI,MAAM;QAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAA;IACjC,IAAI,KAAK;QAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAA;IAE9B,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACzC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACnB,KAAK;YACL,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE;YAC9B,IAAI,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ;YAC3B,IAAI,EAAE,QAAQ;SACf,CAAC;QACF,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,CAAC;KAC7B,CAAC,CAAA;IAEF,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAA;AAC3B,CAAC"}
|
|
@@ -1,3 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thrown for invalid `CMS_ENCRYPTION_KEY` shape. We use a named class so the
|
|
3
|
+
* caller (typically an API handler) can map it to a clear 500 with operator
|
|
4
|
+
* guidance rather than the opaque `OperationError` that some Web Crypto
|
|
5
|
+
* implementations throw on malformed keys.
|
|
6
|
+
*/
|
|
7
|
+
export declare class InvalidEncryptionKeyError extends Error {
|
|
8
|
+
constructor(reason: string);
|
|
9
|
+
}
|
|
1
10
|
/** Encrypt a field value using AES-256-GCM. */
|
|
2
11
|
export declare function encryptField(value: string, keyHex: string): Promise<string>;
|
|
3
12
|
/** Decrypt a field value encrypted with AES-256-GCM. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encrypted-fields.d.ts","sourceRoot":"","sources":["../../src/security/encrypted-fields.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"encrypted-fields.d.ts","sourceRoot":"","sources":["../../src/security/encrypted-fields.ts"],"names":[],"mappings":"AAQA;;;;;GAKG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;gBACtC,MAAM,EAAE,MAAM;CAQ3B;AAyBD,+CAA+C;AAC/C,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAiBjF;AAED,wDAAwD;AACxD,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAcrF"}
|
|
@@ -1,8 +1,46 @@
|
|
|
1
1
|
const ALGORITHM = 'AES-GCM';
|
|
2
2
|
const IV_LENGTH = 12;
|
|
3
3
|
const TAG_LENGTH = 128;
|
|
4
|
+
const KEY_BYTES = 32; // AES-256 requires exactly 32 bytes
|
|
5
|
+
const KEY_HEX_LENGTH = KEY_BYTES * 2;
|
|
6
|
+
const HEX_RE = /^[0-9a-fA-F]+$/;
|
|
7
|
+
/**
|
|
8
|
+
* Thrown for invalid `CMS_ENCRYPTION_KEY` shape. We use a named class so the
|
|
9
|
+
* caller (typically an API handler) can map it to a clear 500 with operator
|
|
10
|
+
* guidance rather than the opaque `OperationError` that some Web Crypto
|
|
11
|
+
* implementations throw on malformed keys.
|
|
12
|
+
*/
|
|
13
|
+
export class InvalidEncryptionKeyError extends Error {
|
|
14
|
+
constructor(reason) {
|
|
15
|
+
super(`[Actuate CMS] CMS_ENCRYPTION_KEY is invalid: ${reason}. ` +
|
|
16
|
+
`Generate a valid key with: ` +
|
|
17
|
+
`node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"`);
|
|
18
|
+
this.name = 'InvalidEncryptionKeyError';
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Validate that `keyHex` is exactly 64 hex chars (32 bytes for AES-256).
|
|
23
|
+
*
|
|
24
|
+
* Without this guard, WebCrypto's `importKey` either throws an opaque
|
|
25
|
+
* `OperationError` (short keys), or in some non-spec runtimes silently
|
|
26
|
+
* truncates / pads — both produce ciphertext that the matching `decrypt`
|
|
27
|
+
* call can't reverse, surfaced to the user as a generic "decryption failed"
|
|
28
|
+
* weeks after the bad key was first deployed.
|
|
29
|
+
*/
|
|
30
|
+
function validateKey(keyHex) {
|
|
31
|
+
if (typeof keyHex !== 'string' || keyHex.length === 0) {
|
|
32
|
+
throw new InvalidEncryptionKeyError('key is empty or not a string');
|
|
33
|
+
}
|
|
34
|
+
if (keyHex.length !== KEY_HEX_LENGTH) {
|
|
35
|
+
throw new InvalidEncryptionKeyError(`key must be ${KEY_HEX_LENGTH} hex characters (${KEY_BYTES} bytes), got ${keyHex.length}`);
|
|
36
|
+
}
|
|
37
|
+
if (!HEX_RE.test(keyHex)) {
|
|
38
|
+
throw new InvalidEncryptionKeyError('key must contain only hex characters [0-9a-fA-F]');
|
|
39
|
+
}
|
|
40
|
+
}
|
|
4
41
|
/** Encrypt a field value using AES-256-GCM. */
|
|
5
42
|
export async function encryptField(value, keyHex) {
|
|
43
|
+
validateKey(keyHex);
|
|
6
44
|
const key = await importKey(keyHex);
|
|
7
45
|
const iv = crypto.getRandomValues(new Uint8Array(IV_LENGTH));
|
|
8
46
|
const encoded = new TextEncoder().encode(value);
|
|
@@ -14,6 +52,7 @@ export async function encryptField(value, keyHex) {
|
|
|
14
52
|
}
|
|
15
53
|
/** Decrypt a field value encrypted with AES-256-GCM. */
|
|
16
54
|
export async function decryptField(encrypted, keyHex) {
|
|
55
|
+
validateKey(keyHex);
|
|
17
56
|
const key = await importKey(keyHex);
|
|
18
57
|
const data = hexToBuffer(encrypted);
|
|
19
58
|
const iv = data.slice(0, IV_LENGTH);
|
|
@@ -33,10 +72,22 @@ function bufferToHex(buffer) {
|
|
|
33
72
|
.map((b) => b.toString(16).padStart(2, '0'))
|
|
34
73
|
.join('');
|
|
35
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Decode a hex string to bytes. Caller is expected to have validated shape
|
|
77
|
+
* via `validateKey` for keys; this function tolerates already-validated input
|
|
78
|
+
* and rejects odd-length hex (which previously silently dropped trailing chars).
|
|
79
|
+
*/
|
|
36
80
|
function hexToBuffer(hex) {
|
|
81
|
+
if (hex.length % 2 !== 0) {
|
|
82
|
+
throw new Error('hex string must have an even number of characters');
|
|
83
|
+
}
|
|
37
84
|
const bytes = new Uint8Array(hex.length / 2);
|
|
38
85
|
for (let i = 0; i < hex.length; i += 2) {
|
|
39
|
-
|
|
86
|
+
const byte = parseInt(hex.slice(i, i + 2), 16);
|
|
87
|
+
if (Number.isNaN(byte)) {
|
|
88
|
+
throw new Error(`invalid hex character at offset ${i}`);
|
|
89
|
+
}
|
|
90
|
+
bytes[i / 2] = byte;
|
|
40
91
|
}
|
|
41
92
|
return bytes;
|
|
42
93
|
}
|