@jaypie/logger 1.2.19 → 1.2.20

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.
@@ -1353,6 +1353,11 @@ class JaypieLogger {
1353
1353
  this._loggers.push(logger._logger);
1354
1354
  return logger;
1355
1355
  }
1356
+ /**
1357
+ * Merge data into the current session's report. Requires an active
1358
+ * session (started via setup()); logs a warning and is a no-op otherwise.
1359
+ * Warns when overwriting an existing key. Emitted by teardown().
1360
+ */
1356
1361
  report(data) {
1357
1362
  if (!this._sessionActive) {
1358
1363
  this.warn("[logger] report() called without active session");
@@ -1365,6 +1370,11 @@ class JaypieLogger {
1365
1370
  }
1366
1371
  Object.assign(this._report, data);
1367
1372
  }
1373
+ /**
1374
+ * Start a report session: resets warn/error counters and accumulated
1375
+ * report data, applies optional tags. Pair with teardown() to bookend a
1376
+ * request. Handlers call this automatically.
1377
+ */
1368
1378
  setup(tags) {
1369
1379
  if (this._sessionActive) {
1370
1380
  this.warn("[logger] setup() called while session already active");
@@ -1383,6 +1393,12 @@ class JaypieLogger {
1383
1393
  }
1384
1394
  Object.assign(this._tags, tags);
1385
1395
  }
1396
+ /**
1397
+ * End the current report session: emits log.info.var({ report }) with
1398
+ * accumulated report() data plus { log: { warn, warns, error, errors } }
1399
+ * counts, then resets session state. No-op if no session is active.
1400
+ * Handlers call this automatically.
1401
+ */
1386
1402
  teardown() {
1387
1403
  if (!this._sessionActive) {
1388
1404
  return;
@@ -1452,6 +1468,7 @@ function createLogger(tags = {}) {
1452
1468
  const log = createLogger();
1453
1469
 
1454
1470
  exports.FORMAT = FORMAT;
1471
+ exports.JaypieLogger = JaypieLogger;
1455
1472
  exports.LEVEL = LEVEL;
1456
1473
  exports.Logger = Logger;
1457
1474
  exports._resetDatadogTransport = _resetDatadogTransport;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../src/constants.ts","../../../../src/limits.ts","../../../../src/pipelines.ts","../../../../src/sanitizeAuth.ts","../../../../src/datadogTransport.ts","../../../../src/utils.ts","../../../../src/Logger.ts","../../../../src/logTags.ts","../../../../src/forceVar.ts","../../../../src/logVar.ts","../../../../src/JaypieLogger.ts","../../../../src/index.ts"],"sourcesContent":["export const DEFAULT = {\n LEVEL: \"debug\",\n // CloudWatch Logs caps events at 256KB and fronts Datadog in Lambda;\n // Datadog's own per-log cap is 1MB. Truncate deliberately below both.\n MAX_ENTRY_BYTES: 262144,\n VAR_LEVEL: \"debug\",\n};\n\nexport const LIMIT_ENV = {\n MAX_DEPTH: \"LOG_MAX_DEPTH\",\n MAX_ENTRY_BYTES: \"LOG_MAX_ENTRY_BYTES\",\n MAX_STRING: \"LOG_MAX_STRING\",\n} as const;\n\nexport const ERROR_PREFIX = \"[logger]\";\n\nexport const ERROR = {\n VAR: {\n EMPTY_OBJECT: `${ERROR_PREFIX} Logger.var() called with empty object`,\n MULTIPLE_KEYS: `${ERROR_PREFIX} Logger.var() called with multiple keys`,\n NULL_OBJECT: `${ERROR_PREFIX} Logger.var() called with null`,\n UNDEFINED_MESSAGE: `${ERROR_PREFIX} Logger.var() called with \\`undefined\\` message`,\n },\n};\n\nexport const FORMAT = {\n JSON: \"json\",\n TEXT: \"text\",\n} as const;\n\nexport const LEVEL = {\n ALL: \"all\",\n DEBUG: \"debug\",\n ERROR: \"error\",\n FATAL: \"fatal\",\n INFO: \"info\",\n SILENT: \"silent\",\n TRACE: \"trace\",\n WARN: \"warn\",\n} as const;\n\nexport const LEVEL_VALUES: Record<string, number> = {\n all: 100,\n debug: 70,\n error: 10,\n fatal: 1,\n info: 50,\n none: 0,\n silent: 0,\n trace: 90,\n warn: 30,\n};\n\nexport const DATADOG_TRANSPORT = {\n ENV: {\n API_KEY: \"DATADOG_API_KEY\",\n DD_ENV: \"DD_ENV\",\n DD_HOST: \"DD_HOST\",\n DD_SERVICE: \"DD_SERVICE\",\n DD_SITE: \"DD_SITE\",\n DD_SOURCE: \"DD_SOURCE\",\n FORWARDING: \"DATADOG_LOCAL_FORWARDING\",\n PROJECT_ENV: \"PROJECT_ENV\",\n PROJECT_HOST: \"PROJECT_HOST\",\n PROJECT_SERVICE: \"PROJECT_SERVICE\",\n PROJECT_SOURCE: \"PROJECT_SOURCE\",\n },\n FLUSH_INTERVAL_MS: 5000,\n INTAKE_PATH: \"/api/v2/logs\",\n MAX_BATCH_SIZE: 100,\n} as const;\n\nexport const PSEUDO_LEVELS = [\"ALL\", \"SILENT\"];\n","import { DEFAULT, LIMIT_ENV } from \"./constants\";\n\n//\n//\n// Types\n//\n\n/**\n * Caller-facing limit options. `false` explicitly disables a limit;\n * `undefined` resolves from env vars, then defaults.\n */\nexport interface SerializationLimitOptions {\n maxDepth?: number | false;\n maxEntryBytes?: number | false;\n maxStringLength?: number | false;\n}\n\n/**\n * Resolved limits. `undefined` means the limit is off.\n */\nexport interface SerializationLimits {\n maxDepth?: number;\n maxEntryBytes?: number;\n maxStringLength?: number;\n}\n\n//\n//\n// Constants\n//\n\nconst CIRCULAR_PLACEHOLDER = \"[Circular]\";\nconst DISABLED_ENV_VALUES = [\"\", \"0\", \"false\", \"none\", \"off\"];\nconst ELLIPSIS = \"…\";\n// Reserve headroom for the truncation marker when fitting a string to a\n// byte budget\nconst MARKER_RESERVE_BYTES = 64;\n\n/** Characters preserved when an oversized entry truncates an attribute */\nexport const ENTRY_PREVIEW_LENGTH = 72;\n\n//\n//\n// Helpers\n//\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\nfunction normalizeLimit(option: number | false): number | undefined {\n if (option === false) return undefined;\n if (typeof option === \"number\" && Number.isFinite(option) && option > 0) {\n return Math.floor(option);\n }\n return undefined;\n}\n\nfunction resolveLimit(\n option: number | false | undefined,\n envKey: string,\n defaultValue?: number,\n): number | undefined {\n if (option !== undefined) {\n return normalizeLimit(option);\n }\n const raw = process.env[envKey];\n if (raw !== undefined) {\n if (DISABLED_ENV_VALUES.includes(raw.toLowerCase())) return undefined;\n const parsed = Number.parseInt(raw, 10);\n if (Number.isFinite(parsed) && parsed > 0) return parsed;\n }\n return defaultValue;\n}\n\nfunction truncationMarker(droppedChars: number): string {\n return `${ELLIPSIS} [truncated ${droppedChars.toLocaleString(\"en-US\")} chars]`;\n}\n\n//\n//\n// Main\n//\n\n/**\n * Resolve limits from explicit options, env vars, then defaults.\n * `maxEntryBytes` defaults on (payloads must fit the log pipeline);\n * `maxDepth` and `maxStringLength` default off.\n */\nexport function resolveSerializationLimits(\n options: SerializationLimitOptions = {},\n): SerializationLimits {\n return {\n maxDepth: resolveLimit(options.maxDepth, LIMIT_ENV.MAX_DEPTH),\n maxEntryBytes: resolveLimit(\n options.maxEntryBytes,\n LIMIT_ENV.MAX_ENTRY_BYTES,\n DEFAULT.MAX_ENTRY_BYTES,\n ),\n maxStringLength: resolveLimit(\n options.maxStringLength,\n LIMIT_ENV.MAX_STRING,\n ),\n };\n}\n\nexport function hasValueLimits(limits: SerializationLimits): boolean {\n return limits.maxDepth !== undefined || limits.maxStringLength !== undefined;\n}\n\nexport function byteLength(value: unknown): number {\n try {\n const str = typeof value === \"string\" ? value : JSON.stringify(value);\n return Buffer.byteLength(str ?? \"\", \"utf8\");\n } catch {\n return 0;\n }\n}\n\n/**\n * Keep the first `maxLength` characters and append a visible marker\n * preserving the dropped size\n */\nexport function truncateString(value: string, maxLength: number): string {\n if (value.length <= maxLength) return value;\n return value.slice(0, maxLength) + truncationMarker(value.length - maxLength);\n}\n\n/**\n * Fit a string to a byte budget, reserving room for the marker and\n * never cutting below the preview length\n */\nexport function truncateToBudget(value: string, budgetBytes: number): string {\n if (Buffer.byteLength(value, \"utf8\") <= budgetBytes) return value;\n const maxLength = Math.max(\n ENTRY_PREVIEW_LENGTH,\n budgetBytes - MARKER_RESERVE_BYTES,\n );\n return truncateString(value, maxLength);\n}\n\n/**\n * Walk a value applying maxStringLength and maxDepth. Returns a new value;\n * never mutates the input. Only plain objects and arrays are traversed so\n * class instances (Error, Date, ...) keep their serialization behavior.\n */\nexport function applyValueLimits(\n value: unknown,\n limits: SerializationLimits,\n depth = 0,\n seen: WeakSet<object> = new WeakSet(),\n): unknown {\n const { maxDepth, maxStringLength } = limits;\n if (typeof value === \"string\") {\n return maxStringLength !== undefined\n ? truncateString(value, maxStringLength)\n : value;\n }\n if (Array.isArray(value)) {\n if (seen.has(value)) return CIRCULAR_PLACEHOLDER;\n if (maxDepth !== undefined && depth > maxDepth) {\n return `[Array(${value.length})]`;\n }\n seen.add(value);\n const result = value.map((item) =>\n applyValueLimits(item, limits, depth + 1, seen),\n );\n seen.delete(value);\n return result;\n }\n if (isPlainObject(value)) {\n if (seen.has(value)) return CIRCULAR_PLACEHOLDER;\n if (maxDepth !== undefined && depth > maxDepth) {\n return \"[Object]\";\n }\n seen.add(value);\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(value)) {\n result[key] = applyValueLimits(value[key], limits, depth + 1, seen);\n }\n seen.delete(value);\n return result;\n }\n return value;\n}\n\nfunction truncateToPreview(value: unknown): unknown {\n const str =\n typeof value === \"string\"\n ? value\n : (JSON.stringify(value) ?? String(value));\n if (str.length <= ENTRY_PREVIEW_LENGTH) return value;\n return truncateString(str, ENTRY_PREVIEW_LENGTH);\n}\n\n/**\n * Fit a serialized log entry under maxEntryBytes. Truncates the top-level\n * attributes of `data` largest-first to short previews until the entry fits,\n * collapsing `data` to a byte-count marker only as a last resort. When\n * `syncMessageToData` is set (var entries and single-object messages, where\n * `message` mirrors `data`), the message is rebuilt from the truncated data.\n * Returns a new entry; never mutates the input.\n */\nexport function enforceEntryLimit(\n entry: Record<string, unknown>,\n {\n maxEntryBytes,\n syncMessageToData = false,\n }: { maxEntryBytes: number; syncMessageToData?: boolean },\n): Record<string, unknown> {\n const originalBytes = byteLength(entry);\n if (originalBytes <= maxEntryBytes) return entry;\n\n const result = { ...entry };\n const sync = () => {\n if (syncMessageToData) {\n result.message =\n typeof result.data === \"string\"\n ? result.data\n : (JSON.stringify(result.data) ?? String(result.data));\n }\n };\n\n const data = result.data;\n if (typeof data === \"string\") {\n result.data = truncateToPreview(data);\n sync();\n } else if (Array.isArray(data) || isPlainObject(data)) {\n const container: Record<string, unknown> = Array.isArray(data)\n ? ([...data] as unknown as Record<string, unknown>)\n : { ...data };\n result.data = container;\n const keys = Object.keys(container).sort(\n (a, b) => byteLength(container[b]) - byteLength(container[a]),\n );\n for (const key of keys) {\n container[key] = truncateToPreview(container[key]);\n sync();\n if (byteLength(result) <= maxEntryBytes) return result;\n }\n } else if (typeof result.message === \"string\") {\n // No structured data: the message itself is oversized\n const overhead = originalBytes - byteLength(result.message);\n result.message = truncateToBudget(\n result.message,\n Math.max(ENTRY_PREVIEW_LENGTH, maxEntryBytes - overhead),\n );\n }\n\n if (byteLength(result) <= maxEntryBytes) return result;\n\n // Last resort: entry is still oversized after attribute-level truncation\n const marker = `[truncated ${originalBytes.toLocaleString(\"en-US\")} bytes]`;\n if (\"data\" in result) {\n result.data = marker;\n if (syncMessageToData) result.message = marker;\n } else if (typeof result.message === \"string\") {\n result.message = marker;\n }\n return result;\n}\n","interface Pipeline {\n key: string;\n filter: (value: unknown) => unknown;\n}\n\n//\n// Key-based pipelines (match on var key name)\n//\n\nfunction isAxiosResponse(response: unknown): boolean {\n if (typeof response !== \"object\" || response === null) {\n return false;\n }\n const r = response as Record<string, unknown>;\n return !!(\n r &&\n r.config &&\n r.data &&\n r.headers &&\n r.request &&\n r.status &&\n r.statusText\n );\n}\n\nfunction filterAxiosResponse(response: unknown): unknown {\n if (!isAxiosResponse(response)) {\n return response;\n }\n const r = response as Record<string, unknown>;\n const newResponse: Record<string, unknown> = {\n data: r.data,\n headers: r.headers,\n status: r.status,\n statusText: r.statusText,\n };\n if (r.isAxiosError) {\n newResponse.isAxiosError = r.isAxiosError;\n }\n return newResponse;\n}\n\nexport const axiosResponseVarPipeline: Pipeline = {\n filter: filterAxiosResponse,\n key: \"response\",\n};\n\nexport const pipelines = [axiosResponseVarPipeline];\n\n//\n// Type-based filters (run on any key, match on value shape)\n//\n\ninterface TypeFilter {\n detect: (value: unknown) => boolean;\n filter: (value: unknown) => unknown;\n}\n\n// Fetch Response\n\nfunction isFetchResponse(value: unknown): boolean {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n const r = value as Record<string, unknown>;\n return !!(\n typeof r.ok === \"boolean\" &&\n typeof r.status === \"number\" &&\n typeof r.statusText === \"string\" &&\n \"headers\" in r &&\n \"body\" in r &&\n typeof r.url === \"string\" &&\n !(\"config\" in r) &&\n !(\"request\" in r)\n );\n}\n\nfunction headersToObject(headers: unknown): Record<string, string> | unknown {\n if (\n headers &&\n typeof headers === \"object\" &&\n typeof (headers as Record<string, unknown>).entries === \"function\"\n ) {\n const result: Record<string, string> = {};\n for (const [key, value] of (headers as Headers).entries()) {\n result[key] = value;\n }\n return result;\n }\n return headers;\n}\n\nfunction filterFetchResponse(value: unknown): unknown {\n const r = value as Record<string, unknown>;\n return {\n headers: headersToObject(r.headers),\n ok: r.ok,\n redirected: r.redirected,\n status: r.status,\n statusText: r.statusText,\n type: r.type,\n url: r.url,\n };\n}\n\n// Error\n\nfunction isError(value: unknown): boolean {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n if (value instanceof Error) {\n return true;\n }\n const i = value as Record<string, unknown>;\n if (i.isProjectError) {\n return true;\n }\n return false;\n}\n\nfunction filterError(value: unknown): unknown {\n const e = value as Error & Record<string, unknown>;\n const newItem: Record<string, unknown> = {\n message: e.message,\n name: e.name,\n };\n if (e.cause) {\n newItem.cause = e.cause;\n }\n if (e.stack) {\n newItem.stack = e.stack;\n }\n if (e.isProjectError) {\n newItem.isProjectError = e.isProjectError;\n newItem.title = e.title;\n newItem.detail = e.detail;\n newItem.status = e.status;\n }\n return newItem;\n}\n\n// Type filter registry (order matters — first match wins)\n\nconst typeFilters: TypeFilter[] = [\n { detect: isFetchResponse, filter: filterFetchResponse },\n { detect: isError, filter: filterError },\n];\n\n//\n// Opaque object detection and generic extraction\n//\n\nfunction isOpaqueObject(value: unknown): boolean {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n // Plain objects are fine\n if (value.constructor === Object || value.constructor === undefined) {\n return false;\n }\n // If JSON.stringify produces \"{}\" the object has no own enumerable properties\n // and will log as useless \"[object Type]\"\n try {\n const json = JSON.stringify(value);\n return json === \"{}\" || json === \"[]\";\n } catch {\n return true;\n }\n}\n\nfunction extractOpaqueObject(value: unknown): Record<string, unknown> {\n const obj = value as object;\n const result: Record<string, unknown> = {};\n\n const ctorName = obj.constructor?.name;\n if (ctorName && ctorName !== \"Object\") {\n result._type = ctorName;\n }\n\n // If the object itself is map-like (Headers, URLSearchParams, FormData, etc.),\n // convert its entries directly\n const mapLike = obj as Record<string, unknown>;\n if (\n typeof mapLike.entries === \"function\" &&\n typeof mapLike.forEach === \"function\"\n ) {\n try {\n const entries = Object.fromEntries(\n (mapLike as { entries: () => Iterable<[string, unknown]> }).entries(),\n );\n return { ...result, ...entries };\n } catch {\n // Fall through to generic extraction\n }\n }\n\n // Collect readable non-function properties from the prototype chain\n let proto: object | null = obj;\n while (proto && proto !== Object.prototype) {\n for (const key of Object.getOwnPropertyNames(proto)) {\n if (key === \"constructor\" || key in result) {\n continue;\n }\n try {\n const desc = Object.getOwnPropertyDescriptor(proto, key);\n if (!desc) continue;\n // Read getters and value properties from the original object\n const val = (obj as Record<string, unknown>)[key];\n if (typeof val === \"function\" || typeof val === \"symbol\") {\n continue;\n }\n // Skip streams and other non-serializable objects\n if (\n val &&\n typeof val === \"object\" &&\n typeof (val as Record<string, unknown>).pipe === \"function\"\n ) {\n continue;\n }\n // Convert iterable map-like objects (Headers, URLSearchParams, etc.)\n if (\n val &&\n typeof val === \"object\" &&\n typeof (val as Record<string, unknown>).entries === \"function\" &&\n typeof (val as Record<string, unknown>).forEach === \"function\"\n ) {\n result[key] = Object.fromEntries(\n (val as { entries: () => Iterable<[string, unknown]> }).entries(),\n );\n continue;\n }\n result[key] = val;\n } catch {\n // Property threw on access — skip\n }\n }\n proto = Object.getPrototypeOf(proto);\n }\n\n return result;\n}\n\n//\n// Public API\n//\n\n/**\n * Filter a value by type, regardless of var key name.\n * Tries known type filters first, then falls back to generic\n * opaque object extraction for anything that would log as [object Type].\n */\nexport function filterByType(value: unknown): unknown {\n // Try known type filters\n for (const tf of typeFilters) {\n if (tf.detect(value)) {\n return tf.filter(value);\n }\n }\n // Generic fallback for opaque objects\n if (isOpaqueObject(value)) {\n return extractOpaqueObject(value);\n }\n return value;\n}\n\n// Legacy exports for key-based pipeline (axios only now)\nexport const errorVarPipeline: Pipeline = {\n filter: (item: unknown) => {\n if (!isError(item)) return item;\n return filterError(item);\n },\n key: \"error\",\n};\n","import { createHash } from \"node:crypto\";\n\n//\n//\n// Helper\n//\n\nexport function redactAuth(value: unknown): string {\n const str = String(value);\n if (/sk\\S+/.test(str)) {\n return `sk_${str.slice(-4)}`;\n }\n const hash = createHash(\"md5\").update(str).digest(\"hex\");\n return `md5_${hash.slice(-4)}`;\n}\n\n//\n//\n// Main\n//\n\nconst REDACTED_KEYS = new Set([\n \"authorization\",\n \"x-service-key\",\n \"x-webhook-token\",\n]);\n\nexport function sanitizeAuth(value: unknown): unknown {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return value;\n }\n\n const obj = value as Record<string, unknown>;\n let clone: Record<string, unknown> | undefined;\n\n for (const key of Object.keys(obj)) {\n const lower = key.toLowerCase();\n\n if (REDACTED_KEYS.has(lower)) {\n if (!clone) clone = { ...obj };\n clone[key] = redactAuth(obj[key]);\n } else if (lower === \"headers\") {\n const headers = obj[key];\n if (\n typeof headers === \"object\" &&\n headers !== null &&\n !Array.isArray(headers)\n ) {\n const hdrs = headers as Record<string, unknown>;\n let clonedHeaders: Record<string, unknown> | undefined;\n for (const hKey of Object.keys(hdrs)) {\n if (REDACTED_KEYS.has(hKey.toLowerCase())) {\n if (!clonedHeaders) clonedHeaders = { ...hdrs };\n clonedHeaders[hKey] = redactAuth(hdrs[hKey]);\n }\n }\n if (clonedHeaders) {\n if (!clone) clone = { ...obj };\n clone[key] = clonedHeaders;\n }\n }\n }\n }\n\n return clone ?? value;\n}\n","import { hostname } from \"node:os\";\nimport { request } from \"node:https\";\n\nimport { DATADOG_TRANSPORT, LEVEL } from \"./constants\";\n\n// Level-to-Datadog status mapping\nconst LEVEL_TO_STATUS: Record<string, string> = {\n [LEVEL.TRACE]: \"debug\",\n [LEVEL.DEBUG]: \"debug\",\n [LEVEL.INFO]: \"info\",\n [LEVEL.WARN]: \"warn\",\n [LEVEL.ERROR]: \"error\",\n [LEVEL.FATAL]: \"critical\",\n};\n\nfunction envBoolean(\n key: string,\n { defaultValue }: { defaultValue: boolean },\n): boolean {\n const value = process.env[key];\n if (value === undefined) return defaultValue;\n const lower = value.toLowerCase();\n return !(\n lower === \"\" ||\n lower === \"0\" ||\n lower === \"f\" ||\n lower === \"false\" ||\n lower === \"n\" ||\n lower === \"no\"\n );\n}\n\nexport function isDatadogForwardingEnabled(): boolean {\n return (\n envBoolean(DATADOG_TRANSPORT.ENV.FORWARDING, { defaultValue: false }) &&\n !!process.env[DATADOG_TRANSPORT.ENV.API_KEY]\n );\n}\n\ninterface DatadogLogEntry {\n ddsource: string;\n ddtags: string;\n hostname: string;\n message: string;\n service: string;\n status: string;\n [key: string]: unknown;\n}\n\nclass DatadogLogTransport {\n private _beforeExitHandler: (() => void) | null = null;\n private _buffer: DatadogLogEntry[] = [];\n private _flushTimer: ReturnType<typeof setInterval> | null = null;\n private _ddsource: string;\n private _env: string;\n private _hostname: string;\n private _service: string;\n private _site: string;\n\n constructor() {\n const env = process.env;\n this._ddsource =\n env[DATADOG_TRANSPORT.ENV.DD_SOURCE] ||\n env[DATADOG_TRANSPORT.ENV.PROJECT_SOURCE] ||\n \"nodejs\";\n this._env =\n env[DATADOG_TRANSPORT.ENV.DD_ENV] ||\n env[DATADOG_TRANSPORT.ENV.PROJECT_ENV] ||\n \"local\";\n this._hostname =\n env[DATADOG_TRANSPORT.ENV.DD_HOST] ||\n env[DATADOG_TRANSPORT.ENV.PROJECT_HOST] ||\n hostname();\n this._service =\n env[DATADOG_TRANSPORT.ENV.DD_SERVICE] ||\n env[DATADOG_TRANSPORT.ENV.PROJECT_SERVICE] ||\n \"unknown\";\n this._site = env[DATADOG_TRANSPORT.ENV.DD_SITE] || \"datadoghq.com\";\n\n this._flushTimer = setInterval(() => {\n this.flush();\n }, DATADOG_TRANSPORT.FLUSH_INTERVAL_MS);\n // Unref so timer doesn't keep process alive\n if (this._flushTimer && typeof this._flushTimer.unref === \"function\") {\n this._flushTimer.unref();\n }\n\n // Best-effort flush on exit\n this._beforeExitHandler = () => this.flush();\n process.on(\"beforeExit\", this._beforeExitHandler);\n }\n\n send(line: string, level: string): void {\n let message: string = line;\n let extra: Record<string, unknown> = {};\n if (typeof line === \"string\") {\n try {\n const parsed = JSON.parse(line);\n if (parsed && typeof parsed === \"object\") {\n if (parsed.message) {\n message = parsed.message;\n extra = { ...parsed };\n delete extra.message;\n delete extra.status;\n }\n }\n } catch {\n // Not JSON — use line as-is\n }\n }\n const entry: DatadogLogEntry = {\n ddsource: this._ddsource,\n ddtags: `env:${this._env}`,\n hostname: this._hostname,\n message,\n service: this._service,\n status: LEVEL_TO_STATUS[level] || \"info\",\n ...extra,\n };\n this._buffer.push(entry);\n if (this._buffer.length >= DATADOG_TRANSPORT.MAX_BATCH_SIZE) {\n this.flush();\n }\n }\n\n flush(): void {\n if (this._buffer.length === 0) return;\n\n // Atomic swap\n const batch = this._buffer;\n this._buffer = [];\n\n const apiKey = process.env[DATADOG_TRANSPORT.ENV.API_KEY];\n if (!apiKey) return;\n\n const body = JSON.stringify(batch);\n const options = {\n headers: {\n \"Content-Type\": \"application/json\",\n \"DD-API-KEY\": apiKey,\n },\n hostname: `http-intake.logs.${this._site}`,\n method: \"POST\",\n path: DATADOG_TRANSPORT.INTAKE_PATH,\n };\n\n try {\n const req = request(options, () => {\n // Response intentionally ignored\n });\n req.on(\"error\", () => {\n // Silently swallow transport errors\n });\n req.write(body);\n req.end();\n } catch {\n // Transport must never throw\n }\n }\n\n destroy(): void {\n if (this._flushTimer) {\n clearInterval(this._flushTimer);\n this._flushTimer = null;\n }\n if (this._beforeExitHandler) {\n process.removeListener(\"beforeExit\", this._beforeExitHandler);\n this._beforeExitHandler = null;\n }\n try {\n this.flush();\n } catch {\n // Best-effort\n }\n }\n}\n\nlet _instance: DatadogLogTransport | null = null;\n\nexport function getDatadogTransport(): DatadogLogTransport | null {\n if (!isDatadogForwardingEnabled()) return null;\n if (!_instance) {\n _instance = new DatadogLogTransport();\n }\n return _instance;\n}\n\nexport function _resetDatadogTransport(): void {\n if (_instance) {\n _instance.destroy();\n _instance = null;\n }\n}\n","import { LEVEL } from \"./constants\";\nimport { getDatadogTransport } from \"./datadogTransport\";\n\nexport function forceString(value: unknown, defaultValue = \"\"): string {\n if (value === null) return \"null\";\n if (value === undefined) return String(defaultValue);\n if (typeof value === \"object\") return JSON.stringify(value);\n return String(value);\n}\n\nexport function formatAsJsonString(subject: unknown): string {\n const SPACES = 0;\n const UNUSED_PARAM = null;\n\n switch (typeof subject) {\n case \"string\":\n if (subject === \"\") return `\"\"`;\n try {\n return JSON.stringify(JSON.parse(subject), UNUSED_PARAM, SPACES);\n } catch {\n return subject;\n }\n\n case \"object\":\n try {\n if (\n subject &&\n subject instanceof Object &&\n !Array.isArray(subject) &&\n subject.constructor &&\n subject.constructor !== Object &&\n \"toString\" in subject &&\n typeof subject.toString === \"function\"\n ) {\n return subject.toString();\n }\n return JSON.stringify(subject, UNUSED_PARAM, SPACES);\n } catch (error) {\n if (error instanceof TypeError) {\n const truncatedSubject = Object.keys(subject as object).reduce(\n (newSubject: Record<string, string>, key: string) => {\n const nextSubject = { ...newSubject };\n nextSubject[key] = String(\n (subject as Record<string, unknown>)[key],\n );\n return nextSubject;\n },\n {},\n );\n return formatAsJsonString(truncatedSubject);\n }\n throw error;\n }\n\n default:\n return String(subject);\n }\n}\n\nexport function stringify(...params: unknown[]): string {\n if (params.length === 0) return \"\";\n if (params.length === 1) {\n return formatAsJsonString(params[0]);\n }\n\n const formatted = params.map(formatAsJsonString);\n return formatted.join(\" \");\n}\n\n/* eslint-disable no-console -- console is the logger's output device */\nexport function out(\n line: string | unknown,\n { level = \"debug\" }: { level?: string } = {},\n): void {\n let lineStr: string;\n if (typeof line !== \"string\") {\n lineStr = stringify(line);\n } else {\n lineStr = line;\n }\n\n let outputFunction: (...args: unknown[]) => void;\n\n switch (level) {\n case LEVEL.INFO:\n outputFunction = console.info;\n break;\n case LEVEL.WARN:\n outputFunction = console.warn;\n break;\n case LEVEL.ERROR:\n case LEVEL.FATAL:\n outputFunction = console.error;\n break;\n case LEVEL.TRACE:\n case LEVEL.DEBUG:\n outputFunction = console.debug;\n break;\n default:\n outputFunction = console.log;\n break;\n }\n\n try {\n outputFunction(lineStr);\n } catch (error) {\n console.warn(error);\n console.log(lineStr);\n }\n\n try {\n const transport = getDatadogTransport();\n if (transport) {\n transport.send(lineStr, level);\n }\n } catch {\n // Transport errors must never affect logging\n }\n}\n/* eslint-enable no-console */\n\nexport function parse(message: unknown): unknown {\n if (typeof message !== \"string\") {\n return message;\n }\n try {\n return JSON.parse(message);\n } catch {\n return message;\n }\n}\n\nexport function parsesTo(message: unknown): {\n parses: boolean;\n message: unknown;\n} {\n if (typeof message !== \"string\") {\n return {\n parses: false,\n message,\n };\n }\n try {\n return {\n parses: true,\n message: JSON.parse(message),\n };\n } catch {\n return {\n parses: false,\n message,\n };\n }\n}\n","import { DEFAULT, ERROR, FORMAT, LEVEL, LEVEL_VALUES } from \"./constants\";\nimport {\n applyValueLimits,\n enforceEntryLimit,\n hasValueLimits,\n resolveSerializationLimits,\n SerializationLimitOptions,\n SerializationLimits,\n truncateToBudget,\n} from \"./limits\";\nimport { filterByType, pipelines } from \"./pipelines\";\nimport { sanitizeAuth } from \"./sanitizeAuth\";\nimport { forceString, out, parse, parsesTo, stringify } from \"./utils\";\n\ntype LogLevel = string;\ntype LogFormat = \"json\" | \"text\";\ntype Tags = Record<string, string>;\n\ninterface LoggerOptions extends SerializationLimitOptions {\n format?: LogFormat;\n level?: LogLevel;\n levelField?: boolean | string;\n tags?: Tags;\n varLevel?: LogLevel;\n}\n\ninterface LogJson {\n data?: unknown;\n dataType?: string;\n message: string;\n var?: string;\n [key: string]: unknown;\n}\n\ntype LogMethod = {\n (...messages: unknown[]): void;\n var: (messageObject: unknown, messageValue?: unknown) => void;\n};\n\nfunction resolveLevelField(value?: boolean | string): false | string {\n if (value === undefined) {\n const env = process.env.LOG_LEVEL_FIELD;\n if (env === undefined || env === \"\") return false;\n if (env === \"false\" || env === \"0\" || env === \"no\") return false;\n if (env === \"true\" || env === \"1\" || env === \"yes\") return \"level\";\n return env;\n }\n if (value === false) return false;\n if (value === true) return \"level\";\n return value;\n}\n\nclass Logger {\n public debug: LogMethod;\n public error: LogMethod;\n public fatal: LogMethod;\n public info: LogMethod;\n public options: LoggerOptions;\n public tags: Tags;\n public trace: LogMethod;\n public var: (messageObject: unknown, messageValue?: unknown) => void;\n public warn: LogMethod;\n private levelField: false | string;\n private limits: SerializationLimits;\n\n constructor({\n format = (process.env.LOG_FORMAT as LogFormat) || DEFAULT.LEVEL,\n level = process.env.LOG_LEVEL || DEFAULT.LEVEL,\n levelField,\n maxDepth,\n maxEntryBytes,\n maxStringLength,\n tags = {},\n varLevel = process.env.LOG_VAR_LEVEL || DEFAULT.VAR_LEVEL,\n }: LoggerOptions = {}) {\n this.levelField = resolveLevelField(levelField);\n this.limits = resolveSerializationLimits({\n maxDepth,\n maxEntryBytes,\n maxStringLength,\n });\n this.options = {\n format,\n level,\n levelField: this.levelField || undefined,\n // Pin resolved limits (false = explicitly off) so child loggers\n // created via with() inherit this config instead of re-resolving\n maxDepth: this.limits.maxDepth ?? false,\n maxEntryBytes: this.limits.maxEntryBytes ?? false,\n maxStringLength: this.limits.maxStringLength ?? false,\n varLevel,\n };\n\n this.tags = {};\n Object.keys(tags).forEach((key) => {\n this.tags[key] = forceString(tags[key]);\n });\n\n this.debug = this.createLogMethod(LEVEL.DEBUG, format, level);\n this.error = this.createLogMethod(LEVEL.ERROR, format, level);\n this.fatal = this.createLogMethod(LEVEL.FATAL, format, level);\n this.info = this.createLogMethod(LEVEL.INFO, format, level);\n this.trace = this.createLogMethod(LEVEL.TRACE, format, level);\n this.warn = this.createLogMethod(LEVEL.WARN, format, level);\n\n const varLevelMethod =\n this[varLevel as \"debug\" | \"error\" | \"fatal\" | \"info\" | \"trace\" | \"warn\"];\n this.var = (varLevelMethod as LogMethod)?.var || this.debug.var;\n }\n\n private createLogMethod(\n logLevel: string,\n format: LogFormat,\n checkLevel: string,\n ): LogMethod {\n const logFn = (...messages: unknown[]): void => {\n if (LEVEL_VALUES[logLevel] <= LEVEL_VALUES[checkLevel]) {\n let sanitized = messages.map(sanitizeAuth);\n if (hasValueLimits(this.limits)) {\n sanitized = sanitized.map((item) =>\n applyValueLimits(item, this.limits),\n );\n }\n if (format === FORMAT.JSON) {\n let message = stringify(...sanitized);\n let parses = parsesTo(message);\n // When data comes from the full message they mirror each other;\n // entry-limit truncation must keep them in sync\n let syncMessageToData = parses.parses;\n const last = sanitized[sanitized.length - 1];\n if (\n sanitized.length > 1 &&\n typeof last === \"object\" &&\n last !== null &&\n sanitized\n .slice(0, -1)\n .every((item) => typeof item !== \"object\" || item === null)\n ) {\n const lastParses = parsesTo(stringify(last));\n if (lastParses.parses) {\n message = stringify(...sanitized.slice(0, -1));\n parses = lastParses;\n syncMessageToData = false;\n }\n }\n const json: LogJson = {\n message,\n ...this.tags,\n };\n if (parses.parses) {\n json.data = parses.message;\n }\n if (this.levelField) {\n json[this.levelField] = logLevel;\n }\n let entry: LogJson = json;\n if (this.limits.maxEntryBytes !== undefined) {\n entry = enforceEntryLimit(json, {\n maxEntryBytes: this.limits.maxEntryBytes,\n syncMessageToData,\n }) as LogJson;\n }\n out(entry, { level: logLevel });\n } else {\n let message = stringify(...sanitized);\n if (this.limits.maxEntryBytes !== undefined) {\n message = truncateToBudget(message, this.limits.maxEntryBytes);\n }\n out(message, { level: logLevel });\n }\n }\n };\n\n logFn.var = (messageObject: unknown, messageValue?: unknown): void => {\n if (messageObject === undefined) {\n this.warn(ERROR.VAR.UNDEFINED_MESSAGE);\n }\n\n let msgObj: Record<string, unknown>;\n\n if (typeof messageObject !== \"object\" || messageObject === null) {\n if (typeof messageObject !== \"object\") {\n if (messageValue === undefined) messageValue = \"undefined\";\n msgObj = { [String(messageObject)]: messageValue };\n } else {\n this.warn(ERROR.VAR.NULL_OBJECT);\n return logFn(messageObject);\n }\n } else {\n msgObj = sanitizeAuth(messageObject) as Record<string, unknown>;\n }\n\n const keys = Object.keys(msgObj);\n if (keys.length === 0) {\n this.warn(ERROR.VAR.EMPTY_OBJECT);\n return logFn(msgObj);\n }\n\n if (keys.length > 1) {\n this.warn(ERROR.VAR.MULTIPLE_KEYS);\n return logFn(msgObj);\n }\n\n if (format === FORMAT.JSON) {\n const messageKey = keys[0];\n let messageVal = msgObj[messageKey];\n\n for (const pipeline of pipelines) {\n if (messageKey === pipeline.key) {\n messageVal = pipeline.filter(messageVal);\n }\n }\n messageVal = filterByType(messageVal);\n if (hasValueLimits(this.limits)) {\n messageVal = applyValueLimits(messageVal, this.limits);\n }\n\n const json: LogJson = {\n data: parse(messageVal),\n dataType: typeof messageVal,\n message: stringify(messageVal),\n var: messageKey,\n ...this.tags,\n };\n if (this.levelField) {\n json[this.levelField] = logLevel;\n }\n\n if (LEVEL_VALUES[logLevel] <= LEVEL_VALUES[checkLevel]) {\n let entry: LogJson = json;\n if (this.limits.maxEntryBytes !== undefined) {\n entry = enforceEntryLimit(json, {\n maxEntryBytes: this.limits.maxEntryBytes,\n syncMessageToData: true,\n }) as LogJson;\n }\n out(entry, { level: logLevel });\n }\n } else {\n return logFn(msgObj);\n }\n };\n\n return logFn as LogMethod;\n }\n\n /**\n * Update serialization limits at runtime. Pass a number to set a limit,\n * `false` to disable one; omitted keys are unchanged.\n */\n public config(options: SerializationLimitOptions = {}): void {\n this.limits = resolveSerializationLimits({\n maxDepth: options.maxDepth ?? this.limits.maxDepth ?? false,\n maxEntryBytes:\n options.maxEntryBytes ?? this.limits.maxEntryBytes ?? false,\n maxStringLength:\n options.maxStringLength ?? this.limits.maxStringLength ?? false,\n });\n this.options.maxDepth = this.limits.maxDepth ?? false;\n this.options.maxEntryBytes = this.limits.maxEntryBytes ?? false;\n this.options.maxStringLength = this.limits.maxStringLength ?? false;\n }\n\n public tag(key: unknown, value?: unknown): void {\n if (value) {\n this.tags[forceString(key)] = forceString(value);\n return;\n }\n\n if (Array.isArray(key)) {\n key.forEach((k) => {\n this.tags[forceString(k)] = \"\";\n });\n return;\n }\n\n if (key === null) {\n this.tags.null = \"\";\n return;\n }\n\n if (typeof key === \"object\") {\n Object.keys(key).forEach((k) => {\n this.tags[forceString(k)] = forceString(\n (key as Record<string, unknown>)[k],\n );\n });\n } else {\n this.tags[forceString(key)] = \"\";\n }\n }\n\n public untag(key: unknown): void {\n if (Array.isArray(key)) {\n key.forEach((k) => {\n delete this.tags[forceString(k)];\n });\n return;\n }\n\n if (key === null) {\n delete this.tags.null;\n return;\n }\n\n if (typeof key === \"object\") {\n Object.keys(key as object).forEach((k) => {\n delete this.tags[forceString(k)];\n });\n } else {\n delete this.tags[forceString(key)];\n }\n }\n\n public with(key: unknown, value?: unknown): Logger {\n const logger = new Logger(this.options);\n logger.tag(this.tags);\n logger.tag(key, value);\n return logger;\n }\n}\n\nexport default Logger;\n","export function logTags(\n withTags?: Record<string, string>,\n): Record<string, string> {\n if (withTags && typeof withTags !== \"object\") {\n withTags = {};\n }\n\n const {\n PROJECT_COMMIT,\n PROJECT_ENV,\n PROJECT_KEY,\n PROJECT_SERVICE,\n PROJECT_SPONSOR,\n PROJECT_VERSION,\n } = process.env;\n\n const tags: Record<string, string> = {};\n\n if (PROJECT_COMMIT) {\n tags.commit = PROJECT_COMMIT;\n }\n if (PROJECT_ENV) {\n tags.env = PROJECT_ENV;\n }\n if (PROJECT_KEY) {\n tags.project = PROJECT_KEY;\n }\n if (PROJECT_SERVICE) {\n tags.service = PROJECT_SERVICE;\n }\n if (PROJECT_SPONSOR) {\n tags.sponsor = PROJECT_SPONSOR;\n }\n if (process.env.npm_package_version || PROJECT_VERSION) {\n tags.version = (process.env.npm_package_version ||\n PROJECT_VERSION) as string;\n }\n\n return {\n ...tags,\n ...withTags,\n };\n}\n","import { forceString } from \"./utils\";\n\nexport function forceVar(\n key: unknown,\n value?: unknown,\n): Record<string, unknown> {\n if (typeof key === \"undefined\") {\n return {};\n }\n if (typeof key === \"object\" && key !== null) {\n if (Object.keys(key).length === 1) {\n return key as Record<string, unknown>;\n } else {\n return { value: key };\n }\n }\n const keyStr = forceString(key);\n if (typeof value === \"undefined\") {\n return { [keyStr]: \"\" };\n } else {\n return { [keyStr]: value };\n }\n}\n","import { forceVar } from \"./forceVar\";\nimport { filterByType, pipelines } from \"./pipelines\";\n\nfunction keyValueToArray(keyValue: Record<string, unknown>): [string, unknown] {\n const key = Object.keys(keyValue)[0];\n return [key, keyValue[key]];\n}\n\nexport function logVar(key: unknown, value?: unknown): Record<string, unknown> {\n let [k, v] = keyValueToArray(forceVar(key, value));\n\n for (const pipeline of pipelines) {\n if (k === pipeline.key) {\n v = pipeline.filter(v);\n }\n }\n v = filterByType(v);\n\n return { [k]: v };\n}\n","import Logger from \"./Logger\";\nimport { DEFAULT, FORMAT, LEVEL } from \"./constants\";\nimport { _resetDatadogTransport } from \"./datadogTransport\";\nimport { SerializationLimitOptions } from \"./limits\";\nimport { logTags } from \"./logTags\";\nimport { logVar } from \"./logVar\";\n\ninterface JaypieLoggerOptions extends SerializationLimitOptions {\n level?: string;\n tags?: Record<string, string>;\n}\n\nfunction envBoolean(\n key: string,\n { defaultValue }: { defaultValue: boolean },\n): boolean {\n const value = process.env[key];\n if (value === undefined) return defaultValue;\n const lower = value.toLowerCase();\n return !(\n lower === \"\" ||\n lower === \"0\" ||\n lower === \"f\" ||\n lower === \"false\" ||\n lower === \"n\" ||\n lower === \"no\"\n );\n}\n\nclass JaypieLogger {\n public debug: Logger[\"debug\"];\n public error: Logger[\"error\"];\n public fatal: Logger[\"fatal\"];\n public info: Logger[\"info\"];\n public level: string;\n public trace: Logger[\"trace\"];\n public var: Logger[\"var\"];\n public warn: Logger[\"warn\"];\n\n private _errorCount: number = 0;\n private _logger: Logger;\n private _loggers: Logger[];\n private _params: JaypieLoggerOptions;\n private _report: Record<string, unknown> = {};\n private _sessionActive: boolean = false;\n private _tags: Record<string, string>;\n private _warnCount: number = 0;\n private _withLoggers: Record<string, JaypieLogger>;\n\n constructor({\n level = process.env.LOG_LEVEL,\n maxDepth,\n maxEntryBytes,\n maxStringLength,\n tags = {},\n }: JaypieLoggerOptions = {}) {\n this._params = { level, maxDepth, maxEntryBytes, maxStringLength, tags };\n this._loggers = [];\n this._tags = {};\n this._withLoggers = {};\n\n this.level = level || DEFAULT.LEVEL;\n\n this._tags = { ...logTags(), ...tags };\n this._logger = new Logger({\n format: FORMAT.JSON,\n level: this.level,\n maxDepth,\n maxEntryBytes,\n maxStringLength,\n tags: this._tags,\n });\n this._loggers = [this._logger];\n\n this.debug = ((...args: any[]) =>\n this._logger.debug(...args)) as Logger[\"debug\"];\n this.debug.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.debug.var(messageObject, messageValue);\n\n this.error = ((...args: any[]) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.error(...args);\n }) as Logger[\"error\"];\n this.error.var = (messageObject: unknown, messageValue?: unknown) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.error.var(messageObject, messageValue);\n };\n\n this.fatal = ((...args: any[]) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.fatal(...args);\n }) as Logger[\"fatal\"];\n this.fatal.var = (messageObject: unknown, messageValue?: unknown) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.fatal.var(messageObject, messageValue);\n };\n\n this.info = ((...args: any[]) =>\n this._logger.info(...args)) as Logger[\"info\"];\n this.info.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.info.var(messageObject, messageValue);\n\n this.trace = ((...args: any[]) =>\n this._logger.trace(...args)) as Logger[\"trace\"];\n this.trace.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.trace.var(messageObject, messageValue);\n\n this.warn = ((...args: any[]) => {\n if (this._sessionActive) this._warnCount++;\n this._logger.warn(...args);\n }) as Logger[\"warn\"];\n this.warn.var = (messageObject: unknown, messageValue?: unknown) => {\n if (this._sessionActive) this._warnCount++;\n this._logger.warn.var(messageObject, messageValue);\n };\n\n this.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.var(logVar(messageObject, messageValue));\n }\n\n /**\n * Update serialization limits at runtime for this logger and all loggers\n * derived from it (lib, with, flag). Pass a number to set a limit,\n * `false` to disable one; omitted keys are unchanged. Persists across\n * init().\n */\n public config(options: SerializationLimitOptions = {}): void {\n if (options.maxDepth !== undefined) {\n this._params.maxDepth = options.maxDepth;\n }\n if (options.maxEntryBytes !== undefined) {\n this._params.maxEntryBytes = options.maxEntryBytes;\n }\n if (options.maxStringLength !== undefined) {\n this._params.maxStringLength = options.maxStringLength;\n }\n for (const logger of this._loggers) {\n logger.config(options);\n }\n for (const key of Object.keys(this._withLoggers)) {\n this._withLoggers[key].config(options);\n }\n }\n\n public flag(flag?: string): JaypieLogger {\n if (typeof flag !== \"string\" || flag === \"\") {\n return this;\n }\n return this.with({ flag });\n }\n\n public init(): void {\n _resetDatadogTransport();\n for (const logger of this._loggers) {\n if (\"init\" in logger && typeof logger.init === \"function\") {\n (logger as Logger & { init: () => void }).init();\n }\n }\n const level = this._params.level;\n const tags = this._params.tags;\n this.level = level || DEFAULT.LEVEL;\n this._tags = { ...logTags(), ...tags };\n this._logger = new Logger({\n format: FORMAT.JSON,\n level: this.level,\n maxDepth: this._params.maxDepth,\n maxEntryBytes: this._params.maxEntryBytes,\n maxStringLength: this._params.maxStringLength,\n tags: this._tags,\n });\n this._loggers = [this._logger];\n this._withLoggers = {};\n\n // Reset session state\n this._errorCount = 0;\n this._report = {};\n this._sessionActive = false;\n this._warnCount = 0;\n\n const levels = [\n \"debug\",\n \"error\",\n \"fatal\",\n \"info\",\n \"trace\",\n \"warn\",\n ] as const;\n levels.forEach((lvl) => {\n if (lvl === \"error\") {\n this.error = ((...args: any[]) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.error(...args);\n }) as any;\n this.error.var = (messageObject: unknown, messageValue?: unknown) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.error.var(messageObject, messageValue);\n };\n } else if (lvl === \"fatal\") {\n this.fatal = ((...args: any[]) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.fatal(...args);\n }) as any;\n this.fatal.var = (messageObject: unknown, messageValue?: unknown) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.fatal.var(messageObject, messageValue);\n };\n } else if (lvl === \"warn\") {\n this.warn = ((...args: any[]) => {\n if (this._sessionActive) this._warnCount++;\n this._logger.warn(...args);\n }) as any;\n this.warn.var = (messageObject: unknown, messageValue?: unknown) => {\n if (this._sessionActive) this._warnCount++;\n this._logger.warn.var(messageObject, messageValue);\n };\n } else {\n this[lvl] = ((...args: any[]) => {\n this._logger[lvl](...args);\n }) as any;\n this[lvl].var = (messageObject: unknown, messageValue?: unknown) => {\n this._logger[lvl].var(messageObject, messageValue);\n };\n }\n });\n }\n\n public lib({\n level,\n lib,\n tags = {},\n }: {\n level?: string;\n lib?: string;\n tags?: Record<string, string>;\n } = {}): JaypieLogger {\n const newTags = Object.assign({}, this._tags, tags);\n if (lib) {\n newTags.lib = lib;\n }\n\n const logger = new JaypieLogger({\n level: (() => {\n if (level) {\n return level;\n }\n if (process.env.MODULE_LOG_LEVEL) {\n return process.env.MODULE_LOG_LEVEL;\n }\n if (envBoolean(\"MODULE_LOGGER\", { defaultValue: false })) {\n return process.env.LOG_LEVEL;\n }\n return LEVEL.SILENT;\n })(),\n maxDepth: this._params.maxDepth,\n maxEntryBytes: this._params.maxEntryBytes,\n maxStringLength: this._params.maxStringLength,\n tags: newTags,\n });\n this._loggers.push(logger._logger);\n return logger;\n }\n\n public report(data: Record<string, unknown>): void {\n if (!this._sessionActive) {\n this.warn(\"[logger] report() called without active session\");\n return;\n }\n for (const key of Object.keys(data)) {\n if (key in this._report) {\n this.warn(`[logger] Overwriting report key: ${key}`);\n }\n }\n Object.assign(this._report, data);\n }\n\n public setup(tags?: Record<string, unknown>): void {\n if (this._sessionActive) {\n this.warn(\"[logger] setup() called while session already active\");\n }\n this._errorCount = 0;\n this._report = {};\n this._sessionActive = true;\n this._warnCount = 0;\n if (tags) {\n this.tag(tags);\n }\n }\n\n public tag(tags: Record<string, unknown>): void {\n for (const logger of this._loggers) {\n logger.tag(tags);\n }\n Object.assign(this._tags, tags);\n }\n\n public teardown(): void {\n if (!this._sessionActive) {\n return;\n }\n const finalReport = {\n ...this._report,\n log: {\n error: this._errorCount > 0,\n errors: this._errorCount,\n warn: this._warnCount > 0,\n warns: this._warnCount,\n },\n };\n this.info.var({ report: finalReport });\n this._errorCount = 0;\n this._report = {};\n this._sessionActive = false;\n this._warnCount = 0;\n }\n\n public untag(key: unknown): void {\n for (const logger of this._loggers) {\n logger.untag(key);\n }\n if (Array.isArray(key)) {\n key.forEach((k) => {\n delete this._tags[String(k)];\n });\n } else if (typeof key === \"object\" && key !== null) {\n Object.keys(key).forEach((k) => {\n delete this._tags[k];\n });\n } else {\n delete this._tags[String(key)];\n }\n }\n\n public with(key: unknown, value?: unknown): JaypieLogger {\n if (!key || (typeof key !== \"object\" && value === undefined)) {\n throw new Error(\n \"ConfigurationError: with() requires an object argument or key-value pair\",\n );\n }\n const loggerKey = JSON.stringify([key, value]);\n if (Object.keys(this._withLoggers).includes(loggerKey)) {\n return this._withLoggers[loggerKey];\n }\n const logger = new JaypieLogger({\n level: this.level,\n maxDepth: this._params.maxDepth,\n maxEntryBytes: this._params.maxEntryBytes,\n maxStringLength: this._params.maxStringLength,\n tags: { ...this._tags },\n });\n logger._logger = this._logger.with(key, value);\n logger._loggers = [logger._logger];\n this._withLoggers[loggerKey] = logger;\n this._loggers.push(logger._logger);\n return logger;\n }\n}\n\nexport function createLogger(tags: Record<string, string> = {}): JaypieLogger {\n const jaypieLogger = new JaypieLogger({\n tags,\n });\n return jaypieLogger;\n}\n\nexport default JaypieLogger;\n","import Logger from \"./Logger\";\nimport { createLogger } from \"./JaypieLogger\";\nimport { FORMAT, LEVEL } from \"./constants\";\nimport {\n _resetDatadogTransport,\n getDatadogTransport,\n isDatadogForwardingEnabled,\n} from \"./datadogTransport\";\nimport { redactAuth, sanitizeAuth } from \"./sanitizeAuth\";\n\nexport {\n FORMAT,\n LEVEL,\n Logger,\n _resetDatadogTransport,\n createLogger,\n getDatadogTransport,\n isDatadogForwardingEnabled,\n redactAuth,\n sanitizeAuth,\n};\nexport type { SerializationLimitOptions, SerializationLimits } from \"./limits\";\n\nexport const log = createLogger();\n\nexport default log;\n"],"names":["createHash","envBoolean","hostname","request"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../src/constants.ts","../../../../src/limits.ts","../../../../src/pipelines.ts","../../../../src/sanitizeAuth.ts","../../../../src/datadogTransport.ts","../../../../src/utils.ts","../../../../src/Logger.ts","../../../../src/logTags.ts","../../../../src/forceVar.ts","../../../../src/logVar.ts","../../../../src/JaypieLogger.ts","../../../../src/index.ts"],"sourcesContent":["export const DEFAULT = {\n LEVEL: \"debug\",\n // CloudWatch Logs caps events at 256KB and fronts Datadog in Lambda;\n // Datadog's own per-log cap is 1MB. Truncate deliberately below both.\n MAX_ENTRY_BYTES: 262144,\n VAR_LEVEL: \"debug\",\n};\n\nexport const LIMIT_ENV = {\n MAX_DEPTH: \"LOG_MAX_DEPTH\",\n MAX_ENTRY_BYTES: \"LOG_MAX_ENTRY_BYTES\",\n MAX_STRING: \"LOG_MAX_STRING\",\n} as const;\n\nexport const ERROR_PREFIX = \"[logger]\";\n\nexport const ERROR = {\n VAR: {\n EMPTY_OBJECT: `${ERROR_PREFIX} Logger.var() called with empty object`,\n MULTIPLE_KEYS: `${ERROR_PREFIX} Logger.var() called with multiple keys`,\n NULL_OBJECT: `${ERROR_PREFIX} Logger.var() called with null`,\n UNDEFINED_MESSAGE: `${ERROR_PREFIX} Logger.var() called with \\`undefined\\` message`,\n },\n};\n\nexport const FORMAT = {\n JSON: \"json\",\n TEXT: \"text\",\n} as const;\n\nexport const LEVEL = {\n ALL: \"all\",\n DEBUG: \"debug\",\n ERROR: \"error\",\n FATAL: \"fatal\",\n INFO: \"info\",\n SILENT: \"silent\",\n TRACE: \"trace\",\n WARN: \"warn\",\n} as const;\n\nexport const LEVEL_VALUES: Record<string, number> = {\n all: 100,\n debug: 70,\n error: 10,\n fatal: 1,\n info: 50,\n none: 0,\n silent: 0,\n trace: 90,\n warn: 30,\n};\n\nexport const DATADOG_TRANSPORT = {\n ENV: {\n API_KEY: \"DATADOG_API_KEY\",\n DD_ENV: \"DD_ENV\",\n DD_HOST: \"DD_HOST\",\n DD_SERVICE: \"DD_SERVICE\",\n DD_SITE: \"DD_SITE\",\n DD_SOURCE: \"DD_SOURCE\",\n FORWARDING: \"DATADOG_LOCAL_FORWARDING\",\n PROJECT_ENV: \"PROJECT_ENV\",\n PROJECT_HOST: \"PROJECT_HOST\",\n PROJECT_SERVICE: \"PROJECT_SERVICE\",\n PROJECT_SOURCE: \"PROJECT_SOURCE\",\n },\n FLUSH_INTERVAL_MS: 5000,\n INTAKE_PATH: \"/api/v2/logs\",\n MAX_BATCH_SIZE: 100,\n} as const;\n\nexport const PSEUDO_LEVELS = [\"ALL\", \"SILENT\"];\n","import { DEFAULT, LIMIT_ENV } from \"./constants\";\n\n//\n//\n// Types\n//\n\n/**\n * Caller-facing limit options. `false` explicitly disables a limit;\n * `undefined` resolves from env vars, then defaults.\n */\nexport interface SerializationLimitOptions {\n maxDepth?: number | false;\n maxEntryBytes?: number | false;\n maxStringLength?: number | false;\n}\n\n/**\n * Resolved limits. `undefined` means the limit is off.\n */\nexport interface SerializationLimits {\n maxDepth?: number;\n maxEntryBytes?: number;\n maxStringLength?: number;\n}\n\n//\n//\n// Constants\n//\n\nconst CIRCULAR_PLACEHOLDER = \"[Circular]\";\nconst DISABLED_ENV_VALUES = [\"\", \"0\", \"false\", \"none\", \"off\"];\nconst ELLIPSIS = \"…\";\n// Reserve headroom for the truncation marker when fitting a string to a\n// byte budget\nconst MARKER_RESERVE_BYTES = 64;\n\n/** Characters preserved when an oversized entry truncates an attribute */\nexport const ENTRY_PREVIEW_LENGTH = 72;\n\n//\n//\n// Helpers\n//\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\nfunction normalizeLimit(option: number | false): number | undefined {\n if (option === false) return undefined;\n if (typeof option === \"number\" && Number.isFinite(option) && option > 0) {\n return Math.floor(option);\n }\n return undefined;\n}\n\nfunction resolveLimit(\n option: number | false | undefined,\n envKey: string,\n defaultValue?: number,\n): number | undefined {\n if (option !== undefined) {\n return normalizeLimit(option);\n }\n const raw = process.env[envKey];\n if (raw !== undefined) {\n if (DISABLED_ENV_VALUES.includes(raw.toLowerCase())) return undefined;\n const parsed = Number.parseInt(raw, 10);\n if (Number.isFinite(parsed) && parsed > 0) return parsed;\n }\n return defaultValue;\n}\n\nfunction truncationMarker(droppedChars: number): string {\n return `${ELLIPSIS} [truncated ${droppedChars.toLocaleString(\"en-US\")} chars]`;\n}\n\n//\n//\n// Main\n//\n\n/**\n * Resolve limits from explicit options, env vars, then defaults.\n * `maxEntryBytes` defaults on (payloads must fit the log pipeline);\n * `maxDepth` and `maxStringLength` default off.\n */\nexport function resolveSerializationLimits(\n options: SerializationLimitOptions = {},\n): SerializationLimits {\n return {\n maxDepth: resolveLimit(options.maxDepth, LIMIT_ENV.MAX_DEPTH),\n maxEntryBytes: resolveLimit(\n options.maxEntryBytes,\n LIMIT_ENV.MAX_ENTRY_BYTES,\n DEFAULT.MAX_ENTRY_BYTES,\n ),\n maxStringLength: resolveLimit(\n options.maxStringLength,\n LIMIT_ENV.MAX_STRING,\n ),\n };\n}\n\nexport function hasValueLimits(limits: SerializationLimits): boolean {\n return limits.maxDepth !== undefined || limits.maxStringLength !== undefined;\n}\n\nexport function byteLength(value: unknown): number {\n try {\n const str = typeof value === \"string\" ? value : JSON.stringify(value);\n return Buffer.byteLength(str ?? \"\", \"utf8\");\n } catch {\n return 0;\n }\n}\n\n/**\n * Keep the first `maxLength` characters and append a visible marker\n * preserving the dropped size\n */\nexport function truncateString(value: string, maxLength: number): string {\n if (value.length <= maxLength) return value;\n return value.slice(0, maxLength) + truncationMarker(value.length - maxLength);\n}\n\n/**\n * Fit a string to a byte budget, reserving room for the marker and\n * never cutting below the preview length\n */\nexport function truncateToBudget(value: string, budgetBytes: number): string {\n if (Buffer.byteLength(value, \"utf8\") <= budgetBytes) return value;\n const maxLength = Math.max(\n ENTRY_PREVIEW_LENGTH,\n budgetBytes - MARKER_RESERVE_BYTES,\n );\n return truncateString(value, maxLength);\n}\n\n/**\n * Walk a value applying maxStringLength and maxDepth. Returns a new value;\n * never mutates the input. Only plain objects and arrays are traversed so\n * class instances (Error, Date, ...) keep their serialization behavior.\n */\nexport function applyValueLimits(\n value: unknown,\n limits: SerializationLimits,\n depth = 0,\n seen: WeakSet<object> = new WeakSet(),\n): unknown {\n const { maxDepth, maxStringLength } = limits;\n if (typeof value === \"string\") {\n return maxStringLength !== undefined\n ? truncateString(value, maxStringLength)\n : value;\n }\n if (Array.isArray(value)) {\n if (seen.has(value)) return CIRCULAR_PLACEHOLDER;\n if (maxDepth !== undefined && depth > maxDepth) {\n return `[Array(${value.length})]`;\n }\n seen.add(value);\n const result = value.map((item) =>\n applyValueLimits(item, limits, depth + 1, seen),\n );\n seen.delete(value);\n return result;\n }\n if (isPlainObject(value)) {\n if (seen.has(value)) return CIRCULAR_PLACEHOLDER;\n if (maxDepth !== undefined && depth > maxDepth) {\n return \"[Object]\";\n }\n seen.add(value);\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(value)) {\n result[key] = applyValueLimits(value[key], limits, depth + 1, seen);\n }\n seen.delete(value);\n return result;\n }\n return value;\n}\n\nfunction truncateToPreview(value: unknown): unknown {\n const str =\n typeof value === \"string\"\n ? value\n : (JSON.stringify(value) ?? String(value));\n if (str.length <= ENTRY_PREVIEW_LENGTH) return value;\n return truncateString(str, ENTRY_PREVIEW_LENGTH);\n}\n\n/**\n * Fit a serialized log entry under maxEntryBytes. Truncates the top-level\n * attributes of `data` largest-first to short previews until the entry fits,\n * collapsing `data` to a byte-count marker only as a last resort. When\n * `syncMessageToData` is set (var entries and single-object messages, where\n * `message` mirrors `data`), the message is rebuilt from the truncated data.\n * Returns a new entry; never mutates the input.\n */\nexport function enforceEntryLimit(\n entry: Record<string, unknown>,\n {\n maxEntryBytes,\n syncMessageToData = false,\n }: { maxEntryBytes: number; syncMessageToData?: boolean },\n): Record<string, unknown> {\n const originalBytes = byteLength(entry);\n if (originalBytes <= maxEntryBytes) return entry;\n\n const result = { ...entry };\n const sync = () => {\n if (syncMessageToData) {\n result.message =\n typeof result.data === \"string\"\n ? result.data\n : (JSON.stringify(result.data) ?? String(result.data));\n }\n };\n\n const data = result.data;\n if (typeof data === \"string\") {\n result.data = truncateToPreview(data);\n sync();\n } else if (Array.isArray(data) || isPlainObject(data)) {\n const container: Record<string, unknown> = Array.isArray(data)\n ? ([...data] as unknown as Record<string, unknown>)\n : { ...data };\n result.data = container;\n const keys = Object.keys(container).sort(\n (a, b) => byteLength(container[b]) - byteLength(container[a]),\n );\n for (const key of keys) {\n container[key] = truncateToPreview(container[key]);\n sync();\n if (byteLength(result) <= maxEntryBytes) return result;\n }\n } else if (typeof result.message === \"string\") {\n // No structured data: the message itself is oversized\n const overhead = originalBytes - byteLength(result.message);\n result.message = truncateToBudget(\n result.message,\n Math.max(ENTRY_PREVIEW_LENGTH, maxEntryBytes - overhead),\n );\n }\n\n if (byteLength(result) <= maxEntryBytes) return result;\n\n // Last resort: entry is still oversized after attribute-level truncation\n const marker = `[truncated ${originalBytes.toLocaleString(\"en-US\")} bytes]`;\n if (\"data\" in result) {\n result.data = marker;\n if (syncMessageToData) result.message = marker;\n } else if (typeof result.message === \"string\") {\n result.message = marker;\n }\n return result;\n}\n","interface Pipeline {\n key: string;\n filter: (value: unknown) => unknown;\n}\n\n//\n// Key-based pipelines (match on var key name)\n//\n\nfunction isAxiosResponse(response: unknown): boolean {\n if (typeof response !== \"object\" || response === null) {\n return false;\n }\n const r = response as Record<string, unknown>;\n return !!(\n r &&\n r.config &&\n r.data &&\n r.headers &&\n r.request &&\n r.status &&\n r.statusText\n );\n}\n\nfunction filterAxiosResponse(response: unknown): unknown {\n if (!isAxiosResponse(response)) {\n return response;\n }\n const r = response as Record<string, unknown>;\n const newResponse: Record<string, unknown> = {\n data: r.data,\n headers: r.headers,\n status: r.status,\n statusText: r.statusText,\n };\n if (r.isAxiosError) {\n newResponse.isAxiosError = r.isAxiosError;\n }\n return newResponse;\n}\n\nexport const axiosResponseVarPipeline: Pipeline = {\n filter: filterAxiosResponse,\n key: \"response\",\n};\n\nexport const pipelines = [axiosResponseVarPipeline];\n\n//\n// Type-based filters (run on any key, match on value shape)\n//\n\ninterface TypeFilter {\n detect: (value: unknown) => boolean;\n filter: (value: unknown) => unknown;\n}\n\n// Fetch Response\n\nfunction isFetchResponse(value: unknown): boolean {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n const r = value as Record<string, unknown>;\n return !!(\n typeof r.ok === \"boolean\" &&\n typeof r.status === \"number\" &&\n typeof r.statusText === \"string\" &&\n \"headers\" in r &&\n \"body\" in r &&\n typeof r.url === \"string\" &&\n !(\"config\" in r) &&\n !(\"request\" in r)\n );\n}\n\nfunction headersToObject(headers: unknown): Record<string, string> | unknown {\n if (\n headers &&\n typeof headers === \"object\" &&\n typeof (headers as Record<string, unknown>).entries === \"function\"\n ) {\n const result: Record<string, string> = {};\n for (const [key, value] of (headers as Headers).entries()) {\n result[key] = value;\n }\n return result;\n }\n return headers;\n}\n\nfunction filterFetchResponse(value: unknown): unknown {\n const r = value as Record<string, unknown>;\n return {\n headers: headersToObject(r.headers),\n ok: r.ok,\n redirected: r.redirected,\n status: r.status,\n statusText: r.statusText,\n type: r.type,\n url: r.url,\n };\n}\n\n// Error\n\nfunction isError(value: unknown): boolean {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n if (value instanceof Error) {\n return true;\n }\n const i = value as Record<string, unknown>;\n if (i.isProjectError) {\n return true;\n }\n return false;\n}\n\nfunction filterError(value: unknown): unknown {\n const e = value as Error & Record<string, unknown>;\n const newItem: Record<string, unknown> = {\n message: e.message,\n name: e.name,\n };\n if (e.cause) {\n newItem.cause = e.cause;\n }\n if (e.stack) {\n newItem.stack = e.stack;\n }\n if (e.isProjectError) {\n newItem.isProjectError = e.isProjectError;\n newItem.title = e.title;\n newItem.detail = e.detail;\n newItem.status = e.status;\n }\n return newItem;\n}\n\n// Type filter registry (order matters — first match wins)\n\nconst typeFilters: TypeFilter[] = [\n { detect: isFetchResponse, filter: filterFetchResponse },\n { detect: isError, filter: filterError },\n];\n\n//\n// Opaque object detection and generic extraction\n//\n\nfunction isOpaqueObject(value: unknown): boolean {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n // Plain objects are fine\n if (value.constructor === Object || value.constructor === undefined) {\n return false;\n }\n // If JSON.stringify produces \"{}\" the object has no own enumerable properties\n // and will log as useless \"[object Type]\"\n try {\n const json = JSON.stringify(value);\n return json === \"{}\" || json === \"[]\";\n } catch {\n return true;\n }\n}\n\nfunction extractOpaqueObject(value: unknown): Record<string, unknown> {\n const obj = value as object;\n const result: Record<string, unknown> = {};\n\n const ctorName = obj.constructor?.name;\n if (ctorName && ctorName !== \"Object\") {\n result._type = ctorName;\n }\n\n // If the object itself is map-like (Headers, URLSearchParams, FormData, etc.),\n // convert its entries directly\n const mapLike = obj as Record<string, unknown>;\n if (\n typeof mapLike.entries === \"function\" &&\n typeof mapLike.forEach === \"function\"\n ) {\n try {\n const entries = Object.fromEntries(\n (mapLike as { entries: () => Iterable<[string, unknown]> }).entries(),\n );\n return { ...result, ...entries };\n } catch {\n // Fall through to generic extraction\n }\n }\n\n // Collect readable non-function properties from the prototype chain\n let proto: object | null = obj;\n while (proto && proto !== Object.prototype) {\n for (const key of Object.getOwnPropertyNames(proto)) {\n if (key === \"constructor\" || key in result) {\n continue;\n }\n try {\n const desc = Object.getOwnPropertyDescriptor(proto, key);\n if (!desc) continue;\n // Read getters and value properties from the original object\n const val = (obj as Record<string, unknown>)[key];\n if (typeof val === \"function\" || typeof val === \"symbol\") {\n continue;\n }\n // Skip streams and other non-serializable objects\n if (\n val &&\n typeof val === \"object\" &&\n typeof (val as Record<string, unknown>).pipe === \"function\"\n ) {\n continue;\n }\n // Convert iterable map-like objects (Headers, URLSearchParams, etc.)\n if (\n val &&\n typeof val === \"object\" &&\n typeof (val as Record<string, unknown>).entries === \"function\" &&\n typeof (val as Record<string, unknown>).forEach === \"function\"\n ) {\n result[key] = Object.fromEntries(\n (val as { entries: () => Iterable<[string, unknown]> }).entries(),\n );\n continue;\n }\n result[key] = val;\n } catch {\n // Property threw on access — skip\n }\n }\n proto = Object.getPrototypeOf(proto);\n }\n\n return result;\n}\n\n//\n// Public API\n//\n\n/**\n * Filter a value by type, regardless of var key name.\n * Tries known type filters first, then falls back to generic\n * opaque object extraction for anything that would log as [object Type].\n */\nexport function filterByType(value: unknown): unknown {\n // Try known type filters\n for (const tf of typeFilters) {\n if (tf.detect(value)) {\n return tf.filter(value);\n }\n }\n // Generic fallback for opaque objects\n if (isOpaqueObject(value)) {\n return extractOpaqueObject(value);\n }\n return value;\n}\n\n// Legacy exports for key-based pipeline (axios only now)\nexport const errorVarPipeline: Pipeline = {\n filter: (item: unknown) => {\n if (!isError(item)) return item;\n return filterError(item);\n },\n key: \"error\",\n};\n","import { createHash } from \"node:crypto\";\n\n//\n//\n// Helper\n//\n\nexport function redactAuth(value: unknown): string {\n const str = String(value);\n if (/sk\\S+/.test(str)) {\n return `sk_${str.slice(-4)}`;\n }\n const hash = createHash(\"md5\").update(str).digest(\"hex\");\n return `md5_${hash.slice(-4)}`;\n}\n\n//\n//\n// Main\n//\n\nconst REDACTED_KEYS = new Set([\n \"authorization\",\n \"x-service-key\",\n \"x-webhook-token\",\n]);\n\nexport function sanitizeAuth(value: unknown): unknown {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return value;\n }\n\n const obj = value as Record<string, unknown>;\n let clone: Record<string, unknown> | undefined;\n\n for (const key of Object.keys(obj)) {\n const lower = key.toLowerCase();\n\n if (REDACTED_KEYS.has(lower)) {\n if (!clone) clone = { ...obj };\n clone[key] = redactAuth(obj[key]);\n } else if (lower === \"headers\") {\n const headers = obj[key];\n if (\n typeof headers === \"object\" &&\n headers !== null &&\n !Array.isArray(headers)\n ) {\n const hdrs = headers as Record<string, unknown>;\n let clonedHeaders: Record<string, unknown> | undefined;\n for (const hKey of Object.keys(hdrs)) {\n if (REDACTED_KEYS.has(hKey.toLowerCase())) {\n if (!clonedHeaders) clonedHeaders = { ...hdrs };\n clonedHeaders[hKey] = redactAuth(hdrs[hKey]);\n }\n }\n if (clonedHeaders) {\n if (!clone) clone = { ...obj };\n clone[key] = clonedHeaders;\n }\n }\n }\n }\n\n return clone ?? value;\n}\n","import { hostname } from \"node:os\";\nimport { request } from \"node:https\";\n\nimport { DATADOG_TRANSPORT, LEVEL } from \"./constants\";\n\n// Level-to-Datadog status mapping\nconst LEVEL_TO_STATUS: Record<string, string> = {\n [LEVEL.TRACE]: \"debug\",\n [LEVEL.DEBUG]: \"debug\",\n [LEVEL.INFO]: \"info\",\n [LEVEL.WARN]: \"warn\",\n [LEVEL.ERROR]: \"error\",\n [LEVEL.FATAL]: \"critical\",\n};\n\nfunction envBoolean(\n key: string,\n { defaultValue }: { defaultValue: boolean },\n): boolean {\n const value = process.env[key];\n if (value === undefined) return defaultValue;\n const lower = value.toLowerCase();\n return !(\n lower === \"\" ||\n lower === \"0\" ||\n lower === \"f\" ||\n lower === \"false\" ||\n lower === \"n\" ||\n lower === \"no\"\n );\n}\n\nexport function isDatadogForwardingEnabled(): boolean {\n return (\n envBoolean(DATADOG_TRANSPORT.ENV.FORWARDING, { defaultValue: false }) &&\n !!process.env[DATADOG_TRANSPORT.ENV.API_KEY]\n );\n}\n\ninterface DatadogLogEntry {\n ddsource: string;\n ddtags: string;\n hostname: string;\n message: string;\n service: string;\n status: string;\n [key: string]: unknown;\n}\n\nclass DatadogLogTransport {\n private _beforeExitHandler: (() => void) | null = null;\n private _buffer: DatadogLogEntry[] = [];\n private _flushTimer: ReturnType<typeof setInterval> | null = null;\n private _ddsource: string;\n private _env: string;\n private _hostname: string;\n private _service: string;\n private _site: string;\n\n constructor() {\n const env = process.env;\n this._ddsource =\n env[DATADOG_TRANSPORT.ENV.DD_SOURCE] ||\n env[DATADOG_TRANSPORT.ENV.PROJECT_SOURCE] ||\n \"nodejs\";\n this._env =\n env[DATADOG_TRANSPORT.ENV.DD_ENV] ||\n env[DATADOG_TRANSPORT.ENV.PROJECT_ENV] ||\n \"local\";\n this._hostname =\n env[DATADOG_TRANSPORT.ENV.DD_HOST] ||\n env[DATADOG_TRANSPORT.ENV.PROJECT_HOST] ||\n hostname();\n this._service =\n env[DATADOG_TRANSPORT.ENV.DD_SERVICE] ||\n env[DATADOG_TRANSPORT.ENV.PROJECT_SERVICE] ||\n \"unknown\";\n this._site = env[DATADOG_TRANSPORT.ENV.DD_SITE] || \"datadoghq.com\";\n\n this._flushTimer = setInterval(() => {\n this.flush();\n }, DATADOG_TRANSPORT.FLUSH_INTERVAL_MS);\n // Unref so timer doesn't keep process alive\n if (this._flushTimer && typeof this._flushTimer.unref === \"function\") {\n this._flushTimer.unref();\n }\n\n // Best-effort flush on exit\n this._beforeExitHandler = () => this.flush();\n process.on(\"beforeExit\", this._beforeExitHandler);\n }\n\n send(line: string, level: string): void {\n let message: string = line;\n let extra: Record<string, unknown> = {};\n if (typeof line === \"string\") {\n try {\n const parsed = JSON.parse(line);\n if (parsed && typeof parsed === \"object\") {\n if (parsed.message) {\n message = parsed.message;\n extra = { ...parsed };\n delete extra.message;\n delete extra.status;\n }\n }\n } catch {\n // Not JSON — use line as-is\n }\n }\n const entry: DatadogLogEntry = {\n ddsource: this._ddsource,\n ddtags: `env:${this._env}`,\n hostname: this._hostname,\n message,\n service: this._service,\n status: LEVEL_TO_STATUS[level] || \"info\",\n ...extra,\n };\n this._buffer.push(entry);\n if (this._buffer.length >= DATADOG_TRANSPORT.MAX_BATCH_SIZE) {\n this.flush();\n }\n }\n\n flush(): void {\n if (this._buffer.length === 0) return;\n\n // Atomic swap\n const batch = this._buffer;\n this._buffer = [];\n\n const apiKey = process.env[DATADOG_TRANSPORT.ENV.API_KEY];\n if (!apiKey) return;\n\n const body = JSON.stringify(batch);\n const options = {\n headers: {\n \"Content-Type\": \"application/json\",\n \"DD-API-KEY\": apiKey,\n },\n hostname: `http-intake.logs.${this._site}`,\n method: \"POST\",\n path: DATADOG_TRANSPORT.INTAKE_PATH,\n };\n\n try {\n const req = request(options, () => {\n // Response intentionally ignored\n });\n req.on(\"error\", () => {\n // Silently swallow transport errors\n });\n req.write(body);\n req.end();\n } catch {\n // Transport must never throw\n }\n }\n\n destroy(): void {\n if (this._flushTimer) {\n clearInterval(this._flushTimer);\n this._flushTimer = null;\n }\n if (this._beforeExitHandler) {\n process.removeListener(\"beforeExit\", this._beforeExitHandler);\n this._beforeExitHandler = null;\n }\n try {\n this.flush();\n } catch {\n // Best-effort\n }\n }\n}\n\nlet _instance: DatadogLogTransport | null = null;\n\nexport function getDatadogTransport(): DatadogLogTransport | null {\n if (!isDatadogForwardingEnabled()) return null;\n if (!_instance) {\n _instance = new DatadogLogTransport();\n }\n return _instance;\n}\n\nexport function _resetDatadogTransport(): void {\n if (_instance) {\n _instance.destroy();\n _instance = null;\n }\n}\n","import { LEVEL } from \"./constants\";\nimport { getDatadogTransport } from \"./datadogTransport\";\n\nexport function forceString(value: unknown, defaultValue = \"\"): string {\n if (value === null) return \"null\";\n if (value === undefined) return String(defaultValue);\n if (typeof value === \"object\") return JSON.stringify(value);\n return String(value);\n}\n\nexport function formatAsJsonString(subject: unknown): string {\n const SPACES = 0;\n const UNUSED_PARAM = null;\n\n switch (typeof subject) {\n case \"string\":\n if (subject === \"\") return `\"\"`;\n try {\n return JSON.stringify(JSON.parse(subject), UNUSED_PARAM, SPACES);\n } catch {\n return subject;\n }\n\n case \"object\":\n try {\n if (\n subject &&\n subject instanceof Object &&\n !Array.isArray(subject) &&\n subject.constructor &&\n subject.constructor !== Object &&\n \"toString\" in subject &&\n typeof subject.toString === \"function\"\n ) {\n return subject.toString();\n }\n return JSON.stringify(subject, UNUSED_PARAM, SPACES);\n } catch (error) {\n if (error instanceof TypeError) {\n const truncatedSubject = Object.keys(subject as object).reduce(\n (newSubject: Record<string, string>, key: string) => {\n const nextSubject = { ...newSubject };\n nextSubject[key] = String(\n (subject as Record<string, unknown>)[key],\n );\n return nextSubject;\n },\n {},\n );\n return formatAsJsonString(truncatedSubject);\n }\n throw error;\n }\n\n default:\n return String(subject);\n }\n}\n\nexport function stringify(...params: unknown[]): string {\n if (params.length === 0) return \"\";\n if (params.length === 1) {\n return formatAsJsonString(params[0]);\n }\n\n const formatted = params.map(formatAsJsonString);\n return formatted.join(\" \");\n}\n\n/* eslint-disable no-console -- console is the logger's output device */\nexport function out(\n line: string | unknown,\n { level = \"debug\" }: { level?: string } = {},\n): void {\n let lineStr: string;\n if (typeof line !== \"string\") {\n lineStr = stringify(line);\n } else {\n lineStr = line;\n }\n\n let outputFunction: (...args: unknown[]) => void;\n\n switch (level) {\n case LEVEL.INFO:\n outputFunction = console.info;\n break;\n case LEVEL.WARN:\n outputFunction = console.warn;\n break;\n case LEVEL.ERROR:\n case LEVEL.FATAL:\n outputFunction = console.error;\n break;\n case LEVEL.TRACE:\n case LEVEL.DEBUG:\n outputFunction = console.debug;\n break;\n default:\n outputFunction = console.log;\n break;\n }\n\n try {\n outputFunction(lineStr);\n } catch (error) {\n console.warn(error);\n console.log(lineStr);\n }\n\n try {\n const transport = getDatadogTransport();\n if (transport) {\n transport.send(lineStr, level);\n }\n } catch {\n // Transport errors must never affect logging\n }\n}\n/* eslint-enable no-console */\n\nexport function parse(message: unknown): unknown {\n if (typeof message !== \"string\") {\n return message;\n }\n try {\n return JSON.parse(message);\n } catch {\n return message;\n }\n}\n\nexport function parsesTo(message: unknown): {\n parses: boolean;\n message: unknown;\n} {\n if (typeof message !== \"string\") {\n return {\n parses: false,\n message,\n };\n }\n try {\n return {\n parses: true,\n message: JSON.parse(message),\n };\n } catch {\n return {\n parses: false,\n message,\n };\n }\n}\n","import { DEFAULT, ERROR, FORMAT, LEVEL, LEVEL_VALUES } from \"./constants\";\nimport {\n applyValueLimits,\n enforceEntryLimit,\n hasValueLimits,\n resolveSerializationLimits,\n SerializationLimitOptions,\n SerializationLimits,\n truncateToBudget,\n} from \"./limits\";\nimport { filterByType, pipelines } from \"./pipelines\";\nimport { sanitizeAuth } from \"./sanitizeAuth\";\nimport { forceString, out, parse, parsesTo, stringify } from \"./utils\";\n\ntype LogLevel = string;\ntype LogFormat = \"json\" | \"text\";\ntype Tags = Record<string, string>;\n\ninterface LoggerOptions extends SerializationLimitOptions {\n format?: LogFormat;\n level?: LogLevel;\n levelField?: boolean | string;\n tags?: Tags;\n varLevel?: LogLevel;\n}\n\ninterface LogJson {\n data?: unknown;\n dataType?: string;\n message: string;\n var?: string;\n [key: string]: unknown;\n}\n\ntype LogMethod = {\n (...messages: unknown[]): void;\n var: (messageObject: unknown, messageValue?: unknown) => void;\n};\n\nfunction resolveLevelField(value?: boolean | string): false | string {\n if (value === undefined) {\n const env = process.env.LOG_LEVEL_FIELD;\n if (env === undefined || env === \"\") return false;\n if (env === \"false\" || env === \"0\" || env === \"no\") return false;\n if (env === \"true\" || env === \"1\" || env === \"yes\") return \"level\";\n return env;\n }\n if (value === false) return false;\n if (value === true) return \"level\";\n return value;\n}\n\nclass Logger {\n public debug: LogMethod;\n public error: LogMethod;\n public fatal: LogMethod;\n public info: LogMethod;\n public options: LoggerOptions;\n public tags: Tags;\n public trace: LogMethod;\n public var: (messageObject: unknown, messageValue?: unknown) => void;\n public warn: LogMethod;\n private levelField: false | string;\n private limits: SerializationLimits;\n\n constructor({\n format = (process.env.LOG_FORMAT as LogFormat) || DEFAULT.LEVEL,\n level = process.env.LOG_LEVEL || DEFAULT.LEVEL,\n levelField,\n maxDepth,\n maxEntryBytes,\n maxStringLength,\n tags = {},\n varLevel = process.env.LOG_VAR_LEVEL || DEFAULT.VAR_LEVEL,\n }: LoggerOptions = {}) {\n this.levelField = resolveLevelField(levelField);\n this.limits = resolveSerializationLimits({\n maxDepth,\n maxEntryBytes,\n maxStringLength,\n });\n this.options = {\n format,\n level,\n levelField: this.levelField || undefined,\n // Pin resolved limits (false = explicitly off) so child loggers\n // created via with() inherit this config instead of re-resolving\n maxDepth: this.limits.maxDepth ?? false,\n maxEntryBytes: this.limits.maxEntryBytes ?? false,\n maxStringLength: this.limits.maxStringLength ?? false,\n varLevel,\n };\n\n this.tags = {};\n Object.keys(tags).forEach((key) => {\n this.tags[key] = forceString(tags[key]);\n });\n\n this.debug = this.createLogMethod(LEVEL.DEBUG, format, level);\n this.error = this.createLogMethod(LEVEL.ERROR, format, level);\n this.fatal = this.createLogMethod(LEVEL.FATAL, format, level);\n this.info = this.createLogMethod(LEVEL.INFO, format, level);\n this.trace = this.createLogMethod(LEVEL.TRACE, format, level);\n this.warn = this.createLogMethod(LEVEL.WARN, format, level);\n\n const varLevelMethod =\n this[varLevel as \"debug\" | \"error\" | \"fatal\" | \"info\" | \"trace\" | \"warn\"];\n this.var = (varLevelMethod as LogMethod)?.var || this.debug.var;\n }\n\n private createLogMethod(\n logLevel: string,\n format: LogFormat,\n checkLevel: string,\n ): LogMethod {\n const logFn = (...messages: unknown[]): void => {\n if (LEVEL_VALUES[logLevel] <= LEVEL_VALUES[checkLevel]) {\n let sanitized = messages.map(sanitizeAuth);\n if (hasValueLimits(this.limits)) {\n sanitized = sanitized.map((item) =>\n applyValueLimits(item, this.limits),\n );\n }\n if (format === FORMAT.JSON) {\n let message = stringify(...sanitized);\n let parses = parsesTo(message);\n // When data comes from the full message they mirror each other;\n // entry-limit truncation must keep them in sync\n let syncMessageToData = parses.parses;\n const last = sanitized[sanitized.length - 1];\n if (\n sanitized.length > 1 &&\n typeof last === \"object\" &&\n last !== null &&\n sanitized\n .slice(0, -1)\n .every((item) => typeof item !== \"object\" || item === null)\n ) {\n const lastParses = parsesTo(stringify(last));\n if (lastParses.parses) {\n message = stringify(...sanitized.slice(0, -1));\n parses = lastParses;\n syncMessageToData = false;\n }\n }\n const json: LogJson = {\n message,\n ...this.tags,\n };\n if (parses.parses) {\n json.data = parses.message;\n }\n if (this.levelField) {\n json[this.levelField] = logLevel;\n }\n let entry: LogJson = json;\n if (this.limits.maxEntryBytes !== undefined) {\n entry = enforceEntryLimit(json, {\n maxEntryBytes: this.limits.maxEntryBytes,\n syncMessageToData,\n }) as LogJson;\n }\n out(entry, { level: logLevel });\n } else {\n let message = stringify(...sanitized);\n if (this.limits.maxEntryBytes !== undefined) {\n message = truncateToBudget(message, this.limits.maxEntryBytes);\n }\n out(message, { level: logLevel });\n }\n }\n };\n\n logFn.var = (messageObject: unknown, messageValue?: unknown): void => {\n if (messageObject === undefined) {\n this.warn(ERROR.VAR.UNDEFINED_MESSAGE);\n }\n\n let msgObj: Record<string, unknown>;\n\n if (typeof messageObject !== \"object\" || messageObject === null) {\n if (typeof messageObject !== \"object\") {\n if (messageValue === undefined) messageValue = \"undefined\";\n msgObj = { [String(messageObject)]: messageValue };\n } else {\n this.warn(ERROR.VAR.NULL_OBJECT);\n return logFn(messageObject);\n }\n } else {\n msgObj = sanitizeAuth(messageObject) as Record<string, unknown>;\n }\n\n const keys = Object.keys(msgObj);\n if (keys.length === 0) {\n this.warn(ERROR.VAR.EMPTY_OBJECT);\n return logFn(msgObj);\n }\n\n if (keys.length > 1) {\n this.warn(ERROR.VAR.MULTIPLE_KEYS);\n return logFn(msgObj);\n }\n\n if (format === FORMAT.JSON) {\n const messageKey = keys[0];\n let messageVal = msgObj[messageKey];\n\n for (const pipeline of pipelines) {\n if (messageKey === pipeline.key) {\n messageVal = pipeline.filter(messageVal);\n }\n }\n messageVal = filterByType(messageVal);\n if (hasValueLimits(this.limits)) {\n messageVal = applyValueLimits(messageVal, this.limits);\n }\n\n const json: LogJson = {\n data: parse(messageVal),\n dataType: typeof messageVal,\n message: stringify(messageVal),\n var: messageKey,\n ...this.tags,\n };\n if (this.levelField) {\n json[this.levelField] = logLevel;\n }\n\n if (LEVEL_VALUES[logLevel] <= LEVEL_VALUES[checkLevel]) {\n let entry: LogJson = json;\n if (this.limits.maxEntryBytes !== undefined) {\n entry = enforceEntryLimit(json, {\n maxEntryBytes: this.limits.maxEntryBytes,\n syncMessageToData: true,\n }) as LogJson;\n }\n out(entry, { level: logLevel });\n }\n } else {\n return logFn(msgObj);\n }\n };\n\n return logFn as LogMethod;\n }\n\n /**\n * Update serialization limits at runtime. Pass a number to set a limit,\n * `false` to disable one; omitted keys are unchanged.\n */\n public config(options: SerializationLimitOptions = {}): void {\n this.limits = resolveSerializationLimits({\n maxDepth: options.maxDepth ?? this.limits.maxDepth ?? false,\n maxEntryBytes:\n options.maxEntryBytes ?? this.limits.maxEntryBytes ?? false,\n maxStringLength:\n options.maxStringLength ?? this.limits.maxStringLength ?? false,\n });\n this.options.maxDepth = this.limits.maxDepth ?? false;\n this.options.maxEntryBytes = this.limits.maxEntryBytes ?? false;\n this.options.maxStringLength = this.limits.maxStringLength ?? false;\n }\n\n public tag(key: unknown, value?: unknown): void {\n if (value) {\n this.tags[forceString(key)] = forceString(value);\n return;\n }\n\n if (Array.isArray(key)) {\n key.forEach((k) => {\n this.tags[forceString(k)] = \"\";\n });\n return;\n }\n\n if (key === null) {\n this.tags.null = \"\";\n return;\n }\n\n if (typeof key === \"object\") {\n Object.keys(key).forEach((k) => {\n this.tags[forceString(k)] = forceString(\n (key as Record<string, unknown>)[k],\n );\n });\n } else {\n this.tags[forceString(key)] = \"\";\n }\n }\n\n public untag(key: unknown): void {\n if (Array.isArray(key)) {\n key.forEach((k) => {\n delete this.tags[forceString(k)];\n });\n return;\n }\n\n if (key === null) {\n delete this.tags.null;\n return;\n }\n\n if (typeof key === \"object\") {\n Object.keys(key as object).forEach((k) => {\n delete this.tags[forceString(k)];\n });\n } else {\n delete this.tags[forceString(key)];\n }\n }\n\n public with(key: unknown, value?: unknown): Logger {\n const logger = new Logger(this.options);\n logger.tag(this.tags);\n logger.tag(key, value);\n return logger;\n }\n}\n\nexport default Logger;\n","export function logTags(\n withTags?: Record<string, string>,\n): Record<string, string> {\n if (withTags && typeof withTags !== \"object\") {\n withTags = {};\n }\n\n const {\n PROJECT_COMMIT,\n PROJECT_ENV,\n PROJECT_KEY,\n PROJECT_SERVICE,\n PROJECT_SPONSOR,\n PROJECT_VERSION,\n } = process.env;\n\n const tags: Record<string, string> = {};\n\n if (PROJECT_COMMIT) {\n tags.commit = PROJECT_COMMIT;\n }\n if (PROJECT_ENV) {\n tags.env = PROJECT_ENV;\n }\n if (PROJECT_KEY) {\n tags.project = PROJECT_KEY;\n }\n if (PROJECT_SERVICE) {\n tags.service = PROJECT_SERVICE;\n }\n if (PROJECT_SPONSOR) {\n tags.sponsor = PROJECT_SPONSOR;\n }\n if (process.env.npm_package_version || PROJECT_VERSION) {\n tags.version = (process.env.npm_package_version ||\n PROJECT_VERSION) as string;\n }\n\n return {\n ...tags,\n ...withTags,\n };\n}\n","import { forceString } from \"./utils\";\n\nexport function forceVar(\n key: unknown,\n value?: unknown,\n): Record<string, unknown> {\n if (typeof key === \"undefined\") {\n return {};\n }\n if (typeof key === \"object\" && key !== null) {\n if (Object.keys(key).length === 1) {\n return key as Record<string, unknown>;\n } else {\n return { value: key };\n }\n }\n const keyStr = forceString(key);\n if (typeof value === \"undefined\") {\n return { [keyStr]: \"\" };\n } else {\n return { [keyStr]: value };\n }\n}\n","import { forceVar } from \"./forceVar\";\nimport { filterByType, pipelines } from \"./pipelines\";\n\nfunction keyValueToArray(keyValue: Record<string, unknown>): [string, unknown] {\n const key = Object.keys(keyValue)[0];\n return [key, keyValue[key]];\n}\n\nexport function logVar(key: unknown, value?: unknown): Record<string, unknown> {\n let [k, v] = keyValueToArray(forceVar(key, value));\n\n for (const pipeline of pipelines) {\n if (k === pipeline.key) {\n v = pipeline.filter(v);\n }\n }\n v = filterByType(v);\n\n return { [k]: v };\n}\n","import Logger from \"./Logger\";\nimport { DEFAULT, FORMAT, LEVEL } from \"./constants\";\nimport { _resetDatadogTransport } from \"./datadogTransport\";\nimport { SerializationLimitOptions } from \"./limits\";\nimport { logTags } from \"./logTags\";\nimport { logVar } from \"./logVar\";\n\ninterface JaypieLoggerOptions extends SerializationLimitOptions {\n level?: string;\n tags?: Record<string, string>;\n}\n\nfunction envBoolean(\n key: string,\n { defaultValue }: { defaultValue: boolean },\n): boolean {\n const value = process.env[key];\n if (value === undefined) return defaultValue;\n const lower = value.toLowerCase();\n return !(\n lower === \"\" ||\n lower === \"0\" ||\n lower === \"f\" ||\n lower === \"false\" ||\n lower === \"n\" ||\n lower === \"no\"\n );\n}\n\nexport class JaypieLogger {\n public debug: Logger[\"debug\"];\n public error: Logger[\"error\"];\n public fatal: Logger[\"fatal\"];\n public info: Logger[\"info\"];\n public level: string;\n public trace: Logger[\"trace\"];\n public var: Logger[\"var\"];\n public warn: Logger[\"warn\"];\n\n private _errorCount: number = 0;\n private _logger: Logger;\n private _loggers: Logger[];\n private _params: JaypieLoggerOptions;\n private _report: Record<string, unknown> = {};\n private _sessionActive: boolean = false;\n private _tags: Record<string, string>;\n private _warnCount: number = 0;\n private _withLoggers: Record<string, JaypieLogger>;\n\n constructor({\n level = process.env.LOG_LEVEL,\n maxDepth,\n maxEntryBytes,\n maxStringLength,\n tags = {},\n }: JaypieLoggerOptions = {}) {\n this._params = { level, maxDepth, maxEntryBytes, maxStringLength, tags };\n this._loggers = [];\n this._tags = {};\n this._withLoggers = {};\n\n this.level = level || DEFAULT.LEVEL;\n\n this._tags = { ...logTags(), ...tags };\n this._logger = new Logger({\n format: FORMAT.JSON,\n level: this.level,\n maxDepth,\n maxEntryBytes,\n maxStringLength,\n tags: this._tags,\n });\n this._loggers = [this._logger];\n\n this.debug = ((...args: any[]) =>\n this._logger.debug(...args)) as Logger[\"debug\"];\n this.debug.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.debug.var(messageObject, messageValue);\n\n this.error = ((...args: any[]) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.error(...args);\n }) as Logger[\"error\"];\n this.error.var = (messageObject: unknown, messageValue?: unknown) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.error.var(messageObject, messageValue);\n };\n\n this.fatal = ((...args: any[]) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.fatal(...args);\n }) as Logger[\"fatal\"];\n this.fatal.var = (messageObject: unknown, messageValue?: unknown) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.fatal.var(messageObject, messageValue);\n };\n\n this.info = ((...args: any[]) =>\n this._logger.info(...args)) as Logger[\"info\"];\n this.info.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.info.var(messageObject, messageValue);\n\n this.trace = ((...args: any[]) =>\n this._logger.trace(...args)) as Logger[\"trace\"];\n this.trace.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.trace.var(messageObject, messageValue);\n\n this.warn = ((...args: any[]) => {\n if (this._sessionActive) this._warnCount++;\n this._logger.warn(...args);\n }) as Logger[\"warn\"];\n this.warn.var = (messageObject: unknown, messageValue?: unknown) => {\n if (this._sessionActive) this._warnCount++;\n this._logger.warn.var(messageObject, messageValue);\n };\n\n this.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.var(logVar(messageObject, messageValue));\n }\n\n /**\n * Update serialization limits at runtime for this logger and all loggers\n * derived from it (lib, with, flag). Pass a number to set a limit,\n * `false` to disable one; omitted keys are unchanged. Persists across\n * init().\n */\n public config(options: SerializationLimitOptions = {}): void {\n if (options.maxDepth !== undefined) {\n this._params.maxDepth = options.maxDepth;\n }\n if (options.maxEntryBytes !== undefined) {\n this._params.maxEntryBytes = options.maxEntryBytes;\n }\n if (options.maxStringLength !== undefined) {\n this._params.maxStringLength = options.maxStringLength;\n }\n for (const logger of this._loggers) {\n logger.config(options);\n }\n for (const key of Object.keys(this._withLoggers)) {\n this._withLoggers[key].config(options);\n }\n }\n\n public flag(flag?: string): JaypieLogger {\n if (typeof flag !== \"string\" || flag === \"\") {\n return this;\n }\n return this.with({ flag });\n }\n\n public init(): void {\n _resetDatadogTransport();\n for (const logger of this._loggers) {\n if (\"init\" in logger && typeof logger.init === \"function\") {\n (logger as Logger & { init: () => void }).init();\n }\n }\n const level = this._params.level;\n const tags = this._params.tags;\n this.level = level || DEFAULT.LEVEL;\n this._tags = { ...logTags(), ...tags };\n this._logger = new Logger({\n format: FORMAT.JSON,\n level: this.level,\n maxDepth: this._params.maxDepth,\n maxEntryBytes: this._params.maxEntryBytes,\n maxStringLength: this._params.maxStringLength,\n tags: this._tags,\n });\n this._loggers = [this._logger];\n this._withLoggers = {};\n\n // Reset session state\n this._errorCount = 0;\n this._report = {};\n this._sessionActive = false;\n this._warnCount = 0;\n\n const levels = [\n \"debug\",\n \"error\",\n \"fatal\",\n \"info\",\n \"trace\",\n \"warn\",\n ] as const;\n levels.forEach((lvl) => {\n if (lvl === \"error\") {\n this.error = ((...args: any[]) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.error(...args);\n }) as any;\n this.error.var = (messageObject: unknown, messageValue?: unknown) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.error.var(messageObject, messageValue);\n };\n } else if (lvl === \"fatal\") {\n this.fatal = ((...args: any[]) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.fatal(...args);\n }) as any;\n this.fatal.var = (messageObject: unknown, messageValue?: unknown) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.fatal.var(messageObject, messageValue);\n };\n } else if (lvl === \"warn\") {\n this.warn = ((...args: any[]) => {\n if (this._sessionActive) this._warnCount++;\n this._logger.warn(...args);\n }) as any;\n this.warn.var = (messageObject: unknown, messageValue?: unknown) => {\n if (this._sessionActive) this._warnCount++;\n this._logger.warn.var(messageObject, messageValue);\n };\n } else {\n this[lvl] = ((...args: any[]) => {\n this._logger[lvl](...args);\n }) as any;\n this[lvl].var = (messageObject: unknown, messageValue?: unknown) => {\n this._logger[lvl].var(messageObject, messageValue);\n };\n }\n });\n }\n\n public lib({\n level,\n lib,\n tags = {},\n }: {\n level?: string;\n lib?: string;\n tags?: Record<string, string>;\n } = {}): JaypieLogger {\n const newTags = Object.assign({}, this._tags, tags);\n if (lib) {\n newTags.lib = lib;\n }\n\n const logger = new JaypieLogger({\n level: (() => {\n if (level) {\n return level;\n }\n if (process.env.MODULE_LOG_LEVEL) {\n return process.env.MODULE_LOG_LEVEL;\n }\n if (envBoolean(\"MODULE_LOGGER\", { defaultValue: false })) {\n return process.env.LOG_LEVEL;\n }\n return LEVEL.SILENT;\n })(),\n maxDepth: this._params.maxDepth,\n maxEntryBytes: this._params.maxEntryBytes,\n maxStringLength: this._params.maxStringLength,\n tags: newTags,\n });\n this._loggers.push(logger._logger);\n return logger;\n }\n\n /**\n * Merge data into the current session's report. Requires an active\n * session (started via setup()); logs a warning and is a no-op otherwise.\n * Warns when overwriting an existing key. Emitted by teardown().\n */\n public report(data: Record<string, unknown>): void {\n if (!this._sessionActive) {\n this.warn(\"[logger] report() called without active session\");\n return;\n }\n for (const key of Object.keys(data)) {\n if (key in this._report) {\n this.warn(`[logger] Overwriting report key: ${key}`);\n }\n }\n Object.assign(this._report, data);\n }\n\n /**\n * Start a report session: resets warn/error counters and accumulated\n * report data, applies optional tags. Pair with teardown() to bookend a\n * request. Handlers call this automatically.\n */\n public setup(tags?: Record<string, unknown>): void {\n if (this._sessionActive) {\n this.warn(\"[logger] setup() called while session already active\");\n }\n this._errorCount = 0;\n this._report = {};\n this._sessionActive = true;\n this._warnCount = 0;\n if (tags) {\n this.tag(tags);\n }\n }\n\n public tag(tags: Record<string, unknown>): void {\n for (const logger of this._loggers) {\n logger.tag(tags);\n }\n Object.assign(this._tags, tags);\n }\n\n /**\n * End the current report session: emits log.info.var({ report }) with\n * accumulated report() data plus { log: { warn, warns, error, errors } }\n * counts, then resets session state. No-op if no session is active.\n * Handlers call this automatically.\n */\n public teardown(): void {\n if (!this._sessionActive) {\n return;\n }\n const finalReport = {\n ...this._report,\n log: {\n error: this._errorCount > 0,\n errors: this._errorCount,\n warn: this._warnCount > 0,\n warns: this._warnCount,\n },\n };\n this.info.var({ report: finalReport });\n this._errorCount = 0;\n this._report = {};\n this._sessionActive = false;\n this._warnCount = 0;\n }\n\n public untag(key: unknown): void {\n for (const logger of this._loggers) {\n logger.untag(key);\n }\n if (Array.isArray(key)) {\n key.forEach((k) => {\n delete this._tags[String(k)];\n });\n } else if (typeof key === \"object\" && key !== null) {\n Object.keys(key).forEach((k) => {\n delete this._tags[k];\n });\n } else {\n delete this._tags[String(key)];\n }\n }\n\n public with(key: unknown, value?: unknown): JaypieLogger {\n if (!key || (typeof key !== \"object\" && value === undefined)) {\n throw new Error(\n \"ConfigurationError: with() requires an object argument or key-value pair\",\n );\n }\n const loggerKey = JSON.stringify([key, value]);\n if (Object.keys(this._withLoggers).includes(loggerKey)) {\n return this._withLoggers[loggerKey];\n }\n const logger = new JaypieLogger({\n level: this.level,\n maxDepth: this._params.maxDepth,\n maxEntryBytes: this._params.maxEntryBytes,\n maxStringLength: this._params.maxStringLength,\n tags: { ...this._tags },\n });\n logger._logger = this._logger.with(key, value);\n logger._loggers = [logger._logger];\n this._withLoggers[loggerKey] = logger;\n this._loggers.push(logger._logger);\n return logger;\n }\n}\n\nexport function createLogger(tags: Record<string, string> = {}): JaypieLogger {\n const jaypieLogger = new JaypieLogger({\n tags,\n });\n return jaypieLogger;\n}\n\nexport default JaypieLogger;\n","import Logger from \"./Logger\";\nimport { createLogger } from \"./JaypieLogger\";\nimport { FORMAT, LEVEL } from \"./constants\";\nimport {\n _resetDatadogTransport,\n getDatadogTransport,\n isDatadogForwardingEnabled,\n} from \"./datadogTransport\";\nimport { redactAuth, sanitizeAuth } from \"./sanitizeAuth\";\n\nexport {\n FORMAT,\n LEVEL,\n Logger,\n _resetDatadogTransport,\n createLogger,\n getDatadogTransport,\n isDatadogForwardingEnabled,\n redactAuth,\n sanitizeAuth,\n};\nexport type { SerializationLimitOptions, SerializationLimits } from \"./limits\";\nexport { JaypieLogger } from \"./JaypieLogger\";\n\nexport const log = createLogger();\n\nexport default log;\n"],"names":["createHash","envBoolean","hostname","request"],"mappings":"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"}
@@ -91,9 +91,25 @@ declare class JaypieLogger {
91
91
  lib?: string;
92
92
  tags?: Record<string, string>;
93
93
  }): JaypieLogger;
94
+ /**
95
+ * Merge data into the current session's report. Requires an active
96
+ * session (started via setup()); logs a warning and is a no-op otherwise.
97
+ * Warns when overwriting an existing key. Emitted by teardown().
98
+ */
94
99
  report(data: Record<string, unknown>): void;
100
+ /**
101
+ * Start a report session: resets warn/error counters and accumulated
102
+ * report data, applies optional tags. Pair with teardown() to bookend a
103
+ * request. Handlers call this automatically.
104
+ */
95
105
  setup(tags?: Record<string, unknown>): void;
96
106
  tag(tags: Record<string, unknown>): void;
107
+ /**
108
+ * End the current report session: emits log.info.var({ report }) with
109
+ * accumulated report() data plus { log: { warn, warns, error, errors } }
110
+ * counts, then resets session state. No-op if no session is active.
111
+ * Handlers call this automatically.
112
+ */
97
113
  teardown(): void;
98
114
  untag(key: unknown): void;
99
115
  with(key: unknown, value?: unknown): JaypieLogger;
@@ -138,5 +154,5 @@ declare function sanitizeAuth(value: unknown): unknown;
138
154
 
139
155
  declare const log: JaypieLogger;
140
156
 
141
- export { FORMAT, LEVEL, Logger, _resetDatadogTransport, createLogger, log as default, getDatadogTransport, isDatadogForwardingEnabled, log, redactAuth, sanitizeAuth };
157
+ export { FORMAT, JaypieLogger, LEVEL, Logger, _resetDatadogTransport, createLogger, log as default, getDatadogTransport, isDatadogForwardingEnabled, log, redactAuth, sanitizeAuth };
142
158
  export type { SerializationLimitOptions, SerializationLimits };
@@ -4,7 +4,7 @@ interface JaypieLoggerOptions extends SerializationLimitOptions {
4
4
  level?: string;
5
5
  tags?: Record<string, string>;
6
6
  }
7
- declare class JaypieLogger {
7
+ export declare class JaypieLogger {
8
8
  debug: Logger["debug"];
9
9
  error: Logger["error"];
10
10
  fatal: Logger["fatal"];
@@ -37,9 +37,25 @@ declare class JaypieLogger {
37
37
  lib?: string;
38
38
  tags?: Record<string, string>;
39
39
  }): JaypieLogger;
40
+ /**
41
+ * Merge data into the current session's report. Requires an active
42
+ * session (started via setup()); logs a warning and is a no-op otherwise.
43
+ * Warns when overwriting an existing key. Emitted by teardown().
44
+ */
40
45
  report(data: Record<string, unknown>): void;
46
+ /**
47
+ * Start a report session: resets warn/error counters and accumulated
48
+ * report data, applies optional tags. Pair with teardown() to bookend a
49
+ * request. Handlers call this automatically.
50
+ */
41
51
  setup(tags?: Record<string, unknown>): void;
42
52
  tag(tags: Record<string, unknown>): void;
53
+ /**
54
+ * End the current report session: emits log.info.var({ report }) with
55
+ * accumulated report() data plus { log: { warn, warns, error, errors } }
56
+ * counts, then resets session state. No-op if no session is active.
57
+ * Handlers call this automatically.
58
+ */
43
59
  teardown(): void;
44
60
  untag(key: unknown): void;
45
61
  with(key: unknown, value?: unknown): JaypieLogger;
@@ -5,5 +5,6 @@ import { _resetDatadogTransport, getDatadogTransport, isDatadogForwardingEnabled
5
5
  import { redactAuth, sanitizeAuth } from "./sanitizeAuth";
6
6
  export { FORMAT, LEVEL, Logger, _resetDatadogTransport, createLogger, getDatadogTransport, isDatadogForwardingEnabled, redactAuth, sanitizeAuth, };
7
7
  export type { SerializationLimitOptions, SerializationLimits } from "./limits";
8
- export declare const log: import("./JaypieLogger").default;
8
+ export { JaypieLogger } from "./JaypieLogger";
9
+ export declare const log: import("./JaypieLogger").JaypieLogger;
9
10
  export default log;
@@ -91,9 +91,25 @@ declare class JaypieLogger {
91
91
  lib?: string;
92
92
  tags?: Record<string, string>;
93
93
  }): JaypieLogger;
94
+ /**
95
+ * Merge data into the current session's report. Requires an active
96
+ * session (started via setup()); logs a warning and is a no-op otherwise.
97
+ * Warns when overwriting an existing key. Emitted by teardown().
98
+ */
94
99
  report(data: Record<string, unknown>): void;
100
+ /**
101
+ * Start a report session: resets warn/error counters and accumulated
102
+ * report data, applies optional tags. Pair with teardown() to bookend a
103
+ * request. Handlers call this automatically.
104
+ */
95
105
  setup(tags?: Record<string, unknown>): void;
96
106
  tag(tags: Record<string, unknown>): void;
107
+ /**
108
+ * End the current report session: emits log.info.var({ report }) with
109
+ * accumulated report() data plus { log: { warn, warns, error, errors } }
110
+ * counts, then resets session state. No-op if no session is active.
111
+ * Handlers call this automatically.
112
+ */
97
113
  teardown(): void;
98
114
  untag(key: unknown): void;
99
115
  with(key: unknown, value?: unknown): JaypieLogger;
@@ -138,5 +154,5 @@ declare function sanitizeAuth(value: unknown): unknown;
138
154
 
139
155
  declare const log: JaypieLogger;
140
156
 
141
- export { FORMAT, LEVEL, Logger, _resetDatadogTransport, createLogger, log as default, getDatadogTransport, isDatadogForwardingEnabled, log, redactAuth, sanitizeAuth };
157
+ export { FORMAT, JaypieLogger, LEVEL, Logger, _resetDatadogTransport, createLogger, log as default, getDatadogTransport, isDatadogForwardingEnabled, log, redactAuth, sanitizeAuth };
142
158
  export type { SerializationLimitOptions, SerializationLimits };
package/dist/esm/index.js CHANGED
@@ -1349,6 +1349,11 @@ class JaypieLogger {
1349
1349
  this._loggers.push(logger._logger);
1350
1350
  return logger;
1351
1351
  }
1352
+ /**
1353
+ * Merge data into the current session's report. Requires an active
1354
+ * session (started via setup()); logs a warning and is a no-op otherwise.
1355
+ * Warns when overwriting an existing key. Emitted by teardown().
1356
+ */
1352
1357
  report(data) {
1353
1358
  if (!this._sessionActive) {
1354
1359
  this.warn("[logger] report() called without active session");
@@ -1361,6 +1366,11 @@ class JaypieLogger {
1361
1366
  }
1362
1367
  Object.assign(this._report, data);
1363
1368
  }
1369
+ /**
1370
+ * Start a report session: resets warn/error counters and accumulated
1371
+ * report data, applies optional tags. Pair with teardown() to bookend a
1372
+ * request. Handlers call this automatically.
1373
+ */
1364
1374
  setup(tags) {
1365
1375
  if (this._sessionActive) {
1366
1376
  this.warn("[logger] setup() called while session already active");
@@ -1379,6 +1389,12 @@ class JaypieLogger {
1379
1389
  }
1380
1390
  Object.assign(this._tags, tags);
1381
1391
  }
1392
+ /**
1393
+ * End the current report session: emits log.info.var({ report }) with
1394
+ * accumulated report() data plus { log: { warn, warns, error, errors } }
1395
+ * counts, then resets session state. No-op if no session is active.
1396
+ * Handlers call this automatically.
1397
+ */
1382
1398
  teardown() {
1383
1399
  if (!this._sessionActive) {
1384
1400
  return;
@@ -1447,5 +1463,5 @@ function createLogger(tags = {}) {
1447
1463
 
1448
1464
  const log = createLogger();
1449
1465
 
1450
- export { FORMAT, LEVEL, Logger, _resetDatadogTransport, createLogger, log as default, getDatadogTransport, isDatadogForwardingEnabled, log, redactAuth, sanitizeAuth };
1466
+ export { FORMAT, JaypieLogger, LEVEL, Logger, _resetDatadogTransport, createLogger, log as default, getDatadogTransport, isDatadogForwardingEnabled, log, redactAuth, sanitizeAuth };
1451
1467
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/constants.ts","../../../../src/limits.ts","../../../../src/pipelines.ts","../../../../src/sanitizeAuth.ts","../../../../src/datadogTransport.ts","../../../../src/utils.ts","../../../../src/Logger.ts","../../../../src/logTags.ts","../../../../src/forceVar.ts","../../../../src/logVar.ts","../../../../src/JaypieLogger.ts","../../../../src/index.ts"],"sourcesContent":["export const DEFAULT = {\n LEVEL: \"debug\",\n // CloudWatch Logs caps events at 256KB and fronts Datadog in Lambda;\n // Datadog's own per-log cap is 1MB. Truncate deliberately below both.\n MAX_ENTRY_BYTES: 262144,\n VAR_LEVEL: \"debug\",\n};\n\nexport const LIMIT_ENV = {\n MAX_DEPTH: \"LOG_MAX_DEPTH\",\n MAX_ENTRY_BYTES: \"LOG_MAX_ENTRY_BYTES\",\n MAX_STRING: \"LOG_MAX_STRING\",\n} as const;\n\nexport const ERROR_PREFIX = \"[logger]\";\n\nexport const ERROR = {\n VAR: {\n EMPTY_OBJECT: `${ERROR_PREFIX} Logger.var() called with empty object`,\n MULTIPLE_KEYS: `${ERROR_PREFIX} Logger.var() called with multiple keys`,\n NULL_OBJECT: `${ERROR_PREFIX} Logger.var() called with null`,\n UNDEFINED_MESSAGE: `${ERROR_PREFIX} Logger.var() called with \\`undefined\\` message`,\n },\n};\n\nexport const FORMAT = {\n JSON: \"json\",\n TEXT: \"text\",\n} as const;\n\nexport const LEVEL = {\n ALL: \"all\",\n DEBUG: \"debug\",\n ERROR: \"error\",\n FATAL: \"fatal\",\n INFO: \"info\",\n SILENT: \"silent\",\n TRACE: \"trace\",\n WARN: \"warn\",\n} as const;\n\nexport const LEVEL_VALUES: Record<string, number> = {\n all: 100,\n debug: 70,\n error: 10,\n fatal: 1,\n info: 50,\n none: 0,\n silent: 0,\n trace: 90,\n warn: 30,\n};\n\nexport const DATADOG_TRANSPORT = {\n ENV: {\n API_KEY: \"DATADOG_API_KEY\",\n DD_ENV: \"DD_ENV\",\n DD_HOST: \"DD_HOST\",\n DD_SERVICE: \"DD_SERVICE\",\n DD_SITE: \"DD_SITE\",\n DD_SOURCE: \"DD_SOURCE\",\n FORWARDING: \"DATADOG_LOCAL_FORWARDING\",\n PROJECT_ENV: \"PROJECT_ENV\",\n PROJECT_HOST: \"PROJECT_HOST\",\n PROJECT_SERVICE: \"PROJECT_SERVICE\",\n PROJECT_SOURCE: \"PROJECT_SOURCE\",\n },\n FLUSH_INTERVAL_MS: 5000,\n INTAKE_PATH: \"/api/v2/logs\",\n MAX_BATCH_SIZE: 100,\n} as const;\n\nexport const PSEUDO_LEVELS = [\"ALL\", \"SILENT\"];\n","import { DEFAULT, LIMIT_ENV } from \"./constants\";\n\n//\n//\n// Types\n//\n\n/**\n * Caller-facing limit options. `false` explicitly disables a limit;\n * `undefined` resolves from env vars, then defaults.\n */\nexport interface SerializationLimitOptions {\n maxDepth?: number | false;\n maxEntryBytes?: number | false;\n maxStringLength?: number | false;\n}\n\n/**\n * Resolved limits. `undefined` means the limit is off.\n */\nexport interface SerializationLimits {\n maxDepth?: number;\n maxEntryBytes?: number;\n maxStringLength?: number;\n}\n\n//\n//\n// Constants\n//\n\nconst CIRCULAR_PLACEHOLDER = \"[Circular]\";\nconst DISABLED_ENV_VALUES = [\"\", \"0\", \"false\", \"none\", \"off\"];\nconst ELLIPSIS = \"…\";\n// Reserve headroom for the truncation marker when fitting a string to a\n// byte budget\nconst MARKER_RESERVE_BYTES = 64;\n\n/** Characters preserved when an oversized entry truncates an attribute */\nexport const ENTRY_PREVIEW_LENGTH = 72;\n\n//\n//\n// Helpers\n//\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\nfunction normalizeLimit(option: number | false): number | undefined {\n if (option === false) return undefined;\n if (typeof option === \"number\" && Number.isFinite(option) && option > 0) {\n return Math.floor(option);\n }\n return undefined;\n}\n\nfunction resolveLimit(\n option: number | false | undefined,\n envKey: string,\n defaultValue?: number,\n): number | undefined {\n if (option !== undefined) {\n return normalizeLimit(option);\n }\n const raw = process.env[envKey];\n if (raw !== undefined) {\n if (DISABLED_ENV_VALUES.includes(raw.toLowerCase())) return undefined;\n const parsed = Number.parseInt(raw, 10);\n if (Number.isFinite(parsed) && parsed > 0) return parsed;\n }\n return defaultValue;\n}\n\nfunction truncationMarker(droppedChars: number): string {\n return `${ELLIPSIS} [truncated ${droppedChars.toLocaleString(\"en-US\")} chars]`;\n}\n\n//\n//\n// Main\n//\n\n/**\n * Resolve limits from explicit options, env vars, then defaults.\n * `maxEntryBytes` defaults on (payloads must fit the log pipeline);\n * `maxDepth` and `maxStringLength` default off.\n */\nexport function resolveSerializationLimits(\n options: SerializationLimitOptions = {},\n): SerializationLimits {\n return {\n maxDepth: resolveLimit(options.maxDepth, LIMIT_ENV.MAX_DEPTH),\n maxEntryBytes: resolveLimit(\n options.maxEntryBytes,\n LIMIT_ENV.MAX_ENTRY_BYTES,\n DEFAULT.MAX_ENTRY_BYTES,\n ),\n maxStringLength: resolveLimit(\n options.maxStringLength,\n LIMIT_ENV.MAX_STRING,\n ),\n };\n}\n\nexport function hasValueLimits(limits: SerializationLimits): boolean {\n return limits.maxDepth !== undefined || limits.maxStringLength !== undefined;\n}\n\nexport function byteLength(value: unknown): number {\n try {\n const str = typeof value === \"string\" ? value : JSON.stringify(value);\n return Buffer.byteLength(str ?? \"\", \"utf8\");\n } catch {\n return 0;\n }\n}\n\n/**\n * Keep the first `maxLength` characters and append a visible marker\n * preserving the dropped size\n */\nexport function truncateString(value: string, maxLength: number): string {\n if (value.length <= maxLength) return value;\n return value.slice(0, maxLength) + truncationMarker(value.length - maxLength);\n}\n\n/**\n * Fit a string to a byte budget, reserving room for the marker and\n * never cutting below the preview length\n */\nexport function truncateToBudget(value: string, budgetBytes: number): string {\n if (Buffer.byteLength(value, \"utf8\") <= budgetBytes) return value;\n const maxLength = Math.max(\n ENTRY_PREVIEW_LENGTH,\n budgetBytes - MARKER_RESERVE_BYTES,\n );\n return truncateString(value, maxLength);\n}\n\n/**\n * Walk a value applying maxStringLength and maxDepth. Returns a new value;\n * never mutates the input. Only plain objects and arrays are traversed so\n * class instances (Error, Date, ...) keep their serialization behavior.\n */\nexport function applyValueLimits(\n value: unknown,\n limits: SerializationLimits,\n depth = 0,\n seen: WeakSet<object> = new WeakSet(),\n): unknown {\n const { maxDepth, maxStringLength } = limits;\n if (typeof value === \"string\") {\n return maxStringLength !== undefined\n ? truncateString(value, maxStringLength)\n : value;\n }\n if (Array.isArray(value)) {\n if (seen.has(value)) return CIRCULAR_PLACEHOLDER;\n if (maxDepth !== undefined && depth > maxDepth) {\n return `[Array(${value.length})]`;\n }\n seen.add(value);\n const result = value.map((item) =>\n applyValueLimits(item, limits, depth + 1, seen),\n );\n seen.delete(value);\n return result;\n }\n if (isPlainObject(value)) {\n if (seen.has(value)) return CIRCULAR_PLACEHOLDER;\n if (maxDepth !== undefined && depth > maxDepth) {\n return \"[Object]\";\n }\n seen.add(value);\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(value)) {\n result[key] = applyValueLimits(value[key], limits, depth + 1, seen);\n }\n seen.delete(value);\n return result;\n }\n return value;\n}\n\nfunction truncateToPreview(value: unknown): unknown {\n const str =\n typeof value === \"string\"\n ? value\n : (JSON.stringify(value) ?? String(value));\n if (str.length <= ENTRY_PREVIEW_LENGTH) return value;\n return truncateString(str, ENTRY_PREVIEW_LENGTH);\n}\n\n/**\n * Fit a serialized log entry under maxEntryBytes. Truncates the top-level\n * attributes of `data` largest-first to short previews until the entry fits,\n * collapsing `data` to a byte-count marker only as a last resort. When\n * `syncMessageToData` is set (var entries and single-object messages, where\n * `message` mirrors `data`), the message is rebuilt from the truncated data.\n * Returns a new entry; never mutates the input.\n */\nexport function enforceEntryLimit(\n entry: Record<string, unknown>,\n {\n maxEntryBytes,\n syncMessageToData = false,\n }: { maxEntryBytes: number; syncMessageToData?: boolean },\n): Record<string, unknown> {\n const originalBytes = byteLength(entry);\n if (originalBytes <= maxEntryBytes) return entry;\n\n const result = { ...entry };\n const sync = () => {\n if (syncMessageToData) {\n result.message =\n typeof result.data === \"string\"\n ? result.data\n : (JSON.stringify(result.data) ?? String(result.data));\n }\n };\n\n const data = result.data;\n if (typeof data === \"string\") {\n result.data = truncateToPreview(data);\n sync();\n } else if (Array.isArray(data) || isPlainObject(data)) {\n const container: Record<string, unknown> = Array.isArray(data)\n ? ([...data] as unknown as Record<string, unknown>)\n : { ...data };\n result.data = container;\n const keys = Object.keys(container).sort(\n (a, b) => byteLength(container[b]) - byteLength(container[a]),\n );\n for (const key of keys) {\n container[key] = truncateToPreview(container[key]);\n sync();\n if (byteLength(result) <= maxEntryBytes) return result;\n }\n } else if (typeof result.message === \"string\") {\n // No structured data: the message itself is oversized\n const overhead = originalBytes - byteLength(result.message);\n result.message = truncateToBudget(\n result.message,\n Math.max(ENTRY_PREVIEW_LENGTH, maxEntryBytes - overhead),\n );\n }\n\n if (byteLength(result) <= maxEntryBytes) return result;\n\n // Last resort: entry is still oversized after attribute-level truncation\n const marker = `[truncated ${originalBytes.toLocaleString(\"en-US\")} bytes]`;\n if (\"data\" in result) {\n result.data = marker;\n if (syncMessageToData) result.message = marker;\n } else if (typeof result.message === \"string\") {\n result.message = marker;\n }\n return result;\n}\n","interface Pipeline {\n key: string;\n filter: (value: unknown) => unknown;\n}\n\n//\n// Key-based pipelines (match on var key name)\n//\n\nfunction isAxiosResponse(response: unknown): boolean {\n if (typeof response !== \"object\" || response === null) {\n return false;\n }\n const r = response as Record<string, unknown>;\n return !!(\n r &&\n r.config &&\n r.data &&\n r.headers &&\n r.request &&\n r.status &&\n r.statusText\n );\n}\n\nfunction filterAxiosResponse(response: unknown): unknown {\n if (!isAxiosResponse(response)) {\n return response;\n }\n const r = response as Record<string, unknown>;\n const newResponse: Record<string, unknown> = {\n data: r.data,\n headers: r.headers,\n status: r.status,\n statusText: r.statusText,\n };\n if (r.isAxiosError) {\n newResponse.isAxiosError = r.isAxiosError;\n }\n return newResponse;\n}\n\nexport const axiosResponseVarPipeline: Pipeline = {\n filter: filterAxiosResponse,\n key: \"response\",\n};\n\nexport const pipelines = [axiosResponseVarPipeline];\n\n//\n// Type-based filters (run on any key, match on value shape)\n//\n\ninterface TypeFilter {\n detect: (value: unknown) => boolean;\n filter: (value: unknown) => unknown;\n}\n\n// Fetch Response\n\nfunction isFetchResponse(value: unknown): boolean {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n const r = value as Record<string, unknown>;\n return !!(\n typeof r.ok === \"boolean\" &&\n typeof r.status === \"number\" &&\n typeof r.statusText === \"string\" &&\n \"headers\" in r &&\n \"body\" in r &&\n typeof r.url === \"string\" &&\n !(\"config\" in r) &&\n !(\"request\" in r)\n );\n}\n\nfunction headersToObject(headers: unknown): Record<string, string> | unknown {\n if (\n headers &&\n typeof headers === \"object\" &&\n typeof (headers as Record<string, unknown>).entries === \"function\"\n ) {\n const result: Record<string, string> = {};\n for (const [key, value] of (headers as Headers).entries()) {\n result[key] = value;\n }\n return result;\n }\n return headers;\n}\n\nfunction filterFetchResponse(value: unknown): unknown {\n const r = value as Record<string, unknown>;\n return {\n headers: headersToObject(r.headers),\n ok: r.ok,\n redirected: r.redirected,\n status: r.status,\n statusText: r.statusText,\n type: r.type,\n url: r.url,\n };\n}\n\n// Error\n\nfunction isError(value: unknown): boolean {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n if (value instanceof Error) {\n return true;\n }\n const i = value as Record<string, unknown>;\n if (i.isProjectError) {\n return true;\n }\n return false;\n}\n\nfunction filterError(value: unknown): unknown {\n const e = value as Error & Record<string, unknown>;\n const newItem: Record<string, unknown> = {\n message: e.message,\n name: e.name,\n };\n if (e.cause) {\n newItem.cause = e.cause;\n }\n if (e.stack) {\n newItem.stack = e.stack;\n }\n if (e.isProjectError) {\n newItem.isProjectError = e.isProjectError;\n newItem.title = e.title;\n newItem.detail = e.detail;\n newItem.status = e.status;\n }\n return newItem;\n}\n\n// Type filter registry (order matters — first match wins)\n\nconst typeFilters: TypeFilter[] = [\n { detect: isFetchResponse, filter: filterFetchResponse },\n { detect: isError, filter: filterError },\n];\n\n//\n// Opaque object detection and generic extraction\n//\n\nfunction isOpaqueObject(value: unknown): boolean {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n // Plain objects are fine\n if (value.constructor === Object || value.constructor === undefined) {\n return false;\n }\n // If JSON.stringify produces \"{}\" the object has no own enumerable properties\n // and will log as useless \"[object Type]\"\n try {\n const json = JSON.stringify(value);\n return json === \"{}\" || json === \"[]\";\n } catch {\n return true;\n }\n}\n\nfunction extractOpaqueObject(value: unknown): Record<string, unknown> {\n const obj = value as object;\n const result: Record<string, unknown> = {};\n\n const ctorName = obj.constructor?.name;\n if (ctorName && ctorName !== \"Object\") {\n result._type = ctorName;\n }\n\n // If the object itself is map-like (Headers, URLSearchParams, FormData, etc.),\n // convert its entries directly\n const mapLike = obj as Record<string, unknown>;\n if (\n typeof mapLike.entries === \"function\" &&\n typeof mapLike.forEach === \"function\"\n ) {\n try {\n const entries = Object.fromEntries(\n (mapLike as { entries: () => Iterable<[string, unknown]> }).entries(),\n );\n return { ...result, ...entries };\n } catch {\n // Fall through to generic extraction\n }\n }\n\n // Collect readable non-function properties from the prototype chain\n let proto: object | null = obj;\n while (proto && proto !== Object.prototype) {\n for (const key of Object.getOwnPropertyNames(proto)) {\n if (key === \"constructor\" || key in result) {\n continue;\n }\n try {\n const desc = Object.getOwnPropertyDescriptor(proto, key);\n if (!desc) continue;\n // Read getters and value properties from the original object\n const val = (obj as Record<string, unknown>)[key];\n if (typeof val === \"function\" || typeof val === \"symbol\") {\n continue;\n }\n // Skip streams and other non-serializable objects\n if (\n val &&\n typeof val === \"object\" &&\n typeof (val as Record<string, unknown>).pipe === \"function\"\n ) {\n continue;\n }\n // Convert iterable map-like objects (Headers, URLSearchParams, etc.)\n if (\n val &&\n typeof val === \"object\" &&\n typeof (val as Record<string, unknown>).entries === \"function\" &&\n typeof (val as Record<string, unknown>).forEach === \"function\"\n ) {\n result[key] = Object.fromEntries(\n (val as { entries: () => Iterable<[string, unknown]> }).entries(),\n );\n continue;\n }\n result[key] = val;\n } catch {\n // Property threw on access — skip\n }\n }\n proto = Object.getPrototypeOf(proto);\n }\n\n return result;\n}\n\n//\n// Public API\n//\n\n/**\n * Filter a value by type, regardless of var key name.\n * Tries known type filters first, then falls back to generic\n * opaque object extraction for anything that would log as [object Type].\n */\nexport function filterByType(value: unknown): unknown {\n // Try known type filters\n for (const tf of typeFilters) {\n if (tf.detect(value)) {\n return tf.filter(value);\n }\n }\n // Generic fallback for opaque objects\n if (isOpaqueObject(value)) {\n return extractOpaqueObject(value);\n }\n return value;\n}\n\n// Legacy exports for key-based pipeline (axios only now)\nexport const errorVarPipeline: Pipeline = {\n filter: (item: unknown) => {\n if (!isError(item)) return item;\n return filterError(item);\n },\n key: \"error\",\n};\n","import { createHash } from \"node:crypto\";\n\n//\n//\n// Helper\n//\n\nexport function redactAuth(value: unknown): string {\n const str = String(value);\n if (/sk\\S+/.test(str)) {\n return `sk_${str.slice(-4)}`;\n }\n const hash = createHash(\"md5\").update(str).digest(\"hex\");\n return `md5_${hash.slice(-4)}`;\n}\n\n//\n//\n// Main\n//\n\nconst REDACTED_KEYS = new Set([\n \"authorization\",\n \"x-service-key\",\n \"x-webhook-token\",\n]);\n\nexport function sanitizeAuth(value: unknown): unknown {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return value;\n }\n\n const obj = value as Record<string, unknown>;\n let clone: Record<string, unknown> | undefined;\n\n for (const key of Object.keys(obj)) {\n const lower = key.toLowerCase();\n\n if (REDACTED_KEYS.has(lower)) {\n if (!clone) clone = { ...obj };\n clone[key] = redactAuth(obj[key]);\n } else if (lower === \"headers\") {\n const headers = obj[key];\n if (\n typeof headers === \"object\" &&\n headers !== null &&\n !Array.isArray(headers)\n ) {\n const hdrs = headers as Record<string, unknown>;\n let clonedHeaders: Record<string, unknown> | undefined;\n for (const hKey of Object.keys(hdrs)) {\n if (REDACTED_KEYS.has(hKey.toLowerCase())) {\n if (!clonedHeaders) clonedHeaders = { ...hdrs };\n clonedHeaders[hKey] = redactAuth(hdrs[hKey]);\n }\n }\n if (clonedHeaders) {\n if (!clone) clone = { ...obj };\n clone[key] = clonedHeaders;\n }\n }\n }\n }\n\n return clone ?? value;\n}\n","import { hostname } from \"node:os\";\nimport { request } from \"node:https\";\n\nimport { DATADOG_TRANSPORT, LEVEL } from \"./constants\";\n\n// Level-to-Datadog status mapping\nconst LEVEL_TO_STATUS: Record<string, string> = {\n [LEVEL.TRACE]: \"debug\",\n [LEVEL.DEBUG]: \"debug\",\n [LEVEL.INFO]: \"info\",\n [LEVEL.WARN]: \"warn\",\n [LEVEL.ERROR]: \"error\",\n [LEVEL.FATAL]: \"critical\",\n};\n\nfunction envBoolean(\n key: string,\n { defaultValue }: { defaultValue: boolean },\n): boolean {\n const value = process.env[key];\n if (value === undefined) return defaultValue;\n const lower = value.toLowerCase();\n return !(\n lower === \"\" ||\n lower === \"0\" ||\n lower === \"f\" ||\n lower === \"false\" ||\n lower === \"n\" ||\n lower === \"no\"\n );\n}\n\nexport function isDatadogForwardingEnabled(): boolean {\n return (\n envBoolean(DATADOG_TRANSPORT.ENV.FORWARDING, { defaultValue: false }) &&\n !!process.env[DATADOG_TRANSPORT.ENV.API_KEY]\n );\n}\n\ninterface DatadogLogEntry {\n ddsource: string;\n ddtags: string;\n hostname: string;\n message: string;\n service: string;\n status: string;\n [key: string]: unknown;\n}\n\nclass DatadogLogTransport {\n private _beforeExitHandler: (() => void) | null = null;\n private _buffer: DatadogLogEntry[] = [];\n private _flushTimer: ReturnType<typeof setInterval> | null = null;\n private _ddsource: string;\n private _env: string;\n private _hostname: string;\n private _service: string;\n private _site: string;\n\n constructor() {\n const env = process.env;\n this._ddsource =\n env[DATADOG_TRANSPORT.ENV.DD_SOURCE] ||\n env[DATADOG_TRANSPORT.ENV.PROJECT_SOURCE] ||\n \"nodejs\";\n this._env =\n env[DATADOG_TRANSPORT.ENV.DD_ENV] ||\n env[DATADOG_TRANSPORT.ENV.PROJECT_ENV] ||\n \"local\";\n this._hostname =\n env[DATADOG_TRANSPORT.ENV.DD_HOST] ||\n env[DATADOG_TRANSPORT.ENV.PROJECT_HOST] ||\n hostname();\n this._service =\n env[DATADOG_TRANSPORT.ENV.DD_SERVICE] ||\n env[DATADOG_TRANSPORT.ENV.PROJECT_SERVICE] ||\n \"unknown\";\n this._site = env[DATADOG_TRANSPORT.ENV.DD_SITE] || \"datadoghq.com\";\n\n this._flushTimer = setInterval(() => {\n this.flush();\n }, DATADOG_TRANSPORT.FLUSH_INTERVAL_MS);\n // Unref so timer doesn't keep process alive\n if (this._flushTimer && typeof this._flushTimer.unref === \"function\") {\n this._flushTimer.unref();\n }\n\n // Best-effort flush on exit\n this._beforeExitHandler = () => this.flush();\n process.on(\"beforeExit\", this._beforeExitHandler);\n }\n\n send(line: string, level: string): void {\n let message: string = line;\n let extra: Record<string, unknown> = {};\n if (typeof line === \"string\") {\n try {\n const parsed = JSON.parse(line);\n if (parsed && typeof parsed === \"object\") {\n if (parsed.message) {\n message = parsed.message;\n extra = { ...parsed };\n delete extra.message;\n delete extra.status;\n }\n }\n } catch {\n // Not JSON — use line as-is\n }\n }\n const entry: DatadogLogEntry = {\n ddsource: this._ddsource,\n ddtags: `env:${this._env}`,\n hostname: this._hostname,\n message,\n service: this._service,\n status: LEVEL_TO_STATUS[level] || \"info\",\n ...extra,\n };\n this._buffer.push(entry);\n if (this._buffer.length >= DATADOG_TRANSPORT.MAX_BATCH_SIZE) {\n this.flush();\n }\n }\n\n flush(): void {\n if (this._buffer.length === 0) return;\n\n // Atomic swap\n const batch = this._buffer;\n this._buffer = [];\n\n const apiKey = process.env[DATADOG_TRANSPORT.ENV.API_KEY];\n if (!apiKey) return;\n\n const body = JSON.stringify(batch);\n const options = {\n headers: {\n \"Content-Type\": \"application/json\",\n \"DD-API-KEY\": apiKey,\n },\n hostname: `http-intake.logs.${this._site}`,\n method: \"POST\",\n path: DATADOG_TRANSPORT.INTAKE_PATH,\n };\n\n try {\n const req = request(options, () => {\n // Response intentionally ignored\n });\n req.on(\"error\", () => {\n // Silently swallow transport errors\n });\n req.write(body);\n req.end();\n } catch {\n // Transport must never throw\n }\n }\n\n destroy(): void {\n if (this._flushTimer) {\n clearInterval(this._flushTimer);\n this._flushTimer = null;\n }\n if (this._beforeExitHandler) {\n process.removeListener(\"beforeExit\", this._beforeExitHandler);\n this._beforeExitHandler = null;\n }\n try {\n this.flush();\n } catch {\n // Best-effort\n }\n }\n}\n\nlet _instance: DatadogLogTransport | null = null;\n\nexport function getDatadogTransport(): DatadogLogTransport | null {\n if (!isDatadogForwardingEnabled()) return null;\n if (!_instance) {\n _instance = new DatadogLogTransport();\n }\n return _instance;\n}\n\nexport function _resetDatadogTransport(): void {\n if (_instance) {\n _instance.destroy();\n _instance = null;\n }\n}\n","import { LEVEL } from \"./constants\";\nimport { getDatadogTransport } from \"./datadogTransport\";\n\nexport function forceString(value: unknown, defaultValue = \"\"): string {\n if (value === null) return \"null\";\n if (value === undefined) return String(defaultValue);\n if (typeof value === \"object\") return JSON.stringify(value);\n return String(value);\n}\n\nexport function formatAsJsonString(subject: unknown): string {\n const SPACES = 0;\n const UNUSED_PARAM = null;\n\n switch (typeof subject) {\n case \"string\":\n if (subject === \"\") return `\"\"`;\n try {\n return JSON.stringify(JSON.parse(subject), UNUSED_PARAM, SPACES);\n } catch {\n return subject;\n }\n\n case \"object\":\n try {\n if (\n subject &&\n subject instanceof Object &&\n !Array.isArray(subject) &&\n subject.constructor &&\n subject.constructor !== Object &&\n \"toString\" in subject &&\n typeof subject.toString === \"function\"\n ) {\n return subject.toString();\n }\n return JSON.stringify(subject, UNUSED_PARAM, SPACES);\n } catch (error) {\n if (error instanceof TypeError) {\n const truncatedSubject = Object.keys(subject as object).reduce(\n (newSubject: Record<string, string>, key: string) => {\n const nextSubject = { ...newSubject };\n nextSubject[key] = String(\n (subject as Record<string, unknown>)[key],\n );\n return nextSubject;\n },\n {},\n );\n return formatAsJsonString(truncatedSubject);\n }\n throw error;\n }\n\n default:\n return String(subject);\n }\n}\n\nexport function stringify(...params: unknown[]): string {\n if (params.length === 0) return \"\";\n if (params.length === 1) {\n return formatAsJsonString(params[0]);\n }\n\n const formatted = params.map(formatAsJsonString);\n return formatted.join(\" \");\n}\n\n/* eslint-disable no-console -- console is the logger's output device */\nexport function out(\n line: string | unknown,\n { level = \"debug\" }: { level?: string } = {},\n): void {\n let lineStr: string;\n if (typeof line !== \"string\") {\n lineStr = stringify(line);\n } else {\n lineStr = line;\n }\n\n let outputFunction: (...args: unknown[]) => void;\n\n switch (level) {\n case LEVEL.INFO:\n outputFunction = console.info;\n break;\n case LEVEL.WARN:\n outputFunction = console.warn;\n break;\n case LEVEL.ERROR:\n case LEVEL.FATAL:\n outputFunction = console.error;\n break;\n case LEVEL.TRACE:\n case LEVEL.DEBUG:\n outputFunction = console.debug;\n break;\n default:\n outputFunction = console.log;\n break;\n }\n\n try {\n outputFunction(lineStr);\n } catch (error) {\n console.warn(error);\n console.log(lineStr);\n }\n\n try {\n const transport = getDatadogTransport();\n if (transport) {\n transport.send(lineStr, level);\n }\n } catch {\n // Transport errors must never affect logging\n }\n}\n/* eslint-enable no-console */\n\nexport function parse(message: unknown): unknown {\n if (typeof message !== \"string\") {\n return message;\n }\n try {\n return JSON.parse(message);\n } catch {\n return message;\n }\n}\n\nexport function parsesTo(message: unknown): {\n parses: boolean;\n message: unknown;\n} {\n if (typeof message !== \"string\") {\n return {\n parses: false,\n message,\n };\n }\n try {\n return {\n parses: true,\n message: JSON.parse(message),\n };\n } catch {\n return {\n parses: false,\n message,\n };\n }\n}\n","import { DEFAULT, ERROR, FORMAT, LEVEL, LEVEL_VALUES } from \"./constants\";\nimport {\n applyValueLimits,\n enforceEntryLimit,\n hasValueLimits,\n resolveSerializationLimits,\n SerializationLimitOptions,\n SerializationLimits,\n truncateToBudget,\n} from \"./limits\";\nimport { filterByType, pipelines } from \"./pipelines\";\nimport { sanitizeAuth } from \"./sanitizeAuth\";\nimport { forceString, out, parse, parsesTo, stringify } from \"./utils\";\n\ntype LogLevel = string;\ntype LogFormat = \"json\" | \"text\";\ntype Tags = Record<string, string>;\n\ninterface LoggerOptions extends SerializationLimitOptions {\n format?: LogFormat;\n level?: LogLevel;\n levelField?: boolean | string;\n tags?: Tags;\n varLevel?: LogLevel;\n}\n\ninterface LogJson {\n data?: unknown;\n dataType?: string;\n message: string;\n var?: string;\n [key: string]: unknown;\n}\n\ntype LogMethod = {\n (...messages: unknown[]): void;\n var: (messageObject: unknown, messageValue?: unknown) => void;\n};\n\nfunction resolveLevelField(value?: boolean | string): false | string {\n if (value === undefined) {\n const env = process.env.LOG_LEVEL_FIELD;\n if (env === undefined || env === \"\") return false;\n if (env === \"false\" || env === \"0\" || env === \"no\") return false;\n if (env === \"true\" || env === \"1\" || env === \"yes\") return \"level\";\n return env;\n }\n if (value === false) return false;\n if (value === true) return \"level\";\n return value;\n}\n\nclass Logger {\n public debug: LogMethod;\n public error: LogMethod;\n public fatal: LogMethod;\n public info: LogMethod;\n public options: LoggerOptions;\n public tags: Tags;\n public trace: LogMethod;\n public var: (messageObject: unknown, messageValue?: unknown) => void;\n public warn: LogMethod;\n private levelField: false | string;\n private limits: SerializationLimits;\n\n constructor({\n format = (process.env.LOG_FORMAT as LogFormat) || DEFAULT.LEVEL,\n level = process.env.LOG_LEVEL || DEFAULT.LEVEL,\n levelField,\n maxDepth,\n maxEntryBytes,\n maxStringLength,\n tags = {},\n varLevel = process.env.LOG_VAR_LEVEL || DEFAULT.VAR_LEVEL,\n }: LoggerOptions = {}) {\n this.levelField = resolveLevelField(levelField);\n this.limits = resolveSerializationLimits({\n maxDepth,\n maxEntryBytes,\n maxStringLength,\n });\n this.options = {\n format,\n level,\n levelField: this.levelField || undefined,\n // Pin resolved limits (false = explicitly off) so child loggers\n // created via with() inherit this config instead of re-resolving\n maxDepth: this.limits.maxDepth ?? false,\n maxEntryBytes: this.limits.maxEntryBytes ?? false,\n maxStringLength: this.limits.maxStringLength ?? false,\n varLevel,\n };\n\n this.tags = {};\n Object.keys(tags).forEach((key) => {\n this.tags[key] = forceString(tags[key]);\n });\n\n this.debug = this.createLogMethod(LEVEL.DEBUG, format, level);\n this.error = this.createLogMethod(LEVEL.ERROR, format, level);\n this.fatal = this.createLogMethod(LEVEL.FATAL, format, level);\n this.info = this.createLogMethod(LEVEL.INFO, format, level);\n this.trace = this.createLogMethod(LEVEL.TRACE, format, level);\n this.warn = this.createLogMethod(LEVEL.WARN, format, level);\n\n const varLevelMethod =\n this[varLevel as \"debug\" | \"error\" | \"fatal\" | \"info\" | \"trace\" | \"warn\"];\n this.var = (varLevelMethod as LogMethod)?.var || this.debug.var;\n }\n\n private createLogMethod(\n logLevel: string,\n format: LogFormat,\n checkLevel: string,\n ): LogMethod {\n const logFn = (...messages: unknown[]): void => {\n if (LEVEL_VALUES[logLevel] <= LEVEL_VALUES[checkLevel]) {\n let sanitized = messages.map(sanitizeAuth);\n if (hasValueLimits(this.limits)) {\n sanitized = sanitized.map((item) =>\n applyValueLimits(item, this.limits),\n );\n }\n if (format === FORMAT.JSON) {\n let message = stringify(...sanitized);\n let parses = parsesTo(message);\n // When data comes from the full message they mirror each other;\n // entry-limit truncation must keep them in sync\n let syncMessageToData = parses.parses;\n const last = sanitized[sanitized.length - 1];\n if (\n sanitized.length > 1 &&\n typeof last === \"object\" &&\n last !== null &&\n sanitized\n .slice(0, -1)\n .every((item) => typeof item !== \"object\" || item === null)\n ) {\n const lastParses = parsesTo(stringify(last));\n if (lastParses.parses) {\n message = stringify(...sanitized.slice(0, -1));\n parses = lastParses;\n syncMessageToData = false;\n }\n }\n const json: LogJson = {\n message,\n ...this.tags,\n };\n if (parses.parses) {\n json.data = parses.message;\n }\n if (this.levelField) {\n json[this.levelField] = logLevel;\n }\n let entry: LogJson = json;\n if (this.limits.maxEntryBytes !== undefined) {\n entry = enforceEntryLimit(json, {\n maxEntryBytes: this.limits.maxEntryBytes,\n syncMessageToData,\n }) as LogJson;\n }\n out(entry, { level: logLevel });\n } else {\n let message = stringify(...sanitized);\n if (this.limits.maxEntryBytes !== undefined) {\n message = truncateToBudget(message, this.limits.maxEntryBytes);\n }\n out(message, { level: logLevel });\n }\n }\n };\n\n logFn.var = (messageObject: unknown, messageValue?: unknown): void => {\n if (messageObject === undefined) {\n this.warn(ERROR.VAR.UNDEFINED_MESSAGE);\n }\n\n let msgObj: Record<string, unknown>;\n\n if (typeof messageObject !== \"object\" || messageObject === null) {\n if (typeof messageObject !== \"object\") {\n if (messageValue === undefined) messageValue = \"undefined\";\n msgObj = { [String(messageObject)]: messageValue };\n } else {\n this.warn(ERROR.VAR.NULL_OBJECT);\n return logFn(messageObject);\n }\n } else {\n msgObj = sanitizeAuth(messageObject) as Record<string, unknown>;\n }\n\n const keys = Object.keys(msgObj);\n if (keys.length === 0) {\n this.warn(ERROR.VAR.EMPTY_OBJECT);\n return logFn(msgObj);\n }\n\n if (keys.length > 1) {\n this.warn(ERROR.VAR.MULTIPLE_KEYS);\n return logFn(msgObj);\n }\n\n if (format === FORMAT.JSON) {\n const messageKey = keys[0];\n let messageVal = msgObj[messageKey];\n\n for (const pipeline of pipelines) {\n if (messageKey === pipeline.key) {\n messageVal = pipeline.filter(messageVal);\n }\n }\n messageVal = filterByType(messageVal);\n if (hasValueLimits(this.limits)) {\n messageVal = applyValueLimits(messageVal, this.limits);\n }\n\n const json: LogJson = {\n data: parse(messageVal),\n dataType: typeof messageVal,\n message: stringify(messageVal),\n var: messageKey,\n ...this.tags,\n };\n if (this.levelField) {\n json[this.levelField] = logLevel;\n }\n\n if (LEVEL_VALUES[logLevel] <= LEVEL_VALUES[checkLevel]) {\n let entry: LogJson = json;\n if (this.limits.maxEntryBytes !== undefined) {\n entry = enforceEntryLimit(json, {\n maxEntryBytes: this.limits.maxEntryBytes,\n syncMessageToData: true,\n }) as LogJson;\n }\n out(entry, { level: logLevel });\n }\n } else {\n return logFn(msgObj);\n }\n };\n\n return logFn as LogMethod;\n }\n\n /**\n * Update serialization limits at runtime. Pass a number to set a limit,\n * `false` to disable one; omitted keys are unchanged.\n */\n public config(options: SerializationLimitOptions = {}): void {\n this.limits = resolveSerializationLimits({\n maxDepth: options.maxDepth ?? this.limits.maxDepth ?? false,\n maxEntryBytes:\n options.maxEntryBytes ?? this.limits.maxEntryBytes ?? false,\n maxStringLength:\n options.maxStringLength ?? this.limits.maxStringLength ?? false,\n });\n this.options.maxDepth = this.limits.maxDepth ?? false;\n this.options.maxEntryBytes = this.limits.maxEntryBytes ?? false;\n this.options.maxStringLength = this.limits.maxStringLength ?? false;\n }\n\n public tag(key: unknown, value?: unknown): void {\n if (value) {\n this.tags[forceString(key)] = forceString(value);\n return;\n }\n\n if (Array.isArray(key)) {\n key.forEach((k) => {\n this.tags[forceString(k)] = \"\";\n });\n return;\n }\n\n if (key === null) {\n this.tags.null = \"\";\n return;\n }\n\n if (typeof key === \"object\") {\n Object.keys(key).forEach((k) => {\n this.tags[forceString(k)] = forceString(\n (key as Record<string, unknown>)[k],\n );\n });\n } else {\n this.tags[forceString(key)] = \"\";\n }\n }\n\n public untag(key: unknown): void {\n if (Array.isArray(key)) {\n key.forEach((k) => {\n delete this.tags[forceString(k)];\n });\n return;\n }\n\n if (key === null) {\n delete this.tags.null;\n return;\n }\n\n if (typeof key === \"object\") {\n Object.keys(key as object).forEach((k) => {\n delete this.tags[forceString(k)];\n });\n } else {\n delete this.tags[forceString(key)];\n }\n }\n\n public with(key: unknown, value?: unknown): Logger {\n const logger = new Logger(this.options);\n logger.tag(this.tags);\n logger.tag(key, value);\n return logger;\n }\n}\n\nexport default Logger;\n","export function logTags(\n withTags?: Record<string, string>,\n): Record<string, string> {\n if (withTags && typeof withTags !== \"object\") {\n withTags = {};\n }\n\n const {\n PROJECT_COMMIT,\n PROJECT_ENV,\n PROJECT_KEY,\n PROJECT_SERVICE,\n PROJECT_SPONSOR,\n PROJECT_VERSION,\n } = process.env;\n\n const tags: Record<string, string> = {};\n\n if (PROJECT_COMMIT) {\n tags.commit = PROJECT_COMMIT;\n }\n if (PROJECT_ENV) {\n tags.env = PROJECT_ENV;\n }\n if (PROJECT_KEY) {\n tags.project = PROJECT_KEY;\n }\n if (PROJECT_SERVICE) {\n tags.service = PROJECT_SERVICE;\n }\n if (PROJECT_SPONSOR) {\n tags.sponsor = PROJECT_SPONSOR;\n }\n if (process.env.npm_package_version || PROJECT_VERSION) {\n tags.version = (process.env.npm_package_version ||\n PROJECT_VERSION) as string;\n }\n\n return {\n ...tags,\n ...withTags,\n };\n}\n","import { forceString } from \"./utils\";\n\nexport function forceVar(\n key: unknown,\n value?: unknown,\n): Record<string, unknown> {\n if (typeof key === \"undefined\") {\n return {};\n }\n if (typeof key === \"object\" && key !== null) {\n if (Object.keys(key).length === 1) {\n return key as Record<string, unknown>;\n } else {\n return { value: key };\n }\n }\n const keyStr = forceString(key);\n if (typeof value === \"undefined\") {\n return { [keyStr]: \"\" };\n } else {\n return { [keyStr]: value };\n }\n}\n","import { forceVar } from \"./forceVar\";\nimport { filterByType, pipelines } from \"./pipelines\";\n\nfunction keyValueToArray(keyValue: Record<string, unknown>): [string, unknown] {\n const key = Object.keys(keyValue)[0];\n return [key, keyValue[key]];\n}\n\nexport function logVar(key: unknown, value?: unknown): Record<string, unknown> {\n let [k, v] = keyValueToArray(forceVar(key, value));\n\n for (const pipeline of pipelines) {\n if (k === pipeline.key) {\n v = pipeline.filter(v);\n }\n }\n v = filterByType(v);\n\n return { [k]: v };\n}\n","import Logger from \"./Logger\";\nimport { DEFAULT, FORMAT, LEVEL } from \"./constants\";\nimport { _resetDatadogTransport } from \"./datadogTransport\";\nimport { SerializationLimitOptions } from \"./limits\";\nimport { logTags } from \"./logTags\";\nimport { logVar } from \"./logVar\";\n\ninterface JaypieLoggerOptions extends SerializationLimitOptions {\n level?: string;\n tags?: Record<string, string>;\n}\n\nfunction envBoolean(\n key: string,\n { defaultValue }: { defaultValue: boolean },\n): boolean {\n const value = process.env[key];\n if (value === undefined) return defaultValue;\n const lower = value.toLowerCase();\n return !(\n lower === \"\" ||\n lower === \"0\" ||\n lower === \"f\" ||\n lower === \"false\" ||\n lower === \"n\" ||\n lower === \"no\"\n );\n}\n\nclass JaypieLogger {\n public debug: Logger[\"debug\"];\n public error: Logger[\"error\"];\n public fatal: Logger[\"fatal\"];\n public info: Logger[\"info\"];\n public level: string;\n public trace: Logger[\"trace\"];\n public var: Logger[\"var\"];\n public warn: Logger[\"warn\"];\n\n private _errorCount: number = 0;\n private _logger: Logger;\n private _loggers: Logger[];\n private _params: JaypieLoggerOptions;\n private _report: Record<string, unknown> = {};\n private _sessionActive: boolean = false;\n private _tags: Record<string, string>;\n private _warnCount: number = 0;\n private _withLoggers: Record<string, JaypieLogger>;\n\n constructor({\n level = process.env.LOG_LEVEL,\n maxDepth,\n maxEntryBytes,\n maxStringLength,\n tags = {},\n }: JaypieLoggerOptions = {}) {\n this._params = { level, maxDepth, maxEntryBytes, maxStringLength, tags };\n this._loggers = [];\n this._tags = {};\n this._withLoggers = {};\n\n this.level = level || DEFAULT.LEVEL;\n\n this._tags = { ...logTags(), ...tags };\n this._logger = new Logger({\n format: FORMAT.JSON,\n level: this.level,\n maxDepth,\n maxEntryBytes,\n maxStringLength,\n tags: this._tags,\n });\n this._loggers = [this._logger];\n\n this.debug = ((...args: any[]) =>\n this._logger.debug(...args)) as Logger[\"debug\"];\n this.debug.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.debug.var(messageObject, messageValue);\n\n this.error = ((...args: any[]) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.error(...args);\n }) as Logger[\"error\"];\n this.error.var = (messageObject: unknown, messageValue?: unknown) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.error.var(messageObject, messageValue);\n };\n\n this.fatal = ((...args: any[]) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.fatal(...args);\n }) as Logger[\"fatal\"];\n this.fatal.var = (messageObject: unknown, messageValue?: unknown) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.fatal.var(messageObject, messageValue);\n };\n\n this.info = ((...args: any[]) =>\n this._logger.info(...args)) as Logger[\"info\"];\n this.info.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.info.var(messageObject, messageValue);\n\n this.trace = ((...args: any[]) =>\n this._logger.trace(...args)) as Logger[\"trace\"];\n this.trace.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.trace.var(messageObject, messageValue);\n\n this.warn = ((...args: any[]) => {\n if (this._sessionActive) this._warnCount++;\n this._logger.warn(...args);\n }) as Logger[\"warn\"];\n this.warn.var = (messageObject: unknown, messageValue?: unknown) => {\n if (this._sessionActive) this._warnCount++;\n this._logger.warn.var(messageObject, messageValue);\n };\n\n this.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.var(logVar(messageObject, messageValue));\n }\n\n /**\n * Update serialization limits at runtime for this logger and all loggers\n * derived from it (lib, with, flag). Pass a number to set a limit,\n * `false` to disable one; omitted keys are unchanged. Persists across\n * init().\n */\n public config(options: SerializationLimitOptions = {}): void {\n if (options.maxDepth !== undefined) {\n this._params.maxDepth = options.maxDepth;\n }\n if (options.maxEntryBytes !== undefined) {\n this._params.maxEntryBytes = options.maxEntryBytes;\n }\n if (options.maxStringLength !== undefined) {\n this._params.maxStringLength = options.maxStringLength;\n }\n for (const logger of this._loggers) {\n logger.config(options);\n }\n for (const key of Object.keys(this._withLoggers)) {\n this._withLoggers[key].config(options);\n }\n }\n\n public flag(flag?: string): JaypieLogger {\n if (typeof flag !== \"string\" || flag === \"\") {\n return this;\n }\n return this.with({ flag });\n }\n\n public init(): void {\n _resetDatadogTransport();\n for (const logger of this._loggers) {\n if (\"init\" in logger && typeof logger.init === \"function\") {\n (logger as Logger & { init: () => void }).init();\n }\n }\n const level = this._params.level;\n const tags = this._params.tags;\n this.level = level || DEFAULT.LEVEL;\n this._tags = { ...logTags(), ...tags };\n this._logger = new Logger({\n format: FORMAT.JSON,\n level: this.level,\n maxDepth: this._params.maxDepth,\n maxEntryBytes: this._params.maxEntryBytes,\n maxStringLength: this._params.maxStringLength,\n tags: this._tags,\n });\n this._loggers = [this._logger];\n this._withLoggers = {};\n\n // Reset session state\n this._errorCount = 0;\n this._report = {};\n this._sessionActive = false;\n this._warnCount = 0;\n\n const levels = [\n \"debug\",\n \"error\",\n \"fatal\",\n \"info\",\n \"trace\",\n \"warn\",\n ] as const;\n levels.forEach((lvl) => {\n if (lvl === \"error\") {\n this.error = ((...args: any[]) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.error(...args);\n }) as any;\n this.error.var = (messageObject: unknown, messageValue?: unknown) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.error.var(messageObject, messageValue);\n };\n } else if (lvl === \"fatal\") {\n this.fatal = ((...args: any[]) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.fatal(...args);\n }) as any;\n this.fatal.var = (messageObject: unknown, messageValue?: unknown) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.fatal.var(messageObject, messageValue);\n };\n } else if (lvl === \"warn\") {\n this.warn = ((...args: any[]) => {\n if (this._sessionActive) this._warnCount++;\n this._logger.warn(...args);\n }) as any;\n this.warn.var = (messageObject: unknown, messageValue?: unknown) => {\n if (this._sessionActive) this._warnCount++;\n this._logger.warn.var(messageObject, messageValue);\n };\n } else {\n this[lvl] = ((...args: any[]) => {\n this._logger[lvl](...args);\n }) as any;\n this[lvl].var = (messageObject: unknown, messageValue?: unknown) => {\n this._logger[lvl].var(messageObject, messageValue);\n };\n }\n });\n }\n\n public lib({\n level,\n lib,\n tags = {},\n }: {\n level?: string;\n lib?: string;\n tags?: Record<string, string>;\n } = {}): JaypieLogger {\n const newTags = Object.assign({}, this._tags, tags);\n if (lib) {\n newTags.lib = lib;\n }\n\n const logger = new JaypieLogger({\n level: (() => {\n if (level) {\n return level;\n }\n if (process.env.MODULE_LOG_LEVEL) {\n return process.env.MODULE_LOG_LEVEL;\n }\n if (envBoolean(\"MODULE_LOGGER\", { defaultValue: false })) {\n return process.env.LOG_LEVEL;\n }\n return LEVEL.SILENT;\n })(),\n maxDepth: this._params.maxDepth,\n maxEntryBytes: this._params.maxEntryBytes,\n maxStringLength: this._params.maxStringLength,\n tags: newTags,\n });\n this._loggers.push(logger._logger);\n return logger;\n }\n\n public report(data: Record<string, unknown>): void {\n if (!this._sessionActive) {\n this.warn(\"[logger] report() called without active session\");\n return;\n }\n for (const key of Object.keys(data)) {\n if (key in this._report) {\n this.warn(`[logger] Overwriting report key: ${key}`);\n }\n }\n Object.assign(this._report, data);\n }\n\n public setup(tags?: Record<string, unknown>): void {\n if (this._sessionActive) {\n this.warn(\"[logger] setup() called while session already active\");\n }\n this._errorCount = 0;\n this._report = {};\n this._sessionActive = true;\n this._warnCount = 0;\n if (tags) {\n this.tag(tags);\n }\n }\n\n public tag(tags: Record<string, unknown>): void {\n for (const logger of this._loggers) {\n logger.tag(tags);\n }\n Object.assign(this._tags, tags);\n }\n\n public teardown(): void {\n if (!this._sessionActive) {\n return;\n }\n const finalReport = {\n ...this._report,\n log: {\n error: this._errorCount > 0,\n errors: this._errorCount,\n warn: this._warnCount > 0,\n warns: this._warnCount,\n },\n };\n this.info.var({ report: finalReport });\n this._errorCount = 0;\n this._report = {};\n this._sessionActive = false;\n this._warnCount = 0;\n }\n\n public untag(key: unknown): void {\n for (const logger of this._loggers) {\n logger.untag(key);\n }\n if (Array.isArray(key)) {\n key.forEach((k) => {\n delete this._tags[String(k)];\n });\n } else if (typeof key === \"object\" && key !== null) {\n Object.keys(key).forEach((k) => {\n delete this._tags[k];\n });\n } else {\n delete this._tags[String(key)];\n }\n }\n\n public with(key: unknown, value?: unknown): JaypieLogger {\n if (!key || (typeof key !== \"object\" && value === undefined)) {\n throw new Error(\n \"ConfigurationError: with() requires an object argument or key-value pair\",\n );\n }\n const loggerKey = JSON.stringify([key, value]);\n if (Object.keys(this._withLoggers).includes(loggerKey)) {\n return this._withLoggers[loggerKey];\n }\n const logger = new JaypieLogger({\n level: this.level,\n maxDepth: this._params.maxDepth,\n maxEntryBytes: this._params.maxEntryBytes,\n maxStringLength: this._params.maxStringLength,\n tags: { ...this._tags },\n });\n logger._logger = this._logger.with(key, value);\n logger._loggers = [logger._logger];\n this._withLoggers[loggerKey] = logger;\n this._loggers.push(logger._logger);\n return logger;\n }\n}\n\nexport function createLogger(tags: Record<string, string> = {}): JaypieLogger {\n const jaypieLogger = new JaypieLogger({\n tags,\n });\n return jaypieLogger;\n}\n\nexport default JaypieLogger;\n","import Logger from \"./Logger\";\nimport { createLogger } from \"./JaypieLogger\";\nimport { FORMAT, LEVEL } from \"./constants\";\nimport {\n _resetDatadogTransport,\n getDatadogTransport,\n isDatadogForwardingEnabled,\n} from \"./datadogTransport\";\nimport { redactAuth, sanitizeAuth } from \"./sanitizeAuth\";\n\nexport {\n FORMAT,\n LEVEL,\n Logger,\n _resetDatadogTransport,\n createLogger,\n getDatadogTransport,\n isDatadogForwardingEnabled,\n redactAuth,\n sanitizeAuth,\n};\nexport type { SerializationLimitOptions, SerializationLimits } from \"./limits\";\n\nexport const log = createLogger();\n\nexport default log;\n"],"names":["envBoolean"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/constants.ts","../../../../src/limits.ts","../../../../src/pipelines.ts","../../../../src/sanitizeAuth.ts","../../../../src/datadogTransport.ts","../../../../src/utils.ts","../../../../src/Logger.ts","../../../../src/logTags.ts","../../../../src/forceVar.ts","../../../../src/logVar.ts","../../../../src/JaypieLogger.ts","../../../../src/index.ts"],"sourcesContent":["export const DEFAULT = {\n LEVEL: \"debug\",\n // CloudWatch Logs caps events at 256KB and fronts Datadog in Lambda;\n // Datadog's own per-log cap is 1MB. Truncate deliberately below both.\n MAX_ENTRY_BYTES: 262144,\n VAR_LEVEL: \"debug\",\n};\n\nexport const LIMIT_ENV = {\n MAX_DEPTH: \"LOG_MAX_DEPTH\",\n MAX_ENTRY_BYTES: \"LOG_MAX_ENTRY_BYTES\",\n MAX_STRING: \"LOG_MAX_STRING\",\n} as const;\n\nexport const ERROR_PREFIX = \"[logger]\";\n\nexport const ERROR = {\n VAR: {\n EMPTY_OBJECT: `${ERROR_PREFIX} Logger.var() called with empty object`,\n MULTIPLE_KEYS: `${ERROR_PREFIX} Logger.var() called with multiple keys`,\n NULL_OBJECT: `${ERROR_PREFIX} Logger.var() called with null`,\n UNDEFINED_MESSAGE: `${ERROR_PREFIX} Logger.var() called with \\`undefined\\` message`,\n },\n};\n\nexport const FORMAT = {\n JSON: \"json\",\n TEXT: \"text\",\n} as const;\n\nexport const LEVEL = {\n ALL: \"all\",\n DEBUG: \"debug\",\n ERROR: \"error\",\n FATAL: \"fatal\",\n INFO: \"info\",\n SILENT: \"silent\",\n TRACE: \"trace\",\n WARN: \"warn\",\n} as const;\n\nexport const LEVEL_VALUES: Record<string, number> = {\n all: 100,\n debug: 70,\n error: 10,\n fatal: 1,\n info: 50,\n none: 0,\n silent: 0,\n trace: 90,\n warn: 30,\n};\n\nexport const DATADOG_TRANSPORT = {\n ENV: {\n API_KEY: \"DATADOG_API_KEY\",\n DD_ENV: \"DD_ENV\",\n DD_HOST: \"DD_HOST\",\n DD_SERVICE: \"DD_SERVICE\",\n DD_SITE: \"DD_SITE\",\n DD_SOURCE: \"DD_SOURCE\",\n FORWARDING: \"DATADOG_LOCAL_FORWARDING\",\n PROJECT_ENV: \"PROJECT_ENV\",\n PROJECT_HOST: \"PROJECT_HOST\",\n PROJECT_SERVICE: \"PROJECT_SERVICE\",\n PROJECT_SOURCE: \"PROJECT_SOURCE\",\n },\n FLUSH_INTERVAL_MS: 5000,\n INTAKE_PATH: \"/api/v2/logs\",\n MAX_BATCH_SIZE: 100,\n} as const;\n\nexport const PSEUDO_LEVELS = [\"ALL\", \"SILENT\"];\n","import { DEFAULT, LIMIT_ENV } from \"./constants\";\n\n//\n//\n// Types\n//\n\n/**\n * Caller-facing limit options. `false` explicitly disables a limit;\n * `undefined` resolves from env vars, then defaults.\n */\nexport interface SerializationLimitOptions {\n maxDepth?: number | false;\n maxEntryBytes?: number | false;\n maxStringLength?: number | false;\n}\n\n/**\n * Resolved limits. `undefined` means the limit is off.\n */\nexport interface SerializationLimits {\n maxDepth?: number;\n maxEntryBytes?: number;\n maxStringLength?: number;\n}\n\n//\n//\n// Constants\n//\n\nconst CIRCULAR_PLACEHOLDER = \"[Circular]\";\nconst DISABLED_ENV_VALUES = [\"\", \"0\", \"false\", \"none\", \"off\"];\nconst ELLIPSIS = \"…\";\n// Reserve headroom for the truncation marker when fitting a string to a\n// byte budget\nconst MARKER_RESERVE_BYTES = 64;\n\n/** Characters preserved when an oversized entry truncates an attribute */\nexport const ENTRY_PREVIEW_LENGTH = 72;\n\n//\n//\n// Helpers\n//\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\nfunction normalizeLimit(option: number | false): number | undefined {\n if (option === false) return undefined;\n if (typeof option === \"number\" && Number.isFinite(option) && option > 0) {\n return Math.floor(option);\n }\n return undefined;\n}\n\nfunction resolveLimit(\n option: number | false | undefined,\n envKey: string,\n defaultValue?: number,\n): number | undefined {\n if (option !== undefined) {\n return normalizeLimit(option);\n }\n const raw = process.env[envKey];\n if (raw !== undefined) {\n if (DISABLED_ENV_VALUES.includes(raw.toLowerCase())) return undefined;\n const parsed = Number.parseInt(raw, 10);\n if (Number.isFinite(parsed) && parsed > 0) return parsed;\n }\n return defaultValue;\n}\n\nfunction truncationMarker(droppedChars: number): string {\n return `${ELLIPSIS} [truncated ${droppedChars.toLocaleString(\"en-US\")} chars]`;\n}\n\n//\n//\n// Main\n//\n\n/**\n * Resolve limits from explicit options, env vars, then defaults.\n * `maxEntryBytes` defaults on (payloads must fit the log pipeline);\n * `maxDepth` and `maxStringLength` default off.\n */\nexport function resolveSerializationLimits(\n options: SerializationLimitOptions = {},\n): SerializationLimits {\n return {\n maxDepth: resolveLimit(options.maxDepth, LIMIT_ENV.MAX_DEPTH),\n maxEntryBytes: resolveLimit(\n options.maxEntryBytes,\n LIMIT_ENV.MAX_ENTRY_BYTES,\n DEFAULT.MAX_ENTRY_BYTES,\n ),\n maxStringLength: resolveLimit(\n options.maxStringLength,\n LIMIT_ENV.MAX_STRING,\n ),\n };\n}\n\nexport function hasValueLimits(limits: SerializationLimits): boolean {\n return limits.maxDepth !== undefined || limits.maxStringLength !== undefined;\n}\n\nexport function byteLength(value: unknown): number {\n try {\n const str = typeof value === \"string\" ? value : JSON.stringify(value);\n return Buffer.byteLength(str ?? \"\", \"utf8\");\n } catch {\n return 0;\n }\n}\n\n/**\n * Keep the first `maxLength` characters and append a visible marker\n * preserving the dropped size\n */\nexport function truncateString(value: string, maxLength: number): string {\n if (value.length <= maxLength) return value;\n return value.slice(0, maxLength) + truncationMarker(value.length - maxLength);\n}\n\n/**\n * Fit a string to a byte budget, reserving room for the marker and\n * never cutting below the preview length\n */\nexport function truncateToBudget(value: string, budgetBytes: number): string {\n if (Buffer.byteLength(value, \"utf8\") <= budgetBytes) return value;\n const maxLength = Math.max(\n ENTRY_PREVIEW_LENGTH,\n budgetBytes - MARKER_RESERVE_BYTES,\n );\n return truncateString(value, maxLength);\n}\n\n/**\n * Walk a value applying maxStringLength and maxDepth. Returns a new value;\n * never mutates the input. Only plain objects and arrays are traversed so\n * class instances (Error, Date, ...) keep their serialization behavior.\n */\nexport function applyValueLimits(\n value: unknown,\n limits: SerializationLimits,\n depth = 0,\n seen: WeakSet<object> = new WeakSet(),\n): unknown {\n const { maxDepth, maxStringLength } = limits;\n if (typeof value === \"string\") {\n return maxStringLength !== undefined\n ? truncateString(value, maxStringLength)\n : value;\n }\n if (Array.isArray(value)) {\n if (seen.has(value)) return CIRCULAR_PLACEHOLDER;\n if (maxDepth !== undefined && depth > maxDepth) {\n return `[Array(${value.length})]`;\n }\n seen.add(value);\n const result = value.map((item) =>\n applyValueLimits(item, limits, depth + 1, seen),\n );\n seen.delete(value);\n return result;\n }\n if (isPlainObject(value)) {\n if (seen.has(value)) return CIRCULAR_PLACEHOLDER;\n if (maxDepth !== undefined && depth > maxDepth) {\n return \"[Object]\";\n }\n seen.add(value);\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(value)) {\n result[key] = applyValueLimits(value[key], limits, depth + 1, seen);\n }\n seen.delete(value);\n return result;\n }\n return value;\n}\n\nfunction truncateToPreview(value: unknown): unknown {\n const str =\n typeof value === \"string\"\n ? value\n : (JSON.stringify(value) ?? String(value));\n if (str.length <= ENTRY_PREVIEW_LENGTH) return value;\n return truncateString(str, ENTRY_PREVIEW_LENGTH);\n}\n\n/**\n * Fit a serialized log entry under maxEntryBytes. Truncates the top-level\n * attributes of `data` largest-first to short previews until the entry fits,\n * collapsing `data` to a byte-count marker only as a last resort. When\n * `syncMessageToData` is set (var entries and single-object messages, where\n * `message` mirrors `data`), the message is rebuilt from the truncated data.\n * Returns a new entry; never mutates the input.\n */\nexport function enforceEntryLimit(\n entry: Record<string, unknown>,\n {\n maxEntryBytes,\n syncMessageToData = false,\n }: { maxEntryBytes: number; syncMessageToData?: boolean },\n): Record<string, unknown> {\n const originalBytes = byteLength(entry);\n if (originalBytes <= maxEntryBytes) return entry;\n\n const result = { ...entry };\n const sync = () => {\n if (syncMessageToData) {\n result.message =\n typeof result.data === \"string\"\n ? result.data\n : (JSON.stringify(result.data) ?? String(result.data));\n }\n };\n\n const data = result.data;\n if (typeof data === \"string\") {\n result.data = truncateToPreview(data);\n sync();\n } else if (Array.isArray(data) || isPlainObject(data)) {\n const container: Record<string, unknown> = Array.isArray(data)\n ? ([...data] as unknown as Record<string, unknown>)\n : { ...data };\n result.data = container;\n const keys = Object.keys(container).sort(\n (a, b) => byteLength(container[b]) - byteLength(container[a]),\n );\n for (const key of keys) {\n container[key] = truncateToPreview(container[key]);\n sync();\n if (byteLength(result) <= maxEntryBytes) return result;\n }\n } else if (typeof result.message === \"string\") {\n // No structured data: the message itself is oversized\n const overhead = originalBytes - byteLength(result.message);\n result.message = truncateToBudget(\n result.message,\n Math.max(ENTRY_PREVIEW_LENGTH, maxEntryBytes - overhead),\n );\n }\n\n if (byteLength(result) <= maxEntryBytes) return result;\n\n // Last resort: entry is still oversized after attribute-level truncation\n const marker = `[truncated ${originalBytes.toLocaleString(\"en-US\")} bytes]`;\n if (\"data\" in result) {\n result.data = marker;\n if (syncMessageToData) result.message = marker;\n } else if (typeof result.message === \"string\") {\n result.message = marker;\n }\n return result;\n}\n","interface Pipeline {\n key: string;\n filter: (value: unknown) => unknown;\n}\n\n//\n// Key-based pipelines (match on var key name)\n//\n\nfunction isAxiosResponse(response: unknown): boolean {\n if (typeof response !== \"object\" || response === null) {\n return false;\n }\n const r = response as Record<string, unknown>;\n return !!(\n r &&\n r.config &&\n r.data &&\n r.headers &&\n r.request &&\n r.status &&\n r.statusText\n );\n}\n\nfunction filterAxiosResponse(response: unknown): unknown {\n if (!isAxiosResponse(response)) {\n return response;\n }\n const r = response as Record<string, unknown>;\n const newResponse: Record<string, unknown> = {\n data: r.data,\n headers: r.headers,\n status: r.status,\n statusText: r.statusText,\n };\n if (r.isAxiosError) {\n newResponse.isAxiosError = r.isAxiosError;\n }\n return newResponse;\n}\n\nexport const axiosResponseVarPipeline: Pipeline = {\n filter: filterAxiosResponse,\n key: \"response\",\n};\n\nexport const pipelines = [axiosResponseVarPipeline];\n\n//\n// Type-based filters (run on any key, match on value shape)\n//\n\ninterface TypeFilter {\n detect: (value: unknown) => boolean;\n filter: (value: unknown) => unknown;\n}\n\n// Fetch Response\n\nfunction isFetchResponse(value: unknown): boolean {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n const r = value as Record<string, unknown>;\n return !!(\n typeof r.ok === \"boolean\" &&\n typeof r.status === \"number\" &&\n typeof r.statusText === \"string\" &&\n \"headers\" in r &&\n \"body\" in r &&\n typeof r.url === \"string\" &&\n !(\"config\" in r) &&\n !(\"request\" in r)\n );\n}\n\nfunction headersToObject(headers: unknown): Record<string, string> | unknown {\n if (\n headers &&\n typeof headers === \"object\" &&\n typeof (headers as Record<string, unknown>).entries === \"function\"\n ) {\n const result: Record<string, string> = {};\n for (const [key, value] of (headers as Headers).entries()) {\n result[key] = value;\n }\n return result;\n }\n return headers;\n}\n\nfunction filterFetchResponse(value: unknown): unknown {\n const r = value as Record<string, unknown>;\n return {\n headers: headersToObject(r.headers),\n ok: r.ok,\n redirected: r.redirected,\n status: r.status,\n statusText: r.statusText,\n type: r.type,\n url: r.url,\n };\n}\n\n// Error\n\nfunction isError(value: unknown): boolean {\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n if (value instanceof Error) {\n return true;\n }\n const i = value as Record<string, unknown>;\n if (i.isProjectError) {\n return true;\n }\n return false;\n}\n\nfunction filterError(value: unknown): unknown {\n const e = value as Error & Record<string, unknown>;\n const newItem: Record<string, unknown> = {\n message: e.message,\n name: e.name,\n };\n if (e.cause) {\n newItem.cause = e.cause;\n }\n if (e.stack) {\n newItem.stack = e.stack;\n }\n if (e.isProjectError) {\n newItem.isProjectError = e.isProjectError;\n newItem.title = e.title;\n newItem.detail = e.detail;\n newItem.status = e.status;\n }\n return newItem;\n}\n\n// Type filter registry (order matters — first match wins)\n\nconst typeFilters: TypeFilter[] = [\n { detect: isFetchResponse, filter: filterFetchResponse },\n { detect: isError, filter: filterError },\n];\n\n//\n// Opaque object detection and generic extraction\n//\n\nfunction isOpaqueObject(value: unknown): boolean {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n // Plain objects are fine\n if (value.constructor === Object || value.constructor === undefined) {\n return false;\n }\n // If JSON.stringify produces \"{}\" the object has no own enumerable properties\n // and will log as useless \"[object Type]\"\n try {\n const json = JSON.stringify(value);\n return json === \"{}\" || json === \"[]\";\n } catch {\n return true;\n }\n}\n\nfunction extractOpaqueObject(value: unknown): Record<string, unknown> {\n const obj = value as object;\n const result: Record<string, unknown> = {};\n\n const ctorName = obj.constructor?.name;\n if (ctorName && ctorName !== \"Object\") {\n result._type = ctorName;\n }\n\n // If the object itself is map-like (Headers, URLSearchParams, FormData, etc.),\n // convert its entries directly\n const mapLike = obj as Record<string, unknown>;\n if (\n typeof mapLike.entries === \"function\" &&\n typeof mapLike.forEach === \"function\"\n ) {\n try {\n const entries = Object.fromEntries(\n (mapLike as { entries: () => Iterable<[string, unknown]> }).entries(),\n );\n return { ...result, ...entries };\n } catch {\n // Fall through to generic extraction\n }\n }\n\n // Collect readable non-function properties from the prototype chain\n let proto: object | null = obj;\n while (proto && proto !== Object.prototype) {\n for (const key of Object.getOwnPropertyNames(proto)) {\n if (key === \"constructor\" || key in result) {\n continue;\n }\n try {\n const desc = Object.getOwnPropertyDescriptor(proto, key);\n if (!desc) continue;\n // Read getters and value properties from the original object\n const val = (obj as Record<string, unknown>)[key];\n if (typeof val === \"function\" || typeof val === \"symbol\") {\n continue;\n }\n // Skip streams and other non-serializable objects\n if (\n val &&\n typeof val === \"object\" &&\n typeof (val as Record<string, unknown>).pipe === \"function\"\n ) {\n continue;\n }\n // Convert iterable map-like objects (Headers, URLSearchParams, etc.)\n if (\n val &&\n typeof val === \"object\" &&\n typeof (val as Record<string, unknown>).entries === \"function\" &&\n typeof (val as Record<string, unknown>).forEach === \"function\"\n ) {\n result[key] = Object.fromEntries(\n (val as { entries: () => Iterable<[string, unknown]> }).entries(),\n );\n continue;\n }\n result[key] = val;\n } catch {\n // Property threw on access — skip\n }\n }\n proto = Object.getPrototypeOf(proto);\n }\n\n return result;\n}\n\n//\n// Public API\n//\n\n/**\n * Filter a value by type, regardless of var key name.\n * Tries known type filters first, then falls back to generic\n * opaque object extraction for anything that would log as [object Type].\n */\nexport function filterByType(value: unknown): unknown {\n // Try known type filters\n for (const tf of typeFilters) {\n if (tf.detect(value)) {\n return tf.filter(value);\n }\n }\n // Generic fallback for opaque objects\n if (isOpaqueObject(value)) {\n return extractOpaqueObject(value);\n }\n return value;\n}\n\n// Legacy exports for key-based pipeline (axios only now)\nexport const errorVarPipeline: Pipeline = {\n filter: (item: unknown) => {\n if (!isError(item)) return item;\n return filterError(item);\n },\n key: \"error\",\n};\n","import { createHash } from \"node:crypto\";\n\n//\n//\n// Helper\n//\n\nexport function redactAuth(value: unknown): string {\n const str = String(value);\n if (/sk\\S+/.test(str)) {\n return `sk_${str.slice(-4)}`;\n }\n const hash = createHash(\"md5\").update(str).digest(\"hex\");\n return `md5_${hash.slice(-4)}`;\n}\n\n//\n//\n// Main\n//\n\nconst REDACTED_KEYS = new Set([\n \"authorization\",\n \"x-service-key\",\n \"x-webhook-token\",\n]);\n\nexport function sanitizeAuth(value: unknown): unknown {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return value;\n }\n\n const obj = value as Record<string, unknown>;\n let clone: Record<string, unknown> | undefined;\n\n for (const key of Object.keys(obj)) {\n const lower = key.toLowerCase();\n\n if (REDACTED_KEYS.has(lower)) {\n if (!clone) clone = { ...obj };\n clone[key] = redactAuth(obj[key]);\n } else if (lower === \"headers\") {\n const headers = obj[key];\n if (\n typeof headers === \"object\" &&\n headers !== null &&\n !Array.isArray(headers)\n ) {\n const hdrs = headers as Record<string, unknown>;\n let clonedHeaders: Record<string, unknown> | undefined;\n for (const hKey of Object.keys(hdrs)) {\n if (REDACTED_KEYS.has(hKey.toLowerCase())) {\n if (!clonedHeaders) clonedHeaders = { ...hdrs };\n clonedHeaders[hKey] = redactAuth(hdrs[hKey]);\n }\n }\n if (clonedHeaders) {\n if (!clone) clone = { ...obj };\n clone[key] = clonedHeaders;\n }\n }\n }\n }\n\n return clone ?? value;\n}\n","import { hostname } from \"node:os\";\nimport { request } from \"node:https\";\n\nimport { DATADOG_TRANSPORT, LEVEL } from \"./constants\";\n\n// Level-to-Datadog status mapping\nconst LEVEL_TO_STATUS: Record<string, string> = {\n [LEVEL.TRACE]: \"debug\",\n [LEVEL.DEBUG]: \"debug\",\n [LEVEL.INFO]: \"info\",\n [LEVEL.WARN]: \"warn\",\n [LEVEL.ERROR]: \"error\",\n [LEVEL.FATAL]: \"critical\",\n};\n\nfunction envBoolean(\n key: string,\n { defaultValue }: { defaultValue: boolean },\n): boolean {\n const value = process.env[key];\n if (value === undefined) return defaultValue;\n const lower = value.toLowerCase();\n return !(\n lower === \"\" ||\n lower === \"0\" ||\n lower === \"f\" ||\n lower === \"false\" ||\n lower === \"n\" ||\n lower === \"no\"\n );\n}\n\nexport function isDatadogForwardingEnabled(): boolean {\n return (\n envBoolean(DATADOG_TRANSPORT.ENV.FORWARDING, { defaultValue: false }) &&\n !!process.env[DATADOG_TRANSPORT.ENV.API_KEY]\n );\n}\n\ninterface DatadogLogEntry {\n ddsource: string;\n ddtags: string;\n hostname: string;\n message: string;\n service: string;\n status: string;\n [key: string]: unknown;\n}\n\nclass DatadogLogTransport {\n private _beforeExitHandler: (() => void) | null = null;\n private _buffer: DatadogLogEntry[] = [];\n private _flushTimer: ReturnType<typeof setInterval> | null = null;\n private _ddsource: string;\n private _env: string;\n private _hostname: string;\n private _service: string;\n private _site: string;\n\n constructor() {\n const env = process.env;\n this._ddsource =\n env[DATADOG_TRANSPORT.ENV.DD_SOURCE] ||\n env[DATADOG_TRANSPORT.ENV.PROJECT_SOURCE] ||\n \"nodejs\";\n this._env =\n env[DATADOG_TRANSPORT.ENV.DD_ENV] ||\n env[DATADOG_TRANSPORT.ENV.PROJECT_ENV] ||\n \"local\";\n this._hostname =\n env[DATADOG_TRANSPORT.ENV.DD_HOST] ||\n env[DATADOG_TRANSPORT.ENV.PROJECT_HOST] ||\n hostname();\n this._service =\n env[DATADOG_TRANSPORT.ENV.DD_SERVICE] ||\n env[DATADOG_TRANSPORT.ENV.PROJECT_SERVICE] ||\n \"unknown\";\n this._site = env[DATADOG_TRANSPORT.ENV.DD_SITE] || \"datadoghq.com\";\n\n this._flushTimer = setInterval(() => {\n this.flush();\n }, DATADOG_TRANSPORT.FLUSH_INTERVAL_MS);\n // Unref so timer doesn't keep process alive\n if (this._flushTimer && typeof this._flushTimer.unref === \"function\") {\n this._flushTimer.unref();\n }\n\n // Best-effort flush on exit\n this._beforeExitHandler = () => this.flush();\n process.on(\"beforeExit\", this._beforeExitHandler);\n }\n\n send(line: string, level: string): void {\n let message: string = line;\n let extra: Record<string, unknown> = {};\n if (typeof line === \"string\") {\n try {\n const parsed = JSON.parse(line);\n if (parsed && typeof parsed === \"object\") {\n if (parsed.message) {\n message = parsed.message;\n extra = { ...parsed };\n delete extra.message;\n delete extra.status;\n }\n }\n } catch {\n // Not JSON — use line as-is\n }\n }\n const entry: DatadogLogEntry = {\n ddsource: this._ddsource,\n ddtags: `env:${this._env}`,\n hostname: this._hostname,\n message,\n service: this._service,\n status: LEVEL_TO_STATUS[level] || \"info\",\n ...extra,\n };\n this._buffer.push(entry);\n if (this._buffer.length >= DATADOG_TRANSPORT.MAX_BATCH_SIZE) {\n this.flush();\n }\n }\n\n flush(): void {\n if (this._buffer.length === 0) return;\n\n // Atomic swap\n const batch = this._buffer;\n this._buffer = [];\n\n const apiKey = process.env[DATADOG_TRANSPORT.ENV.API_KEY];\n if (!apiKey) return;\n\n const body = JSON.stringify(batch);\n const options = {\n headers: {\n \"Content-Type\": \"application/json\",\n \"DD-API-KEY\": apiKey,\n },\n hostname: `http-intake.logs.${this._site}`,\n method: \"POST\",\n path: DATADOG_TRANSPORT.INTAKE_PATH,\n };\n\n try {\n const req = request(options, () => {\n // Response intentionally ignored\n });\n req.on(\"error\", () => {\n // Silently swallow transport errors\n });\n req.write(body);\n req.end();\n } catch {\n // Transport must never throw\n }\n }\n\n destroy(): void {\n if (this._flushTimer) {\n clearInterval(this._flushTimer);\n this._flushTimer = null;\n }\n if (this._beforeExitHandler) {\n process.removeListener(\"beforeExit\", this._beforeExitHandler);\n this._beforeExitHandler = null;\n }\n try {\n this.flush();\n } catch {\n // Best-effort\n }\n }\n}\n\nlet _instance: DatadogLogTransport | null = null;\n\nexport function getDatadogTransport(): DatadogLogTransport | null {\n if (!isDatadogForwardingEnabled()) return null;\n if (!_instance) {\n _instance = new DatadogLogTransport();\n }\n return _instance;\n}\n\nexport function _resetDatadogTransport(): void {\n if (_instance) {\n _instance.destroy();\n _instance = null;\n }\n}\n","import { LEVEL } from \"./constants\";\nimport { getDatadogTransport } from \"./datadogTransport\";\n\nexport function forceString(value: unknown, defaultValue = \"\"): string {\n if (value === null) return \"null\";\n if (value === undefined) return String(defaultValue);\n if (typeof value === \"object\") return JSON.stringify(value);\n return String(value);\n}\n\nexport function formatAsJsonString(subject: unknown): string {\n const SPACES = 0;\n const UNUSED_PARAM = null;\n\n switch (typeof subject) {\n case \"string\":\n if (subject === \"\") return `\"\"`;\n try {\n return JSON.stringify(JSON.parse(subject), UNUSED_PARAM, SPACES);\n } catch {\n return subject;\n }\n\n case \"object\":\n try {\n if (\n subject &&\n subject instanceof Object &&\n !Array.isArray(subject) &&\n subject.constructor &&\n subject.constructor !== Object &&\n \"toString\" in subject &&\n typeof subject.toString === \"function\"\n ) {\n return subject.toString();\n }\n return JSON.stringify(subject, UNUSED_PARAM, SPACES);\n } catch (error) {\n if (error instanceof TypeError) {\n const truncatedSubject = Object.keys(subject as object).reduce(\n (newSubject: Record<string, string>, key: string) => {\n const nextSubject = { ...newSubject };\n nextSubject[key] = String(\n (subject as Record<string, unknown>)[key],\n );\n return nextSubject;\n },\n {},\n );\n return formatAsJsonString(truncatedSubject);\n }\n throw error;\n }\n\n default:\n return String(subject);\n }\n}\n\nexport function stringify(...params: unknown[]): string {\n if (params.length === 0) return \"\";\n if (params.length === 1) {\n return formatAsJsonString(params[0]);\n }\n\n const formatted = params.map(formatAsJsonString);\n return formatted.join(\" \");\n}\n\n/* eslint-disable no-console -- console is the logger's output device */\nexport function out(\n line: string | unknown,\n { level = \"debug\" }: { level?: string } = {},\n): void {\n let lineStr: string;\n if (typeof line !== \"string\") {\n lineStr = stringify(line);\n } else {\n lineStr = line;\n }\n\n let outputFunction: (...args: unknown[]) => void;\n\n switch (level) {\n case LEVEL.INFO:\n outputFunction = console.info;\n break;\n case LEVEL.WARN:\n outputFunction = console.warn;\n break;\n case LEVEL.ERROR:\n case LEVEL.FATAL:\n outputFunction = console.error;\n break;\n case LEVEL.TRACE:\n case LEVEL.DEBUG:\n outputFunction = console.debug;\n break;\n default:\n outputFunction = console.log;\n break;\n }\n\n try {\n outputFunction(lineStr);\n } catch (error) {\n console.warn(error);\n console.log(lineStr);\n }\n\n try {\n const transport = getDatadogTransport();\n if (transport) {\n transport.send(lineStr, level);\n }\n } catch {\n // Transport errors must never affect logging\n }\n}\n/* eslint-enable no-console */\n\nexport function parse(message: unknown): unknown {\n if (typeof message !== \"string\") {\n return message;\n }\n try {\n return JSON.parse(message);\n } catch {\n return message;\n }\n}\n\nexport function parsesTo(message: unknown): {\n parses: boolean;\n message: unknown;\n} {\n if (typeof message !== \"string\") {\n return {\n parses: false,\n message,\n };\n }\n try {\n return {\n parses: true,\n message: JSON.parse(message),\n };\n } catch {\n return {\n parses: false,\n message,\n };\n }\n}\n","import { DEFAULT, ERROR, FORMAT, LEVEL, LEVEL_VALUES } from \"./constants\";\nimport {\n applyValueLimits,\n enforceEntryLimit,\n hasValueLimits,\n resolveSerializationLimits,\n SerializationLimitOptions,\n SerializationLimits,\n truncateToBudget,\n} from \"./limits\";\nimport { filterByType, pipelines } from \"./pipelines\";\nimport { sanitizeAuth } from \"./sanitizeAuth\";\nimport { forceString, out, parse, parsesTo, stringify } from \"./utils\";\n\ntype LogLevel = string;\ntype LogFormat = \"json\" | \"text\";\ntype Tags = Record<string, string>;\n\ninterface LoggerOptions extends SerializationLimitOptions {\n format?: LogFormat;\n level?: LogLevel;\n levelField?: boolean | string;\n tags?: Tags;\n varLevel?: LogLevel;\n}\n\ninterface LogJson {\n data?: unknown;\n dataType?: string;\n message: string;\n var?: string;\n [key: string]: unknown;\n}\n\ntype LogMethod = {\n (...messages: unknown[]): void;\n var: (messageObject: unknown, messageValue?: unknown) => void;\n};\n\nfunction resolveLevelField(value?: boolean | string): false | string {\n if (value === undefined) {\n const env = process.env.LOG_LEVEL_FIELD;\n if (env === undefined || env === \"\") return false;\n if (env === \"false\" || env === \"0\" || env === \"no\") return false;\n if (env === \"true\" || env === \"1\" || env === \"yes\") return \"level\";\n return env;\n }\n if (value === false) return false;\n if (value === true) return \"level\";\n return value;\n}\n\nclass Logger {\n public debug: LogMethod;\n public error: LogMethod;\n public fatal: LogMethod;\n public info: LogMethod;\n public options: LoggerOptions;\n public tags: Tags;\n public trace: LogMethod;\n public var: (messageObject: unknown, messageValue?: unknown) => void;\n public warn: LogMethod;\n private levelField: false | string;\n private limits: SerializationLimits;\n\n constructor({\n format = (process.env.LOG_FORMAT as LogFormat) || DEFAULT.LEVEL,\n level = process.env.LOG_LEVEL || DEFAULT.LEVEL,\n levelField,\n maxDepth,\n maxEntryBytes,\n maxStringLength,\n tags = {},\n varLevel = process.env.LOG_VAR_LEVEL || DEFAULT.VAR_LEVEL,\n }: LoggerOptions = {}) {\n this.levelField = resolveLevelField(levelField);\n this.limits = resolveSerializationLimits({\n maxDepth,\n maxEntryBytes,\n maxStringLength,\n });\n this.options = {\n format,\n level,\n levelField: this.levelField || undefined,\n // Pin resolved limits (false = explicitly off) so child loggers\n // created via with() inherit this config instead of re-resolving\n maxDepth: this.limits.maxDepth ?? false,\n maxEntryBytes: this.limits.maxEntryBytes ?? false,\n maxStringLength: this.limits.maxStringLength ?? false,\n varLevel,\n };\n\n this.tags = {};\n Object.keys(tags).forEach((key) => {\n this.tags[key] = forceString(tags[key]);\n });\n\n this.debug = this.createLogMethod(LEVEL.DEBUG, format, level);\n this.error = this.createLogMethod(LEVEL.ERROR, format, level);\n this.fatal = this.createLogMethod(LEVEL.FATAL, format, level);\n this.info = this.createLogMethod(LEVEL.INFO, format, level);\n this.trace = this.createLogMethod(LEVEL.TRACE, format, level);\n this.warn = this.createLogMethod(LEVEL.WARN, format, level);\n\n const varLevelMethod =\n this[varLevel as \"debug\" | \"error\" | \"fatal\" | \"info\" | \"trace\" | \"warn\"];\n this.var = (varLevelMethod as LogMethod)?.var || this.debug.var;\n }\n\n private createLogMethod(\n logLevel: string,\n format: LogFormat,\n checkLevel: string,\n ): LogMethod {\n const logFn = (...messages: unknown[]): void => {\n if (LEVEL_VALUES[logLevel] <= LEVEL_VALUES[checkLevel]) {\n let sanitized = messages.map(sanitizeAuth);\n if (hasValueLimits(this.limits)) {\n sanitized = sanitized.map((item) =>\n applyValueLimits(item, this.limits),\n );\n }\n if (format === FORMAT.JSON) {\n let message = stringify(...sanitized);\n let parses = parsesTo(message);\n // When data comes from the full message they mirror each other;\n // entry-limit truncation must keep them in sync\n let syncMessageToData = parses.parses;\n const last = sanitized[sanitized.length - 1];\n if (\n sanitized.length > 1 &&\n typeof last === \"object\" &&\n last !== null &&\n sanitized\n .slice(0, -1)\n .every((item) => typeof item !== \"object\" || item === null)\n ) {\n const lastParses = parsesTo(stringify(last));\n if (lastParses.parses) {\n message = stringify(...sanitized.slice(0, -1));\n parses = lastParses;\n syncMessageToData = false;\n }\n }\n const json: LogJson = {\n message,\n ...this.tags,\n };\n if (parses.parses) {\n json.data = parses.message;\n }\n if (this.levelField) {\n json[this.levelField] = logLevel;\n }\n let entry: LogJson = json;\n if (this.limits.maxEntryBytes !== undefined) {\n entry = enforceEntryLimit(json, {\n maxEntryBytes: this.limits.maxEntryBytes,\n syncMessageToData,\n }) as LogJson;\n }\n out(entry, { level: logLevel });\n } else {\n let message = stringify(...sanitized);\n if (this.limits.maxEntryBytes !== undefined) {\n message = truncateToBudget(message, this.limits.maxEntryBytes);\n }\n out(message, { level: logLevel });\n }\n }\n };\n\n logFn.var = (messageObject: unknown, messageValue?: unknown): void => {\n if (messageObject === undefined) {\n this.warn(ERROR.VAR.UNDEFINED_MESSAGE);\n }\n\n let msgObj: Record<string, unknown>;\n\n if (typeof messageObject !== \"object\" || messageObject === null) {\n if (typeof messageObject !== \"object\") {\n if (messageValue === undefined) messageValue = \"undefined\";\n msgObj = { [String(messageObject)]: messageValue };\n } else {\n this.warn(ERROR.VAR.NULL_OBJECT);\n return logFn(messageObject);\n }\n } else {\n msgObj = sanitizeAuth(messageObject) as Record<string, unknown>;\n }\n\n const keys = Object.keys(msgObj);\n if (keys.length === 0) {\n this.warn(ERROR.VAR.EMPTY_OBJECT);\n return logFn(msgObj);\n }\n\n if (keys.length > 1) {\n this.warn(ERROR.VAR.MULTIPLE_KEYS);\n return logFn(msgObj);\n }\n\n if (format === FORMAT.JSON) {\n const messageKey = keys[0];\n let messageVal = msgObj[messageKey];\n\n for (const pipeline of pipelines) {\n if (messageKey === pipeline.key) {\n messageVal = pipeline.filter(messageVal);\n }\n }\n messageVal = filterByType(messageVal);\n if (hasValueLimits(this.limits)) {\n messageVal = applyValueLimits(messageVal, this.limits);\n }\n\n const json: LogJson = {\n data: parse(messageVal),\n dataType: typeof messageVal,\n message: stringify(messageVal),\n var: messageKey,\n ...this.tags,\n };\n if (this.levelField) {\n json[this.levelField] = logLevel;\n }\n\n if (LEVEL_VALUES[logLevel] <= LEVEL_VALUES[checkLevel]) {\n let entry: LogJson = json;\n if (this.limits.maxEntryBytes !== undefined) {\n entry = enforceEntryLimit(json, {\n maxEntryBytes: this.limits.maxEntryBytes,\n syncMessageToData: true,\n }) as LogJson;\n }\n out(entry, { level: logLevel });\n }\n } else {\n return logFn(msgObj);\n }\n };\n\n return logFn as LogMethod;\n }\n\n /**\n * Update serialization limits at runtime. Pass a number to set a limit,\n * `false` to disable one; omitted keys are unchanged.\n */\n public config(options: SerializationLimitOptions = {}): void {\n this.limits = resolveSerializationLimits({\n maxDepth: options.maxDepth ?? this.limits.maxDepth ?? false,\n maxEntryBytes:\n options.maxEntryBytes ?? this.limits.maxEntryBytes ?? false,\n maxStringLength:\n options.maxStringLength ?? this.limits.maxStringLength ?? false,\n });\n this.options.maxDepth = this.limits.maxDepth ?? false;\n this.options.maxEntryBytes = this.limits.maxEntryBytes ?? false;\n this.options.maxStringLength = this.limits.maxStringLength ?? false;\n }\n\n public tag(key: unknown, value?: unknown): void {\n if (value) {\n this.tags[forceString(key)] = forceString(value);\n return;\n }\n\n if (Array.isArray(key)) {\n key.forEach((k) => {\n this.tags[forceString(k)] = \"\";\n });\n return;\n }\n\n if (key === null) {\n this.tags.null = \"\";\n return;\n }\n\n if (typeof key === \"object\") {\n Object.keys(key).forEach((k) => {\n this.tags[forceString(k)] = forceString(\n (key as Record<string, unknown>)[k],\n );\n });\n } else {\n this.tags[forceString(key)] = \"\";\n }\n }\n\n public untag(key: unknown): void {\n if (Array.isArray(key)) {\n key.forEach((k) => {\n delete this.tags[forceString(k)];\n });\n return;\n }\n\n if (key === null) {\n delete this.tags.null;\n return;\n }\n\n if (typeof key === \"object\") {\n Object.keys(key as object).forEach((k) => {\n delete this.tags[forceString(k)];\n });\n } else {\n delete this.tags[forceString(key)];\n }\n }\n\n public with(key: unknown, value?: unknown): Logger {\n const logger = new Logger(this.options);\n logger.tag(this.tags);\n logger.tag(key, value);\n return logger;\n }\n}\n\nexport default Logger;\n","export function logTags(\n withTags?: Record<string, string>,\n): Record<string, string> {\n if (withTags && typeof withTags !== \"object\") {\n withTags = {};\n }\n\n const {\n PROJECT_COMMIT,\n PROJECT_ENV,\n PROJECT_KEY,\n PROJECT_SERVICE,\n PROJECT_SPONSOR,\n PROJECT_VERSION,\n } = process.env;\n\n const tags: Record<string, string> = {};\n\n if (PROJECT_COMMIT) {\n tags.commit = PROJECT_COMMIT;\n }\n if (PROJECT_ENV) {\n tags.env = PROJECT_ENV;\n }\n if (PROJECT_KEY) {\n tags.project = PROJECT_KEY;\n }\n if (PROJECT_SERVICE) {\n tags.service = PROJECT_SERVICE;\n }\n if (PROJECT_SPONSOR) {\n tags.sponsor = PROJECT_SPONSOR;\n }\n if (process.env.npm_package_version || PROJECT_VERSION) {\n tags.version = (process.env.npm_package_version ||\n PROJECT_VERSION) as string;\n }\n\n return {\n ...tags,\n ...withTags,\n };\n}\n","import { forceString } from \"./utils\";\n\nexport function forceVar(\n key: unknown,\n value?: unknown,\n): Record<string, unknown> {\n if (typeof key === \"undefined\") {\n return {};\n }\n if (typeof key === \"object\" && key !== null) {\n if (Object.keys(key).length === 1) {\n return key as Record<string, unknown>;\n } else {\n return { value: key };\n }\n }\n const keyStr = forceString(key);\n if (typeof value === \"undefined\") {\n return { [keyStr]: \"\" };\n } else {\n return { [keyStr]: value };\n }\n}\n","import { forceVar } from \"./forceVar\";\nimport { filterByType, pipelines } from \"./pipelines\";\n\nfunction keyValueToArray(keyValue: Record<string, unknown>): [string, unknown] {\n const key = Object.keys(keyValue)[0];\n return [key, keyValue[key]];\n}\n\nexport function logVar(key: unknown, value?: unknown): Record<string, unknown> {\n let [k, v] = keyValueToArray(forceVar(key, value));\n\n for (const pipeline of pipelines) {\n if (k === pipeline.key) {\n v = pipeline.filter(v);\n }\n }\n v = filterByType(v);\n\n return { [k]: v };\n}\n","import Logger from \"./Logger\";\nimport { DEFAULT, FORMAT, LEVEL } from \"./constants\";\nimport { _resetDatadogTransport } from \"./datadogTransport\";\nimport { SerializationLimitOptions } from \"./limits\";\nimport { logTags } from \"./logTags\";\nimport { logVar } from \"./logVar\";\n\ninterface JaypieLoggerOptions extends SerializationLimitOptions {\n level?: string;\n tags?: Record<string, string>;\n}\n\nfunction envBoolean(\n key: string,\n { defaultValue }: { defaultValue: boolean },\n): boolean {\n const value = process.env[key];\n if (value === undefined) return defaultValue;\n const lower = value.toLowerCase();\n return !(\n lower === \"\" ||\n lower === \"0\" ||\n lower === \"f\" ||\n lower === \"false\" ||\n lower === \"n\" ||\n lower === \"no\"\n );\n}\n\nexport class JaypieLogger {\n public debug: Logger[\"debug\"];\n public error: Logger[\"error\"];\n public fatal: Logger[\"fatal\"];\n public info: Logger[\"info\"];\n public level: string;\n public trace: Logger[\"trace\"];\n public var: Logger[\"var\"];\n public warn: Logger[\"warn\"];\n\n private _errorCount: number = 0;\n private _logger: Logger;\n private _loggers: Logger[];\n private _params: JaypieLoggerOptions;\n private _report: Record<string, unknown> = {};\n private _sessionActive: boolean = false;\n private _tags: Record<string, string>;\n private _warnCount: number = 0;\n private _withLoggers: Record<string, JaypieLogger>;\n\n constructor({\n level = process.env.LOG_LEVEL,\n maxDepth,\n maxEntryBytes,\n maxStringLength,\n tags = {},\n }: JaypieLoggerOptions = {}) {\n this._params = { level, maxDepth, maxEntryBytes, maxStringLength, tags };\n this._loggers = [];\n this._tags = {};\n this._withLoggers = {};\n\n this.level = level || DEFAULT.LEVEL;\n\n this._tags = { ...logTags(), ...tags };\n this._logger = new Logger({\n format: FORMAT.JSON,\n level: this.level,\n maxDepth,\n maxEntryBytes,\n maxStringLength,\n tags: this._tags,\n });\n this._loggers = [this._logger];\n\n this.debug = ((...args: any[]) =>\n this._logger.debug(...args)) as Logger[\"debug\"];\n this.debug.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.debug.var(messageObject, messageValue);\n\n this.error = ((...args: any[]) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.error(...args);\n }) as Logger[\"error\"];\n this.error.var = (messageObject: unknown, messageValue?: unknown) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.error.var(messageObject, messageValue);\n };\n\n this.fatal = ((...args: any[]) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.fatal(...args);\n }) as Logger[\"fatal\"];\n this.fatal.var = (messageObject: unknown, messageValue?: unknown) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.fatal.var(messageObject, messageValue);\n };\n\n this.info = ((...args: any[]) =>\n this._logger.info(...args)) as Logger[\"info\"];\n this.info.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.info.var(messageObject, messageValue);\n\n this.trace = ((...args: any[]) =>\n this._logger.trace(...args)) as Logger[\"trace\"];\n this.trace.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.trace.var(messageObject, messageValue);\n\n this.warn = ((...args: any[]) => {\n if (this._sessionActive) this._warnCount++;\n this._logger.warn(...args);\n }) as Logger[\"warn\"];\n this.warn.var = (messageObject: unknown, messageValue?: unknown) => {\n if (this._sessionActive) this._warnCount++;\n this._logger.warn.var(messageObject, messageValue);\n };\n\n this.var = (messageObject: unknown, messageValue?: unknown) =>\n this._logger.var(logVar(messageObject, messageValue));\n }\n\n /**\n * Update serialization limits at runtime for this logger and all loggers\n * derived from it (lib, with, flag). Pass a number to set a limit,\n * `false` to disable one; omitted keys are unchanged. Persists across\n * init().\n */\n public config(options: SerializationLimitOptions = {}): void {\n if (options.maxDepth !== undefined) {\n this._params.maxDepth = options.maxDepth;\n }\n if (options.maxEntryBytes !== undefined) {\n this._params.maxEntryBytes = options.maxEntryBytes;\n }\n if (options.maxStringLength !== undefined) {\n this._params.maxStringLength = options.maxStringLength;\n }\n for (const logger of this._loggers) {\n logger.config(options);\n }\n for (const key of Object.keys(this._withLoggers)) {\n this._withLoggers[key].config(options);\n }\n }\n\n public flag(flag?: string): JaypieLogger {\n if (typeof flag !== \"string\" || flag === \"\") {\n return this;\n }\n return this.with({ flag });\n }\n\n public init(): void {\n _resetDatadogTransport();\n for (const logger of this._loggers) {\n if (\"init\" in logger && typeof logger.init === \"function\") {\n (logger as Logger & { init: () => void }).init();\n }\n }\n const level = this._params.level;\n const tags = this._params.tags;\n this.level = level || DEFAULT.LEVEL;\n this._tags = { ...logTags(), ...tags };\n this._logger = new Logger({\n format: FORMAT.JSON,\n level: this.level,\n maxDepth: this._params.maxDepth,\n maxEntryBytes: this._params.maxEntryBytes,\n maxStringLength: this._params.maxStringLength,\n tags: this._tags,\n });\n this._loggers = [this._logger];\n this._withLoggers = {};\n\n // Reset session state\n this._errorCount = 0;\n this._report = {};\n this._sessionActive = false;\n this._warnCount = 0;\n\n const levels = [\n \"debug\",\n \"error\",\n \"fatal\",\n \"info\",\n \"trace\",\n \"warn\",\n ] as const;\n levels.forEach((lvl) => {\n if (lvl === \"error\") {\n this.error = ((...args: any[]) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.error(...args);\n }) as any;\n this.error.var = (messageObject: unknown, messageValue?: unknown) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.error.var(messageObject, messageValue);\n };\n } else if (lvl === \"fatal\") {\n this.fatal = ((...args: any[]) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.fatal(...args);\n }) as any;\n this.fatal.var = (messageObject: unknown, messageValue?: unknown) => {\n if (this._sessionActive) this._errorCount++;\n this._logger.fatal.var(messageObject, messageValue);\n };\n } else if (lvl === \"warn\") {\n this.warn = ((...args: any[]) => {\n if (this._sessionActive) this._warnCount++;\n this._logger.warn(...args);\n }) as any;\n this.warn.var = (messageObject: unknown, messageValue?: unknown) => {\n if (this._sessionActive) this._warnCount++;\n this._logger.warn.var(messageObject, messageValue);\n };\n } else {\n this[lvl] = ((...args: any[]) => {\n this._logger[lvl](...args);\n }) as any;\n this[lvl].var = (messageObject: unknown, messageValue?: unknown) => {\n this._logger[lvl].var(messageObject, messageValue);\n };\n }\n });\n }\n\n public lib({\n level,\n lib,\n tags = {},\n }: {\n level?: string;\n lib?: string;\n tags?: Record<string, string>;\n } = {}): JaypieLogger {\n const newTags = Object.assign({}, this._tags, tags);\n if (lib) {\n newTags.lib = lib;\n }\n\n const logger = new JaypieLogger({\n level: (() => {\n if (level) {\n return level;\n }\n if (process.env.MODULE_LOG_LEVEL) {\n return process.env.MODULE_LOG_LEVEL;\n }\n if (envBoolean(\"MODULE_LOGGER\", { defaultValue: false })) {\n return process.env.LOG_LEVEL;\n }\n return LEVEL.SILENT;\n })(),\n maxDepth: this._params.maxDepth,\n maxEntryBytes: this._params.maxEntryBytes,\n maxStringLength: this._params.maxStringLength,\n tags: newTags,\n });\n this._loggers.push(logger._logger);\n return logger;\n }\n\n /**\n * Merge data into the current session's report. Requires an active\n * session (started via setup()); logs a warning and is a no-op otherwise.\n * Warns when overwriting an existing key. Emitted by teardown().\n */\n public report(data: Record<string, unknown>): void {\n if (!this._sessionActive) {\n this.warn(\"[logger] report() called without active session\");\n return;\n }\n for (const key of Object.keys(data)) {\n if (key in this._report) {\n this.warn(`[logger] Overwriting report key: ${key}`);\n }\n }\n Object.assign(this._report, data);\n }\n\n /**\n * Start a report session: resets warn/error counters and accumulated\n * report data, applies optional tags. Pair with teardown() to bookend a\n * request. Handlers call this automatically.\n */\n public setup(tags?: Record<string, unknown>): void {\n if (this._sessionActive) {\n this.warn(\"[logger] setup() called while session already active\");\n }\n this._errorCount = 0;\n this._report = {};\n this._sessionActive = true;\n this._warnCount = 0;\n if (tags) {\n this.tag(tags);\n }\n }\n\n public tag(tags: Record<string, unknown>): void {\n for (const logger of this._loggers) {\n logger.tag(tags);\n }\n Object.assign(this._tags, tags);\n }\n\n /**\n * End the current report session: emits log.info.var({ report }) with\n * accumulated report() data plus { log: { warn, warns, error, errors } }\n * counts, then resets session state. No-op if no session is active.\n * Handlers call this automatically.\n */\n public teardown(): void {\n if (!this._sessionActive) {\n return;\n }\n const finalReport = {\n ...this._report,\n log: {\n error: this._errorCount > 0,\n errors: this._errorCount,\n warn: this._warnCount > 0,\n warns: this._warnCount,\n },\n };\n this.info.var({ report: finalReport });\n this._errorCount = 0;\n this._report = {};\n this._sessionActive = false;\n this._warnCount = 0;\n }\n\n public untag(key: unknown): void {\n for (const logger of this._loggers) {\n logger.untag(key);\n }\n if (Array.isArray(key)) {\n key.forEach((k) => {\n delete this._tags[String(k)];\n });\n } else if (typeof key === \"object\" && key !== null) {\n Object.keys(key).forEach((k) => {\n delete this._tags[k];\n });\n } else {\n delete this._tags[String(key)];\n }\n }\n\n public with(key: unknown, value?: unknown): JaypieLogger {\n if (!key || (typeof key !== \"object\" && value === undefined)) {\n throw new Error(\n \"ConfigurationError: with() requires an object argument or key-value pair\",\n );\n }\n const loggerKey = JSON.stringify([key, value]);\n if (Object.keys(this._withLoggers).includes(loggerKey)) {\n return this._withLoggers[loggerKey];\n }\n const logger = new JaypieLogger({\n level: this.level,\n maxDepth: this._params.maxDepth,\n maxEntryBytes: this._params.maxEntryBytes,\n maxStringLength: this._params.maxStringLength,\n tags: { ...this._tags },\n });\n logger._logger = this._logger.with(key, value);\n logger._loggers = [logger._logger];\n this._withLoggers[loggerKey] = logger;\n this._loggers.push(logger._logger);\n return logger;\n }\n}\n\nexport function createLogger(tags: Record<string, string> = {}): JaypieLogger {\n const jaypieLogger = new JaypieLogger({\n tags,\n });\n return jaypieLogger;\n}\n\nexport default JaypieLogger;\n","import Logger from \"./Logger\";\nimport { createLogger } from \"./JaypieLogger\";\nimport { FORMAT, LEVEL } from \"./constants\";\nimport {\n _resetDatadogTransport,\n getDatadogTransport,\n isDatadogForwardingEnabled,\n} from \"./datadogTransport\";\nimport { redactAuth, sanitizeAuth } from \"./sanitizeAuth\";\n\nexport {\n FORMAT,\n LEVEL,\n Logger,\n _resetDatadogTransport,\n createLogger,\n getDatadogTransport,\n isDatadogForwardingEnabled,\n redactAuth,\n sanitizeAuth,\n};\nexport type { SerializationLimitOptions, SerializationLimits } from \"./limits\";\nexport { JaypieLogger } from \"./JaypieLogger\";\n\nexport const log = createLogger();\n\nexport default log;\n"],"names":["envBoolean"],"mappings":"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"}
@@ -4,7 +4,7 @@ interface JaypieLoggerOptions extends SerializationLimitOptions {
4
4
  level?: string;
5
5
  tags?: Record<string, string>;
6
6
  }
7
- declare class JaypieLogger {
7
+ export declare class JaypieLogger {
8
8
  debug: Logger["debug"];
9
9
  error: Logger["error"];
10
10
  fatal: Logger["fatal"];
@@ -37,9 +37,25 @@ declare class JaypieLogger {
37
37
  lib?: string;
38
38
  tags?: Record<string, string>;
39
39
  }): JaypieLogger;
40
+ /**
41
+ * Merge data into the current session's report. Requires an active
42
+ * session (started via setup()); logs a warning and is a no-op otherwise.
43
+ * Warns when overwriting an existing key. Emitted by teardown().
44
+ */
40
45
  report(data: Record<string, unknown>): void;
46
+ /**
47
+ * Start a report session: resets warn/error counters and accumulated
48
+ * report data, applies optional tags. Pair with teardown() to bookend a
49
+ * request. Handlers call this automatically.
50
+ */
41
51
  setup(tags?: Record<string, unknown>): void;
42
52
  tag(tags: Record<string, unknown>): void;
53
+ /**
54
+ * End the current report session: emits log.info.var({ report }) with
55
+ * accumulated report() data plus { log: { warn, warns, error, errors } }
56
+ * counts, then resets session state. No-op if no session is active.
57
+ * Handlers call this automatically.
58
+ */
43
59
  teardown(): void;
44
60
  untag(key: unknown): void;
45
61
  with(key: unknown, value?: unknown): JaypieLogger;
@@ -5,5 +5,6 @@ import { _resetDatadogTransport, getDatadogTransport, isDatadogForwardingEnabled
5
5
  import { redactAuth, sanitizeAuth } from "./sanitizeAuth";
6
6
  export { FORMAT, LEVEL, Logger, _resetDatadogTransport, createLogger, getDatadogTransport, isDatadogForwardingEnabled, redactAuth, sanitizeAuth, };
7
7
  export type { SerializationLimitOptions, SerializationLimits } from "./limits";
8
- export declare const log: import("./JaypieLogger").default;
8
+ export { JaypieLogger } from "./JaypieLogger";
9
+ export declare const log: import("./JaypieLogger").JaypieLogger;
9
10
  export default log;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jaypie/logger",
3
- "version": "1.2.19",
3
+ "version": "1.2.20",
4
4
  "description": "Logger utilities for Jaypie applications",
5
5
  "repository": {
6
6
  "type": "git",