autotel-adapters 0.3.19 → 2.0.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 (117) hide show
  1. package/README.md +13 -0
  2. package/dist/cloudflare.cjs +44 -29
  3. package/dist/cloudflare.cjs.map +1 -1
  4. package/dist/cloudflare.d.cts +11 -17
  5. package/dist/cloudflare.d.cts.map +1 -1
  6. package/dist/cloudflare.d.ts +11 -17
  7. package/dist/cloudflare.d.ts.map +1 -1
  8. package/dist/cloudflare.js +47 -30
  9. package/dist/cloudflare.js.map +1 -1
  10. package/dist/core.cjs +7 -11
  11. package/dist/core.cjs.map +1 -1
  12. package/dist/core.d.cts +7 -11
  13. package/dist/core.d.cts.map +1 -1
  14. package/dist/core.d.ts +6 -10
  15. package/dist/core.d.ts.map +1 -1
  16. package/dist/core.js +7 -12
  17. package/dist/core.js.map +1 -1
  18. package/dist/elysia.cjs +50 -0
  19. package/dist/elysia.cjs.map +1 -0
  20. package/dist/elysia.d.cts +18 -0
  21. package/dist/elysia.d.cts.map +1 -0
  22. package/dist/elysia.d.ts +18 -0
  23. package/dist/elysia.d.ts.map +1 -0
  24. package/dist/elysia.js +44 -0
  25. package/dist/elysia.js.map +1 -0
  26. package/dist/express.cjs +5 -16
  27. package/dist/express.cjs.map +1 -1
  28. package/dist/express.d.cts +6 -15
  29. package/dist/express.d.cts.map +1 -1
  30. package/dist/express.d.ts +6 -15
  31. package/dist/express.d.ts.map +1 -1
  32. package/dist/express.js +7 -16
  33. package/dist/express.js.map +1 -1
  34. package/dist/fastify.cjs +5 -16
  35. package/dist/fastify.cjs.map +1 -1
  36. package/dist/fastify.d.cts +6 -15
  37. package/dist/fastify.d.cts.map +1 -1
  38. package/dist/fastify.d.ts +6 -15
  39. package/dist/fastify.d.ts.map +1 -1
  40. package/dist/fastify.js +7 -16
  41. package/dist/fastify.js.map +1 -1
  42. package/dist/hono.cjs +52 -11
  43. package/dist/hono.cjs.map +1 -1
  44. package/dist/hono.d.cts +12 -5
  45. package/dist/hono.d.cts.map +1 -1
  46. package/dist/hono.d.ts +12 -5
  47. package/dist/hono.d.ts.map +1 -1
  48. package/dist/hono.js +49 -12
  49. package/dist/hono.js.map +1 -1
  50. package/dist/index.cjs +14 -9
  51. package/dist/index.d.cts +12 -9
  52. package/dist/index.d.ts +12 -9
  53. package/dist/index.js +12 -9
  54. package/dist/integration-DI-1RuTh.d.cts +100 -0
  55. package/dist/integration-DI-1RuTh.d.cts.map +1 -0
  56. package/dist/integration-IUpfttGT.js +335 -0
  57. package/dist/integration-IUpfttGT.js.map +1 -0
  58. package/dist/integration-guh7BHTF.cjs +412 -0
  59. package/dist/integration-guh7BHTF.cjs.map +1 -0
  60. package/dist/integration-rYoX8QLk.d.ts +100 -0
  61. package/dist/integration-rYoX8QLk.d.ts.map +1 -0
  62. package/dist/nestjs.cjs +119 -0
  63. package/dist/nestjs.cjs.map +1 -0
  64. package/dist/nestjs.d.cts +42 -0
  65. package/dist/nestjs.d.cts.map +1 -0
  66. package/dist/nestjs.d.ts +42 -0
  67. package/dist/nestjs.d.ts.map +1 -0
  68. package/dist/nestjs.js +114 -0
  69. package/dist/nestjs.js.map +1 -0
  70. package/dist/next.cjs +35 -33
  71. package/dist/next.cjs.map +1 -1
  72. package/dist/next.d.cts +6 -17
  73. package/dist/next.d.cts.map +1 -1
  74. package/dist/next.d.ts +6 -17
  75. package/dist/next.d.ts.map +1 -1
  76. package/dist/next.js +38 -34
  77. package/dist/next.js.map +1 -1
  78. package/dist/nitro.cjs +33 -41
  79. package/dist/nitro.cjs.map +1 -1
  80. package/dist/nitro.d.cts +6 -17
  81. package/dist/nitro.d.cts.map +1 -1
  82. package/dist/nitro.d.ts +6 -17
  83. package/dist/nitro.d.ts.map +1 -1
  84. package/dist/nitro.js +33 -42
  85. package/dist/nitro.js.map +1 -1
  86. package/dist/sveltekit.cjs +48 -0
  87. package/dist/sveltekit.cjs.map +1 -0
  88. package/dist/sveltekit.d.cts +24 -0
  89. package/dist/sveltekit.d.cts.map +1 -0
  90. package/dist/sveltekit.d.ts +24 -0
  91. package/dist/sveltekit.d.ts.map +1 -0
  92. package/dist/sveltekit.js +43 -0
  93. package/dist/sveltekit.js.map +1 -0
  94. package/dist/tanstack.cjs +0 -8
  95. package/dist/tanstack.cjs.map +1 -1
  96. package/dist/tanstack.d.cts +1 -7
  97. package/dist/tanstack.d.cts.map +1 -1
  98. package/dist/tanstack.d.ts +1 -7
  99. package/dist/tanstack.d.ts.map +1 -1
  100. package/dist/tanstack.js +2 -9
  101. package/dist/tanstack.js.map +1 -1
  102. package/dist/toolkit/index.cjs +23 -0
  103. package/dist/toolkit/index.d.cts +42 -0
  104. package/dist/toolkit/index.d.cts.map +1 -0
  105. package/dist/toolkit/index.d.ts +42 -0
  106. package/dist/toolkit/index.d.ts.map +1 -0
  107. package/dist/toolkit/index.js +4 -0
  108. package/dist/toolkit/storage.cjs +35 -0
  109. package/dist/toolkit/storage.cjs.map +1 -0
  110. package/dist/toolkit/storage.d.cts +20 -0
  111. package/dist/toolkit/storage.d.cts.map +1 -0
  112. package/dist/toolkit/storage.d.ts +20 -0
  113. package/dist/toolkit/storage.d.ts.map +1 -0
  114. package/dist/toolkit/storage.js +33 -0
  115. package/dist/toolkit/storage.js.map +1 -0
  116. package/package.json +39 -8
  117. package/skills/autotel-adapters/SKILL.md +42 -34
