evlog 1.6.0 → 1.7.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 (104) hide show
  1. package/README.md +95 -0
  2. package/dist/_utils-DZA9nou3.mjs +23 -0
  3. package/dist/_utils-DZA9nou3.mjs.map +1 -0
  4. package/dist/adapters/axiom.d.mts +16 -15
  5. package/dist/adapters/axiom.d.mts.map +1 -0
  6. package/dist/adapters/axiom.mjs +95 -50
  7. package/dist/adapters/axiom.mjs.map +1 -0
  8. package/dist/adapters/better-stack.d.mts +62 -0
  9. package/dist/adapters/better-stack.d.mts.map +1 -0
  10. package/dist/adapters/better-stack.mjs +109 -0
  11. package/dist/adapters/better-stack.mjs.map +1 -0
  12. package/dist/adapters/otlp.d.mts +31 -30
  13. package/dist/adapters/otlp.d.mts.map +1 -0
  14. package/dist/adapters/otlp.mjs +197 -177
  15. package/dist/adapters/otlp.mjs.map +1 -0
  16. package/dist/adapters/posthog.d.mts +20 -19
  17. package/dist/adapters/posthog.d.mts.map +1 -0
  18. package/dist/adapters/posthog.mjs +109 -62
  19. package/dist/adapters/posthog.mjs.map +1 -0
  20. package/dist/adapters/sentry.d.mts +24 -23
  21. package/dist/adapters/sentry.d.mts.map +1 -0
  22. package/dist/adapters/sentry.mjs +208 -151
  23. package/dist/adapters/sentry.mjs.map +1 -0
  24. package/dist/enrichers.d.mts +74 -0
  25. package/dist/enrichers.d.mts.map +1 -0
  26. package/dist/enrichers.mjs +172 -0
  27. package/dist/enrichers.mjs.map +1 -0
  28. package/dist/error.d.mts +24 -22
  29. package/dist/error.d.mts.map +1 -0
  30. package/dist/error.mjs +107 -76
  31. package/dist/error.mjs.map +1 -0
  32. package/dist/index.d.mts +6 -5
  33. package/dist/index.mjs +6 -5
  34. package/dist/logger.d.mts +5 -3
  35. package/dist/logger.d.mts.map +1 -0
  36. package/dist/logger.mjs +200 -184
  37. package/dist/logger.mjs.map +1 -0
  38. package/dist/nitro/errorHandler.d.mts +4 -2
  39. package/dist/nitro/errorHandler.d.mts.map +1 -0
  40. package/dist/nitro/errorHandler.mjs +49 -38
  41. package/dist/nitro/errorHandler.mjs.map +1 -0
  42. package/dist/nitro/plugin.d.mts +4 -2
  43. package/dist/nitro/plugin.d.mts.map +1 -0
  44. package/dist/nitro/plugin.mjs +155 -136
  45. package/dist/nitro/plugin.mjs.map +1 -0
  46. package/dist/nuxt/module.d.mts +149 -168
  47. package/dist/nuxt/module.d.mts.map +1 -0
  48. package/dist/nuxt/module.mjs +66 -65
  49. package/dist/nuxt/module.mjs.map +1 -0
  50. package/dist/pipeline.d.mts +46 -0
  51. package/dist/pipeline.d.mts.map +1 -0
  52. package/dist/pipeline.mjs +122 -0
  53. package/dist/pipeline.mjs.map +1 -0
  54. package/dist/runtime/client/log.d.mts +7 -5
  55. package/dist/runtime/client/log.d.mts.map +1 -0
  56. package/dist/runtime/client/log.mjs +57 -62
  57. package/dist/runtime/client/log.mjs.map +1 -0
  58. package/dist/runtime/client/plugin.d.mts +3 -1
  59. package/dist/runtime/client/plugin.d.mts.map +1 -0
  60. package/dist/runtime/client/plugin.mjs +13 -12
  61. package/dist/runtime/client/plugin.mjs.map +1 -0
  62. package/dist/runtime/server/routes/_evlog/ingest.post.d.mts +4 -2
  63. package/dist/runtime/server/routes/_evlog/ingest.post.d.mts.map +1 -0
  64. package/dist/runtime/server/routes/_evlog/ingest.post.mjs +113 -76
  65. package/dist/runtime/server/routes/_evlog/ingest.post.mjs.map +1 -0
  66. package/dist/runtime/server/useLogger.d.mts +14 -3
  67. package/dist/runtime/server/useLogger.d.mts.map +1 -0
  68. package/dist/runtime/server/useLogger.mjs +39 -10
  69. package/dist/runtime/server/useLogger.mjs.map +1 -0
  70. package/dist/runtime/utils/parseError.d.mts +5 -3
  71. package/dist/runtime/utils/parseError.d.mts.map +1 -0
  72. package/dist/runtime/utils/parseError.mjs +25 -26
  73. package/dist/runtime/utils/parseError.mjs.map +1 -0
  74. package/dist/types.d.mts +348 -246
  75. package/dist/types.d.mts.map +1 -0
  76. package/dist/types.mjs +1 -1
  77. package/dist/utils.d.mts +19 -14
  78. package/dist/utils.d.mts.map +1 -0
  79. package/dist/utils.mjs +59 -50
  80. package/dist/utils.mjs.map +1 -0
  81. package/dist/workers.d.mts +10 -9
  82. package/dist/workers.d.mts.map +1 -0
  83. package/dist/workers.mjs +68 -39
  84. package/dist/workers.mjs.map +1 -0
  85. package/package.json +26 -5
  86. package/dist/adapters/axiom.d.ts +0 -62
  87. package/dist/adapters/otlp.d.ts +0 -83
  88. package/dist/adapters/posthog.d.ts +0 -72
  89. package/dist/adapters/sentry.d.ts +0 -78
  90. package/dist/error.d.ts +0 -63
  91. package/dist/index.d.ts +0 -5
  92. package/dist/logger.d.ts +0 -40
  93. package/dist/nitro/errorHandler.d.ts +0 -13
  94. package/dist/nitro/plugin.d.ts +0 -5
  95. package/dist/nuxt/module.d.ts +0 -171
  96. package/dist/runtime/client/log.d.ts +0 -10
  97. package/dist/runtime/client/plugin.d.ts +0 -3
  98. package/dist/runtime/server/routes/_evlog/ingest.post.d.ts +0 -5
  99. package/dist/runtime/server/useLogger.d.ts +0 -28
  100. package/dist/runtime/utils/parseError.d.ts +0 -5
  101. package/dist/shared/evlog.Bc35pxiY.mjs +0 -10
  102. package/dist/types.d.ts +0 -364
  103. package/dist/utils.d.ts +0 -29
  104. package/dist/workers.d.ts +0 -45
