evlog 1.6.0 → 1.8.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 (136) hide show
  1. package/README.md +96 -0
  2. package/dist/_http-DVDwNag0.mjs +76 -0
  3. package/dist/_http-DVDwNag0.mjs.map +1 -0
  4. package/dist/_severity-CXfyvxQi.mjs +17 -0
  5. package/dist/_severity-CXfyvxQi.mjs.map +1 -0
  6. package/dist/adapters/axiom.d.mts +17 -15
  7. package/dist/adapters/axiom.d.mts.map +1 -0
  8. package/dist/adapters/axiom.mjs +91 -50
  9. package/dist/adapters/axiom.mjs.map +1 -0
  10. package/dist/adapters/better-stack.d.mts +63 -0
  11. package/dist/adapters/better-stack.d.mts.map +1 -0
  12. package/dist/adapters/better-stack.mjs +98 -0
  13. package/dist/adapters/better-stack.mjs.map +1 -0
  14. package/dist/adapters/otlp.d.mts +32 -30
  15. package/dist/adapters/otlp.d.mts.map +1 -0
  16. package/dist/adapters/otlp.mjs +181 -181
  17. package/dist/adapters/otlp.mjs.map +1 -0
  18. package/dist/adapters/posthog.d.mts +54 -19
  19. package/dist/adapters/posthog.d.mts.map +1 -0
  20. package/dist/adapters/posthog.mjs +156 -63
  21. package/dist/adapters/posthog.mjs.map +1 -0
  22. package/dist/adapters/sentry.d.mts +25 -23
  23. package/dist/adapters/sentry.d.mts.map +1 -0
  24. package/dist/adapters/sentry.mjs +198 -153
  25. package/dist/adapters/sentry.mjs.map +1 -0
  26. package/dist/browser.d.mts +63 -0
  27. package/dist/browser.d.mts.map +1 -0
  28. package/dist/browser.mjs +95 -0
  29. package/dist/browser.mjs.map +1 -0
  30. package/dist/enrichers.d.mts +74 -0
  31. package/dist/enrichers.d.mts.map +1 -0
  32. package/dist/enrichers.mjs +172 -0
  33. package/dist/enrichers.mjs.map +1 -0
  34. package/dist/error.d.mts +24 -22
  35. package/dist/error.d.mts.map +1 -0
  36. package/dist/error.mjs +107 -76
  37. package/dist/error.mjs.map +1 -0
  38. package/dist/index.d.mts +6 -5
  39. package/dist/index.mjs +6 -5
  40. package/dist/logger.d.mts +11 -5
  41. package/dist/logger.d.mts.map +1 -0
  42. package/dist/logger.mjs +255 -186
  43. package/dist/logger.mjs.map +1 -0
  44. package/dist/nitro/errorHandler.d.mts +4 -2
  45. package/dist/nitro/errorHandler.d.mts.map +1 -0
  46. package/dist/nitro/errorHandler.mjs +38 -38
  47. package/dist/nitro/errorHandler.mjs.map +1 -0
  48. package/dist/nitro/module.d.mts +11 -0
  49. package/dist/nitro/module.d.mts.map +1 -0
  50. package/dist/nitro/module.mjs +23 -0
  51. package/dist/nitro/module.mjs.map +1 -0
  52. package/dist/nitro/plugin.d.mts +4 -2
  53. package/dist/nitro/plugin.d.mts.map +1 -0
  54. package/dist/nitro/plugin.mjs +135 -140
  55. package/dist/nitro/plugin.mjs.map +1 -0
  56. package/dist/nitro/v3/errorHandler.d.mts +24 -0
  57. package/dist/nitro/v3/errorHandler.d.mts.map +1 -0
  58. package/dist/nitro/v3/errorHandler.mjs +36 -0
  59. package/dist/nitro/v3/errorHandler.mjs.map +1 -0
  60. package/dist/nitro/v3/index.d.mts +4 -0
  61. package/dist/nitro/v3/index.mjs +4 -0
  62. package/dist/nitro/v3/module.d.mts +10 -0
  63. package/dist/nitro/v3/module.d.mts.map +1 -0
  64. package/dist/nitro/v3/module.mjs +22 -0
  65. package/dist/nitro/v3/module.mjs.map +1 -0
  66. package/dist/nitro/v3/plugin.d.mts +14 -0
  67. package/dist/nitro/v3/plugin.d.mts.map +1 -0
  68. package/dist/nitro/v3/plugin.mjs +157 -0
  69. package/dist/nitro/v3/plugin.mjs.map +1 -0
  70. package/dist/nitro/v3/useLogger.d.mts +24 -0
  71. package/dist/nitro/v3/useLogger.d.mts.map +1 -0
  72. package/dist/nitro/v3/useLogger.mjs +27 -0
  73. package/dist/nitro/v3/useLogger.mjs.map +1 -0
  74. package/dist/nitro-D57TWGyN.mjs +73 -0
  75. package/dist/nitro-D57TWGyN.mjs.map +1 -0
  76. package/dist/nitro-D81NBVPi.d.mts +42 -0
  77. package/dist/nitro-D81NBVPi.d.mts.map +1 -0
  78. package/dist/nuxt/module.d.mts +155 -168
  79. package/dist/nuxt/module.d.mts.map +1 -0
  80. package/dist/nuxt/module.mjs +75 -65
  81. package/dist/nuxt/module.mjs.map +1 -0
  82. package/dist/pipeline.d.mts +46 -0
  83. package/dist/pipeline.d.mts.map +1 -0
  84. package/dist/pipeline.mjs +122 -0
  85. package/dist/pipeline.mjs.map +1 -0
  86. package/dist/runtime/client/log.d.mts +12 -7
  87. package/dist/runtime/client/log.d.mts.map +1 -0
  88. package/dist/runtime/client/log.mjs +72 -64
  89. package/dist/runtime/client/log.mjs.map +1 -0
  90. package/dist/runtime/client/plugin.d.mts +3 -1
  91. package/dist/runtime/client/plugin.d.mts.map +1 -0
  92. package/dist/runtime/client/plugin.mjs +14 -12
  93. package/dist/runtime/client/plugin.mjs.map +1 -0
  94. package/dist/runtime/server/routes/_evlog/ingest.post.d.mts +4 -2
  95. package/dist/runtime/server/routes/_evlog/ingest.post.d.mts.map +1 -0
  96. package/dist/runtime/server/routes/_evlog/ingest.post.mjs +113 -76
  97. package/dist/runtime/server/routes/_evlog/ingest.post.mjs.map +1 -0
  98. package/dist/runtime/server/useLogger.d.mts +14 -3
  99. package/dist/runtime/server/useLogger.d.mts.map +1 -0
  100. package/dist/runtime/server/useLogger.mjs +39 -10
  101. package/dist/runtime/server/useLogger.mjs.map +1 -0
  102. package/dist/runtime/utils/parseError.d.mts +5 -3
  103. package/dist/runtime/utils/parseError.d.mts.map +1 -0
  104. package/dist/runtime/utils/parseError.mjs +25 -26
  105. package/dist/runtime/utils/parseError.mjs.map +1 -0
  106. package/dist/types.d.mts +378 -246
  107. package/dist/types.d.mts.map +1 -0
  108. package/dist/types.mjs +1 -1
  109. package/dist/utils.d.mts +19 -14
  110. package/dist/utils.d.mts.map +1 -0
  111. package/dist/utils.mjs +59 -50
  112. package/dist/utils.mjs.map +1 -0
  113. package/dist/workers.d.mts +10 -9
  114. package/dist/workers.d.mts.map +1 -0
  115. package/dist/workers.mjs +68 -39
  116. package/dist/workers.mjs.map +1 -0
  117. package/package.json +55 -10
  118. package/dist/adapters/axiom.d.ts +0 -62
  119. package/dist/adapters/otlp.d.ts +0 -83
  120. package/dist/adapters/posthog.d.ts +0 -72
  121. package/dist/adapters/sentry.d.ts +0 -78
  122. package/dist/error.d.ts +0 -63
  123. package/dist/index.d.ts +0 -5
  124. package/dist/logger.d.ts +0 -40
  125. package/dist/nitro/errorHandler.d.ts +0 -13
  126. package/dist/nitro/plugin.d.ts +0 -5
  127. package/dist/nuxt/module.d.ts +0 -171
  128. package/dist/runtime/client/log.d.ts +0 -10
  129. package/dist/runtime/client/plugin.d.ts +0 -3
  130. package/dist/runtime/server/routes/_evlog/ingest.post.d.ts +0 -5
  131. package/dist/runtime/server/useLogger.d.ts +0 -28
  132. package/dist/runtime/utils/parseError.d.ts +0 -5
  133. package/dist/shared/evlog.Bc35pxiY.mjs +0 -10
  134. package/dist/types.d.ts +0 -364
  135. package/dist/utils.d.ts +0 -29
  136. package/dist/workers.d.ts +0 -45