@@ -10,9 +10,12 @@ Framework-specific wrappers around autotel's core tracing primitives. Each adapt
10
10
 
11
11
  - A handler wrapper that opens a span and binds a request-scoped `RequestLogger`
12
12
  - A `useLogger()` function that retrieves the logger from within the handler
13
- - A toolkit object (`*Toolkit`) bundling `useLogger`, `parseError`, `createStructuredError`, and `createDrainPipeline`
13
+ - Direct re-exports of the utilities `parseError`, `createStructuredError`, and `createDrainPipeline`
14
14
 
15
- All adapters use `AsyncLocalStorage` (or a `WeakMap` for Cloudflare) internally so logger access is implicit — you never pass a logger through call chains manually.
15
+ Options are passed per call site (e.g. `withAutotel(handler, options)`). There are no
16
+ `create*Adapter` factories or `*Toolkit` bundles.
17
+
18
+ All adapters use `AsyncLocalStorage` (or a `WeakMap` for Cloudflare) internally so logger access is implicit. You never pass a logger through call chains manually.
16
19
 
17
20
  ## Setup
18
21
 
@@ -32,7 +35,7 @@ pnpm add hono # Hono
32
35
 
33
36
  Import from the subpath `autotel-adapters/next` (or from the barrel `autotel-adapters`).
34
37
 
35
- **Option A — per-handler wrap:**
38
+ **Option A, per-handler wrap:**
36
39
 
37
40
  ```typescript
38
41
  import { withAutotel, useLogger } from 'autotel-adapters/next';
@@ -44,16 +47,18 @@ export const GET = withAutotel(async (request) => {
44
47
  });
45
48
  ```