@@ -1,171 +1,152 @@
1
- import * as _nuxt_schema from '@nuxt/schema';
2
- import { EnvironmentContext, RouteConfig, SamplingConfig, TransportConfig } from '../types.mjs';
1
+ import { EnvironmentContext, RouteConfig, SamplingConfig, TransportConfig } from "../types.mjs";
2
+ import * as _nuxt_schema0 from "@nuxt/schema";
3
3
 
4
+ //#region src/nuxt/module.d.ts
4
5
  interface ModuleOptions {
5
- /**
6
- * Environment context overrides.
7
- */
8
- env?: Partial<EnvironmentContext>;
9
- /**
10
- * Enable pretty printing.
11
- * @default true in development, false in production
12
- */
13
- pretty?: boolean;
14
- /**
15
- * Route patterns to include in logging.
16
- * Supports glob patterns like '/api/**'.
17
- * If not set, all routes are logged.
18
- * @example ['/api/**', '/auth/**']
19
- */
20
- include?: string[];
21
- /**
22
- * Route patterns to exclude from logging.
23
- * Supports glob patterns like '/api/_nuxt_icon/**'.
24
- * Exclusions take precedence over inclusions.
25
- * @example ['/api/_nuxt_icon/**', '/health']
26
- */
27
- exclude?: string[];
28
- /**
29
- * Route-specific service configuration.
30
- * Allows setting different service names for different routes.
31
- * Patterns are matched using glob syntax.
32
- *
33
- * @example
34
- * ```ts
35
- * routes: {
36
- * '/api/foo/**': { service: 'service1' },
37
- * '/api/bar/**': { service: 'service2' }
38
- * }
39
- * ```
40
- */
41
- routes?: Record<string, RouteConfig>;
42
- /**
43
- * Sampling configuration for filtering logs.
44
- * Allows configuring what percentage of logs to keep per level.
45
- *
46
- * @example
47
- * ```ts
48
- * sampling: {
49
- * rates: {
50
- * info: 10, // Keep 10% of info logs
51
- * warn: 50, // Keep 50% of warning logs
52
- * debug: 5, // Keep 5% of debug logs
53
- * error: 100, // Always keep errors (default)
54
- * }
55
- * }
56
- * ```
57
- */
58
- sampling?: SamplingConfig;
59
- /**
60
- * Transport configuration for sending client logs to the server.
61
- *
62
- * @example
63
- * ```ts
64
- * transport: {
65
- * enabled: true, // Send logs to server API
66
- * endpoint: '/api/_evlog/ingest' // Custom endpoint
67
- * }
68
- * ```
69
- */
70
- transport?: TransportConfig;
71
- /**
72
- * Axiom adapter configuration.
73
- * When configured, use `createAxiomDrain()` from `evlog/axiom` to send logs.
74
- *
75
- * @example
76
- * ```ts
77
- * axiom: {
78
- * dataset: 'my-app-logs',
79
- * token: process.env.AXIOM_TOKEN,
80
- * }
81
- * ```
82
- */
83
- axiom?: {
84
- /** Axiom dataset name */
85
- dataset: string;
86
- /** Axiom API token */
87
- token: string;
88
- /** Organization ID (required for Personal Access Tokens) */
89
- orgId?: string;
90
- /** Base URL for Axiom API. Default: https://api.axiom.co */
91
- baseUrl?: string;
92
- /** Request timeout in milliseconds. Default: 5000 */
93
- timeout?: number;
94
- };
95
- /**
96
- * OTLP adapter configuration.
97
- * When configured, use `createOTLPDrain()` from `evlog/otlp` to send logs.
98
- *
99
- * @example
100
- * ```ts
101
- * otlp: {
102
- * endpoint: 'http://localhost:4318',
103
- * headers: {
104
- * 'Authorization': `Basic ${process.env.GRAFANA_TOKEN}`,
105
- * },
106
- * }
107
- * ```
108
- */
109
- otlp?: {
110
- /** OTLP HTTP endpoint (e.g., http://localhost:4318) */
111
- endpoint: string;
112
- /** Override service name (defaults to event.service) */
113
- serviceName?: string;
114
- /** Additional resource attributes */
115
- resourceAttributes?: Record<string, string | number | boolean>;
116
- /** Custom headers (e.g., for authentication) */
117
- headers?: Record<string, string>;
118
- /** Request timeout in milliseconds. Default: 5000 */
119
- timeout?: number;
120
- };
121
- /**
122
- * PostHog adapter configuration.
123
- * When configured, use `createPostHogDrain()` from `evlog/posthog` to send logs.
124
- *
125
- * @example
126
- * ```ts
127
- * posthog: {
128
- * apiKey: process.env.POSTHOG_API_KEY,
129
- * }
130
- * ```
131
- */
132
- posthog?: {
133
- /** PostHog project API key */
134
- apiKey: string;
135
- /** PostHog host URL. Default: https://us.i.posthog.com */
136
- host?: string;
137
- /** PostHog event name. Default: evlog_wide_event */
138
- eventName?: string;
139
- /** Override distinct_id (defaults to event.service) */
140
- distinctId?: string;
141
- /** Request timeout in milliseconds. Default: 5000 */
142
- timeout?: number;
143
- };
144
- /**
145
- * Sentry adapter configuration.
146
- * When configured, use `createSentryDrain()` from `evlog/sentry` to send logs.
147
- *
148
- * @example
149
- * ```ts
150
- * sentry: {
151
- * dsn: process.env.SENTRY_DSN,
152
- * }
153
- * ```
154
- */
155
- sentry?: {
156
- /** Sentry DSN */
157
- dsn: string;
158
- /** Environment override (defaults to event.environment) */
159
- environment?: string;
160
- /** Release version override (defaults to event.version) */
161
- release?: string;
162
- /** Additional tags to attach as attributes */
163
- tags?: Record<string, string>;
164
- /** Request timeout in milliseconds. Default: 5000 */
165
- timeout?: number;
166
- };
6
+ /**
7
+ * Environment context overrides.
8
+ */
9
+ env?: Partial<EnvironmentContext>;
10
+ /**
11
+ * Enable pretty printing.
12
+ * @default true in development, false in production
13
+ */
14
+ pretty?: boolean;
15
+ /**
16
+ * Route patterns to include in logging.
17
+ * Supports glob patterns like '/api/**'.
18
+ * If not set, all routes are logged.
19
+ * @example ['/api/**', '/auth/**']
20
+ */
21
+ include?: string[];
22
+ /**
23
+ * Route patterns to exclude from logging.
24
+ * Supports glob patterns like '/api/_nuxt_icon/**'.
25
+ * Exclusions take precedence over inclusions.
26
+ * @example ['/api/_nuxt_icon/**', '/health']
27
+ */
28
+ exclude?: string[];
29
+ /**
30
+ * Route-specific service configuration.
31
+ * Allows setting different service names for different routes.
32
+ * Patterns are matched using glob syntax.
33
+ *
34
+ * @example
35
+ * ```ts
36
+ * routes: {
37
+ * '/api/foo/**': { service: 'service1' },
38
+ * '/api/bar/**': { service: 'service2' }
39
+ * }
40
+ * ```
41
+ */
42
+ routes?: Record<string, RouteConfig>;
43
+ /**
44
+ * Sampling configuration for filtering logs.
45
+ * Allows configuring what percentage of logs to keep per level.
46
+ *
47
+ * @example
48
+ * ```ts
49
+ * sampling: {
50
+ * rates: {
51
+ * info: 10, // Keep 10% of info logs
52
+ * warn: 50, // Keep 50% of warning logs
53
+ * debug: 5, // Keep 5% of debug logs
54
+ * error: 100, // Always keep errors (default)
55
+ * }
56
+ * }
57
+ * ```
58
+ */
59
+ sampling?: SamplingConfig;
60
+ /**
61
+ * Transport configuration for sending client logs to the server.
62
+ *
63
+ * @example
64
+ * ```ts
65
+ * transport: {
66
+ * enabled: true, // Send logs to server API
67
+ * endpoint: '/api/_evlog/ingest' // Custom endpoint
68
+ * }
69
+ * ```
70
+ */
71
+ transport?: TransportConfig;
72
+ /**
73
+ * Axiom adapter configuration.
74
+ * When configured, use `createAxiomDrain()` from `evlog/axiom` to send logs.
75
+ *
76
+ * @example
77
+ * ```ts
78
+ * axiom: {
79
+ * dataset: 'my-app-logs',
80
+ * token: process.env.AXIOM_TOKEN,
81
+ * }
82
+ * ```
83
+ */
84
+ axiom?: {
85
+ /** Axiom dataset name */dataset: string; /** Axiom API token */
86
+ token: string; /** Organization ID (required for Personal Access Tokens) */
87
+ orgId?: string; /** Base URL for Axiom API. Default: https://api.axiom.co */
88
+ baseUrl?: string; /** Request timeout in milliseconds. Default: 5000 */
89
+ timeout?: number;
90
+ };
91
+ /**
92
+ * OTLP adapter configuration.
93
+ * When configured, use `createOTLPDrain()` from `evlog/otlp` to send logs.
94
+ *
95
+ * @example
96
+ * ```ts
97
+ * otlp: {
98
+ * endpoint: 'http://localhost:4318',
99
+ * headers: {
100
+ * 'Authorization': `Basic ${process.env.GRAFANA_TOKEN}`,
101
+ * },
102
+ * }
103
+ * ```
104
+ */
105
+ otlp?: {
106
+ /** OTLP HTTP endpoint (e.g., http://localhost:4318) */endpoint: string; /** Override service name (defaults to event.service) */
107
+ serviceName?: string; /** Additional resource attributes */
108
+ resourceAttributes?: Record<string, string | number | boolean>; /** Custom headers (e.g., for authentication) */
109
+ headers?: Record<string, string>; /** Request timeout in milliseconds. Default: 5000 */
110
+ timeout?: number;
111
+ };
112
+ /**
113
+ * PostHog adapter configuration.
114
+ * When configured, use `createPostHogDrain()` from `evlog/posthog` to send logs.
115
+ *
116
+ * @example
117
+ * ```ts
118
+ * posthog: {
119
+ * apiKey: process.env.POSTHOG_API_KEY,
120
+ * }
121
+ * ```
122
+ */
123
+ posthog?: {
124
+ /** PostHog project API key */apiKey: string; /** PostHog host URL. Default: https://us.i.posthog.com */
125
+ host?: string; /** PostHog event name. Default: evlog_wide_event */
126
+ eventName?: string; /** Override distinct_id (defaults to event.service) */
127
+ distinctId?: string; /** Request timeout in milliseconds. Default: 5000 */
128
+ timeout?: number;
129
+ };
130
+ /**
131
+ * Sentry adapter configuration.
132
+ * When configured, use `createSentryDrain()` from `evlog/sentry` to send logs.
133
+ *
134
+ * @example
135
+ * ```ts
136
+ * sentry: {
137
+ * dsn: process.env.SENTRY_DSN,
138
+ * }
139
+ * ```
140
+ */
141
+ sentry?: {
142
+ /** Sentry DSN */dsn: string; /** Environment override (defaults to event.environment) */
143
+ environment?: string; /** Release version override (defaults to event.version) */
144
+ release?: string; /** Additional tags to attach as attributes */
145
+ tags?: Record<string, string>; /** Request timeout in milliseconds. Default: 5000 */
146
+ timeout?: number;
147
+ };
167
148
  }
