@sentry/cloudflare 10.53.1 → 10.55.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 (172) hide show
  1. package/build/cjs/async.js +4 -30
  2. package/build/cjs/async.js.map +1 -1
  3. package/build/cjs/client.js +31 -58
  4. package/build/cjs/client.js.map +1 -1
  5. package/build/cjs/d1.js +26 -80
  6. package/build/cjs/d1.js.map +1 -1
  7. package/build/cjs/debug-build.js +0 -5
  8. package/build/cjs/debug-build.js.map +1 -1
  9. package/build/cjs/durableobject.js +44 -131
  10. package/build/cjs/durableobject.js.map +1 -1
  11. package/build/cjs/flush.js +53 -34
  12. package/build/cjs/flush.js.map +1 -1
  13. package/build/cjs/instrument.js +7 -48
  14. package/build/cjs/instrument.js.map +1 -1
  15. package/build/cjs/instrumentations/instrumentDurableObjectNamespace.js +9 -34
  16. package/build/cjs/instrumentations/instrumentDurableObjectNamespace.js.map +1 -1
  17. package/build/cjs/instrumentations/instrumentDurableObjectStorage.js +20 -54
  18. package/build/cjs/instrumentations/instrumentDurableObjectStorage.js.map +1 -1
  19. package/build/cjs/instrumentations/instrumentWorkerEntrypoint.js +12 -66
  20. package/build/cjs/instrumentations/instrumentWorkerEntrypoint.js.map +1 -1
  21. package/build/cjs/instrumentations/worker/instrumentEmail.js +21 -43
  22. package/build/cjs/instrumentations/worker/instrumentEmail.js.map +1 -1
  23. package/build/cjs/instrumentations/worker/instrumentEnv.js +12 -42
  24. package/build/cjs/instrumentations/worker/instrumentEnv.js.map +1 -1
  25. package/build/cjs/instrumentations/worker/instrumentFetch.js +20 -34
  26. package/build/cjs/instrumentations/worker/instrumentFetch.js.map +1 -1
  27. package/build/cjs/instrumentations/worker/instrumentFetcher.js +5 -19
  28. package/build/cjs/instrumentations/worker/instrumentFetcher.js.map +1 -1
  29. package/build/cjs/instrumentations/worker/instrumentQueue.js +30 -62
  30. package/build/cjs/instrumentations/worker/instrumentQueue.js.map +1 -1
  31. package/build/cjs/instrumentations/worker/instrumentQueueProducer.js +31 -57
  32. package/build/cjs/instrumentations/worker/instrumentQueueProducer.js.map +1 -1
  33. package/build/cjs/instrumentations/worker/instrumentScheduled.js +25 -54
  34. package/build/cjs/instrumentations/worker/instrumentScheduled.js.map +1 -1
  35. package/build/cjs/instrumentations/worker/instrumentTail.js +16 -43
  36. package/build/cjs/instrumentations/worker/instrumentTail.js.map +1 -1
  37. package/build/cjs/integrations/fetch.js +24 -56
  38. package/build/cjs/integrations/fetch.js.map +1 -1
  39. package/build/cjs/integrations/hono.js +7 -38
  40. package/build/cjs/integrations/hono.js.map +1 -1
  41. package/build/cjs/integrations/httpServer.js +6 -39
  42. package/build/cjs/integrations/httpServer.js.map +1 -1
  43. package/build/cjs/integrations/tracing/vercelai.js +3 -31
  44. package/build/cjs/integrations/tracing/vercelai.js.map +1 -1
  45. package/build/cjs/opentelemetry/tracer.js +17 -45
  46. package/build/cjs/opentelemetry/tracer.js.map +1 -1
  47. package/build/cjs/options.js +10 -46
  48. package/build/cjs/options.js.map +1 -1
  49. package/build/cjs/pages-plugin.js +9 -42
  50. package/build/cjs/pages-plugin.js.map +1 -1
  51. package/build/cjs/request.js +22 -68
  52. package/build/cjs/request.js.map +1 -1
  53. package/build/cjs/scope-utils.js +4 -15
  54. package/build/cjs/scope-utils.js.map +1 -1
  55. package/build/cjs/sdk.js +8 -25
  56. package/build/cjs/sdk.js.map +1 -1
  57. package/build/cjs/transport.js +14 -48
  58. package/build/cjs/transport.js.map +1 -1
  59. package/build/cjs/utils/instrumentContext.js +16 -52
  60. package/build/cjs/utils/instrumentContext.js.map +1 -1
  61. package/build/cjs/utils/isBinding.js +3 -23
  62. package/build/cjs/utils/isBinding.js.map +1 -1
  63. package/build/cjs/utils/isCloudflareClass.js +2 -8
  64. package/build/cjs/utils/isCloudflareClass.js.map +1 -1
  65. package/build/cjs/utils/rpcMeta.js +8 -32
  66. package/build/cjs/utils/rpcMeta.js.map +1 -1
  67. package/build/cjs/utils/rpcOptions.js +9 -32
  68. package/build/cjs/utils/rpcOptions.js.map +1 -1
  69. package/build/cjs/utils/streaming.js +3 -29
  70. package/build/cjs/utils/streaming.js.map +1 -1
  71. package/build/cjs/utils/traceLinks.js +8 -33
  72. package/build/cjs/utils/traceLinks.js.map +1 -1
  73. package/build/cjs/vendor/stacktrace.js +6 -27
  74. package/build/cjs/vendor/stacktrace.js.map +1 -1
  75. package/build/cjs/withSentry.js +16 -47
  76. package/build/cjs/withSentry.js.map +1 -1
  77. package/build/cjs/workflows.js +40 -100
  78. package/build/cjs/workflows.js.map +1 -1
  79. package/build/cjs/wrapMethodWithSentry.js +110 -167
  80. package/build/cjs/wrapMethodWithSentry.js.map +1 -1
  81. package/build/esm/async.js +4 -30
  82. package/build/esm/async.js.map +1 -1
  83. package/build/esm/client.js +31 -58
  84. package/build/esm/client.js.map +1 -1
  85. package/build/esm/d1.js +26 -80
  86. package/build/esm/d1.js.map +1 -1
  87. package/build/esm/debug-build.js +0 -5
  88. package/build/esm/debug-build.js.map +1 -1
  89. package/build/esm/durableobject.js +44 -131
  90. package/build/esm/durableobject.js.map +1 -1
  91. package/build/esm/flush.js +53 -35
  92. package/build/esm/flush.js.map +1 -1
  93. package/build/esm/instrument.js +7 -48
  94. package/build/esm/instrument.js.map +1 -1
  95. package/build/esm/instrumentations/instrumentDurableObjectNamespace.js +9 -34
  96. package/build/esm/instrumentations/instrumentDurableObjectNamespace.js.map +1 -1
  97. package/build/esm/instrumentations/instrumentDurableObjectStorage.js +20 -54
  98. package/build/esm/instrumentations/instrumentDurableObjectStorage.js.map +1 -1
  99. package/build/esm/instrumentations/instrumentWorkerEntrypoint.js +12 -66
  100. package/build/esm/instrumentations/instrumentWorkerEntrypoint.js.map +1 -1
  101. package/build/esm/instrumentations/worker/instrumentEmail.js +21 -43
  102. package/build/esm/instrumentations/worker/instrumentEmail.js.map +1 -1
  103. package/build/esm/instrumentations/worker/instrumentEnv.js +12 -42
  104. package/build/esm/instrumentations/worker/instrumentEnv.js.map +1 -1
  105. package/build/esm/instrumentations/worker/instrumentFetch.js +20 -34
  106. package/build/esm/instrumentations/worker/instrumentFetch.js.map +1 -1
  107. package/build/esm/instrumentations/worker/instrumentFetcher.js +5 -19
  108. package/build/esm/instrumentations/worker/instrumentFetcher.js.map +1 -1
  109. package/build/esm/instrumentations/worker/instrumentQueue.js +30 -62
  110. package/build/esm/instrumentations/worker/instrumentQueue.js.map +1 -1
  111. package/build/esm/instrumentations/worker/instrumentQueueProducer.js +31 -57
  112. package/build/esm/instrumentations/worker/instrumentQueueProducer.js.map +1 -1
  113. package/build/esm/instrumentations/worker/instrumentScheduled.js +25 -54
  114. package/build/esm/instrumentations/worker/instrumentScheduled.js.map +1 -1
  115. package/build/esm/instrumentations/worker/instrumentTail.js +16 -43
  116. package/build/esm/instrumentations/worker/instrumentTail.js.map +1 -1
  117. package/build/esm/integrations/fetch.js +24 -56
  118. package/build/esm/integrations/fetch.js.map +1 -1
  119. package/build/esm/integrations/hono.js +7 -38
  120. package/build/esm/integrations/hono.js.map +1 -1
  121. package/build/esm/integrations/httpServer.js +6 -39
  122. package/build/esm/integrations/httpServer.js.map +1 -1
  123. package/build/esm/integrations/tracing/vercelai.js +3 -31
  124. package/build/esm/integrations/tracing/vercelai.js.map +1 -1
  125. package/build/esm/opentelemetry/tracer.js +17 -45
  126. package/build/esm/opentelemetry/tracer.js.map +1 -1
  127. package/build/esm/options.js +10 -46
  128. package/build/esm/options.js.map +1 -1
  129. package/build/esm/package.json +1 -1
  130. package/build/esm/pages-plugin.js +9 -42
  131. package/build/esm/pages-plugin.js.map +1 -1
  132. package/build/esm/request.js +23 -69
  133. package/build/esm/request.js.map +1 -1
  134. package/build/esm/scope-utils.js +4 -15
  135. package/build/esm/scope-utils.js.map +1 -1
  136. package/build/esm/sdk.js +8 -25
  137. package/build/esm/sdk.js.map +1 -1
  138. package/build/esm/transport.js +14 -48
  139. package/build/esm/transport.js.map +1 -1
  140. package/build/esm/utils/instrumentContext.js +16 -52
  141. package/build/esm/utils/instrumentContext.js.map +1 -1
  142. package/build/esm/utils/isBinding.js +3 -23
  143. package/build/esm/utils/isBinding.js.map +1 -1
  144. package/build/esm/utils/isCloudflareClass.js +2 -8
  145. package/build/esm/utils/isCloudflareClass.js.map +1 -1
  146. package/build/esm/utils/rpcMeta.js +8 -32
  147. package/build/esm/utils/rpcMeta.js.map +1 -1
  148. package/build/esm/utils/rpcOptions.js +9 -32
  149. package/build/esm/utils/rpcOptions.js.map +1 -1
  150. package/build/esm/utils/streaming.js +3 -29
  151. package/build/esm/utils/streaming.js.map +1 -1
  152. package/build/esm/utils/traceLinks.js +8 -33
  153. package/build/esm/utils/traceLinks.js.map +1 -1
  154. package/build/esm/vendor/stacktrace.js +6 -27
  155. package/build/esm/vendor/stacktrace.js.map +1 -1
  156. package/build/esm/withSentry.js +16 -47
  157. package/build/esm/withSentry.js.map +1 -1
  158. package/build/esm/workflows.js +40 -100
  159. package/build/esm/workflows.js.map +1 -1
  160. package/build/esm/wrapMethodWithSentry.js +110 -167
  161. package/build/esm/wrapMethodWithSentry.js.map +1 -1
  162. package/build/types/client.d.ts.map +1 -1
  163. package/build/types/flush.d.ts +15 -0
  164. package/build/types/flush.d.ts.map +1 -1
  165. package/build/types/instrumentations/worker/instrumentFetch.d.ts.map +1 -1
  166. package/build/types/integrations/hono.d.ts +3 -0
  167. package/build/types/integrations/hono.d.ts.map +1 -1
  168. package/build/types/pages-plugin.d.ts.map +1 -1
  169. package/build/types/request.d.ts.map +1 -1
  170. package/build/types-ts3.8/flush.d.ts +15 -0
  171. package/build/types-ts3.8/integrations/hono.d.ts +3 -0
  172. package/package.json +2 -2
