autotel-cloudflare 2.18.18 → 2.19.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 (58) hide show
  1. package/dist/actors.d.ts +54 -89
  2. package/dist/actors.d.ts.map +1 -0
  3. package/dist/actors.js +990 -986
  4. package/dist/actors.js.map +1 -1
  5. package/dist/agents.d.ts +102 -128
  6. package/dist/agents.d.ts.map +1 -0
  7. package/dist/agents.js +275 -259
  8. package/dist/agents.js.map +1 -1
  9. package/dist/bindings-C10RI6Il.js +975 -0
  10. package/dist/bindings-C10RI6Il.js.map +1 -0
  11. package/dist/bindings-xEZcXo5r.d.ts +149 -0
  12. package/dist/bindings-xEZcXo5r.d.ts.map +1 -0
  13. package/dist/bindings.d.ts +2 -139
  14. package/dist/bindings.js +3 -4
  15. package/dist/common-DiWH6nmG.js +63 -0
  16. package/dist/common-DiWH6nmG.js.map +1 -0
  17. package/dist/events.d.ts +1 -1
  18. package/dist/events.js +3 -3
  19. package/dist/execution-logger-BxmgP8jF.js +65 -0
  20. package/dist/execution-logger-BxmgP8jF.js.map +1 -0
  21. package/dist/{logger-Cm_73k3-.d.ts → execution-logger-tgQmJeeU.d.ts} +9 -7
  22. package/dist/execution-logger-tgQmJeeU.d.ts.map +1 -0
  23. package/dist/handlers-CMg9l_T-.js +378 -0
  24. package/dist/handlers-CMg9l_T-.js.map +1 -0
  25. package/dist/handlers-C_VojUeA.d.ts +96 -0
  26. package/dist/handlers-C_VojUeA.d.ts.map +1 -0
  27. package/dist/handlers.d.ts +2 -112
  28. package/dist/handlers.js +3 -4
  29. package/dist/index.d.ts +20 -99
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +644 -600
  32. package/dist/index.js.map +1 -1
  33. package/dist/logger.d.ts +3 -3
  34. package/dist/logger.js +5 -4
  35. package/dist/parse-error.d.ts +2 -1
  36. package/dist/parse-error.js +3 -3
  37. package/dist/sampling.d.ts +1 -4
  38. package/dist/sampling.js +3 -3
  39. package/dist/testing.d.ts +1 -1
  40. package/dist/testing.js +3 -3
  41. package/package.json +6 -6
  42. package/src/bindings/ai.test.ts +1 -1
  43. package/src/bindings/ai.ts +3 -1
  44. package/dist/bindings.js.map +0 -1
  45. package/dist/chunk-KAUHT25H.js +0 -1084
  46. package/dist/chunk-KAUHT25H.js.map +0 -1
  47. package/dist/chunk-MIDMNKDC.js +0 -333
  48. package/dist/chunk-MIDMNKDC.js.map +0 -1
  49. package/dist/chunk-O4IYKWPJ.js +0 -55
  50. package/dist/chunk-O4IYKWPJ.js.map +0 -1
  51. package/dist/chunk-RVVMMPWN.js +0 -63
  52. package/dist/chunk-RVVMMPWN.js.map +0 -1
  53. package/dist/events.js.map +0 -1
  54. package/dist/handlers.js.map +0 -1
  55. package/dist/logger.js.map +0 -1
  56. package/dist/parse-error.js.map +0 -1
  57. package/dist/sampling.js.map +0 -1
  58. package/dist/testing.js.map +0 -1