168
- declare const _default: _nuxt_schema.NuxtModule<ModuleOptions, ModuleOptions, false>;
169
-
170
- export { _default as default };
171
- export type { ModuleOptions };
149
+ declare const _default: _nuxt_schema0.NuxtModule<ModuleOptions, ModuleOptions, false>;
150
+ //#endregion
151
+ export { ModuleOptions, _default as default };
152
+ //# sourceMappingURL=module.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.mts","names":[],"sources":["../../src/nuxt/module.ts"],"mappings":";;;;UAYiB,aAAA;;;AAAjB;EAIE,GAAA,GAAM,OAAA,CAAQ,kBAAA;;;;;EAMd,MAAA;EAiDW;;;;;;EAzCX,OAAA;EAdA;;;;;;EAsBA,OAAA;EAeS;;;;;;;;;;;;;EAAT,MAAA,GAAS,MAAA,SAAe,WAAA;EA4EtB;;;;;;;;;;;;;;;;EA1DF,QAAA,GAAW,cAAA;EA8GF;;;;AAIV;;;;;;;EArGC,SAAA,GAAY,eAAA;;;;;;;;;;;;;EAcZ,KAAA;6BAEE,OAAA;IAEA,KAAA;IAEA,KAAA;IAEA,OAAA;IAEA,OAAA;EAAA;;;;;;;;;;;;;;;EAiBF,IAAA;2DAEE,QAAA;IAEA,WAAA;IAEA,kBAAA,GAAqB,MAAA;IAErB,OAAA,GAAU,MAAA;IAEV,OAAA;EAAA;;;;;;;;;;;;EAcF,OAAA;kCAEE,MAAA;IAEA,IAAA;IAEA,SAAA;IAEA,UAAA;IAEA,OAAA;EAAA;;;;;;;;;;;;EAcF,MAAA;qBAEE,GAAA;IAEA,WAAA;IAEA,OAAA;IAEA,IAAA,GAAO,MAAA;IAEP,OAAA;EAAA;AAAA;AAAA,cAEH,QAAA"}
@@ -1,68 +1,69 @@
1
- import { defineNuxtModule, createResolver, addServerHandler, addServerPlugin, addPlugin, addImports, addServerImports } from '@nuxt/kit';
1
+ import { addImports, addPlugin, addServerHandler, addServerImports, addServerPlugin, createResolver, defineNuxtModule } from "@nuxt/kit";
2
2
 