46
49
 
47
- **Option B — create a shared adapter with defaults:**
50
+ **Option B, share defaults by passing options at each wrap:**
48
51
 
49
52
  ```typescript
50
53
  // lib/autotel.ts
51
- import { createNextAdapter } from 'autotel-adapters/next';
54
+ import { withAutotel } from 'autotel-adapters/next';
52
55
 
53
- export const { withAutotel, useLogger, parseError } = createNextAdapter({
56
+ const autotelOptions = {
54
57
  spanName: (req) => `api ${new URL(req?.url ?? '/').pathname}`,
55
- enrich: (req) => ({ 'tenant.id': req?.headers?.get('x-tenant-id') }),
56
- });
58
+ enrichRequest: (req) => ({ 'tenant.id': req?.headers?.get('x-tenant-id') }),
59
+ };
60
+
61
+ export const withTracing = (handler) => withAutotel(handler, autotelOptions);
57
62
  ```
58
63
 
59
64
  `withAutotel` accepts any function whose first argument is `NextRequestLike`. The `spanName` option can be a static string or a function receiving the request. The auto-enrichment sets `http.request.method`, `url.full`, `http.route`, and `http.request.header.x-request-id`.
@@ -69,11 +74,11 @@ export default defineEventHandler(
69
74
  const log = useLogger(event);
70
75
  log.info('handling event');
71
76
  return { ok: true };
72
- })
77
+ }),
73
78
  );
74
79
  ```
75
80
 
76
- `withAutotelEventHandler` reads `event.method`, `event.path`, and `event.context.requestId` automatically. Use `createNitroAdapter` to share options across handlers.
81
+ `withAutotelEventHandler` reads `event.method`, `event.path`, and `event.context.requestId` automatically. Pass options as the second argument to share config across handlers.
77
82
 
78
83
  ### Cloudflare Workers
79
84
 
@@ -95,46 +100,50 @@ Cloudflare stores the logger in a `WeakMap` keyed on the request object (no `Asy
95
100
 
96
101
  ```typescript
97
102
  import { Hono } from 'hono';
98
- import { honoToolkit } from 'autotel-adapters/hono';
103
+ import { autotelMiddleware, useLogger } from 'autotel-adapters/hono';
99
104
 
100
105
  const app = new Hono();
106
+ app.use('*', autotelMiddleware());
101
107
 
102
108
  app.get('/', (c) => {
103
- const log = honoToolkit.useLogger(c);
109
+ const log = useLogger();
104
110
  log.info('hello hono');
105
111
  return c.json({ ok: true });
106
112
  });
107
113
  ```
108
114
 
109
- `honoToolkit` is a pre-built `AdapterToolkit<Context>`. There is no handler wrapper for Hono — use autotel's `trace()` directly if you need a span.
115
+ Register `autotelMiddleware()` before your routes; it opens a span per request and
116
+ binds the logger to `AsyncLocalStorage`, so `useLogger()` (no argument) resolves
117
+ inside any downstream handler.
110
118
 
111
119
  ### TanStack Start
112
120
 
113
121
  ```typescript
114
- import { tanstackToolkit } from 'autotel-adapters/tanstack';
122
+ import { useLogger } from 'autotel-adapters/tanstack';
115
123
 
116
- // Inside a server function or API route:
117
- const log = tanstackToolkit.useLogger({ pathname: '/api/data', method: 'GET' });
124
+ // Inside a server function or API route already running in an autotel trace:
125
+ const log = useLogger({ pathname: '/api/data', method: 'GET' });
118
126
  log.info('handling request');
119
127
  ```
120
128
 
121
- ### AdapterToolkit interface
129
+ ### Utilities
122
130
 
123
- Every toolkit (and `createNextAdapter`/`createNitroAdapter`/`createCloudflareAdapter`) exposes:
131
+ Each subpath re-exports `parseError`, `createStructuredError`, and
132
+ `createDrainPipeline` directly (they also live in `autotel`):
124
133
 