@@ -1,35 +1,37 @@
1
- import { DrainContext, WideEvent } from '../types.mjs';
1
+ import { DrainContext, WideEvent } from "../types.mjs";
2
+ import "../index.mjs";
2
3
 
4
+ //#region src/adapters/otlp.d.ts
3
5
  interface OTLPConfig {
4
- /** OTLP HTTP endpoint (e.g., http://localhost:4318) */
5
- endpoint: string;
6
- /** Override service name (defaults to event.service) */
7
- serviceName?: string;
8
- /** Additional resource attributes */
9
- resourceAttributes?: Record<string, string | number | boolean>;
10
- /** Custom headers (e.g., for authentication) */
11
- headers?: Record<string, string>;
12
- /** Request timeout in milliseconds. Default: 5000 */
13
- timeout?: number;
6
+ /** OTLP HTTP endpoint (e.g., http://localhost:4318) */
7
+ endpoint: string;
8
+ /** Override service name (defaults to event.service) */
9
+ serviceName?: string;
10
+ /** Additional resource attributes */
11
+ resourceAttributes?: Record<string, string | number | boolean>;
12
+ /** Custom headers (e.g., for authentication) */
13
+ headers?: Record<string, string>;
14
+ /** Request timeout in milliseconds. Default: 5000 */
15
+ timeout?: number;
14
16
  }
15
17
  /** OTLP Log Record structure */
