evlog 2.11.0 → 2.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/README.md +4 -2
  2. package/dist/{_drain-YH8ERc5l.mjs → _drain-CmCtsuF6.mjs} +1 -1
  3. package/dist/{_drain-YH8ERc5l.mjs.map → _drain-CmCtsuF6.mjs.map} +1 -1
  4. package/dist/{_http-C_2wbJw3.mjs → _http-CHSsrWDJ.mjs} +2 -2
  5. package/dist/{_http-C_2wbJw3.mjs.map → _http-CHSsrWDJ.mjs.map} +1 -1
  6. package/dist/{_severity-BZhz3f9e.mjs → _severity-CQijvfhU.mjs} +1 -1
  7. package/dist/{_severity-BZhz3f9e.mjs.map → _severity-CQijvfhU.mjs.map} +1 -1
  8. package/dist/adapters/axiom.d.mts +1 -1
  9. package/dist/adapters/axiom.mjs +2 -2
  10. package/dist/adapters/better-stack.d.mts +1 -1
  11. package/dist/adapters/better-stack.mjs +2 -2
  12. package/dist/adapters/datadog.d.mts +1 -1
  13. package/dist/adapters/datadog.mjs +2 -2
  14. package/dist/adapters/fs.d.mts +1 -1
  15. package/dist/adapters/fs.mjs +1 -1
  16. package/dist/adapters/hyperdx.d.mts +1 -1
  17. package/dist/adapters/hyperdx.mjs +2 -2
  18. package/dist/adapters/otlp.d.mts +1 -1
  19. package/dist/adapters/otlp.mjs +3 -3
  20. package/dist/adapters/posthog.d.mts +1 -1
  21. package/dist/adapters/posthog.mjs +2 -2
  22. package/dist/adapters/sentry.d.mts +1 -1
  23. package/dist/adapters/sentry.mjs +3 -3
  24. package/dist/ai/index.d.mts +144 -5
  25. package/dist/ai/index.d.mts.map +1 -1
  26. package/dist/ai/index.mjs +108 -5
  27. package/dist/ai/index.mjs.map +1 -1
  28. package/dist/browser.d.mts +13 -52
  29. package/dist/browser.d.mts.map +1 -1
  30. package/dist/browser.mjs +5 -81
  31. package/dist/browser.mjs.map +1 -1
  32. package/dist/client.d.mts +2 -2
  33. package/dist/client.mjs +2 -2
  34. package/dist/{dist-BFn8qsRC.mjs → dist-Do8P4zWd.mjs} +1 -1
  35. package/dist/{dist-BFn8qsRC.mjs.map → dist-Do8P4zWd.mjs.map} +1 -1
  36. package/dist/elysia/index.d.mts +2 -2
  37. package/dist/elysia/index.mjs +1 -1
  38. package/dist/enrichers.d.mts +1 -1
  39. package/dist/{error-plrBYLQk.d.mts → error-WRz4_F3W.d.mts} +2 -2
  40. package/dist/{error-plrBYLQk.d.mts.map → error-WRz4_F3W.d.mts.map} +1 -1
  41. package/dist/error.d.mts +1 -1
  42. package/dist/{errors-gH4C9KSC.mjs → errors-BJRXUfMg.mjs} +1 -1
  43. package/dist/{errors-gH4C9KSC.mjs.map → errors-BJRXUfMg.mjs.map} +1 -1
  44. package/dist/{errors-bPoj9UZk.d.mts → errors-J2kt7mZh.d.mts} +2 -2
  45. package/dist/{errors-bPoj9UZk.d.mts.map → errors-J2kt7mZh.d.mts.map} +1 -1
  46. package/dist/express/index.d.mts +2 -2
  47. package/dist/express/index.mjs +2 -2
  48. package/dist/fastify/index.d.mts +2 -2
  49. package/dist/fastify/index.mjs +2 -2
  50. package/dist/{headers-BSi3UHKL.mjs → headers-ht4yS2mx.mjs} +6 -4
  51. package/dist/headers-ht4yS2mx.mjs.map +1 -0
  52. package/dist/hono/index.d.mts +2 -2
  53. package/dist/hono/index.mjs +1 -1
  54. package/dist/http.d.mts +65 -0
  55. package/dist/http.d.mts.map +1 -0
  56. package/dist/http.mjs +94 -0
  57. package/dist/http.mjs.map +1 -0
  58. package/dist/index.d.mts +7 -6
  59. package/dist/index.mjs +3 -2
  60. package/dist/{logger-CG1eop2_.d.mts → logger-Bm0k3Hf3.d.mts} +2 -2
  61. package/dist/{logger-CG1eop2_.d.mts.map → logger-Bm0k3Hf3.d.mts.map} +1 -1
  62. package/dist/logger-DY0X5oQd.mjs +704 -0
  63. package/dist/logger-DY0X5oQd.mjs.map +1 -0
  64. package/dist/logger.d.mts +1 -1
  65. package/dist/logger.mjs +1 -361
  66. package/dist/{middleware-DojmTj9Y.d.mts → middleware-D_igVy93.d.mts} +9 -2
  67. package/dist/middleware-D_igVy93.d.mts.map +1 -0
  68. package/dist/nestjs/index.d.mts +2 -2
  69. package/dist/nestjs/index.mjs +2 -2
  70. package/dist/next/client.d.mts +9 -3
  71. package/dist/next/client.d.mts.map +1 -1
  72. package/dist/next/client.mjs +5 -3
  73. package/dist/next/client.mjs.map +1 -1
  74. package/dist/next/index.d.mts +9 -4
  75. package/dist/next/index.d.mts.map +1 -1
  76. package/dist/next/index.mjs +3 -2
  77. package/dist/next/index.mjs.map +1 -1
  78. package/dist/next/instrumentation.d.mts +3 -1
  79. package/dist/next/instrumentation.d.mts.map +1 -1
  80. package/dist/next/instrumentation.mjs +2 -1
  81. package/dist/next/instrumentation.mjs.map +1 -1
  82. package/dist/nitro/errorHandler.mjs +2 -2
  83. package/dist/nitro/module.d.mts +2 -2
  84. package/dist/nitro/plugin.mjs +23 -5
  85. package/dist/nitro/plugin.mjs.map +1 -1
  86. package/dist/nitro/v3/errorHandler.mjs +3 -3
  87. package/dist/nitro/v3/index.d.mts +2 -2
  88. package/dist/nitro/v3/module.d.mts +1 -1
  89. package/dist/nitro/v3/plugin.mjs +25 -6
  90. package/dist/nitro/v3/plugin.mjs.map +1 -1
  91. package/dist/nitro/v3/useLogger.d.mts +1 -1
  92. package/dist/{nitro-CfGx0wDJ.d.mts → nitro-BeRXZcBd.d.mts} +13 -2
  93. package/dist/nitro-BeRXZcBd.d.mts.map +1 -0
  94. package/dist/{nitro-Dpq5ZmcM.mjs → nitro-OmT_M4Pb.mjs} +2 -2
  95. package/dist/nitro-OmT_M4Pb.mjs.map +1 -0
  96. package/dist/{nitroConfigBridge-fidbf-Y_.mjs → nitroConfigBridge-C37lXaNm.mjs} +1 -1
  97. package/dist/{nitroConfigBridge-fidbf-Y_.mjs.map → nitroConfigBridge-C37lXaNm.mjs.map} +1 -1
  98. package/dist/nuxt/module.d.mts +26 -1
  99. package/dist/nuxt/module.d.mts.map +1 -1
  100. package/dist/nuxt/module.mjs +10 -3
  101. package/dist/nuxt/module.mjs.map +1 -1
  102. package/dist/{parseError-B_qXj8x4.d.mts → parseError-DhXS_vzM.d.mts} +2 -2
  103. package/dist/parseError-DhXS_vzM.d.mts.map +1 -0
  104. package/dist/react-router/index.d.mts +2 -2
  105. package/dist/react-router/index.mjs +2 -2
  106. package/dist/{routes-CE3_c-iZ.mjs → routes-CGPmbzCZ.mjs} +1 -1
  107. package/dist/{routes-CE3_c-iZ.mjs.map → routes-CGPmbzCZ.mjs.map} +1 -1
  108. package/dist/runtime/client/log.d.mts +7 -2
  109. package/dist/runtime/client/log.d.mts.map +1 -1
  110. package/dist/runtime/client/log.mjs +24 -6
  111. package/dist/runtime/client/log.mjs.map +1 -1
  112. package/dist/runtime/client/plugin.mjs +1 -0
  113. package/dist/runtime/client/plugin.mjs.map +1 -1
  114. package/dist/runtime/server/routes/_evlog/ingest.post.mjs +1 -1
  115. package/dist/runtime/server/useLogger.d.mts +1 -1
  116. package/dist/runtime/utils/parseError.d.mts +2 -2
  117. package/dist/runtime/utils/parseError.mjs +1 -1
  118. package/dist/{source-location-B1VVgXkh.mjs → source-location-DRvDDqfq.mjs} +1 -1
  119. package/dist/{source-location-B1VVgXkh.mjs.map → source-location-DRvDDqfq.mjs.map} +1 -1
  120. package/dist/{storage-B6NPh8rV.mjs → storage-DpLJYMoc.mjs} +1 -1
  121. package/dist/{storage-B6NPh8rV.mjs.map → storage-DpLJYMoc.mjs.map} +1 -1
  122. package/dist/sveltekit/index.d.mts +2 -2
  123. package/dist/sveltekit/index.mjs +4 -4
  124. package/dist/toolkit.d.mts +3 -3
  125. package/dist/toolkit.mjs +4 -4
  126. package/dist/{types-v_JkG_D7.d.mts → types-D5OwxZCw.d.mts} +71 -2
  127. package/dist/types-D5OwxZCw.d.mts.map +1 -0
  128. package/dist/types.d.mts +2 -2
  129. package/dist/{useLogger-TjKH37BO.d.mts → useLogger-Dcj1Nrsa.d.mts} +2 -2
  130. package/dist/{useLogger-TjKH37BO.d.mts.map → useLogger-Dcj1Nrsa.d.mts.map} +1 -1
  131. package/dist/utils-Bnc95-VC.d.mts +54 -0
  132. package/dist/utils-Bnc95-VC.d.mts.map +1 -0
  133. package/dist/utils.d.mts +2 -50
  134. package/dist/utils.mjs +13 -1
  135. package/dist/utils.mjs.map +1 -1
  136. package/dist/vite/index.d.mts +5 -1
  137. package/dist/vite/index.d.mts.map +1 -1
  138. package/dist/vite/index.mjs +3 -1
  139. package/dist/vite/index.mjs.map +1 -1
  140. package/dist/workers.d.mts +1 -1
  141. package/dist/workers.mjs +1 -1
  142. package/package.json +24 -16
  143. package/dist/headers-BSi3UHKL.mjs.map +0 -1
  144. package/dist/logger.mjs.map +0 -1
  145. package/dist/middleware-DojmTj9Y.d.mts.map +0 -1
  146. package/dist/nitro-CfGx0wDJ.d.mts.map +0 -1
  147. package/dist/nitro-Dpq5ZmcM.mjs.map +0 -1
  148. package/dist/parseError-B_qXj8x4.d.mts.map +0 -1
  149. package/dist/types-v_JkG_D7.d.mts.map +0 -1
  150. package/dist/utils.d.mts.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import { filterSafeHeaders } from "./utils.mjs";
