@cogenta/core 0.4.0 → 0.7.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/CHANGELOG.md +3532 -0
- package/dist/config/env.d.ts +21 -0
- package/dist/config/env.d.ts.map +1 -1
- package/dist/config/env.js +72 -0
- package/dist/config/env.js.map +1 -1
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/load-config.d.ts +9 -0
- package/dist/config/load-config.d.ts.map +1 -1
- package/dist/config/load-config.js +39 -15
- package/dist/config/load-config.js.map +1 -1
- package/dist/config/resolve-config.d.ts.map +1 -1
- package/dist/config/resolve-config.js +39 -0
- package/dist/config/resolve-config.js.map +1 -1
- package/dist/config/schema.d.ts +49 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +149 -1
- package/dist/config/schema.js.map +1 -1
- package/dist/config/secret-hygiene.d.ts +55 -0
- package/dist/config/secret-hygiene.d.ts.map +1 -0
- package/dist/config/secret-hygiene.js +94 -0
- package/dist/config/secret-hygiene.js.map +1 -0
- package/dist/config/types.d.ts +166 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +4 -0
- package/dist/config/types.js.map +1 -1
- package/dist/drivers/index.d.ts +1 -1
- package/dist/drivers/index.d.ts.map +1 -1
- package/dist/drivers/index.js.map +1 -1
- package/dist/drivers/registry.d.ts.map +1 -1
- package/dist/drivers/registry.js +15 -8
- package/dist/drivers/registry.js.map +1 -1
- package/dist/drivers/types.d.ts +23 -0
- package/dist/drivers/types.d.ts.map +1 -1
- package/dist/errors/codes.d.ts +1 -1
- package/dist/errors/codes.d.ts.map +1 -1
- package/dist/errors/codes.js +244 -0
- package/dist/errors/codes.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/logger/error-log.d.ts +48 -0
- package/dist/logger/error-log.d.ts.map +1 -0
- package/dist/logger/error-log.js +57 -0
- package/dist/logger/error-log.js.map +1 -0
- package/dist/logger/index.d.ts +2 -0
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +1 -0
- package/dist/logger/index.js.map +1 -1
- package/dist/media/exif.d.ts +46 -0
- package/dist/media/exif.d.ts.map +1 -0
- package/dist/media/exif.js +291 -0
- package/dist/media/exif.js.map +1 -0
- package/dist/media/folder-path.d.ts +16 -0
- package/dist/media/folder-path.d.ts.map +1 -0
- package/dist/media/folder-path.js +51 -0
- package/dist/media/folder-path.js.map +1 -0
- package/dist/media/folder-store.d.ts +26 -0
- package/dist/media/folder-store.d.ts.map +1 -0
- package/dist/media/folder-store.js +361 -0
- package/dist/media/folder-store.js.map +1 -0
- package/dist/media/index.d.ts +5 -2
- package/dist/media/index.d.ts.map +1 -1
- package/dist/media/index.js +4 -1
- package/dist/media/index.js.map +1 -1
- package/dist/media/sql-fragments.d.ts +19 -0
- package/dist/media/sql-fragments.d.ts.map +1 -0
- package/dist/media/sql-fragments.js +29 -0
- package/dist/media/sql-fragments.js.map +1 -0
- package/dist/media/store.d.ts +1 -0
- package/dist/media/store.d.ts.map +1 -1
- package/dist/media/store.js +175 -20
- package/dist/media/store.js.map +1 -1
- package/dist/media/types.d.ts +148 -0
- package/dist/media/types.d.ts.map +1 -1
- package/dist/queue/bullmq.d.ts +4 -0
- package/dist/queue/bullmq.d.ts.map +1 -1
- package/dist/queue/bullmq.js +53 -10
- package/dist/queue/bullmq.js.map +1 -1
- package/dist/queue/database.d.ts.map +1 -1
- package/dist/queue/database.js +32 -11
- package/dist/queue/database.js.map +1 -1
- package/dist/queue/types.d.ts +19 -0
- package/dist/queue/types.d.ts.map +1 -1
- package/dist/rate-limit/index.d.ts +21 -0
- package/dist/rate-limit/index.d.ts.map +1 -0
- package/dist/rate-limit/index.js +25 -0
- package/dist/rate-limit/index.js.map +1 -0
- package/dist/rate-limit/memory.d.ts +17 -0
- package/dist/rate-limit/memory.d.ts.map +1 -0
- package/dist/rate-limit/memory.js +61 -0
- package/dist/rate-limit/memory.js.map +1 -0
- package/dist/rate-limit/redis.d.ts +55 -0
- package/dist/rate-limit/redis.d.ts.map +1 -0
- package/dist/rate-limit/redis.js +134 -0
- package/dist/rate-limit/redis.js.map +1 -0
- package/dist/rate-limit/types.d.ts +52 -0
- package/dist/rate-limit/types.d.ts.map +1 -0
- package/dist/rate-limit/types.js +2 -0
- package/dist/rate-limit/types.js.map +1 -0
- package/dist/version.d.ts +39 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +84 -0
- package/dist/version.js.map +1 -0
- package/package.json +3 -2
package/dist/errors/codes.js
CHANGED
|
@@ -38,10 +38,19 @@ export const ERROR_CODES = [
|
|
|
38
38
|
'REDIRECT_UNKNOWN',
|
|
39
39
|
'CONTENT_SCHEDULE_INVALID',
|
|
40
40
|
'CONTENT_READ_ONLY',
|
|
41
|
+
// Concurrent editing (fiche 02 task 7): a `PATCH` naming `expectedUpdatedAt`
|
|
42
|
+
// is refused when it no longer matches the live row — someone else's write
|
|
43
|
+
// landed first. Detection, not locking: no table, no TTL, no state that
|
|
44
|
+
// outlives the request.
|
|
45
|
+
'CONTENT_STALE_WRITE',
|
|
41
46
|
// Trash (`schema@2.0`, ADR-0022). `restrict` is no longer enforced only by
|
|
42
47
|
// the foreign key: trashing is not a DELETE, so the database cannot refuse.
|
|
43
48
|
'CONTENT_REFERENCED',
|
|
44
49
|
'CONTENT_NOT_TRASHED',
|
|
50
|
+
// Editorial workflow (`schema@2.1`, ADR-0027). `reviewState` is orthogonal
|
|
51
|
+
// to `status`, exactly as `deletedAt` is to it since ADR-0022.
|
|
52
|
+
'CONTENT_WORKFLOW_DISABLED',
|
|
53
|
+
'CONTENT_REVIEW_TRANSITION_INVALID',
|
|
45
54
|
// Taxonomies (`schema@2.0`, ADR-0022)
|
|
46
55
|
'TAXONOMY_UNKNOWN',
|
|
47
56
|
'TAXONOMY_TERM_NOT_FOUND',
|
|
@@ -53,9 +62,13 @@ export const ERROR_CODES = [
|
|
|
53
62
|
// Menus (navigation)
|
|
54
63
|
'MENU_UNKNOWN',
|
|
55
64
|
'MENU_NAME_TAKEN',
|
|
65
|
+
'MENU_LOCATION_TAKEN',
|
|
56
66
|
'MENU_ITEM_NOT_FOUND',
|
|
57
67
|
'MENU_ITEM_INVALID',
|
|
58
68
|
'MENU_CYCLE',
|
|
69
|
+
// Patterns — the page builder's motif/model library (fiche 43 sub-chantier A)
|
|
70
|
+
'PATTERN_UNKNOWN',
|
|
71
|
+
'PATTERN_INVALID',
|
|
59
72
|
// Blocks
|
|
60
73
|
'BLOCK_UNKNOWN',
|
|
61
74
|
'BLOCK_INVALID',
|
|
@@ -105,21 +118,53 @@ export const ERROR_CODES = [
|
|
|
105
118
|
'AUTH_USER_NOT_FOUND',
|
|
106
119
|
'AUTH_ROLE_UNKNOWN',
|
|
107
120
|
'AUDIT_CHAIN_BROKEN',
|
|
121
|
+
// Fiche 21: a lookup by id (audit entry detail) found nothing — distinct
|
|
122
|
+
// from `AUDIT_CHAIN_BROKEN`, which means "found it, and it lied".
|
|
123
|
+
'AUDIT_ENTRY_NOT_FOUND',
|
|
108
124
|
// Auth — self-service password reset over HTTP (L11, forgot-password route)
|
|
109
125
|
'AUTH_RESET_TOKEN_INVALID',
|
|
126
|
+
// Auth — recovery codes (fiche 18 task 1): the way back in when TOTP itself
|
|
127
|
+
// is unusable.
|
|
128
|
+
'AUTH_RECOVERY_CODE_INVALID',
|
|
129
|
+
'AUTH_RECOVERY_CODES_UNAVAILABLE',
|
|
130
|
+
// Auth — account lifecycle (fiche 17: invitations and anonymization)
|
|
131
|
+
// The invitation reuses AUTH_RESET_TOKEN_INVALID for the token itself
|
|
132
|
+
// (same primitive, same failure shape) — these four are the states around
|
|
133
|
+
// it that a reset token was never asked to describe.
|
|
134
|
+
'AUTH_INVITE_UNAVAILABLE',
|
|
135
|
+
'AUTH_INVITE_INVALID_STATE',
|
|
136
|
+
'AUTH_ACCOUNT_ANONYMIZED',
|
|
137
|
+
'AUTH_ANONYMIZE_CONFIRMATION_MISMATCH',
|
|
110
138
|
// API keys (L13 task 8: machine-to-machine bearer tokens)
|
|
111
139
|
'API_KEY_INVALID',
|
|
112
140
|
'API_KEY_REVOKED',
|
|
113
141
|
'API_KEY_EXPIRED',
|
|
114
142
|
'API_KEY_NOT_FOUND',
|
|
143
|
+
// API keys — lifecycle and request quota (fiche 20: expiry defaults,
|
|
144
|
+
// rotation, per-key rate limiting).
|
|
145
|
+
'API_KEY_ROTATION_INVALID',
|
|
146
|
+
'API_KEY_RATE_LIMITED',
|
|
147
|
+
// API keys — purge and mistaken-revocation recovery (fiche 62 tasks 2-3).
|
|
148
|
+
'API_KEY_PURGE_INVALID',
|
|
149
|
+
'API_KEY_RECOVERY_INVALID',
|
|
115
150
|
// Media
|
|
116
151
|
'MEDIA_NOT_FOUND',
|
|
117
152
|
'MEDIA_INVALID',
|
|
118
153
|
'MEDIA_TYPE_REJECTED',
|
|
154
|
+
// Media folders (fiche 46) — same materialised-path tree shape as
|
|
155
|
+
// taxonomies (ADR-0022), a table internal to the media subsystem rather
|
|
156
|
+
// than a contract A change.
|
|
157
|
+
'MEDIA_FOLDER_NOT_FOUND',
|
|
158
|
+
'MEDIA_FOLDER_INVALID',
|
|
159
|
+
'MEDIA_FOLDER_NAME_TAKEN',
|
|
160
|
+
'MEDIA_FOLDER_NOT_EMPTY',
|
|
161
|
+
'MEDIA_FOLDER_CYCLE',
|
|
162
|
+
'MEDIA_FOLDER_TOO_DEEP',
|
|
119
163
|
// Infrastructure
|
|
120
164
|
'CACHE_FAILED',
|
|
121
165
|
'QUEUE_FAILED',
|
|
122
166
|
'STORAGE_FAILED',
|
|
167
|
+
'RATE_LIMIT_FAILED',
|
|
123
168
|
// Agents — LLM provider adapters (L4)
|
|
124
169
|
'PROVIDER_UNKNOWN',
|
|
125
170
|
'PROVIDER_REQUEST_FAILED',
|
|
@@ -152,6 +197,28 @@ export const ERROR_CODES = [
|
|
|
152
197
|
// MCP client (L4)
|
|
153
198
|
'MCP_CLIENT_REMOTE_ERROR',
|
|
154
199
|
'MCP_CLIENT_TOOL_FAILED',
|
|
200
|
+
// MCP server (L20) — "cogenta mcp"
|
|
201
|
+
'MCP_ACTOR_OPTIONS_CONFLICT',
|
|
202
|
+
'MCP_ACTOR_USER_NOT_FOUND',
|
|
203
|
+
'MCP_ACTOR_ROLE_EMPTY',
|
|
204
|
+
// MCP server (L21) — "cogenta mcp --api-key"
|
|
205
|
+
'MCP_ACTOR_API_KEY_INVALID',
|
|
206
|
+
// MCP client sandboxing floor (fiche 58 task 1bis) — stdio-client.ts's
|
|
207
|
+
// hard per-call timeout, cancellation, process lifecycle and best-effort
|
|
208
|
+
// resource watchdog.
|
|
209
|
+
'MCP_CLIENT_CALL_TIMEOUT',
|
|
210
|
+
'MCP_CLIENT_CALL_ABORTED',
|
|
211
|
+
'MCP_CLIENT_PROCESS_EXITED',
|
|
212
|
+
'MCP_CLIENT_SPAWN_FAILED',
|
|
213
|
+
'MCP_CLIENT_CLOSED',
|
|
214
|
+
'MCP_CLIENT_RESOURCE_EXCEEDED',
|
|
215
|
+
// MCP external connection registry (fiche 58 tasks 2/3) — "MCP Clients"
|
|
216
|
+
// admin screen and its backing store.
|
|
217
|
+
'MCP_CONNECTION_NOT_FOUND',
|
|
218
|
+
'MCP_CONNECTION_INVALID',
|
|
219
|
+
'MCP_CONNECTION_AUTH_INVALID',
|
|
220
|
+
'MCP_CONNECTION_CONFIRMATION_REQUIRED',
|
|
221
|
+
'MCP_CONNECTION_TOOL_NOT_DISCOVERED',
|
|
155
222
|
// Agents — privacy (L4)
|
|
156
223
|
'PRIVACY_NO_DATA_LEAVES_VIOLATION',
|
|
157
224
|
// Agents — agent format and registry (L5)
|
|
@@ -172,6 +239,14 @@ export const ERROR_CODES = [
|
|
|
172
239
|
// Import — WordPress WXR (L9)
|
|
173
240
|
'IMPORT_WXR_PARSE_FAILED',
|
|
174
241
|
'IMPORT_WXR_UNSAFE_DOCUMENT',
|
|
242
|
+
// Import — preview/apply/undo, CSV, RSS/Atom (fiche 25)
|
|
243
|
+
'IMPORT_RUN_NOT_FOUND',
|
|
244
|
+
'IMPORT_SOURCE_INVALID',
|
|
245
|
+
'IMPORT_ALREADY_APPLIED',
|
|
246
|
+
'IMPORT_MAPPING_INVALID',
|
|
247
|
+
'IMPORT_MEDIA_URL_UNSAFE',
|
|
248
|
+
'IMPORT_CSV_INVALID',
|
|
249
|
+
'IMPORT_FEED_INVALID',
|
|
175
250
|
// create-cogenta — playground reset (L9)
|
|
176
251
|
'PLAYGROUND_BLUEPRINT_UNKNOWN',
|
|
177
252
|
// Channels — adapter registry (L6)
|
|
@@ -267,12 +342,19 @@ export const ERROR_CODES = [
|
|
|
267
342
|
'COMMERCE_REFUND_EXCEEDS_PAYMENT',
|
|
268
343
|
// Commerce — tax and shipping (L15 task 6)
|
|
269
344
|
'COMMERCE_TAX_RULE_INVALID',
|
|
345
|
+
// Fiche feedback: editing a rule in place (PATCH), distinct from the
|
|
346
|
+
// "invalid input" code above.
|
|
347
|
+
'COMMERCE_TAX_RULE_UNKNOWN',
|
|
270
348
|
'COMMERCE_SHIPPING_METHOD_UNKNOWN',
|
|
271
349
|
'COMMERCE_SHIPPING_UNAVAILABLE',
|
|
272
350
|
// Commerce — coupons and promotions (L15 task 7)
|
|
273
351
|
'COMMERCE_COUPON_NOT_FOUND',
|
|
274
352
|
'COMMERCE_COUPON_INVALID',
|
|
275
353
|
'COMMERCE_COUPON_EXHAUSTED',
|
|
354
|
+
// Fiche 53 task 2: a per-customer cap, distinct from the global one above,
|
|
355
|
+
// and a coupon restricted to products none of which are in the basket.
|
|
356
|
+
'COMMERCE_COUPON_CUSTOMER_EXHAUSTED',
|
|
357
|
+
'COMMERCE_COUPON_NOT_APPLICABLE',
|
|
276
358
|
// Commerce — invoices (L15 task 8)
|
|
277
359
|
'COMMERCE_INVOICE_NOT_FOUND',
|
|
278
360
|
'COMMERCE_INVOICE_ALREADY_ISSUED',
|
|
@@ -280,20 +362,182 @@ export const ERROR_CODES = [
|
|
|
280
362
|
// Commerce — subscriptions (L15 task 9)
|
|
281
363
|
'COMMERCE_SUBSCRIPTION_NOT_FOUND',
|
|
282
364
|
'COMMERCE_SUBSCRIPTION_INVALID',
|
|
365
|
+
// Commerce — customers, order edits, shipment tracking, credit notes
|
|
366
|
+
// (fiche 52: commandes et clients)
|
|
367
|
+
'COMMERCE_CUSTOMER_NOT_FOUND',
|
|
368
|
+
'COMMERCE_ORDER_LOCKED',
|
|
369
|
+
'COMMERCE_TRACKING_INVALID',
|
|
370
|
+
'COMMERCE_CREDIT_NOTE_NOT_FOUND',
|
|
283
371
|
// Agents — vector store driver (L18 task 1/5)
|
|
284
372
|
'VECTOR_DIMENSION_MISMATCH',
|
|
285
373
|
'VECTOR_STORE_FAILED',
|
|
286
374
|
// Agents — writing/assistant tools (L18 tasks 2-8)
|
|
287
375
|
'ASSIST_UNAVAILABLE',
|
|
288
376
|
'ASSIST_RESPONSE_INVALID',
|
|
377
|
+
// Agents — assistant usage/budget (fiche 30 task 3)
|
|
378
|
+
'ASSIST_BUDGET_EXCEEDED',
|
|
379
|
+
// Agents — reference document RAG index (L22 task 4)
|
|
380
|
+
'ASSIST_DOCUMENT_NOT_FOUND',
|
|
289
381
|
// Marketplace — catalog and one-click install (L17)
|
|
290
382
|
'MARKETPLACE_ITEM_NOT_FOUND',
|
|
291
383
|
'MARKETPLACE_KIND_UNSUPPORTED',
|
|
292
384
|
'MARKETPLACE_ALREADY_INSTALLED',
|
|
293
385
|
'MARKETPLACE_NOT_INSTALLED',
|
|
294
386
|
'MARKETPLACE_UPDATE_REQUIRES_APPROVAL',
|
|
387
|
+
// Marketplace — installed extensions management (fiche 29)
|
|
388
|
+
'MARKETPLACE_ENGINE_INCOMPATIBLE',
|
|
295
389
|
// Analytics — self-hosted, cookie-free page-view analytics (`@cogenta/analytics`)
|
|
296
390
|
'ANALYTICS_SALT_UNAVAILABLE',
|
|
391
|
+
// Site settings — the editorial key/value store (fiche 23, ADR-0025)
|
|
392
|
+
'SITE_SETTING_UNKNOWN',
|
|
393
|
+
'SITE_SETTING_INVALID',
|
|
394
|
+
// Admin theme — the admin's own runtime template + personalisation (L21 task 2)
|
|
395
|
+
'ADMIN_THEME_TEMPLATE_UNKNOWN',
|
|
396
|
+
'ADMIN_THEME_INVALID',
|
|
397
|
+
// Health, migrations and maintenance tools (fiche 24)
|
|
398
|
+
'MAINT_TOOL_UNKNOWN',
|
|
399
|
+
'MAINT_TOOL_RUN_NOT_FOUND',
|
|
400
|
+
'MAINT_TOOL_INPUT_INVALID',
|
|
401
|
+
// Export/import/backup/restore (`@cogenta/export`)
|
|
402
|
+
'EXPORT_FORMAT_INVALID',
|
|
403
|
+
'EXPORT_PERMISSION_DENIED',
|
|
404
|
+
'EXPORT_MEDIA_NOT_FOUND',
|
|
405
|
+
'EXPORT_ENTRY_TOO_LARGE',
|
|
406
|
+
'BACKUP_CHECKSUM_MISMATCH',
|
|
407
|
+
'BACKUP_VERSION_UNSUPPORTED',
|
|
408
|
+
'BACKUP_DECRYPTION_FAILED',
|
|
409
|
+
'BACKUP_PASSPHRASE_REQUIRED',
|
|
410
|
+
'RESTORE_NOT_ALLOWED',
|
|
411
|
+
'RESTORE_CONFLICT',
|
|
412
|
+
// Scheduled tasks — the maintenance clock's admin surface (fiche 28)
|
|
413
|
+
'SCHEDULER_TASK_UNKNOWN',
|
|
414
|
+
'SCHEDULER_TASK_DUPLICATE',
|
|
415
|
+
'SCHEDULER_QUEUE_JOB_NOT_FOUND',
|
|
416
|
+
'SCHEDULER_QUEUE_JOB_NOT_RETRYABLE',
|
|
417
|
+
// Appearance and theme — DB-stored skin overrides overlaying contract D's
|
|
418
|
+
// file-based skin (fiche 14)
|
|
419
|
+
'THEME_OVERRIDE_INVALID',
|
|
420
|
+
'THEME_SKIN_NOT_FOUND',
|
|
421
|
+
'THEME_NO_PROVIDER',
|
|
422
|
+
'THEME_EXPORT_NOT_ALLOWED',
|
|
423
|
+
// Fiche feedback — the same polled-progress-job shape as
|
|
424
|
+
// `AGENT_RUN_JOB_UNKNOWN`, for a `POST /api/theme/generate` run watched
|
|
425
|
+
// live from the "Générer un thème" screen.
|
|
426
|
+
'THEME_GENERATE_JOB_UNKNOWN',
|
|
427
|
+
// Comments — contract F, visitor comments (fiche 15, ADR-0025)
|
|
428
|
+
'COMMENT_NOT_FOUND',
|
|
429
|
+
'COMMENT_BODY_INVALID',
|
|
430
|
+
'COMMENT_AUTHOR_INVALID',
|
|
431
|
+
'COMMENT_TARGET_INVALID',
|
|
432
|
+
'COMMENT_TARGET_CLOSED',
|
|
433
|
+
'COMMENT_PARENT_INVALID',
|
|
434
|
+
'COMMENT_PARENT_TOO_DEEP',
|
|
435
|
+
'COMMENT_STATUS_INVALID',
|
|
436
|
+
'COMMENT_RATE_LIMITED',
|
|
437
|
+
'COMMENT_SPAM_DETECTED',
|
|
438
|
+
// Forms — contract G (ADR-0026, fiche 16): definitions and submissions.
|
|
439
|
+
'FORM_UNKNOWN',
|
|
440
|
+
'FORM_NAME_TAKEN',
|
|
441
|
+
'FORM_DEFINITION_INVALID',
|
|
442
|
+
'FORM_SUBMISSION_NOT_FOUND',
|
|
443
|
+
'FORM_SUBMISSION_INVALID',
|
|
444
|
+
'FORM_DISABLED',
|
|
445
|
+
'FORM_RATE_LIMITED',
|
|
446
|
+
'FORM_HONEYPOT_TRIGGERED',
|
|
447
|
+
'FORM_SUBMITTED_TOO_FAST',
|
|
448
|
+
'FORM_CONSENT_REQUIRED',
|
|
449
|
+
'FORM_AUTORESPONDER_RATE_LIMITED',
|
|
450
|
+
// Fiche 47 — logic, steps, files, multi-channel notifications, CAPTCHA.
|
|
451
|
+
'FORM_FILE_REJECTED',
|
|
452
|
+
'FORM_CAPTCHA_REQUIRED',
|
|
453
|
+
'FORM_CAPTCHA_FAILED',
|
|
454
|
+
'FORM_STEP_INVALID',
|
|
455
|
+
// A package's own `package.json` could not be read to determine its
|
|
456
|
+
// version (`readOwnPackageVersion`) — a broken install, not a user mistake.
|
|
457
|
+
'PACKAGE_VERSION_UNREADABLE',
|
|
458
|
+
// Update system (L22 task 9): checking npm for a newer @cogenta/core /
|
|
459
|
+
// @cogenta/cli, and applying one with a mandatory restore point first.
|
|
460
|
+
'UPDATE_CHECK_FAILED',
|
|
461
|
+
'UPDATE_RESTORE_POINT_FAILED',
|
|
462
|
+
'UPDATE_APPLY_FAILED',
|
|
463
|
+
'UPDATE_NOT_AVAILABLE',
|
|
464
|
+
'UPDATE_CONFIRMATION_REQUIRED',
|
|
465
|
+
'UPDATE_POLICY_INVALID',
|
|
466
|
+
// Agents — real execution runtime, providers, skills library (L22 task
|
|
467
|
+
// 1/1bis). `AGENT_SKILL_*` are deliberately distinct from the pre-existing
|
|
468
|
+
// `SKILL_UNKNOWN`/`SKILL_DEFINITION_INVALID` above (L7's marketplace skill
|
|
469
|
+
// registry) — a different store for a different concept, see
|
|
470
|
+
// `packages/agents/src/skills/library.ts`'s module comment.
|
|
471
|
+
'AGENT_DUPLICATE',
|
|
472
|
+
'AGENT_DISABLED',
|
|
473
|
+
'AGENT_NO_PROVIDER',
|
|
474
|
+
'AGENT_BUILTIN_UNDELETABLE',
|
|
475
|
+
'PROVIDER_NOT_CONFIGURED',
|
|
476
|
+
'AGENT_SKILL_UNKNOWN',
|
|
477
|
+
'AGENT_SKILL_DUPLICATE',
|
|
478
|
+
'AGENT_SKILL_BUILTIN_UNDELETABLE',
|
|
479
|
+
'AGENT_REGISTRY_READ_ONLY',
|
|
480
|
+
'AGENT_RUNTIME_UNAVAILABLE',
|
|
481
|
+
// Skill reference folders (fiche 57): `references/`, `scripts/`, `assets/`
|
|
482
|
+
// under a skill's own directory. A path outside those three, or one that
|
|
483
|
+
// tries to escape the skill's directory, is the caller's fault (invalid);
|
|
484
|
+
// a path that names nothing on disk when removing is a plain not-found.
|
|
485
|
+
'AGENT_SKILL_RESOURCE_INVALID',
|
|
486
|
+
'AGENT_SKILL_RESOURCE_UNKNOWN',
|
|
487
|
+
// Agent execution loop, migrated onto LangGraph.js (L24 task 1). Thrown
|
|
488
|
+
// only if the graph's own recursion ceiling is hit before `runAgentLoop`'s
|
|
489
|
+
// `max_steps` check has a chance to fire first — a bug in the graph's
|
|
490
|
+
// wiring, never a normal way for a run to end.
|
|
491
|
+
'AGENT_LOOP_RECURSION_LIMIT',
|
|
492
|
+
// Fiche feedback — polled progress jobs for a chat turn or a "Run now"
|
|
493
|
+
// trigger, so a client watching one live sees each step as it happens
|
|
494
|
+
// rather than nothing until the whole run finishes. Same "not found"
|
|
495
|
+
// shape as `SCHEDULER_QUEUE_JOB_NOT_FOUND`: an id that was never issued,
|
|
496
|
+
// or one already swept a few minutes after finishing.
|
|
497
|
+
'AGENT_RUN_JOB_UNKNOWN',
|
|
498
|
+
// Channels — inbound chat bridge and `cogenta channels` process (L22 task 2)
|
|
499
|
+
'CHANNEL_PROVIDER_NOT_CONFIGURED',
|
|
500
|
+
// LLM provider catalog (fiche 56): `provider` widened from a closed
|
|
501
|
+
// 3-literal union to a free string, validated at the write boundary
|
|
502
|
+
// instead. A malformed identifier (empty, or not the slug shape a
|
|
503
|
+
// filename can safely be built from) is distinct from a name that is
|
|
504
|
+
// simply not in the built-in catalog and needs an explicit `baseUrl` to
|
|
505
|
+
// be usable as a custom OpenAI-compatible endpoint.
|
|
506
|
+
'PROVIDER_ID_INVALID',
|
|
507
|
+
'PROVIDER_CUSTOM_BASE_URL_REQUIRED',
|
|
508
|
+
// Per-provider model tuning (maxOutputTokens/requestTimeoutMs/
|
|
509
|
+
// maxCorrectionAttempts) — an admin-set value outside sane bounds, or not
|
|
510
|
+
// a whole number.
|
|
511
|
+
'PROVIDER_TUNING_INVALID',
|
|
512
|
+
// Role permission overrides in the database (fiche 63, ADR-0028): a
|
|
513
|
+
// production-applicable surcharge over `cogenta.schema.*`'s `permissions`
|
|
514
|
+
// block, `PermissionLayer` checked before falling back to the file.
|
|
515
|
+
'ROLE_PERMISSION_TARGET_UNKNOWN',
|
|
516
|
+
'ROLE_PERMISSION_INVALID',
|
|
517
|
+
'ROLE_PERMISSION_EXPORT_INVALID',
|
|
518
|
+
// Prompt Settings — fiche 45's shared template library every `assist.*`
|
|
519
|
+
// tool's instruction text reads from, with a fallback to its own
|
|
520
|
+
// hard-coded string when a site was never migrated.
|
|
521
|
+
'PROMPT_TEMPLATE_UNKNOWN',
|
|
522
|
+
'PROMPT_TEMPLATE_DUPLICATE',
|
|
523
|
+
'PROMPT_TEMPLATE_BUILTIN_UNDELETABLE',
|
|
524
|
+
'PROMPT_TEMPLATE_PLACEHOLDER_UNRESOLVED',
|
|
525
|
+
// A malformed create/update body on `/api/prompt-templates` — kept
|
|
526
|
+
// distinct from `PROMPT_TEMPLATE_UNKNOWN` (an id that does not exist) so
|
|
527
|
+
// the two map to different HTTP statuses (400 vs 404).
|
|
528
|
+
'PROMPT_TEMPLATE_INVALID',
|
|
529
|
+
// Google Search Console connector (fiche 70 task 4, ADR-0032). Same shape
|
|
530
|
+
// as `AGENT_NO_PROVIDER`/`SITE_PLAN_NO_PROVIDER`: nothing is broken, this
|
|
531
|
+
// installation simply has no OAuth app configured (R1/R2). `NOT_CONNECTED`
|
|
532
|
+
// is a plain "no site has gone through the OAuth flow yet" state, distinct
|
|
533
|
+
// from "the connector isn't offered at all". The three `*_FAILED`/`*_INVALID`
|
|
534
|
+
// codes describe Google's own token/query endpoints refusing a real request
|
|
535
|
+
// — an upstream failure the caller cannot fix by retrying identically.
|
|
536
|
+
'SEARCH_CONSOLE_NOT_CONFIGURED',
|
|
537
|
+
'SEARCH_CONSOLE_NOT_CONNECTED',
|
|
538
|
+
'SEARCH_CONSOLE_STATE_INVALID',
|
|
539
|
+
'SEARCH_CONSOLE_TOKEN_EXCHANGE_FAILED',
|
|
540
|
+
'SEARCH_CONSOLE_QUERY_FAILED',
|
|
297
541
|
// Catch-all, deliberately last and deliberately rare.
|
|
298
542
|
'INTERNAL',
|
|
299
543
|
];
|
package/dist/errors/codes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codes.js","sourceRoot":"","sources":["../../src/errors/codes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,gBAAgB;IAChB,gBAAgB;IAChB,kBAAkB;IAClB,oBAAoB;IACpB,uBAAuB;IAEvB,UAAU;IACV,gBAAgB;IAChB,kBAAkB;IAClB,oBAAoB;IACpB,oBAAoB;IAEpB,OAAO;IACP,gBAAgB;IAChB,wBAAwB;IACxB,kBAAkB;IAClB,wBAAwB;IACxB,kBAAkB;IAClB,6BAA6B;IAC7B,uBAAuB;IAEvB,iBAAiB;IACjB,gBAAgB;IAEhB,UAAU;IACV,mBAAmB;IACnB,iBAAiB;IACjB,kBAAkB;IAClB,sBAAsB;IACtB,oBAAoB;IACpB,uBAAuB;IACvB,uBAAuB;IACvB,4EAA4E;IAC5E,2EAA2E;IAC3E,0CAA0C;IAC1C,kBAAkB;IAClB,0BAA0B;IAC1B,mBAAmB;IACnB,2EAA2E;IAC3E,4EAA4E;IAC5E,oBAAoB;IACpB,qBAAqB;IAErB,sCAAsC;IACtC,kBAAkB;IAClB,yBAAyB;IACzB,qBAAqB;IACrB,gBAAgB;IAChB,mBAAmB;IACnB,2BAA2B;IAC3B,4BAA4B;IAE5B,qBAAqB;IACrB,cAAc;IACd,iBAAiB;IACjB,qBAAqB;IACrB,mBAAmB;IACnB,YAAY;IAEZ,SAAS;IACT,eAAe;IACf,eAAe;IACf,0BAA0B;IAC1B,wBAAwB;IAExB,+EAA+E;IAC/E,6EAA6E;IAC7E,oBAAoB;IACpB,oBAAoB;IACpB,oBAAoB;IACpB,4BAA4B;IAC5B,0BAA0B;IAC1B,yBAAyB;IAEzB,SAAS;IACT,iBAAiB;IACjB,eAAe;IACf,qBAAqB;IACrB,wBAAwB;IACxB,yBAAyB;IAEzB,+DAA+D;IAC/D,oBAAoB;IAEpB,0EAA0E;IAC1E,mEAAmE;IACnE,yBAAyB;IAEzB,4EAA4E;IAC5E,iEAAiE;IACjE,sBAAsB;IACtB,2BAA2B;IAE3B,SAAS;IACT,WAAW;IACX,iBAAiB;IACjB,uBAAuB;IACvB,uBAAuB;IACvB,eAAe;IACf,wBAAwB;IAExB,OAAO;IACP,uBAAuB;IACvB,0BAA0B;IAC1B,mBAAmB;IACnB,oBAAoB;IACpB,sBAAsB;IACtB,sBAAsB;IACtB,sBAAsB;IACtB,mBAAmB;IACnB,mBAAmB;IACnB,kBAAkB;IAClB,qBAAqB;IACrB,mBAAmB;IACnB,oBAAoB;IACpB,4EAA4E;IAC5E,0BAA0B;
|
|
1
|
+
{"version":3,"file":"codes.js","sourceRoot":"","sources":["../../src/errors/codes.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -8,5 +8,7 @@ export * from './logger/index.js';
|
|
|
8
8
|
export * from './media/index.js';
|
|
9
9
|
export * from './migrations/index.js';
|
|
10
10
|
export * from './queue/index.js';
|
|
11
|
+
export * from './rate-limit/index.js';
|
|
11
12
|
export * from './storage/index.js';
|
|
13
|
+
export * from './version.js';
|
|
12
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,SAAS,CAAA;AACvB,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,SAAS,CAAA;AACvB,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,cAAc,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -8,5 +8,7 @@ export * from './logger/index.js';
|
|
|
8
8
|
export * from './media/index.js';
|
|
9
9
|
export * from './migrations/index.js';
|
|
10
10
|
export * from './queue/index.js';
|
|
11
|
+
export * from './rate-limit/index.js';
|
|
11
12
|
export * from './storage/index.js';
|
|
13
|
+
export * from './version.js';
|
|
12
14
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,SAAS,CAAA;AACvB,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,oBAAoB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,SAAS,CAAA;AACvB,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,uBAAuB,CAAA;AACrC,cAAc,kBAAkB,CAAA;AAChC,cAAc,uBAAuB,CAAA;AACrC,cAAc,oBAAoB,CAAA;AAClC,cAAc,cAAc,CAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The server error journal (fiche 24 task 4).
|
|
3
|
+
*
|
|
4
|
+
* A bounded, in-process ring buffer — not a table. Durability across a
|
|
5
|
+
* restart is not the point: the point is answering "what just went wrong on
|
|
6
|
+
* this 500" from the admin, on a shared host with no access to the process's
|
|
7
|
+
* own stdout. Bounding it ("the N last entries, not everything") is what
|
|
8
|
+
* "purgées" means here — the oldest entry is simply the one a new one
|
|
9
|
+
* evicts, so nothing needs a separate sweep.
|
|
10
|
+
*
|
|
11
|
+
* Every field passes through `redact()` before it is stored, exactly like
|
|
12
|
+
* every other structured log record (rule R7, `AGENTS.md` § Logs) — this is
|
|
13
|
+
* not a second, weaker guarantee, it is the same one applied a second time
|
|
14
|
+
* so a caller that builds an entry by hand (not through `Logger.error`)
|
|
15
|
+
* cannot skip it.
|
|
16
|
+
*/
|
|
17
|
+
export interface ErrorLogEntry {
|
|
18
|
+
readonly id: string;
|
|
19
|
+
readonly at: string;
|
|
20
|
+
/** A stable `ErrorCode` when the failure is one of ours, `'INTERNAL'` otherwise. */
|
|
21
|
+
readonly code: string;
|
|
22
|
+
readonly message: string;
|
|
23
|
+
readonly trace: string | undefined;
|
|
24
|
+
/** Free-form context — request path, method — redacted the same as everything else. */
|
|
25
|
+
readonly context: Readonly<Record<string, unknown>> | undefined;
|
|
26
|
+
}
|
|
27
|
+
export interface RecordErrorInput {
|
|
28
|
+
readonly code?: string;
|
|
29
|
+
readonly message: string;
|
|
30
|
+
readonly trace?: string;
|
|
31
|
+
readonly context?: Readonly<Record<string, unknown>>;
|
|
32
|
+
}
|
|
33
|
+
export interface ErrorLog {
|
|
34
|
+
record(input: RecordErrorInput): ErrorLogEntry;
|
|
35
|
+
/** Turns a thrown value into an entry, using its `CogentaError` code when it has one. */
|
|
36
|
+
recordError(error: unknown, context?: Readonly<Record<string, unknown>>): ErrorLogEntry;
|
|
37
|
+
/** Newest first. */
|
|
38
|
+
entries(): readonly ErrorLogEntry[];
|
|
39
|
+
clear(): void;
|
|
40
|
+
}
|
|
41
|
+
export interface ErrorLogOptions {
|
|
42
|
+
/** How many entries survive at once. The (N+1)th record evicts the oldest. */
|
|
43
|
+
readonly capacity?: number;
|
|
44
|
+
readonly now?: () => Date;
|
|
45
|
+
readonly newId?: () => string;
|
|
46
|
+
}
|
|
47
|
+
export declare function createErrorLog(options?: ErrorLogOptions): ErrorLog;
|
|
48
|
+
//# sourceMappingURL=error-log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-log.d.ts","sourceRoot":"","sources":["../../src/logger/error-log.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,oFAAoF;IACpF,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,uFAAuF;IACvF,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAA;CAChE;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CACrD;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,aAAa,CAAA;IAC9C,yFAAyF;IACzF,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,aAAa,CAAA;IACvF,oBAAoB;IACpB,OAAO,IAAI,SAAS,aAAa,EAAE,CAAA;IACnC,KAAK,IAAI,IAAI,CAAA;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,8EAA8E;IAC9E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,MAAM,CAAA;CAC9B;AAID,wBAAgB,cAAc,CAAC,OAAO,GAAE,eAAoB,GAAG,QAAQ,CAuDtE"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { isCogentaError } from '../errors/index.js';
|
|
3
|
+
import { redact } from './redact.js';
|
|
4
|
+
const DEFAULT_CAPACITY = 200;
|
|
5
|
+
export function createErrorLog(options = {}) {
|
|
6
|
+
const capacity = options.capacity ?? DEFAULT_CAPACITY;
|
|
7
|
+
const now = options.now ?? (() => new Date());
|
|
8
|
+
const newId = options.newId ?? randomUUID;
|
|
9
|
+
let buffer = [];
|
|
10
|
+
function record(input) {
|
|
11
|
+
const safe = redact({
|
|
12
|
+
message: input.message,
|
|
13
|
+
trace: input.trace ?? null,
|
|
14
|
+
context: input.context ?? null,
|
|
15
|
+
});
|
|
16
|
+
const entry = {
|
|
17
|
+
id: newId(),
|
|
18
|
+
at: now().toISOString(),
|
|
19
|
+
code: input.code ?? 'INTERNAL',
|
|
20
|
+
message: String(safe['message']),
|
|
21
|
+
trace: typeof safe['trace'] === 'string' ? safe['trace'] : undefined,
|
|
22
|
+
context: safe['context'] !== null && typeof safe['context'] === 'object'
|
|
23
|
+
? safe['context']
|
|
24
|
+
: undefined,
|
|
25
|
+
};
|
|
26
|
+
buffer.unshift(entry);
|
|
27
|
+
if (buffer.length > capacity)
|
|
28
|
+
buffer = buffer.slice(0, capacity);
|
|
29
|
+
return entry;
|
|
30
|
+
}
|
|
31
|
+
function recordError(error, context) {
|
|
32
|
+
if (isCogentaError(error)) {
|
|
33
|
+
return record({
|
|
34
|
+
code: error.code,
|
|
35
|
+
message: error.message,
|
|
36
|
+
...(error.stack === undefined ? {} : { trace: error.stack }),
|
|
37
|
+
...(context === undefined ? {} : { context }),
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
const trace = error instanceof Error ? error.stack : undefined;
|
|
41
|
+
return record({
|
|
42
|
+
code: 'INTERNAL',
|
|
43
|
+
message: error instanceof Error ? error.message : String(error),
|
|
44
|
+
...(trace === undefined ? {} : { trace }),
|
|
45
|
+
...(context === undefined ? {} : { context }),
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
record,
|
|
50
|
+
recordError,
|
|
51
|
+
entries: () => buffer,
|
|
52
|
+
clear: () => {
|
|
53
|
+
buffer = [];
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=error-log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-log.js","sourceRoot":"","sources":["../../src/logger/error-log.ts"],"names":[],"mappings":"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"}
|
package/dist/logger/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
export type { ErrorLog, ErrorLogEntry, ErrorLogOptions, RecordErrorInput } from './error-log.js';
|
|
2
|
+
export { createErrorLog } from './error-log.js';
|
|
1
3
|
export { createLogger } from './logger.js';
|
|
2
4
|
export { REDACTED, redact } from './redact.js';
|
|
3
5
|
export type { EmittedLogLevel, LogDestination, LogFields, Logger, LoggerOptions, LogLevel, LogRecord, } from './types.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAC9C,YAAY,EACV,eAAe,EACf,cAAc,EACd,SAAS,EACT,MAAM,EACN,aAAa,EACb,QAAQ,EACR,SAAS,GACV,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAChG,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAC9C,YAAY,EACV,eAAe,EACf,cAAc,EACd,SAAS,EACT,MAAM,EACN,aAAa,EACb,QAAQ,EACR,SAAS,GACV,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA"}
|
package/dist/logger/index.js
CHANGED
package/dist/logger/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/logger/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAU9C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A minimal, zero-dependency EXIF reader and GPS scrubber for JPEG originals
|
|
3
|
+
* (fiche 11 task 6).
|
|
4
|
+
*
|
|
5
|
+
* Only what the media library's detail screen and its privacy notice need:
|
|
6
|
+
* camera make/model, the date a photo was taken, its stored orientation, and
|
|
7
|
+
* whether it carries GPS coordinates — never the full EXIF tag set. R9/R10
|
|
8
|
+
* both apply here exactly as they did to `document.extract_text` (L19 task
|
|
9
|
+
* 1): a JPEG's EXIF block is a TIFF structure with a documented, stable
|
|
10
|
+
* layout, small enough to walk by hand without a dependency that would pull
|
|
11
|
+
* in a general-purpose (and much larger) metadata library for four tags.
|
|
12
|
+
*
|
|
13
|
+
* **Why GPS gets stripped, not just hidden.** `docs/lots/11-mediatheque.md`
|
|
14
|
+
* calls out EXIF GPS coordinates as personal data a public image can leak.
|
|
15
|
+
* Unlinking the `GPSInfo` pointer from IFD0 is what every EXIF-aware reader
|
|
16
|
+
* actually follows, but leaves the original bytes recoverable by anyone
|
|
17
|
+
* scanning the file directly — so `stripGpsFromJpeg` also zeroes the GPS
|
|
18
|
+
* IFD's own entries and any external data block a `RATIONAL` value pointed
|
|
19
|
+
* at (latitude/longitude do not fit in the 4 inline bytes of a directory
|
|
20
|
+
* entry, so they live elsewhere in the same TIFF blob).
|
|
21
|
+
*/
|
|
22
|
+
export interface ExifGps {
|
|
23
|
+
readonly latitude: number;
|
|
24
|
+
readonly longitude: number;
|
|
25
|
+
}
|
|
26
|
+
export interface ExifData {
|
|
27
|
+
readonly make: string | null;
|
|
28
|
+
readonly model: string | null;
|
|
29
|
+
/** ISO 8601, from `DateTimeOriginal` (Exif sub-IFD) or `DateTime` (IFD0), in that order. */
|
|
30
|
+
readonly takenAt: string | null;
|
|
31
|
+
/** The raw EXIF orientation value (1–8), or null when absent. */
|
|
32
|
+
readonly orientation: number | null;
|
|
33
|
+
readonly gps: ExifGps | null;
|
|
34
|
+
}
|
|
35
|
+
export declare function readExif(bytes: Uint8Array): ExifData | null;
|
|
36
|
+
/**
|
|
37
|
+
* Removes GPS coordinates from a JPEG's EXIF block, in place semantics
|
|
38
|
+
* aside: returns a new buffer, the original is never mutated.
|
|
39
|
+
*
|
|
40
|
+
* Every other EXIF tag (camera, orientation, capture date) is left exactly
|
|
41
|
+
* as it was — this is a location scrub, not a metadata wipe.
|
|
42
|
+
*/
|
|
43
|
+
export declare function stripGpsFromJpeg(bytes: Uint8Array): Uint8Array;
|
|
44
|
+
/** Whether a JPEG's EXIF block carries GPS coordinates — the yes/no a privacy notice needs, without the caller having to unpack the whole `ExifData` shape. */
|
|
45
|
+
export declare function hasGpsData(bytes: Uint8Array): boolean;
|
|
46
|
+
//# sourceMappingURL=exif.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exif.d.ts","sourceRoot":"","sources":["../../src/media/exif.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,4FAA4F;IAC5F,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,iEAAiE;IACjE,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAA;CAC7B;AAiKD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,QAAQ,GAAG,IAAI,CA0D3D;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAiD9D;AAED,+JAA+J;AAC/J,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAGrD"}
|