16
18
  interface OTLPLogRecord {
17
- timeUnixNano: string;
18
- severityNumber: number;
19
- severityText: string;
20
- body: {
21
- stringValue: string;
19
+ timeUnixNano: string;
20
+ severityNumber: number;
21
+ severityText: string;
22
+ body: {
23
+ stringValue: string;
24
+ };
25
+ attributes: Array<{
26
+ key: string;
27
+ value: {
28
+ stringValue?: string;
29
+ intValue?: string;
30
+ boolValue?: boolean;
22
31
  };
23
- attributes: Array<{
24
- key: string;
25
- value: {
26
- stringValue?: string;
27
- intValue?: string;
28
- boolValue?: boolean;
29
- };
30
- }>;
31
- traceId?: string;
32
- spanId?: string;
32
+ }>;
33
+ traceId?: string;
34
+ spanId?: string;
33
35
  }
34
36
  /**
35
37
  * Convert an evlog WideEvent to an OTLP LogRecord.
@@ -55,7 +57,7 @@ declare function toOTLPLogRecord(event: WideEvent): OTLPLogRecord;
55
57
  * }))
56
58
  * ```
57
59
  */
58
- declare function createOTLPDrain(overrides?: Partial<OTLPConfig>): (ctx: DrainContext) => Promise<void>;
60
+ declare function createOTLPDrain(overrides?: Partial<OTLPConfig>): (ctx: DrainContext | DrainContext[]) => Promise<void>;
59
61
  /**
60
62
  * Send a single event to an OTLP endpoint.
61
63
  *
@@ -78,6 +80,6 @@ declare function sendToOTLP(event: WideEvent, config: OTLPConfig): Promise<void>
78
80
  * ```
79
81
  */
80
82
  declare function sendBatchToOTLP(events: WideEvent[], config: OTLPConfig): Promise<void>;
81
-
82
- export { createOTLPDrain, sendBatchToOTLP, sendToOTLP, toOTLPLogRecord };
83
- export type { OTLPConfig, OTLPLogRecord };
83
+ //#endregion
84
+ export { OTLPConfig, OTLPLogRecord, createOTLPDrain, sendBatchToOTLP, sendToOTLP, toOTLPLogRecord };
85
+ //# sourceMappingURL=otlp.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otlp.d.mts","names":[],"sources":["../../src/adapters/otlp.ts"],"mappings":";;;;UAOiB,UAAA;;EAEf,QAAA;EAFe;EAIf,WAAA;;EAEA,kBAAA,GAAqB,MAAA;EAJrB;EAMA,OAAA,GAAU,MAAA;EAFV;EAIA,OAAA;AAAA;;UAIe,aAAA;EACf,YAAA;EACA,cAAA;EACA,YAAA;EACA,IAAA;IAAQ,WAAA;EAAA;EACR,UAAA,EAAY,KAAA;IACV,GAAA;IACA,KAAA;MAAS,WAAA;MAAsB,QAAA;MAAmB,SAAA;IAAA;EAAA;EAEpD,OAAA;EACA,MAAA;AAAA;;;;iBAwDc,eAAA,CAAgB,KAAA,EAAO,SAAA,GAAY,aAAA;;AAAnD;;;;;;;;;AA0JA;;;;;;;;;;iBAAgB,eAAA,CAAgB,SAAA,GAAY,OAAA,CAAQ,UAAA,KAAW,GAAA,EAAZ,YAAA,GAAY,YAAA,OAAA,OAAA;;;;;;;;;AA+B/D;;iBAAsB,UAAA,CAAW,KAAA,EAAO,SAAA,EAAW,MAAA,EAAQ,UAAA,GAAa,OAAA;;;;;;;;;;;iBAclD,eAAA,CAAgB,MAAA,EAAQ,SAAA,IAAa,MAAA,EAAQ,UAAA,GAAa,OAAA"}
@@ -1,196 +1,196 @@
1
- import { g as getRuntimeConfig } from '../shared/evlog.Bc35pxiY.mjs';
1
+ import { n as defineDrain, r as resolveAdapterConfig, t as httpPost } from "../_http-DVDwNag0.mjs";
2
+ import { n as OTEL_SEVERITY_TEXT, t as OTEL_SEVERITY_NUMBER } from "../_severity-CXfyvxQi.mjs";
2
3
 
3
- const SEVERITY_MAP = {
4
- debug: 5,
5
- // DEBUG
6
- info: 9,
7
- // INFO
8
- warn: 13,
9
- // WARN
10
- error: 17
11
- // ERROR
12
- };
13
- const SEVERITY_TEXT_MAP = {
14
- debug: "DEBUG",
15
- info: "INFO",
16
- warn: "WARN",
17
- error: "ERROR"
18
- };
4
+ //#region src/adapters/otlp.ts
5
+ const OTLP_FIELDS = [
6
+ {
7
+ key: "endpoint",
8
+ env: ["NUXT_OTLP_ENDPOINT", "OTEL_EXPORTER_OTLP_ENDPOINT"]
9
+ },
10
+ {
11
+ key: "serviceName",
12
+ env: ["NUXT_OTLP_SERVICE_NAME", "OTEL_SERVICE_NAME"]
13
+ },
14
+ { key: "headers" },
15
+ { key: "resourceAttributes" },
16
+ { key: "timeout" }
17
+ ];
18
+ /**
19
+ * Convert a value to OTLP attribute value format.
20
+ */
19
21
  function toAttributeValue(value) {
20
- if (typeof value === "boolean") {
21
- return { boolValue: value };
22
- }
23
- if (typeof value === "number" && Number.isInteger(value)) {
24
- return { intValue: String(value) };
25
- }
26
- if (typeof value === "string") {
27
- return { stringValue: value };
28
- }
29
- return { stringValue: JSON.stringify(value) };
22
+ if (typeof value === "boolean") return { boolValue: value };
23
+ if (typeof value === "number" && Number.isInteger(value)) return { intValue: String(value) };
24
+ if (typeof value === "string") return { stringValue: value };
25
+ return { stringValue: JSON.stringify(value) };
30
26
  }
27
+ /**
28
+ * Convert an evlog WideEvent to an OTLP LogRecord.
29
+ */
31
30
  function toOTLPLogRecord(event) {
32
- const timestamp = new Date(event.timestamp).getTime() * 1e6;
33
- const { level, traceId, spanId, ...rest } = event;
34
- delete rest.timestamp;
35
- delete rest.service;
36
- delete rest.environment;
37
- delete rest.version;
38
- delete rest.commitHash;
39
- delete rest.region;
40
- const attributes = [];
41
- for (const [key, value] of Object.entries(rest)) {
42
- if (value !== void 0 && value !== null) {
43
- attributes.push({
44
- key,
45
- value: toAttributeValue(value)
46
- });
47
- }
48
- }
49
- const record = {
50
- timeUnixNano: String(timestamp),
51
- severityNumber: SEVERITY_MAP[level] ?? 9,
52
- severityText: SEVERITY_TEXT_MAP[level] ?? "INFO",
53
- body: { stringValue: JSON.stringify(event) },
54
- attributes
55
- };
56
- if (typeof traceId === "string") {
57
- record.traceId = traceId;
58
- }
59
- if (typeof spanId === "string") {
60
- record.spanId = spanId;
61
- }
62
- return record;
31
+ const timestamp = new Date(event.timestamp).getTime() * 1e6;
32
+ const { level, traceId, spanId, ...rest } = event;
33
+ delete rest.timestamp;
34
+ delete rest.service;
35
+ delete rest.environment;
36
+ delete rest.version;
37
+ delete rest.commitHash;
38
+ delete rest.region;
39
+ const attributes = [];
40
+ for (const [key, value] of Object.entries(rest)) if (value !== void 0 && value !== null) attributes.push({
41
+ key,
42
+ value: toAttributeValue(value)
43
+ });
44
+ const record = {
45
+ timeUnixNano: String(timestamp),
46
+ severityNumber: OTEL_SEVERITY_NUMBER[level] ?? 9,
47
+ severityText: OTEL_SEVERITY_TEXT[level] ?? "INFO",
48
+ body: { stringValue: JSON.stringify(event) },
49
+ attributes
50
+ };
51
+ if (typeof traceId === "string") record.traceId = traceId;
52
+ if (typeof spanId === "string") record.spanId = spanId;
53
+ return record;
63
54
  }
55
+ /**
56
+ * Build OTLP resource attributes from event and config.
57
+ */
64
58
  function buildResourceAttributes(event, config) {
65
- const attributes = [];
66
- attributes.push({
67
- key: "service.name",
68
- value: { stringValue: config.serviceName ?? event.service }
69
- });
70
- if (event.environment) {
71
- attributes.push({
72
- key: "deployment.environment",
73
- value: { stringValue: event.environment }
74
- });
75
- }
76
- if (event.version) {
77
- attributes.push({
78
- key: "service.version",
79
- value: { stringValue: event.version }
80
- });
81
- }
82
- if (event.region) {
83
- attributes.push({
84
- key: "cloud.region",
85
- value: { stringValue: event.region }
86
- });
87
- }
88
- if (event.commitHash) {
89
- attributes.push({
90
- key: "vcs.commit.id",
91
- value: { stringValue: event.commitHash }
92
- });
93
- }
94
- if (config.resourceAttributes) {
95
- for (const [key, value] of Object.entries(config.resourceAttributes)) {
96
- attributes.push({
97
- key,
98
- value: toAttributeValue(value)
99
- });
100
- }
101
- }
102
- return attributes;
59
+ const attributes = [];
60
+ attributes.push({
61
+ key: "service.name",
62
+ value: { stringValue: config.serviceName ?? event.service }
63
+ });
64
+ if (event.environment) attributes.push({
65
+ key: "deployment.environment",
66
+ value: { stringValue: event.environment }
67
+ });
68
+ if (event.version) attributes.push({
69
+ key: "service.version",
70
+ value: { stringValue: event.version }
71
+ });
72
+ if (event.region) attributes.push({
73
+ key: "cloud.region",
74
+ value: { stringValue: event.region }
75
+ });
76
+ if (event.commitHash) attributes.push({
77
+ key: "vcs.commit.id",
78
+ value: { stringValue: event.commitHash }
79
+ });
80
+ if (config.resourceAttributes) for (const [key, value] of Object.entries(config.resourceAttributes)) attributes.push({
81
+ key,
82
+ value: toAttributeValue(value)
83
+ });
84
+ return attributes;
103
85
  }
86
+ /**
87
+ * Build headers from OTEL env vars.
88
+ * Kept inline as OTLP-specific (parses OTEL_EXPORTER_OTLP_HEADERS=key=val,key=val).
89
+ */
90
+ function getHeadersFromEnv() {
91
+ const headersEnv = process.env.OTEL_EXPORTER_OTLP_HEADERS || process.env.NUXT_OTLP_HEADERS;
92
+ if (headersEnv) {
93
+ const headers = {};
94
+ const decoded = decodeURIComponent(headersEnv);
95
+ for (const pair of decoded.split(",")) {
96
+ const eqIndex = pair.indexOf("=");
97
+ if (eqIndex > 0) {
98
+ const key = pair.slice(0, eqIndex).trim();
99
+ const value = pair.slice(eqIndex + 1).trim();
100
+ if (key && value) headers[key] = value;
101
+ }
102
+ }
103
+ if (Object.keys(headers).length > 0) return headers;
104
+ }
105
+ const auth = process.env.NUXT_OTLP_AUTH;
106
+ if (auth) return { Authorization: auth };
107
+ }
108
+ /**
109
+ * Create a drain function for sending logs to an OTLP endpoint.
110
+ *
111
+ * Configuration priority (highest to lowest):
112
+ * 1. Overrides passed to createOTLPDrain()
113
+ * 2. runtimeConfig.evlog.otlp (NUXT_EVLOG_OTLP_*)
114
+ * 3. runtimeConfig.otlp (NUXT_OTLP_*)
115
+ * 4. Environment variables: OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_SERVICE_NAME
116
+ *
117
+ * @example
118
+ * ```ts
119
+ * // Zero config - reads from runtimeConfig or env vars
120
+ * nitroApp.hooks.hook('evlog:drain', createOTLPDrain())
121
+ *
122
+ * // With overrides
123
+ * nitroApp.hooks.hook('evlog:drain', createOTLPDrain({
124
+ * endpoint: 'http://localhost:4318',
125
+ * }))
126
+ * ```
127
+ */
104
128
  function createOTLPDrain(overrides) {
105
- return async (ctx) => {
106
- const runtimeConfig = getRuntimeConfig();
107
- const evlogOtlp = runtimeConfig?.evlog?.otlp;
108
- const rootOtlp = runtimeConfig?.otlp;
109
- const getHeadersFromEnv = () => {
110
- const headersEnv = process.env.OTEL_EXPORTER_OTLP_HEADERS || process.env.NUXT_OTLP_HEADERS;
111
- if (headersEnv) {
112
- const headers = {};
113
- const decoded = decodeURIComponent(headersEnv);
114
- for (const pair of decoded.split(",")) {
115
- const eqIndex = pair.indexOf("=");
116
- if (eqIndex > 0) {
117
- const key = pair.slice(0, eqIndex).trim();
118
- const value = pair.slice(eqIndex + 1).trim();
119
- if (key && value) {
120
- headers[key] = value;
121
- }
122
- }
123
- }
124
- if (Object.keys(headers).length > 0) return headers;
125
- }
126
- const auth = process.env.NUXT_OTLP_AUTH;
127
- if (auth) {
128
- return { Authorization: auth };
129
- }
130
- return void 0;
131
- };
132
- const config = {
133
- endpoint: overrides?.endpoint ?? evlogOtlp?.endpoint ?? rootOtlp?.endpoint ?? process.env.NUXT_OTLP_ENDPOINT ?? process.env.OTEL_EXPORTER_OTLP_ENDPOINT,
134
- serviceName: overrides?.serviceName ?? evlogOtlp?.serviceName ?? rootOtlp?.serviceName ?? process.env.NUXT_OTLP_SERVICE_NAME ?? process.env.OTEL_SERVICE_NAME,
135
- headers: overrides?.headers ?? evlogOtlp?.headers ?? rootOtlp?.headers ?? getHeadersFromEnv(),
136
- resourceAttributes: overrides?.resourceAttributes ?? evlogOtlp?.resourceAttributes ?? rootOtlp?.resourceAttributes,
137
- timeout: overrides?.timeout ?? evlogOtlp?.timeout ?? rootOtlp?.timeout
138
- };
139
- if (!config.endpoint) {
140
- console.error("[evlog/otlp] Missing endpoint. Set NUXT_OTLP_ENDPOINT or OTEL_EXPORTER_OTLP_ENDPOINT env var, or pass to createOTLPDrain()");
141
- return;
142
- }
143
- try {
144
- await sendToOTLP(ctx.event, config);
145
- } catch (error) {
146
- console.error("[evlog/otlp] Failed to send event:", error);
147
- }
148
- };
129
+ return defineDrain({
130
+ name: "otlp",
131
+ resolve: () => {
132
+ const config = resolveAdapterConfig("otlp", OTLP_FIELDS, overrides);
133
+ if (!config.headers) config.headers = getHeadersFromEnv();
134
+ if (!config.endpoint) {
135
+ console.error("[evlog/otlp] Missing endpoint. Set NUXT_OTLP_ENDPOINT or OTEL_EXPORTER_OTLP_ENDPOINT env var, or pass to createOTLPDrain()");
136
+ return null;
137
+ }
138
+ return config;
139
+ },
140
+ send: sendBatchToOTLP
141
+ });
149
142
  }
143
+ /**
144
+ * Send a single event to an OTLP endpoint.
145
+ *
146
+ * @example
147
+ * ```ts
148
+ * await sendToOTLP(event, {
149
+ * endpoint: 'http://localhost:4318',
150
+ * })
151
+ * ```
152
+ */
150
153
  async function sendToOTLP(event, config) {
151
- await sendBatchToOTLP([event], config);
154
+ await sendBatchToOTLP([event], config);
152
155
  }
156
+ /**
157
+ * Send a batch of events to an OTLP endpoint.
158
+ *
159
+ * @example
160
+ * ```ts
161
+ * await sendBatchToOTLP(events, {
162
+ * endpoint: 'http://localhost:4318',
163
+ * })
164
+ * ```
165
+ */
153
166
  async function sendBatchToOTLP(events, config) {
154
- if (events.length === 0) return;
155
- const timeout = config.timeout ?? 5e3;
156
- const url = `${config.endpoint.replace(/\/$/, "")}/v1/logs`;
157
- const [firstEvent] = events;
158
- const resourceAttributes = buildResourceAttributes(firstEvent, config);
159
- const logRecords = events.map(toOTLPLogRecord);
160
- const payload = {
161
- resourceLogs: [
162
- {
163
- resource: { attributes: resourceAttributes },
164
- scopeLogs: [
165
- {
166
- scope: { name: "evlog", version: "1.0.0" },
167
- logRecords
168
- }
169
- ]
170
- }
171
- ]
172
- };
173
- const headers = {
174
- "Content-Type": "application/json",
175
- ...config.headers
176
- };
177
- const controller = new AbortController();
178
- const timeoutId = setTimeout(() => controller.abort(), timeout);
179
- try {
180
- const response = await fetch(url, {
181
- method: "POST",
182
- headers,
183
- body: JSON.stringify(payload),
184
- signal: controller.signal
185
- });
186
- if (!response.ok) {
187
- const text = await response.text().catch(() => "Unknown error");
188
- const safeText = text.length > 200 ? `${text.slice(0, 200)}...[truncated]` : text;
189
- throw new Error(`OTLP API error: ${response.status} ${response.statusText} - ${safeText}`);
190
- }
191
- } finally {
192
- clearTimeout(timeoutId);
193
- }
167
+ if (events.length === 0) return;
168
+ const url = `${config.endpoint.replace(/\/$/, "")}/v1/logs`;
169
+ const [firstEvent] = events;
170
+ const resourceAttributes = buildResourceAttributes(firstEvent, config);
171
+ const logRecords = events.map(toOTLPLogRecord);
172
+ const payload = { resourceLogs: [{
173
+ resource: { attributes: resourceAttributes },
174
+ scopeLogs: [{
175
+ scope: {
176
+ name: "evlog",
177
+ version: "1.0.0"
178
+ },
179
+ logRecords
180
+ }]
181
+ }] };
182
+ await httpPost({
183
+ url,
184
+ headers: {
185
+ "Content-Type": "application/json",
186
+ ...config.headers
187
+ },
188
+ body: JSON.stringify(payload),
189
+ timeout: config.timeout ?? 5e3,
190
+ label: "OTLP"
191
+ });
194
192
  }
195
193
 
194
+ //#endregion
196
195
  export { createOTLPDrain, sendBatchToOTLP, sendToOTLP, toOTLPLogRecord };
196
+ //# sourceMappingURL=otlp.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otlp.mjs","names":[],"sources":["../../src/adapters/otlp.ts"],"sourcesContent":["import type { WideEvent } from '../types'\nimport type { ConfigField } from './_config'\nimport { resolveAdapterConfig } from './_config'\nimport { defineDrain } from './_drain'\nimport { httpPost } from './_http'\nimport { OTEL_SEVERITY_NUMBER, OTEL_SEVERITY_TEXT } from './_severity'\n\nexport interface OTLPConfig {\n /** OTLP HTTP endpoint (e.g., http://localhost:4318) */\n endpoint: string\n /** Override service name (defaults to event.service) */\n serviceName?: string\n /** Additional resource attributes */\n resourceAttributes?: Record<string, string | number | boolean>\n /** Custom headers (e.g., for authentication) */\n headers?: Record<string, string>\n /** Request timeout in milliseconds. Default: 5000 */\n timeout?: number\n}\n\n/** OTLP Log Record structure */\nexport interface OTLPLogRecord {\n timeUnixNano: string\n severityNumber: number\n severityText: string\n body: { stringValue: string }\n attributes: Array<{\n key: string\n value: { stringValue?: string, intValue?: string, boolValue?: boolean }\n }>\n traceId?: string\n spanId?: string\n}\n\n/** OTLP Resource structure */\ninterface OTLPResource {\n attributes: Array<{\n key: string\n value: { stringValue?: string, intValue?: string, boolValue?: boolean }\n }>\n}\n\n/** OTLP Scope structure */\ninterface OTLPScope {\n name: string\n version?: string\n}\n\n/** OTLP ExportLogsServiceRequest structure */\ninterface ExportLogsServiceRequest {\n resourceLogs: Array<{\n resource: OTLPResource\n scopeLogs: Array<{\n scope: OTLPScope\n logRecords: OTLPLogRecord[]\n }>\n }>\n}\n\nconst OTLP_FIELDS: ConfigField<OTLPConfig>[] = [\n { key: 'endpoint', env: ['NUXT_OTLP_ENDPOINT', 'OTEL_EXPORTER_OTLP_ENDPOINT'] },\n { key: 'serviceName', env: ['NUXT_OTLP_SERVICE_NAME', 'OTEL_SERVICE_NAME'] },\n { key: 'headers' },\n { key: 'resourceAttributes' },\n { key: 'timeout' },\n]\n\n/**\n * Convert a value to OTLP attribute value format.\n */\nfunction toAttributeValue(value: unknown): { stringValue?: string, intValue?: string, boolValue?: boolean } {\n if (typeof value === 'boolean') {\n return { boolValue: value }\n }\n if (typeof value === 'number' && Number.isInteger(value)) {\n return { intValue: String(value) }\n }\n if (typeof value === 'string') {\n return { stringValue: value }\n }\n // For complex types, serialize to JSON string\n return { stringValue: JSON.stringify(value) }\n}\n\n/**\n * Convert an evlog WideEvent to an OTLP LogRecord.\n */\nexport function toOTLPLogRecord(event: WideEvent): OTLPLogRecord {\n const timestamp = new Date(event.timestamp).getTime() * 1_000_000 // Convert to nanoseconds\n\n // Extract known fields, rest goes to attributes\n const { level, traceId, spanId, ...rest } = event\n // Remove base fields from rest (they're handled as resource attributes)\n delete (rest as Record<string, unknown>).timestamp\n delete (rest as Record<string, unknown>).service\n delete (rest as Record<string, unknown>).environment\n delete (rest as Record<string, unknown>).version\n delete (rest as Record<string, unknown>).commitHash\n delete (rest as Record<string, unknown>).region\n\n const attributes: OTLPLogRecord['attributes'] = []\n\n // Add all remaining event fields as attributes\n for (const [key, value] of Object.entries(rest)) {\n if (value !== undefined && value !== null) {\n attributes.push({\n key,\n value: toAttributeValue(value),\n })\n }\n }\n\n const record: OTLPLogRecord = {\n timeUnixNano: String(timestamp),\n severityNumber: OTEL_SEVERITY_NUMBER[level] ?? 9,\n severityText: OTEL_SEVERITY_TEXT[level] ?? 'INFO',\n body: { stringValue: JSON.stringify(event) },\n attributes,\n }\n\n // Add trace context if present\n if (typeof traceId === 'string') {\n record.traceId = traceId\n }\n if (typeof spanId === 'string') {\n record.spanId = spanId\n }\n\n return record\n}\n\n/**\n * Build OTLP resource attributes from event and config.\n */\nfunction buildResourceAttributes(\n event: WideEvent,\n config: OTLPConfig,\n): OTLPResource['attributes'] {\n const attributes: OTLPResource['attributes'] = []\n\n // Service name\n attributes.push({\n key: 'service.name',\n value: { stringValue: config.serviceName ?? event.service },\n })\n\n // Environment\n if (event.environment) {\n attributes.push({\n key: 'deployment.environment',\n value: { stringValue: event.environment },\n })\n }\n\n // Version\n if (event.version) {\n attributes.push({\n key: 'service.version',\n value: { stringValue: event.version },\n })\n }\n\n // Region\n if (event.region) {\n attributes.push({\n key: 'cloud.region',\n value: { stringValue: event.region },\n })\n }\n\n // Commit hash\n if (event.commitHash) {\n attributes.push({\n key: 'vcs.commit.id',\n value: { stringValue: event.commitHash },\n })\n }\n\n // Custom resource attributes from config\n if (config.resourceAttributes) {\n for (const [key, value] of Object.entries(config.resourceAttributes)) {\n attributes.push({\n key,\n value: toAttributeValue(value),\n })\n }\n }\n\n return attributes\n}\n\n/**\n * Build headers from OTEL env vars.\n * Kept inline as OTLP-specific (parses OTEL_EXPORTER_OTLP_HEADERS=key=val,key=val).\n */\nfunction getHeadersFromEnv(): Record<string, string> | undefined {\n const headersEnv = process.env.OTEL_EXPORTER_OTLP_HEADERS || process.env.NUXT_OTLP_HEADERS\n if (headersEnv) {\n const headers: Record<string, string> = {}\n const decoded = decodeURIComponent(headersEnv)\n for (const pair of decoded.split(',')) {\n const eqIndex = pair.indexOf('=')\n if (eqIndex > 0) {\n const key = pair.slice(0, eqIndex).trim()\n const value = pair.slice(eqIndex + 1).trim()\n if (key && value) {\n headers[key] = value\n }\n }\n }\n if (Object.keys(headers).length > 0) return headers\n }\n\n const auth = process.env.NUXT_OTLP_AUTH\n if (auth) {\n return { Authorization: auth }\n }\n\n return undefined\n}\n\n/**\n * Create a drain function for sending logs to an OTLP endpoint.\n *\n * Configuration priority (highest to lowest):\n * 1. Overrides passed to createOTLPDrain()\n * 2. runtimeConfig.evlog.otlp (NUXT_EVLOG_OTLP_*)\n * 3. runtimeConfig.otlp (NUXT_OTLP_*)\n * 4. Environment variables: OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_SERVICE_NAME\n *\n * @example\n * ```ts\n * // Zero config - reads from runtimeConfig or env vars\n * nitroApp.hooks.hook('evlog:drain', createOTLPDrain())\n *\n * // With overrides\n * nitroApp.hooks.hook('evlog:drain', createOTLPDrain({\n * endpoint: 'http://localhost:4318',\n * }))\n * ```\n */\nexport function createOTLPDrain(overrides?: Partial<OTLPConfig>) {\n return defineDrain<OTLPConfig>({\n name: 'otlp',\n resolve: () => {\n const config = resolveAdapterConfig<OTLPConfig>('otlp', OTLP_FIELDS, overrides)\n\n // OTLP-specific: resolve headers from env if not provided via config\n if (!config.headers) {\n config.headers = getHeadersFromEnv()\n }\n\n if (!config.endpoint) {\n console.error('[evlog/otlp] Missing endpoint. Set NUXT_OTLP_ENDPOINT or OTEL_EXPORTER_OTLP_ENDPOINT env var, or pass to createOTLPDrain()')\n return null\n }\n return config as OTLPConfig\n },\n send: sendBatchToOTLP,\n })\n}\n\n/**\n * Send a single event to an OTLP endpoint.\n *\n * @example\n * ```ts\n * await sendToOTLP(event, {\n * endpoint: 'http://localhost:4318',\n * })\n * ```\n */\nexport async function sendToOTLP(event: WideEvent, config: OTLPConfig): Promise<void> {\n await sendBatchToOTLP([event], config)\n}\n\n/**\n * Send a batch of events to an OTLP endpoint.\n *\n * @example\n * ```ts\n * await sendBatchToOTLP(events, {\n * endpoint: 'http://localhost:4318',\n * })\n * ```\n */\nexport async function sendBatchToOTLP(events: WideEvent[], config: OTLPConfig): Promise<void> {\n if (events.length === 0) return\n\n const url = `${config.endpoint.replace(/\\/$/, '')}/v1/logs`\n\n // Group events by service for proper resource attribution\n // For simplicity, we use the first event's resource attributes\n const [firstEvent] = events\n const resourceAttributes = buildResourceAttributes(firstEvent, config)\n\n const logRecords = events.map(toOTLPLogRecord)\n\n const payload: ExportLogsServiceRequest = {\n resourceLogs: [\n {\n resource: { attributes: resourceAttributes },\n scopeLogs: [\n {\n scope: { name: 'evlog', version: '1.0.0' },\n logRecords,\n },\n ],\n },\n ],\n }\n\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n ...config.headers,\n }\n\n await httpPost({\n url,\n headers,\n body: JSON.stringify(payload),\n timeout: config.timeout ?? 5000,\n label: 'OTLP',\n })\n}\n"],"mappings":"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"}
@@ -1,23 +1,25 @@
1
- import { DrainContext, WideEvent } from '../types.mjs';
1
+ import { DrainContext, WideEvent } from "../types.mjs";
2
+ import "../index.mjs";
2
3
 
4
+ //#region src/adapters/posthog.d.ts
3
5
  interface PostHogConfig {
4
- /** PostHog project API key */
5
- apiKey: string;
6
- /** PostHog host URL. Default: https://us.i.posthog.com */
7
- host?: string;
8
- /** PostHog event name. Default: evlog_wide_event */
9
- eventName?: string;
10
- /** Override distinct_id (defaults to event.service) */
11
- distinctId?: string;
12
- /** Request timeout in milliseconds. Default: 5000 */
13
- timeout?: number;
6
+ /** PostHog project API key */
7
+ apiKey: string;
8
+ /** PostHog host URL. Default: https://us.i.posthog.com */
9
+ host?: string;
10
+ /** PostHog event name. Default: evlog_wide_event */
11
+ eventName?: string;
12
+ /** Override distinct_id (defaults to event.service) */
13
+ distinctId?: string;
14
+ /** Request timeout in milliseconds. Default: 5000 */
15
+ timeout?: number;
14
16
  }
15
17
  /** PostHog event structure for the batch API */
16
18
  interface PostHogEvent {
17
- event: string;
18
- distinct_id: string;
19
- timestamp: string;
20
- properties: Record<string, unknown>;
19
+ event: string;
20
+ distinct_id: string;
21
+ timestamp: string;
22
+ properties: Record<string, unknown>;
21
23
  }
22
24
  /**
23
25
  * Convert a WideEvent to a PostHog event format.
@@ -44,7 +46,7 @@ declare function toPostHogEvent(event: WideEvent, config: PostHogConfig): PostHo
44
46
  * }))
45
47
  * ```
46
48
  */
47
- declare function createPostHogDrain(overrides?: Partial<PostHogConfig>): (ctx: DrainContext) => Promise<void>;
49
+ declare function createPostHogDrain(overrides?: Partial<PostHogConfig>): (ctx: DrainContext | DrainContext[]) => Promise<void>;
48
50
  /**
49
51
  * Send a single event to PostHog.
50
52
  *
@@ -67,6 +69,39 @@ declare function sendToPostHog(event: WideEvent, config: PostHogConfig): Promise
67
69
  * ```
68
70
  */
69
71
  declare function sendBatchToPostHog(events: WideEvent[], config: PostHogConfig): Promise<void>;
70
-
71
- export { createPostHogDrain, sendBatchToPostHog, sendToPostHog, toPostHogEvent };
72
- export type { PostHogConfig, PostHogEvent };
72
+ interface PostHogLogsConfig {
73
+ /** PostHog project API key */
74
+ apiKey: string;
75
+ /** PostHog host URL. Default: https://us.i.posthog.com */
76
+ host?: string;
77
+ /** Request timeout in milliseconds. Default: 5000 */
78
+ timeout?: number;
79
+ }
80
+ /**
81
+ * Create a drain function for sending logs to PostHog Logs via OTLP.
82
+ *
83
+ * PostHog Logs uses the standard OTLP log format. This drain wraps
84
+ * `sendBatchToOTLP()` with PostHog-specific defaults (endpoint, auth).
85
+ *
86
+ * Configuration priority (highest to lowest):
87
+ * 1. Overrides passed to createPostHogLogsDrain()
88
+ * 2. runtimeConfig.evlog.posthog
89
+ * 3. runtimeConfig.posthog
90
+ * 4. Environment variables: NUXT_POSTHOG_*, POSTHOG_*
91
+ *
92
+ * @example
93
+ * ```ts
94
+ * // Zero config - just set NUXT_POSTHOG_API_KEY env var
95
+ * nitroApp.hooks.hook('evlog:drain', createPostHogLogsDrain())
96
+ *
97
+ * // With overrides
98
+ * nitroApp.hooks.hook('evlog:drain', createPostHogLogsDrain({
99
+ * apiKey: 'phc_...',
100
+ * host: 'https://eu.i.posthog.com',
101
+ * }))
102
+ * ```
103
+ */
104
+ declare function createPostHogLogsDrain(overrides?: Partial<PostHogLogsConfig>): (ctx: DrainContext | DrainContext[]) => Promise<void>;
105
+ //#endregion
106
+ export { PostHogConfig, PostHogEvent, PostHogLogsConfig, createPostHogDrain, createPostHogLogsDrain, sendBatchToPostHog, sendToPostHog, toPostHogEvent };
107
+ //# sourceMappingURL=posthog.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"posthog.d.mts","names":[],"sources":["../../src/adapters/posthog.ts"],"mappings":";;;;UAQiB,aAAA;;EAEf,MAAA;EAFe;EAIf,IAAA;;EAEA,SAAA;EAJA;EAMA,UAAA;EAFA;EAIA,OAAA;AAAA;;UAIe,YAAA;EACf,KAAA;EACA,WAAA;EACA,SAAA;EACA,UAAA,EAAY,MAAA;AAAA;;;;iBAcE,cAAA,CAAe,KAAA,EAAO,SAAA,EAAW,MAAA,EAAQ,aAAA,GAAgB,YAAA;;;AAAzE;;;;;;;;;;;;;;;AAoCA;;;;iBAAgB,kBAAA,CAAmB,SAAA,GAAY,OAAA,CAAQ,aAAA,KAAc,GAAA,EAAf,YAAA,GAAe,YAAA,OAAA,OAAA;;;;;;;;;;;iBAyB/C,aAAA,CAAc,KAAA,EAAO,SAAA,EAAW,MAAA,EAAQ,aAAA,GAAgB,OAAA;;;;AAA9E;;;;;;;iBAcsB,kBAAA,CAAmB,MAAA,EAAQ,SAAA,IAAa,MAAA,EAAQ,aAAA,GAAgB,OAAA;AAAA,UAsBrE,iBAAA;EApCmB;EAsClC,MAAA;EAtCoD;EAwCpD,IAAA;EAxCmF;EA0CnF,OAAA;AAAA;;;;;;;;;;;;;;;AANF;;;;;;;;;AAuCA;iBAAgB,sBAAA,CAAuB,SAAA,GAAY,OAAA,CAAQ,iBAAA,KAAkB,GAAA,EAAnB,YAAA,GAAmB,YAAA,OAAA,OAAA"}