2
- import { createRequestLogger, getGlobalDrain, isEnabled, shouldKeep } from "./logger.mjs";
3
- import { t as extractErrorStatus } from "./errors-gH4C9KSC.mjs";
4
- import { n as shouldLog, t as getServiceForPath } from "./routes-CE3_c-iZ.mjs";
2
+ import { a as getGlobalDrain, f as redactEvent, p as resolveRedactConfig, r as createRequestLogger, s as isEnabled, u as shouldKeep } from "./logger-DY0X5oQd.mjs";
3
+ import { t as extractErrorStatus } from "./errors-BJRXUfMg.mjs";
4
+ import { n as shouldLog, t as getServiceForPath } from "./routes-CGPmbzCZ.mjs";
5
5
  //#region src/shared/middleware.ts
6
6
  const noopResult = {
7
7
  logger: {
@@ -20,6 +20,8 @@ const noopResult = {
20
20
  skipped: true
21
21
  };
22
22
  async function runEnrichAndDrain(emittedEvent, options, requestInfo, responseStatus) {
23
+ const resolvedRedact = resolveRedactConfig(options.redact);
24
+ if (resolvedRedact) redactEvent(emittedEvent, resolvedRedact);
23
25
  if (options.enrich) {
24
26
  const enrichCtx = {
25
27
  event: emittedEvent,
@@ -139,4 +141,4 @@ function extractSafeNodeHeaders(headers) {
139
141
  //#endregion
140
142
  export { extractSafeNodeHeaders as n, createMiddlewareLogger as r, extractSafeHeaders as t };
141
143
 
142
- //# sourceMappingURL=headers-BSi3UHKL.mjs.map
144
+ //# sourceMappingURL=headers-ht4yS2mx.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headers-ht4yS2mx.mjs","names":[],"sources":["../src/shared/middleware.ts","../src/shared/headers.ts"],"sourcesContent":["import type { DrainContext, EnrichContext, RedactConfig, RequestLogger, RouteConfig, TailSamplingContext, WideEvent } from '../types'\nimport { createRequestLogger, getGlobalDrain, isEnabled, shouldKeep } from '../logger'\nimport { redactEvent, resolveRedactConfig } from '../redact'\nimport { extractErrorStatus } from './errors'\nimport { shouldLog, getServiceForPath } from './routes'\n\n/**\n * Base options shared by all framework integrations.\n *\n * Every framework-specific options interface (e.g. `EvlogExpressOptions`)\n * extends this type. If a framework needs extra fields it can add them\n * on top; otherwise the base is used as-is.\n *\n * @beta Part of `evlog/toolkit` — the public API for building custom integrations.\n */\nexport interface BaseEvlogOptions {\n /** Route patterns to include in logging (glob). If not set, all routes are logged */\n include?: string[]\n /** Route patterns to exclude from logging. Exclusions take precedence over inclusions */\n exclude?: string[]\n /** Route-specific service configuration */\n routes?: Record<string, RouteConfig>\n /**\n * Drain callback called with every emitted event.\n * Use with drain adapters (Axiom, OTLP, Sentry, etc.) or custom endpoints.\n */\n drain?: (ctx: DrainContext) => void | Promise<void>\n /**\n * Enrich callback called after emit, before drain.\n * Use to add derived context (geo, deployment info, user agent, etc.).\n */\n enrich?: (ctx: EnrichContext) => void | Promise<void>\n /**\n * Custom tail sampling callback.\n * Set `ctx.shouldKeep = true` to force-keep the log regardless of head sampling.\n */\n keep?: (ctx: TailSamplingContext) => void | Promise<void>\n /**\n * Auto-redaction configuration for PII protection.\n * `true` enables all built-in PII patterns. Pass an object for fine-grained control.\n * Applied before enrich/drain. Also applied at the core `emitWideEvent` level\n * when configured via `initLogger()`.\n */\n redact?: boolean | RedactConfig\n}\n\n/**\n * Internal options consumed by `createMiddlewareLogger`.\n * Extends `BaseEvlogOptions` with the request-specific fields\n * that framework adapters must provide.\n */\nexport interface MiddlewareLoggerOptions extends BaseEvlogOptions {\n method: string\n path: string\n requestId?: string\n /** Pre-filtered safe request headers (used for enrich/drain context) */\n headers?: Record<string, string>\n}\n\nexport interface MiddlewareLoggerResult {\n logger: RequestLogger\n finish: (opts?: { status?: number; error?: Error }) => Promise<WideEvent | null>\n skipped: boolean\n}\n\nconst noopResult: MiddlewareLoggerResult = {\n logger: {\n set() {},\n error() {},\n info() {},\n warn() {},\n emit() {\n return null \n },\n getContext() {\n return {} \n },\n },\n finish: () => Promise.resolve(null),\n skipped: true,\n}\n\nasync function runEnrichAndDrain(\n emittedEvent: WideEvent,\n options: MiddlewareLoggerOptions,\n requestInfo: { method: string; path: string; requestId?: string },\n responseStatus?: number,\n): Promise<void> {\n const resolvedRedact = resolveRedactConfig(options.redact)\n if (resolvedRedact) {\n redactEvent(emittedEvent, resolvedRedact)\n }\n\n if (options.enrich) {\n const enrichCtx: EnrichContext = {\n event: emittedEvent,\n request: requestInfo,\n headers: options.headers,\n response: { status: responseStatus },\n }\n try {\n await options.enrich(enrichCtx)\n } catch (err) {\n console.error('[evlog] enrich failed:', err)\n }\n }\n\n const drain = options.drain ?? getGlobalDrain()\n if (drain) {\n const drainCtx: DrainContext = {\n event: emittedEvent,\n request: requestInfo,\n headers: options.headers,\n }\n try {\n await drain(drainCtx)\n } catch (err) {\n console.error('[evlog] drain failed:', err)\n }\n }\n}\n\n/**\n * Create a middleware-aware request logger with full lifecycle management.\n *\n * Handles the complete pipeline shared across all framework integrations:\n * route filtering, logger creation, service overrides, duration tracking,\n * tail sampling evaluation, event emission, enrichment, and draining.\n *\n * Framework adapters only need to:\n * 1. Extract method/path/requestId/headers from the framework request\n * 2. Call `createMiddlewareLogger()` with those + user options\n * 3. Check `skipped` — if true, skip to next middleware\n * 4. Store `logger` in framework-specific context (e.g., `c.set('log', logger)`)\n * 5. Call `finish({ status })` or `finish({ error })` at response end\n *\n * @beta Part of `evlog/toolkit` — the public API for building custom integrations.\n */\nexport function createMiddlewareLogger(options: MiddlewareLoggerOptions): MiddlewareLoggerResult {\n if (!isEnabled()) return noopResult\n\n const { method, path, requestId, include, exclude, routes, keep } = options\n\n if (!shouldLog(path, include, exclude)) {\n return noopResult\n }\n\n const resolvedRequestId = requestId || crypto.randomUUID()\n\n const logger = createRequestLogger({\n method,\n path,\n requestId: resolvedRequestId,\n }, { _deferDrain: true })\n\n const routeService = getServiceForPath(path, routes)\n if (routeService) {\n logger.set({ service: routeService })\n }\n\n const startTime = Date.now()\n const requestInfo = { method, path, requestId: resolvedRequestId }\n\n const finish = async (opts?: { status?: number; error?: Error }): Promise<WideEvent | null> => {\n const { status, error } = opts ?? {}\n\n if (error) {\n logger.error(error)\n const errorStatus = extractErrorStatus(error)\n logger.set({ status: errorStatus })\n } else if (status !== undefined) {\n logger.set({ status })\n }\n\n const durationMs = Date.now() - startTime\n\n const resolvedStatus = error\n ? extractErrorStatus(error)\n : status ?? (logger.getContext().status as number | undefined)\n\n const tailCtx: TailSamplingContext = {\n status: resolvedStatus,\n duration: durationMs,\n path,\n method,\n context: logger.getContext(),\n shouldKeep: false,\n }\n\n if (keep) {\n await keep(tailCtx)\n }\n\n const forceKeep = tailCtx.shouldKeep || shouldKeep(tailCtx)\n const emittedEvent = logger.emit({ _forceKeep: forceKeep })\n\n if (emittedEvent && (options.enrich || options.drain || getGlobalDrain())) {\n await runEnrichAndDrain(emittedEvent, options, requestInfo, resolvedStatus)\n }\n\n return emittedEvent\n }\n\n return { logger, finish, skipped: false }\n}\n","import { filterSafeHeaders } from '../utils'\n\n/**\n * Extract headers from a Web API `Headers` object and filter out sensitive ones.\n * Works with any runtime that supports the standard `Headers` API (Hono, Elysia,\n * Nitro v3, Cloudflare Workers, Bun, Deno, etc.).\n */\nexport function extractSafeHeaders(headers: Headers): Record<string, string> {\n const raw: Record<string, string> = {}\n headers.forEach((value, key) => {\n raw[key] = value\n })\n return filterSafeHeaders(raw)\n}\n\n/**\n * Extract headers from Node.js `IncomingHttpHeaders` and filter out sensitive ones.\n * Works with Express, Fastify, and any Node.js HTTP server using `req.headers`.\n */\nexport function extractSafeNodeHeaders(headers: Record<string, string | string[] | undefined>): Record<string, string> {\n const raw: Record<string, string> = {}\n for (const [key, value] of Object.entries(headers)) {\n if (value === undefined) continue\n raw[key] = Array.isArray(value) ? value.join(', ') : value\n }\n return filterSafeHeaders(raw)\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { g as RequestLogger } from "../types-v_JkG_D7.mjs";
2
- import { t as BaseEvlogOptions } from "../middleware-DojmTj9Y.mjs";
1
+ import { _ as RequestLogger } from "../types-D5OwxZCw.mjs";
2
+ import { t as BaseEvlogOptions } from "../middleware-D_igVy93.mjs";
3
3
  import { MiddlewareHandler } from "hono";
4
4
 
5
5
  //#region src/hono/index.d.ts
@@ -1,4 +1,4 @@
1
- import { r as createMiddlewareLogger, t as extractSafeHeaders } from "../headers-BSi3UHKL.mjs";
1
+ import { r as createMiddlewareLogger, t as extractSafeHeaders } from "../headers-ht4yS2mx.mjs";
2
2
  //#region src/hono/index.ts
3
3
  /**
4
4
  * Create an evlog middleware for Hono.
@@ -0,0 +1,65 @@
1
+ import { r as DrainContext } from "./types-D5OwxZCw.mjs";
2
+ import { DrainPipelineOptions, PipelineDrainFn } from "./pipeline.mjs";
3
+
4
+ //#region src/http.d.ts
5
+ interface HttpDrainConfig {
6
+ /** URL of the server ingest endpoint */
7
+ endpoint: string;
8
+ /** Custom headers sent with each fetch request (e.g. Authorization, X-API-Key). Not applied to sendBeacon — see `useBeacon`. */
9
+ headers?: Record<string, string>;
10
+ /** Request timeout in milliseconds. @default 5000 */
11
+ timeout?: number;
12
+ /** Use sendBeacon when the page is hidden. @default true */
13
+ useBeacon?: boolean;
14
+ /** Fetch credentials mode. @default 'same-origin' */
15
+ credentials?: RequestCredentials;
16
+ }
17
+ interface HttpLogDrainOptions {
18
+ /** HTTP drain configuration (endpoint is required) */
19
+ drain: HttpDrainConfig;
20
+ /** Pipeline configuration overrides */
21
+ pipeline?: DrainPipelineOptions<DrainContext>;
22
+ /** Auto-register visibilitychange flush listener. @default true */
23
+ autoFlush?: boolean;
24
+ }
25
+ /**
26
+ * Create a low-level HTTP drain transport function (fetch / sendBeacon).
27
+ *
28
+ * Returns a function compatible with `createDrainPipeline` that sends batches
29
+ * to the configured endpoint via `fetch` (with `keepalive: true`) or
30
+ * `navigator.sendBeacon` when the page is hidden.
31
+ *
32
+ * @example
33
+ * ```ts
34
+ * import { createHttpDrain } from 'evlog/http'
35
+ * import { createDrainPipeline } from 'evlog/pipeline'
36
+ *
37
+ * const pipeline = createDrainPipeline({ batch: { size: 50 } })
38
+ * const drain = pipeline(createHttpDrain({ endpoint: '/api/logs' }))
39
+ * ```
40
+ */
41
+ declare function createHttpDrain(config: HttpDrainConfig): (batch: DrainContext[]) => Promise<void>;
42
+ /**
43
+ * Create a pre-composed HTTP log drain with pipeline, batching, and auto-flush.
44
+ *
45
+ * Returns a `PipelineDrainFn<DrainContext>` directly usable with `initLogger({ drain })`.
46
+ *
47
+ * @example
48
+ * ```ts
49
+ * import { initLogger, log } from 'evlog'
50
+ * import { createHttpLogDrain } from 'evlog/http'
51
+ *
52
+ * const drain = createHttpLogDrain({
53
+ * drain: { endpoint: '/api/logs' },
54
+ * })
55
+ * initLogger({ drain })
56
+ *
57
+ * log.info({ action: 'page_view', path: location.pathname })
58
+ * ```
59
+ */
60
+ declare function createHttpLogDrain(options: HttpLogDrainOptions): PipelineDrainFn<DrainContext> & {
61
+ dispose: () => void;
62
+ };
63
+ //#endregion
64
+ export { HttpDrainConfig, HttpLogDrainOptions, createHttpDrain, createHttpLogDrain };
65
+ //# sourceMappingURL=http.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.mts","names":[],"sources":["../src/http.ts"],"mappings":";;;;UAIiB,eAAA;;EAEf,QAAA;EAF8B;EAI9B,OAAA,GAAU,MAAA;EAMsB;EAJhC,OAAA;EAFA;EAIA,SAAA;EAFA;EAIA,WAAA,GAAc,kBAAA;AAAA;AAAA,UAGC,mBAAA;EAHiB;EAKhC,KAAA,EAAO,eAAA;EAFQ;EAIf,QAAA,GAAW,oBAAA,CAAqB,YAAA;;EAEhC,SAAA;AAAA;;;;;;;;;;;;AAmBF;;;;;iBAAgB,eAAA,CAAgB,MAAA,EAAQ,eAAA,IAAmB,KAAA,EAAO,YAAA,OAAmB,OAAA;;;;;;;;;;AA8DrF;;;;;;;;;iBAAgB,kBAAA,CAAmB,OAAA,EAAS,mBAAA,GAAsB,eAAA,CAAgB,YAAA;EAAkB,OAAA;AAAA"}
package/dist/http.mjs ADDED
@@ -0,0 +1,94 @@
1
+ import { createDrainPipeline } from "./pipeline.mjs";
2
+ //#region src/http.ts
3
+ /**
4
+ * Create a low-level HTTP drain transport function (fetch / sendBeacon).
5
+ *
6
+ * Returns a function compatible with `createDrainPipeline` that sends batches
7
+ * to the configured endpoint via `fetch` (with `keepalive: true`) or
8
+ * `navigator.sendBeacon` when the page is hidden.
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * import { createHttpDrain } from 'evlog/http'
13
+ * import { createDrainPipeline } from 'evlog/pipeline'
14
+ *
15
+ * const pipeline = createDrainPipeline({ batch: { size: 50 } })
16
+ * const drain = pipeline(createHttpDrain({ endpoint: '/api/logs' }))
17
+ * ```
18
+ */
19
+ function createHttpDrain(config) {
20
+ const { endpoint, headers: customHeaders, timeout = 5e3, useBeacon = true, credentials = "same-origin" } = config;
21
+ return async (batch) => {
22
+ if (batch.length === 0) return;
23
+ const body = JSON.stringify(batch);
24
+ if (useBeacon && typeof document !== "undefined" && document.visibilityState === "hidden" && typeof navigator !== "undefined" && typeof navigator.sendBeacon === "function") {
25
+ if (!navigator.sendBeacon(endpoint, new Blob([body], { type: "application/json" }))) throw new Error("[evlog/http] sendBeacon failed — payload may exceed browser limit");
26
+ return;
27
+ }
28
+ const controller = new AbortController();
29
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
30
+ try {
31
+ const response = await fetch(endpoint, {
32
+ method: "POST",
33
+ headers: {
34
+ "Content-Type": "application/json",
35
+ ...customHeaders
36
+ },
37
+ body,
38
+ signal: controller.signal,
39
+ keepalive: true,
40
+ credentials
41
+ });
42
+ if (!response.ok) throw new Error(`[evlog/http] Server responded with ${response.status}`);
43
+ } finally {
44
+ clearTimeout(timeoutId);
45
+ }
46
+ };
47
+ }
48
+ /**
49
+ * Create a pre-composed HTTP log drain with pipeline, batching, and auto-flush.
50
+ *
51
+ * Returns a `PipelineDrainFn<DrainContext>` directly usable with `initLogger({ drain })`.
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * import { initLogger, log } from 'evlog'
56
+ * import { createHttpLogDrain } from 'evlog/http'
57
+ *
58
+ * const drain = createHttpLogDrain({
59
+ * drain: { endpoint: '/api/logs' },
60
+ * })
61
+ * initLogger({ drain })
62
+ *
63
+ * log.info({ action: 'page_view', path: location.pathname })
64
+ * ```
65
+ */
66
+ function createHttpLogDrain(options) {
67
+ const { autoFlush = true } = options;
68
+ const drain = createDrainPipeline({
69
+ batch: {
70
+ size: 25,
71
+ intervalMs: 2e3
72
+ },
73
+ retry: { maxAttempts: 2 },
74
+ ...options.pipeline
75
+ })(createHttpDrain(options.drain));
76
+ let onVisibilityChange;
77
+ if (autoFlush && typeof document !== "undefined") {
78
+ onVisibilityChange = () => {
79
+ if (document.visibilityState === "hidden") drain.flush();
80
+ };
81
+ document.addEventListener("visibilitychange", onVisibilityChange);
82
+ }
83
+ drain.dispose = () => {
84
+ if (onVisibilityChange) {
85
+ document.removeEventListener("visibilitychange", onVisibilityChange);
86
+ onVisibilityChange = void 0;
87
+ }
88
+ };
89
+ return drain;
90
+ }
91
+ //#endregion
92
+ export { createHttpDrain, createHttpLogDrain };
93
+
94
+ //# sourceMappingURL=http.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.mjs","names":[],"sources":["../src/http.ts"],"sourcesContent":["import type { DrainContext } from './types'\nimport type { DrainPipelineOptions, PipelineDrainFn } from './pipeline'\nimport { createDrainPipeline } from './pipeline'\n\nexport interface HttpDrainConfig {\n /** URL of the server ingest endpoint */\n endpoint: string\n /** Custom headers sent with each fetch request (e.g. Authorization, X-API-Key). Not applied to sendBeacon — see `useBeacon`. */\n headers?: Record<string, string>\n /** Request timeout in milliseconds. @default 5000 */\n timeout?: number\n /** Use sendBeacon when the page is hidden. @default true */\n useBeacon?: boolean\n /** Fetch credentials mode. @default 'same-origin' */\n credentials?: RequestCredentials\n}\n\nexport interface HttpLogDrainOptions {\n /** HTTP drain configuration (endpoint is required) */\n drain: HttpDrainConfig\n /** Pipeline configuration overrides */\n pipeline?: DrainPipelineOptions<DrainContext>\n /** Auto-register visibilitychange flush listener. @default true */\n autoFlush?: boolean\n}\n\n/**\n * Create a low-level HTTP drain transport function (fetch / sendBeacon).\n *\n * Returns a function compatible with `createDrainPipeline` that sends batches\n * to the configured endpoint via `fetch` (with `keepalive: true`) or\n * `navigator.sendBeacon` when the page is hidden.\n *\n * @example\n * ```ts\n * import { createHttpDrain } from 'evlog/http'\n * import { createDrainPipeline } from 'evlog/pipeline'\n *\n * const pipeline = createDrainPipeline({ batch: { size: 50 } })\n * const drain = pipeline(createHttpDrain({ endpoint: '/api/logs' }))\n * ```\n */\nexport function createHttpDrain(config: HttpDrainConfig): (batch: DrainContext[]) => Promise<void> {\n const { endpoint, headers: customHeaders, timeout = 5000, useBeacon = true, credentials = 'same-origin' } = config\n\n return async (batch: DrainContext[]): Promise<void> => {\n if (batch.length === 0) return\n\n const body = JSON.stringify(batch)\n\n if (\n useBeacon\n && typeof document !== 'undefined'\n && document.visibilityState === 'hidden'\n && typeof navigator !== 'undefined'\n && typeof navigator.sendBeacon === 'function'\n ) {\n const queued = navigator.sendBeacon(endpoint, new Blob([body], { type: 'application/json' }))\n if (!queued) {\n throw new Error('[evlog/http] sendBeacon failed — payload may exceed browser limit')\n }\n return\n }\n\n const controller = new AbortController()\n const timeoutId = setTimeout(() => controller.abort(), timeout)\n\n try {\n const response = await fetch(endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', ...customHeaders },\n body,\n signal: controller.signal,\n keepalive: true,\n credentials,\n })\n\n if (!response.ok) {\n throw new Error(`[evlog/http] Server responded with ${response.status}`)\n }\n } finally {\n clearTimeout(timeoutId)\n }\n }\n}\n\n/**\n * Create a pre-composed HTTP log drain with pipeline, batching, and auto-flush.\n *\n * Returns a `PipelineDrainFn<DrainContext>` directly usable with `initLogger({ drain })`.\n *\n * @example\n * ```ts\n * import { initLogger, log } from 'evlog'\n * import { createHttpLogDrain } from 'evlog/http'\n *\n * const drain = createHttpLogDrain({\n * drain: { endpoint: '/api/logs' },\n * })\n * initLogger({ drain })\n *\n * log.info({ action: 'page_view', path: location.pathname })\n * ```\n */\nexport function createHttpLogDrain(options: HttpLogDrainOptions): PipelineDrainFn<DrainContext> & { dispose: () => void } {\n const { autoFlush = true } = options\n\n const pipeline = createDrainPipeline<DrainContext>({\n batch: { size: 25, intervalMs: 2000 },\n retry: { maxAttempts: 2 },\n ...options.pipeline,\n })\n\n const drain = pipeline(createHttpDrain(options.drain)) as PipelineDrainFn<DrainContext> & { dispose: () => void }\n\n let onVisibilityChange: (() => void) | undefined\n\n if (autoFlush && typeof document !== 'undefined') {\n onVisibilityChange = () => {\n if (document.visibilityState === 'hidden') {\n drain.flush()\n }\n }\n document.addEventListener('visibilitychange', onVisibilityChange)\n }\n\n drain.dispose = () => {\n if (onVisibilityChange) {\n document.removeEventListener('visibilitychange', onVisibilityChange)\n onVisibilityChange = undefined\n }\n }\n\n return drain\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AA0CA,SAAgB,gBAAgB,QAAmE;CACjG,MAAM,EAAE,UAAU,SAAS,eAAe,UAAU,KAAM,YAAY,MAAM,cAAc,kBAAkB;AAE5G,QAAO,OAAO,UAAyC;AACrD,MAAI,MAAM,WAAW,EAAG;EAExB,MAAM,OAAO,KAAK,UAAU,MAAM;AAElC,MACE,aACG,OAAO,aAAa,eACpB,SAAS,oBAAoB,YAC7B,OAAO,cAAc,eACrB,OAAO,UAAU,eAAe,YACnC;AAEA,OAAI,CADW,UAAU,WAAW,UAAU,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,oBAAoB,CAAC,CAAC,CAE3F,OAAM,IAAI,MAAM,oEAAoE;AAEtF;;EAGF,MAAM,aAAa,IAAI,iBAAiB;EACxC,MAAM,YAAY,iBAAiB,WAAW,OAAO,EAAE,QAAQ;AAE/D,MAAI;GACF,MAAM,WAAW,MAAM,MAAM,UAAU;IACrC,QAAQ;IACR,SAAS;KAAE,gBAAgB;KAAoB,GAAG;KAAe;IACjE;IACA,QAAQ,WAAW;IACnB,WAAW;IACX;IACD,CAAC;AAEF,OAAI,CAAC,SAAS,GACZ,OAAM,IAAI,MAAM,sCAAsC,SAAS,SAAS;YAElE;AACR,gBAAa,UAAU;;;;;;;;;;;;;;;;;;;;;;AAuB7B,SAAgB,mBAAmB,SAAuF;CACxH,MAAM,EAAE,YAAY,SAAS;CAQ7B,MAAM,QANW,oBAAkC;EACjD,OAAO;GAAE,MAAM;GAAI,YAAY;GAAM;EACrC,OAAO,EAAE,aAAa,GAAG;EACzB,GAAG,QAAQ;EACZ,CAAC,CAEqB,gBAAgB,QAAQ,MAAM,CAAC;CAEtD,IAAI;AAEJ,KAAI,aAAa,OAAO,aAAa,aAAa;AAChD,6BAA2B;AACzB,OAAI,SAAS,oBAAoB,SAC/B,OAAM,OAAO;;AAGjB,WAAS,iBAAiB,oBAAoB,mBAAmB;;AAGnE,OAAM,gBAAgB;AACpB,MAAI,oBAAoB;AACtB,YAAS,oBAAoB,oBAAoB,mBAAmB;AACpE,wBAAqB,KAAA;;;AAIzB,QAAO"}
package/dist/index.d.mts CHANGED
@@ -1,6 +1,7 @@
1
- import { C as TailSamplingContext, S as TailSamplingCondition, T as WideEvent, _ as RequestLoggerOptions, a as EnvironmentContext, b as SamplingRates, c as H3EventContext, d as Log, f as LogLevel, g as RequestLogger, i as EnrichContext, l as IngestPayload, m as ParsedError, n as DeepPartial, o as ErrorOptions, p as LoggerConfig, r as DrainContext, s as FieldContext, t as BaseWideEvent, u as InternalFields, w as TransportConfig, x as ServerEvent, y as SamplingConfig } from "./types-v_JkG_D7.mjs";
2
- import { n as createError, t as EvlogError } from "./error-plrBYLQk.mjs";
3
- import { i as getEnvironment, n as createLogger, o as initLogger, r as createRequestLogger, s as isEnabled, t as _log, u as shouldKeep } from "./logger-CG1eop2_.mjs";
4
- import { t as useLogger } from "./useLogger-TjKH37BO.mjs";
5
- import { t as parseError } from "./parseError-B_qXj8x4.mjs";
6
- export { type BaseWideEvent, type DeepPartial, type DrainContext, type EnrichContext, type EnvironmentContext, type ErrorOptions, EvlogError, type FieldContext, type H3EventContext, type IngestPayload, type InternalFields, type Log, type LogLevel, type LoggerConfig, type ParsedError, type RequestLogger, type RequestLoggerOptions, type SamplingConfig, type SamplingRates, type ServerEvent, type TailSamplingCondition, type TailSamplingContext, type TransportConfig, type WideEvent, createError, createError as createEvlogError, createLogger, createRequestLogger, getEnvironment, initLogger, isEnabled, _log as log, parseError, shouldKeep, useLogger };
1
+ import { C as TailSamplingCondition, E as WideEvent, S as ServerEvent, T as TransportConfig, _ as RequestLogger, a as EnvironmentContext, b as SamplingConfig, c as H3EventContext, d as Log, f as LogLevel, h as RedactConfig, i as EnrichContext, l as IngestPayload, m as ParsedError, n as DeepPartial, o as ErrorOptions, p as LoggerConfig, r as DrainContext, s as FieldContext, t as BaseWideEvent, u as InternalFields, v as RequestLoggerOptions, w as TailSamplingContext, x as SamplingRates } from "./types-D5OwxZCw.mjs";
2
+ import { n as createError, t as EvlogError } from "./error-WRz4_F3W.mjs";
3
+ import { i as getEnvironment, n as createLogger, o as initLogger, r as createRequestLogger, s as isEnabled, t as _log, u as shouldKeep } from "./logger-Bm0k3Hf3.mjs";
4
+ import { p as isLevelEnabled } from "./utils-Bnc95-VC.mjs";
5
+ import { t as useLogger } from "./useLogger-Dcj1Nrsa.mjs";
6
+ import { t as parseError } from "./parseError-DhXS_vzM.mjs";
7
+ export { type BaseWideEvent, type DeepPartial, type DrainContext, type EnrichContext, type EnvironmentContext, type ErrorOptions, EvlogError, type FieldContext, type H3EventContext, type IngestPayload, type InternalFields, type Log, type LogLevel, type LoggerConfig, type ParsedError, type RedactConfig, type RequestLogger, type RequestLoggerOptions, type SamplingConfig, type SamplingRates, type ServerEvent, type TailSamplingCondition, type TailSamplingContext, type TransportConfig, type WideEvent, createError, createError as createEvlogError, createLogger, createRequestLogger, getEnvironment, initLogger, isEnabled, isLevelEnabled, _log as log, parseError, shouldKeep, useLogger };
package/dist/index.mjs CHANGED
@@ -1,5 +1,6 @@
1
+ import { isLevelEnabled } from "./utils.mjs";
1
2
  import { EvlogError, createError } from "./error.mjs";
2
- import { createLogger, createRequestLogger, getEnvironment, initLogger, isEnabled, log as _log, shouldKeep } from "./logger.mjs";
3
+ import { i as getEnvironment, n as createLogger, o as initLogger, r as createRequestLogger, s as isEnabled, t as _log, u as shouldKeep } from "./logger-DY0X5oQd.mjs";
3
4
  import { useLogger } from "./runtime/server/useLogger.mjs";
4
5
  import { parseError } from "./runtime/utils/parseError.mjs";
5
- export { EvlogError, createError, createError as createEvlogError, createLogger, createRequestLogger, getEnvironment, initLogger, isEnabled, _log as log, parseError, shouldKeep, useLogger };
6
+ export { EvlogError, createError, createError as createEvlogError, createLogger, createRequestLogger, getEnvironment, initLogger, isEnabled, isLevelEnabled, _log as log, parseError, shouldKeep, useLogger };
@@ -1,4 +1,4 @@
1
- import { C as TailSamplingContext, _ as RequestLoggerOptions, a as EnvironmentContext, d as Log, g as RequestLogger, p as LoggerConfig, r as DrainContext } from "./types-v_JkG_D7.mjs";
1
+ import { _ as RequestLogger, a as EnvironmentContext, d as Log, p as LoggerConfig, r as DrainContext, v as RequestLoggerOptions, w as TailSamplingContext } from "./types-D5OwxZCw.mjs";
2
2
 
3
3
  //#region src/logger.d.ts
4
4
  /**
@@ -82,4 +82,4 @@ declare function createRequestLogger<T extends object = Record<string, unknown>>
82
82
  declare function getEnvironment(): EnvironmentContext;
83
83
  //#endregion
84
84
  export { getGlobalDrain as a, isLoggerLocked as c, getEnvironment as i, lockLogger as l, createLogger as n, initLogger as o, createRequestLogger as r, isEnabled as s, _log as t, shouldKeep as u };
85
- //# sourceMappingURL=logger-CG1eop2_.d.mts.map
85
+ //# sourceMappingURL=logger-Bm0k3Hf3.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"logger-CG1eop2_.d.mts","names":[],"sources":["../src/logger.ts"],"mappings":";;;;;AA2CA;;iBAAgB,UAAA,CAAW,MAAA,GAAQ,YAAA;;;AA0BnC;iBAAgB,SAAA,CAAA;;;;AAShB;;iBAAgB,UAAA,CAAA;;;AAOhB;iBAAgB,cAAA,CAAA;;;;AAShB;;iBAAgB,cAAA,CAAA,KAAoB,GAAA,EAAK,YAAA,YAAwB,OAAA;;;;;iBA8BjD,UAAA,CAAW,GAAA,EAAK,mBAAA;;AAAhC;;;;;AAgBC;;;cAqLK,IAAA,EAAM,GAAA;AAOU;;;AAAA,UAkBZ,2BAAA;EAKG;AAcb;;;EAdE,WAAA;AAAA;;;;;;;;;;;;iBAcc,YAAA,oBAAgC,MAAA,kBAAA,CAAyB,cAAA,GAAgB,MAAA,mBAA8B,eAAA,GAAkB,2BAAA,GAA8B,aAAA,CAAc,CAAA;;;;AAsHrL;;;;;;;;;iBAAgB,mBAAA,oBAAuC,MAAA,kBAAA,CAAyB,OAAA,GAAS,oBAAA,EAA2B,eAAA,GAAkB,2BAAA,GAA8B,aAAA,CAAc,CAAA;;;;iBAWlK,cAAA,CAAA,GAAkB,kBAAA"}
1
+ {"version":3,"file":"logger-Bm0k3Hf3.d.mts","names":[],"sources":["../src/logger.ts"],"mappings":";;;;;AA+CA;;iBAAgB,UAAA,CAAW,MAAA,GAAQ,YAAA;;;AA4BnC;iBAAgB,SAAA,CAAA;;;;AAShB;;iBAAgB,UAAA,CAAA;;;AAOhB;iBAAgB,cAAA,CAAA;;;;AAShB;;iBAAgB,cAAA,CAAA,KAAoB,GAAA,EAAK,YAAA,YAAwB,OAAA;;;;;iBA8BjD,UAAA,CAAW,GAAA,EAAK,mBAAA;;AAAhC;;;;;AAgBC;;;cA8VK,IAAA,EAAM,GAAA;AAOU;;;AAAA,UAkBZ,2BAAA;EAKG;AAcb;;;EAdE,WAAA;AAAA;;;;;;;;;;;;iBAcc,YAAA,oBAAgC,MAAA,kBAAA,CAAyB,cAAA,GAAgB,MAAA,mBAA8B,eAAA,GAAkB,2BAAA,GAA8B,aAAA,CAAc,CAAA;;;;AAsHrL;;;;;;;;;iBAAgB,mBAAA,oBAAuC,MAAA,kBAAA,CAAyB,OAAA,GAAS,oBAAA,EAA2B,eAAA,GAAkB,2BAAA,GAA8B,aAAA,CAAc,CAAA;;;;iBAWlK,cAAA,CAAA,GAAkB,kBAAA"}