@cogenta/core 0.1.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/cache/entry.d.ts +32 -0
- package/dist/cache/entry.d.ts.map +1 -0
- package/dist/cache/entry.js +72 -0
- package/dist/cache/entry.js.map +1 -0
- package/dist/cache/file.d.ts +16 -0
- package/dist/cache/file.d.ts.map +1 -0
- package/dist/cache/file.js +191 -0
- package/dist/cache/file.js.map +1 -0
- package/dist/cache/index.d.ts +20 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +25 -0
- package/dist/cache/index.js.map +1 -0
- package/dist/cache/memory.d.ts +11 -0
- package/dist/cache/memory.d.ts.map +1 -0
- package/dist/cache/memory.js +89 -0
- package/dist/cache/memory.js.map +1 -0
- package/dist/cache/redis.d.ts +54 -0
- package/dist/cache/redis.d.ts.map +1 -0
- package/dist/cache/redis.js +167 -0
- package/dist/cache/redis.js.map +1 -0
- package/dist/cache/types.d.ts +37 -0
- package/dist/cache/types.d.ts.map +1 -0
- package/dist/cache/types.js +2 -0
- package/dist/cache/types.js.map +1 -0
- package/dist/config/define-config.d.ts +19 -0
- package/dist/config/define-config.d.ts.map +1 -0
- package/dist/config/define-config.js +20 -0
- package/dist/config/define-config.js.map +1 -0
- package/dist/config/env.d.ts +30 -0
- package/dist/config/env.d.ts.map +1 -0
- package/dist/config/env.js +139 -0
- package/dist/config/env.js.map +1 -0
- package/dist/config/index.d.ts +7 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +5 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/load-config.d.ts +30 -0
- package/dist/config/load-config.d.ts.map +1 -0
- package/dist/config/load-config.js +83 -0
- package/dist/config/load-config.js.map +1 -0
- package/dist/config/resolve-config.d.ts +14 -0
- package/dist/config/resolve-config.d.ts.map +1 -0
- package/dist/config/resolve-config.js +146 -0
- package/dist/config/resolve-config.js.map +1 -0
- package/dist/config/schema.d.ts +68 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +75 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/types.d.ts +126 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +6 -0
- package/dist/config/types.js.map +1 -0
- package/dist/db/dialect.d.ts +64 -0
- package/dist/db/dialect.d.ts.map +1 -0
- package/dist/db/dialect.js +147 -0
- package/dist/db/dialect.js.map +1 -0
- package/dist/db/drizzle.d.ts +35 -0
- package/dist/db/drizzle.d.ts.map +1 -0
- package/dist/db/drizzle.js +128 -0
- package/dist/db/drizzle.js.map +1 -0
- package/dist/db/index.d.ts +28 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +30 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/mysql.d.ts +39 -0
- package/dist/db/mysql.d.ts.map +1 -0
- package/dist/db/mysql.js +224 -0
- package/dist/db/mysql.js.map +1 -0
- package/dist/db/postgres.d.ts +47 -0
- package/dist/db/postgres.d.ts.map +1 -0
- package/dist/db/postgres.js +174 -0
- package/dist/db/postgres.js.map +1 -0
- package/dist/db/sqlite.d.ts +41 -0
- package/dist/db/sqlite.d.ts.map +1 -0
- package/dist/db/sqlite.js +213 -0
- package/dist/db/sqlite.js.map +1 -0
- package/dist/db/types.d.ts +71 -0
- package/dist/db/types.d.ts.map +1 -0
- package/dist/db/types.js +2 -0
- package/dist/db/types.js.map +1 -0
- package/dist/drivers/index.d.ts +5 -0
- package/dist/drivers/index.d.ts.map +1 -0
- package/dist/drivers/index.js +3 -0
- package/dist/drivers/index.js.map +1 -0
- package/dist/drivers/registry.d.ts +27 -0
- package/dist/drivers/registry.d.ts.map +1 -0
- package/dist/drivers/registry.js +162 -0
- package/dist/drivers/registry.js.map +1 -0
- package/dist/drivers/types.d.ts +59 -0
- package/dist/drivers/types.d.ts.map +1 -0
- package/dist/drivers/types.js +2 -0
- package/dist/drivers/types.js.map +1 -0
- package/dist/errors/codes.d.ts +8 -0
- package/dist/errors/codes.d.ts.map +1 -0
- package/dist/errors/codes.js +201 -0
- package/dist/errors/codes.js.map +1 -0
- package/dist/errors/cogenta-error.d.ts +38 -0
- package/dist/errors/cogenta-error.d.ts.map +1 -0
- package/dist/errors/cogenta-error.js +31 -0
- package/dist/errors/cogenta-error.js.map +1 -0
- package/dist/errors/index.d.ts +5 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +3 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/id.d.ts +5 -0
- package/dist/id.d.ts.map +1 -0
- package/dist/id.js +82 -0
- package/dist/id.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/logger/index.d.ts +5 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/logger/index.js +4 -0
- package/dist/logger/index.js.map +1 -0
- package/dist/logger/logger.d.ts +10 -0
- package/dist/logger/logger.d.ts.map +1 -0
- package/dist/logger/logger.js +108 -0
- package/dist/logger/logger.js.map +1 -0
- package/dist/logger/redact.d.ts +12 -0
- package/dist/logger/redact.d.ts.map +1 -0
- package/dist/logger/redact.js +96 -0
- package/dist/logger/redact.js.map +1 -0
- package/dist/logger/types.d.ts +32 -0
- package/dist/logger/types.d.ts.map +1 -0
- package/dist/logger/types.js +3 -0
- package/dist/logger/types.js.map +1 -0
- package/dist/media/format-sniff.d.ts +22 -0
- package/dist/media/format-sniff.d.ts.map +1 -0
- package/dist/media/format-sniff.js +77 -0
- package/dist/media/format-sniff.js.map +1 -0
- package/dist/media/index.d.ts +5 -0
- package/dist/media/index.d.ts.map +1 -0
- package/dist/media/index.js +4 -0
- package/dist/media/index.js.map +1 -0
- package/dist/media/store.d.ts +13 -0
- package/dist/media/store.d.ts.map +1 -0
- package/dist/media/store.js +211 -0
- package/dist/media/store.js.map +1 -0
- package/dist/media/types.d.ts +70 -0
- package/dist/media/types.d.ts.map +1 -0
- package/dist/media/types.js +2 -0
- package/dist/media/types.js.map +1 -0
- package/dist/migrations/index.d.ts +4 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/index.js +2 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrations/migrator.d.ts +18 -0
- package/dist/migrations/migrator.d.ts.map +1 -0
- package/dist/migrations/migrator.js +247 -0
- package/dist/migrations/migrator.js.map +1 -0
- package/dist/migrations/types.d.ts +63 -0
- package/dist/migrations/types.d.ts.map +1 -0
- package/dist/migrations/types.js +2 -0
- package/dist/migrations/types.js.map +1 -0
- package/dist/queue/bullmq.d.ts +119 -0
- package/dist/queue/bullmq.d.ts.map +1 -0
- package/dist/queue/bullmq.js +391 -0
- package/dist/queue/bullmq.js.map +1 -0
- package/dist/queue/database.d.ts +17 -0
- package/dist/queue/database.d.ts.map +1 -0
- package/dist/queue/database.js +242 -0
- package/dist/queue/database.js.map +1 -0
- package/dist/queue/index.d.ts +7 -0
- package/dist/queue/index.d.ts.map +1 -0
- package/dist/queue/index.js +4 -0
- package/dist/queue/index.js.map +1 -0
- package/dist/queue/types.d.ts +61 -0
- package/dist/queue/types.d.ts.map +1 -0
- package/dist/queue/types.js +2 -0
- package/dist/queue/types.js.map +1 -0
- package/dist/storage/index.d.ts +14 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +17 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/key.d.ts +12 -0
- package/dist/storage/key.d.ts.map +1 -0
- package/dist/storage/key.js +43 -0
- package/dist/storage/key.js.map +1 -0
- package/dist/storage/local.d.ts +23 -0
- package/dist/storage/local.d.ts.map +1 -0
- package/dist/storage/local.js +204 -0
- package/dist/storage/local.js.map +1 -0
- package/dist/storage/s3.d.ts +54 -0
- package/dist/storage/s3.d.ts.map +1 -0
- package/dist/storage/s3.js +240 -0
- package/dist/storage/s3.js.map +1 -0
- package/dist/storage/types.d.ts +45 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +2 -0
- package/dist/storage/types.js.map +1 -0
- package/package.json +82 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Every error Cogenta throws carries one of these codes. They are a public API:
|
|
3
|
+
* callers branch on them, logs are aggregated by them, and translations key off
|
|
4
|
+
* them. Adding a code is a minor version; changing the meaning of one is major.
|
|
5
|
+
*/
|
|
6
|
+
export const ERROR_CODES = [
|
|
7
|
+
// Configuration
|
|
8
|
+
'CONFIG_INVALID',
|
|
9
|
+
'CONFIG_NOT_FOUND',
|
|
10
|
+
'CONFIG_LOAD_FAILED',
|
|
11
|
+
'CONFIG_SECRET_IN_FILE',
|
|
12
|
+
// Drivers
|
|
13
|
+
'DRIVER_UNKNOWN',
|
|
14
|
+
'DRIVER_DUPLICATE',
|
|
15
|
+
'DRIVER_UNAVAILABLE',
|
|
16
|
+
'DRIVER_INIT_FAILED',
|
|
17
|
+
// Data
|
|
18
|
+
'DB_UNREACHABLE',
|
|
19
|
+
'DB_DIALECT_UNSUPPORTED',
|
|
20
|
+
'MIGRATION_FAILED',
|
|
21
|
+
'MIGRATION_IRREVERSIBLE',
|
|
22
|
+
'MIGRATION_LOCKED',
|
|
23
|
+
'MIGRATION_CHECKSUM_MISMATCH',
|
|
24
|
+
'MIGRATION_DESTRUCTIVE',
|
|
25
|
+
// Content schema
|
|
26
|
+
'SCHEMA_INVALID',
|
|
27
|
+
// Content
|
|
28
|
+
'CONTENT_NOT_FOUND',
|
|
29
|
+
'CONTENT_INVALID',
|
|
30
|
+
'CONTENT_CONFLICT',
|
|
31
|
+
'CONTENT_SLUG_INVALID',
|
|
32
|
+
'CONTENT_SLUG_TAKEN',
|
|
33
|
+
'CONTENT_ROUTE_INVALID',
|
|
34
|
+
'CONTENT_REDIRECT_LOOP',
|
|
35
|
+
'CONTENT_SCHEDULE_INVALID',
|
|
36
|
+
'CONTENT_READ_ONLY',
|
|
37
|
+
// Blocks
|
|
38
|
+
'BLOCK_UNKNOWN',
|
|
39
|
+
'BLOCK_INVALID',
|
|
40
|
+
'BLOCK_DEFINITION_INVALID',
|
|
41
|
+
'BLOCK_MIGRATION_FAILED',
|
|
42
|
+
// Rendering — skins. A skin is refused, never repaired: contract D freezes the
|
|
43
|
+
// token set precisely so that a generated skin either passes or is rejected.
|
|
44
|
+
'SKIN_TOKEN_MISSING',
|
|
45
|
+
'SKIN_TOKEN_UNKNOWN',
|
|
46
|
+
'SKIN_TOKEN_INVALID',
|
|
47
|
+
'SKIN_CONTRAST_INSUFFICIENT',
|
|
48
|
+
'SKIN_SCALE_NOT_MONOTONIC',
|
|
49
|
+
'SKIN_MOTION_NOT_REDUCED',
|
|
50
|
+
// Themes
|
|
51
|
+
'THEME_NOT_FOUND',
|
|
52
|
+
'THEME_INVALID',
|
|
53
|
+
'THEME_BLOCK_MISSING',
|
|
54
|
+
'THEME_IMPORT_FORBIDDEN',
|
|
55
|
+
'THEME_SIGNATURE_INVALID',
|
|
56
|
+
// Rendering — the content API a theme reads through (ADR-0016)
|
|
57
|
+
'CONTENT_API_FAILED',
|
|
58
|
+
// Rendering — in-process fallback `cogenta serve` uses until a real Astro
|
|
59
|
+
// build exists (no image pipeline is wired into that fallback yet)
|
|
60
|
+
'THEME_IMAGE_UNSUPPORTED',
|
|
61
|
+
// Rendering — build targets. A target that cannot honour a declared runtime
|
|
62
|
+
// need refuses the build; it never degrades silently (ADR-0004).
|
|
63
|
+
'BUILD_TARGET_UNKNOWN',
|
|
64
|
+
'BUILD_RUNTIME_UNSATISFIED',
|
|
65
|
+
// Access
|
|
66
|
+
'FORBIDDEN',
|
|
67
|
+
'UNAUTHENTICATED',
|
|
68
|
+
'PREVIEW_TOKEN_INVALID',
|
|
69
|
+
'PREVIEW_TOKEN_EXPIRED',
|
|
70
|
+
'QUERY_INVALID',
|
|
71
|
+
// Auth
|
|
72
|
+
'AUTH_PASSWORD_INVALID',
|
|
73
|
+
'AUTH_INVALID_CREDENTIALS',
|
|
74
|
+
'AUTH_TOTP_INVALID',
|
|
75
|
+
'AUTH_TOTP_REQUIRED',
|
|
76
|
+
'AUTH_WEBAUTHN_FAILED',
|
|
77
|
+
'AUTH_SESSION_INVALID',
|
|
78
|
+
'AUTH_SESSION_EXPIRED',
|
|
79
|
+
'AUTH_RATE_LIMITED',
|
|
80
|
+
'AUTH_MFA_REQUIRED',
|
|
81
|
+
'AUTH_USER_EXISTS',
|
|
82
|
+
'AUTH_USER_NOT_FOUND',
|
|
83
|
+
'AUTH_ROLE_UNKNOWN',
|
|
84
|
+
'AUDIT_CHAIN_BROKEN',
|
|
85
|
+
// Media
|
|
86
|
+
'MEDIA_NOT_FOUND',
|
|
87
|
+
'MEDIA_INVALID',
|
|
88
|
+
'MEDIA_TYPE_REJECTED',
|
|
89
|
+
// Infrastructure
|
|
90
|
+
'CACHE_FAILED',
|
|
91
|
+
'QUEUE_FAILED',
|
|
92
|
+
'STORAGE_FAILED',
|
|
93
|
+
// Agents — LLM provider adapters (L4)
|
|
94
|
+
'PROVIDER_UNKNOWN',
|
|
95
|
+
'PROVIDER_REQUEST_FAILED',
|
|
96
|
+
'PROVIDER_RESPONSE_INVALID',
|
|
97
|
+
'PROVIDER_RATE_LIMITED',
|
|
98
|
+
'PROVIDER_TIMEOUT',
|
|
99
|
+
// Agents — tool registry (L4)
|
|
100
|
+
'TOOL_DEFINITION_INVALID',
|
|
101
|
+
'TOOL_DUPLICATE',
|
|
102
|
+
'TOOL_UNKNOWN',
|
|
103
|
+
'TOOL_INPUT_INVALID',
|
|
104
|
+
'TOOL_OUTPUT_INVALID',
|
|
105
|
+
'TOOL_CALL_REJECTED',
|
|
106
|
+
// Agents — core tools (L4)
|
|
107
|
+
'HTTP_FETCH_DOMAIN_DENIED',
|
|
108
|
+
// Agents — autonomy and approval (L4)
|
|
109
|
+
'APPROVAL_REQUEST_UNKNOWN',
|
|
110
|
+
// Agents — reversibility (L4)
|
|
111
|
+
'RECEIPT_UNKNOWN',
|
|
112
|
+
'RECEIPT_ALREADY_REVERTED',
|
|
113
|
+
'RECEIPT_NOT_REVERTIBLE',
|
|
114
|
+
// Agents — sub-agents (L4)
|
|
115
|
+
'AGENT_SUBAGENT_UNKNOWN',
|
|
116
|
+
'AGENT_SUBAGENT_TOOLS_NOT_SUBSET',
|
|
117
|
+
// Agents — skills (L4)
|
|
118
|
+
'SKILL_UNKNOWN',
|
|
119
|
+
'SKILL_DEFINITION_INVALID',
|
|
120
|
+
// Agents — memory (L4)
|
|
121
|
+
'AGENT_APPROVAL_NOT_DECIDED',
|
|
122
|
+
// MCP client (L4)
|
|
123
|
+
'MCP_CLIENT_REMOTE_ERROR',
|
|
124
|
+
'MCP_CLIENT_TOOL_FAILED',
|
|
125
|
+
// Agents — privacy (L4)
|
|
126
|
+
'PRIVACY_NO_DATA_LEAVES_VIOLATION',
|
|
127
|
+
// Agents — agent format and registry (L5)
|
|
128
|
+
'AGENT_DEFINITION_INVALID',
|
|
129
|
+
'AGENT_UNKNOWN',
|
|
130
|
+
// Agents — evaluation (L5)
|
|
131
|
+
'EVAL_THRESHOLD_NOT_MET',
|
|
132
|
+
// Agents-builtin — security agent (L5)
|
|
133
|
+
'SECURITY_OSV_QUERY_FAILED',
|
|
134
|
+
'SECURITY_EPSS_QUERY_FAILED',
|
|
135
|
+
'SECURITY_DEPENDENCY_NOT_FOUND',
|
|
136
|
+
// Agents-builtin — performance agent (L5)
|
|
137
|
+
'PERFORMANCE_CRUX_QUERY_FAILED',
|
|
138
|
+
// create-cogenta — blueprints (L9)
|
|
139
|
+
'BLUEPRINT_REGISTRY_CORRUPT',
|
|
140
|
+
// create-cogenta — AI skin generation (L9)
|
|
141
|
+
'SKIN_GENERATION_RESPONSE_NOT_JSON',
|
|
142
|
+
// Import — WordPress WXR (L9)
|
|
143
|
+
'IMPORT_WXR_PARSE_FAILED',
|
|
144
|
+
'IMPORT_WXR_UNSAFE_DOCUMENT',
|
|
145
|
+
// create-cogenta — playground reset (L9)
|
|
146
|
+
'PLAYGROUND_BLUEPRINT_UNKNOWN',
|
|
147
|
+
// Channels — adapter registry (L6)
|
|
148
|
+
'CHANNEL_UNKNOWN',
|
|
149
|
+
'CHANNEL_DUPLICATE',
|
|
150
|
+
// Channels — identity linking (L6 task 2)
|
|
151
|
+
'CHANNEL_LINK_CODE_INVALID',
|
|
152
|
+
// Channels — inbound command routing (L6 task 3)
|
|
153
|
+
'CHANNEL_COMMAND_DUPLICATE',
|
|
154
|
+
// Channels — Telegram adapter (L6 task 4)
|
|
155
|
+
'CHANNEL_TELEGRAM_API_ERROR',
|
|
156
|
+
// Channels — message formats (L6 task 6)
|
|
157
|
+
'CHANNEL_MESSAGE_INVALID',
|
|
158
|
+
// Channels — notification preferences (L6 task 7)
|
|
159
|
+
'CHANNEL_PREFERENCES_INVALID',
|
|
160
|
+
// Channels — email adapter (L6 task 8)
|
|
161
|
+
'CHANNEL_EMAIL_TRANSPORT_ERROR',
|
|
162
|
+
'CHANNEL_EMAIL_INBOUND_UNSUPPORTED',
|
|
163
|
+
// Channels — Slack adapter (L6 task 9)
|
|
164
|
+
'CHANNEL_SLACK_API_ERROR',
|
|
165
|
+
// Channels — Discord adapter (L6 task 10)
|
|
166
|
+
'CHANNEL_DISCORD_API_ERROR',
|
|
167
|
+
// Channels — generic signed webhook (L6 task 11)
|
|
168
|
+
'CHANNEL_WEBHOOK_SIGNATURE_INVALID',
|
|
169
|
+
'CHANNEL_WEBHOOK_EXPIRED',
|
|
170
|
+
'CHANNEL_WEBHOOK_REPLAY_DETECTED',
|
|
171
|
+
'CHANNEL_WEBHOOK_DELIVERY_FAILED',
|
|
172
|
+
'CHANNEL_WEBHOOK_INBOUND_UNSUPPORTED',
|
|
173
|
+
// Plugins — manifest schema and validation (L7 task 1)
|
|
174
|
+
'PLUGIN_MANIFEST_INVALID',
|
|
175
|
+
// Plugins — resolution and loading (L7 task 2)
|
|
176
|
+
'PLUGIN_SOURCE_NOT_FOUND',
|
|
177
|
+
'PLUGIN_MANIFEST_FILE_NOT_FOUND',
|
|
178
|
+
'PLUGIN_MANIFEST_LOAD_FAILED',
|
|
179
|
+
'PLUGIN_MANIFEST_EXPORT_INVALID',
|
|
180
|
+
// Plugins — isolated worker execution (L7 task 3)
|
|
181
|
+
'PLUGIN_WORKER_TIMEOUT',
|
|
182
|
+
'PLUGIN_WORKER_CRASHED',
|
|
183
|
+
'PLUGIN_WORKER_RUNTIME_ERROR',
|
|
184
|
+
// Plugins — capability-gated SDK (L7 task 4)
|
|
185
|
+
'PLUGIN_CAPABILITY_REFUSED',
|
|
186
|
+
// Plugins — resource limits, kill and disable (L7 task 6)
|
|
187
|
+
'PLUGIN_DISABLED',
|
|
188
|
+
// Plugins — signature and verification (L7 task 9)
|
|
189
|
+
'PLUGIN_SIGNATURE_MISSING',
|
|
190
|
+
'PLUGIN_SIGNATURE_INVALID',
|
|
191
|
+
// Fleet — site-side telemetry emission (L8 task 2)
|
|
192
|
+
'FLEET_TELEMETRY_FORBIDDEN_FIELD',
|
|
193
|
+
// Fleet — rollout campaigns (L8 task 7)
|
|
194
|
+
'FLEET_CAMPAIGN_NOT_FOUND',
|
|
195
|
+
'FLEET_CAMPAIGN_STATE_CORRUPT',
|
|
196
|
+
// Fleet — per-site rollback (L8 task 8)
|
|
197
|
+
'FLEET_ROLLBACK_NO_PRIOR_VERSION',
|
|
198
|
+
// Catch-all, deliberately last and deliberately rare.
|
|
199
|
+
'INTERNAL',
|
|
200
|
+
];
|
|
201
|
+
//# sourceMappingURL=codes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codes.js","sourceRoot":"","sources":["../../src/errors/codes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { ErrorCode } from './codes.js';
|
|
2
|
+
export interface CogentaErrorOptions {
|
|
3
|
+
/** Stable, machine-readable code. Never derived from the message. */
|
|
4
|
+
readonly code: ErrorCode;
|
|
5
|
+
/** What failed and why, in one sentence, aimed at a human. */
|
|
6
|
+
readonly message: string;
|
|
7
|
+
/** What the user should do about it. Required for anything a user can hit. */
|
|
8
|
+
readonly hint?: string;
|
|
9
|
+
/** The underlying error, kept for debugging. */
|
|
10
|
+
readonly cause?: unknown;
|
|
11
|
+
/**
|
|
12
|
+
* Structured context for logs. Opt-in per call site, which is what keeps
|
|
13
|
+
* secrets out of it: nothing is ever copied here automatically (rule R7).
|
|
14
|
+
*/
|
|
15
|
+
readonly details?: Readonly<Record<string, unknown>>;
|
|
16
|
+
}
|
|
17
|
+
export interface SerialisedCogentaError {
|
|
18
|
+
readonly name: 'CogentaError';
|
|
19
|
+
readonly code: ErrorCode;
|
|
20
|
+
readonly message: string;
|
|
21
|
+
readonly hint: string | undefined;
|
|
22
|
+
readonly details: Readonly<Record<string, unknown>> | undefined;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The only error class library code throws. A bare `throw new Error("…")` is
|
|
26
|
+
* forbidden in Cogenta: it gives the caller nothing to branch on and the user
|
|
27
|
+
* nothing to act on.
|
|
28
|
+
*/
|
|
29
|
+
export declare class CogentaError extends Error {
|
|
30
|
+
readonly code: ErrorCode;
|
|
31
|
+
readonly hint: string | undefined;
|
|
32
|
+
readonly details: Readonly<Record<string, unknown>> | undefined;
|
|
33
|
+
constructor(options: CogentaErrorOptions);
|
|
34
|
+
/** Structured form for logging. The stack is deliberately left out. */
|
|
35
|
+
toJSON(): SerialisedCogentaError;
|
|
36
|
+
}
|
|
37
|
+
export declare function isCogentaError(value: unknown): value is CogentaError;
|
|
38
|
+
//# sourceMappingURL=cogenta-error.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cogenta-error.d.ts","sourceRoot":"","sources":["../../src/errors/cogenta-error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C,MAAM,WAAW,mBAAmB;IAClC,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,gDAAgD;IAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;IACxB;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CACrD;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAA;IAC7B,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAA;CAChE;AAED;;;;GAIG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAA;IAE/D,YAAY,OAAO,EAAE,mBAAmB,EAMvC;IAED,uEAAuE;IACvE,MAAM,IAAI,sBAAsB,CAQ/B;CACF;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,YAAY,CAEpE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The only error class library code throws. A bare `throw new Error("…")` is
|
|
3
|
+
* forbidden in Cogenta: it gives the caller nothing to branch on and the user
|
|
4
|
+
* nothing to act on.
|
|
5
|
+
*/
|
|
6
|
+
export class CogentaError extends Error {
|
|
7
|
+
code;
|
|
8
|
+
hint;
|
|
9
|
+
details;
|
|
10
|
+
constructor(options) {
|
|
11
|
+
super(options.message, options.cause === undefined ? undefined : { cause: options.cause });
|
|
12
|
+
this.name = 'CogentaError';
|
|
13
|
+
this.code = options.code;
|
|
14
|
+
this.hint = options.hint;
|
|
15
|
+
this.details = options.details;
|
|
16
|
+
}
|
|
17
|
+
/** Structured form for logging. The stack is deliberately left out. */
|
|
18
|
+
toJSON() {
|
|
19
|
+
return {
|
|
20
|
+
name: 'CogentaError',
|
|
21
|
+
code: this.code,
|
|
22
|
+
message: this.message,
|
|
23
|
+
hint: this.hint,
|
|
24
|
+
details: this.details,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export function isCogentaError(value) {
|
|
29
|
+
return value instanceof CogentaError;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=cogenta-error.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cogenta-error.js","sourceRoot":"","sources":["../../src/errors/cogenta-error.ts"],"names":[],"mappings":"AA0BA;;;;GAIG;AACH,MAAM,OAAO,YAAa,SAAQ,KAAK;IAC5B,IAAI,CAAW;IACf,IAAI,CAAoB;IACxB,OAAO,CAA+C;IAE/D,YAAY,OAA4B;QACtC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;QAC1F,IAAI,CAAC,IAAI,GAAG,cAAc,CAAA;QAC1B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;QACxB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAA;QACxB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;IAChC,CAAC;IAED,uEAAuE;IACvE,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,cAAc;YACpB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAA;IACH,CAAC;CACF;AAED,MAAM,UAAU,cAAc,CAAC,KAAc;IAC3C,OAAO,KAAK,YAAY,YAAY,CAAA;AACtC,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type { ErrorCode } from './codes.js';
|
|
2
|
+
export { ERROR_CODES } from './codes.js';
|
|
3
|
+
export type { CogentaErrorOptions, SerialisedCogentaError } from './cogenta-error.js';
|
|
4
|
+
export { CogentaError, isCogentaError } from './cogenta-error.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AACxC,YAAY,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAA;AACrF,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAExC,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA"}
|
package/dist/id.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function newId(now?: () => number): string;
|
|
2
|
+
export declare function isUuidV7(value: string): boolean;
|
|
3
|
+
/** The millisecond an id was minted, readable without a database round-trip. */
|
|
4
|
+
export declare function timestampOf(id: string): number;
|
|
5
|
+
//# sourceMappingURL=id.d.ts.map
|
package/dist/id.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../src/id.ts"],"names":[],"mappings":"AAkCA,wBAAgB,KAAK,CAAC,GAAG,GAAE,MAAM,MAAiB,GAAG,MAAM,CAoC1D;AAiBD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE9C"}
|
package/dist/id.js
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { randomFillSync } from 'node:crypto';
|
|
2
|
+
/**
|
|
3
|
+
* UUIDv7 generation, per ADR-0015: every content id is minted by the
|
|
4
|
+
* application, never by the database.
|
|
5
|
+
*
|
|
6
|
+
* Node exposes `randomUUID`, which is v4 only — there is no v7 in the standard
|
|
7
|
+
* library as of Node 24 — so the layout below is written out by hand against
|
|
8
|
+
* RFC 9562 §5.7 rather than pulling in a dependency for sixteen bytes (rule R9).
|
|
9
|
+
*
|
|
10
|
+
* 0..5 unix timestamp in milliseconds, big-endian, 48 bits
|
|
11
|
+
* 6..7 version (7) in the high nibble, then a 12-bit sequence counter
|
|
12
|
+
* 8 variant (0b10) in the two high bits, then 6 random bits
|
|
13
|
+
* 9..15 random, 56 bits
|
|
14
|
+
*
|
|
15
|
+
* v4 is not an option here: random ids fragment a B-tree index on insert, and
|
|
16
|
+
* the write cost grows with the table. v7 sorts by creation time, so new rows
|
|
17
|
+
* land at the end of the index.
|
|
18
|
+
*/
|
|
19
|
+
const MAX_SEQUENCE = 0xfff;
|
|
20
|
+
/**
|
|
21
|
+
* Ids minted inside the same millisecond stay ordered because the 12-bit
|
|
22
|
+
* `rand_a` field is used as a counter (RFC 9562 §6.2, "monotonic random"
|
|
23
|
+
* method 1). Without it, two rows created in the same tick sort at random —
|
|
24
|
+
* which breaks pagination by id, the very reason for choosing v7.
|
|
25
|
+
*/
|
|
26
|
+
let lastTimestamp = -1;
|
|
27
|
+
let sequence = 0;
|
|
28
|
+
/** Random bytes for the low 62 bits. Refilled per call, never reused. */
|
|
29
|
+
const randomBytes = new Uint8Array(8);
|
|
30
|
+
export function newId(now = Date.now) {
|
|
31
|
+
const timestamp = now();
|
|
32
|
+
if (timestamp === lastTimestamp) {
|
|
33
|
+
sequence += 1;
|
|
34
|
+
if (sequence > MAX_SEQUENCE) {
|
|
35
|
+
// More than 4096 ids in one millisecond: borrow from the next one rather
|
|
36
|
+
// than emit a duplicate. Time-ordering is preserved, the clock is not.
|
|
37
|
+
lastTimestamp += 1;
|
|
38
|
+
sequence = 0;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
// A clock that steps backwards must not produce ids that sort before rows
|
|
43
|
+
// already written, so the last timestamp only ever moves forward.
|
|
44
|
+
lastTimestamp = timestamp > lastTimestamp ? timestamp : lastTimestamp + 1;
|
|
45
|
+
sequence = 0;
|
|
46
|
+
}
|
|
47
|
+
randomFillSync(randomBytes);
|
|
48
|
+
const bytes = new Uint8Array(16);
|
|
49
|
+
const millis = lastTimestamp;
|
|
50
|
+
bytes[0] = Math.floor(millis / 2 ** 40) & 0xff;
|
|
51
|
+
bytes[1] = Math.floor(millis / 2 ** 32) & 0xff;
|
|
52
|
+
bytes[2] = Math.floor(millis / 2 ** 24) & 0xff;
|
|
53
|
+
bytes[3] = Math.floor(millis / 2 ** 16) & 0xff;
|
|
54
|
+
bytes[4] = Math.floor(millis / 2 ** 8) & 0xff;
|
|
55
|
+
bytes[5] = millis & 0xff;
|
|
56
|
+
bytes[6] = 0x70 | ((sequence >>> 8) & 0x0f);
|
|
57
|
+
bytes[7] = sequence & 0xff;
|
|
58
|
+
bytes[8] = 0x80 | ((randomBytes[0] ?? 0) & 0x3f);
|
|
59
|
+
for (let index = 9; index < 16; index += 1) {
|
|
60
|
+
bytes[index] = randomBytes[index - 8] ?? 0;
|
|
61
|
+
}
|
|
62
|
+
return formatUuid(bytes);
|
|
63
|
+
}
|
|
64
|
+
const HEX = Array.from({ length: 256 }, (_, byte) => byte.toString(16).padStart(2, '0'));
|
|
65
|
+
function formatUuid(bytes) {
|
|
66
|
+
let text = '';
|
|
67
|
+
for (let index = 0; index < 16; index += 1) {
|
|
68
|
+
if (index === 4 || index === 6 || index === 8 || index === 10)
|
|
69
|
+
text += '-';
|
|
70
|
+
text += HEX[bytes[index] ?? 0];
|
|
71
|
+
}
|
|
72
|
+
return text;
|
|
73
|
+
}
|
|
74
|
+
const UUID_V7_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;
|
|
75
|
+
export function isUuidV7(value) {
|
|
76
|
+
return UUID_V7_PATTERN.test(value);
|
|
77
|
+
}
|
|
78
|
+
/** The millisecond an id was minted, readable without a database round-trip. */
|
|
79
|
+
export function timestampOf(id) {
|
|
80
|
+
return Number.parseInt(id.slice(0, 8) + id.slice(9, 13), 16);
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=id.js.map
|
package/dist/id.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id.js","sourceRoot":"","sources":["../src/id.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from './cache/index.js';
|
|
2
|
+
export * from './config/index.js';
|
|
3
|
+
export * from './db/index.js';
|
|
4
|
+
export * from './drivers/index.js';
|
|
5
|
+
export * from './errors/index.js';
|
|
6
|
+
export * from './id.js';
|
|
7
|
+
export * from './logger/index.js';
|
|
8
|
+
export * from './media/index.js';
|
|
9
|
+
export * from './migrations/index.js';
|
|
10
|
+
export * from './queue/index.js';
|
|
11
|
+
export * from './storage/index.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from './cache/index.js';
|
|
2
|
+
export * from './config/index.js';
|
|
3
|
+
export * from './db/index.js';
|
|
4
|
+
export * from './drivers/index.js';
|
|
5
|
+
export * from './errors/index.js';
|
|
6
|
+
export * from './id.js';
|
|
7
|
+
export * from './logger/index.js';
|
|
8
|
+
export * from './media/index.js';
|
|
9
|
+
export * from './migrations/index.js';
|
|
10
|
+
export * from './queue/index.js';
|
|
11
|
+
export * from './storage/index.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { createLogger } from './logger.js';
|
|
2
|
+
export { REDACTED, redact } from './redact.js';
|
|
3
|
+
export type { EmittedLogLevel, LogDestination, LogFields, Logger, LoggerOptions, LogLevel, LogRecord, } from './types.js';
|
|
4
|
+
export { LOG_LEVELS } from './types.js';
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","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;AAU9C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Logger, LoggerOptions } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Structured NDJSON logger. One JSON object per line, never free text: logs are
|
|
4
|
+
* read by machines first and humans second.
|
|
5
|
+
*
|
|
6
|
+
* Every record passes through redaction, so a secret that slipped into a field
|
|
7
|
+
* does not reach the output (rule R7).
|
|
8
|
+
*/
|
|
9
|
+
export declare function createLogger(options?: LoggerOptions): Logger;
|
|
10
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/logger/logger.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAIV,MAAM,EACN,aAAa,EAEd,MAAM,YAAY,CAAA;AA4DnB;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,aAAkB,GAAG,MAAM,CAkDhE"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import process from 'node:process';
|
|
2
|
+
import { isCogentaError } from '../errors/index.js';
|
|
3
|
+
import { redact } from './redact.js';
|
|
4
|
+
const SEVERITY = {
|
|
5
|
+
debug: 10,
|
|
6
|
+
info: 20,
|
|
7
|
+
warn: 30,
|
|
8
|
+
error: 40,
|
|
9
|
+
silent: Number.POSITIVE_INFINITY,
|
|
10
|
+
};
|
|
11
|
+
/** Reserved by the record structure: a field may never overwrite one of these. */
|
|
12
|
+
const RESERVED = new Set(['time', 'level', 'msg']);
|
|
13
|
+
const writeToStdout = (line) => {
|
|
14
|
+
process.stdout.write(line);
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* `Error` has non-enumerable properties, so `JSON.stringify` renders it as `{}`.
|
|
18
|
+
* Losing the one field that explains a failure is the classic structured-logging
|
|
19
|
+
* bug; unpack it explicitly instead.
|
|
20
|
+
*/
|
|
21
|
+
function serialiseError(value) {
|
|
22
|
+
if (isCogentaError(value))
|
|
23
|
+
return { ...value.toJSON() };
|
|
24
|
+
const serialised = { name: value.name, message: value.message };
|
|
25
|
+
if (value.cause !== undefined) {
|
|
26
|
+
serialised['cause'] = value.cause instanceof Error ? serialiseError(value.cause) : value.cause;
|
|
27
|
+
}
|
|
28
|
+
return serialised;
|
|
29
|
+
}
|
|
30
|
+
function expandErrors(fields) {
|
|
31
|
+
const output = {};
|
|
32
|
+
for (const [key, value] of Object.entries(fields)) {
|
|
33
|
+
output[key] = value instanceof Error ? serialiseError(value) : value;
|
|
34
|
+
}
|
|
35
|
+
return output;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Last line of defence. A logger that throws takes the caller down with it, and
|
|
39
|
+
* an unserialisable field is never worth an outage — drop the field, keep the
|
|
40
|
+
* record, say so.
|
|
41
|
+
*/
|
|
42
|
+
function stringify(record) {
|
|
43
|
+
try {
|
|
44
|
+
return JSON.stringify(record, (_key, value) => typeof value === 'bigint' ? value.toString() : value);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return JSON.stringify({
|
|
48
|
+
time: record['time'],
|
|
49
|
+
level: record['level'],
|
|
50
|
+
msg: record['msg'],
|
|
51
|
+
logError: 'fields could not be serialised and were dropped',
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Structured NDJSON logger. One JSON object per line, never free text: logs are
|
|
57
|
+
* read by machines first and humans second.
|
|
58
|
+
*
|
|
59
|
+
* Every record passes through redaction, so a secret that slipped into a field
|
|
60
|
+
* does not reach the output (rule R7).
|
|
61
|
+
*/
|
|
62
|
+
export function createLogger(options = {}) {
|
|
63
|
+
const level = options.level ?? 'info';
|
|
64
|
+
const destination = options.destination ?? writeToStdout;
|
|
65
|
+
const clock = options.clock ?? (() => new Date());
|
|
66
|
+
const bindings = redact(options.bindings ?? {});
|
|
67
|
+
const threshold = SEVERITY[level];
|
|
68
|
+
function emit(recordLevel, message, fields) {
|
|
69
|
+
if (SEVERITY[recordLevel] < threshold)
|
|
70
|
+
return;
|
|
71
|
+
const safe = fields === undefined ? {} : redact(expandErrors(fields));
|
|
72
|
+
const record = { ...bindings };
|
|
73
|
+
for (const [key, value] of Object.entries(safe)) {
|
|
74
|
+
if (!RESERVED.has(key))
|
|
75
|
+
record[key] = value;
|
|
76
|
+
}
|
|
77
|
+
record['time'] = clock().toISOString();
|
|
78
|
+
record['level'] = recordLevel;
|
|
79
|
+
record['msg'] = message;
|
|
80
|
+
destination(`${stringify(record)}\n`);
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
level,
|
|
84
|
+
debug: (message, fields) => {
|
|
85
|
+
emit('debug', message, fields);
|
|
86
|
+
},
|
|
87
|
+
info: (message, fields) => {
|
|
88
|
+
emit('info', message, fields);
|
|
89
|
+
},
|
|
90
|
+
warn: (message, fields) => {
|
|
91
|
+
emit('warn', message, fields);
|
|
92
|
+
},
|
|
93
|
+
error: (message, fields) => {
|
|
94
|
+
emit('error', message, fields);
|
|
95
|
+
},
|
|
96
|
+
child: (childBindings) => createLogger({
|
|
97
|
+
...options,
|
|
98
|
+
level,
|
|
99
|
+
destination,
|
|
100
|
+
clock,
|
|
101
|
+
bindings: { ...bindings, ...redact(childBindings) },
|
|
102
|
+
}),
|
|
103
|
+
isLevelEnabled: (candidate) => candidate !== 'silent' &&
|
|
104
|
+
SEVERITY[candidate] >= threshold &&
|
|
105
|
+
threshold !== Number.POSITIVE_INFINITY,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/logger/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** What replaces a redacted value. Constant so tests and readers can match on it. */
|
|
2
|
+
export declare const REDACTED = "[redacted]";
|
|
3
|
+
/**
|
|
4
|
+
* Returns a copy of `fields` with credentials removed — by field name, by value
|
|
5
|
+
* shape, and inside connection strings.
|
|
6
|
+
*
|
|
7
|
+
* This is belt and braces on top of rule R7: secrets are not supposed to reach a
|
|
8
|
+
* log call in the first place. Defence in depth is warranted because a leaked
|
|
9
|
+
* key in a log file is discovered late, by someone else, and costs a rotation.
|
|
10
|
+
*/
|
|
11
|
+
export declare function redact<T extends Record<string, unknown>>(fields: T): Record<string, unknown>;
|
|
12
|
+
//# sourceMappingURL=redact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/logger/redact.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,eAAO,MAAM,QAAQ,eAAe,CAAA;AAuFpC;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE5F"}
|