125
- | Member | Description |
126
- |---|---|
127
- | `useLogger(ctx?, opts?)` | Get the request-scoped `RequestLogger` |
128
- | `parseError(error)` | Normalise any thrown value into `ParsedError` |
134
+ | Export | Description |
135
+ | ------------------------------ | --------------------------------------------------------- |
136
+ | `useLogger(ctx?, opts?)` | Get the request-scoped `RequestLogger` |
137
+ | `parseError(error)` | Normalise any thrown value into `ParsedError` |
129
138
  | `createStructuredError(input)` | Build a `StructuredError` for consistent API error shapes |
130
- | `createDrainPipeline(opts?)` | Create a batching drain pipeline |
139
+ | `createDrainPipeline(opts?)` | Create a batching drain pipeline |
131
140
 
132
- ### Custom adapter (createAdapterToolkit)
141
+ ### Custom adapter (createUseLogger)
133
142
 
134
143
  ```typescript
135
- import { createAdapterToolkit } from 'autotel-adapters/core';
144
+ import { createUseLogger } from 'autotel-adapters/core';
136
145
 
137
- const myToolkit = createAdapterToolkit<MyContext>({
146
+ const useLogger = createUseLogger<MyContext>({
138
147
  adapterName: 'my-framework',
139
148
  enrich: (ctx) => ({ 'tenant.id': ctx.tenantId }),
140
149
  });
@@ -142,7 +151,7 @@ const myToolkit = createAdapterToolkit<MyContext>({
142
151
 
143
152
  ## Common Mistakes
144
153
 
145
- ### HIGH — Calling useLogger outside a traced handler
154
+ ### HIGH: Calling useLogger outside a traced handler
146
155
 
147
156
  ```typescript
148
157
  // WRONG: no active trace context
@@ -155,28 +164,27 @@ export async function myFunction() {
155
164
  // CORRECT: always call useLogger inside a handler wrapped with withAutotel / withAutotelEventHandler
156
165
  export const GET = withAutotel(async (request) => {
157
166
  const log = useLogger(request); // ok — trace context is active
158
- await myFunction(log); // pass the logger down if needed
167
+ await myFunction(log); // pass the logger down if needed
159
168
  });
160
169
  ```
161
170
 
162
171
  `useLogger` looks up an `AsyncLocalStorage` store populated by the handler wrapper. Calling it outside that wrapper throws.
163
172
 
164
- ### HIGH — Importing from wrong subpath
173
+ ### HIGH: Importing from wrong subpath
165
174
 
166
175
  ```typescript
167
176
  // WRONG
168
- import { honoToolkit } from 'autotel-adapters'; // barrel re-exports do exist, but...
169
- import { useLogger } from 'autotel-adapters'; // this is the Next.js useLogger, not Hono's
177
+ import { useLogger } from 'autotel-adapters'; // this is Hono's useLogger from the barrel, not Next's
170
178
  ```
171
179
 
172
180
  ```typescript
173
181
  // CORRECT: use framework-specific subpaths
174
- import { honoToolkit } from 'autotel-adapters/hono';
182
+ import { autotelMiddleware, useLogger } from 'autotel-adapters/hono';
175
183
  import { useLogger } from 'autotel-adapters/next';
176
184
  import { withAutotelEventHandler } from 'autotel-adapters/nitro';
177
185
  ```
178
186
 
179
- ### MEDIUM — Skipping the request argument in Next.js useLogger
187
+ ### MEDIUM: Skipping the request argument in Next.js useLogger
180
188
 
181
189
  ```typescript
182
190
  // WRONG: loses auto-enrichment (method, url, route, requestId)
@@ -190,7 +198,7 @@ const log = useLogger(request);
190
198
 
191
199
  The request argument is optional only when you are certain the `AsyncLocalStorage` store is already populated (i.e., called from code deeply nested inside a `withAutotel`-wrapped handler).
192
200
 
193
- ### MEDIUM — Using createCloudflareAdapter without passing request to useLogger
201
+ ### MEDIUM: Not passing request to useLogger on Cloudflare
194
202
 
195
203
  In Cloudflare Workers, the logger is stored per-request in a `WeakMap`. If you call `useLogger()` without the request object, you always get a new logger with no stored enrichment.
196
204