@@ -1,1084 +0,0 @@
1
- import { wrap, isWrapped, setAttr } from './chunk-O4IYKWPJ.js';
2
- import { trace, SpanKind, SpanStatusCode } from '@opentelemetry/api';
3
- import { getActiveConfig } from 'autotel-edge';
4
-
5
- function instrumentAI(ai, bindingName) {
6
- const name = bindingName || "ai";
7
- const handler = {
8
- get(target, prop) {
9
- const value = Reflect.get(target, prop);
10
- if (prop === "run" && typeof value === "function") {
11
- return new Proxy(value, {
12
- apply: (fnTarget, _thisArg, args) => {
13
- const [model] = args;
14
- const tracer = trace.getTracer("autotel-edge");
15
- return tracer.startActiveSpan(
16
- `AI ${name}: run ${model}`,
17
- {
18
- kind: SpanKind.CLIENT,
19
- attributes: {
20
- "gen_ai.system": "cloudflare-workers-ai",
21
- "gen_ai.operation.name": "run",
22
- "gen_ai.request.model": model
23
- }
24
- },
25
- async (span) => {
26
- try {
27
- const result = await Reflect.apply(fnTarget, target, args);
28
- if (result?.usage?.prompt_tokens !== void 0) {
29
- setAttr(span, "gen_ai.usage.input_tokens", Number(result.usage.prompt_tokens));
30
- }
31
- if (result?.usage?.completion_tokens !== void 0) {
32
- setAttr(span, "gen_ai.usage.output_tokens", Number(result.usage.completion_tokens));
33
- }
34
- span.setStatus({ code: SpanStatusCode.OK });
35
- return result;
36
- } catch (error) {
37
- span.recordException(error);
38
- span.setStatus({
39
- code: SpanStatusCode.ERROR,
40
- message: error instanceof Error ? error.message : String(error)
41
- });
42
- throw error;
43
- } finally {
44
- span.end();
45
- }
46
- }
47
- );
48
- }
49
- });
50
- }
51
- return value;
52
- }
53
- };
54
- return wrap(ai, handler);
55
- }
56
- var TRACED_METHODS = ["query", "insert", "upsert", "deleteByIds", "getByIds", "describe"];
57
- function instrumentVectorize(vectorize, indexName) {
58
- const name = indexName || "vectorize";
59
- const handler = {
60
- get(target, prop) {
61
- const value = Reflect.get(target, prop);
62
- if (typeof prop === "string" && TRACED_METHODS.includes(prop) && typeof value === "function") {
63
- return new Proxy(value, {
64
- apply: (fnTarget, _thisArg, args) => {
65
- const operation = prop;
66
- const tracer = trace.getTracer("autotel-edge");
67
- const attributes = {
68
- "db.system": "cloudflare-vectorize",
69
- "db.operation": operation,
70
- "db.collection.name": name
71
- };
72
- if (operation === "query") {
73
- const queryInput = args[0];
74
- if (queryInput?.topK !== void 0) {
75
- attributes["db.vectorize.top_k"] = queryInput.topK;
76
- }
77
- }
78
- if ((operation === "insert" || operation === "upsert") && Array.isArray(args[0])) {
79
- attributes["db.vectorize.vectors_count"] = args[0].length;
80
- }
81
- return tracer.startActiveSpan(
82
- `Vectorize ${name}: ${operation}`,
83
- {
84
- kind: SpanKind.CLIENT,
85
- attributes
86
- },
87
- async (span) => {
88
- try {
89
- const result = await Reflect.apply(fnTarget, target, args);
90
- if (operation === "query" && result?.matches) {
91
- setAttr(span, "db.vectorize.matches_count", result.matches.length);
92
- }
93
- span.setStatus({ code: SpanStatusCode.OK });
94
- return result;
95
- } catch (error) {
96
- span.recordException(error);
97
- span.setStatus({
98
- code: SpanStatusCode.ERROR,
99
- message: error instanceof Error ? error.message : String(error)
100
- });
101
- throw error;
102
- } finally {
103
- span.end();
104
- }
105
- }
106
- );
107
- }
108
- });
109
- }
110
- return value;
111
- }
112
- };
113
- return wrap(vectorize, handler);
114
- }
115
- function instrumentHyperdrive(hyperdrive, bindingName) {
116
- const name = bindingName || "hyperdrive";
117
- const handler = {
118
- get(target, prop) {
119
- const value = Reflect.get(target, prop);
120
- if (prop === "connect" && typeof value === "function") {
121
- return new Proxy(value, {
122
- apply: (fnTarget, _thisArg, args) => {
123
- const tracer = trace.getTracer("autotel-edge");
124
- const attributes = {
125
- "db.system": "cloudflare-hyperdrive",
126
- "db.operation": "connect"
127
- };
128
- try {
129
- setAttr({ setAttribute: (k, v) => {
130
- if (v !== void 0 && v !== null) attributes[k] = v;
131
- } }, "server.address", target.host);
132
- setAttr({ setAttribute: (k, v) => {
133
- if (v !== void 0 && v !== null) attributes[k] = v;
134
- } }, "server.port", target.port);
135
- setAttr({ setAttribute: (k, v) => {
136
- if (v !== void 0 && v !== null) attributes[k] = v;
137
- } }, "db.user", target.user);
138
- } catch {
139
- }
140
- return tracer.startActiveSpan(
141
- `Hyperdrive ${name}: connect`,
142
- {
143
- kind: SpanKind.CLIENT,
144
- attributes
145
- },
146
- async (span) => {
147
- try {
148
- const result = await Reflect.apply(fnTarget, target, args);
149
- span.setStatus({ code: SpanStatusCode.OK });
150
- return result;
151
- } catch (error) {
152
- span.recordException(error);
153
- span.setStatus({
154
- code: SpanStatusCode.ERROR,
155
- message: error instanceof Error ? error.message : String(error)
156
- });
157
- throw error;
158
- } finally {
159
- span.end();
160
- }
161
- }
162
- );
163
- }
164
- });
165
- }
166
- return value;
167
- }
168
- };
169
- return wrap(hyperdrive, handler);
170
- }
171
- function instrumentQueueProducer(queue, queueName) {
172
- const name = queueName || "queue";
173
- const handler = {
174
- get(target, prop) {
175
- const value = Reflect.get(target, prop);
176
- if (prop === "send" && typeof value === "function") {
177
- return new Proxy(value, {
178
- apply: (fnTarget, _thisArg, args) => {
179
- const tracer = trace.getTracer("autotel-edge");
180
- return tracer.startActiveSpan(
181
- `Queue ${name}: send`,
182
- {
183
- kind: SpanKind.PRODUCER,
184
- attributes: {
185
- "messaging.system": "cloudflare-queues",
186
- "messaging.operation.type": "publish",
187
- "messaging.operation": "send",
188
- "messaging.destination.name": name
189
- }
190
- },
191
- async (span) => {
192
- try {
193
- const result = await Reflect.apply(fnTarget, target, args);
194
- setAttr(span, "messaging.message.id", result?.messageId);
195
- span.setStatus({ code: SpanStatusCode.OK });
196
- return result;
197
- } catch (error) {
198
- span.recordException(error);
199
- span.setStatus({
200
- code: SpanStatusCode.ERROR,
201
- message: error instanceof Error ? error.message : String(error)
202
- });
203
- throw error;
204
- } finally {
205
- span.end();
206
- }
207
- }
208
- );
209
- }
210
- });
211
- }
212
- if (prop === "sendBatch" && typeof value === "function") {
213
- return new Proxy(value, {
214
- apply: (fnTarget, _thisArg, args) => {
215
- const [messages] = args;
216
- const tracer = trace.getTracer("autotel-edge");
217
- return tracer.startActiveSpan(
218
- `Queue ${name}: sendBatch`,
219
- {
220
- kind: SpanKind.PRODUCER,
221
- attributes: {
222
- "messaging.system": "cloudflare-queues",
223
- "messaging.operation.type": "publish",
224
- "messaging.operation": "sendBatch",
225
- "messaging.destination.name": name,
226
- "messaging.batch.message_count": Array.isArray(messages) ? messages.length : 0
227
- }
228
- },
229
- async (span) => {
230
- try {
231
- const result = await Reflect.apply(fnTarget, target, args);
232
- span.setStatus({ code: SpanStatusCode.OK });
233
- return result;
234
- } catch (error) {
235
- span.recordException(error);
236
- span.setStatus({
237
- code: SpanStatusCode.ERROR,
238
- message: error instanceof Error ? error.message : String(error)
239
- });
240
- throw error;
241
- } finally {
242
- span.end();
243
- }
244
- }
245
- );
246
- }
247
- });
248
- }
249
- return value;
250
- }
251
- };
252
- return wrap(queue, handler);
253
- }
254
- function instrumentAnalyticsEngine(ae, datasetName) {
255
- const name = datasetName || "analytics-engine";
256
- const handler = {
257
- get(target, prop) {
258
- const value = Reflect.get(target, prop);
259
- if (prop === "writeDataPoint" && typeof value === "function") {
260
- return new Proxy(value, {
261
- apply: (fnTarget, _thisArg, args) => {
262
- const [dataPoint] = args;
263
- const tracer = trace.getTracer("autotel-edge");
264
- const attributes = {
265
- "analytics.system": "cloudflare-analytics-engine",
266
- "analytics.operation": "writeDataPoint"
267
- };
268
- if (dataPoint) {
269
- if (dataPoint.indexes) {
270
- attributes["analytics.indexes_count"] = Array.isArray(dataPoint.indexes) ? dataPoint.indexes.length : 1;
271
- }
272
- if (dataPoint.doubles) {
273
- attributes["analytics.doubles_count"] = dataPoint.doubles.length;
274
- }
275
- if (dataPoint.blobs) {
276
- attributes["analytics.blobs_count"] = dataPoint.blobs.length;
277
- }
278
- }
279
- return tracer.startActiveSpan(
280
- `AnalyticsEngine ${name}: writeDataPoint`,
281
- {
282
- kind: SpanKind.CLIENT,
283
- attributes
284
- },
285
- (span) => {
286
- try {
287
- Reflect.apply(fnTarget, target, args);
288
- span.setStatus({ code: SpanStatusCode.OK });
289
- } catch (error) {
290
- span.recordException(error);
291
- span.setStatus({
292
- code: SpanStatusCode.ERROR,
293
- message: error instanceof Error ? error.message : String(error)
294
- });
295
- throw error;
296
- } finally {
297
- span.end();
298
- }
299
- }
300
- );
301
- }
302
- });
303
- }
304
- return value;
305
- }
306
- };
307
- return wrap(ae, handler);
308
- }
309
- var pipelineMetaSymbol = /* @__PURE__ */ Symbol("images-pipeline-meta");
310
- function proxyTransformer(transformer, meta, bindingName) {
311
- const handler = {
312
- get(target, prop) {
313
- const value = Reflect.get(target, prop);
314
- if ((prop === "transform" || prop === "draw") && typeof value === "function") {
315
- return new Proxy(value, {
316
- apply: (fnTarget, _thisArg, args) => {
317
- meta.operationCount++;
318
- const result = Reflect.apply(fnTarget, target, args);
319
- if (result === target || result && typeof result === "object" && "output" in result) {
320
- return proxyTransformer(result, meta, bindingName);
321
- }
322
- return result;
323
- }
324
- });
325
- }
326
- if (prop === "output" && typeof value === "function") {
327
- return new Proxy(value, {
328
- apply: (fnTarget, _thisArg, args) => {
329
- const tracer = trace.getTracer("autotel-edge");
330
- const [formatOrOptions] = args;
331
- const attributes = {
332
- "images.system": "cloudflare-images",
333
- "images.pipeline.operation_count": meta.operationCount
334
- };
335
- if (typeof formatOrOptions === "string") {
336
- attributes["images.output.format"] = formatOrOptions;
337
- } else if (formatOrOptions && typeof formatOrOptions === "object") {
338
- const fmt = formatOrOptions.format;
339
- if (fmt) attributes["images.output.format"] = fmt;
340
- }
341
- return tracer.startActiveSpan(
342
- `Images ${bindingName}: output`,
343
- {
344
- kind: SpanKind.CLIENT,
345
- attributes
346
- },
347
- async (span) => {
348
- try {
349
- const result = await Reflect.apply(fnTarget, target, args);
350
- span.setStatus({ code: SpanStatusCode.OK });
351
- return result;
352
- } catch (error) {
353
- span.recordException(error);
354
- span.setStatus({
355
- code: SpanStatusCode.ERROR,
356
- message: error instanceof Error ? error.message : String(error)
357
- });
358
- throw error;
359
- } finally {
360
- span.end();
361
- }
362
- }
363
- );
364
- }
365
- });
366
- }
367
- return value;
368
- }
369
- };
370
- const proxy = new Proxy(transformer, handler);
371
- Object.defineProperty(proxy, pipelineMetaSymbol, {
372
- value: meta,
373
- writable: false,
374
- enumerable: false,
375
- configurable: false
376
- });
377
- return proxy;
378
- }
379
- function instrumentImages(images, bindingName) {
380
- const name = bindingName || "images";
381
- const handler = {
382
- get(target, prop) {
383
- const value = Reflect.get(target, prop);
384
- if (prop === "info" && typeof value === "function") {
385
- return new Proxy(value, {
386
- apply: (fnTarget, _thisArg, args) => {
387
- const tracer = trace.getTracer("autotel-edge");
388
- return tracer.startActiveSpan(
389
- `Images ${name}: info`,
390
- {
391
- kind: SpanKind.CLIENT,
392
- attributes: {
393
- "images.system": "cloudflare-images",
394
- "images.operation": "info"
395
- }
396
- },
397
- async (span) => {
398
- try {
399
- const result = await Reflect.apply(fnTarget, target, args);
400
- setAttr(span, "images.width", result?.width);
401
- setAttr(span, "images.height", result?.height);
402
- setAttr(span, "images.format", result?.format);
403
- span.setStatus({ code: SpanStatusCode.OK });
404
- return result;
405
- } catch (error) {
406
- span.recordException(error);
407
- span.setStatus({
408
- code: SpanStatusCode.ERROR,
409
- message: error instanceof Error ? error.message : String(error)
410
- });
411
- throw error;
412
- } finally {
413
- span.end();
414
- }
415
- }
416
- );
417
- }
418
- });
419
- }
420
- if (prop === "input" && typeof value === "function") {
421
- return new Proxy(value, {
422
- apply: (fnTarget, _thisArg, args) => {
423
- const transformer = Reflect.apply(fnTarget, target, args);
424
- const meta = { operationCount: 0 };
425
- return proxyTransformer(transformer, meta, name);
426
- }
427
- });
428
- }
429
- return value;
430
- }
431
- };
432
- return wrap(images, handler);
433
- }
434
-
435
- // src/bindings/bindings.ts
436
- function sanitizeStatement(query, mode) {
437
- if (mode === "off") return void 0;
438
- if (mode === "obfuscated") return query.replaceAll(/'[^']*'/g, "'?'").replaceAll(/\b\d+\b/g, "?");
439
- return query;
440
- }
441
- function instrumentKV(kv, namespaceName) {
442
- const name = namespaceName || "kv";
443
- const kvHandler = {
444
- get(target, prop) {
445
- const value = Reflect.get(target, prop);
446
- if (prop === "get" && typeof value === "function") {
447
- return new Proxy(value, {
448
- apply: (fnTarget, _thisArg, args) => {
449
- const [key, options] = args;
450
- const tracer = trace.getTracer("autotel-edge");
451
- return tracer.startActiveSpan(
452
- `KV ${name}: get`,
453
- {
454
- kind: SpanKind.CLIENT,
455
- attributes: {
456
- "db.system": "cloudflare-kv",
457
- "db.operation": "get",
458
- "db.namespace": name,
459
- "db.key": key,
460
- "db.cache_hit": options?.cacheTtl !== void 0
461
- }
462
- },
463
- async (span) => {
464
- try {
465
- const result = await Reflect.apply(fnTarget, target, args);
466
- span.setAttribute("db.result.type", result === null ? "null" : typeof result);
467
- span.setStatus({ code: SpanStatusCode.OK });
468
- return result;
469
- } catch (error) {
470
- span.recordException(error);
471
- span.setStatus({
472
- code: SpanStatusCode.ERROR,
473
- message: error instanceof Error ? error.message : String(error)
474
- });
475
- throw error;
476
- } finally {
477
- span.end();
478
- }
479
- }
480
- );
481
- }
482
- });
483
- }
484
- if (prop === "put" && typeof value === "function") {
485
- return new Proxy(value, {
486
- apply: (fnTarget, _thisArg, args) => {
487
- const [key] = args;
488
- const tracer = trace.getTracer("autotel-edge");
489
- return tracer.startActiveSpan(
490
- `KV ${name}: put`,
491
- {
492
- kind: SpanKind.CLIENT,
493
- attributes: {
494
- "db.system": "cloudflare-kv",
495
- "db.operation": "put",
496
- "db.namespace": name,
497
- "db.key": key
498
- }
499
- },
500
- async (span) => {
501
- try {
502
- const result = await Reflect.apply(fnTarget, target, args);
503
- span.setStatus({ code: SpanStatusCode.OK });
504
- return result;
505
- } catch (error) {
506
- span.recordException(error);
507
- span.setStatus({
508
- code: SpanStatusCode.ERROR,
509
- message: error instanceof Error ? error.message : String(error)
510
- });
511
- throw error;
512
- } finally {
513
- span.end();
514
- }
515
- }
516
- );
517
- }
518
- });
519
- }
520
- if (prop === "delete" && typeof value === "function") {
521
- return new Proxy(value, {
522
- apply: (fnTarget, _thisArg, args) => {
523
- const [key] = args;
524
- const tracer = trace.getTracer("autotel-edge");
525
- return tracer.startActiveSpan(
526
- `KV ${name}: delete`,
527
- {
528
- kind: SpanKind.CLIENT,
529
- attributes: {
530
- "db.system": "cloudflare-kv",
531
- "db.operation": "delete",
532
- "db.namespace": name,
533
- "db.key": key
534
- }
535
- },
536
- async (span) => {
537
- try {
538
- const result = await Reflect.apply(fnTarget, target, args);
539
- span.setStatus({ code: SpanStatusCode.OK });
540
- return result;
541
- } catch (error) {
542
- span.recordException(error);
543
- span.setStatus({
544
- code: SpanStatusCode.ERROR,
545
- message: error instanceof Error ? error.message : String(error)
546
- });
547
- throw error;
548
- } finally {
549
- span.end();
550
- }
551
- }
552
- );
553
- }
554
- });
555
- }
556
- if (prop === "list" && typeof value === "function") {
557
- return new Proxy(value, {
558
- apply: (fnTarget, _thisArg, args) => {
559
- const [options] = args;
560
- const tracer = trace.getTracer("autotel-edge");
561
- return tracer.startActiveSpan(
562
- `KV ${name}: list`,
563
- {
564
- kind: SpanKind.CLIENT,
565
- attributes: {
566
- "db.system": "cloudflare-kv",
567
- "db.operation": "list",
568
- "db.namespace": name,
569
- "db.prefix": options?.prefix || void 0,
570
- "db.limit": options?.limit || void 0
571
- }
572
- },
573
- async (span) => {
574
- try {
575
- const result = await Reflect.apply(fnTarget, target, args);
576
- span.setAttribute("db.result.keys_count", result.keys.length);
577
- span.setStatus({ code: SpanStatusCode.OK });
578
- return result;
579
- } catch (error) {
580
- span.recordException(error);
581
- span.setStatus({
582
- code: SpanStatusCode.ERROR,
583
- message: error instanceof Error ? error.message : String(error)
584
- });
585
- throw error;
586
- } finally {
587
- span.end();
588
- }
589
- }
590
- );
591
- }
592
- });
593
- }
594
- return value;
595
- }
596
- };
597
- return wrap(kv, kvHandler);
598
- }
599
- function instrumentR2(r2, bucketName) {
600
- const name = bucketName || "r2";
601
- const r2Handler = {
602
- get(target, prop) {
603
- const value = Reflect.get(target, prop);
604
- if (prop === "get" && typeof value === "function") {
605
- return new Proxy(value, {
606
- apply: (fnTarget, _thisArg, args) => {
607
- const [key] = args;
608
- const tracer = trace.getTracer("autotel-edge");
609
- return tracer.startActiveSpan(
610
- `R2 ${name}: get`,
611
- {
612
- kind: SpanKind.CLIENT,
613
- attributes: {
614
- "db.system": "cloudflare-r2",
615
- "db.operation": "get",
616
- "db.bucket": name,
617
- "db.key": key
618
- }
619
- },
620
- async (span) => {
621
- try {
622
- const result = await Reflect.apply(fnTarget, target, args);
623
- if (result) {
624
- span.setAttribute("db.result.size", result.size);
625
- span.setAttribute("db.result.etag", result.etag);
626
- span.setAttribute("db.result.content_type", result.httpMetadata?.contentType);
627
- } else {
628
- span.setAttribute("db.result.exists", false);
629
- }
630
- span.setStatus({ code: SpanStatusCode.OK });
631
- return result;
632
- } catch (error) {
633
- span.recordException(error);
634
- span.setStatus({
635
- code: SpanStatusCode.ERROR,
636
- message: error instanceof Error ? error.message : String(error)
637
- });
638
- throw error;
639
- } finally {
640
- span.end();
641
- }
642
- }
643
- );
644
- }
645
- });
646
- }
647
- if (prop === "put" && typeof value === "function") {
648
- return new Proxy(value, {
649
- apply: (fnTarget, _thisArg, args) => {
650
- const [key] = args;
651
- const tracer = trace.getTracer("autotel-edge");
652
- return tracer.startActiveSpan(
653
- `R2 ${name}: put`,
654
- {
655
- kind: SpanKind.CLIENT,
656
- attributes: {
657
- "db.system": "cloudflare-r2",
658
- "db.operation": "put",
659
- "db.bucket": name,
660
- "db.key": key
661
- }
662
- },
663
- async (span) => {
664
- try {
665
- const result = await Reflect.apply(fnTarget, target, args);
666
- span.setAttribute("db.result.etag", result.etag);
667
- span.setAttribute("db.result.uploaded", result.uploaded);
668
- span.setStatus({ code: SpanStatusCode.OK });
669
- return result;
670
- } catch (error) {
671
- span.recordException(error);
672
- span.setStatus({
673
- code: SpanStatusCode.ERROR,
674
- message: error instanceof Error ? error.message : String(error)
675
- });
676
- throw error;
677
- } finally {
678
- span.end();
679
- }
680
- }
681
- );
682
- }
683
- });
684
- }
685
- if (prop === "delete" && typeof value === "function") {
686
- return new Proxy(value, {
687
- apply: (fnTarget, _thisArg, args) => {
688
- const keys = args;
689
- const tracer = trace.getTracer("autotel-edge");
690
- return tracer.startActiveSpan(
691
- `R2 ${name}: delete`,
692
- {
693
- kind: SpanKind.CLIENT,
694
- attributes: {
695
- "db.system": "cloudflare-r2",
696
- "db.operation": "delete",
697
- "db.bucket": name,
698
- "db.keys_count": keys.length
699
- }
700
- },
701
- async (span) => {
702
- try {
703
- const result = await Reflect.apply(fnTarget, target, args);
704
- span.setStatus({ code: SpanStatusCode.OK });
705
- return result;
706
- } catch (error) {
707
- span.recordException(error);
708
- span.setStatus({
709
- code: SpanStatusCode.ERROR,
710
- message: error instanceof Error ? error.message : String(error)
711
- });
712
- throw error;
713
- } finally {
714
- span.end();
715
- }
716
- }
717
- );
718
- }
719
- });
720
- }
721
- if (prop === "list" && typeof value === "function") {
722
- return new Proxy(value, {
723
- apply: (fnTarget, _thisArg, args) => {
724
- const [options] = args;
725
- const tracer = trace.getTracer("autotel-edge");
726
- return tracer.startActiveSpan(
727
- `R2 ${name}: list`,
728
- {
729
- kind: SpanKind.CLIENT,
730
- attributes: {
731
- "db.system": "cloudflare-r2",
732
- "db.operation": "list",
733
- "db.bucket": name,
734
- "db.prefix": options?.prefix || void 0,
735
- "db.limit": options?.limit || void 0
736
- }
737
- },
738
- async (span) => {
739
- try {
740
- const result = await Reflect.apply(fnTarget, target, args);
741
- span.setAttribute("db.result.objects_count", result.objects.length);
742
- span.setAttribute("db.result.truncated", result.truncated);
743
- span.setStatus({ code: SpanStatusCode.OK });
744
- return result;
745
- } catch (error) {
746
- span.recordException(error);
747
- span.setStatus({
748
- code: SpanStatusCode.ERROR,
749
- message: error instanceof Error ? error.message : String(error)
750
- });
751
- throw error;
752
- } finally {
753
- span.end();
754
- }
755
- }
756
- );
757
- }
758
- });
759
- }
760
- return value;
761
- }
762
- };
763
- return wrap(r2, r2Handler);
764
- }
765
- function instrumentD1(d1, databaseName) {
766
- const name = databaseName || "d1";
767
- const d1Handler = {
768
- get(target, prop) {
769
- const value = Reflect.get(target, prop);
770
- if (prop === "prepare" && typeof value === "function") {
771
- return new Proxy(value, {
772
- apply: (fnTarget, _thisArg, args) => {
773
- const [query] = args;
774
- const tracer = trace.getTracer("autotel-edge");
775
- const prepared = Reflect.apply(fnTarget, target, args);
776
- const preparedHandler = {
777
- get(target2, prop2) {
778
- const value2 = Reflect.get(target2, prop2);
779
- if (prop2 === "first" || prop2 === "run" || prop2 === "all" || prop2 === "raw") {
780
- return new Proxy(value2, {
781
- apply: (fnTarget2, _thisArg2, args2) => {
782
- const activeConfig = getActiveConfig();
783
- const captureMode = activeConfig?.dataSafety?.captureDbStatement ?? "full";
784
- const statement = sanitizeStatement(query, captureMode);
785
- const attributes = {
786
- "db.system": "cloudflare-d1",
787
- "db.operation": prop2,
788
- "db.name": name
789
- };
790
- if (statement !== void 0) {
791
- attributes["db.statement"] = statement;
792
- }
793
- return tracer.startActiveSpan(
794
- `D1 ${name}: ${prop2}`,
795
- {
796
- kind: SpanKind.CLIENT,
797
- attributes
798
- },
799
- async (span) => {
800
- try {
801
- const result = await Reflect.apply(fnTarget2, target2, args2);
802
- if (prop2 === "all" && Array.isArray(result)) {
803
- span.setAttribute("db.result.rows_count", result.length);
804
- } else if (prop2 === "first" && result) {
805
- span.setAttribute("db.result.exists", true);
806
- }
807
- span.setStatus({ code: SpanStatusCode.OK });
808
- return result;
809
- } catch (error) {
810
- span.recordException(error);
811
- span.setStatus({
812
- code: SpanStatusCode.ERROR,
813
- message: error instanceof Error ? error.message : String(error)
814
- });
815
- throw error;
816
- } finally {
817
- span.end();
818
- }
819
- }
820
- );
821
- }
822
- });
823
- }
824
- return value2;
825
- }
826
- };
827
- return wrap(prepared, preparedHandler);
828
- }
829
- });
830
- }
831
- if (prop === "exec" && typeof value === "function") {
832
- return new Proxy(value, {
833
- apply: (fnTarget, _thisArg, args) => {
834
- const [query] = args;
835
- const tracer = trace.getTracer("autotel-edge");
836
- const activeConfig = getActiveConfig();
837
- const captureMode = activeConfig?.dataSafety?.captureDbStatement ?? "full";
838
- const statement = sanitizeStatement(query, captureMode);
839
- const attributes = {
840
- "db.system": "cloudflare-d1",
841
- "db.operation": "exec",
842
- "db.name": name
843
- };
844
- if (statement !== void 0) {
845
- attributes["db.statement"] = statement;
846
- }
847
- return tracer.startActiveSpan(
848
- `D1 ${name}: exec`,
849
- {
850
- kind: SpanKind.CLIENT,
851
- attributes
852
- },
853
- async (span) => {
854
- try {
855
- const result = await Reflect.apply(fnTarget, target, args);
856
- span.setAttribute("db.result.count", result.count);
857
- span.setStatus({ code: SpanStatusCode.OK });
858
- return result;
859
- } catch (error) {
860
- span.recordException(error);
861
- span.setStatus({
862
- code: SpanStatusCode.ERROR,
863
- message: error instanceof Error ? error.message : String(error)
864
- });
865
- throw error;
866
- } finally {
867
- span.end();
868
- }
869
- }
870
- );
871
- }
872
- });
873
- }
874
- return value;
875
- }
876
- };
877
- return wrap(d1, d1Handler);
878
- }
879
- function instrumentServiceBinding(fetcher, serviceName) {
880
- const name = serviceName || "service";
881
- const fetcherHandler = {
882
- get(target, prop) {
883
- if (prop === "fetch" && typeof target.fetch === "function") {
884
- const tracedFetch = (...args) => {
885
- const [input, init] = args;
886
- const request = new Request(input, init);
887
- const tracer = trace.getTracer("autotel-edge");
888
- return tracer.startActiveSpan(
889
- `Service ${name}: ${request.method}`,
890
- {
891
- kind: SpanKind.CLIENT,
892
- attributes: {
893
- "rpc.system": "cloudflare-service-binding",
894
- "rpc.service": name,
895
- "http.request.method": request.method,
896
- "url.full": request.url
897
- }
898
- },
899
- async (span) => {
900
- try {
901
- const response = await target.fetch(input, init);
902
- span.setAttribute("http.response.status_code", response.status);
903
- span.setStatus({ code: SpanStatusCode.OK });
904
- return response;
905
- } catch (error) {
906
- span.recordException(error);
907
- span.setStatus({
908
- code: SpanStatusCode.ERROR,
909
- message: error instanceof Error ? error.message : String(error)
910
- });
911
- throw error;
912
- } finally {
913
- span.end();
914
- }
915
- }
916
- );
917
- };
918
- return tracedFetch;
919
- }
920
- const value = Reflect.get(target, prop);
921
- if (typeof value === "function") {
922
- return value.bind(target);
923
- }
924
- return value;
925
- }
926
- };
927
- return wrap(fetcher, fetcherHandler);
928
- }
929
- var hasMethod = (obj, m) => typeof obj?.[m] === "function";
930
- var hasExactMethods = (obj, methods) => methods.every((m) => hasMethod(obj, m));
931
- var envCache = /* @__PURE__ */ new WeakMap();
932
- function instrumentBindings(env) {
933
- const cached = envCache.get(env);
934
- if (cached) return cached;
935
- const instrumented = {};
936
- for (const [key, value] of Object.entries(env)) {
937
- if (!value || typeof value !== "object") {
938
- instrumented[key] = value;
939
- continue;
940
- }
941
- if (isWrapped(value)) {
942
- instrumented[key] = value;
943
- continue;
944
- }
945
- if (hasExactMethods(value, ["get", "put", "delete", "list", "head"])) {
946
- instrumented[key] = instrumentR2(value, key);
947
- continue;
948
- }
949
- if (hasExactMethods(value, ["get", "put", "delete", "list"]) && !("head" in value)) {
950
- instrumented[key] = instrumentKV(value, key);
951
- continue;
952
- }
953
- if (hasExactMethods(value, ["prepare", "exec"])) {
954
- instrumented[key] = instrumentD1(value, key);
955
- continue;
956
- }
957
- if (hasExactMethods(value, ["query", "insert", "upsert", "describe"])) {
958
- instrumented[key] = instrumentVectorize(value, key);
959
- continue;
960
- }
961
- if (hasMethod(value, "run") && ("gateway" in value || "models" in value)) {
962
- instrumented[key] = instrumentAI(value, key);
963
- continue;
964
- }
965
- if (hasMethod(value, "connect") && "connectionString" in value && "host" in value) {
966
- instrumented[key] = instrumentHyperdrive(value, key);
967
- continue;
968
- }
969
- if (hasExactMethods(value, ["send", "sendBatch"]) && !("get" in value)) {
970
- instrumented[key] = instrumentQueueProducer(value, key);
971
- continue;
972
- }
973
- if (hasMethod(value, "writeDataPoint")) {
974
- instrumented[key] = instrumentAnalyticsEngine(value, key);
975
- continue;
976
- }
977
- if (hasExactMethods(value, ["info", "input"])) {
978
- instrumented[key] = instrumentImages(value, key);
979
- continue;
980
- }
981
- if (hasMethod(value, "fetch")) {
982
- instrumented[key] = instrumentServiceBinding(value, key);
983
- continue;
984
- }
985
- instrumented[key] = value;
986
- }
987
- envCache.set(env, instrumented);
988
- return instrumented;
989
- }
990
- function instrumentRateLimiter(limiter, bindingName) {
991
- const name = bindingName || "rate-limiter";
992
- const handler = {
993
- get(target, prop) {
994
- const value = Reflect.get(target, prop);
995
- if (prop === "limit" && typeof value === "function") {
996
- return new Proxy(value, {
997
- apply: (fnTarget, _thisArg, args) => {
998
- const [options] = args;
999
- const tracer = trace.getTracer("autotel-edge");
1000
- return tracer.startActiveSpan(
1001
- `RateLimiter ${name}: limit`,
1002
- {
1003
- kind: SpanKind.CLIENT,
1004
- attributes: {
1005
- "rate_limiter.system": "cloudflare-rate-limiter",
1006
- "rate_limiter.key": options?.key
1007
- }
1008
- },
1009
- async (span) => {
1010
- try {
1011
- const result = await Reflect.apply(fnTarget, target, args);
1012
- setAttr(span, "rate_limiter.success", result?.success);
1013
- span.setStatus({ code: SpanStatusCode.OK });
1014
- return result;
1015
- } catch (error) {
1016
- span.recordException(error);
1017
- span.setStatus({
1018
- code: SpanStatusCode.ERROR,
1019
- message: error instanceof Error ? error.message : String(error)
1020
- });
1021
- throw error;
1022
- } finally {
1023
- span.end();
1024
- }
1025
- }
1026
- );
1027
- }
1028
- });
1029
- }
1030
- return value;
1031
- }
1032
- };
1033
- return wrap(limiter, handler);
1034
- }
1035
- function instrumentBrowserRendering(browser, bindingName) {
1036
- const name = bindingName || "browser";
1037
- const handler = {
1038
- get(target, prop) {
1039
- const value = Reflect.get(target, prop);
1040
- if (prop === "fetch" && typeof value === "function") {
1041
- return new Proxy(value, {
1042
- apply: (fnTarget, _thisArg, args) => {
1043
- const [input] = args;
1044
- const url = typeof input === "string" ? input : input instanceof URL ? input.toString() : input.url;
1045
- const tracer = trace.getTracer("autotel-edge");
1046
- return tracer.startActiveSpan(
1047
- `BrowserRendering ${name}: fetch`,
1048
- {
1049
- kind: SpanKind.CLIENT,
1050
- attributes: {
1051
- "browser.system": "cloudflare-browser-rendering",
1052
- "url.full": url
1053
- }
1054
- },
1055
- async (span) => {
1056
- try {
1057
- const result = await Reflect.apply(fnTarget, target, args);
1058
- setAttr(span, "http.response.status_code", result?.status);
1059
- span.setStatus({ code: SpanStatusCode.OK });
1060
- return result;
1061
- } catch (error) {
1062
- span.recordException(error);
1063
- span.setStatus({
1064
- code: SpanStatusCode.ERROR,
1065
- message: error instanceof Error ? error.message : String(error)
1066
- });
1067
- throw error;
1068
- } finally {
1069
- span.end();
1070
- }
1071
- }
1072
- );
1073
- }
1074
- });
1075
- }
1076
- return value;
1077
- }
1078
- };
1079
- return wrap(browser, handler);
1080
- }
1081
-
1082
- export { instrumentAI, instrumentAnalyticsEngine, instrumentBindings, instrumentBrowserRendering, instrumentD1, instrumentHyperdrive, instrumentImages, instrumentKV, instrumentQueueProducer, instrumentR2, instrumentRateLimiter, instrumentServiceBinding, instrumentVectorize };
1083
- //# sourceMappingURL=chunk-KAUHT25H.js.map
1084
- //# sourceMappingURL=chunk-KAUHT25H.js.map