3
- const module$1 = defineNuxtModule({
4
- meta: {
5
- name: "evlog",
6
- configKey: "evlog",
7
- docs: "https://evlog.dev"
8
- },
9
- defaults: {},
10
- setup(options, nuxt) {
11
- const resolver = createResolver(import.meta.url);
12
- const transportEnabled = options.transport?.enabled ?? false;
13
- const transportEndpoint = options.transport?.endpoint ?? "/api/_evlog/ingest";
14
- nuxt.hook("nitro:config", (nitroConfig) => {
15
- nitroConfig.errorHandler = nitroConfig.errorHandler || resolver.resolve("../nitro/errorHandler");
16
- });
17
- nuxt.options.runtimeConfig.evlog = options;
18
- nuxt.options.runtimeConfig.public.evlog = {
19
- pretty: options.pretty,
20
- transport: {
21
- enabled: transportEnabled,
22
- endpoint: transportEndpoint
23
- }
24
- };
25
- if (transportEnabled) {
26
- addServerHandler({
27
- route: transportEndpoint,
28
- method: "post",
29
- handler: resolver.resolve("../runtime/server/routes/_evlog/ingest.post")
30
- });
31
- }
32
- addServerPlugin(resolver.resolve("../nitro/plugin"));
33
- addPlugin({
34
- src: resolver.resolve("../runtime/client/plugin"),
35
- mode: "client"
36
- });
37
- addImports([
38
- {
39
- name: "log",
40
- from: resolver.resolve("../runtime/client/log")
41
- },
42
- {
43
- name: "createEvlogError",
44
- from: resolver.resolve("../error")
45
- },
46
- {
47
- name: "parseError",
48
- from: resolver.resolve("../runtime/utils/parseError")
49
- }
50
- ]);
51
- addServerImports([
52
- {
53
- name: "useLogger",
54
- from: resolver.resolve("../runtime/server/useLogger")
55
- },
56
- {
57
- name: "log",
58
- from: resolver.resolve("../logger")
59
- },
60
- {
61
- name: "createEvlogError",
62
- from: resolver.resolve("../error")
63
- }
64
- ]);
65
- }
3
+ //#region src/nuxt/module.ts
4
+ var module_default = defineNuxtModule({
5
+ meta: {
6
+ name: "evlog",
7
+ configKey: "evlog",
8
+ docs: "https://evlog.dev"
9
+ },
10
+ defaults: {},
11
+ setup(options, nuxt) {
12
+ const resolver = createResolver(import.meta.url);
13
+ const transportEnabled = options.transport?.enabled ?? false;
14
+ const transportEndpoint = options.transport?.endpoint ?? "/api/_evlog/ingest";
15
+ nuxt.hook("nitro:config", (nitroConfig) => {
16
+ nitroConfig.errorHandler = nitroConfig.errorHandler || resolver.resolve("../nitro/errorHandler");
17
+ });
18
+ nuxt.options.runtimeConfig.evlog = options;
19
+ nuxt.options.runtimeConfig.public.evlog = {
20
+ pretty: options.pretty,
21
+ transport: {
22
+ enabled: transportEnabled,
23
+ endpoint: transportEndpoint
24
+ }
25
+ };
26
+ if (transportEnabled) addServerHandler({
27
+ route: transportEndpoint,
28
+ method: "post",
29
+ handler: resolver.resolve("../runtime/server/routes/_evlog/ingest.post")
30
+ });
31
+ addServerPlugin(resolver.resolve("../nitro/plugin"));
32
+ addPlugin({
33
+ src: resolver.resolve("../runtime/client/plugin"),
34
+ mode: "client"
35
+ });
36
+ addImports([
37
+ {
38
+ name: "log",
39
+ from: resolver.resolve("../runtime/client/log")
40
+ },
41
+ {
42
+ name: "createEvlogError",
43
+ from: resolver.resolve("../error")
44
+ },
45
+ {
46
+ name: "parseError",
47
+ from: resolver.resolve("../runtime/utils/parseError")
48
+ }
49
+ ]);
50
+ addServerImports([
51
+ {
52
+ name: "useLogger",
53
+ from: resolver.resolve("../runtime/server/useLogger")
54
+ },
55
+ {
56
+ name: "log",
57
+ from: resolver.resolve("../logger")
58
+ },
59
+ {
60
+ name: "createEvlogError",
61
+ from: resolver.resolve("../error")
62
+ }
63
+ ]);
64
+ }
66
65
  });
67
66
 
68
- export { module$1 as default };
67
+ //#endregion
68
+ export { module_default as default };
69
+ //# sourceMappingURL=module.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.mjs","names":[],"sources":["../../src/nuxt/module.ts"],"sourcesContent":["import {\n addImports,\n addPlugin,\n addServerHandler,\n addServerImports,\n addServerPlugin,\n createResolver,\n defineNuxtModule,\n} from '@nuxt/kit'\nimport type { NitroConfig } from 'nitropack'\nimport type { EnvironmentContext, RouteConfig, SamplingConfig, TransportConfig } from '../types'\n\nexport interface ModuleOptions {\n /**\n * Environment context overrides.\n */\n env?: Partial<EnvironmentContext>\n\n /**\n * Enable pretty printing.\n * @default true in development, false in production\n */\n pretty?: boolean\n\n /**\n * Route patterns to include in logging.\n * Supports glob patterns like '/api/**'.\n * If not set, all routes are logged.\n * @example ['/api/**', '/auth/**']\n */\n include?: string[]\n\n /**\n * Route patterns to exclude from logging.\n * Supports glob patterns like '/api/_nuxt_icon/**'.\n * Exclusions take precedence over inclusions.\n * @example ['/api/_nuxt_icon/**', '/health']\n */\n exclude?: string[]\n\n /**\n * Route-specific service configuration.\n * Allows setting different service names for different routes.\n * Patterns are matched using glob syntax.\n *\n * @example\n * ```ts\n * routes: {\n * '/api/foo/**': { service: 'service1' },\n * '/api/bar/**': { service: 'service2' }\n * }\n * ```\n */\n routes?: Record<string, RouteConfig>\n\n /**\n * Sampling configuration for filtering logs.\n * Allows configuring what percentage of logs to keep per level.\n *\n * @example\n * ```ts\n * sampling: {\n * rates: {\n * info: 10, // Keep 10% of info logs\n * warn: 50, // Keep 50% of warning logs\n * debug: 5, // Keep 5% of debug logs\n * error: 100, // Always keep errors (default)\n * }\n * }\n * ```\n */\n sampling?: SamplingConfig\n\n /**\n * Transport configuration for sending client logs to the server.\n *\n * @example\n * ```ts\n * transport: {\n * enabled: true, // Send logs to server API\n * endpoint: '/api/_evlog/ingest' // Custom endpoint\n * }\n * ```\n */\n transport?: TransportConfig\n\n /**\n * Axiom adapter configuration.\n * When configured, use `createAxiomDrain()` from `evlog/axiom` to send logs.\n *\n * @example\n * ```ts\n * axiom: {\n * dataset: 'my-app-logs',\n * token: process.env.AXIOM_TOKEN,\n * }\n * ```\n */\n axiom?: {\n /** Axiom dataset name */\n dataset: string\n /** Axiom API token */\n token: string\n /** Organization ID (required for Personal Access Tokens) */\n orgId?: string\n /** Base URL for Axiom API. Default: https://api.axiom.co */\n baseUrl?: string\n /** Request timeout in milliseconds. Default: 5000 */\n timeout?: number\n }\n\n /**\n * OTLP adapter configuration.\n * When configured, use `createOTLPDrain()` from `evlog/otlp` to send logs.\n *\n * @example\n * ```ts\n * otlp: {\n * endpoint: 'http://localhost:4318',\n * headers: {\n * 'Authorization': `Basic ${process.env.GRAFANA_TOKEN}`,\n * },\n * }\n * ```\n */\n otlp?: {\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 /**\n * PostHog adapter configuration.\n * When configured, use `createPostHogDrain()` from `evlog/posthog` to send logs.\n *\n * @example\n * ```ts\n * posthog: {\n * apiKey: process.env.POSTHOG_API_KEY,\n * }\n * ```\n */\n posthog?: {\n /** PostHog project API key */\n apiKey: string\n /** PostHog host URL. Default: https://us.i.posthog.com */\n host?: string\n /** PostHog event name. Default: evlog_wide_event */\n eventName?: string\n /** Override distinct_id (defaults to event.service) */\n distinctId?: string\n /** Request timeout in milliseconds. Default: 5000 */\n timeout?: number\n }\n\n /**\n * Sentry adapter configuration.\n * When configured, use `createSentryDrain()` from `evlog/sentry` to send logs.\n *\n * @example\n * ```ts\n * sentry: {\n * dsn: process.env.SENTRY_DSN,\n * }\n * ```\n */\n sentry?: {\n /** Sentry DSN */\n dsn: string\n /** Environment override (defaults to event.environment) */\n environment?: string\n /** Release version override (defaults to event.version) */\n release?: string\n /** Additional tags to attach as attributes */\n tags?: Record<string, string>\n /** Request timeout in milliseconds. Default: 5000 */\n timeout?: number\n }\n}\n\nexport default defineNuxtModule<ModuleOptions>({\n meta: {\n name: 'evlog',\n configKey: 'evlog',\n docs: 'https://evlog.dev',\n },\n defaults: {},\n setup(options, nuxt) {\n const resolver = createResolver(import.meta.url)\n\n const transportEnabled = options.transport?.enabled ?? false\n const transportEndpoint = options.transport?.endpoint ?? '/api/_evlog/ingest'\n\n // Register custom error handler for proper EvlogError serialization\n // Only set if not already configured to avoid overwriting user's custom handler\n // @ts-expect-error nitro:config hook exists but is not in NuxtHooks type\n nuxt.hook('nitro:config', (nitroConfig: NitroConfig) => {\n nitroConfig.errorHandler = nitroConfig.errorHandler || resolver.resolve('../nitro/errorHandler')\n })\n\n nuxt.options.runtimeConfig.evlog = options\n nuxt.options.runtimeConfig.public.evlog = {\n pretty: options.pretty,\n transport: {\n enabled: transportEnabled,\n endpoint: transportEndpoint,\n },\n }\n\n if (transportEnabled) {\n addServerHandler({\n route: transportEndpoint,\n method: 'post',\n handler: resolver.resolve('../runtime/server/routes/_evlog/ingest.post'),\n })\n }\n\n addServerPlugin(resolver.resolve('../nitro/plugin'))\n\n addPlugin({\n src: resolver.resolve('../runtime/client/plugin'),\n mode: 'client',\n })\n\n addImports([\n {\n name: 'log',\n from: resolver.resolve('../runtime/client/log'),\n },\n {\n name: 'createEvlogError',\n from: resolver.resolve('../error'),\n },\n {\n name: 'parseError',\n from: resolver.resolve('../runtime/utils/parseError'),\n },\n ])\n\n addServerImports([\n {\n name: 'useLogger',\n from: resolver.resolve('../runtime/server/useLogger'),\n },\n {\n name: 'log',\n from: resolver.resolve('../logger'),\n },\n {\n name: 'createEvlogError',\n from: resolver.resolve('../error'),\n },\n ])\n },\n})\n"],"mappings":";;;AA2LA,qBAAe,iBAAgC;CAC7C,MAAM;EACJ,MAAM;EACN,WAAW;EACX,MAAM;EACP;CACD,UAAU,EAAE;CACZ,MAAM,SAAS,MAAM;EACnB,MAAM,WAAW,eAAe,OAAO,KAAK,IAAI;EAEhD,MAAM,mBAAmB,QAAQ,WAAW,WAAW;EACvD,MAAM,oBAAoB,QAAQ,WAAW,YAAY;AAKzD,OAAK,KAAK,iBAAiB,gBAA6B;AACtD,eAAY,eAAe,YAAY,gBAAgB,SAAS,QAAQ,wBAAwB;IAChG;AAEF,OAAK,QAAQ,cAAc,QAAQ;AACnC,OAAK,QAAQ,cAAc,OAAO,QAAQ;GACxC,QAAQ,QAAQ;GAChB,WAAW;IACT,SAAS;IACT,UAAU;IACX;GACF;AAED,MAAI,iBACF,kBAAiB;GACf,OAAO;GACP,QAAQ;GACR,SAAS,SAAS,QAAQ,8CAA8C;GACzE,CAAC;AAGJ,kBAAgB,SAAS,QAAQ,kBAAkB,CAAC;AAEpD,YAAU;GACR,KAAK,SAAS,QAAQ,2BAA2B;GACjD,MAAM;GACP,CAAC;AAEF,aAAW;GACT;IACE,MAAM;IACN,MAAM,SAAS,QAAQ,wBAAwB;IAChD;GACD;IACE,MAAM;IACN,MAAM,SAAS,QAAQ,WAAW;IACnC;GACD;IACE,MAAM;IACN,MAAM,SAAS,QAAQ,8BAA8B;IACtD;GACF,CAAC;AAEF,mBAAiB;GACf;IACE,MAAM;IACN,MAAM,SAAS,QAAQ,8BAA8B;IACtD;GACD;IACE,MAAM;IACN,MAAM,SAAS,QAAQ,YAAY;IACpC;GACD;IACE,MAAM;IACN,MAAM,SAAS,QAAQ,WAAW;IACnC;GACF,CAAC;;CAEL,CAAC"}
@@ -0,0 +1,46 @@
1
+ //#region src/pipeline.d.ts
2
+ interface DrainPipelineOptions<T = unknown> {
3
+ batch?: {
4
+ /** Maximum number of events per batch sent to the drain function. @default 50 */size?: number; /** Maximum time (ms) an event can stay buffered before a flush is triggered, even if the batch is not full. @default 5000 */
5
+ intervalMs?: number;
6
+ };
7
+ retry?: {
8
+ /** Total number of attempts (including the initial one) before dropping the batch. @default 3 */maxAttempts?: number; /** Delay strategy between retry attempts. @default 'exponential' */
9
+ backoff?: 'exponential' | 'linear' | 'fixed'; /** Base delay (ms) for the first retry. Scaled by the backoff strategy on subsequent retries. @default 1000 */
10
+ initialDelayMs?: number; /** Upper bound (ms) for any single retry delay. @default 30000 */
11
+ maxDelayMs?: number;
12
+ };
13
+ /** Maximum number of events held in the buffer. When exceeded, the oldest event is dropped. @default 1000 */
14
+ maxBufferSize?: number;
15
+ /** Called when a batch is dropped after all retry attempts are exhausted, or when the buffer overflows. */
16
+ onDropped?: (events: T[], error?: Error) => void;
17
+ }
18
+ interface PipelineDrainFn<T> {
19
+ (ctx: T): void;
20
+ /** Flush all buffered events. Call on server shutdown. */
21
+ flush: () => Promise<void>;
22
+ readonly pending: number;
23
+ }
24
+ /**
25
+ * Create a drain pipeline that batches events, retries on failure, and manages buffer overflow.
26
+ *
27
+ * Returns a higher-order function: pass your drain adapter to get a hook-compatible function.
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * const pipeline = createDrainPipeline({ batch: { size: 50 } })
32
+ * const drain = pipeline(async (batch) => {
33
+ * await sendToBackend(batch)
34
+ * })
35
+ *
36
+ * // Use as a hook
37
+ * nitroApp.hooks.hook('evlog:drain', drain)
38
+ *
39
+ * // Flush on shutdown
40
+ * nitroApp.hooks.hook('close', () => drain.flush())
41
+ * ```
42
+ */
43
+ declare function createDrainPipeline<T = unknown>(options?: DrainPipelineOptions<T>): (drain: (batch: T[]) => void | Promise<void>) => PipelineDrainFn<T>;
44
+ //#endregion
45
+ export { DrainPipelineOptions, PipelineDrainFn, createDrainPipeline };
46
+ //# sourceMappingURL=pipeline.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.d.mts","names":[],"sources":["../src/pipeline.ts"],"mappings":";UAAiB,oBAAA;EACf,KAAA;IADmC,iFAGjC,IAAA,WAiBqC;IAfrC,UAAA;EAAA;EAEF,KAAA;IAFE,iGAIA,WAAA,WAAA;IAEA,OAAA,uCAEA;IAAA,cAAA,WAKF;IAHE,UAAA;EAAA;EAKW;EAFb,aAAA;EAE0B;EAA1B,SAAA,IAAa,MAAA,EAAQ,CAAA,IAAK,KAAA,GAAQ,KAAA;AAAA;AAAA,UAGnB,eAAA;EAAA,CACd,GAAA,EAAK,CAAA;EADwB;EAG9B,KAAA,QAAa,OAAA;EAAA,SACJ,OAAA;AAAA;;;;;;;AAsBX;;;;;;;;;;;;;iBAAgB,mBAAA,aAAA,CAAiC,OAAA,GAAU,oBAAA,CAAqB,CAAA,KAAM,KAAA,GAAQ,KAAA,EAAO,CAAA,cAAe,OAAA,WAAkB,eAAA,CAAgB,CAAA"}