@sentry/cloudflare 10.53.0 → 10.54.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 (166) 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 +47 -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 +21 -67
  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 +47 -34
  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 +21 -67
  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.map +1 -1
  164. package/build/types/instrumentations/worker/instrumentFetch.d.ts.map +1 -1
  165. package/build/types/pages-plugin.d.ts.map +1 -1
  166. package/package.json +2 -2
@@ -6,54 +6,40 @@ const request = require('../../request.js');
6
6
  const instrumentContext = require('../../utils/instrumentContext.js');
7
7
  const instrumentEnv = require('./instrumentEnv.js');
8
8
 
9
- /**
10
- * Instruments a fetch handler for ExportedHandler (env/ctx come from args).
11
- */
12
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
13
- function instrumentExportedHandlerFetch(
14
- handler,
15
- optionsCallback,
16
- ) {
17
- if (!('fetch' in handler) || typeof handler.fetch !== 'function') {
9
+ function instrumentExportedHandlerFetch(handler, optionsCallback) {
10
+ if (!("fetch" in handler) || typeof handler.fetch !== "function") {
18
11
  return;
19
12
  }
20
-
21
13
  handler.fetch = instrument.ensureInstrumented(
22
14
  handler.fetch,
23
- original =>
24
- new Proxy(original, {
25
- apply(target, thisArg, args) {
26
- const [request$1, env, ctx] = args;
27
- const context = instrumentContext.instrumentContext(ctx);
28
- const options$1 = options.getFinalOptions(optionsCallback(env), env);
29
- args[1] = instrumentEnv.instrumentEnv(env, options$1);
30
- args[2] = context;
31
-
32
- return request.wrapRequestHandler({ options: options$1, request: request$1, context }, () => target.apply(thisArg, args));
33
- },
34
- }),
15
+ (original) => new Proxy(original, {
16
+ apply(target, thisArg, args) {
17
+ const [request$1, env, ctx] = args;
18
+ if (request$1.method === "OPTIONS" || request$1.method === "HEAD") {
19
+ return target.apply(thisArg, args);
20
+ }
21
+ const context = instrumentContext.instrumentContext(ctx);
22
+ const options$1 = options.getFinalOptions(optionsCallback(env), env);
23
+ args[1] = instrumentEnv.instrumentEnv(env, options$1);
24
+ args[2] = context;
25
+ return request.wrapRequestHandler({ options: options$1, request: request$1, context }, () => target.apply(thisArg, args));
26
+ }
27
+ })
35
28
  );
36
29
  }
37
-
38
- /**
39
- * Instruments a fetch method for WorkerEntrypoint (options/context already available).
40
- */
41
- function instrumentWorkerEntrypointFetch(
42
- instance,
43
- options,
44
- context,
45
- ) {
30
+ function instrumentWorkerEntrypointFetch(instance, options, context) {
46
31
  if (!instance.fetch) {
47
32
  return;
48
33
  }
49
-
50
34
  const original = instance.fetch.bind(instance);
51
35
  instance.fetch = new Proxy(original, {
52
36
  apply(target, thisArg, args) {
53
37
  const [request$1] = args;
54
-
38
+ if (request$1.method === "OPTIONS" || request$1.method === "HEAD") {
39
+ return Reflect.apply(target, thisArg, args);
40
+ }
55
41
  return request.wrapRequestHandler({ options, request: request$1, context }, () => Reflect.apply(target, thisArg, args));
56
- },
42
+ }
57
43
  });
58
44
  }
59
45
 
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentFetch.js","sources":["../../../../src/instrumentations/worker/instrumentFetch.ts"],"sourcesContent":["import type { ExportedHandler } from '@cloudflare/workers-types';\nimport type { env as cloudflareEnv, WorkerEntrypoint } from 'cloudflare:workers';\nimport type { CloudflareOptions } from '../../client';\nimport { ensureInstrumented } from '../../instrument';\nimport { getFinalOptions } from '../../options';\nimport { wrapRequestHandler } from '../../request';\nimport { instrumentContext } from '../../utils/instrumentContext';\nimport { instrumentEnv } from './instrumentEnv';\n\n/**\n * Instruments a fetch handler for ExportedHandler (env/ctx come from args).\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function instrumentExportedHandlerFetch<T extends ExportedHandler<any, any, any>>(\n handler: T,\n optionsCallback: (env: typeof cloudflareEnv) => CloudflareOptions | undefined,\n): void {\n if (!('fetch' in handler) || typeof handler.fetch !== 'function') {\n return;\n }\n\n handler.fetch = ensureInstrumented(\n handler.fetch,\n original =>\n new Proxy(original, {\n apply(target, thisArg, args: Parameters<NonNullable<T['fetch']>>) {\n const [request, 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 wrapRequestHandler({ options, request, context }, () => target.apply(thisArg, args));\n },\n }),\n );\n}\n\n/**\n * Instruments a fetch method for WorkerEntrypoint (options/context already available).\n */\nexport function instrumentWorkerEntrypointFetch<T extends WorkerEntrypoint>(\n instance: T,\n options: CloudflareOptions,\n context: ExecutionContext,\n): void {\n if (!instance.fetch) {\n return;\n }\n\n const original = instance.fetch.bind(instance);\n instance.fetch = new Proxy(original, {\n apply(target, thisArg, args: [Request]) {\n const [request] = args;\n\n return wrapRequestHandler({ options, request, context }, () => Reflect.apply(target, thisArg, args));\n },\n });\n}\n"],"names":["ensureInstrumented","request","instrumentContext","options","getFinalOptions","instrumentEnv","wrapRequestHandler"],"mappings":";;;;;;;;AASA;AACA;AACA;AACA;AACO,SAAS,8BAA8B;AAC9C,EAAE,OAAO;AACT,EAAE,eAAe;AACjB,EAAQ;AACR,EAAE,IAAI,EAAE,WAAW,OAAO,CAAA,IAAK,OAAO,OAAO,CAAC,KAAA,KAAU,UAAU,EAAE;AACpE,IAAI;AACJ,EAAE;;AAEF,EAAE,OAAO,CAAC,KAAA,GAAQA,6BAAkB;AACpC,IAAI,OAAO,CAAC,KAAK;AACjB,IAAI,QAAA;AACJ,MAAM,IAAI,KAAK,CAAC,QAAQ,EAAE;AAC1B,QAAQ,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAuC;AAC1E,UAAU,MAAM,CAACC,SAAO,EAAE,GAAG,EAAE,GAAG,CAAA,GAAI,IAAI;AAC1C,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,OAAOG,0BAAkB,CAAC,WAAEH,SAAO,WAAEF,SAAO,EAAE,OAAA,EAAS,EAAE,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AACrG,QAAQ,CAAC;AACT,OAAO,CAAC;AACR,GAAG;AACH;;AAEA;AACA;AACA;AACO,SAAS,+BAA+B;AAC/C,EAAE,QAAQ;AACV,EAAE,OAAO;AACT,EAAE,OAAO;AACT,EAAQ;AACR,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;AACvB,IAAI;AACJ,EAAE;;AAEF,EAAE,MAAM,QAAA,GAAW,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;AAChD,EAAE,QAAQ,CAAC,KAAA,GAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE;AACvC,IAAI,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAa;AAC5C,MAAM,MAAM,CAACA,SAAO,CAAA,GAAI,IAAI;;AAE5B,MAAM,OAAOK,0BAAkB,CAAC,EAAE,OAAO,WAAEL,SAAO,EAAE,OAAA,EAAS,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAC1G,IAAI,CAAC;AACL,GAAG,CAAC;AACJ;;;;;"}
1
+ {"version":3,"file":"instrumentFetch.js","sources":["../../../../src/instrumentations/worker/instrumentFetch.ts"],"sourcesContent":["import type { ExportedHandler } from '@cloudflare/workers-types';\nimport type { env as cloudflareEnv, WorkerEntrypoint } from 'cloudflare:workers';\nimport type { CloudflareOptions } from '../../client';\nimport { ensureInstrumented } from '../../instrument';\nimport { getFinalOptions } from '../../options';\nimport { wrapRequestHandler } from '../../request';\nimport { instrumentContext } from '../../utils/instrumentContext';\nimport { instrumentEnv } from './instrumentEnv';\n\n/**\n * Instruments a fetch handler for ExportedHandler (env/ctx come from args).\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function instrumentExportedHandlerFetch<T extends ExportedHandler<any, any, any>>(\n handler: T,\n optionsCallback: (env: typeof cloudflareEnv) => CloudflareOptions | undefined,\n): void {\n if (!('fetch' in handler) || typeof handler.fetch !== 'function') {\n return;\n }\n\n handler.fetch = ensureInstrumented(\n handler.fetch,\n original =>\n new Proxy(original, {\n apply(target, thisArg, args: Parameters<NonNullable<T['fetch']>>) {\n const [request, env, ctx] = args;\n\n if (request.method === 'OPTIONS' || request.method === 'HEAD') {\n return target.apply(thisArg, args);\n }\n\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 wrapRequestHandler({ options, request, context }, () => target.apply(thisArg, args));\n },\n }),\n );\n}\n\n/**\n * Instruments a fetch method for WorkerEntrypoint (options/context already available).\n */\nexport function instrumentWorkerEntrypointFetch<T extends WorkerEntrypoint>(\n instance: T,\n options: CloudflareOptions,\n context: ExecutionContext,\n): void {\n if (!instance.fetch) {\n return;\n }\n\n const original = instance.fetch.bind(instance);\n instance.fetch = new Proxy(original, {\n apply(target, thisArg, args: [Request]) {\n const [request] = args;\n\n if (request.method === 'OPTIONS' || request.method === 'HEAD') {\n return Reflect.apply(target, thisArg, args);\n }\n\n return wrapRequestHandler({ options, request, context }, () => Reflect.apply(target, thisArg, args));\n },\n });\n}\n"],"names":["ensureInstrumented","request","instrumentContext","options","getFinalOptions","instrumentEnv","wrapRequestHandler"],"mappings":";;;;;;;;AAaO,SAAS,8BAAA,CACd,SACA,eAAA,EACM;AACN,EAAA,IAAI,EAAE,OAAA,IAAW,OAAA,CAAA,IAAY,OAAO,OAAA,CAAQ,UAAU,UAAA,EAAY;AAChE,IAAA;AAAA,EACF;AAEA,EAAA,OAAA,CAAQ,KAAA,GAAQA,6BAAA;AAAA,IACd,OAAA,CAAQ,KAAA;AAAA,IACR,CAAA,QAAA,KACE,IAAI,KAAA,CAAM,QAAA,EAAU;AAAA,MAClB,KAAA,CAAM,MAAA,EAAQ,OAAA,EAAS,IAAA,EAA2C;AAChE,QAAA,MAAM,CAACC,SAAA,EAAS,GAAA,EAAK,GAAG,CAAA,GAAI,IAAA;AAE5B,QAAA,IAAIA,SAAA,CAAQ,MAAA,KAAW,SAAA,IAAaA,SAAA,CAAQ,WAAW,MAAA,EAAQ;AAC7D,UAAA,OAAO,MAAA,CAAO,KAAA,CAAM,OAAA,EAAS,IAAI,CAAA;AAAA,QACnC;AAEA,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,OAAOG,0BAAA,CAAmB,WAAEH,SAAA,WAASF,SAAA,EAAS,OAAA,EAAQ,EAAG,MAAM,MAAA,CAAO,KAAA,CAAM,OAAA,EAAS,IAAI,CAAC,CAAA;AAAA,MAC5F;AAAA,KACD;AAAA,GACL;AACF;AAKO,SAAS,+BAAA,CACd,QAAA,EACA,OAAA,EACA,OAAA,EACM;AACN,EAAA,IAAI,CAAC,SAAS,KAAA,EAAO;AACnB,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAW,QAAA,CAAS,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA;AAC7C,EAAA,QAAA,CAAS,KAAA,GAAQ,IAAI,KAAA,CAAM,QAAA,EAAU;AAAA,IACnC,KAAA,CAAM,MAAA,EAAQ,OAAA,EAAS,IAAA,EAAiB;AACtC,MAAA,MAAM,CAACA,SAAO,CAAA,GAAI,IAAA;AAElB,MAAA,IAAIA,SAAA,CAAQ,MAAA,KAAW,SAAA,IAAaA,SAAA,CAAQ,WAAW,MAAA,EAAQ;AAC7D,QAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,OAAA,EAAS,IAAI,CAAA;AAAA,MAC5C;AAEA,MAAA,OAAOK,0BAAA,CAAmB,EAAE,OAAA,WAASL,SAAA,EAAS,OAAA,EAAQ,EAAG,MAAM,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,OAAA,EAAS,IAAI,CAAC,CAAA;AAAA,IACrG;AAAA,GACD,CAAA;AACH;;;;;"}
@@ -2,34 +2,20 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
3
  const core = require('@sentry/core');
4
4
 
5
- /**
6
- * Wraps a fetch-like function to create a span and propagate trace headers
7
- * (`sentry-trace` and `baggage`) on the outgoing request.
8
- *
9
- * Useful for instrumenting Cloudflare bindings that expose a `fetch` method
10
- * (e.g. Durable Object stubs, Service bindings).
11
- */
12
5
  function instrumentFetcher(fetchFn) {
13
- return function (input, init) {
6
+ return function(input, init) {
14
7
  const headers = core._INTERNAL_getTracingHeadersForFetchRequest(input, { headers: init?.headers });
15
-
16
- if (input instanceof Request && init === undefined) {
8
+ if (input instanceof Request && init === void 0) {
17
9
  if (!headers) {
18
10
  return fetchFn(input);
19
11
  }
20
-
21
- // Newly created headers already include the previous headers from the original request
22
- // so we can clone the request and pass in all headers.
23
- const requestWithTracing = new Request(input, { headers: headers });
24
-
12
+ const requestWithTracing = new Request(input, { headers });
25
13
  return fetchFn(requestWithTracing);
26
14
  }
27
-
28
15
  const mergedInit = {
29
16
  ...init,
30
- ...(headers ? { headers } : {}),
31
- } ;
32
-
17
+ ...headers ? { headers } : {}
18
+ };
33
19
  return fetchFn(input, mergedInit);
34
20
  };
35
21
  }
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentFetcher.js","sources":["../../../../src/instrumentations/worker/instrumentFetcher.ts"],"sourcesContent":["import type { Fetcher } from '@cloudflare/workers-types';\nimport { _INTERNAL_getTracingHeadersForFetchRequest } from '@sentry/core';\n\n/**\n * Wraps a fetch-like function to create a span and propagate trace headers\n * (`sentry-trace` and `baggage`) on the outgoing request.\n *\n * Useful for instrumenting Cloudflare bindings that expose a `fetch` method\n * (e.g. Durable Object stubs, Service bindings).\n */\nexport function instrumentFetcher(fetchFn: Fetcher['fetch']): Fetcher['fetch'] {\n return function (input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n const headers = _INTERNAL_getTracingHeadersForFetchRequest(input, { headers: init?.headers });\n\n if (input instanceof Request && init === undefined) {\n if (!headers) {\n return fetchFn(input);\n }\n\n // Newly created headers already include the previous headers from the original request\n // so we can clone the request and pass in all headers.\n const requestWithTracing = new Request(input, { headers: headers as HeadersInit });\n\n return fetchFn(requestWithTracing);\n }\n\n const mergedInit = {\n ...init,\n ...(headers ? { headers } : {}),\n } as NonNullable<Parameters<Fetcher['fetch']>[1]>;\n\n return fetchFn(input, mergedInit);\n };\n}\n"],"names":["_INTERNAL_getTracingHeadersForFetchRequest"],"mappings":";;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,iBAAiB,CAAC,OAAO,EAAsC;AAC/E,EAAE,OAAO,UAAU,KAAK,EAAqB,IAAI,EAAmC;AACpF,IAAI,MAAM,OAAA,GAAUA,+CAA0C,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAA,EAAS,CAAC;;AAEjG,IAAI,IAAI,KAAA,YAAiB,WAAW,IAAA,KAAS,SAAS,EAAE;AACxD,MAAM,IAAI,CAAC,OAAO,EAAE;AACpB,QAAQ,OAAO,OAAO,CAAC,KAAK,CAAC;AAC7B,MAAM;;AAEN;AACA;AACA,MAAM,MAAM,kBAAA,GAAqB,IAAI,OAAO,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,OAAA,GAAwB,CAAC;;AAExF,MAAM,OAAO,OAAO,CAAC,kBAAkB,CAAC;AACxC,IAAI;;AAEJ,IAAI,MAAM,aAAa;AACvB,MAAM,GAAG,IAAI;AACb,MAAM,IAAI,OAAA,GAAU,EAAE,SAAQ,GAAI,EAAE,CAAC;AACrC,KAAI;;AAEJ,IAAI,OAAO,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC;AACrC,EAAE,CAAC;AACH;;;;"}
1
+ {"version":3,"file":"instrumentFetcher.js","sources":["../../../../src/instrumentations/worker/instrumentFetcher.ts"],"sourcesContent":["import type { Fetcher } from '@cloudflare/workers-types';\nimport { _INTERNAL_getTracingHeadersForFetchRequest } from '@sentry/core';\n\n/**\n * Wraps a fetch-like function to create a span and propagate trace headers\n * (`sentry-trace` and `baggage`) on the outgoing request.\n *\n * Useful for instrumenting Cloudflare bindings that expose a `fetch` method\n * (e.g. Durable Object stubs, Service bindings).\n */\nexport function instrumentFetcher(fetchFn: Fetcher['fetch']): Fetcher['fetch'] {\n return function (input: RequestInfo | URL, init?: RequestInit): Promise<Response> {\n const headers = _INTERNAL_getTracingHeadersForFetchRequest(input, { headers: init?.headers });\n\n if (input instanceof Request && init === undefined) {\n if (!headers) {\n return fetchFn(input);\n }\n\n // Newly created headers already include the previous headers from the original request\n // so we can clone the request and pass in all headers.\n const requestWithTracing = new Request(input, { headers: headers as HeadersInit });\n\n return fetchFn(requestWithTracing);\n }\n\n const mergedInit = {\n ...init,\n ...(headers ? { headers } : {}),\n } as NonNullable<Parameters<Fetcher['fetch']>[1]>;\n\n return fetchFn(input, mergedInit);\n };\n}\n"],"names":["_INTERNAL_getTracingHeadersForFetchRequest"],"mappings":";;;;AAUO,SAAS,kBAAkB,OAAA,EAA6C;AAC7E,EAAA,OAAO,SAAU,OAA0B,IAAA,EAAuC;AAChF,IAAA,MAAM,UAAUA,+CAAA,CAA2C,KAAA,EAAO,EAAE,OAAA,EAAS,IAAA,EAAM,SAAS,CAAA;AAE5F,IAAA,IAAI,KAAA,YAAiB,OAAA,IAAW,IAAA,KAAS,MAAA,EAAW;AAClD,MAAA,IAAI,CAAC,OAAA,EAAS;AACZ,QAAA,OAAO,QAAQ,KAAK,CAAA;AAAA,MACtB;AAIA,MAAA,MAAM,qBAAqB,IAAI,OAAA,CAAQ,KAAA,EAAO,EAAE,SAAiC,CAAA;AAEjF,MAAA,OAAO,QAAQ,kBAAkB,CAAA;AAAA,IACnC;AAEA,IAAA,MAAM,UAAA,GAAa;AAAA,MACjB,GAAG,IAAA;AAAA,MACH,GAAI,OAAA,GAAU,EAAE,OAAA,KAAY;AAAC,KAC/B;AAEA,IAAA,OAAO,OAAA,CAAQ,OAAO,UAAU,CAAA;AAAA,EAClC,CAAA;AACF;;;;"}
@@ -9,102 +9,70 @@ 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 queue handler logic - wraps execution with Sentry instrumentation.
14
- */
15
- function wrapQueueHandler(
16
- batch,
17
- options,
18
- context,
19
- fn,
20
- ) {
21
- return core.withIsolationScope(isolationScope => {
12
+ function wrapQueueHandler(batch, options, context, fn) {
13
+ return core.withIsolationScope((isolationScope) => {
22
14
  const waitUntil = context.waitUntil.bind(context);
23
-
24
15
  const client = sdk.init({ ...options, ctx: context });
25
16
  isolationScope.setClient(client);
26
-
27
17
  scopeUtils.addCloudResourceContext(isolationScope);
28
-
29
18
  return core.startSpan(
30
19
  {
31
- op: 'faas.queue',
20
+ op: "faas.queue",
32
21
  name: `process ${batch.queue}`,
33
22
  attributes: {
34
- 'faas.trigger': 'pubsub',
35
- 'messaging.destination.name': batch.queue,
36
- 'messaging.system': 'cloudflare',
37
- 'messaging.operation.type': 'process',
38
- 'messaging.operation.name': 'process',
39
- 'messaging.batch.message_count': batch.messages.length,
40
- 'messaging.message.retry.count': batch.messages.reduce((acc, message) => acc + message.attempts - 1, 0),
41
- [core.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'queue.process',
42
- [core.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.faas.cloudflare.queue',
43
- [core.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: 'task',
44
- },
23
+ "faas.trigger": "pubsub",
24
+ "messaging.destination.name": batch.queue,
25
+ "messaging.system": "cloudflare",
26
+ "messaging.operation.type": "process",
27
+ "messaging.operation.name": "process",
28
+ "messaging.batch.message_count": batch.messages.length,
29
+ "messaging.message.retry.count": batch.messages.reduce((acc, message) => acc + message.attempts - 1, 0),
30
+ [core.SEMANTIC_ATTRIBUTE_SENTRY_OP]: "queue.process",
31
+ [core.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.faas.cloudflare.queue",
32
+ [core.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "task"
33
+ }
45
34
  },
46
35
  async () => {
47
36
  try {
48
37
  return await fn();
49
38
  } catch (e) {
50
- core.captureException(e, { mechanism: { handled: false, type: 'auto.faas.cloudflare.queue' } });
39
+ core.captureException(e, { mechanism: { handled: false, type: "auto.faas.cloudflare.queue" } });
51
40
  throw e;
52
41
  } finally {
53
42
  waitUntil(flush.flushAndDispose(client));
54
43
  }
55
- },
44
+ }
56
45
  );
57
46
  });
58
47
  }
59
-
60
- /**
61
- * Instruments a queue handler for ExportedHandler (env/ctx come from args).
62
- */
63
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
64
- function instrumentExportedHandlerQueue(
65
- handler,
66
- optionsCallback,
67
- ) {
68
- if (!('queue' in handler) || typeof handler.queue !== 'function') {
48
+ function instrumentExportedHandlerQueue(handler, optionsCallback) {
49
+ if (!("queue" in handler) || typeof handler.queue !== "function") {
69
50
  return;
70
51
  }
71
-
72
52
  handler.queue = instrument.ensureInstrumented(
73
53
  handler.queue,
74
- original =>
75
- new Proxy(original, {
76
- apply(target, thisArg, args) {
77
- const [batch, env, ctx] = args;
78
- const context = instrumentContext.instrumentContext(ctx);
79
- const options$1 = options.getFinalOptions(optionsCallback(env), env);
80
- args[1] = instrumentEnv.instrumentEnv(env, options$1);
81
- args[2] = context;
82
-
83
- return wrapQueueHandler(batch, options$1, context, () => target.apply(thisArg, args));
84
- },
85
- }),
54
+ (original) => new Proxy(original, {
55
+ apply(target, thisArg, args) {
56
+ const [batch, env, ctx] = args;
57
+ const context = instrumentContext.instrumentContext(ctx);
58
+ const options$1 = options.getFinalOptions(optionsCallback(env), env);
59
+ args[1] = instrumentEnv.instrumentEnv(env, options$1);
60
+ args[2] = context;
61
+ return wrapQueueHandler(batch, options$1, context, () => target.apply(thisArg, args));
62
+ }
63
+ })
86
64
  );
87
65
  }
88
-
89
- /**
90
- * Instruments a queue method for WorkerEntrypoint (options/context already available).
91
- */
92
- function instrumentWorkerEntrypointQueue(
93
- instance,
94
- options,
95
- context,
96
- ) {
66
+ function instrumentWorkerEntrypointQueue(instance, options, context) {
97
67
  if (!instance.queue) {
98
68
  return;
99
69
  }
100
-
101
70
  const original = instance.queue.bind(instance);
102
71
  instance.queue = new Proxy(original, {
103
72
  apply(target, thisArg, args) {
104
73
  const [batch] = args;
105
-
106
74
  return wrapQueueHandler(batch, options, context, () => Reflect.apply(target, thisArg, args));
107
- },
75
+ }
108
76
  });
109
77
  }
110
78
 
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentQueue.js","sources":["../../../../src/instrumentations/worker/instrumentQueue.ts"],"sourcesContent":["import type { ExportedHandler, MessageBatch } from '@cloudflare/workers-types';\nimport type { env as cloudflareEnv, WorkerEntrypoint } from 'cloudflare:workers';\nimport {\n captureException,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\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\n/**\n * Core queue handler logic - wraps execution with Sentry instrumentation.\n */\nfunction wrapQueueHandler(\n batch: MessageBatch,\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.queue',\n name: `process ${batch.queue}`,\n attributes: {\n 'faas.trigger': 'pubsub',\n 'messaging.destination.name': batch.queue,\n 'messaging.system': 'cloudflare',\n 'messaging.operation.type': 'process',\n 'messaging.operation.name': 'process',\n 'messaging.batch.message_count': batch.messages.length,\n 'messaging.message.retry.count': batch.messages.reduce((acc, message) => acc + message.attempts - 1, 0),\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'queue.process',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.faas.cloudflare.queue',\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.queue' } });\n throw e;\n } finally {\n waitUntil(flushAndDispose(client));\n }\n },\n );\n });\n}\n\n/**\n * Instruments a queue handler for ExportedHandler (env/ctx come from args).\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function instrumentExportedHandlerQueue<T extends ExportedHandler<any, any, any>>(\n handler: T,\n optionsCallback: (env: typeof cloudflareEnv) => CloudflareOptions | undefined,\n): void {\n if (!('queue' in handler) || typeof handler.queue !== 'function') {\n return;\n }\n\n handler.queue = ensureInstrumented(\n handler.queue,\n original =>\n new Proxy(original, {\n apply(target, thisArg, args: Parameters<NonNullable<T['queue']>>) {\n const [batch, 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 wrapQueueHandler(batch, options, context, () => target.apply(thisArg, args));\n },\n }),\n );\n}\n\n/**\n * Instruments a queue method for WorkerEntrypoint (options/context already available).\n */\nexport function instrumentWorkerEntrypointQueue<T extends WorkerEntrypoint>(\n instance: T,\n options: CloudflareOptions,\n context: ExecutionContext,\n): void {\n if (!instance.queue) {\n return;\n }\n\n const original = instance.queue.bind(instance);\n instance.queue = new Proxy(original, {\n apply(target, thisArg, args: [MessageBatch]) {\n const [batch] = args;\n\n return wrapQueueHandler(batch, options, context, () => Reflect.apply(target, thisArg, args));\n },\n });\n}\n"],"names":["withIsolationScope","init","addCloudResourceContext","startSpan","SEMANTIC_ATTRIBUTE_SENTRY_OP","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","captureException","flushAndDispose","ensureInstrumented","instrumentContext","options","getFinalOptions","instrumentEnv"],"mappings":"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"}
1
+ {"version":3,"file":"instrumentQueue.js","sources":["../../../../src/instrumentations/worker/instrumentQueue.ts"],"sourcesContent":["import type { ExportedHandler, MessageBatch } from '@cloudflare/workers-types';\nimport type { env as cloudflareEnv, WorkerEntrypoint } from 'cloudflare:workers';\nimport {\n captureException,\n SEMANTIC_ATTRIBUTE_SENTRY_OP,\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\n/**\n * Core queue handler logic - wraps execution with Sentry instrumentation.\n */\nfunction wrapQueueHandler(\n batch: MessageBatch,\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.queue',\n name: `process ${batch.queue}`,\n attributes: {\n 'faas.trigger': 'pubsub',\n 'messaging.destination.name': batch.queue,\n 'messaging.system': 'cloudflare',\n 'messaging.operation.type': 'process',\n 'messaging.operation.name': 'process',\n 'messaging.batch.message_count': batch.messages.length,\n 'messaging.message.retry.count': batch.messages.reduce((acc, message) => acc + message.attempts - 1, 0),\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'queue.process',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.faas.cloudflare.queue',\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.queue' } });\n throw e;\n } finally {\n waitUntil(flushAndDispose(client));\n }\n },\n );\n });\n}\n\n/**\n * Instruments a queue handler for ExportedHandler (env/ctx come from args).\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function instrumentExportedHandlerQueue<T extends ExportedHandler<any, any, any>>(\n handler: T,\n optionsCallback: (env: typeof cloudflareEnv) => CloudflareOptions | undefined,\n): void {\n if (!('queue' in handler) || typeof handler.queue !== 'function') {\n return;\n }\n\n handler.queue = ensureInstrumented(\n handler.queue,\n original =>\n new Proxy(original, {\n apply(target, thisArg, args: Parameters<NonNullable<T['queue']>>) {\n const [batch, 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 wrapQueueHandler(batch, options, context, () => target.apply(thisArg, args));\n },\n }),\n );\n}\n\n/**\n * Instruments a queue method for WorkerEntrypoint (options/context already available).\n */\nexport function instrumentWorkerEntrypointQueue<T extends WorkerEntrypoint>(\n instance: T,\n options: CloudflareOptions,\n context: ExecutionContext,\n): void {\n if (!instance.queue) {\n return;\n }\n\n const original = instance.queue.bind(instance);\n instance.queue = new Proxy(original, {\n apply(target, thisArg, args: [MessageBatch]) {\n const [batch] = args;\n\n return wrapQueueHandler(batch, options, context, () => Reflect.apply(target, thisArg, args));\n },\n });\n}\n"],"names":["withIsolationScope","init","addCloudResourceContext","startSpan","SEMANTIC_ATTRIBUTE_SENTRY_OP","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","captureException","flushAndDispose","ensureInstrumented","instrumentContext","options","getFinalOptions","instrumentEnv"],"mappings":"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"}
@@ -2,103 +2,77 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
3
  const core = require('@sentry/core');
4
4
 
5
- const ORIGIN = 'auto.faas.cloudflare.queue';
6
-
7
- function startPublishSpan(
8
- options
9
-
10
- ,
11
- callback,
12
- ) {
5
+ const ORIGIN = "auto.faas.cloudflare.queue";
6
+ function startPublishSpan(options, callback) {
13
7
  const { bindingName, bodySize, messageCount } = options;
14
-
15
8
  return core.startSpan(
16
9
  {
17
- op: 'queue.publish',
10
+ op: "queue.publish",
18
11
  name: `send ${bindingName}`,
19
12
  attributes: {
20
- 'messaging.system': 'cloudflare',
21
- 'messaging.destination.name': bindingName,
22
- 'messaging.operation.type': 'send',
23
- 'messaging.operation.name': 'send',
24
- ...(messageCount !== undefined && { 'messaging.batch.message_count': messageCount }),
25
- 'messaging.message.body.size': bodySize,
26
- [core.SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'queue.publish',
27
- [core.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,
28
- },
13
+ "messaging.system": "cloudflare",
14
+ "messaging.destination.name": bindingName,
15
+ "messaging.operation.type": "send",
16
+ "messaging.operation.name": "send",
17
+ ...messageCount !== void 0 && { "messaging.batch.message_count": messageCount },
18
+ "messaging.message.body.size": bodySize,
19
+ [core.SEMANTIC_ATTRIBUTE_SENTRY_OP]: "queue.publish",
20
+ [core.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN
21
+ }
29
22
  },
30
- callback,
23
+ callback
31
24
  );
32
25
  }
33
-
34
26
  function getBodySize(body) {
35
27
  if (body == null) {
36
- return undefined;
28
+ return void 0;
37
29
  }
38
-
39
- if (typeof body === 'string') {
30
+ if (typeof body === "string") {
40
31
  return new TextEncoder().encode(body).byteLength;
41
32
  }
42
-
43
33
  if (body instanceof ArrayBuffer) {
44
34
  return body.byteLength;
45
35
  }
46
-
47
36
  if (ArrayBuffer.isView(body)) {
48
37
  return body.byteLength;
49
38
  }
50
-
51
39
  try {
52
40
  return new TextEncoder().encode(JSON.stringify(body)).byteLength;
53
41
  } catch {
54
- return undefined;
42
+ return void 0;
55
43
  }
56
44
  }
57
-
58
- /**
59
- * Wraps a Queue producer binding to create `queue.publish` spans on
60
- * `send` and `sendBatch` calls.
61
- *
62
- * The queue's own name is not available on the binding object, so we use
63
- * the env binding key (e.g. `MY_QUEUE`) as `messaging.destination.name`.
64
- */
65
45
  function instrumentQueueProducer(queue, bindingName) {
66
46
  return new Proxy(queue, {
67
47
  get(target, prop, receiver) {
68
- if (prop === 'send') {
69
- const original = Reflect.get(target, prop, receiver) ;
70
-
71
- return function ( message, options) {
72
- return startPublishSpan({ bindingName, bodySize: getBodySize(message) }, () =>
73
- Reflect.apply(original, target, [message, options]),
48
+ if (prop === "send") {
49
+ const original = Reflect.get(target, prop, receiver);
50
+ return function(message, options) {
51
+ return startPublishSpan(
52
+ { bindingName, bodySize: getBodySize(message) },
53
+ () => Reflect.apply(original, target, [message, options])
74
54
  );
75
55
  };
76
56
  }
77
-
78
- if (prop === 'sendBatch') {
79
- const original = Reflect.get(target, prop, receiver) ;
80
- return function (
81
-
82
- messages,
83
- options,
84
- ) {
57
+ if (prop === "sendBatch") {
58
+ const original = Reflect.get(target, prop, receiver);
59
+ return function(messages, options) {
85
60
  const messageArray = Array.from(messages);
86
61
  const totalBodySize = messageArray.reduce((acc, m) => {
87
62
  const size = getBodySize(m.body);
88
- if (size === undefined) {
63
+ if (size === void 0) {
89
64
  return acc;
90
65
  }
91
66
  return (acc ?? 0) + size;
92
- }, undefined);
93
-
94
- return startPublishSpan({ bindingName, bodySize: totalBodySize, messageCount: messageArray.length }, () =>
95
- Reflect.apply(original, target, [messageArray, options]),
67
+ }, void 0);
68
+ return startPublishSpan(
69
+ { bindingName, bodySize: totalBodySize, messageCount: messageArray.length },
70
+ () => Reflect.apply(original, target, [messageArray, options])
96
71
  );
97
72
  };
98
73
  }
99
-
100
74
  return Reflect.get(target, prop, receiver);
101
- },
75
+ }
102
76
  });
103
77
  }
104
78
 
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentQueueProducer.js","sources":["../../../../src/instrumentations/worker/instrumentQueueProducer.ts"],"sourcesContent":["import type { MessageSendRequest, Queue, QueueSendBatchOptions, QueueSendOptions } from '@cloudflare/workers-types';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, startSpan } from '@sentry/core';\n\nconst ORIGIN = 'auto.faas.cloudflare.queue';\n\nfunction startPublishSpan<T>(\n options: {\n bindingName: string;\n bodySize: number | undefined;\n messageCount?: number;\n },\n callback: () => T,\n): T {\n const { bindingName, bodySize, messageCount } = options;\n\n return startSpan(\n {\n op: 'queue.publish',\n name: `send ${bindingName}`,\n attributes: {\n 'messaging.system': 'cloudflare',\n 'messaging.destination.name': bindingName,\n 'messaging.operation.type': 'send',\n 'messaging.operation.name': 'send',\n ...(messageCount !== undefined && { 'messaging.batch.message_count': messageCount }),\n 'messaging.message.body.size': bodySize,\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'queue.publish',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n },\n },\n callback,\n );\n}\n\nfunction getBodySize(body: unknown): number | undefined {\n if (body == null) {\n return undefined;\n }\n\n if (typeof body === 'string') {\n return new TextEncoder().encode(body).byteLength;\n }\n\n if (body instanceof ArrayBuffer) {\n return body.byteLength;\n }\n\n if (ArrayBuffer.isView(body)) {\n return body.byteLength;\n }\n\n try {\n return new TextEncoder().encode(JSON.stringify(body)).byteLength;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Wraps a Queue producer binding to create `queue.publish` spans on\n * `send` and `sendBatch` calls.\n *\n * The queue's own name is not available on the binding object, so we use\n * the env binding key (e.g. `MY_QUEUE`) as `messaging.destination.name`.\n */\nexport function instrumentQueueProducer<T extends Queue>(queue: T, bindingName: string): T {\n return new Proxy(queue, {\n get(target, prop, receiver) {\n if (prop === 'send') {\n const original = Reflect.get(target, prop, receiver) as Queue['send'];\n\n return function (this: unknown, message: unknown, options?: QueueSendOptions): Promise<void> {\n return startPublishSpan({ bindingName, bodySize: getBodySize(message) }, () =>\n Reflect.apply(original, target, [message, options]),\n );\n };\n }\n\n if (prop === 'sendBatch') {\n const original = Reflect.get(target, prop, receiver) as Queue['sendBatch'];\n return function (\n this: unknown,\n messages: Iterable<MessageSendRequest>,\n options?: QueueSendBatchOptions,\n ): Promise<void> {\n const messageArray = Array.from(messages);\n const totalBodySize = messageArray.reduce<number | undefined>((acc, m) => {\n const size = getBodySize(m.body);\n if (size === undefined) {\n return acc;\n }\n return (acc ?? 0) + size;\n }, undefined);\n\n return startPublishSpan({ bindingName, bodySize: totalBodySize, messageCount: messageArray.length }, () =>\n Reflect.apply(original, target, [messageArray, options]),\n );\n };\n }\n\n return Reflect.get(target, prop, receiver);\n },\n });\n}\n"],"names":["startSpan","SEMANTIC_ATTRIBUTE_SENTRY_OP","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"],"mappings":"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"}
1
+ {"version":3,"file":"instrumentQueueProducer.js","sources":["../../../../src/instrumentations/worker/instrumentQueueProducer.ts"],"sourcesContent":["import type { MessageSendRequest, Queue, QueueSendBatchOptions, QueueSendOptions } from '@cloudflare/workers-types';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, startSpan } from '@sentry/core';\n\nconst ORIGIN = 'auto.faas.cloudflare.queue';\n\nfunction startPublishSpan<T>(\n options: {\n bindingName: string;\n bodySize: number | undefined;\n messageCount?: number;\n },\n callback: () => T,\n): T {\n const { bindingName, bodySize, messageCount } = options;\n\n return startSpan(\n {\n op: 'queue.publish',\n name: `send ${bindingName}`,\n attributes: {\n 'messaging.system': 'cloudflare',\n 'messaging.destination.name': bindingName,\n 'messaging.operation.type': 'send',\n 'messaging.operation.name': 'send',\n ...(messageCount !== undefined && { 'messaging.batch.message_count': messageCount }),\n 'messaging.message.body.size': bodySize,\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'queue.publish',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n },\n },\n callback,\n );\n}\n\nfunction getBodySize(body: unknown): number | undefined {\n if (body == null) {\n return undefined;\n }\n\n if (typeof body === 'string') {\n return new TextEncoder().encode(body).byteLength;\n }\n\n if (body instanceof ArrayBuffer) {\n return body.byteLength;\n }\n\n if (ArrayBuffer.isView(body)) {\n return body.byteLength;\n }\n\n try {\n return new TextEncoder().encode(JSON.stringify(body)).byteLength;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Wraps a Queue producer binding to create `queue.publish` spans on\n * `send` and `sendBatch` calls.\n *\n * The queue's own name is not available on the binding object, so we use\n * the env binding key (e.g. `MY_QUEUE`) as `messaging.destination.name`.\n */\nexport function instrumentQueueProducer<T extends Queue>(queue: T, bindingName: string): T {\n return new Proxy(queue, {\n get(target, prop, receiver) {\n if (prop === 'send') {\n const original = Reflect.get(target, prop, receiver) as Queue['send'];\n\n return function (this: unknown, message: unknown, options?: QueueSendOptions): Promise<void> {\n return startPublishSpan({ bindingName, bodySize: getBodySize(message) }, () =>\n Reflect.apply(original, target, [message, options]),\n );\n };\n }\n\n if (prop === 'sendBatch') {\n const original = Reflect.get(target, prop, receiver) as Queue['sendBatch'];\n return function (\n this: unknown,\n messages: Iterable<MessageSendRequest>,\n options?: QueueSendBatchOptions,\n ): Promise<void> {\n const messageArray = Array.from(messages);\n const totalBodySize = messageArray.reduce<number | undefined>((acc, m) => {\n const size = getBodySize(m.body);\n if (size === undefined) {\n return acc;\n }\n return (acc ?? 0) + size;\n }, undefined);\n\n return startPublishSpan({ bindingName, bodySize: totalBodySize, messageCount: messageArray.length }, () =>\n Reflect.apply(original, target, [messageArray, options]),\n );\n };\n }\n\n return Reflect.get(target, prop, receiver);\n },\n });\n}\n"],"names":["startSpan","SEMANTIC_ATTRIBUTE_SENTRY_OP","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"],"mappings":"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"}