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.
- package/README.md +96 -0
- package/dist/_http-DVDwNag0.mjs +76 -0
- package/dist/_http-DVDwNag0.mjs.map +1 -0
- package/dist/_severity-CXfyvxQi.mjs +17 -0
- package/dist/_severity-CXfyvxQi.mjs.map +1 -0
- package/dist/adapters/axiom.d.mts +17 -15
- package/dist/adapters/axiom.d.mts.map +1 -0
- package/dist/adapters/axiom.mjs +91 -50
- package/dist/adapters/axiom.mjs.map +1 -0
- package/dist/adapters/better-stack.d.mts +63 -0
- package/dist/adapters/better-stack.d.mts.map +1 -0
- package/dist/adapters/better-stack.mjs +98 -0
- package/dist/adapters/better-stack.mjs.map +1 -0
- package/dist/adapters/otlp.d.mts +32 -30
- package/dist/adapters/otlp.d.mts.map +1 -0
- package/dist/adapters/otlp.mjs +181 -181
- package/dist/adapters/otlp.mjs.map +1 -0
- package/dist/adapters/posthog.d.mts +54 -19
- package/dist/adapters/posthog.d.mts.map +1 -0
- package/dist/adapters/posthog.mjs +156 -63
- package/dist/adapters/posthog.mjs.map +1 -0
- package/dist/adapters/sentry.d.mts +25 -23
- package/dist/adapters/sentry.d.mts.map +1 -0
- package/dist/adapters/sentry.mjs +198 -153
- package/dist/adapters/sentry.mjs.map +1 -0
- package/dist/browser.d.mts +63 -0
- package/dist/browser.d.mts.map +1 -0
- package/dist/browser.mjs +95 -0
- package/dist/browser.mjs.map +1 -0
- package/dist/enrichers.d.mts +74 -0
- package/dist/enrichers.d.mts.map +1 -0
- package/dist/enrichers.mjs +172 -0
- package/dist/enrichers.mjs.map +1 -0
- package/dist/error.d.mts +24 -22
- package/dist/error.d.mts.map +1 -0
- package/dist/error.mjs +107 -76
- package/dist/error.mjs.map +1 -0
- package/dist/index.d.mts +6 -5
- package/dist/index.mjs +6 -5
- package/dist/logger.d.mts +11 -5
- package/dist/logger.d.mts.map +1 -0
- package/dist/logger.mjs +255 -186
- package/dist/logger.mjs.map +1 -0
- package/dist/nitro/errorHandler.d.mts +4 -2
- package/dist/nitro/errorHandler.d.mts.map +1 -0
- package/dist/nitro/errorHandler.mjs +38 -38
- package/dist/nitro/errorHandler.mjs.map +1 -0
- package/dist/nitro/module.d.mts +11 -0
- package/dist/nitro/module.d.mts.map +1 -0
- package/dist/nitro/module.mjs +23 -0
- package/dist/nitro/module.mjs.map +1 -0
- package/dist/nitro/plugin.d.mts +4 -2
- package/dist/nitro/plugin.d.mts.map +1 -0
- package/dist/nitro/plugin.mjs +135 -140
- package/dist/nitro/plugin.mjs.map +1 -0
- package/dist/nitro/v3/errorHandler.d.mts +24 -0
- package/dist/nitro/v3/errorHandler.d.mts.map +1 -0
- package/dist/nitro/v3/errorHandler.mjs +36 -0
- package/dist/nitro/v3/errorHandler.mjs.map +1 -0
- package/dist/nitro/v3/index.d.mts +4 -0
- package/dist/nitro/v3/index.mjs +4 -0
- package/dist/nitro/v3/module.d.mts +10 -0
- package/dist/nitro/v3/module.d.mts.map +1 -0
- package/dist/nitro/v3/module.mjs +22 -0
- package/dist/nitro/v3/module.mjs.map +1 -0
- package/dist/nitro/v3/plugin.d.mts +14 -0
- package/dist/nitro/v3/plugin.d.mts.map +1 -0
- package/dist/nitro/v3/plugin.mjs +157 -0
- package/dist/nitro/v3/plugin.mjs.map +1 -0
- package/dist/nitro/v3/useLogger.d.mts +24 -0
- package/dist/nitro/v3/useLogger.d.mts.map +1 -0
- package/dist/nitro/v3/useLogger.mjs +27 -0
- package/dist/nitro/v3/useLogger.mjs.map +1 -0
- package/dist/nitro-D57TWGyN.mjs +73 -0
- package/dist/nitro-D57TWGyN.mjs.map +1 -0
- package/dist/nitro-D81NBVPi.d.mts +42 -0
- package/dist/nitro-D81NBVPi.d.mts.map +1 -0
- package/dist/nuxt/module.d.mts +155 -168
- package/dist/nuxt/module.d.mts.map +1 -0
- package/dist/nuxt/module.mjs +75 -65
- package/dist/nuxt/module.mjs.map +1 -0
- package/dist/pipeline.d.mts +46 -0
- package/dist/pipeline.d.mts.map +1 -0
- package/dist/pipeline.mjs +122 -0
- package/dist/pipeline.mjs.map +1 -0
- package/dist/runtime/client/log.d.mts +12 -7
- package/dist/runtime/client/log.d.mts.map +1 -0
- package/dist/runtime/client/log.mjs +72 -64
- package/dist/runtime/client/log.mjs.map +1 -0
- package/dist/runtime/client/plugin.d.mts +3 -1
- package/dist/runtime/client/plugin.d.mts.map +1 -0
- package/dist/runtime/client/plugin.mjs +14 -12
- package/dist/runtime/client/plugin.mjs.map +1 -0
- package/dist/runtime/server/routes/_evlog/ingest.post.d.mts +4 -2
- package/dist/runtime/server/routes/_evlog/ingest.post.d.mts.map +1 -0
- package/dist/runtime/server/routes/_evlog/ingest.post.mjs +113 -76
- package/dist/runtime/server/routes/_evlog/ingest.post.mjs.map +1 -0
- package/dist/runtime/server/useLogger.d.mts +14 -3
- package/dist/runtime/server/useLogger.d.mts.map +1 -0
- package/dist/runtime/server/useLogger.mjs +39 -10
- package/dist/runtime/server/useLogger.mjs.map +1 -0
- package/dist/runtime/utils/parseError.d.mts +5 -3
- package/dist/runtime/utils/parseError.d.mts.map +1 -0
- package/dist/runtime/utils/parseError.mjs +25 -26
- package/dist/runtime/utils/parseError.mjs.map +1 -0
- package/dist/types.d.mts +378 -246
- package/dist/types.d.mts.map +1 -0
- package/dist/types.mjs +1 -1
- package/dist/utils.d.mts +19 -14
- package/dist/utils.d.mts.map +1 -0
- package/dist/utils.mjs +59 -50
- package/dist/utils.mjs.map +1 -0
- package/dist/workers.d.mts +10 -9
- package/dist/workers.d.mts.map +1 -0
- package/dist/workers.mjs +68 -39
- package/dist/workers.mjs.map +1 -0
- package/package.json +55 -10
- package/dist/adapters/axiom.d.ts +0 -62
- package/dist/adapters/otlp.d.ts +0 -83
- package/dist/adapters/posthog.d.ts +0 -72
- package/dist/adapters/sentry.d.ts +0 -78
- package/dist/error.d.ts +0 -63
- package/dist/index.d.ts +0 -5
- package/dist/logger.d.ts +0 -40
- package/dist/nitro/errorHandler.d.ts +0 -13
- package/dist/nitro/plugin.d.ts +0 -5
- package/dist/nuxt/module.d.ts +0 -171
- package/dist/runtime/client/log.d.ts +0 -10
- package/dist/runtime/client/plugin.d.ts +0 -3
- package/dist/runtime/server/routes/_evlog/ingest.post.d.ts +0 -5
- package/dist/runtime/server/useLogger.d.ts +0 -28
- package/dist/runtime/utils/parseError.d.ts +0 -5
- package/dist/shared/evlog.Bc35pxiY.mjs +0 -10
- package/dist/types.d.ts +0 -364
- package/dist/utils.d.ts +0 -29
- package/dist/workers.d.ts +0 -45
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.mts","names":[],"sources":["../src/types.ts"],"mappings":"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"}
|
package/dist/types.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
export { };
|
package/dist/utils.d.mts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { EnvironmentContext, LogLevel } from
|
|
1
|
+
import { EnvironmentContext, LogLevel } from "./types.mjs";
|
|
2
2
|
|
|
3
|
+
//#region src/utils.d.ts
|
|
3
4
|
declare function formatDuration(ms: number): string;
|
|
4
5
|
declare function isServer(): boolean;
|
|
5
6
|
declare function isClient(): boolean;
|
|
@@ -7,23 +8,27 @@ declare function isDev(): boolean;
|
|
|
7
8
|
declare function detectEnvironment(): Partial<EnvironmentContext>;
|
|
8
9
|
declare function getConsoleMethod(level: LogLevel): LogLevel;
|
|
9
10
|
declare const colors: {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
11
|
+
readonly reset: "\u001B[0m";
|
|
12
|
+
readonly bold: "\u001B[1m";
|
|
13
|
+
readonly dim: "\u001B[2m";
|
|
14
|
+
readonly red: "\u001B[31m";
|
|
15
|
+
readonly green: "\u001B[32m";
|
|
16
|
+
readonly yellow: "\u001B[33m";
|
|
17
|
+
readonly blue: "\u001B[34m";
|
|
18
|
+
readonly magenta: "\u001B[35m";
|
|
19
|
+
readonly cyan: "\u001B[36m";
|
|
20
|
+
readonly white: "\u001B[37m";
|
|
21
|
+
readonly gray: "\u001B[90m";
|
|
21
22
|
};
|
|
22
23
|
declare function getLevelColor(level: string): string;
|
|
24
|
+
/** Headers that should never be passed to hooks for security */
|
|
25
|
+
declare const SENSITIVE_HEADERS: string[];
|
|
26
|
+
declare function filterSafeHeaders(headers: Record<string, string>): Record<string, string>;
|
|
23
27
|
/**
|
|
24
28
|
* Match a path against a glob pattern.
|
|
25
29
|
* Supports * (any chars except /) and ** (any chars including /).
|
|
26
30
|
*/
|
|
27
31
|
declare function matchesPattern(path: string, pattern: string): boolean;
|
|
28
|
-
|
|
29
|
-
export { colors, detectEnvironment, formatDuration, getConsoleMethod, getLevelColor, isClient, isDev, isServer, matchesPattern };
|
|
32
|
+
//#endregion
|
|
33
|
+
export { SENSITIVE_HEADERS, colors, detectEnvironment, filterSafeHeaders, formatDuration, getConsoleMethod, getLevelColor, isClient, isDev, isServer, matchesPattern };
|
|
34
|
+
//# sourceMappingURL=utils.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.mts","names":[],"sources":["../src/utils.ts"],"mappings":";;;iBAEgB,cAAA,CAAe,EAAA;AAAA,iBAOf,QAAA,CAAA;AAAA,iBAIA,QAAA,CAAA;AAAA,iBAIA,KAAA,CAAA;AAAA,iBAUA,iBAAA,CAAA,GAAqB,OAAA,CAAQ,kBAAA;AAAA,iBAmB7B,gBAAA,CAAiB,KAAA,EAAO,QAAA,GAAW,QAAA;AAAA,cAItC,MAAA;EAAA;;;;;;;;;;;;iBAcG,aAAA,CAAc,KAAA;;cAgBjB,iBAAA;AAAA,iBASG,iBAAA,CAAkB,OAAA,EAAS,MAAA,mBAAyB,MAAA;;;;;iBAgBpD,cAAA,CAAe,IAAA,UAAc,OAAA"}
|
package/dist/utils.mjs
CHANGED
|
@@ -1,69 +1,78 @@
|
|
|
1
|
+
//#region src/utils.ts
|
|
1
2
|
function formatDuration(ms) {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
5
|
-
return `${(ms / 1e3).toFixed(2)}s`;
|
|
3
|
+
if (ms < 1e3) return `${Math.round(ms)}ms`;
|
|
4
|
+
return `${(ms / 1e3).toFixed(2)}s`;
|
|
6
5
|
}
|
|
7
6
|
function isServer() {
|
|
8
|
-
|
|
7
|
+
return typeof window === "undefined";
|
|
9
8
|
}
|
|
10
9
|
function isClient() {
|
|
11
|
-
|
|
10
|
+
return typeof window !== "undefined";
|
|
12
11
|
}
|
|
13
12
|
function isDev() {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
if (typeof window !== "undefined") {
|
|
18
|
-
return true;
|
|
19
|
-
}
|
|
20
|
-
return false;
|
|
13
|
+
if (typeof process !== "undefined") return process.env.NODE_ENV !== "production";
|
|
14
|
+
if (typeof window !== "undefined") return true;
|
|
15
|
+
return false;
|
|
21
16
|
}
|
|
22
17
|
function detectEnvironment() {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
18
|
+
const env = typeof process !== "undefined" ? process.env : {};
|
|
19
|
+
const defaultEnvironment = isDev() ? "development" : "production";
|
|
20
|
+
return {
|
|
21
|
+
environment: env.NODE_ENV || defaultEnvironment,
|
|
22
|
+
service: env.SERVICE_NAME || "app",
|
|
23
|
+
version: env.APP_VERSION,
|
|
24
|
+
commitHash: env.COMMIT_SHA || env.GITHUB_SHA || env.VERCEL_GIT_COMMIT_SHA || env.CF_PAGES_COMMIT_SHA,
|
|
25
|
+
region: env.VERCEL_REGION || env.AWS_REGION || env.FLY_REGION || env.CF_REGION
|
|
26
|
+
};
|
|
32
27
|
}
|
|
33
28
|
function getConsoleMethod(level) {
|
|
34
|
-
|
|
29
|
+
return level;
|
|
35
30
|
}
|
|
36
31
|
const colors = {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
32
|
+
reset: "\x1B[0m",
|
|
33
|
+
bold: "\x1B[1m",
|
|
34
|
+
dim: "\x1B[2m",
|
|
35
|
+
red: "\x1B[31m",
|
|
36
|
+
green: "\x1B[32m",
|
|
37
|
+
yellow: "\x1B[33m",
|
|
38
|
+
blue: "\x1B[34m",
|
|
39
|
+
magenta: "\x1B[35m",
|
|
40
|
+
cyan: "\x1B[36m",
|
|
41
|
+
white: "\x1B[37m",
|
|
42
|
+
gray: "\x1B[90m"
|
|
48
43
|
};
|
|
49
44
|
function getLevelColor(level) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
case "debug":
|
|
58
|
-
return colors.gray;
|
|
59
|
-
default:
|
|
60
|
-
return colors.white;
|
|
61
|
-
}
|
|
45
|
+
switch (level) {
|
|
46
|
+
case "error": return colors.red;
|
|
47
|
+
case "warn": return colors.yellow;
|
|
48
|
+
case "info": return colors.cyan;
|
|
49
|
+
case "debug": return colors.gray;
|
|
50
|
+
default: return colors.white;
|
|
51
|
+
}
|
|
62
52
|
}
|
|
53
|
+
/** Headers that should never be passed to hooks for security */
|
|
54
|
+
const SENSITIVE_HEADERS = [
|
|
55
|
+
"authorization",
|
|
56
|
+
"cookie",
|
|
57
|
+
"set-cookie",
|
|
58
|
+
"x-api-key",
|
|
59
|
+
"x-auth-token",
|
|
60
|
+
"proxy-authorization"
|
|
61
|
+
];
|
|
62
|
+
function filterSafeHeaders(headers) {
|
|
63
|
+
const safeHeaders = {};
|
|
64
|
+
for (const [key, value] of Object.entries(headers)) if (!SENSITIVE_HEADERS.includes(key.toLowerCase())) safeHeaders[key] = value;
|
|
65
|
+
return safeHeaders;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Match a path against a glob pattern.
|
|
69
|
+
* Supports * (any chars except /) and ** (any chars including /).
|
|
70
|
+
*/
|
|
63
71
|
function matchesPattern(path, pattern) {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
return regex.test(path);
|
|
72
|
+
const regexPattern = pattern.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*\*/g, "{{GLOBSTAR}}").replace(/\*/g, "[^/]*").replace(/{{GLOBSTAR}}/g, ".*").replace(/\?/g, "[^/]");
|
|
73
|
+
return new RegExp(`^${regexPattern}$`).test(path);
|
|
67
74
|
}
|
|
68
75
|
|
|
69
|
-
|
|
76
|
+
//#endregion
|
|
77
|
+
export { SENSITIVE_HEADERS, colors, detectEnvironment, filterSafeHeaders, formatDuration, getConsoleMethod, getLevelColor, isClient, isDev, isServer, matchesPattern };
|
|
78
|
+
//# sourceMappingURL=utils.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.mjs","names":[],"sources":["../src/utils.ts"],"sourcesContent":["import type { EnvironmentContext, LogLevel } from './types'\n\nexport function formatDuration(ms: number): string {\n if (ms < 1000) {\n return `${Math.round(ms)}ms`\n }\n return `${(ms / 1000).toFixed(2)}s`\n}\n\nexport function isServer(): boolean {\n return typeof window === 'undefined'\n}\n\nexport function isClient(): boolean {\n return typeof window !== 'undefined'\n}\n\nexport function isDev(): boolean {\n if (typeof process !== 'undefined') {\n return process.env.NODE_ENV !== 'production'\n }\n if (typeof window !== 'undefined') {\n return true\n }\n return false\n}\n\nexport function detectEnvironment(): Partial<EnvironmentContext> {\n const env = typeof process !== 'undefined' ? process.env : {}\n const defaultEnvironment = isDev() ? 'development' : 'production'\n\n return {\n environment: env.NODE_ENV || defaultEnvironment,\n service: env.SERVICE_NAME || 'app',\n version: env.APP_VERSION,\n commitHash: env.COMMIT_SHA\n || env.GITHUB_SHA\n || env.VERCEL_GIT_COMMIT_SHA\n || env.CF_PAGES_COMMIT_SHA,\n region: env.VERCEL_REGION\n || env.AWS_REGION\n || env.FLY_REGION\n || env.CF_REGION,\n }\n}\n\nexport function getConsoleMethod(level: LogLevel): LogLevel {\n return level\n}\n\nexport const colors = {\n reset: '\\x1B[0m',\n bold: '\\x1B[1m',\n dim: '\\x1B[2m',\n red: '\\x1B[31m',\n green: '\\x1B[32m',\n yellow: '\\x1B[33m',\n blue: '\\x1B[34m',\n magenta: '\\x1B[35m',\n cyan: '\\x1B[36m',\n white: '\\x1B[37m',\n gray: '\\x1B[90m',\n} as const\n\nexport function getLevelColor(level: string): string {\n switch (level) {\n case 'error':\n return colors.red\n case 'warn':\n return colors.yellow\n case 'info':\n return colors.cyan\n case 'debug':\n return colors.gray\n default:\n return colors.white\n }\n}\n\n/** Headers that should never be passed to hooks for security */\nexport const SENSITIVE_HEADERS = [\n 'authorization',\n 'cookie',\n 'set-cookie',\n 'x-api-key',\n 'x-auth-token',\n 'proxy-authorization',\n]\n\nexport function filterSafeHeaders(headers: Record<string, string>): Record<string, string> {\n const safeHeaders: Record<string, string> = {}\n\n for (const [key, value] of Object.entries(headers)) {\n if (!SENSITIVE_HEADERS.includes(key.toLowerCase())) {\n safeHeaders[key] = value\n }\n }\n\n return safeHeaders\n}\n\n/**\n * Match a path against a glob pattern.\n * Supports * (any chars except /) and ** (any chars including /).\n */\nexport function matchesPattern(path: string, pattern: string): boolean {\n const regexPattern = pattern\n .replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&') // Escape special regex chars except * and ?\n .replace(/\\*\\*/g, '{{GLOBSTAR}}') // Temp placeholder for **\n .replace(/\\*/g, '[^/]*') // * matches anything except /\n .replace(/{{GLOBSTAR}}/g, '.*') // ** matches anything including /\n .replace(/\\?/g, '[^/]') // ? matches single char except /\n\n const regex = new RegExp(`^${regexPattern}$`)\n return regex.test(path)\n}\n"],"mappings":";AAEA,SAAgB,eAAe,IAAoB;AACjD,KAAI,KAAK,IACP,QAAO,GAAG,KAAK,MAAM,GAAG,CAAC;AAE3B,QAAO,IAAI,KAAK,KAAM,QAAQ,EAAE,CAAC;;AAGnC,SAAgB,WAAoB;AAClC,QAAO,OAAO,WAAW;;AAG3B,SAAgB,WAAoB;AAClC,QAAO,OAAO,WAAW;;AAG3B,SAAgB,QAAiB;AAC/B,KAAI,OAAO,YAAY,YACrB,QAAO,QAAQ,IAAI,aAAa;AAElC,KAAI,OAAO,WAAW,YACpB,QAAO;AAET,QAAO;;AAGT,SAAgB,oBAAiD;CAC/D,MAAM,MAAM,OAAO,YAAY,cAAc,QAAQ,MAAM,EAAE;CAC7D,MAAM,qBAAqB,OAAO,GAAG,gBAAgB;AAErD,QAAO;EACL,aAAa,IAAI,YAAY;EAC7B,SAAS,IAAI,gBAAgB;EAC7B,SAAS,IAAI;EACb,YAAY,IAAI,cACX,IAAI,cACJ,IAAI,yBACJ,IAAI;EACT,QAAQ,IAAI,iBACP,IAAI,cACJ,IAAI,cACJ,IAAI;EACV;;AAGH,SAAgB,iBAAiB,OAA2B;AAC1D,QAAO;;AAGT,MAAa,SAAS;CACpB,OAAO;CACP,MAAM;CACN,KAAK;CACL,KAAK;CACL,OAAO;CACP,QAAQ;CACR,MAAM;CACN,SAAS;CACT,MAAM;CACN,OAAO;CACP,MAAM;CACP;AAED,SAAgB,cAAc,OAAuB;AACnD,SAAQ,OAAR;EACE,KAAK,QACH,QAAO,OAAO;EAChB,KAAK,OACH,QAAO,OAAO;EAChB,KAAK,OACH,QAAO,OAAO;EAChB,KAAK,QACH,QAAO,OAAO;EAChB,QACE,QAAO,OAAO;;;;AAKpB,MAAa,oBAAoB;CAC/B;CACA;CACA;CACA;CACA;CACA;CACD;AAED,SAAgB,kBAAkB,SAAyD;CACzF,MAAM,cAAsC,EAAE;AAE9C,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,CAChD,KAAI,CAAC,kBAAkB,SAAS,IAAI,aAAa,CAAC,CAChD,aAAY,OAAO;AAIvB,QAAO;;;;;;AAOT,SAAgB,eAAe,MAAc,SAA0B;CACrE,MAAM,eAAe,QAClB,QAAQ,qBAAqB,OAAO,CACpC,QAAQ,SAAS,eAAe,CAChC,QAAQ,OAAO,QAAQ,CACvB,QAAQ,iBAAiB,KAAK,CAC9B,QAAQ,OAAO,OAAO;AAGzB,QADc,IAAI,OAAO,IAAI,aAAa,GAAG,CAChC,KAAK,KAAK"}
|
package/dist/workers.d.mts
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { LoggerConfig, RequestLogger } from "./types.mjs";
|
|
2
2
|
|
|
3
|
+
//#region src/workers/index.d.ts
|
|
3
4
|
/**
|
|
4
5
|
* Options for createWorkersLogger
|
|
5
6
|
*/
|
|
6
7
|
interface WorkersLoggerOptions {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
/** Override the request ID (default: cf-ray header) */
|
|
9
|
+
requestId?: string;
|
|
10
|
+
/** Headers to include in logs (default: none) */
|
|
11
|
+
headers?: string[];
|
|
11
12
|
}
|
|
12
13
|
/**
|
|
13
14
|
* Initialize evlog for Cloudflare Workers.
|
|
@@ -39,7 +40,7 @@ declare function initWorkersLogger(options?: LoggerConfig): void;
|
|
|
39
40
|
* }
|
|
40
41
|
* ```
|
|
41
42
|
*/
|
|
42
|
-
declare function createWorkersLogger(request: Request, options?: WorkersLoggerOptions): RequestLogger
|
|
43
|
-
|
|
44
|
-
export { createWorkersLogger, initWorkersLogger };
|
|
45
|
-
|
|
43
|
+
declare function createWorkersLogger<T extends object = Record<string, unknown>>(request: Request, options?: WorkersLoggerOptions): RequestLogger<T>;
|
|
44
|
+
//#endregion
|
|
45
|
+
export { WorkersLoggerOptions, createWorkersLogger, initWorkersLogger };
|
|
46
|
+
//# sourceMappingURL=workers.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workers.d.mts","names":[],"sources":["../src/workers/index.ts"],"mappings":";;;;;AAMA;UAAiB,oBAAA;;EAEf,SAAA;EAEO;EAAP,OAAA;AAAA;;;;AAsEF;;;;;;;;iBArCgB,iBAAA,CAAkB,OAAA,GAAS,YAAA;;;;;;;;;;;;;;;;;;;iBAqC3B,mBAAA,oBAAuC,MAAA,kBAAA,CAAyB,OAAA,EAAS,OAAA,EAAS,OAAA,GAAS,oBAAA,GAA4B,aAAA,CAAc,CAAA"}
|
package/dist/workers.mjs
CHANGED
|
@@ -1,52 +1,81 @@
|
|
|
1
|
-
import { createRequestLogger, initLogger } from
|
|
2
|
-
import './utils.mjs';
|
|
1
|
+
import { createRequestLogger, initLogger } from "./logger.mjs";
|
|
3
2
|
|
|
3
|
+
//#region src/workers/index.ts
|
|
4
4
|
function isRecord(value) {
|
|
5
|
-
|
|
5
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
6
6
|
}
|
|
7
7
|
function collectHeaders(headers, include) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
});
|
|
16
|
-
return Object.keys(result).length > 0 ? result : void 0;
|
|
8
|
+
if (!include || include.length === 0) return void 0;
|
|
9
|
+
const normalized = new Set(include.map((h) => h.toLowerCase()));
|
|
10
|
+
const result = {};
|
|
11
|
+
headers.forEach((value, key) => {
|
|
12
|
+
if (normalized.has(key.toLowerCase())) result[key] = value;
|
|
13
|
+
});
|
|
14
|
+
return Object.keys(result).length > 0 ? result : void 0;
|
|
17
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Initialize evlog for Cloudflare Workers.
|
|
18
|
+
* Call once at module scope.
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```ts
|
|
22
|
+
* initWorkersLogger({
|
|
23
|
+
* env: { service: 'my-api' },
|
|
24
|
+
* })
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
18
27
|
function initWorkersLogger(options = {}) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
28
|
+
initLogger({
|
|
29
|
+
...options,
|
|
30
|
+
pretty: false,
|
|
31
|
+
stringify: false
|
|
32
|
+
});
|
|
24
33
|
}
|
|
25
34
|
function pickCfContext(request) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
35
|
+
const cf = Reflect.get(request, "cf");
|
|
36
|
+
if (!isRecord(cf)) return {};
|
|
37
|
+
const out = {};
|
|
38
|
+
if (typeof cf.colo === "string") out.colo = cf.colo;
|
|
39
|
+
if (typeof cf.country === "string") out.country = cf.country;
|
|
40
|
+
if (typeof cf.asn === "number") out.asn = cf.asn;
|
|
41
|
+
return out;
|
|
33
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Create a request-scoped logger for Cloudflare Workers.
|
|
45
|
+
* Auto-extracts cf-ray, request.cf context, method, and path.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```ts
|
|
49
|
+
* export default {
|
|
50
|
+
* async fetch(request: Request) {
|
|
51
|
+
* const log = createWorkersLogger(request)
|
|
52
|
+
*
|
|
53
|
+
* log.set({ user: { id: '123' } })
|
|
54
|
+
* log.emit({ status: 200 })
|
|
55
|
+
*
|
|
56
|
+
* return new Response('ok')
|
|
57
|
+
* }
|
|
58
|
+
* }
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
34
61
|
function createWorkersLogger(request, options = {}) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
62
|
+
const url = new URL(request.url);
|
|
63
|
+
const cfRay = request.headers.get("cf-ray") ?? void 0;
|
|
64
|
+
const traceparent = request.headers.get("traceparent") ?? void 0;
|
|
65
|
+
const log = createRequestLogger({
|
|
66
|
+
method: request.method,
|
|
67
|
+
path: url.pathname,
|
|
68
|
+
requestId: options.requestId ?? cfRay
|
|
69
|
+
});
|
|
70
|
+
log.set({
|
|
71
|
+
cfRay,
|
|
72
|
+
traceparent,
|
|
73
|
+
...pickCfContext(request),
|
|
74
|
+
...options.headers ? { requestHeaders: collectHeaders(request.headers, options.headers) } : {}
|
|
75
|
+
});
|
|
76
|
+
return log;
|
|
50
77
|
}
|
|
51
78
|
|
|
79
|
+
//#endregion
|
|
52
80
|
export { createWorkersLogger, initWorkersLogger };
|
|
81
|
+
//# sourceMappingURL=workers.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workers.mjs","names":[],"sources":["../src/workers/index.ts"],"sourcesContent":["import { initLogger, createRequestLogger } from '../logger'\nimport type { LoggerConfig, RequestLogger } from '../types'\n\n/**\n * Options for createWorkersLogger\n */\nexport interface WorkersLoggerOptions {\n /** Override the request ID (default: cf-ray header) */\n requestId?: string\n /** Headers to include in logs (default: none) */\n headers?: string[]\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction collectHeaders(headers: Headers, include: string[] | undefined): Record<string, string> | undefined {\n if (!include || include.length === 0) return undefined\n\n const normalized = new Set(include.map(h => h.toLowerCase()))\n const result: Record<string, string> = {}\n\n headers.forEach((value, key) => {\n if (normalized.has(key.toLowerCase())) {\n result[key] = value\n }\n })\n\n return Object.keys(result).length > 0 ? result : undefined\n}\n\n/**\n * Initialize evlog for Cloudflare Workers.\n * Call once at module scope.\n *\n * @example\n * ```ts\n * initWorkersLogger({\n * env: { service: 'my-api' },\n * })\n * ```\n */\nexport function initWorkersLogger(options: LoggerConfig = {}): void {\n initLogger({\n ...options,\n pretty: false,\n stringify: false,\n })\n}\n\nfunction pickCfContext(request: Request): Record<string, unknown> {\n const cf = Reflect.get(request, 'cf')\n if (!isRecord(cf)) return {}\n\n const out: Record<string, unknown> = {}\n if (typeof cf.colo === 'string') out.colo = cf.colo\n if (typeof cf.country === 'string') out.country = cf.country\n if (typeof cf.asn === 'number') out.asn = cf.asn\n return out\n}\n\n/**\n * Create a request-scoped logger for Cloudflare Workers.\n * Auto-extracts cf-ray, request.cf context, method, and path.\n *\n * @example\n * ```ts\n * export default {\n * async fetch(request: Request) {\n * const log = createWorkersLogger(request)\n *\n * log.set({ user: { id: '123' } })\n * log.emit({ status: 200 })\n *\n * return new Response('ok')\n * }\n * }\n * ```\n */\nexport function createWorkersLogger<T extends object = Record<string, unknown>>(request: Request, options: WorkersLoggerOptions = {}): RequestLogger<T> {\n const url = new URL(request.url)\n const cfRay = request.headers.get('cf-ray') ?? undefined\n const traceparent = request.headers.get('traceparent') ?? undefined\n\n const log = createRequestLogger<T>({\n method: request.method,\n path: url.pathname,\n requestId: options.requestId ?? cfRay,\n })\n\n // Cast needed: CF-specific enrichment fields (cfRay, traceparent, etc.) aren't in user's T\n const untyped = log as unknown as RequestLogger\n untyped.set({\n cfRay,\n traceparent,\n ...pickCfContext(request),\n ...(options.headers ? { requestHeaders: collectHeaders(request.headers, options.headers) } : {}),\n })\n\n return log\n}\n"],"mappings":";;;AAaA,SAAS,SAAS,OAAkD;AAClE,QAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,MAAM;;AAG7E,SAAS,eAAe,SAAkB,SAAmE;AAC3G,KAAI,CAAC,WAAW,QAAQ,WAAW,EAAG,QAAO;CAE7C,MAAM,aAAa,IAAI,IAAI,QAAQ,KAAI,MAAK,EAAE,aAAa,CAAC,CAAC;CAC7D,MAAM,SAAiC,EAAE;AAEzC,SAAQ,SAAS,OAAO,QAAQ;AAC9B,MAAI,WAAW,IAAI,IAAI,aAAa,CAAC,CACnC,QAAO,OAAO;GAEhB;AAEF,QAAO,OAAO,KAAK,OAAO,CAAC,SAAS,IAAI,SAAS;;;;;;;;;;;;;AAcnD,SAAgB,kBAAkB,UAAwB,EAAE,EAAQ;AAClE,YAAW;EACT,GAAG;EACH,QAAQ;EACR,WAAW;EACZ,CAAC;;AAGJ,SAAS,cAAc,SAA2C;CAChE,MAAM,KAAK,QAAQ,IAAI,SAAS,KAAK;AACrC,KAAI,CAAC,SAAS,GAAG,CAAE,QAAO,EAAE;CAE5B,MAAM,MAA+B,EAAE;AACvC,KAAI,OAAO,GAAG,SAAS,SAAU,KAAI,OAAO,GAAG;AAC/C,KAAI,OAAO,GAAG,YAAY,SAAU,KAAI,UAAU,GAAG;AACrD,KAAI,OAAO,GAAG,QAAQ,SAAU,KAAI,MAAM,GAAG;AAC7C,QAAO;;;;;;;;;;;;;;;;;;;;AAqBT,SAAgB,oBAAgE,SAAkB,UAAgC,EAAE,EAAoB;CACtJ,MAAM,MAAM,IAAI,IAAI,QAAQ,IAAI;CAChC,MAAM,QAAQ,QAAQ,QAAQ,IAAI,SAAS,IAAI;CAC/C,MAAM,cAAc,QAAQ,QAAQ,IAAI,cAAc,IAAI;CAE1D,MAAM,MAAM,oBAAuB;EACjC,QAAQ,QAAQ;EAChB,MAAM,IAAI;EACV,WAAW,QAAQ,aAAa;EACjC,CAAC;AAIF,CADgB,IACR,IAAI;EACV;EACA;EACA,GAAG,cAAc,QAAQ;EACzB,GAAI,QAAQ,UAAU,EAAE,gBAAgB,eAAe,QAAQ,SAAS,QAAQ,QAAQ,EAAE,GAAG,EAAE;EAChG,CAAC;AAEF,QAAO"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "evlog",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.8.0",
|
|
4
4
|
"description": "Wide event logging library with structured error handling. Inspired by LoggingSucks.",
|
|
5
5
|
"author": "HugoRCD <contact@hrcd.fr>",
|
|
6
6
|
"homepage": "https://evlog.dev",
|
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
],
|
|
23
23
|
"license": "MIT",
|
|
24
24
|
"type": "module",
|
|
25
|
+
"sideEffects": false,
|
|
25
26
|
"exports": {
|
|
26
27
|
".": {
|
|
27
28
|
"types": "./dist/index.d.mts",
|
|
@@ -32,8 +33,12 @@
|
|
|
32
33
|
"import": "./dist/nuxt/module.mjs"
|
|
33
34
|
},
|
|
34
35
|
"./nitro": {
|
|
35
|
-
"types": "./dist/nitro/
|
|
36
|
-
"import": "./dist/nitro/
|
|
36
|
+
"types": "./dist/nitro/module.d.mts",
|
|
37
|
+
"import": "./dist/nitro/module.mjs"
|
|
38
|
+
},
|
|
39
|
+
"./nitro/v3": {
|
|
40
|
+
"types": "./dist/nitro/v3/index.d.mts",
|
|
41
|
+
"import": "./dist/nitro/v3/index.mjs"
|
|
37
42
|
},
|
|
38
43
|
"./workers": {
|
|
39
44
|
"types": "./dist/workers.d.mts",
|
|
@@ -54,6 +59,22 @@
|
|
|
54
59
|
"./sentry": {
|
|
55
60
|
"types": "./dist/adapters/sentry.d.mts",
|
|
56
61
|
"import": "./dist/adapters/sentry.mjs"
|
|
62
|
+
},
|
|
63
|
+
"./better-stack": {
|
|
64
|
+
"types": "./dist/adapters/better-stack.d.mts",
|
|
65
|
+
"import": "./dist/adapters/better-stack.mjs"
|
|
66
|
+
},
|
|
67
|
+
"./enrichers": {
|
|
68
|
+
"types": "./dist/enrichers.d.mts",
|
|
69
|
+
"import": "./dist/enrichers.mjs"
|
|
70
|
+
},
|
|
71
|
+
"./pipeline": {
|
|
72
|
+
"types": "./dist/pipeline.d.mts",
|
|
73
|
+
"import": "./dist/pipeline.mjs"
|
|
74
|
+
},
|
|
75
|
+
"./browser": {
|
|
76
|
+
"types": "./dist/browser.d.mts",
|
|
77
|
+
"import": "./dist/browser.mjs"
|
|
57
78
|
}
|
|
58
79
|
},
|
|
59
80
|
"main": "./dist/index.mjs",
|
|
@@ -67,7 +88,10 @@
|
|
|
67
88
|
"./dist/nuxt/module.d.mts"
|
|
68
89
|
],
|
|
69
90
|
"nitro": [
|
|
70
|
-
"./dist/nitro/
|
|
91
|
+
"./dist/nitro/module.d.mts"
|
|
92
|
+
],
|
|
93
|
+
"nitro/v3": [
|
|
94
|
+
"./dist/nitro/v3/index.d.mts"
|
|
71
95
|
],
|
|
72
96
|
"workers": [
|
|
73
97
|
"./dist/workers.d.mts"
|
|
@@ -83,6 +107,18 @@
|
|
|
83
107
|
],
|
|
84
108
|
"sentry": [
|
|
85
109
|
"./dist/adapters/sentry.d.mts"
|
|
110
|
+
],
|
|
111
|
+
"better-stack": [
|
|
112
|
+
"./dist/adapters/better-stack.d.mts"
|
|
113
|
+
],
|
|
114
|
+
"enrichers": [
|
|
115
|
+
"./dist/enrichers.d.mts"
|
|
116
|
+
],
|
|
117
|
+
"pipeline": [
|
|
118
|
+
"./dist/pipeline.d.mts"
|
|
119
|
+
],
|
|
120
|
+
"browser": [
|
|
121
|
+
"./dist/browser.d.mts"
|
|
86
122
|
]
|
|
87
123
|
}
|
|
88
124
|
},
|
|
@@ -91,8 +127,9 @@
|
|
|
91
127
|
"README.md"
|
|
92
128
|
],
|
|
93
129
|
"scripts": {
|
|
94
|
-
"build": "
|
|
95
|
-
"dev
|
|
130
|
+
"build": "tsdown",
|
|
131
|
+
"dev": "tsdown --watch",
|
|
132
|
+
"dev:prepare": "tsdown",
|
|
96
133
|
"release": "bun run lint && bun run test && bun run build && changelogen --release && npm publish && git push --follow-tags",
|
|
97
134
|
"lint": "eslint .",
|
|
98
135
|
"lint:fix": "eslint . --fix",
|
|
@@ -102,21 +139,26 @@
|
|
|
102
139
|
"typecheck": "echo 'Typecheck handled by build'"
|
|
103
140
|
},
|
|
104
141
|
"devDependencies": {
|
|
142
|
+
"ufo": "^1.6.3",
|
|
105
143
|
"@nuxt/devtools": "^3.1.1",
|
|
106
144
|
"@nuxt/schema": "^4.3.1",
|
|
107
|
-
"@nuxt/test-utils": "^
|
|
145
|
+
"@nuxt/test-utils": "^4.0.0",
|
|
108
146
|
"changelogen": "^0.6.2",
|
|
147
|
+
"consola": "^3.4.2",
|
|
109
148
|
"h3": "^1.15.5",
|
|
149
|
+
"happy-dom": "^20.6.1",
|
|
150
|
+
"nitro": "^3.0.1-alpha.2",
|
|
110
151
|
"nitropack": "^2.13.1",
|
|
111
152
|
"nuxt": "^4.3.1",
|
|
112
|
-
"
|
|
113
|
-
"
|
|
153
|
+
"tsdown": "^0.20.3",
|
|
154
|
+
"typescript": "^5.9.3"
|
|
114
155
|
},
|
|
115
156
|
"peerDependencies": {
|
|
116
157
|
"@nuxt/kit": "^4.3.1",
|
|
117
158
|
"h3": "^1.15.5",
|
|
118
159
|
"nitropack": "^2.13.1",
|
|
119
|
-
"ofetch": "^1.5.1"
|
|
160
|
+
"ofetch": "^1.5.1",
|
|
161
|
+
"nitro": "^3.0.1-alpha.2"
|
|
120
162
|
},
|
|
121
163
|
"peerDependenciesMeta": {
|
|
122
164
|
"@nuxt/kit": {
|
|
@@ -130,6 +172,9 @@
|
|
|
130
172
|
},
|
|
131
173
|
"ofetch": {
|
|
132
174
|
"optional": true
|
|
175
|
+
},
|
|
176
|
+
"nitro": {
|
|
177
|
+
"optional": true
|
|
133
178
|
}
|
|
134
179
|
}
|
|
135
180
|
}
|
package/dist/adapters/axiom.d.ts
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { DrainContext, WideEvent } from '../types.js';
|
|
2
|
-
|
|
3
|
-
interface AxiomConfig {
|
|
4
|
-
/** Axiom dataset name */
|
|
5
|
-
dataset: string;
|
|
6
|
-
/** Axiom API token */
|
|
7
|
-
token: string;
|
|
8
|
-
/** Organization ID (required for Personal Access Tokens) */
|
|
9
|
-
orgId?: string;
|
|
10
|
-
/** Base URL for Axiom API. Default: https://api.axiom.co */
|
|
11
|
-
baseUrl?: string;
|
|
12
|
-
/** Request timeout in milliseconds. Default: 5000 */
|
|
13
|
-
timeout?: number;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Create a drain function for sending logs to Axiom.
|
|
17
|
-
*
|
|
18
|
-
* Configuration priority (highest to lowest):
|
|
19
|
-
* 1. Overrides passed to createAxiomDrain()
|
|
20
|
-
* 2. runtimeConfig.evlog.axiom
|
|
21
|
-
* 3. runtimeConfig.axiom
|
|
22
|
-
* 4. Environment variables: NUXT_AXIOM_*, AXIOM_*
|
|
23
|
-
*
|
|
24
|
-
* @example
|
|
25
|
-
* ```ts
|
|
26
|
-
* // Zero config - just set NUXT_AXIOM_TOKEN and NUXT_AXIOM_DATASET env vars
|
|
27
|
-
* nitroApp.hooks.hook('evlog:drain', createAxiomDrain())
|
|
28
|
-
*
|
|
29
|
-
* // With overrides
|
|
30
|
-
* nitroApp.hooks.hook('evlog:drain', createAxiomDrain({
|
|
31
|
-
* dataset: 'my-dataset',
|
|
32
|
-
* }))
|
|
33
|
-
* ```
|
|
34
|
-
*/
|
|
35
|
-
declare function createAxiomDrain(overrides?: Partial<AxiomConfig>): (ctx: DrainContext) => Promise<void>;
|
|
36
|
-
/**
|
|
37
|
-
* Send a single event to Axiom.
|
|
38
|
-
*
|
|
39
|
-
* @example
|
|
40
|
-
* ```ts
|
|
41
|
-
* await sendToAxiom(event, {
|
|
42
|
-
* dataset: 'my-logs',
|
|
43
|
-
* token: process.env.AXIOM_TOKEN!,
|
|
44
|
-
* })
|
|
45
|
-
* ```
|
|
46
|
-
*/
|
|
47
|
-
declare function sendToAxiom(event: WideEvent, config: AxiomConfig): Promise<void>;
|
|
48
|
-
/**
|
|
49
|
-
* Send a batch of events to Axiom.
|
|
50
|
-
*
|
|
51
|
-
* @example
|
|
52
|
-
* ```ts
|
|
53
|
-
* await sendBatchToAxiom(events, {
|
|
54
|
-
* dataset: 'my-logs',
|
|
55
|
-
* token: process.env.AXIOM_TOKEN!,
|
|
56
|
-
* })
|
|
57
|
-
* ```
|
|
58
|
-
*/
|
|
59
|
-
declare function sendBatchToAxiom(events: WideEvent[], config: AxiomConfig): Promise<void>;
|
|
60
|
-
|
|
61
|
-
export { createAxiomDrain, sendBatchToAxiom, sendToAxiom };
|
|
62
|
-
export type { AxiomConfig };
|
package/dist/adapters/otlp.d.ts
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { DrainContext, WideEvent } from '../types.js';
|
|
2
|
-
|
|
3
|
-
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;
|
|
14
|
-
}
|
|
15
|
-
/** OTLP Log Record structure */
|
|
16
|
-
interface OTLPLogRecord {
|
|
17
|
-
timeUnixNano: string;
|
|
18
|
-
severityNumber: number;
|
|
19
|
-
severityText: string;
|
|
20
|
-
body: {
|
|
21
|
-
stringValue: string;
|
|
22
|
-
};
|
|
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;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Convert an evlog WideEvent to an OTLP LogRecord.
|
|
36
|
-
*/
|
|
37
|
-
declare function toOTLPLogRecord(event: WideEvent): OTLPLogRecord;
|
|
38
|
-
/**
|
|
39
|
-
* Create a drain function for sending logs to an OTLP endpoint.
|
|
40
|
-
*
|
|
41
|
-
* Configuration priority (highest to lowest):
|
|
42
|
-
* 1. Overrides passed to createOTLPDrain()
|
|
43
|
-
* 2. runtimeConfig.evlog.otlp (NUXT_EVLOG_OTLP_*)
|
|
44
|
-
* 3. runtimeConfig.otlp (NUXT_OTLP_*)
|
|
45
|
-
* 4. Environment variables: OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_SERVICE_NAME
|
|
46
|
-
*
|
|
47
|
-
* @example
|
|
48
|
-
* ```ts
|
|
49
|
-
* // Zero config - reads from runtimeConfig or env vars
|
|
50
|
-
* nitroApp.hooks.hook('evlog:drain', createOTLPDrain())
|
|
51
|
-
*
|
|
52
|
-
* // With overrides
|
|
53
|
-
* nitroApp.hooks.hook('evlog:drain', createOTLPDrain({
|
|
54
|
-
* endpoint: 'http://localhost:4318',
|
|
55
|
-
* }))
|
|
56
|
-
* ```
|
|
57
|
-
*/
|
|
58
|
-
declare function createOTLPDrain(overrides?: Partial<OTLPConfig>): (ctx: DrainContext) => Promise<void>;
|
|
59
|
-
/**
|
|
60
|
-
* Send a single event to an OTLP endpoint.
|
|
61
|
-
*
|
|
62
|
-
* @example
|
|
63
|
-
* ```ts
|
|
64
|
-
* await sendToOTLP(event, {
|
|
65
|
-
* endpoint: 'http://localhost:4318',
|
|
66
|
-
* })
|
|
67
|
-
* ```
|
|
68
|
-
*/
|
|
69
|
-
declare function sendToOTLP(event: WideEvent, config: OTLPConfig): Promise<void>;
|
|
70
|
-
/**
|
|
71
|
-
* Send a batch of events to an OTLP endpoint.
|
|
72
|
-
*
|
|
73
|
-
* @example
|
|
74
|
-
* ```ts
|
|
75
|
-
* await sendBatchToOTLP(events, {
|
|
76
|
-
* endpoint: 'http://localhost:4318',
|
|
77
|
-
* })
|
|
78
|
-
* ```
|
|
79
|
-
*/
|
|
80
|
-
declare function sendBatchToOTLP(events: WideEvent[], config: OTLPConfig): Promise<void>;
|
|
81
|
-
|
|
82
|
-
export { createOTLPDrain, sendBatchToOTLP, sendToOTLP, toOTLPLogRecord };
|
|
83
|
-
export type { OTLPConfig, OTLPLogRecord };
|