@@ -9,94 +9,65 @@ const sdk = require('../../sdk.js');
9
9
  const instrumentContext = require('../../utils/instrumentContext.js');
10
10
  const instrumentEnv = require('./instrumentEnv.js');
11
11
 
12
- function wrapScheduledHandler(
13
- controller,
14
- options,
15
- context,
16
- fn,
17
- ) {
18
- return core.withIsolationScope(isolationScope => {
12
+ function wrapScheduledHandler(controller, options, context, fn) {
13
+ return core.withIsolationScope((isolationScope) => {
19
14
  const waitUntil = context.waitUntil.bind(context);
20
-
21
15
  const client = sdk.init({ ...options, ctx: context });
22
16
  isolationScope.setClient(client);
23
-
24
17
  scopeUtils.addCloudResourceContext(isolationScope);
25
-
26
18
  return core.startSpan(
27
19
  {
28
- op: 'faas.cron',
20
+ op: "faas.cron",
29
21
  name: `Scheduled Cron ${controller.cron}`,
30
22
  attributes: {
31
- 'faas.cron': controller.cron,
32
- 'faas.time': new Date(controller.scheduledTime).toISOString(),
33
- 'faas.trigger': 'timer',
34
- [core.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.faas.cloudflare.scheduled',
35
- [core.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'task',
36
- },
23
+ "faas.cron": controller.cron,
24
+ "faas.time": new Date(controller.scheduledTime).toISOString(),
25
+ "faas.trigger": "timer",
26
+ [core.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.faas.cloudflare.scheduled",
27
+ [core.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "task"
28
+ }
37
29
  },
38
30
  async () => {
39
31
  try {
40
32
  return await fn();
41
33
  } catch (e) {
42
- core.captureException(e, { mechanism: { handled: false, type: 'auto.faas.cloudflare.scheduled' } });
34
+ core.captureException(e, { mechanism: { handled: false, type: "auto.faas.cloudflare.scheduled" } });
43
35
  throw e;
44
36
  } finally {
45
37
  waitUntil(flush.flushAndDispose(client));
46
38
  }
47
- },
39
+ }
48
40
  );
49
41
  });
50
42
  }
51
-
52
- /**
53
- * Instruments a scheduled handler for ExportedHandler (env/ctx come from args).
54
- */
55
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
56
- function instrumentExportedHandlerScheduled(
57
- handler,
58
- optionsCallback,
59
- ) {
60
- if (!('scheduled' in handler) || typeof handler.scheduled !== 'function') {
43
+ function instrumentExportedHandlerScheduled(handler, optionsCallback) {
44
+ if (!("scheduled" in handler) || typeof handler.scheduled !== "function") {
61
45
  return;
62
46
  }
63
-
64
47
  handler.scheduled = instrument.ensureInstrumented(
65
48
  handler.scheduled,
66
- original =>
67
- new Proxy(original, {
68
- apply(target, thisArg, args) {
69
- const [controller, env, ctx] = args;
70
- const context = instrumentContext.instrumentContext(ctx);
71
- const options$1 = options.getFinalOptions(optionsCallback(env), env);
72
- args[1] = instrumentEnv.instrumentEnv(env, options$1);
73
- args[2] = context;
74
-
75
- return wrapScheduledHandler(controller, options$1, context, () => target.apply(thisArg, args));
76
- },
77
- }),
49
+ (original) => new Proxy(original, {
50
+ apply(target, thisArg, args) {
51
+ const [controller, env, ctx] = args;
52
+ const context = instrumentContext.instrumentContext(ctx);
53
+ const options$1 = options.getFinalOptions(optionsCallback(env), env);
54
+ args[1] = instrumentEnv.instrumentEnv(env, options$1);
55
+ args[2] = context;
56
+ return wrapScheduledHandler(controller, options$1, context, () => target.apply(thisArg, args));
57
+ }
58
+ })
78
59
  );
79
60
  }
80
-
81
- /**
82
- * Instruments a scheduled method for WorkerEntrypoint (options/context already available).
83
- */
84
- function instrumentWorkerEntrypointScheduled(
85
- instance,
86
- options,
87
- context,
88
- ) {
61
+ function instrumentWorkerEntrypointScheduled(instance, options, context) {
89
62
  if (!instance.scheduled) {
90
63
  return;
91
64
  }
92
-
93
65
  const original = instance.scheduled.bind(instance);
94
66
  instance.scheduled = new Proxy(original, {
95
67
  apply(target, thisArg, args) {
96
68
  const [controller] = args;
97
-
98
69
  return wrapScheduledHandler(controller, options, context, () => Reflect.apply(target, thisArg, args));
99
- },
70
+ }
100
71
  });
101
72
  }
102
73
 
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentScheduled.js","sources":["../../../../src/instrumentations/worker/instrumentScheduled.ts"],"sourcesContent":["import type { ExportedHandler, ScheduledController } from '@cloudflare/workers-types';\nimport type { env as cloudflareEnv, WorkerEntrypoint } from 'cloudflare:workers';\nimport {\n captureException,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n startSpan,\n withIsolationScope,\n} from '@sentry/core';\nimport type { CloudflareOptions } from '../../client';\nimport { flushAndDispose } from '../../flush';\nimport { ensureInstrumented } from '../../instrument';\nimport { getFinalOptions } from '../../options';\nimport { addCloudResourceContext } from '../../scope-utils';\nimport { init } from '../../sdk';\nimport { instrumentContext } from '../../utils/instrumentContext';\nimport { instrumentEnv } from './instrumentEnv';\n\nfunction wrapScheduledHandler(\n controller: ScheduledController,\n options: CloudflareOptions,\n context: ExecutionContext,\n fn: () => unknown,\n): unknown {\n return withIsolationScope(isolationScope => {\n const waitUntil = context.waitUntil.bind(context);\n\n const client = init({ ...options, ctx: context });\n isolationScope.setClient(client);\n\n addCloudResourceContext(isolationScope);\n\n return startSpan(\n {\n op: 'faas.cron',\n name: `Scheduled Cron ${controller.cron}`,\n attributes: {\n 'faas.cron': controller.cron,\n 'faas.time': new Date(controller.scheduledTime).toISOString(),\n 'faas.trigger': 'timer',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.faas.cloudflare.scheduled',\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'task',\n },\n },\n async () => {\n try {\n return await fn();\n } catch (e) {\n captureException(e, { mechanism: { handled: false, type: 'auto.faas.cloudflare.scheduled' } });\n throw e;\n } finally {\n waitUntil(flushAndDispose(client));\n }\n },\n );\n });\n}\n\n/**\n * Instruments a scheduled handler for ExportedHandler (env/ctx come from args).\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function instrumentExportedHandlerScheduled<T extends ExportedHandler<any, any, any>>(\n handler: T,\n optionsCallback: (env: typeof cloudflareEnv) => CloudflareOptions | undefined,\n): void {\n if (!('scheduled' in handler) || typeof handler.scheduled !== 'function') {\n return;\n }\n\n handler.scheduled = ensureInstrumented(\n handler.scheduled,\n original =>\n new Proxy(original, {\n apply(target, thisArg, args: Parameters<NonNullable<T['scheduled']>>) {\n const [controller, env, ctx] = args;\n const context = instrumentContext(ctx);\n const options = getFinalOptions(optionsCallback(env), env);\n args[1] = instrumentEnv(env, options);\n args[2] = context;\n\n return wrapScheduledHandler(controller, options, context, () => target.apply(thisArg, args));\n },\n }),\n );\n}\n\n/**\n * Instruments a scheduled method for WorkerEntrypoint (options/context already available).\n */\nexport function instrumentWorkerEntrypointScheduled<T extends WorkerEntrypoint>(\n instance: T,\n options: CloudflareOptions,\n context: ExecutionContext,\n): void {\n if (!instance.scheduled) {\n return;\n }\n\n const original = instance.scheduled.bind(instance);\n instance.scheduled = new Proxy(original, {\n apply(target, thisArg, args: [ScheduledController]) {\n const [controller] = args;\n\n return wrapScheduledHandler(controller, options, context, () => Reflect.apply(target, thisArg, args));\n },\n });\n}\n"],"names":["withIsolationScope","init","addCloudResourceContext","startSpan","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","captureException","flushAndDispose","ensureInstrumented","instrumentContext","options","getFinalOptions","instrumentEnv"],"mappings":"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"}
1
+ {"version":3,"file":"instrumentScheduled.js","sources":["../../../../src/instrumentations/worker/instrumentScheduled.ts"],"sourcesContent":["import type { ExportedHandler, ScheduledController } from '@cloudflare/workers-types';\nimport type { env as cloudflareEnv, WorkerEntrypoint } from 'cloudflare:workers';\nimport {\n captureException,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n SEMANTIC_ATTRIBUTE_SENTRY_SOURCE,\n startSpan,\n withIsolationScope,\n} from '@sentry/core';\nimport type { CloudflareOptions } from '../../client';\nimport { flushAndDispose } from '../../flush';\nimport { ensureInstrumented } from '../../instrument';\nimport { getFinalOptions } from '../../options';\nimport { addCloudResourceContext } from '../../scope-utils';\nimport { init } from '../../sdk';\nimport { instrumentContext } from '../../utils/instrumentContext';\nimport { instrumentEnv } from './instrumentEnv';\n\nfunction wrapScheduledHandler(\n controller: ScheduledController,\n options: CloudflareOptions,\n context: ExecutionContext,\n fn: () => unknown,\n): unknown {\n return withIsolationScope(isolationScope => {\n const waitUntil = context.waitUntil.bind(context);\n\n const client = init({ ...options, ctx: context });\n isolationScope.setClient(client);\n\n addCloudResourceContext(isolationScope);\n\n return startSpan(\n {\n op: 'faas.cron',\n name: `Scheduled Cron ${controller.cron}`,\n attributes: {\n 'faas.cron': controller.cron,\n 'faas.time': new Date(controller.scheduledTime).toISOString(),\n 'faas.trigger': 'timer',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.faas.cloudflare.scheduled',\n [SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'task',\n },\n },\n async () => {\n try {\n return await fn();\n } catch (e) {\n captureException(e, { mechanism: { handled: false, type: 'auto.faas.cloudflare.scheduled' } });\n throw e;\n } finally {\n waitUntil(flushAndDispose(client));\n }\n },\n );\n });\n}\n\n/**\n * Instruments a scheduled handler for ExportedHandler (env/ctx come from args).\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function instrumentExportedHandlerScheduled<T extends ExportedHandler<any, any, any>>(\n handler: T,\n optionsCallback: (env: typeof cloudflareEnv) => CloudflareOptions | undefined,\n): void {\n if (!('scheduled' in handler) || typeof handler.scheduled !== 'function') {\n return;\n }\n\n handler.scheduled = ensureInstrumented(\n handler.scheduled,\n original =>\n new Proxy(original, {\n apply(target, thisArg, args: Parameters<NonNullable<T['scheduled']>>) {\n const [controller, env, ctx] = args;\n const context = instrumentContext(ctx);\n const options = getFinalOptions(optionsCallback(env), env);\n args[1] = instrumentEnv(env, options);\n args[2] = context;\n\n return wrapScheduledHandler(controller, options, context, () => target.apply(thisArg, args));\n },\n }),\n );\n}\n\n/**\n * Instruments a scheduled method for WorkerEntrypoint (options/context already available).\n */\nexport function instrumentWorkerEntrypointScheduled<T extends WorkerEntrypoint>(\n instance: T,\n options: CloudflareOptions,\n context: ExecutionContext,\n): void {\n if (!instance.scheduled) {\n return;\n }\n\n const original = instance.scheduled.bind(instance);\n instance.scheduled = new Proxy(original, {\n apply(target, thisArg, args: [ScheduledController]) {\n const [controller] = args;\n\n return wrapScheduledHandler(controller, options, context, () => Reflect.apply(target, thisArg, args));\n },\n });\n}\n"],"names":["withIsolationScope","init","addCloudResourceContext","startSpan","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","captureException","flushAndDispose","ensureInstrumented","instrumentContext","options","getFinalOptions","instrumentEnv"],"mappings":"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"}
@@ -9,76 +9,49 @@ const sdk = require('../../sdk.js');
9
9
  const instrumentContext = require('../../utils/instrumentContext.js');
10
10
  const instrumentEnv = require('./instrumentEnv.js');
11
11
 
12
- /**
13
- * Core tail handler logic - wraps execution with Sentry instrumentation.
14
- * Note: tail handlers don't create spans, just error capture.
15
- */
16
12
  function wrapTailHandler(options, context, fn) {
17
- return core.withIsolationScope(async isolationScope => {
13
+ return core.withIsolationScope(async (isolationScope) => {
18
14
  const waitUntil = context.waitUntil.bind(context);
19
-
20
15
  const client = sdk.init({ ...options, ctx: context });
21
16
  isolationScope.setClient(client);
22
-
23
17
  scopeUtils.addCloudResourceContext(isolationScope);
24
-
25
18
  try {
26
19
  return await fn();
27
20
  } catch (e) {
28
- core.captureException(e, { mechanism: { handled: false, type: 'auto.faas.cloudflare.tail' } });
21
+ core.captureException(e, { mechanism: { handled: false, type: "auto.faas.cloudflare.tail" } });
29
22
  throw e;
30
23
  } finally {
31
24
  waitUntil(flush.flushAndDispose(client));
32
25
  }
33
26
  });
34
27
  }
35
-
36
- /**
37
- * Instruments a tail handler for ExportedHandler (env/ctx come from args).
38
- */
39
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
40
- function instrumentExportedHandlerTail(
41
- handler,
42
- optionsCallback,
43
- ) {
44
- if (!('tail' in handler) || typeof handler.tail !== 'function') {
28
+ function instrumentExportedHandlerTail(handler, optionsCallback) {
29
+ if (!("tail" in handler) || typeof handler.tail !== "function") {
45
30
  return;
46
31
  }
47
-
48
32
  handler.tail = instrument.ensureInstrumented(
49
33
  handler.tail,
50
- original =>
51
- new Proxy(original, {
52
- apply(target, thisArg, args) {
53
- const [, env, ctx] = args;
54
- const context = instrumentContext.instrumentContext(ctx);
55
- const options$1 = options.getFinalOptions(optionsCallback(env), env);
56
- args[1] = instrumentEnv.instrumentEnv(env, options$1);
57
- args[2] = context;
58
-
59
- return wrapTailHandler(options$1, context, () => target.apply(thisArg, args));
60
- },
61
- }),
34
+ (original) => new Proxy(original, {
35
+ apply(target, thisArg, args) {
36
+ const [, env, ctx] = args;
37
+ const context = instrumentContext.instrumentContext(ctx);
38
+ const options$1 = options.getFinalOptions(optionsCallback(env), env);
39
+ args[1] = instrumentEnv.instrumentEnv(env, options$1);
40
+ args[2] = context;
41
+ return wrapTailHandler(options$1, context, () => target.apply(thisArg, args));
42
+ }
43
+ })
62
44
  );
63
45
  }
64
-
65
- /**
66
- * Instruments a tail method for WorkerEntrypoint (options/context already available).
67
- */
68
- function instrumentWorkerEntrypointTail(
69
- instance,
70
- options,
71
- context,
72
- ) {
46
+ function instrumentWorkerEntrypointTail(instance, options, context) {
73
47
  if (!instance.tail) {
74
48
  return;
75
49
  }
76
-
77
50
  const original = instance.tail.bind(instance);
78
51
  instance.tail = new Proxy(original, {
79
52
  apply(target, thisArg, args) {
80
53
  return wrapTailHandler(options, context, () => Reflect.apply(target, thisArg, args));
81
- },
54
+ }
82
55
  });
83
56
  }
84
57
 
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentTail.js","sources":["../../../../src/instrumentations/worker/instrumentTail.ts"],"sourcesContent":["import type { ExportedHandler, TraceItem } from '@cloudflare/workers-types';\nimport type { env as cloudflareEnv, WorkerEntrypoint } from 'cloudflare:workers';\nimport { captureException, withIsolationScope } from '@sentry/core';\nimport type { CloudflareOptions } from '../../client';\nimport { flushAndDispose } from '../../flush';\nimport { ensureInstrumented } from '../../instrument';\nimport { getFinalOptions } from '../../options';\nimport { addCloudResourceContext } from '../../scope-utils';\nimport { init } from '../../sdk';\nimport { instrumentContext } from '../../utils/instrumentContext';\nimport { instrumentEnv } from './instrumentEnv';\n\n/**\n * Core tail handler logic - wraps execution with Sentry instrumentation.\n * Note: tail handlers don't create spans, just error capture.\n */\nfunction wrapTailHandler(options: CloudflareOptions, context: ExecutionContext, fn: () => unknown): unknown {\n return withIsolationScope(async isolationScope => {\n const waitUntil = context.waitUntil.bind(context);\n\n const client = init({ ...options, ctx: context });\n isolationScope.setClient(client);\n\n addCloudResourceContext(isolationScope);\n\n try {\n return await fn();\n } catch (e) {\n captureException(e, { mechanism: { handled: false, type: 'auto.faas.cloudflare.tail' } });\n throw e;\n } finally {\n waitUntil(flushAndDispose(client));\n }\n });\n}\n\n/**\n * Instruments a tail handler for ExportedHandler (env/ctx come from args).\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function instrumentExportedHandlerTail<T extends ExportedHandler<any, any, any>>(\n handler: T,\n optionsCallback: (env: typeof cloudflareEnv) => CloudflareOptions | undefined,\n): void {\n if (!('tail' in handler) || typeof handler.tail !== 'function') {\n return;\n }\n\n handler.tail = ensureInstrumented(\n handler.tail,\n original =>\n new Proxy(original, {\n apply(target, thisArg, args: Parameters<NonNullable<T['tail']>>) {\n const [, env, ctx] = args;\n const context = instrumentContext(ctx);\n const options = getFinalOptions(optionsCallback(env), env);\n args[1] = instrumentEnv(env, options);\n args[2] = context;\n\n return wrapTailHandler(options, context, () => target.apply(thisArg, args));\n },\n }),\n );\n}\n\n/**\n * Instruments a tail method for WorkerEntrypoint (options/context already available).\n */\nexport function instrumentWorkerEntrypointTail<T extends WorkerEntrypoint>(\n instance: T,\n options: CloudflareOptions,\n context: ExecutionContext,\n): void {\n if (!instance.tail) {\n return;\n }\n\n const original = instance.tail.bind(instance);\n instance.tail = new Proxy(original, {\n apply(target, thisArg, args: [TraceItem[]]) {\n return wrapTailHandler(options, context, () => Reflect.apply(target, thisArg, args));\n },\n });\n}\n"],"names":["withIsolationScope","init","addCloudResourceContext","captureException","flushAndDispose","ensureInstrumented","instrumentContext","options","getFinalOptions","instrumentEnv"],"mappings":";;;;;;;;;;;AAYA;AACA;AACA;AACA;AACA,SAAS,eAAe,CAAC,OAAO,EAAqB,OAAO,EAAoB,EAAE,EAA0B;AAC5G,EAAE,OAAOA,uBAAkB,CAAC,MAAM,kBAAkB;AACpD,IAAI,MAAM,SAAA,GAAY,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC;;AAErD,IAAI,MAAM,MAAA,GAASC,QAAI,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,EAAE,OAAA,EAAS,CAAC;AACrD,IAAI,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC;;AAEpC,IAAIC,kCAAuB,CAAC,cAAc,CAAC;;AAE3C,IAAI,IAAI;AACR,MAAM,OAAO,MAAM,EAAE,EAAE;AACvB,IAAI,CAAA,CAAE,OAAO,CAAC,EAAE;AAChB,MAAMC,qBAAgB,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,2BAAA,EAA4B,EAAG,CAAC;AAC/F,MAAM,MAAM,CAAC;AACb,IAAI,UAAU;AACd,MAAM,SAAS,CAACC,qBAAe,CAAC,MAAM,CAAC,CAAC;AACxC,IAAI;AACJ,EAAE,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACO,SAAS,6BAA6B;AAC7C,EAAE,OAAO;AACT,EAAE,eAAe;AACjB,EAAQ;AACR,EAAE,IAAI,EAAE,UAAU,OAAO,CAAA,IAAK,OAAO,OAAO,CAAC,IAAA,KAAS,UAAU,EAAE;AAClE,IAAI;AACJ,EAAE;;AAEF,EAAE,OAAO,CAAC,IAAA,GAAOC,6BAAkB;AACnC,IAAI,OAAO,CAAC,IAAI;AAChB,IAAI,QAAA;AACJ,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE;AAC1B,QAAQ,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAsC;AACzE,UAAU,MAAM,GAAG,GAAG,EAAE,GAAG,CAAA,GAAI,IAAI;AACnC,UAAU,MAAM,OAAA,GAAUC,mCAAiB,CAAC,GAAG,CAAC;AAChD,UAAU,MAAMC,SAAA,GAAUC,uBAAe,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;AACpE,UAAU,IAAI,CAAC,CAAC,CAAA,GAAIC,2BAAa,CAAC,GAAG,EAAEF,SAAO,CAAC;AAC/C,UAAU,IAAI,CAAC,CAAC,CAAA,GAAI,OAAO;;AAE3B,UAAU,OAAO,eAAe,CAACA,SAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACrF,QAAQ,CAAC;AACT,OAAO,CAAC;AACR,GAAG;AACH;;AAEA;AACA;AACA;AACO,SAAS,8BAA8B;AAC9C,EAAE,QAAQ;AACV,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAQ;AACR,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;AACtB,IAAI;AACJ,EAAE;;AAEF,EAAE,MAAM,QAAA,GAAW,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC;AAC/C,EAAE,QAAQ,CAAC,IAAA,GAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;AACtC,IAAI,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAiB;AAChD,MAAM,OAAO,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAC1F,IAAI,CAAC;AACL,GAAG,CAAC;AACJ;;;;;"}
1
+ {"version":3,"file":"instrumentTail.js","sources":["../../../../src/instrumentations/worker/instrumentTail.ts"],"sourcesContent":["import type { ExportedHandler, TraceItem } from '@cloudflare/workers-types';\nimport type { env as cloudflareEnv, WorkerEntrypoint } from 'cloudflare:workers';\nimport { captureException, withIsolationScope } from '@sentry/core';\nimport type { CloudflareOptions } from '../../client';\nimport { flushAndDispose } from '../../flush';\nimport { ensureInstrumented } from '../../instrument';\nimport { getFinalOptions } from '../../options';\nimport { addCloudResourceContext } from '../../scope-utils';\nimport { init } from '../../sdk';\nimport { instrumentContext } from '../../utils/instrumentContext';\nimport { instrumentEnv } from './instrumentEnv';\n\n/**\n * Core tail handler logic - wraps execution with Sentry instrumentation.\n * Note: tail handlers don't create spans, just error capture.\n */\nfunction wrapTailHandler(options: CloudflareOptions, context: ExecutionContext, fn: () => unknown): unknown {\n return withIsolationScope(async isolationScope => {\n const waitUntil = context.waitUntil.bind(context);\n\n const client = init({ ...options, ctx: context });\n isolationScope.setClient(client);\n\n addCloudResourceContext(isolationScope);\n\n try {\n return await fn();\n } catch (e) {\n captureException(e, { mechanism: { handled: false, type: 'auto.faas.cloudflare.tail' } });\n throw e;\n } finally {\n waitUntil(flushAndDispose(client));\n }\n });\n}\n\n/**\n * Instruments a tail handler for ExportedHandler (env/ctx come from args).\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function instrumentExportedHandlerTail<T extends ExportedHandler<any, any, any>>(\n handler: T,\n optionsCallback: (env: typeof cloudflareEnv) => CloudflareOptions | undefined,\n): void {\n if (!('tail' in handler) || typeof handler.tail !== 'function') {\n return;\n }\n\n handler.tail = ensureInstrumented(\n handler.tail,\n original =>\n new Proxy(original, {\n apply(target, thisArg, args: Parameters<NonNullable<T['tail']>>) {\n const [, env, ctx] = args;\n const context = instrumentContext(ctx);\n const options = getFinalOptions(optionsCallback(env), env);\n args[1] = instrumentEnv(env, options);\n args[2] = context;\n\n return wrapTailHandler(options, context, () => target.apply(thisArg, args));\n },\n }),\n );\n}\n\n/**\n * Instruments a tail method for WorkerEntrypoint (options/context already available).\n */\nexport function instrumentWorkerEntrypointTail<T extends WorkerEntrypoint>(\n instance: T,\n options: CloudflareOptions,\n context: ExecutionContext,\n): void {\n if (!instance.tail) {\n return;\n }\n\n const original = instance.tail.bind(instance);\n instance.tail = new Proxy(original, {\n apply(target, thisArg, args: [TraceItem[]]) {\n return wrapTailHandler(options, context, () => Reflect.apply(target, thisArg, args));\n },\n });\n}\n"],"names":["withIsolationScope","init","addCloudResourceContext","captureException","flushAndDispose","ensureInstrumented","instrumentContext","options","getFinalOptions","instrumentEnv"],"mappings":";;;;;;;;;;;AAgBA,SAAS,eAAA,CAAgB,OAAA,EAA4B,OAAA,EAA2B,EAAA,EAA4B;AAC1G,EAAA,OAAOA,uBAAA,CAAmB,OAAM,cAAA,KAAkB;AAChD,IAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,SAAA,CAAU,IAAA,CAAK,OAAO,CAAA;AAEhD,IAAA,MAAM,SAASC,QAAA,CAAK,EAAE,GAAG,OAAA,EAAS,GAAA,EAAK,SAAS,CAAA;AAChD,IAAA,cAAA,CAAe,UAAU,MAAM,CAAA;AAE/B,IAAAC,kCAAA,CAAwB,cAAc,CAAA;AAEtC,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,EAAA,EAAG;AAAA,IAClB,SAAS,CAAA,EAAG;AACV,MAAAC,qBAAA,CAAiB,CAAA,EAAG,EAAE,SAAA,EAAW,EAAE,SAAS,KAAA,EAAO,IAAA,EAAM,2BAAA,EAA4B,EAAG,CAAA;AACxF,MAAA,MAAM,CAAA;AAAA,IACR,CAAA,SAAE;AACA,MAAA,SAAA,CAAUC,qBAAA,CAAgB,MAAM,CAAC,CAAA;AAAA,IACnC;AAAA,EACF,CAAC,CAAA;AACH;AAMO,SAAS,6BAAA,CACd,SACA,eAAA,EACM;AACN,EAAA,IAAI,EAAE,MAAA,IAAU,OAAA,CAAA,IAAY,OAAO,OAAA,CAAQ,SAAS,UAAA,EAAY;AAC9D,IAAA;AAAA,EACF;AAEA,EAAA,OAAA,CAAQ,IAAA,GAAOC,6BAAA;AAAA,IACb,OAAA,CAAQ,IAAA;AAAA,IACR,CAAA,QAAA,KACE,IAAI,KAAA,CAAM,QAAA,EAAU;AAAA,MAClB,KAAA,CAAM,MAAA,EAAQ,OAAA,EAAS,IAAA,EAA0C;AAC/D,QAAA,MAAM,GAAG,GAAA,EAAK,GAAG,CAAA,GAAI,IAAA;AACrB,QAAA,MAAM,OAAA,GAAUC,oCAAkB,GAAG,CAAA;AACrC,QAAA,MAAMC,SAAA,GAAUC,uBAAA,CAAgB,eAAA,CAAgB,GAAG,GAAG,GAAG,CAAA;AACzD,QAAA,IAAA,CAAK,CAAC,CAAA,GAAIC,2BAAA,CAAc,GAAA,EAAKF,SAAO,CAAA;AACpC,QAAA,IAAA,CAAK,CAAC,CAAA,GAAI,OAAA;AAEV,QAAA,OAAO,eAAA,CAAgBA,WAAS,OAAA,EAAS,MAAM,OAAO,KAAA,CAAM,OAAA,EAAS,IAAI,CAAC,CAAA;AAAA,MAC5E;AAAA,KACD;AAAA,GACL;AACF;AAKO,SAAS,8BAAA,CACd,QAAA,EACA,OAAA,EACA,OAAA,EACM;AACN,EAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAClB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA;AAC5C,EAAA,QAAA,CAAS,IAAA,GAAO,IAAI,KAAA,CAAM,QAAA,EAAU;AAAA,IAClC,KAAA,CAAM,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAqB;AAC1C,MAAA,OAAO,eAAA,CAAgB,SAAS,OAAA,EAAS,MAAM,QAAQ,KAAA,CAAM,MAAA,EAAQ,OAAA,EAAS,IAAI,CAAC,CAAA;AAAA,IACrF;AAAA,GACD,CAAA;AACH;;;;;"}
@@ -2,78 +2,59 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
3
  const core = require('@sentry/core');
4
4
 
5
- const INTEGRATION_NAME = 'Fetch';
6
-
7
- const HAS_CLIENT_MAP = new WeakMap();
8
-
5
+ const INTEGRATION_NAME = "Fetch";
6
+ const HAS_CLIENT_MAP = /* @__PURE__ */ new WeakMap();
9
7
  const _fetchIntegration = ((options = {}) => {
10
- const breadcrumbs = options.breadcrumbs === undefined ? true : options.breadcrumbs;
8
+ const breadcrumbs = options.breadcrumbs === void 0 ? true : options.breadcrumbs;
11
9
  const shouldCreateSpanForRequest = options.shouldCreateSpanForRequest;
12
-
13
10
  const _createSpanUrlMap = new core.LRUMap(100);
14
11
  const _headersUrlMap = new core.LRUMap(100);
15
-
16
12
  const spans = {};
17
-
18
- /** Decides whether to attach trace data to the outgoing fetch request */
19
13
  function _shouldAttachTraceData(url) {
20
14
  const client = core.getClient();
21
-
22
15
  if (!client) {
23
16
  return false;
24
17
  }
25
-
26
18
  const clientOptions = client.getOptions();
27
-
28
- if (clientOptions.tracePropagationTargets === undefined) {
19
+ if (clientOptions.tracePropagationTargets === void 0) {
29
20
  return true;
30
21
  }
31
-
32
22
  const cachedDecision = _headersUrlMap.get(url);
33
- if (cachedDecision !== undefined) {
23
+ if (cachedDecision !== void 0) {
34
24
  return cachedDecision;
35
25
  }
36
-
37
26
  const decision = core.stringMatchesSomePattern(url, clientOptions.tracePropagationTargets);
38
27
  _headersUrlMap.set(url, decision);
39
28
  return decision;
40
29
  }
41
-
42
- /** Helper that wraps shouldCreateSpanForRequest option */
43
30
  function _shouldCreateSpan(url) {
44
- if (shouldCreateSpanForRequest === undefined) {
31
+ if (shouldCreateSpanForRequest === void 0) {
45
32
  return true;
46
33
  }
47
-
48
34
  const cachedDecision = _createSpanUrlMap.get(url);
49
- if (cachedDecision !== undefined) {
35
+ if (cachedDecision !== void 0) {
50
36
  return cachedDecision;
51
37
  }
52
-
53
38
  const decision = shouldCreateSpanForRequest(url);
54
39
  _createSpanUrlMap.set(url, decision);
55
40
  return decision;
56
41
  }
57
-
58
42
  return {
59
43
  name: INTEGRATION_NAME,
60
44
  setupOnce() {
61
- core.addFetchInstrumentationHandler(handlerData => {
45
+ core.addFetchInstrumentationHandler((handlerData) => {
62
46
  const client = core.getClient();
63
47
  const { propagateTraceparent } = client?.getOptions() || {};
64
48
  if (!client || !HAS_CLIENT_MAP.get(client)) {
65
49
  return;
66
50
  }
67
-
68
51
  if (core.isSentryRequestUrl(handlerData.fetchData.url, client)) {
69
52
  return;
70
53
  }
71
-
72
54
  core.instrumentFetchRequest(handlerData, _shouldCreateSpan, _shouldAttachTraceData, spans, {
73
- spanOrigin: 'auto.http.fetch',
74
- propagateTraceparent,
55
+ spanOrigin: "auto.http.fetch",
56
+ propagateTraceparent
75
57
  });
76
-
77
58
  if (breadcrumbs) {
78
59
  createBreadcrumb(handlerData);
79
60
  }
@@ -81,68 +62,55 @@ const _fetchIntegration = ((options = {}) => {
81
62
  },
82
63
  setup(client) {
83
64
  HAS_CLIENT_MAP.set(client, true);
84
- },
65
+ }
85
66
  };
86
- }) ;
87
-
88
- /**
89
- * Creates spans and attaches tracing headers to fetch requests.
90
- */
67
+ });
91
68
  const fetchIntegration = core.defineIntegration(_fetchIntegration);
92
-
93
69
  function createBreadcrumb(handlerData) {
94
70
  const { startTimestamp, endTimestamp } = handlerData;
95
-
96
- // We only capture complete fetch requests
97
71
  if (!endTimestamp) {
98
72
  return;
99
73
  }
100
-
101
74
  const breadcrumbData = {
102
75
  method: handlerData.fetchData.method,
103
- url: handlerData.fetchData.url,
76
+ url: handlerData.fetchData.url
104
77
  };
105
-
106
78
  if (handlerData.error) {
107
79
  const hint = {
108
80
  data: handlerData.error,
109
81
  input: handlerData.args,
110
82
  startTimestamp,
111
- endTimestamp,
83
+ endTimestamp
112
84
  };
113
-
114
85
  core.addBreadcrumb(
115
86
  {
116
- category: 'fetch',
87
+ category: "fetch",
117
88
  data: breadcrumbData,
118
- level: 'error',
119
- type: 'http',
89
+ level: "error",
90
+ type: "http"
120
91
  },
121
- hint,
92
+ hint
122
93
  );
123
94
  } else {
124
- const response = handlerData.response ;
125
-
95
+ const response = handlerData.response;
126
96
  breadcrumbData.request_body_size = handlerData.fetchData.request_body_size;
127
97
  breadcrumbData.response_body_size = handlerData.fetchData.response_body_size;
128
98
  breadcrumbData.status_code = response?.status;
129
-
130
99
  const hint = {
131
100
  input: handlerData.args,
132
101
  response,
133
102
  startTimestamp,
134
- endTimestamp,
103
+ endTimestamp
135
104
  };
136
105
  const level = core.getBreadcrumbLogLevelFromHttpStatusCode(breadcrumbData.status_code);
137
-
138
106
  core.addBreadcrumb(
139
107
  {
140
- category: 'fetch',
108
+ category: "fetch",
141
109
  data: breadcrumbData,
142
- type: 'http',
143
- level,
110
+ type: "http",
111
+ level
144
112
  },
145
- hint,
113
+ hint
146
114
  );
147
115
  }
148
116
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fetch.js","sources":["../../../src/integrations/fetch.ts"],"sourcesContent":["import type {\n Client,\n FetchBreadcrumbData,\n FetchBreadcrumbHint,\n HandlerDataFetch,\n IntegrationFn,\n Span,\n} from '@sentry/core';\nimport {\n addBreadcrumb,\n addFetchInstrumentationHandler,\n defineIntegration,\n getBreadcrumbLogLevelFromHttpStatusCode,\n getClient,\n instrumentFetchRequest,\n isSentryRequestUrl,\n LRUMap,\n stringMatchesSomePattern,\n} from '@sentry/core';\n\nconst INTEGRATION_NAME = 'Fetch';\n\nconst HAS_CLIENT_MAP = new WeakMap<Client, boolean>();\n\nexport interface Options {\n /**\n * Whether breadcrumbs should be recorded for requests\n * Defaults to true\n */\n breadcrumbs: boolean;\n\n /**\n * Function determining whether or not to create spans to track outgoing requests to the given URL.\n * By default, spans will be created for all outgoing requests.\n */\n shouldCreateSpanForRequest?: (url: string) => boolean;\n}\n\nconst _fetchIntegration = ((options: Partial<Options> = {}) => {\n const breadcrumbs = options.breadcrumbs === undefined ? true : options.breadcrumbs;\n const shouldCreateSpanForRequest = options.shouldCreateSpanForRequest;\n\n const _createSpanUrlMap = new LRUMap<string, boolean>(100);\n const _headersUrlMap = new LRUMap<string, boolean>(100);\n\n const spans: Record<string, Span> = {};\n\n /** Decides whether to attach trace data to the outgoing fetch request */\n function _shouldAttachTraceData(url: string): boolean {\n const client = getClient();\n\n if (!client) {\n return false;\n }\n\n const clientOptions = client.getOptions();\n\n if (clientOptions.tracePropagationTargets === undefined) {\n return true;\n }\n\n const cachedDecision = _headersUrlMap.get(url);\n if (cachedDecision !== undefined) {\n return cachedDecision;\n }\n\n const decision = stringMatchesSomePattern(url, clientOptions.tracePropagationTargets);\n _headersUrlMap.set(url, decision);\n return decision;\n }\n\n /** Helper that wraps shouldCreateSpanForRequest option */\n function _shouldCreateSpan(url: string): boolean {\n if (shouldCreateSpanForRequest === undefined) {\n return true;\n }\n\n const cachedDecision = _createSpanUrlMap.get(url);\n if (cachedDecision !== undefined) {\n return cachedDecision;\n }\n\n const decision = shouldCreateSpanForRequest(url);\n _createSpanUrlMap.set(url, decision);\n return decision;\n }\n\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n addFetchInstrumentationHandler(handlerData => {\n const client = getClient();\n const { propagateTraceparent } = client?.getOptions() || {};\n if (!client || !HAS_CLIENT_MAP.get(client)) {\n return;\n }\n\n if (isSentryRequestUrl(handlerData.fetchData.url, client)) {\n return;\n }\n\n instrumentFetchRequest(handlerData, _shouldCreateSpan, _shouldAttachTraceData, spans, {\n spanOrigin: 'auto.http.fetch',\n propagateTraceparent,\n });\n\n if (breadcrumbs) {\n createBreadcrumb(handlerData);\n }\n }, true);\n },\n setup(client) {\n HAS_CLIENT_MAP.set(client, true);\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Creates spans and attaches tracing headers to fetch requests.\n */\nexport const fetchIntegration = defineIntegration(_fetchIntegration);\n\nfunction createBreadcrumb(handlerData: HandlerDataFetch): void {\n const { startTimestamp, endTimestamp } = handlerData;\n\n // We only capture complete fetch requests\n if (!endTimestamp) {\n return;\n }\n\n const breadcrumbData: FetchBreadcrumbData = {\n method: handlerData.fetchData.method,\n url: handlerData.fetchData.url,\n };\n\n if (handlerData.error) {\n const hint: FetchBreadcrumbHint = {\n data: handlerData.error,\n input: handlerData.args,\n startTimestamp,\n endTimestamp,\n };\n\n addBreadcrumb(\n {\n category: 'fetch',\n data: breadcrumbData,\n level: 'error',\n type: 'http',\n },\n hint,\n );\n } else {\n const response = handlerData.response as Response | undefined;\n\n breadcrumbData.request_body_size = handlerData.fetchData.request_body_size;\n breadcrumbData.response_body_size = handlerData.fetchData.response_body_size;\n breadcrumbData.status_code = response?.status;\n\n const hint: FetchBreadcrumbHint = {\n input: handlerData.args,\n response,\n startTimestamp,\n endTimestamp,\n };\n const level = getBreadcrumbLogLevelFromHttpStatusCode(breadcrumbData.status_code);\n\n addBreadcrumb(\n {\n category: 'fetch',\n data: breadcrumbData,\n type: 'http',\n level,\n },\n hint,\n );\n }\n}\n"],"names":["LRUMap","getClient","stringMatchesSomePattern","addFetchInstrumentationHandler","isSentryRequestUrl","instrumentFetchRequest","defineIntegration","addBreadcrumb","getBreadcrumbLogLevelFromHttpStatusCode"],"mappings":"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"}
1
+ {"version":3,"file":"fetch.js","sources":["../../../src/integrations/fetch.ts"],"sourcesContent":["import type {\n Client,\n FetchBreadcrumbData,\n FetchBreadcrumbHint,\n HandlerDataFetch,\n IntegrationFn,\n Span,\n} from '@sentry/core';\nimport {\n addBreadcrumb,\n addFetchInstrumentationHandler,\n defineIntegration,\n getBreadcrumbLogLevelFromHttpStatusCode,\n getClient,\n instrumentFetchRequest,\n isSentryRequestUrl,\n LRUMap,\n stringMatchesSomePattern,\n} from '@sentry/core';\n\nconst INTEGRATION_NAME = 'Fetch';\n\nconst HAS_CLIENT_MAP = new WeakMap<Client, boolean>();\n\nexport interface Options {\n /**\n * Whether breadcrumbs should be recorded for requests\n * Defaults to true\n */\n breadcrumbs: boolean;\n\n /**\n * Function determining whether or not to create spans to track outgoing requests to the given URL.\n * By default, spans will be created for all outgoing requests.\n */\n shouldCreateSpanForRequest?: (url: string) => boolean;\n}\n\nconst _fetchIntegration = ((options: Partial<Options> = {}) => {\n const breadcrumbs = options.breadcrumbs === undefined ? true : options.breadcrumbs;\n const shouldCreateSpanForRequest = options.shouldCreateSpanForRequest;\n\n const _createSpanUrlMap = new LRUMap<string, boolean>(100);\n const _headersUrlMap = new LRUMap<string, boolean>(100);\n\n const spans: Record<string, Span> = {};\n\n /** Decides whether to attach trace data to the outgoing fetch request */\n function _shouldAttachTraceData(url: string): boolean {\n const client = getClient();\n\n if (!client) {\n return false;\n }\n\n const clientOptions = client.getOptions();\n\n if (clientOptions.tracePropagationTargets === undefined) {\n return true;\n }\n\n const cachedDecision = _headersUrlMap.get(url);\n if (cachedDecision !== undefined) {\n return cachedDecision;\n }\n\n const decision = stringMatchesSomePattern(url, clientOptions.tracePropagationTargets);\n _headersUrlMap.set(url, decision);\n return decision;\n }\n\n /** Helper that wraps shouldCreateSpanForRequest option */\n function _shouldCreateSpan(url: string): boolean {\n if (shouldCreateSpanForRequest === undefined) {\n return true;\n }\n\n const cachedDecision = _createSpanUrlMap.get(url);\n if (cachedDecision !== undefined) {\n return cachedDecision;\n }\n\n const decision = shouldCreateSpanForRequest(url);\n _createSpanUrlMap.set(url, decision);\n return decision;\n }\n\n return {\n name: INTEGRATION_NAME,\n setupOnce() {\n addFetchInstrumentationHandler(handlerData => {\n const client = getClient();\n const { propagateTraceparent } = client?.getOptions() || {};\n if (!client || !HAS_CLIENT_MAP.get(client)) {\n return;\n }\n\n if (isSentryRequestUrl(handlerData.fetchData.url, client)) {\n return;\n }\n\n instrumentFetchRequest(handlerData, _shouldCreateSpan, _shouldAttachTraceData, spans, {\n spanOrigin: 'auto.http.fetch',\n propagateTraceparent,\n });\n\n if (breadcrumbs) {\n createBreadcrumb(handlerData);\n }\n }, true);\n },\n setup(client) {\n HAS_CLIENT_MAP.set(client, true);\n },\n };\n}) satisfies IntegrationFn;\n\n/**\n * Creates spans and attaches tracing headers to fetch requests.\n */\nexport const fetchIntegration = defineIntegration(_fetchIntegration);\n\nfunction createBreadcrumb(handlerData: HandlerDataFetch): void {\n const { startTimestamp, endTimestamp } = handlerData;\n\n // We only capture complete fetch requests\n if (!endTimestamp) {\n return;\n }\n\n const breadcrumbData: FetchBreadcrumbData = {\n method: handlerData.fetchData.method,\n url: handlerData.fetchData.url,\n };\n\n if (handlerData.error) {\n const hint: FetchBreadcrumbHint = {\n data: handlerData.error,\n input: handlerData.args,\n startTimestamp,\n endTimestamp,\n };\n\n addBreadcrumb(\n {\n category: 'fetch',\n data: breadcrumbData,\n level: 'error',\n type: 'http',\n },\n hint,\n );\n } else {\n const response = handlerData.response as Response | undefined;\n\n breadcrumbData.request_body_size = handlerData.fetchData.request_body_size;\n breadcrumbData.response_body_size = handlerData.fetchData.response_body_size;\n breadcrumbData.status_code = response?.status;\n\n const hint: FetchBreadcrumbHint = {\n input: handlerData.args,\n response,\n startTimestamp,\n endTimestamp,\n };\n const level = getBreadcrumbLogLevelFromHttpStatusCode(breadcrumbData.status_code);\n\n addBreadcrumb(\n {\n category: 'fetch',\n data: breadcrumbData,\n type: 'http',\n level,\n },\n hint,\n );\n }\n}\n"],"names":["LRUMap","getClient","stringMatchesSomePattern","addFetchInstrumentationHandler","isSentryRequestUrl","instrumentFetchRequest","defineIntegration","addBreadcrumb","getBreadcrumbLogLevelFromHttpStatusCode"],"mappings":"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"}
@@ -3,78 +3,47 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
3
3
  const core = require('@sentry/core');
4
4
  const debugBuild = require('../debug-build.js');
5
5
 
6
- const INTEGRATION_NAME = 'Hono';
7
-
8
- /** Only exported for internal use */
6
+ const INTEGRATION_NAME = "Hono";
9
7
  function getHonoIntegration() {
10
8
  return core.getClient()?.getIntegrationByName(INTEGRATION_NAME);
11
9
  }
12
-
13
10
  function isHonoError(err) {
14
11
  if (err instanceof Error) {
15
12
  return true;
16
13
  }
17
- return typeof err === 'object' && err !== null && 'status' in (err );
14
+ return typeof err === "object" && err !== null && "status" in err;
18
15
  }
19
-
20
- // Vendored from https://github.com/honojs/hono/blob/d3abeb1f801aaa1b334285c73da5f5f022dbcadb/src/helper/route/index.ts#L58-L59
21
- const routePath = (c) => c.req?.path ?? '';
22
-
16
+ const routePath = (c) => c.req?.path ?? "";
23
17
  const _honoIntegration = ((options = {}) => {
24
18
  return {
25
19
  name: INTEGRATION_NAME,
26
20
  // Hono error handler: https://github.com/honojs/hono/blob/d3abeb1f801aaa1b334285c73da5f5f022dbcadb/src/hono-base.ts#L35
27
21
  handleHonoException(err, context) {
28
22
  const shouldHandleError = options.shouldHandleError || defaultShouldHandleError;
29
-
30
23
  if (!isHonoError(err)) {
31
24
  debugBuild.DEBUG_BUILD && core.debug.log("[Hono] Won't capture exception in `onError` because it's not a Hono error.", err);
32
25
  return;
33
26
  }
34
-
35
27
  if (shouldHandleError(err)) {
36
28
  if (context) {
37
29
  const activeSpan = core.getActiveSpan();
38
30
  const spanName = `${context.req.method} ${routePath(context)}`;
39
-
40
31
  if (activeSpan) {
41
32
  activeSpan.updateName(spanName);
42
33
  core.updateSpanName(core.getRootSpan(activeSpan), spanName);
43
34
  }
44
-
45
35
  core.getIsolationScope().setTransactionName(spanName);
46
36
  }
47
-
48
- core.captureException(err, { mechanism: { handled: false, type: 'auto.faas.hono.error_handler' } });
37
+ core.captureException(err, { mechanism: { handled: false, type: "auto.faas.hono.error_handler" } });
49
38
  } else {
50
- debugBuild.DEBUG_BUILD && core.debug.log('[Hono] Not capturing exception because `shouldHandleError` returned `false`.', err);
39
+ debugBuild.DEBUG_BUILD && core.debug.log("[Hono] Not capturing exception because `shouldHandleError` returned `false`.", err);
51
40
  }
52
- },
41
+ }
53
42
  };
54
- }) ;
55
-
56
- /**
57
- * Automatically captures exceptions caught with the `onError` handler in Hono.
58
- *
59
- * The integration is enabled by default.
60
- *
61
- * @example
62
- * integrations: [
63
- * honoIntegration({
64
- * shouldHandleError: (err) => true; // always capture exceptions in onError
65
- * })
66
- * ]
67
- */
43
+ });
68
44
  const honoIntegration = core.defineIntegration(_honoIntegration);
69
-
70
- /**
71
- * Default function to determine if an error should be sent to Sentry
72
- *
73
- * 3xx and 4xx errors are not sent by default.
74
- */
75
45
  function defaultShouldHandleError(error) {
76
46
  const statusCode = error?.status;
77
- // 3xx and 4xx errors are not sent by default.
78
47
  return statusCode ? statusCode >= 500 || statusCode <= 299 : true;
79
48
  }
80
49