@sentry/cloudflare 10.69.0 → 11.0.0-alpha.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 (771) hide show
  1. package/README.md +3 -7
  2. package/build/cjs/{sdk.js → dev/baseSdk.js} +27 -17
  3. package/build/cjs/dev/baseSdk.js.map +1 -0
  4. package/build/cjs/dev/client.js.map +1 -0
  5. package/build/cjs/dev/debug-build.js.map +1 -0
  6. package/build/cjs/dev/defineCloudflareOptions.js.map +1 -0
  7. package/build/cjs/dev/durableobject.js +234 -0
  8. package/build/cjs/dev/durableobject.js.map +1 -0
  9. package/build/cjs/dev/flush.js.map +1 -0
  10. package/build/cjs/{index.js → dev/index.js} +15 -17
  11. package/build/cjs/{index.js.map → dev/index.js.map} +1 -1
  12. package/build/cjs/dev/instrument.js.map +1 -0
  13. package/build/cjs/{instrumentations → dev/instrumentations}/agents/index.js +2 -0
  14. package/build/cjs/dev/instrumentations/agents/index.js.map +1 -0
  15. package/build/cjs/{instrumentations → dev/instrumentations}/agents/instrumentAgentCallableRpc.js +2 -2
  16. package/build/cjs/dev/instrumentations/agents/instrumentAgentCallableRpc.js.map +1 -0
  17. package/build/cjs/dev/instrumentations/agents/instrumentAgentRequestConversation.js +19 -0
  18. package/build/cjs/dev/instrumentations/agents/instrumentAgentRequestConversation.js.map +1 -0
  19. package/build/cjs/{instrumentations → dev/instrumentations}/agents/instrumentChatAgentConversation.js +3 -3
  20. package/build/cjs/dev/instrumentations/agents/instrumentChatAgentConversation.js.map +1 -0
  21. package/build/cjs/dev/instrumentations/agents/types.js +77 -0
  22. package/build/cjs/dev/instrumentations/agents/types.js.map +1 -0
  23. package/build/cjs/dev/instrumentations/instrumentDurableObjectNamespace.js.map +1 -0
  24. package/build/cjs/dev/instrumentations/instrumentDurableObjectStorage.js.map +1 -0
  25. package/build/cjs/dev/instrumentations/instrumentDurableObjectSyncKvStorage.js.map +1 -0
  26. package/build/cjs/dev/instrumentations/instrumentSqlStorage.js.map +1 -0
  27. package/build/cjs/{instrumentations → dev/instrumentations}/instrumentWorkerEntrypoint.js +3 -3
  28. package/build/cjs/dev/instrumentations/instrumentWorkerEntrypoint.js.map +1 -0
  29. package/build/cjs/{instrumentations → dev/instrumentations}/worker/instrumentD1.js +0 -4
  30. package/build/cjs/dev/instrumentations/worker/instrumentD1.js.map +1 -0
  31. package/build/cjs/{instrumentations → dev/instrumentations}/worker/instrumentEmail.js +3 -1
  32. package/build/cjs/dev/instrumentations/worker/instrumentEmail.js.map +1 -0
  33. package/build/cjs/{instrumentations → dev/instrumentations}/worker/instrumentEnv.js +3 -4
  34. package/build/cjs/dev/instrumentations/worker/instrumentEnv.js.map +1 -0
  35. package/build/cjs/{instrumentations → dev/instrumentations}/worker/instrumentFetch.js +9 -3
  36. package/build/cjs/dev/instrumentations/worker/instrumentFetch.js.map +1 -0
  37. package/build/cjs/dev/instrumentations/worker/instrumentFetcher.js.map +1 -0
  38. package/build/cjs/{instrumentations → dev/instrumentations}/worker/instrumentQueue.js +3 -2
  39. package/build/cjs/dev/instrumentations/worker/instrumentQueue.js.map +1 -0
  40. package/build/cjs/dev/instrumentations/worker/instrumentQueueProducer.js.map +1 -0
  41. package/build/cjs/dev/instrumentations/worker/instrumentR2.js.map +1 -0
  42. package/build/cjs/dev/instrumentations/worker/instrumentRateLimit.js.map +1 -0
  43. package/build/cjs/{instrumentations → dev/instrumentations}/worker/instrumentScheduled.js +3 -1
  44. package/build/cjs/dev/instrumentations/worker/instrumentScheduled.js.map +1 -0
  45. package/build/cjs/dev/instrumentations/worker/instrumentTail.js.map +1 -0
  46. package/build/cjs/{integrations → dev/integrations}/fetch.js +1 -1
  47. package/build/cjs/dev/integrations/fetch.js.map +1 -0
  48. package/build/cjs/{integrations → dev/integrations}/httpServer.js +5 -4
  49. package/build/cjs/dev/integrations/httpServer.js.map +1 -0
  50. package/build/cjs/dev/integrations/spotlight.js.map +1 -0
  51. package/build/cjs/{nodejs_compat → dev}/integrations/tracing/vercelai.js +6 -6
  52. package/build/cjs/dev/integrations/tracing/vercelai.js.map +1 -0
  53. package/build/cjs/dev/opentelemetry/tracer.js.map +1 -0
  54. package/build/cjs/{options.js → dev/options.js} +8 -0
  55. package/build/cjs/dev/options.js.map +1 -0
  56. package/build/cjs/{pages-plugin.js → dev/pages-plugin.js} +8 -3
  57. package/build/cjs/dev/pages-plugin.js.map +1 -0
  58. package/build/cjs/{request.js → dev/request.js} +23 -12
  59. package/build/cjs/dev/request.js.map +1 -0
  60. package/build/cjs/dev/scope-utils.js.map +1 -0
  61. package/build/cjs/dev/sdk.js +19 -0
  62. package/build/cjs/dev/sdk.js.map +1 -0
  63. package/build/cjs/dev/transport.js.map +1 -0
  64. package/build/cjs/{utils → dev/utils}/instrumentContext.js +8 -13
  65. package/build/cjs/dev/utils/instrumentContext.js.map +1 -0
  66. package/build/cjs/dev/utils/internalSqlQuery.js.map +1 -0
  67. package/build/cjs/dev/utils/internalStorageKey.js.map +1 -0
  68. package/build/cjs/dev/utils/invocationScope.js +12 -0
  69. package/build/cjs/dev/utils/invocationScope.js.map +1 -0
  70. package/build/cjs/dev/utils/isBinding.js.map +1 -0
  71. package/build/cjs/dev/utils/isCloudflareClass.js.map +1 -0
  72. package/build/cjs/{utils → dev/utils}/rpcMeta.js +4 -0
  73. package/build/cjs/dev/utils/rpcMeta.js.map +1 -0
  74. package/build/cjs/dev/utils/streaming.js.map +1 -0
  75. package/build/cjs/dev/utils/traceLinks.js.map +1 -0
  76. package/build/cjs/dev/vendor/stacktrace.js.map +1 -0
  77. package/build/cjs/dev/vite/agentClass.js.map +1 -0
  78. package/build/cjs/dev/vite/autoInstrument.js.map +1 -0
  79. package/build/cjs/{vite → dev/vite}/index.js +3 -1
  80. package/build/cjs/dev/vite/index.js.map +1 -0
  81. package/build/cjs/dev/vite/instrumentFile.js.map +1 -0
  82. package/build/cjs/dev/vite/moduleShape.js.map +1 -0
  83. package/build/cjs/dev/vite/transform.js.map +1 -0
  84. package/build/cjs/dev/vite/workerEntrypoint.js.map +1 -0
  85. package/build/cjs/dev/vite/wranglerConfig.js.map +1 -0
  86. package/build/cjs/{withSentry.js → dev/withSentry.js} +2 -19
  87. package/build/cjs/dev/withSentry.js.map +1 -0
  88. package/build/cjs/{workflows.js → dev/workflows.js} +9 -4
  89. package/build/cjs/dev/workflows.js.map +1 -0
  90. package/build/cjs/{wrapMethodWithSentry.js → dev/wrapMethodWithSentry.js} +2 -3
  91. package/build/cjs/dev/wrapMethodWithSentry.js.map +1 -0
  92. package/build/cjs/prod/baseSdk.js +73 -0
  93. package/build/cjs/prod/baseSdk.js.map +1 -0
  94. package/build/cjs/prod/client.js +122 -0
  95. package/build/cjs/prod/client.js.map +1 -0
  96. package/build/cjs/prod/debug-build.js +6 -0
  97. package/build/cjs/prod/debug-build.js.map +1 -0
  98. package/build/cjs/prod/defineCloudflareOptions.js +11 -0
  99. package/build/cjs/prod/defineCloudflareOptions.js.map +1 -0
  100. package/build/cjs/prod/durableobject.js +234 -0
  101. package/build/cjs/prod/durableobject.js.map +1 -0
  102. package/build/cjs/prod/flush.js +87 -0
  103. package/build/cjs/prod/flush.js.map +1 -0
  104. package/build/cjs/{nodejs_compat → prod}/index.js +33 -37
  105. package/build/cjs/{nodejs_compat → prod}/index.js.map +1 -1
  106. package/build/cjs/prod/instrument.js +52 -0
  107. package/build/cjs/prod/instrument.js.map +1 -0
  108. package/build/cjs/prod/instrumentations/agents/index.js +16 -0
  109. package/build/cjs/prod/instrumentations/agents/index.js.map +1 -0
  110. package/build/cjs/prod/instrumentations/agents/instrumentAgentCallableRpc.js +52 -0
  111. package/build/cjs/prod/instrumentations/agents/instrumentAgentCallableRpc.js.map +1 -0
  112. package/build/cjs/prod/instrumentations/agents/instrumentAgentRequestConversation.js +19 -0
  113. package/build/cjs/prod/instrumentations/agents/instrumentAgentRequestConversation.js.map +1 -0
  114. package/build/cjs/prod/instrumentations/agents/instrumentChatAgentConversation.js +31 -0
  115. package/build/cjs/prod/instrumentations/agents/instrumentChatAgentConversation.js.map +1 -0
  116. package/build/cjs/prod/instrumentations/agents/types.js +77 -0
  117. package/build/cjs/prod/instrumentations/agents/types.js.map +1 -0
  118. package/build/cjs/prod/instrumentations/instrumentDurableObjectNamespace.js +41 -0
  119. package/build/cjs/prod/instrumentations/instrumentDurableObjectNamespace.js.map +1 -0
  120. package/build/cjs/prod/instrumentations/instrumentDurableObjectStorage.js +72 -0
  121. package/build/cjs/prod/instrumentations/instrumentDurableObjectStorage.js.map +1 -0
  122. package/build/cjs/prod/instrumentations/instrumentDurableObjectSyncKvStorage.js +40 -0
  123. package/build/cjs/prod/instrumentations/instrumentDurableObjectSyncKvStorage.js.map +1 -0
  124. package/build/cjs/prod/instrumentations/instrumentSqlStorage.js +42 -0
  125. package/build/cjs/prod/instrumentations/instrumentSqlStorage.js.map +1 -0
  126. package/build/cjs/prod/instrumentations/instrumentWorkerEntrypoint.js +139 -0
  127. package/build/cjs/prod/instrumentations/instrumentWorkerEntrypoint.js.map +1 -0
  128. package/build/cjs/prod/instrumentations/worker/instrumentD1.js +161 -0
  129. package/build/cjs/prod/instrumentations/worker/instrumentD1.js.map +1 -0
  130. package/build/cjs/prod/instrumentations/worker/instrumentEmail.js +63 -0
  131. package/build/cjs/prod/instrumentations/worker/instrumentEmail.js.map +1 -0
  132. package/build/cjs/prod/instrumentations/worker/instrumentEnv.js +90 -0
  133. package/build/cjs/prod/instrumentations/worker/instrumentEnv.js.map +1 -0
  134. package/build/cjs/prod/instrumentations/worker/instrumentFetch.js +54 -0
  135. package/build/cjs/prod/instrumentations/worker/instrumentFetch.js.map +1 -0
  136. package/build/cjs/prod/instrumentations/worker/instrumentFetcher.js +24 -0
  137. package/build/cjs/prod/instrumentations/worker/instrumentFetcher.js.map +1 -0
  138. package/build/cjs/prod/instrumentations/worker/instrumentQueue.js +82 -0
  139. package/build/cjs/prod/instrumentations/worker/instrumentQueue.js.map +1 -0
  140. package/build/cjs/prod/instrumentations/worker/instrumentQueueProducer.js +80 -0
  141. package/build/cjs/prod/instrumentations/worker/instrumentQueueProducer.js.map +1 -0
  142. package/build/cjs/prod/instrumentations/worker/instrumentR2.js +124 -0
  143. package/build/cjs/prod/instrumentations/worker/instrumentR2.js.map +1 -0
  144. package/build/cjs/prod/instrumentations/worker/instrumentRateLimit.js +29 -0
  145. package/build/cjs/prod/instrumentations/worker/instrumentRateLimit.js.map +1 -0
  146. package/build/cjs/prod/instrumentations/worker/instrumentScheduled.js +78 -0
  147. package/build/cjs/prod/instrumentations/worker/instrumentScheduled.js.map +1 -0
  148. package/build/cjs/prod/instrumentations/worker/instrumentTail.js +60 -0
  149. package/build/cjs/prod/instrumentations/worker/instrumentTail.js.map +1 -0
  150. package/build/cjs/prod/integrations/fetch.js +119 -0
  151. package/build/cjs/prod/integrations/fetch.js.map +1 -0
  152. package/build/cjs/prod/integrations/httpServer.js +36 -0
  153. package/build/cjs/prod/integrations/httpServer.js.map +1 -0
  154. package/build/cjs/prod/integrations/spotlight.js +64 -0
  155. package/build/cjs/prod/integrations/spotlight.js.map +1 -0
  156. package/build/cjs/{integrations → prod/integrations}/tracing/vercelai.js +5 -5
  157. package/build/cjs/prod/integrations/tracing/vercelai.js.map +1 -0
  158. package/build/cjs/prod/opentelemetry/tracer.js +49 -0
  159. package/build/cjs/prod/opentelemetry/tracer.js.map +1 -0
  160. package/build/cjs/prod/options.js +33 -0
  161. package/build/cjs/prod/options.js.map +1 -0
  162. package/build/cjs/prod/pages-plugin.js +24 -0
  163. package/build/cjs/prod/pages-plugin.js.map +1 -0
  164. package/build/cjs/prod/request.js +132 -0
  165. package/build/cjs/prod/request.js.map +1 -0
  166. package/build/cjs/prod/scope-utils.js +22 -0
  167. package/build/cjs/prod/scope-utils.js.map +1 -0
  168. package/build/cjs/prod/sdk.js +19 -0
  169. package/build/cjs/prod/sdk.js.map +1 -0
  170. package/build/cjs/prod/transport.js +75 -0
  171. package/build/cjs/prod/transport.js.map +1 -0
  172. package/build/cjs/prod/utils/instrumentContext.js +63 -0
  173. package/build/cjs/prod/utils/instrumentContext.js.map +1 -0
  174. package/build/cjs/prod/utils/internalSqlQuery.js +25 -0
  175. package/build/cjs/prod/utils/internalSqlQuery.js.map +1 -0
  176. package/build/cjs/prod/utils/internalStorageKey.js +44 -0
  177. package/build/cjs/prod/utils/internalStorageKey.js.map +1 -0
  178. package/build/cjs/prod/utils/invocationScope.js +12 -0
  179. package/build/cjs/prod/utils/invocationScope.js.map +1 -0
  180. package/build/cjs/prod/utils/isBinding.js +37 -0
  181. package/build/cjs/prod/utils/isBinding.js.map +1 -0
  182. package/build/cjs/prod/utils/isCloudflareClass.js +23 -0
  183. package/build/cjs/prod/utils/isCloudflareClass.js.map +1 -0
  184. package/build/cjs/prod/utils/rpcMeta.js +39 -0
  185. package/build/cjs/prod/utils/rpcMeta.js.map +1 -0
  186. package/build/cjs/prod/utils/streaming.js +16 -0
  187. package/build/cjs/prod/utils/streaming.js.map +1 -0
  188. package/build/cjs/prod/utils/traceLinks.js +54 -0
  189. package/build/cjs/prod/utils/traceLinks.js.map +1 -0
  190. package/build/cjs/prod/vendor/stacktrace.js +28 -0
  191. package/build/cjs/prod/vendor/stacktrace.js.map +1 -0
  192. package/build/cjs/prod/vite/agentClass.js +114 -0
  193. package/build/cjs/prod/vite/agentClass.js.map +1 -0
  194. package/build/cjs/prod/vite/autoInstrument.js +94 -0
  195. package/build/cjs/prod/vite/autoInstrument.js.map +1 -0
  196. package/build/cjs/prod/vite/index.js +16 -0
  197. package/build/cjs/prod/vite/index.js.map +1 -0
  198. package/build/cjs/prod/vite/instrumentFile.js +31 -0
  199. package/build/cjs/prod/vite/instrumentFile.js.map +1 -0
  200. package/build/cjs/prod/vite/moduleShape.js +231 -0
  201. package/build/cjs/prod/vite/moduleShape.js.map +1 -0
  202. package/build/cjs/prod/vite/transform.js +149 -0
  203. package/build/cjs/prod/vite/transform.js.map +1 -0
  204. package/build/cjs/prod/vite/workerEntrypoint.js +66 -0
  205. package/build/cjs/prod/vite/workerEntrypoint.js.map +1 -0
  206. package/build/cjs/prod/vite/wranglerConfig.js +54 -0
  207. package/build/cjs/prod/vite/wranglerConfig.js.map +1 -0
  208. package/build/cjs/prod/withSentry.js +29 -0
  209. package/build/cjs/prod/withSentry.js.map +1 -0
  210. package/build/cjs/prod/workflows.js +139 -0
  211. package/build/cjs/prod/workflows.js.map +1 -0
  212. package/build/cjs/prod/wrapMethodWithSentry.js +134 -0
  213. package/build/cjs/prod/wrapMethodWithSentry.js.map +1 -0
  214. package/build/esm/{sdk.js → dev/baseSdk.js} +26 -17
  215. package/build/esm/dev/baseSdk.js.map +1 -0
  216. package/build/esm/dev/client.js.map +1 -0
  217. package/build/esm/dev/debug-build.js.map +1 -0
  218. package/build/esm/dev/defineCloudflareOptions.js.map +1 -0
  219. package/build/esm/dev/durableobject.js +229 -0
  220. package/build/esm/dev/durableobject.js.map +1 -0
  221. package/build/esm/dev/flush.js.map +1 -0
  222. package/build/esm/dev/index.js +15 -0
  223. package/build/esm/{index.js.map → dev/index.js.map} +1 -1
  224. package/build/esm/dev/instrument.js.map +1 -0
  225. package/build/esm/{instrumentations → dev/instrumentations}/agents/index.js +2 -0
  226. package/build/esm/dev/instrumentations/agents/index.js.map +1 -0
  227. package/build/esm/{instrumentations → dev/instrumentations}/agents/instrumentAgentCallableRpc.js +2 -2
  228. package/build/esm/dev/instrumentations/agents/instrumentAgentCallableRpc.js.map +1 -0
  229. package/build/esm/dev/instrumentations/agents/instrumentAgentRequestConversation.js +17 -0
  230. package/build/esm/dev/instrumentations/agents/instrumentAgentRequestConversation.js.map +1 -0
  231. package/build/esm/{instrumentations → dev/instrumentations}/agents/instrumentChatAgentConversation.js +4 -4
  232. package/build/esm/dev/instrumentations/agents/instrumentChatAgentConversation.js.map +1 -0
  233. package/build/esm/dev/instrumentations/agents/types.js +69 -0
  234. package/build/esm/dev/instrumentations/agents/types.js.map +1 -0
  235. package/build/esm/dev/instrumentations/instrumentDurableObjectNamespace.js.map +1 -0
  236. package/build/esm/dev/instrumentations/instrumentDurableObjectStorage.js.map +1 -0
  237. package/build/esm/dev/instrumentations/instrumentDurableObjectSyncKvStorage.js.map +1 -0
  238. package/build/esm/dev/instrumentations/instrumentSqlStorage.js.map +1 -0
  239. package/build/esm/{instrumentations → dev/instrumentations}/instrumentWorkerEntrypoint.js +2 -2
  240. package/build/esm/dev/instrumentations/instrumentWorkerEntrypoint.js.map +1 -0
  241. package/build/esm/{instrumentations → dev/instrumentations}/worker/instrumentD1.js +1 -4
  242. package/build/esm/dev/instrumentations/worker/instrumentD1.js.map +1 -0
  243. package/build/esm/{instrumentations → dev/instrumentations}/worker/instrumentEmail.js +3 -1
  244. package/build/esm/dev/instrumentations/worker/instrumentEmail.js.map +1 -0
  245. package/build/esm/{instrumentations → dev/instrumentations}/worker/instrumentEnv.js +3 -4
  246. package/build/esm/dev/instrumentations/worker/instrumentEnv.js.map +1 -0
  247. package/build/esm/{instrumentations → dev/instrumentations}/worker/instrumentFetch.js +10 -4
  248. package/build/esm/dev/instrumentations/worker/instrumentFetch.js.map +1 -0
  249. package/build/esm/dev/instrumentations/worker/instrumentFetcher.js.map +1 -0
  250. package/build/esm/{instrumentations → dev/instrumentations}/worker/instrumentQueue.js +4 -3
  251. package/build/esm/dev/instrumentations/worker/instrumentQueue.js.map +1 -0
  252. package/build/esm/dev/instrumentations/worker/instrumentQueueProducer.js.map +1 -0
  253. package/build/esm/dev/instrumentations/worker/instrumentR2.js.map +1 -0
  254. package/build/esm/dev/instrumentations/worker/instrumentRateLimit.js.map +1 -0
  255. package/build/esm/{instrumentations → dev/instrumentations}/worker/instrumentScheduled.js +3 -1
  256. package/build/esm/dev/instrumentations/worker/instrumentScheduled.js.map +1 -0
  257. package/build/esm/dev/instrumentations/worker/instrumentTail.js.map +1 -0
  258. package/build/esm/{integrations → dev/integrations}/fetch.js +1 -1
  259. package/build/esm/dev/integrations/fetch.js.map +1 -0
  260. package/build/esm/{integrations → dev/integrations}/httpServer.js +5 -4
  261. package/build/esm/dev/integrations/httpServer.js.map +1 -0
  262. package/build/esm/dev/integrations/spotlight.js.map +1 -0
  263. package/build/esm/{integrations → dev/integrations}/tracing/vercelai.js +5 -5
  264. package/build/esm/dev/integrations/tracing/vercelai.js.map +1 -0
  265. package/build/esm/dev/opentelemetry/tracer.js.map +1 -0
  266. package/build/esm/{options.js → dev/options.js} +8 -0
  267. package/build/esm/dev/options.js.map +1 -0
  268. package/build/esm/dev/package.json +1 -0
  269. package/build/esm/{pages-plugin.js → dev/pages-plugin.js} +8 -3
  270. package/build/esm/dev/pages-plugin.js.map +1 -0
  271. package/build/esm/{request.js → dev/request.js} +24 -14
  272. package/build/esm/dev/request.js.map +1 -0
  273. package/build/esm/dev/scope-utils.js.map +1 -0
  274. package/build/esm/dev/sdk.js +16 -0
  275. package/build/esm/dev/sdk.js.map +1 -0
  276. package/build/esm/dev/transport.js.map +1 -0
  277. package/build/esm/{utils → dev/utils}/instrumentContext.js +8 -13
  278. package/build/esm/dev/utils/instrumentContext.js.map +1 -0
  279. package/build/esm/dev/utils/internalSqlQuery.js.map +1 -0
  280. package/build/esm/dev/utils/internalStorageKey.js.map +1 -0
  281. package/build/esm/dev/utils/invocationScope.js +10 -0
  282. package/build/esm/dev/utils/invocationScope.js.map +1 -0
  283. package/build/esm/dev/utils/isBinding.js.map +1 -0
  284. package/build/esm/dev/utils/isCloudflareClass.js.map +1 -0
  285. package/build/esm/{utils → dev/utils}/rpcMeta.js +4 -1
  286. package/build/esm/dev/utils/rpcMeta.js.map +1 -0
  287. package/build/esm/dev/utils/streaming.js.map +1 -0
  288. package/build/esm/{utils → dev/utils}/traceLinks.js +1 -1
  289. package/build/esm/dev/utils/traceLinks.js.map +1 -0
  290. package/build/esm/dev/vendor/stacktrace.js.map +1 -0
  291. package/build/esm/dev/vite/agentClass.js.map +1 -0
  292. package/build/esm/dev/vite/autoInstrument.js.map +1 -0
  293. package/build/esm/{vite → dev/vite}/index.js +3 -1
  294. package/build/esm/dev/vite/index.js.map +1 -0
  295. package/build/esm/dev/vite/instrumentFile.js.map +1 -0
  296. package/build/esm/dev/vite/moduleShape.js.map +1 -0
  297. package/build/esm/dev/vite/transform.js.map +1 -0
  298. package/build/esm/dev/vite/workerEntrypoint.js.map +1 -0
  299. package/build/esm/dev/vite/wranglerConfig.js.map +1 -0
  300. package/build/esm/{withSentry.js → dev/withSentry.js} +1 -18
  301. package/build/esm/dev/withSentry.js.map +1 -0
  302. package/build/esm/{workflows.js → dev/workflows.js} +9 -4
  303. package/build/esm/dev/workflows.js.map +1 -0
  304. package/build/esm/{wrapMethodWithSentry.js → dev/wrapMethodWithSentry.js} +3 -4
  305. package/build/esm/dev/wrapMethodWithSentry.js.map +1 -0
  306. package/build/esm/prod/baseSdk.js +69 -0
  307. package/build/esm/prod/baseSdk.js.map +1 -0
  308. package/build/esm/prod/client.js +120 -0
  309. package/build/esm/prod/client.js.map +1 -0
  310. package/build/esm/prod/debug-build.js +4 -0
  311. package/build/esm/prod/debug-build.js.map +1 -0
  312. package/build/esm/prod/defineCloudflareOptions.js +9 -0
  313. package/build/esm/prod/defineCloudflareOptions.js.map +1 -0
  314. package/build/esm/prod/durableobject.js +229 -0
  315. package/build/esm/prod/durableobject.js.map +1 -0
  316. package/build/esm/prod/flush.js +83 -0
  317. package/build/esm/prod/flush.js.map +1 -0
  318. package/build/esm/prod/index.js +15 -0
  319. package/build/esm/{nodejs_compat → prod}/index.js.map +1 -1
  320. package/build/esm/prod/instrument.js +48 -0
  321. package/build/esm/prod/instrument.js.map +1 -0
  322. package/build/esm/prod/instrumentations/agents/index.js +14 -0
  323. package/build/esm/prod/instrumentations/agents/index.js.map +1 -0
  324. package/build/esm/prod/instrumentations/agents/instrumentAgentCallableRpc.js +50 -0
  325. package/build/esm/prod/instrumentations/agents/instrumentAgentCallableRpc.js.map +1 -0
  326. package/build/esm/prod/instrumentations/agents/instrumentAgentRequestConversation.js +17 -0
  327. package/build/esm/prod/instrumentations/agents/instrumentAgentRequestConversation.js.map +1 -0
  328. package/build/esm/prod/instrumentations/agents/instrumentChatAgentConversation.js +29 -0
  329. package/build/esm/prod/instrumentations/agents/instrumentChatAgentConversation.js.map +1 -0
  330. package/build/esm/prod/instrumentations/agents/types.js +69 -0
  331. package/build/esm/prod/instrumentations/agents/types.js.map +1 -0
  332. package/build/esm/prod/instrumentations/instrumentDurableObjectNamespace.js +38 -0
  333. package/build/esm/prod/instrumentations/instrumentDurableObjectNamespace.js.map +1 -0
  334. package/build/esm/prod/instrumentations/instrumentDurableObjectStorage.js +70 -0
  335. package/build/esm/prod/instrumentations/instrumentDurableObjectStorage.js.map +1 -0
  336. package/build/esm/prod/instrumentations/instrumentDurableObjectSyncKvStorage.js +38 -0
  337. package/build/esm/prod/instrumentations/instrumentDurableObjectSyncKvStorage.js.map +1 -0
  338. package/build/esm/prod/instrumentations/instrumentSqlStorage.js +40 -0
  339. package/build/esm/prod/instrumentations/instrumentSqlStorage.js.map +1 -0
  340. package/build/esm/prod/instrumentations/instrumentWorkerEntrypoint.js +137 -0
  341. package/build/esm/prod/instrumentations/instrumentWorkerEntrypoint.js.map +1 -0
  342. package/build/esm/prod/instrumentations/worker/instrumentD1.js +159 -0
  343. package/build/esm/prod/instrumentations/worker/instrumentD1.js.map +1 -0
  344. package/build/esm/prod/instrumentations/worker/instrumentEmail.js +61 -0
  345. package/build/esm/prod/instrumentations/worker/instrumentEmail.js.map +1 -0
  346. package/build/esm/prod/instrumentations/worker/instrumentEnv.js +88 -0
  347. package/build/esm/prod/instrumentations/worker/instrumentEnv.js.map +1 -0
  348. package/build/esm/prod/instrumentations/worker/instrumentFetch.js +51 -0
  349. package/build/esm/prod/instrumentations/worker/instrumentFetch.js.map +1 -0
  350. package/build/esm/prod/instrumentations/worker/instrumentFetcher.js +22 -0
  351. package/build/esm/prod/instrumentations/worker/instrumentFetcher.js.map +1 -0
  352. package/build/esm/prod/instrumentations/worker/instrumentQueue.js +79 -0
  353. package/build/esm/prod/instrumentations/worker/instrumentQueue.js.map +1 -0
  354. package/build/esm/prod/instrumentations/worker/instrumentQueueProducer.js +78 -0
  355. package/build/esm/prod/instrumentations/worker/instrumentQueueProducer.js.map +1 -0
  356. package/build/esm/prod/instrumentations/worker/instrumentR2.js +122 -0
  357. package/build/esm/prod/instrumentations/worker/instrumentR2.js.map +1 -0
  358. package/build/esm/prod/instrumentations/worker/instrumentRateLimit.js +27 -0
  359. package/build/esm/prod/instrumentations/worker/instrumentRateLimit.js.map +1 -0
  360. package/build/esm/prod/instrumentations/worker/instrumentScheduled.js +75 -0
  361. package/build/esm/prod/instrumentations/worker/instrumentScheduled.js.map +1 -0
  362. package/build/esm/prod/instrumentations/worker/instrumentTail.js +57 -0
  363. package/build/esm/prod/instrumentations/worker/instrumentTail.js.map +1 -0
  364. package/build/esm/prod/integrations/fetch.js +117 -0
  365. package/build/esm/prod/integrations/fetch.js.map +1 -0
  366. package/build/esm/prod/integrations/httpServer.js +33 -0
  367. package/build/esm/prod/integrations/httpServer.js.map +1 -0
  368. package/build/esm/prod/integrations/spotlight.js +61 -0
  369. package/build/esm/prod/integrations/spotlight.js.map +1 -0
  370. package/build/esm/prod/integrations/tracing/vercelai.js +16 -0
  371. package/build/esm/prod/integrations/tracing/vercelai.js.map +1 -0
  372. package/build/esm/prod/opentelemetry/tracer.js +47 -0
  373. package/build/esm/prod/opentelemetry/tracer.js.map +1 -0
  374. package/build/esm/prod/options.js +31 -0
  375. package/build/esm/prod/options.js.map +1 -0
  376. package/build/esm/prod/package.json +1 -0
  377. package/build/esm/prod/pages-plugin.js +22 -0
  378. package/build/esm/prod/pages-plugin.js.map +1 -0
  379. package/build/esm/prod/request.js +129 -0
  380. package/build/esm/prod/request.js.map +1 -0
  381. package/build/esm/prod/scope-utils.js +18 -0
  382. package/build/esm/prod/scope-utils.js.map +1 -0
  383. package/build/esm/prod/sdk.js +16 -0
  384. package/build/esm/prod/sdk.js.map +1 -0
  385. package/build/esm/prod/transport.js +72 -0
  386. package/build/esm/prod/transport.js.map +1 -0
  387. package/build/esm/prod/utils/instrumentContext.js +61 -0
  388. package/build/esm/prod/utils/instrumentContext.js.map +1 -0
  389. package/build/esm/prod/utils/internalSqlQuery.js +23 -0
  390. package/build/esm/prod/utils/internalSqlQuery.js.map +1 -0
  391. package/build/esm/prod/utils/internalStorageKey.js +41 -0
  392. package/build/esm/prod/utils/internalStorageKey.js.map +1 -0
  393. package/build/esm/prod/utils/invocationScope.js +10 -0
  394. package/build/esm/prod/utils/invocationScope.js.map +1 -0
  395. package/build/esm/prod/utils/isBinding.js +29 -0
  396. package/build/esm/prod/utils/isBinding.js.map +1 -0
  397. package/build/esm/prod/utils/isCloudflareClass.js +21 -0
  398. package/build/esm/prod/utils/isCloudflareClass.js.map +1 -0
  399. package/build/esm/prod/utils/rpcMeta.js +35 -0
  400. package/build/esm/prod/utils/rpcMeta.js.map +1 -0
  401. package/build/esm/prod/utils/streaming.js +14 -0
  402. package/build/esm/prod/utils/streaming.js.map +1 -0
  403. package/build/esm/prod/utils/traceLinks.js +49 -0
  404. package/build/esm/prod/utils/traceLinks.js.map +1 -0
  405. package/build/esm/prod/vendor/stacktrace.js +25 -0
  406. package/build/esm/prod/vendor/stacktrace.js.map +1 -0
  407. package/build/esm/prod/vite/agentClass.js +111 -0
  408. package/build/esm/prod/vite/agentClass.js.map +1 -0
  409. package/build/esm/prod/vite/autoInstrument.js +92 -0
  410. package/build/esm/prod/vite/autoInstrument.js.map +1 -0
  411. package/build/esm/prod/vite/index.js +14 -0
  412. package/build/esm/prod/vite/index.js.map +1 -0
  413. package/build/esm/prod/vite/instrumentFile.js +27 -0
  414. package/build/esm/prod/vite/instrumentFile.js.map +1 -0
  415. package/build/esm/prod/vite/moduleShape.js +227 -0
  416. package/build/esm/prod/vite/moduleShape.js.map +1 -0
  417. package/build/esm/prod/vite/transform.js +147 -0
  418. package/build/esm/prod/vite/transform.js.map +1 -0
  419. package/build/esm/prod/vite/workerEntrypoint.js +64 -0
  420. package/build/esm/prod/vite/workerEntrypoint.js.map +1 -0
  421. package/build/esm/prod/vite/wranglerConfig.js +52 -0
  422. package/build/esm/prod/vite/wranglerConfig.js.map +1 -0
  423. package/build/esm/prod/withSentry.js +27 -0
  424. package/build/esm/prod/withSentry.js.map +1 -0
  425. package/build/esm/prod/workflows.js +136 -0
  426. package/build/esm/prod/workflows.js.map +1 -0
  427. package/build/esm/prod/wrapMethodWithSentry.js +132 -0
  428. package/build/esm/prod/wrapMethodWithSentry.js.map +1 -0
  429. package/build/types/baseSdk.d.ts +28 -0
  430. package/build/types/baseSdk.d.ts.map +1 -0
  431. package/build/types/client.d.ts +12 -39
  432. package/build/types/client.d.ts.map +1 -1
  433. package/build/types/defineCloudflareOptions.d.ts +2 -2
  434. package/build/types/defineCloudflareOptions.d.ts.map +1 -1
  435. package/build/types/durableobject.d.ts +22 -12
  436. package/build/types/durableobject.d.ts.map +1 -1
  437. package/build/types/flush.d.ts +1 -1
  438. package/build/types/flush.d.ts.map +1 -1
  439. package/build/types/index.d.ts +3 -5
  440. package/build/types/index.d.ts.map +1 -1
  441. package/build/types/instrumentations/agents/index.d.ts +4 -3
  442. package/build/types/instrumentations/agents/index.d.ts.map +1 -1
  443. package/build/types/instrumentations/agents/instrumentAgentCallableRpc.d.ts +4 -1
  444. package/build/types/instrumentations/agents/instrumentAgentCallableRpc.d.ts.map +1 -1
  445. package/build/types/instrumentations/agents/instrumentAgentRequestConversation.d.ts +16 -0
  446. package/build/types/instrumentations/agents/instrumentAgentRequestConversation.d.ts.map +1 -0
  447. package/build/types/instrumentations/agents/instrumentChatAgentConversation.d.ts +10 -9
  448. package/build/types/instrumentations/agents/instrumentChatAgentConversation.d.ts.map +1 -1
  449. package/build/types/instrumentations/agents/types.d.ts +63 -18
  450. package/build/types/instrumentations/agents/types.d.ts.map +1 -1
  451. package/build/types/instrumentations/instrumentDurableObjectStorage.d.ts.map +1 -1
  452. package/build/types/instrumentations/instrumentSqlStorage.d.ts.map +1 -1
  453. package/build/types/instrumentations/instrumentWorkerEntrypoint.d.ts +2 -1
  454. package/build/types/instrumentations/instrumentWorkerEntrypoint.d.ts.map +1 -1
  455. package/build/types/instrumentations/worker/instrumentD1.d.ts +0 -16
  456. package/build/types/instrumentations/worker/instrumentD1.d.ts.map +1 -1
  457. package/build/types/instrumentations/worker/instrumentEmail.d.ts +2 -2
  458. package/build/types/instrumentations/worker/instrumentEmail.d.ts.map +1 -1
  459. package/build/types/instrumentations/worker/instrumentEnv.d.ts.map +1 -1
  460. package/build/types/instrumentations/worker/instrumentFetch.d.ts +2 -2
  461. package/build/types/instrumentations/worker/instrumentFetch.d.ts.map +1 -1
  462. package/build/types/instrumentations/worker/instrumentQueue.d.ts +2 -2
  463. package/build/types/instrumentations/worker/instrumentQueue.d.ts.map +1 -1
  464. package/build/types/instrumentations/worker/instrumentScheduled.d.ts +2 -2
  465. package/build/types/instrumentations/worker/instrumentScheduled.d.ts.map +1 -1
  466. package/build/types/instrumentations/worker/instrumentTail.d.ts +2 -2
  467. package/build/types/instrumentations/worker/instrumentTail.d.ts.map +1 -1
  468. package/build/types/integrations/httpServer.d.ts.map +1 -1
  469. package/build/types/integrations/spotlight.d.ts +1 -1
  470. package/build/types/integrations/tracing/vercelai.d.ts +2 -9
  471. package/build/types/integrations/tracing/vercelai.d.ts.map +1 -1
  472. package/build/types/options.d.ts.map +1 -1
  473. package/build/types/pages-plugin.d.ts +1 -1
  474. package/build/types/pages-plugin.d.ts.map +1 -1
  475. package/build/types/request.d.ts +17 -2
  476. package/build/types/request.d.ts.map +1 -1
  477. package/build/types/sdk.d.ts +8 -3
  478. package/build/types/sdk.d.ts.map +1 -1
  479. package/build/types/transport.d.ts.map +1 -1
  480. package/build/types/types.d.ts +85 -0
  481. package/build/types/types.d.ts.map +1 -0
  482. package/build/types/utils/instrumentContext.d.ts.map +1 -1
  483. package/build/types/utils/invocationScope.d.ts +24 -0
  484. package/build/types/utils/invocationScope.d.ts.map +1 -0
  485. package/build/types/utils/isCloudflareClass.d.ts +1 -1
  486. package/build/types/utils/isCloudflareClass.d.ts.map +1 -1
  487. package/build/types/utils/rpcMeta.d.ts +8 -0
  488. package/build/types/utils/rpcMeta.d.ts.map +1 -1
  489. package/build/types/vite/autoInstrument.d.ts.map +1 -1
  490. package/build/types/vite/index.d.ts +20 -44
  491. package/build/types/vite/index.d.ts.map +1 -1
  492. package/build/types/withSentry.d.ts +2 -2
  493. package/build/types/withSentry.d.ts.map +1 -1
  494. package/build/types/workflows.d.ts +5 -4
  495. package/build/types/workflows.d.ts.map +1 -1
  496. package/build/types/wrapMethodWithSentry.d.ts +1 -1
  497. package/build/types/wrapMethodWithSentry.d.ts.map +1 -1
  498. package/package.json +28 -51
  499. package/build/cjs/async.js +0 -63
  500. package/build/cjs/async.js.map +0 -1
  501. package/build/cjs/client.js.map +0 -1
  502. package/build/cjs/debug-build.js.map +0 -1
  503. package/build/cjs/defineCloudflareOptions.js.map +0 -1
  504. package/build/cjs/durableobject.js +0 -155
  505. package/build/cjs/durableobject.js.map +0 -1
  506. package/build/cjs/flush.js.map +0 -1
  507. package/build/cjs/instrument.js.map +0 -1
  508. package/build/cjs/instrumentations/agents/index.js.map +0 -1
  509. package/build/cjs/instrumentations/agents/instrumentAgentCallableRpc.js.map +0 -1
  510. package/build/cjs/instrumentations/agents/instrumentChatAgentConversation.js.map +0 -1
  511. package/build/cjs/instrumentations/agents/types.js +0 -32
  512. package/build/cjs/instrumentations/agents/types.js.map +0 -1
  513. package/build/cjs/instrumentations/instrumentDurableObjectNamespace.js.map +0 -1
  514. package/build/cjs/instrumentations/instrumentDurableObjectStorage.js.map +0 -1
  515. package/build/cjs/instrumentations/instrumentDurableObjectSyncKvStorage.js.map +0 -1
  516. package/build/cjs/instrumentations/instrumentSqlStorage.js.map +0 -1
  517. package/build/cjs/instrumentations/instrumentWorkerEntrypoint.js.map +0 -1
  518. package/build/cjs/instrumentations/worker/instrumentD1.js.map +0 -1
  519. package/build/cjs/instrumentations/worker/instrumentEmail.js.map +0 -1
  520. package/build/cjs/instrumentations/worker/instrumentEnv.js.map +0 -1
  521. package/build/cjs/instrumentations/worker/instrumentFetch.js.map +0 -1
  522. package/build/cjs/instrumentations/worker/instrumentFetcher.js.map +0 -1
  523. package/build/cjs/instrumentations/worker/instrumentQueue.js.map +0 -1
  524. package/build/cjs/instrumentations/worker/instrumentQueueProducer.js.map +0 -1
  525. package/build/cjs/instrumentations/worker/instrumentR2.js.map +0 -1
  526. package/build/cjs/instrumentations/worker/instrumentRateLimit.js.map +0 -1
  527. package/build/cjs/instrumentations/worker/instrumentScheduled.js.map +0 -1
  528. package/build/cjs/instrumentations/worker/instrumentTail.js.map +0 -1
  529. package/build/cjs/integrations/fetch.js.map +0 -1
  530. package/build/cjs/integrations/hono.js +0 -52
  531. package/build/cjs/integrations/hono.js.map +0 -1
  532. package/build/cjs/integrations/httpServer.js.map +0 -1
  533. package/build/cjs/integrations/spotlight.js.map +0 -1
  534. package/build/cjs/integrations/tracing/vercelai.js.map +0 -1
  535. package/build/cjs/nodejs_compat/integrations/tracing/vercelai.js.map +0 -1
  536. package/build/cjs/opentelemetry/tracer.js.map +0 -1
  537. package/build/cjs/options.js.map +0 -1
  538. package/build/cjs/pages-plugin.js.map +0 -1
  539. package/build/cjs/request.js.map +0 -1
  540. package/build/cjs/scope-utils.js.map +0 -1
  541. package/build/cjs/sdk.js.map +0 -1
  542. package/build/cjs/transport.js.map +0 -1
  543. package/build/cjs/utils/instrumentContext.js.map +0 -1
  544. package/build/cjs/utils/internalSqlQuery.js.map +0 -1
  545. package/build/cjs/utils/internalStorageKey.js.map +0 -1
  546. package/build/cjs/utils/isBinding.js.map +0 -1
  547. package/build/cjs/utils/isCloudflareClass.js.map +0 -1
  548. package/build/cjs/utils/rpcMeta.js.map +0 -1
  549. package/build/cjs/utils/rpcOptions.js +0 -26
  550. package/build/cjs/utils/rpcOptions.js.map +0 -1
  551. package/build/cjs/utils/streaming.js.map +0 -1
  552. package/build/cjs/utils/traceLinks.js.map +0 -1
  553. package/build/cjs/vendor/stacktrace.js.map +0 -1
  554. package/build/cjs/vite/agentClass.js.map +0 -1
  555. package/build/cjs/vite/autoInstrument.js.map +0 -1
  556. package/build/cjs/vite/index.js.map +0 -1
  557. package/build/cjs/vite/instrumentFile.js.map +0 -1
  558. package/build/cjs/vite/moduleShape.js.map +0 -1
  559. package/build/cjs/vite/transform.js.map +0 -1
  560. package/build/cjs/vite/workerEntrypoint.js.map +0 -1
  561. package/build/cjs/vite/wranglerConfig.js.map +0 -1
  562. package/build/cjs/withSentry.js.map +0 -1
  563. package/build/cjs/workflows.js.map +0 -1
  564. package/build/cjs/wrapMethodWithSentry.js.map +0 -1
  565. package/build/esm/async.js +0 -61
  566. package/build/esm/async.js.map +0 -1
  567. package/build/esm/client.js.map +0 -1
  568. package/build/esm/debug-build.js.map +0 -1
  569. package/build/esm/defineCloudflareOptions.js.map +0 -1
  570. package/build/esm/durableobject.js +0 -150
  571. package/build/esm/durableobject.js.map +0 -1
  572. package/build/esm/flush.js.map +0 -1
  573. package/build/esm/index.js +0 -17
  574. package/build/esm/instrument.js.map +0 -1
  575. package/build/esm/instrumentations/agents/index.js.map +0 -1
  576. package/build/esm/instrumentations/agents/instrumentAgentCallableRpc.js.map +0 -1
  577. package/build/esm/instrumentations/agents/instrumentChatAgentConversation.js.map +0 -1
  578. package/build/esm/instrumentations/agents/types.js +0 -26
  579. package/build/esm/instrumentations/agents/types.js.map +0 -1
  580. package/build/esm/instrumentations/instrumentDurableObjectNamespace.js.map +0 -1
  581. package/build/esm/instrumentations/instrumentDurableObjectStorage.js.map +0 -1
  582. package/build/esm/instrumentations/instrumentDurableObjectSyncKvStorage.js.map +0 -1
  583. package/build/esm/instrumentations/instrumentSqlStorage.js.map +0 -1
  584. package/build/esm/instrumentations/instrumentWorkerEntrypoint.js.map +0 -1
  585. package/build/esm/instrumentations/worker/instrumentD1.js.map +0 -1
  586. package/build/esm/instrumentations/worker/instrumentEmail.js.map +0 -1
  587. package/build/esm/instrumentations/worker/instrumentEnv.js.map +0 -1
  588. package/build/esm/instrumentations/worker/instrumentFetch.js.map +0 -1
  589. package/build/esm/instrumentations/worker/instrumentFetcher.js.map +0 -1
  590. package/build/esm/instrumentations/worker/instrumentQueue.js.map +0 -1
  591. package/build/esm/instrumentations/worker/instrumentQueueProducer.js.map +0 -1
  592. package/build/esm/instrumentations/worker/instrumentR2.js.map +0 -1
  593. package/build/esm/instrumentations/worker/instrumentRateLimit.js.map +0 -1
  594. package/build/esm/instrumentations/worker/instrumentScheduled.js.map +0 -1
  595. package/build/esm/instrumentations/worker/instrumentTail.js.map +0 -1
  596. package/build/esm/integrations/fetch.js.map +0 -1
  597. package/build/esm/integrations/hono.js +0 -49
  598. package/build/esm/integrations/hono.js.map +0 -1
  599. package/build/esm/integrations/httpServer.js.map +0 -1
  600. package/build/esm/integrations/spotlight.js.map +0 -1
  601. package/build/esm/integrations/tracing/vercelai.js.map +0 -1
  602. package/build/esm/nodejs_compat/index.js +0 -18
  603. package/build/esm/nodejs_compat/integrations/tracing/vercelai.js +0 -16
  604. package/build/esm/nodejs_compat/integrations/tracing/vercelai.js.map +0 -1
  605. package/build/esm/opentelemetry/tracer.js.map +0 -1
  606. package/build/esm/options.js.map +0 -1
  607. package/build/esm/package.json +0 -1
  608. package/build/esm/pages-plugin.js.map +0 -1
  609. package/build/esm/request.js.map +0 -1
  610. package/build/esm/scope-utils.js.map +0 -1
  611. package/build/esm/sdk.js.map +0 -1
  612. package/build/esm/transport.js.map +0 -1
  613. package/build/esm/utils/instrumentContext.js.map +0 -1
  614. package/build/esm/utils/internalSqlQuery.js.map +0 -1
  615. package/build/esm/utils/internalStorageKey.js.map +0 -1
  616. package/build/esm/utils/isBinding.js.map +0 -1
  617. package/build/esm/utils/isCloudflareClass.js.map +0 -1
  618. package/build/esm/utils/rpcMeta.js.map +0 -1
  619. package/build/esm/utils/rpcOptions.js +0 -24
  620. package/build/esm/utils/rpcOptions.js.map +0 -1
  621. package/build/esm/utils/streaming.js.map +0 -1
  622. package/build/esm/utils/traceLinks.js.map +0 -1
  623. package/build/esm/vendor/stacktrace.js.map +0 -1
  624. package/build/esm/vite/agentClass.js.map +0 -1
  625. package/build/esm/vite/autoInstrument.js.map +0 -1
  626. package/build/esm/vite/index.js.map +0 -1
  627. package/build/esm/vite/instrumentFile.js.map +0 -1
  628. package/build/esm/vite/moduleShape.js.map +0 -1
  629. package/build/esm/vite/transform.js.map +0 -1
  630. package/build/esm/vite/workerEntrypoint.js.map +0 -1
  631. package/build/esm/vite/wranglerConfig.js.map +0 -1
  632. package/build/esm/withSentry.js.map +0 -1
  633. package/build/esm/workflows.js.map +0 -1
  634. package/build/esm/wrapMethodWithSentry.js.map +0 -1
  635. package/build/types/async.d.ts +0 -11
  636. package/build/types/async.d.ts.map +0 -1
  637. package/build/types/integrations/hono.d.ts +0 -42
  638. package/build/types/integrations/hono.d.ts.map +0 -1
  639. package/build/types/nodejs_compat/index.d.ts +0 -4
  640. package/build/types/nodejs_compat/index.d.ts.map +0 -1
  641. package/build/types/nodejs_compat/integrations/tracing/vercelai.d.ts +0 -37
  642. package/build/types/nodejs_compat/integrations/tracing/vercelai.d.ts.map +0 -1
  643. package/build/types/utils/rpcOptions.d.ts +0 -13
  644. package/build/types/utils/rpcOptions.d.ts.map +0 -1
  645. package/build/types-ts3.8/async.d.ts +0 -11
  646. package/build/types-ts3.8/client.d.ts +0 -203
  647. package/build/types-ts3.8/debug-build.d.ts +0 -7
  648. package/build/types-ts3.8/defineCloudflareOptions.d.ts +0 -38
  649. package/build/types-ts3.8/durableobject.d.ts +0 -118
  650. package/build/types-ts3.8/executionContext.d.ts +0 -13
  651. package/build/types-ts3.8/flush.d.ts +0 -47
  652. package/build/types-ts3.8/index.d.ts +0 -19
  653. package/build/types-ts3.8/instrument.d.ts +0 -20
  654. package/build/types-ts3.8/instrumentations/agents/index.d.ts +0 -24
  655. package/build/types-ts3.8/instrumentations/agents/instrumentAgentCallableRpc.d.ts +0 -11
  656. package/build/types-ts3.8/instrumentations/agents/instrumentChatAgentConversation.d.ts +0 -22
  657. package/build/types-ts3.8/instrumentations/agents/types.d.ts +0 -49
  658. package/build/types-ts3.8/instrumentations/instrumentDurableObjectNamespace.d.ts +0 -13
  659. package/build/types-ts3.8/instrumentations/instrumentDurableObjectStorage.d.ts +0 -19
  660. package/build/types-ts3.8/instrumentations/instrumentDurableObjectSyncKvStorage.d.ts +0 -3
  661. package/build/types-ts3.8/instrumentations/instrumentSqlStorage.d.ts +0 -9
  662. package/build/types-ts3.8/instrumentations/instrumentWorkerEntrypoint.d.ts +0 -42
  663. package/build/types-ts3.8/instrumentations/worker/instrumentD1.d.ts +0 -19
  664. package/build/types-ts3.8/instrumentations/worker/instrumentEmail.d.ts +0 -8
  665. package/build/types-ts3.8/instrumentations/worker/instrumentEnv.d.ts +0 -18
  666. package/build/types-ts3.8/instrumentations/worker/instrumentFetch.d.ts +0 -12
  667. package/build/types-ts3.8/instrumentations/worker/instrumentFetcher.d.ts +0 -10
  668. package/build/types-ts3.8/instrumentations/worker/instrumentQueue.d.ts +0 -12
  669. package/build/types-ts3.8/instrumentations/worker/instrumentQueueProducer.d.ts +0 -10
  670. package/build/types-ts3.8/instrumentations/worker/instrumentR2.d.ts +0 -9
  671. package/build/types-ts3.8/instrumentations/worker/instrumentRateLimit.d.ts +0 -6
  672. package/build/types-ts3.8/instrumentations/worker/instrumentScheduled.d.ts +0 -12
  673. package/build/types-ts3.8/instrumentations/worker/instrumentTail.d.ts +0 -12
  674. package/build/types-ts3.8/integrations/fetch.d.ts +0 -19
  675. package/build/types-ts3.8/integrations/hono.d.ts +0 -42
  676. package/build/types-ts3.8/integrations/httpServer.d.ts +0 -63
  677. package/build/types-ts3.8/integrations/spotlight.d.ts +0 -22
  678. package/build/types-ts3.8/integrations/tracing/vercelai.d.ts +0 -47
  679. package/build/types-ts3.8/nodejs_compat/index.d.ts +0 -4
  680. package/build/types-ts3.8/nodejs_compat/integrations/tracing/vercelai.d.ts +0 -37
  681. package/build/types-ts3.8/opentelemetry/tracer.d.ts +0 -6
  682. package/build/types-ts3.8/options.d.ts +0 -17
  683. package/build/types-ts3.8/pages-plugin.d.ts +0 -34
  684. package/build/types-ts3.8/request.d.ts +0 -25
  685. package/build/types-ts3.8/scope-utils.d.ts +0 -15
  686. package/build/types-ts3.8/sdk.d.ts +0 -10
  687. package/build/types-ts3.8/transport.d.ts +0 -34
  688. package/build/types-ts3.8/utils/instrumentContext.d.ts +0 -16
  689. package/build/types-ts3.8/utils/internalSqlQuery.d.ts +0 -20
  690. package/build/types-ts3.8/utils/internalStorageKey.d.ts +0 -22
  691. package/build/types-ts3.8/utils/isBinding.d.ts +0 -77
  692. package/build/types-ts3.8/utils/isCloudflareClass.d.ts +0 -30
  693. package/build/types-ts3.8/utils/rpcMeta.d.ts +0 -15
  694. package/build/types-ts3.8/utils/rpcOptions.d.ts +0 -13
  695. package/build/types-ts3.8/utils/streaming.d.ts +0 -17
  696. package/build/types-ts3.8/utils/traceLinks.d.ts +0 -28
  697. package/build/types-ts3.8/vendor/stacktrace.d.ts +0 -11
  698. package/build/types-ts3.8/vite/agentClass.d.ts +0 -41
  699. package/build/types-ts3.8/vite/autoInstrument.d.ts +0 -22
  700. package/build/types-ts3.8/vite/index.d.ts +0 -98
  701. package/build/types-ts3.8/vite/instrumentFile.d.ts +0 -22
  702. package/build/types-ts3.8/vite/moduleShape.d.ts +0 -52
  703. package/build/types-ts3.8/vite/transform.d.ts +0 -65
  704. package/build/types-ts3.8/vite/workerEntrypoint.d.ts +0 -12
  705. package/build/types-ts3.8/vite/wranglerConfig.d.ts +0 -43
  706. package/build/types-ts3.8/withSentry.d.ts +0 -16
  707. package/build/types-ts3.8/workflows.d.ts +0 -25
  708. package/build/types-ts3.8/wrapMethodWithSentry.d.ts +0 -43
  709. /package/build/cjs/{client.js → dev/client.js} +0 -0
  710. /package/build/cjs/{debug-build.js → dev/debug-build.js} +0 -0
  711. /package/build/cjs/{defineCloudflareOptions.js → dev/defineCloudflareOptions.js} +0 -0
  712. /package/build/cjs/{flush.js → dev/flush.js} +0 -0
  713. /package/build/cjs/{instrument.js → dev/instrument.js} +0 -0
  714. /package/build/cjs/{instrumentations → dev/instrumentations}/instrumentDurableObjectNamespace.js +0 -0
  715. /package/build/cjs/{instrumentations → dev/instrumentations}/instrumentDurableObjectStorage.js +0 -0
  716. /package/build/cjs/{instrumentations → dev/instrumentations}/instrumentDurableObjectSyncKvStorage.js +0 -0
  717. /package/build/cjs/{instrumentations → dev/instrumentations}/instrumentSqlStorage.js +0 -0
  718. /package/build/cjs/{instrumentations → dev/instrumentations}/worker/instrumentFetcher.js +0 -0
  719. /package/build/cjs/{instrumentations → dev/instrumentations}/worker/instrumentQueueProducer.js +0 -0
  720. /package/build/cjs/{instrumentations → dev/instrumentations}/worker/instrumentR2.js +0 -0
  721. /package/build/cjs/{instrumentations → dev/instrumentations}/worker/instrumentRateLimit.js +0 -0
  722. /package/build/cjs/{instrumentations → dev/instrumentations}/worker/instrumentTail.js +0 -0
  723. /package/build/cjs/{integrations → dev/integrations}/spotlight.js +0 -0
  724. /package/build/cjs/{opentelemetry → dev/opentelemetry}/tracer.js +0 -0
  725. /package/build/cjs/{scope-utils.js → dev/scope-utils.js} +0 -0
  726. /package/build/cjs/{transport.js → dev/transport.js} +0 -0
  727. /package/build/cjs/{utils → dev/utils}/internalSqlQuery.js +0 -0
  728. /package/build/cjs/{utils → dev/utils}/internalStorageKey.js +0 -0
  729. /package/build/cjs/{utils → dev/utils}/isBinding.js +0 -0
  730. /package/build/cjs/{utils → dev/utils}/isCloudflareClass.js +0 -0
  731. /package/build/cjs/{utils → dev/utils}/streaming.js +0 -0
  732. /package/build/cjs/{utils → dev/utils}/traceLinks.js +0 -0
  733. /package/build/cjs/{vendor → dev/vendor}/stacktrace.js +0 -0
  734. /package/build/cjs/{vite → dev/vite}/agentClass.js +0 -0
  735. /package/build/cjs/{vite → dev/vite}/autoInstrument.js +0 -0
  736. /package/build/cjs/{vite → dev/vite}/instrumentFile.js +0 -0
  737. /package/build/cjs/{vite → dev/vite}/moduleShape.js +0 -0
  738. /package/build/cjs/{vite → dev/vite}/transform.js +0 -0
  739. /package/build/cjs/{vite → dev/vite}/workerEntrypoint.js +0 -0
  740. /package/build/cjs/{vite → dev/vite}/wranglerConfig.js +0 -0
  741. /package/build/esm/{client.js → dev/client.js} +0 -0
  742. /package/build/esm/{debug-build.js → dev/debug-build.js} +0 -0
  743. /package/build/esm/{defineCloudflareOptions.js → dev/defineCloudflareOptions.js} +0 -0
  744. /package/build/esm/{flush.js → dev/flush.js} +0 -0
  745. /package/build/esm/{instrument.js → dev/instrument.js} +0 -0
  746. /package/build/esm/{instrumentations → dev/instrumentations}/instrumentDurableObjectNamespace.js +0 -0
  747. /package/build/esm/{instrumentations → dev/instrumentations}/instrumentDurableObjectStorage.js +0 -0
  748. /package/build/esm/{instrumentations → dev/instrumentations}/instrumentDurableObjectSyncKvStorage.js +0 -0
  749. /package/build/esm/{instrumentations → dev/instrumentations}/instrumentSqlStorage.js +0 -0
  750. /package/build/esm/{instrumentations → dev/instrumentations}/worker/instrumentFetcher.js +0 -0
  751. /package/build/esm/{instrumentations → dev/instrumentations}/worker/instrumentQueueProducer.js +0 -0
  752. /package/build/esm/{instrumentations → dev/instrumentations}/worker/instrumentR2.js +0 -0
  753. /package/build/esm/{instrumentations → dev/instrumentations}/worker/instrumentRateLimit.js +0 -0
  754. /package/build/esm/{instrumentations → dev/instrumentations}/worker/instrumentTail.js +0 -0
  755. /package/build/esm/{integrations → dev/integrations}/spotlight.js +0 -0
  756. /package/build/esm/{opentelemetry → dev/opentelemetry}/tracer.js +0 -0
  757. /package/build/esm/{scope-utils.js → dev/scope-utils.js} +0 -0
  758. /package/build/esm/{transport.js → dev/transport.js} +0 -0
  759. /package/build/esm/{utils → dev/utils}/internalSqlQuery.js +0 -0
  760. /package/build/esm/{utils → dev/utils}/internalStorageKey.js +0 -0
  761. /package/build/esm/{utils → dev/utils}/isBinding.js +0 -0
  762. /package/build/esm/{utils → dev/utils}/isCloudflareClass.js +0 -0
  763. /package/build/esm/{utils → dev/utils}/streaming.js +0 -0
  764. /package/build/esm/{vendor → dev/vendor}/stacktrace.js +0 -0
  765. /package/build/esm/{vite → dev/vite}/agentClass.js +0 -0
  766. /package/build/esm/{vite → dev/vite}/autoInstrument.js +0 -0
  767. /package/build/esm/{vite → dev/vite}/instrumentFile.js +0 -0
  768. /package/build/esm/{vite → dev/vite}/moduleShape.js +0 -0
  769. /package/build/esm/{vite → dev/vite}/transform.js +0 -0
  770. /package/build/esm/{vite → dev/vite}/workerEntrypoint.js +0 -0
  771. /package/build/esm/{vite → dev/vite}/wranglerConfig.js +0 -0
@@ -25,8 +25,8 @@ function instrumentAgentCallableRpc(obj) {
25
25
  ...types.getAgentAttributes(thisArg)
26
26
  }
27
27
  },
28
- () => {
29
- types.setAgentConversationId(thisArg);
28
+ async () => {
29
+ await types.setAgentConversationId(thisArg);
30
30
  return Reflect.apply(target, thisArg, args);
31
31
  }
32
32
  );
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrumentAgentCallableRpc.js","sources":["../../../../../src/instrumentations/agents/instrumentAgentCallableRpc.ts"],"sourcesContent":["import { debug, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, startSpan } from '@sentry/core';\nimport { DEBUG_BUILD } from '../../debug-build';\nimport { AGENT_SPAN_ORIGIN, type AgentInternals, getAgentAttributes, setAgentConversationId } from './types';\n\n/**\n * Wraps the Agent's `onMessage` handler to create a span for each `@callable()` RPC invocation.\n * RPC requests arrive as WebSocket messages, so this span nests under the active transaction for\n * the WebSocket message (on Cloudflare, the instrumented Durable Object `webSocketMessage` hook).\n *\n * Also sets the conversation id on the scope for the duration of the call: callable methods are the\n * unit of work for plain (non-chat) agents, which run LLM calls just like chat turns do. It is\n * awaited so the id is on the scope before the method body creates any span; the `agents`\n * `onMessage` own property this wraps is already `async`, so the promise return is nothing new to\n * the WebSocket dispatch upstream.\n */\nexport function instrumentAgentCallableRpc(obj: AgentInternals): void {\n const original = obj.onMessage;\n if (typeof original !== 'function') {\n DEBUG_BUILD && debug.log('[Sentry] Agent `onMessage` not found — callable RPC span instrumentation skipped.');\n return;\n }\n\n obj.onMessage = new Proxy(original, {\n apply(target, thisArg: AgentInternals, args: unknown[]): unknown {\n const method = extractCallableMethod(args[1]);\n\n if (!method) {\n return Reflect.apply(target, thisArg, args);\n }\n\n return startSpan(\n {\n name: method,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: 'rpc',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: AGENT_SPAN_ORIGIN,\n ...getAgentAttributes(thisArg),\n },\n },\n async () => {\n await setAgentConversationId(thisArg);\n return Reflect.apply(target, thisArg, args);\n },\n );\n },\n });\n}\n\n/** Extracts the RPC method name from a WebSocket message, mirroring the SDK's `isRPCRequest`. */\nfunction extractCallableMethod(message: unknown): string | undefined {\n const text =\n typeof message === 'string'\n ? message\n : message instanceof ArrayBuffer\n ? new TextDecoder().decode(message)\n : undefined;\n\n if (!text) {\n return undefined;\n }\n\n try {\n const parsed = JSON.parse(text) as { type?: unknown; method?: unknown; args?: unknown };\n if (parsed.type === 'rpc' && typeof parsed.method === 'string' && Array.isArray(parsed.args)) {\n return parsed.method;\n }\n } catch {\n // Not JSON, or not an RPC request — no span.\n }\n\n return undefined;\n}\n"],"names":["DEBUG_BUILD","debug","startSpan","SEMANTIC_ATTRIBUTE_SENTRY_OP","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","AGENT_SPAN_ORIGIN","getAgentAttributes","setAgentConversationId"],"mappings":";;;;;;AAeO,SAAS,2BAA2B,GAAA,EAA2B;AACpE,EAAA,MAAM,WAAW,GAAA,CAAI,SAAA;AACrB,EAAA,IAAI,OAAO,aAAa,UAAA,EAAY;AAClC,IAAAA,sBAAA,IAAeC,UAAA,CAAM,IAAI,wFAAmF,CAAA;AAC5G,IAAA;AAAA,EACF;AAEA,EAAA,GAAA,CAAI,SAAA,GAAY,IAAI,KAAA,CAAM,QAAA,EAAU;AAAA,IAClC,KAAA,CAAM,MAAA,EAAQ,OAAA,EAAyB,IAAA,EAA0B;AAC/D,MAAA,MAAM,MAAA,GAAS,qBAAA,CAAsB,IAAA,CAAK,CAAC,CAAC,CAAA;AAE5C,MAAA,IAAI,CAAC,MAAA,EAAQ;AACX,QAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,OAAA,EAAS,IAAI,CAAA;AAAA,MAC5C;AAEA,MAAA,OAAOC,cAAA;AAAA,QACL;AAAA,UACE,IAAA,EAAM,MAAA;AAAA,UACN,UAAA,EAAY;AAAA,YACV,CAACC,iCAA4B,GAAG,KAAA;AAAA,YAChC,CAACC,qCAAgC,GAAGC,uBAAA;AAAA,YACpC,GAAGC,yBAAmB,OAAO;AAAA;AAC/B,SACF;AAAA,QACA,YAAY;AACV,UAAA,MAAMC,6BAAuB,OAAO,CAAA;AACpC,UAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,OAAA,EAAS,IAAI,CAAA;AAAA,QAC5C;AAAA,OACF;AAAA,IACF;AAAA,GACD,CAAA;AACH;AAGA,SAAS,sBAAsB,OAAA,EAAsC;AACnE,EAAA,MAAM,IAAA,GACJ,OAAO,OAAA,KAAY,QAAA,GACf,OAAA,GACA,OAAA,YAAmB,WAAA,GACjB,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,OAAO,CAAA,GAChC,MAAA;AAER,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC9B,IAAA,IAAI,MAAA,CAAO,IAAA,KAAS,KAAA,IAAS,OAAO,MAAA,CAAO,MAAA,KAAW,QAAA,IAAY,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,IAAI,CAAA,EAAG;AAC5F,MAAA,OAAO,MAAA,CAAO,MAAA;AAAA,IAChB;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAEA,EAAA,OAAO,MAAA;AACT;;;;"}
@@ -0,0 +1,19 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+
3
+ const types = require('./types.js');
4
+
5
+ function instrumentAgentRequestConversation(obj) {
6
+ const original = obj.onRequest;
7
+ if (typeof original !== "function") {
8
+ return;
9
+ }
10
+ obj.onRequest = new Proxy(original, {
11
+ async apply(target, thisArg, args) {
12
+ await types.setAgentConversationId(thisArg);
13
+ return Reflect.apply(target, thisArg, args);
14
+ }
15
+ });
16
+ }
17
+
18
+ exports.instrumentAgentRequestConversation = instrumentAgentRequestConversation;
19
+ //# sourceMappingURL=instrumentAgentRequestConversation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrumentAgentRequestConversation.js","sources":["../../../../../src/instrumentations/agents/instrumentAgentRequestConversation.ts"],"sourcesContent":["import { type AgentInternals, setAgentConversationId } from './types';\n\n/**\n * Correlates the AI spans of an HTTP-driven agent turn with a conversation id on the active scope.\n *\n * `onRequest` is the third unit of agent work, alongside chat turns and `@callable()` RPC: the\n * `agents` router sends every non-WebSocket request to it, which is how REST endpoints and webhooks\n * reach an agent.\n *\n * `agents` installs `onRequest` as an own property in the `Agent` constructor (as it does\n * `onMessage`), and we instrument after construction, so wrapping the own property is what the\n * router ends up calling. That own property is already `async`, and partyserver's `fetch` awaits it,\n * so returning a promise from this wrapper — to get the conversation id onto the scope before the\n * request handler creates any span — keeps the existing contract.\n */\nexport function instrumentAgentRequestConversation(obj: AgentInternals): void {\n const original = obj.onRequest;\n\n if (typeof original !== 'function') {\n return;\n }\n\n obj.onRequest = new Proxy(original, {\n async apply(target, thisArg: AgentInternals, args: unknown[]): Promise<unknown> {\n await setAgentConversationId(thisArg);\n\n return Reflect.apply(target, thisArg, args);\n },\n });\n}\n"],"names":["setAgentConversationId"],"mappings":";;;;AAeO,SAAS,mCAAmC,GAAA,EAA2B;AAC5E,EAAA,MAAM,WAAW,GAAA,CAAI,SAAA;AAErB,EAAA,IAAI,OAAO,aAAa,UAAA,EAAY;AAClC,IAAA;AAAA,EACF;AAEA,EAAA,GAAA,CAAI,SAAA,GAAY,IAAI,KAAA,CAAM,QAAA,EAAU;AAAA,IAClC,MAAM,KAAA,CAAM,MAAA,EAAQ,OAAA,EAAyB,IAAA,EAAmC;AAC9E,MAAA,MAAMA,6BAAuB,OAAO,CAAA;AAEpC,MAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,OAAA,EAAS,IAAI,CAAA;AAAA,IAC5C;AAAA,GACD,CAAA;AACH;;;;"}
@@ -9,7 +9,7 @@ function instrumentChatAgentConversation(obj) {
9
9
  obj._emit = new Proxy(originalEmit, {
10
10
  apply(target, thisArg, args) {
11
11
  if (args[0] === "message:clear") {
12
- thisArg.__sentryConversationId = core.uuid4();
12
+ types.storeAgentConversationId(thisArg, core.uuid4());
13
13
  }
14
14
  return Reflect.apply(target, thisArg, args);
15
15
  }
@@ -20,8 +20,8 @@ function instrumentChatAgentConversation(obj) {
20
20
  return;
21
21
  }
22
22
  obj.onChatMessage = new Proxy(original, {
23
- apply(target, thisArg, args) {
24
- types.setAgentConversationId(thisArg);
23
+ async apply(target, thisArg, args) {
24
+ await types.setAgentConversationId(thisArg);
25
25
  return Reflect.apply(target, thisArg, args);
26
26
  }
27
27
  });
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrumentChatAgentConversation.js","sources":["../../../../../src/instrumentations/agents/instrumentChatAgentConversation.ts"],"sourcesContent":["import { uuid4 } from '@sentry/core';\nimport { type AgentInternals, setAgentConversationId, storeAgentConversationId } from './types';\n\n/**\n * For chat agents (`AIChatAgent` from `@cloudflare/ai-chat`), correlates each chat turn's AI spans\n * with a conversation id on the active scope.\n *\n * In the Agents model one agent instance is one long-lived conversation, so the conversation id is\n * minted once per instance and persisted to Durable Object storage, which is what carries it across\n * hibernation (that destroys the in-memory instance). When the user clears the chat, they expect a\n * fresh conversation — but recreating the Durable Object for that would also drop the MCP/OAuth\n * state stored per instance (GitHub/Sentry sign-in). To get a fresh conversation id *without*\n * losing that state, we rotate the persisted id when the SDK reports a cleared chat.\n *\n * The id itself is not attached to spans here — `setAgentConversationId` resolves it, and the SDK's\n * `conversationIdIntegration` picks it off the scope at `spanStart` to stamp\n * `gen_ai.conversation.id` onto the AI spans created inside the turn (e.g. by the Workers AI\n * instrumentation), which correlates a turn's model and tool calls.\n *\n * Plain (non-chat) `Agent`s do not define `onChatMessage`, so they are skipped here — their unit\n * of work is the callable RPC method, where `instrumentAgentCallableRpc` sets the conversation id\n * instead.\n */\nexport function instrumentChatAgentConversation(obj: AgentInternals): void {\n // Rotate the conversation id when the chat is cleared. `_emit` is the central choke-point through\n // which all `agents:*` observability events are published, and it already exists on the base\n // `Agent` class — so this hook composes with the RPC instrumentation, which keys off the same\n // surface. We shadow it with an own property so the original stays reachable on the prototype.\n const originalEmit = obj._emit;\n\n if (typeof originalEmit === 'function') {\n obj._emit = new Proxy(originalEmit, {\n apply(target, thisArg: AgentInternals, args: [string, Record<string, unknown>?]) {\n if (args[0] === 'message:clear') {\n storeAgentConversationId(thisArg, uuid4());\n }\n\n return Reflect.apply(target, thisArg, args);\n },\n });\n }\n\n const original = obj.onChatMessage;\n\n if (typeof original !== 'function') {\n return;\n }\n\n obj.onChatMessage = new Proxy(original, {\n async apply(target, thisArg: AgentInternals, args: unknown[]): Promise<unknown> {\n await setAgentConversationId(thisArg);\n\n return Reflect.apply(target, thisArg, args);\n },\n });\n}\n"],"names":["storeAgentConversationId","uuid4","setAgentConversationId"],"mappings":";;;;;AAuBO,SAAS,gCAAgC,GAAA,EAA2B;AAKzE,EAAA,MAAM,eAAe,GAAA,CAAI,KAAA;AAEzB,EAAA,IAAI,OAAO,iBAAiB,UAAA,EAAY;AACtC,IAAA,GAAA,CAAI,KAAA,GAAQ,IAAI,KAAA,CAAM,YAAA,EAAc;AAAA,MAClC,KAAA,CAAM,MAAA,EAAQ,OAAA,EAAyB,IAAA,EAA0C;AAC/E,QAAA,IAAI,IAAA,CAAK,CAAC,CAAA,KAAM,eAAA,EAAiB;AAC/B,UAAAA,8BAAA,CAAyB,OAAA,EAASC,YAAO,CAAA;AAAA,QAC3C;AAEA,QAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,OAAA,EAAS,IAAI,CAAA;AAAA,MAC5C;AAAA,KACD,CAAA;AAAA,EACH;AAEA,EAAA,MAAM,WAAW,GAAA,CAAI,aAAA;AAErB,EAAA,IAAI,OAAO,aAAa,UAAA,EAAY;AAClC,IAAA;AAAA,EACF;AAEA,EAAA,GAAA,CAAI,aAAA,GAAgB,IAAI,KAAA,CAAM,QAAA,EAAU;AAAA,IACtC,MAAM,KAAA,CAAM,MAAA,EAAQ,OAAA,EAAyB,IAAA,EAAmC;AAC9E,MAAA,MAAMC,6BAAuB,OAAO,CAAA;AAEpC,MAAA,OAAO,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,OAAA,EAAS,IAAI,CAAA;AAAA,IAC5C;AAAA,GACD,CAAA;AACH;;;;"}
@@ -0,0 +1,77 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
+
3
+ const attributes = require('@sentry/conventions/attributes');
4
+ const core = require('@sentry/core');
5
+ const debugBuild = require('../../debug-build.js');
6
+
7
+ const AGENT_SPAN_ORIGIN = "auto.faas.cloudflare.agents";
8
+ const AGENT_CONVERSATION_ID_STORAGE_KEY = "__SENTRY_AGENT_CONVERSATION_ID__";
9
+ const AGENT_CONVERSATION_ID_SYMBOL = /* @__PURE__ */ Symbol("sentryAgentConversationId");
10
+ const AGENT_APPLIED_CONVERSATION_ID_SYMBOL = /* @__PURE__ */ Symbol("sentryAgentAppliedConversationId");
11
+ function getAgentAttributes(instance) {
12
+ const attributes$1 = {};
13
+ const agentClass = instance._ParentClass?.name;
14
+ if (typeof agentClass === "string" && agentClass) {
15
+ attributes$1[attributes.GEN_AI_AGENT_NAME] = agentClass;
16
+ }
17
+ return attributes$1;
18
+ }
19
+ function storeAgentConversationId(instance, conversationId) {
20
+ instance[AGENT_CONVERSATION_ID_SYMBOL] = conversationId;
21
+ const storage = resolveStorage(instance);
22
+ if (!storage) {
23
+ return;
24
+ }
25
+ try {
26
+ storage.put(AGENT_CONVERSATION_ID_STORAGE_KEY, conversationId).catch((error) => debugBuild.DEBUG_BUILD && core.debug.log("[Sentry] Failed to persist agent conversation id", error));
27
+ } catch (error) {
28
+ debugBuild.DEBUG_BUILD && core.debug.log("[Sentry] Failed to persist agent conversation id", error);
29
+ }
30
+ }
31
+ async function setAgentConversationId(instance) {
32
+ const isolationScope = core.getIsolationScope();
33
+ const existing = isolationScope.getScopeData().conversationId ?? core.getCurrentScope().getScopeData().conversationId;
34
+ if (existing && existing !== instance[AGENT_APPLIED_CONVERSATION_ID_SYMBOL]) {
35
+ return;
36
+ }
37
+ const conversationId = instance[AGENT_CONVERSATION_ID_SYMBOL] ?? await loadAgentConversationId(instance);
38
+ instance[AGENT_APPLIED_CONVERSATION_ID_SYMBOL] = conversationId;
39
+ isolationScope.setConversationId(conversationId);
40
+ }
41
+ async function loadAgentConversationId(instance) {
42
+ let stored;
43
+ let readFailed = false;
44
+ try {
45
+ stored = await resolveStorage(instance)?.get(AGENT_CONVERSATION_ID_STORAGE_KEY);
46
+ } catch (error) {
47
+ readFailed = true;
48
+ debugBuild.DEBUG_BUILD && core.debug.log("[Sentry] Failed to read agent conversation id from storage", error);
49
+ }
50
+ const cached = instance[AGENT_CONVERSATION_ID_SYMBOL];
51
+ if (cached !== void 0) {
52
+ return cached;
53
+ }
54
+ if (typeof stored === "string" && stored) {
55
+ instance[AGENT_CONVERSATION_ID_SYMBOL] = stored;
56
+ return stored;
57
+ }
58
+ const conversationId = core.uuid4();
59
+ if (readFailed) {
60
+ instance[AGENT_CONVERSATION_ID_SYMBOL] = conversationId;
61
+ } else {
62
+ storeAgentConversationId(instance, conversationId);
63
+ }
64
+ return conversationId;
65
+ }
66
+ function resolveStorage(instance) {
67
+ return instance.ctx?.originalStorage ?? instance.ctx?.storage;
68
+ }
69
+
70
+ exports.AGENT_APPLIED_CONVERSATION_ID_SYMBOL = AGENT_APPLIED_CONVERSATION_ID_SYMBOL;
71
+ exports.AGENT_CONVERSATION_ID_STORAGE_KEY = AGENT_CONVERSATION_ID_STORAGE_KEY;
72
+ exports.AGENT_CONVERSATION_ID_SYMBOL = AGENT_CONVERSATION_ID_SYMBOL;
73
+ exports.AGENT_SPAN_ORIGIN = AGENT_SPAN_ORIGIN;
74
+ exports.getAgentAttributes = getAgentAttributes;
75
+ exports.setAgentConversationId = setAgentConversationId;
76
+ exports.storeAgentConversationId = storeAgentConversationId;
77
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sources":["../../../../../src/instrumentations/agents/types.ts"],"sourcesContent":["import { GEN_AI_AGENT_NAME } from '@sentry/conventions/attributes';\nimport type { DurableObjectStorage } from '@cloudflare/workers-types';\nimport { debug, getCurrentScope, getIsolationScope, uuid4 } from '@sentry/core';\nimport { DEBUG_BUILD } from '../../debug-build';\nimport type { InstrumentedDurableObjectState } from '../../wrapMethodWithSentry';\n\nexport const AGENT_SPAN_ORIGIN = 'auto.faas.cloudflare.agents';\n\n/** DO storage key under which the conversation id is persisted so it survives hibernation. */\nexport const AGENT_CONVERSATION_ID_STORAGE_KEY = '__SENTRY_AGENT_CONVERSATION_ID__';\n\n/**\n * Instance keys for our conversation-id bookkeeping, keyed by symbol so the state stays invisible\n * to anything enumerating the user-owned agent instance (`Object.keys`, `JSON.stringify`, spread).\n * Exported because the exported `AgentInternals` interface references them.\n */\nexport const AGENT_CONVERSATION_ID_SYMBOL: unique symbol = Symbol('sentryAgentConversationId');\nexport const AGENT_APPLIED_CONVERSATION_ID_SYMBOL: unique symbol = Symbol('sentryAgentAppliedConversationId');\n\n/**\n * The subset of the `agents` `Agent` instance internals that we instrument. These are runtime\n * implementation details of the `agents` package (v0.13.x) rather than part of its public type\n * surface, so every access is guarded and wrapping degrades gracefully if a name changes upstream.\n */\nexport interface AgentInternals {\n /** Central choke-point through which all `agents:*` observability events are published. */\n _emit?: (type: string, payload?: Record<string, unknown>) => void;\n /** WebSocket message handler; dispatches `@callable()` RPC requests. */\n onMessage?: (...args: unknown[]) => unknown;\n /**\n * Chat-turn handler. Only `AIChatAgent` (from `@cloudflare/ai-chat`) defines this; a plain `Agent`\n * does not, so its presence discriminates a chat agent.\n */\n onChatMessage?: (...args: unknown[]) => unknown;\n /** HTTP request handler; the router sends every non-WebSocket request here. */\n onRequest?: (...args: unknown[]) => unknown;\n /** The user's Agent class (used by the SDK for the observability event `agent` field). */\n _ParentClass?: { name?: string };\n /** The Agent instance name, reported as the `cloudflare.agent.name` span attribute. */\n name?: string;\n /**\n * The Durable Object state of the instance. Present on every real Agent; guarded like the other\n * internals so partially-mocked instances keep working.\n */\n ctx?: InstrumentedDurableObjectState;\n /**\n * The current conversation id for this agent instance. It is cached in memory after being loaded\n * from Durable Object storage and updated when the conversation rotates. `undefined` means storage\n * has not been read yet.\n */\n [AGENT_CONVERSATION_ID_SYMBOL]?: string;\n /**\n * The conversation id this instrumentation most recently applied to the isolation scope. It lets\n * subsequent units of work distinguish an SDK-applied id, which may be replaced after rotation,\n * from an id explicitly set by the user, which must be preserved.\n */\n [AGENT_APPLIED_CONVERSATION_ID_SYMBOL]?: string;\n}\n\n/** Reads best-effort agent identity attributes from the instance, tolerating missing internals. */\nexport function getAgentAttributes(instance: AgentInternals): Record<string, string> {\n const attributes: Record<string, string> = {};\n\n const agentClass = instance._ParentClass?.name;\n if (typeof agentClass === 'string' && agentClass) {\n attributes[GEN_AI_AGENT_NAME] = agentClass;\n }\n\n return attributes;\n}\n\n/**\n * Persists the conversation id to Durable Object storage, so it survives hibernation, and updates\n * the in-memory cache synchronously so the current wake is immediately consistent even if the\n * write fails. Uses the async storage API, which exists on KV- and SQLite-backed DOs alike.\n * The write is fire-and-forget: DO storage writes are tracked by the runtime and land without\n * awaiting (`waitUntil` is a no-op in Durable Objects), and the catch keeps a rejection from\n * surfacing as unhandled — a failed write just means the next wake starts a new conversation,\n * which must never throw into user code. Uses the original uninstrumented storage so internal\n * bookkeeping doesn't create spans.\n */\nexport function storeAgentConversationId(instance: AgentInternals, conversationId: string): void {\n instance[AGENT_CONVERSATION_ID_SYMBOL] = conversationId;\n\n const storage = resolveStorage(instance);\n if (!storage) {\n return;\n }\n\n try {\n storage\n .put(AGENT_CONVERSATION_ID_STORAGE_KEY, conversationId)\n .catch(error => DEBUG_BUILD && debug.log('[Sentry] Failed to persist agent conversation id', error));\n } catch (error) {\n DEBUG_BUILD && debug.log('[Sentry] Failed to persist agent conversation id', error);\n }\n}\n\n/**\n * Sets the agent instance's conversation id on the active scope for the duration of the\n * surrounding unit of work (chat turn, callable RPC call, HTTP request). In the Agents model one\n * instance is one long-lived conversation, so the id is minted once per instance and persisted to\n * DO storage — for chat and plain agents alike, since plain agents run LLM calls too (e.g. inside\n * `@callable()` methods). The instance `name` is deliberately not used: it is caller-chosen and can\n * be a stable, guessable, or shared value, whereas a conversation id should identify exactly one\n * conversation. Clearing the chat rotates it (see `storeAgentConversationId`) so subsequent LLM\n * calls group under the fresh conversation.\n *\n * Every handler wrapper awaits this before invoking the original, so the id is on the scope before\n * the unit of work — and any `gen_ai` span it creates — starts. Only the first unit of work per wake\n * pays the storage read; the rest resolve from the in-memory cache. Awaiting is safe on all three\n * paths because the `agents` `Agent` constructor already replaces `onMessage` and `onRequest` with\n * `async` wrappers of its own, and `onChatMessage` is async by contract, so every caller upstream\n * already handles a promise.\n *\n * An id the user set explicitly outranks this inferred one, in either order: a `setConversationId()`\n * call that already happened is detected here and left alone, and one made inside the handler lands\n * on the same scope afterwards and therefore wins. That is why the write targets the isolation scope\n * — it is the scope the public `Sentry.setConversationId()` writes to, and `conversationIdIntegration`\n * prefers the current scope over it, so writing there would make a user's call unoverridable.\n *\n * `conversationIdIntegration` reads the id off the scope at `spanStart` and stamps\n * `gen_ai.conversation.id` onto AI spans created within the unit of work, correlating its model and\n * tool calls.\n */\nexport async function setAgentConversationId(instance: AgentInternals): Promise<void> {\n const isolationScope = getIsolationScope();\n const existing = isolationScope.getScopeData().conversationId ?? getCurrentScope().getScopeData().conversationId;\n\n // An id that isn't the one we put there ourselves came from the user — never override it.\n if (existing && existing !== instance[AGENT_APPLIED_CONVERSATION_ID_SYMBOL]) {\n return;\n }\n\n const conversationId = instance[AGENT_CONVERSATION_ID_SYMBOL] ?? (await loadAgentConversationId(instance));\n\n instance[AGENT_APPLIED_CONVERSATION_ID_SYMBOL] = conversationId;\n isolationScope.setConversationId(conversationId);\n}\n\n/**\n * Reads the persisted id into the instance cache, minting and persisting a fresh one when storage\n * holds none, so subsequent units of work resolve from memory. The async `get` exists on KV- and\n * SQLite-backed DOs alike, so this one path covers both.\n *\n * Anything already cached by the time the read lands wins over the read: that covers a rotation\n * (cleared chat) racing the read, and a second concurrent unit of work that must not mint and\n * persist a competing id for the same conversation.\n */\nasync function loadAgentConversationId(instance: AgentInternals): Promise<string> {\n let stored: unknown;\n let readFailed = false;\n\n try {\n stored = await resolveStorage(instance)?.get<string>(AGENT_CONVERSATION_ID_STORAGE_KEY);\n } catch (error) {\n readFailed = true;\n DEBUG_BUILD && debug.log('[Sentry] Failed to read agent conversation id from storage', error);\n }\n\n const cached = instance[AGENT_CONVERSATION_ID_SYMBOL];\n\n if (cached !== undefined) {\n return cached;\n }\n\n if (typeof stored === 'string' && stored) {\n instance[AGENT_CONVERSATION_ID_SYMBOL] = stored;\n\n return stored;\n }\n\n const conversationId = uuid4();\n\n if (readFailed) {\n // Cache without persisting: a read that failed may still have an id behind it, and overwriting\n // it would split the conversation for good instead of just for this wake.\n instance[AGENT_CONVERSATION_ID_SYMBOL] = conversationId;\n } else {\n storeAgentConversationId(instance, conversationId);\n }\n\n return conversationId;\n}\n\n/**\n * Resolves the uninstrumented DO storage for internal reads/writes, so they don't create spans of\n * their own. Falls back to the instance's regular storage when the uninstrumented one isn't\n * exposed (e.g. when `instrumentCloudflareAgent` is used directly, without `instrumentContext`).\n */\nfunction resolveStorage(instance: AgentInternals): DurableObjectStorage | undefined {\n return instance.ctx?.originalStorage ?? instance.ctx?.storage;\n}\n"],"names":["attributes","GEN_AI_AGENT_NAME","DEBUG_BUILD","debug","getIsolationScope","getCurrentScope","uuid4"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrumentDurableObjectNamespace.js","sources":["../../../../src/instrumentations/instrumentDurableObjectNamespace.ts"],"sourcesContent":["import type { DurableObjectNamespace, DurableObjectStub } from '@cloudflare/workers-types';\nimport { appendRpcMeta } from '../utils/rpcMeta';\nimport { instrumentFetcher } from './worker/instrumentFetcher';\n\n// Built-in DurableObjectStub methods that are not RPC calls.\nexport const STUB_NON_RPC_METHODS = new Set(['fetch', 'connect', 'dup']);\n\n/**\n * Instruments a DurableObjectNamespace binding to create spans for DO interactions.\n *\n * Wraps:\n * - `namespace.get(id)` / `namespace.getByName(name)` with a span + instruments returned stub\n * - `namespace.idFromName(name)` / `namespace.idFromString(id)` / `namespace.newUniqueId()` with breadcrumbs\n *\n * @param namespace - The DurableObjectNamespace to instrument\n */\nexport function instrumentDurableObjectNamespace(namespace: DurableObjectNamespace): DurableObjectNamespace {\n return new Proxy(namespace, {\n get(target, prop, _receiver) {\n const value = Reflect.get(target, prop) as unknown;\n\n if (typeof value !== 'function') {\n return value;\n }\n\n if (prop === 'get' || prop === 'getByName') {\n return function (this: unknown, ...args: unknown[]) {\n const stub = Reflect.apply(value, target, args);\n\n return instrumentDurableObjectStub(stub);\n };\n }\n\n return value.bind(target);\n },\n });\n}\n\n/**\n * Instruments a DurableObjectStub to create spans for outgoing fetch calls\n * and propagate trace context across RPC calls.\n *\n * @param stub - The DurableObjectStub to instrument\n */\nfunction instrumentDurableObjectStub(stub: DurableObjectStub): DurableObjectStub {\n return new Proxy(stub, {\n get(target, prop) {\n const value = Reflect.get(target, prop);\n\n if (prop === 'fetch' && typeof value === 'function') {\n return instrumentFetcher((...args) => Reflect.apply(value, target, args));\n }\n\n if (typeof value === 'function' && typeof prop === 'string' && !STUB_NON_RPC_METHODS.has(prop)) {\n return (...args: unknown[]) => Reflect.apply(value, target, appendRpcMeta(args));\n }\n\n return value;\n },\n });\n}\n"],"names":["instrumentFetcher","appendRpcMeta"],"mappings":";;;;;AAKO,MAAM,uCAAuB,IAAI,GAAA,CAAI,CAAC,OAAA,EAAS,SAAA,EAAW,KAAK,CAAC;AAWhE,SAAS,iCAAiC,SAAA,EAA2D;AAC1G,EAAA,OAAO,IAAI,MAAM,SAAA,EAAW;AAAA,IAC1B,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAW;AAC3B,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,IAAI,CAAA;AAEtC,MAAA,IAAI,OAAO,UAAU,UAAA,EAAY;AAC/B,QAAA,OAAO,KAAA;AAAA,MACT;AAEA,MAAA,IAAI,IAAA,KAAS,KAAA,IAAS,IAAA,KAAS,WAAA,EAAa;AAC1C,QAAA,OAAO,YAA4B,IAAA,EAAiB;AAClD,UAAA,MAAM,IAAA,GAAO,OAAA,CAAQ,KAAA,CAAM,KAAA,EAAO,QAAQ,IAAI,CAAA;AAE9C,UAAA,OAAO,4BAA4B,IAAI,CAAA;AAAA,QACzC,CAAA;AAAA,MACF;AAEA,MAAA,OAAO,KAAA,CAAM,KAAK,MAAM,CAAA;AAAA,IAC1B;AAAA,GACD,CAAA;AACH;AAQA,SAAS,4BAA4B,IAAA,EAA4C;AAC/E,EAAA,OAAO,IAAI,MAAM,IAAA,EAAM;AAAA,IACrB,GAAA,CAAI,QAAQ,IAAA,EAAM;AAChB,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,IAAI,CAAA;AAEtC,MAAA,IAAI,IAAA,KAAS,OAAA,IAAW,OAAO,KAAA,KAAU,UAAA,EAAY;AACnD,QAAA,OAAOA,mCAAA,CAAkB,IAAI,IAAA,KAAS,OAAA,CAAQ,MAAM,KAAA,EAAO,MAAA,EAAQ,IAAI,CAAC,CAAA;AAAA,MAC1E;AAEA,MAAA,IAAI,OAAO,KAAA,KAAU,UAAA,IAAc,OAAO,IAAA,KAAS,YAAY,CAAC,oBAAA,CAAqB,GAAA,CAAI,IAAI,CAAA,EAAG;AAC9F,QAAA,OAAO,CAAA,GAAI,SAAoB,OAAA,CAAQ,KAAA,CAAM,OAAO,MAAA,EAAQC,qBAAA,CAAc,IAAI,CAAC,CAAA;AAAA,MACjF;AAEA,MAAA,OAAO,KAAA;AAAA,IACT;AAAA,GACD,CAAA;AACH;;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrumentDurableObjectStorage.js","sources":["../../../../src/instrumentations/instrumentDurableObjectStorage.ts"],"sourcesContent":["import type { DurableObjectStorage, SyncKvStorage, SqlStorage } from '@cloudflare/workers-types';\nimport { getClient, isThenable, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, startSpan } from '@sentry/core';\nimport type { CloudflareClientOptions } from '../client';\nimport { getStorageKeys, targetsCloudflareInternalKey } from '../utils/internalStorageKey';\nimport { storeSpanContext } from '../utils/traceLinks';\nimport { instrumentDurableObjectSyncKvStorage } from './instrumentDurableObjectSyncKvStorage';\nimport { instrumentSqlStorage } from './instrumentSqlStorage';\n\nconst STORAGE_METHODS_TO_INSTRUMENT = ['get', 'put', 'delete', 'list', 'setAlarm', 'getAlarm', 'deleteAlarm'] as const;\n\ntype StorageMethod = (typeof STORAGE_METHODS_TO_INSTRUMENT)[number];\n\ntype WaitUntil = (promise: Promise<unknown>) => void;\n\n/**\n * Instruments DurableObjectStorage methods with Sentry spans.\n *\n * Wraps the following async methods:\n * - get, put, delete, list (KV API)\n * - setAlarm, getAlarm, deleteAlarm (Alarm API)\n *\n * When setAlarm is called, it also stores the current span context so that when\n * the alarm fires later, it can link back to the trace that called setAlarm.\n *\n * @param storage - The DurableObjectStorage instance to instrument\n * @param waitUntil - Optional waitUntil function to defer span context storage\n * @returns An instrumented DurableObjectStorage instance\n */\nexport function instrumentDurableObjectStorage(\n storage: DurableObjectStorage,\n waitUntil?: WaitUntil,\n): DurableObjectStorage {\n return new Proxy(storage, {\n get(target, prop, _receiver) {\n // Use `target` as the receiver instead of the proxy (`_receiver`).\n // Native workerd getters (e.g., `storage.sql`) validate `this` via\n // internal slots. Passing the proxy as receiver breaks that check,\n // causing \"Illegal invocation: function called with incorrect `this`\n // reference\" errors.\n const original = Reflect.get(target, prop, target);\n\n if (prop === 'kv' && original != null && 'get' in original && 'put' in original) {\n return instrumentDurableObjectSyncKvStorage(original as SyncKvStorage);\n }\n\n if (prop === 'sql' && original != null && 'databaseSize' in original && 'exec' in original) {\n return instrumentSqlStorage(original as SqlStorage);\n }\n\n if (typeof original !== 'function') {\n return original;\n }\n\n const methodName = prop as string;\n if (!STORAGE_METHODS_TO_INSTRUMENT.includes(methodName as StorageMethod)) {\n return (original as (...args: unknown[]) => unknown).bind(target);\n }\n\n return function (this: unknown, ...args: unknown[]) {\n // KV entries managed by the DO framework itself (agents/partyserver state) are bookkeeping\n // rather than user work — skip the span, mirroring how `cf_` SQL tables are treated.\n // oxlint-disable-next-line typescript/no-unnecessary-type-assertion -- rule false positive: the cast reaches the Cloudflare-only `durableObjectStorageSpanAllowlist`; tsc errors without it\n const allowlist = (getClient()?.getOptions() as CloudflareClientOptions | undefined)\n ?.durableObjectStorageSpanAllowlist;\n const keys = getStorageKeys(methodName, args);\n if (keys && keys.length > 0 && keys.every(key => targetsCloudflareInternalKey(key, allowlist))) {\n return (original as (...a: unknown[]) => unknown).apply(target, args);\n }\n\n return startSpan(\n {\n // Use underscore naming to match Cloudflare's native instrumentation (e.g., \"durable_object_storage_get\")\n name: `durable_object_storage_${methodName}`,\n op: 'db',\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.db.cloudflare.durable_object',\n 'db.system.name': 'cloudflare.durable_object.storage',\n 'db.operation.name': methodName,\n },\n },\n () => {\n const teardown = async (): Promise<void> => {\n // When setAlarm is called, store the current span context so that when the alarm\n // fires later, it can link back to the trace that called setAlarm.\n // We use the original (uninstrumented) storage (target) to avoid creating a span\n // for this internal operation. The storage is deferred via waitUntil to not block.\n if (methodName === 'setAlarm') {\n storeSpanContext(target, 'alarm');\n }\n };\n\n const result = (original as (...args: unknown[]) => unknown).apply(target, args);\n\n if (!isThenable(result)) {\n waitUntil?.(teardown());\n\n return result;\n }\n\n return result.then(\n res => {\n waitUntil?.(teardown());\n return res;\n },\n e => {\n throw e;\n },\n );\n },\n );\n };\n },\n });\n}\n"],"names":["instrumentDurableObjectSyncKvStorage","instrumentSqlStorage","getClient","getStorageKeys","targetsCloudflareInternalKey","startSpan","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","storeSpanContext","isThenable"],"mappings":";;;;;;;;AAQA,MAAM,6BAAA,GAAgC,CAAC,KAAA,EAAO,KAAA,EAAO,UAAU,MAAA,EAAQ,UAAA,EAAY,YAAY,aAAa,CAAA;AAoBrG,SAAS,8BAAA,CACd,SACA,SAAA,EACsB;AACtB,EAAA,OAAO,IAAI,MAAM,OAAA,EAAS;AAAA,IACxB,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAW;AAM3B,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,MAAM,MAAM,CAAA;AAEjD,MAAA,IAAI,SAAS,IAAA,IAAQ,QAAA,IAAY,QAAQ,KAAA,IAAS,QAAA,IAAY,SAAS,QAAA,EAAU;AAC/E,QAAA,OAAOA,0EAAqC,QAAyB,CAAA;AAAA,MACvE;AAEA,MAAA,IAAI,SAAS,KAAA,IAAS,QAAA,IAAY,QAAQ,cAAA,IAAkB,QAAA,IAAY,UAAU,QAAA,EAAU;AAC1F,QAAA,OAAOC,0CAAqB,QAAsB,CAAA;AAAA,MACpD;AAEA,MAAA,IAAI,OAAO,aAAa,UAAA,EAAY;AAClC,QAAA,OAAO,QAAA;AAAA,MACT;AAEA,MAAA,MAAM,UAAA,GAAa,IAAA;AACnB,MAAA,IAAI,CAAC,6BAAA,CAA8B,QAAA,CAAS,UAA2B,CAAA,EAAG;AACxE,QAAA,OAAQ,QAAA,CAA6C,KAAK,MAAM,CAAA;AAAA,MAClE;AAEA,MAAA,OAAO,YAA4B,IAAA,EAAiB;AAIlD,QAAA,MAAM,SAAA,GAAaC,cAAA,EAAU,EAAG,UAAA,EAAW,EACvC,iCAAA;AACJ,QAAA,MAAM,IAAA,GAAOC,iCAAA,CAAe,UAAA,EAAY,IAAI,CAAA;AAC5C,QAAA,IAAI,IAAA,IAAQ,IAAA,CAAK,MAAA,GAAS,CAAA,IAAK,IAAA,CAAK,KAAA,CAAM,CAAA,GAAA,KAAOC,+CAAA,CAA6B,GAAA,EAAK,SAAS,CAAC,CAAA,EAAG;AAC9F,UAAA,OAAQ,QAAA,CAA0C,KAAA,CAAM,MAAA,EAAQ,IAAI,CAAA;AAAA,QACtE;AAEA,QAAA,OAAOC,cAAA;AAAA,UACL;AAAA;AAAA,YAEE,IAAA,EAAM,0BAA0B,UAAU,CAAA,CAAA;AAAA,YAC1C,EAAA,EAAI,IAAA;AAAA,YACJ,UAAA,EAAY;AAAA,cACV,CAACC,qCAAgC,GAAG,mCAAA;AAAA,cACpC,gBAAA,EAAkB,mCAAA;AAAA,cAClB,mBAAA,EAAqB;AAAA;AACvB,WACF;AAAA,UACA,MAAM;AACJ,YAAA,MAAM,WAAW,YAA2B;AAK1C,cAAA,IAAI,eAAe,UAAA,EAAY;AAC7B,gBAAAC,2BAAA,CAAiB,QAAQ,OAAO,CAAA;AAAA,cAClC;AAAA,YACF,CAAA;AAEA,YAAA,MAAM,MAAA,GAAU,QAAA,CAA6C,KAAA,CAAM,MAAA,EAAQ,IAAI,CAAA;AAE/E,YAAA,IAAI,CAACC,eAAA,CAAW,MAAM,CAAA,EAAG;AACvB,cAAA,SAAA,GAAY,UAAU,CAAA;AAEtB,cAAA,OAAO,MAAA;AAAA,YACT;AAEA,YAAA,OAAO,MAAA,CAAO,IAAA;AAAA,cACZ,CAAA,GAAA,KAAO;AACL,gBAAA,SAAA,GAAY,UAAU,CAAA;AACtB,gBAAA,OAAO,GAAA;AAAA,cACT,CAAA;AAAA,cACA,CAAA,CAAA,KAAK;AACH,gBAAA,MAAM,CAAA;AAAA,cACR;AAAA,aACF;AAAA,UACF;AAAA,SACF;AAAA,MACF,CAAA;AAAA,IACF;AAAA,GACD,CAAA;AACH;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrumentDurableObjectSyncKvStorage.js","sources":["../../../../src/instrumentations/instrumentDurableObjectSyncKvStorage.ts"],"sourcesContent":["import type { SyncKvStorage } from '@cloudflare/workers-types';\nimport { SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, startSpan } from '@sentry/core';\n\nconst SYNC_KV_METHODS_TO_INSTRUMENT = ['get', 'put', 'delete', 'list'] as const;\n\ntype SyncKvMethod = (typeof SYNC_KV_METHODS_TO_INSTRUMENT)[number];\n\nexport function instrumentDurableObjectSyncKvStorage(syncKv: SyncKvStorage): SyncKvStorage {\n return new Proxy(syncKv, {\n get(target, prop, _receiver) {\n const original = Reflect.get(target, prop, target);\n\n if (typeof original !== 'function') {\n return original;\n }\n\n const methodName = prop as SyncKvMethod;\n\n if (!SYNC_KV_METHODS_TO_INSTRUMENT.includes(methodName)) {\n return (original as (...args: unknown[]) => unknown).bind(target);\n }\n\n return function (this: unknown, ...args: unknown[]) {\n return startSpan(\n {\n name: `durable_object_storage_kv_${methodName}`,\n op: 'db',\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.db.cloudflare.durable_object',\n // keeping the value as close as possible to the Cloudflare Worker KV instrumentation\n // https://github.com/cloudflare/workerd/blob/6b8b11787e2b2a800ab0edd0690bfab3857b0529/src/workerd/api/sync-kv.c%2B%2B#L19\n 'db.system.name': 'cloudflare-durable-object-sql',\n 'db.operation.name': methodName,\n },\n },\n () => {\n return (original as (...args: unknown[]) => unknown).apply(target, args);\n },\n );\n };\n },\n });\n}\n"],"names":["startSpan","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"],"mappings":";;;;AAGA,MAAM,6BAAA,GAAgC,CAAC,KAAA,EAAO,KAAA,EAAO,UAAU,MAAM,CAAA;AAI9D,SAAS,qCAAqC,MAAA,EAAsC;AACzF,EAAA,OAAO,IAAI,MAAM,MAAA,EAAQ;AAAA,IACvB,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAW;AAC3B,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,MAAM,MAAM,CAAA;AAEjD,MAAA,IAAI,OAAO,aAAa,UAAA,EAAY;AAClC,QAAA,OAAO,QAAA;AAAA,MACT;AAEA,MAAA,MAAM,UAAA,GAAa,IAAA;AAEnB,MAAA,IAAI,CAAC,6BAAA,CAA8B,QAAA,CAAS,UAAU,CAAA,EAAG;AACvD,QAAA,OAAQ,QAAA,CAA6C,KAAK,MAAM,CAAA;AAAA,MAClE;AAEA,MAAA,OAAO,YAA4B,IAAA,EAAiB;AAClD,QAAA,OAAOA,cAAA;AAAA,UACL;AAAA,YACE,IAAA,EAAM,6BAA6B,UAAU,CAAA,CAAA;AAAA,YAC7C,EAAA,EAAI,IAAA;AAAA,YACJ,UAAA,EAAY;AAAA,cACV,CAACC,qCAAgC,GAAG,mCAAA;AAAA;AAAA;AAAA,cAGpC,gBAAA,EAAkB,+BAAA;AAAA,cAClB,mBAAA,EAAqB;AAAA;AACvB,WACF;AAAA,UACA,MAAM;AACJ,YAAA,OAAQ,QAAA,CAA6C,KAAA,CAAM,MAAA,EAAQ,IAAI,CAAA;AAAA,UACzE;AAAA,SACF;AAAA,MACF,CAAA;AAAA,IACF;AAAA,GACD,CAAA;AACH;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrumentSqlStorage.js","sources":["../../../../src/instrumentations/instrumentSqlStorage.ts"],"sourcesContent":["import type { SqlStorage } from '@cloudflare/workers-types';\nimport {\n _INTERNAL_getSqlQuerySummary,\n _INTERNAL_sanitizeSqlQuery,\n getClient,\n SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN,\n startSpan,\n} from '@sentry/core';\nimport type { CloudflareClientOptions } from '../client';\nimport { targetsCloudflareInternalTable } from '../utils/internalSqlQuery';\n\n/**\n * Instruments the Durable Object SqlStorage `exec` method with Sentry spans.\n *\n * @param sql - The SqlStorage instance to instrument\n * @returns An instrumented SqlStorage instance\n */\nexport function instrumentSqlStorage(sql: SqlStorage): SqlStorage {\n return new Proxy(sql, {\n get(target, prop, _receiver) {\n const original = Reflect.get(target, prop, target);\n\n if (prop !== 'exec' || typeof original !== 'function') {\n return original;\n }\n\n return function (this: unknown, ...args: unknown[]) {\n const [query, ...bindings] = args as [string, ...unknown[]];\n\n const sanitizedQuery = _INTERNAL_sanitizeSqlQuery(query);\n const querySummary = _INTERNAL_getSqlQuerySummary(sanitizedQuery);\n\n // oxlint-disable-next-line typescript/no-unnecessary-type-assertion -- rule false positive: the cast reaches the Cloudflare-only `durableObjectSqlSpanAllowlist`; tsc errors without it\n const allowlist = (getClient()?.getOptions() as CloudflareClientOptions | undefined)\n ?.durableObjectSqlSpanAllowlist;\n\n if (targetsCloudflareInternalTable(querySummary, allowlist, sanitizedQuery)) {\n return (original as (...a: unknown[]) => ReturnType<SqlStorage['exec']>).apply(target, args);\n }\n\n return startSpan(\n {\n op: 'db.query',\n name: querySummary || sanitizedQuery,\n attributes: {\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.db.cloudflare.durable_object.sql',\n 'db.system.name': 'cloudflare-durable-object-sql',\n 'db.operation.name': 'exec',\n 'db.query.text': sanitizedQuery,\n 'db.query.summary': querySummary,\n 'cloudflare.durable_object.query.bindings': bindings.length,\n },\n },\n () => (original as (...a: unknown[]) => ReturnType<SqlStorage['exec']>).apply(target, args),\n );\n };\n },\n });\n}\n"],"names":["_INTERNAL_sanitizeSqlQuery","_INTERNAL_getSqlQuerySummary","getClient","targetsCloudflareInternalTable","startSpan","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN"],"mappings":";;;;;AAiBO,SAAS,qBAAqB,GAAA,EAA6B;AAChE,EAAA,OAAO,IAAI,MAAM,GAAA,EAAK;AAAA,IACpB,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,SAAA,EAAW;AAC3B,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,MAAM,MAAM,CAAA;AAEjD,MAAA,IAAI,IAAA,KAAS,MAAA,IAAU,OAAO,QAAA,KAAa,UAAA,EAAY;AACrD,QAAA,OAAO,QAAA;AAAA,MACT;AAEA,MAAA,OAAO,YAA4B,IAAA,EAAiB;AAClD,QAAA,MAAM,CAAC,KAAA,EAAO,GAAG,QAAQ,CAAA,GAAI,IAAA;AAE7B,QAAA,MAAM,cAAA,GAAiBA,gCAA2B,KAAK,CAAA;AACvD,QAAA,MAAM,YAAA,GAAeC,kCAA6B,cAAc,CAAA;AAGhE,QAAA,MAAM,SAAA,GAAaC,cAAA,EAAU,EAAG,UAAA,EAAW,EACvC,6BAAA;AAEJ,QAAA,IAAIC,+CAAA,CAA+B,YAAA,EAAc,SAAA,EAAW,cAAc,CAAA,EAAG;AAC3E,UAAA,OAAQ,QAAA,CAAiE,KAAA,CAAM,MAAA,EAAQ,IAAI,CAAA;AAAA,QAC7F;AAEA,QAAA,OAAOC,cAAA;AAAA,UACL;AAAA,YACE,EAAA,EAAI,UAAA;AAAA,YACJ,MAAM,YAAA,IAAgB,cAAA;AAAA,YACtB,UAAA,EAAY;AAAA,cACV,CAACC,qCAAgC,GAAG,uCAAA;AAAA,cACpC,gBAAA,EAAkB,+BAAA;AAAA,cAClB,mBAAA,EAAqB,MAAA;AAAA,cACrB,eAAA,EAAiB,cAAA;AAAA,cACjB,kBAAA,EAAoB,YAAA;AAAA,cACpB,4CAA4C,QAAA,CAAS;AAAA;AACvD,WACF;AAAA,UACA,MAAO,QAAA,CAAiE,KAAA,CAAM,MAAA,EAAQ,IAAI;AAAA,SAC5F;AAAA,MACF,CAAA;AAAA,IACF;AAAA,GACD,CAAA;AACH;;;;"}
@@ -1,6 +1,6 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
- const async = require('../async.js');
3
+ const noDiagnosticChannels = require('@sentry/server-utils/no-diagnostic-channels');
4
4
  const options = require('../options.js');
5
5
  const instrumentContext = require('../utils/instrumentContext.js');
6
6
  const rpcMeta = require('../utils/rpcMeta.js');
@@ -58,7 +58,7 @@ function instrumentMethod(instance, proxy, prop, method, options, context) {
58
58
  void 0,
59
59
  true
60
60
  );
61
- if (!options.enableRpcTracePropagation) {
61
+ if (options.enableRpcTracePropagation === false) {
62
62
  return captureMethod;
63
63
  }
64
64
  const tracedMethod = wrapMethodWithSentry.wrapMethodWithSentry(
@@ -73,7 +73,7 @@ function instrumentMethod(instance, proxy, prop, method, options, context) {
73
73
  };
74
74
  }
75
75
  function instrumentWorkerEntrypoint(optionsCallback, WorkerEntrypointClass) {
76
- async.setAsyncLocalStorageAsyncContextStrategy();
76
+ noDiagnosticChannels.setAsyncLocalStorageAsyncContextStrategy();
77
77
  return new Proxy(WorkerEntrypointClass, {
78
78
  construct(target, [ctx, env]) {
79
79
  const context = instrumentContext.instrumentContext(ctx);
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrumentWorkerEntrypoint.js","sources":["../../../../src/instrumentations/instrumentWorkerEntrypoint.ts"],"sourcesContent":["import type { RpcStub, WorkerEntrypoint } from 'cloudflare:workers';\nimport { setAsyncLocalStorageAsyncContextStrategy } from '@sentry/server-utils/no-diagnostic-channels';\nimport type { CloudflareOptions } from '../client';\nimport { getFinalOptions } from '../options';\nimport type { DefaultEnv, ResolveEnv } from '../types';\nimport { instrumentContext } from '../utils/instrumentContext';\nimport { extractRpcMeta } from '../utils/rpcMeta';\nimport { type UncheckedMethod, wrapMethodWithSentry } from '../wrapMethodWithSentry';\nimport { instrumentEnv } from './worker/instrumentEnv';\nimport { instrumentWorkerEntrypointFetch } from './worker/instrumentFetch';\nimport { instrumentWorkerEntrypointQueue } from './worker/instrumentQueue';\nimport { instrumentWorkerEntrypointScheduled } from './worker/instrumentScheduled';\nimport { instrumentWorkerEntrypointTail } from './worker/instrumentTail';\n\nconst WORKER_ENTRYPOINT_ORIGIN = 'auto.faas.cloudflare.worker_entrypoint';\n\ntype ReservedMethod =\n | Exclude<Extract<keyof WorkerEntrypoint, string>, '__WORKER_ENTRYPOINT_BRAND'>\n | Extract<keyof ExportedHandler, string>\n | Exclude<Extract<keyof RpcStub<(...args: unknown[]) => unknown>, string>, '__RPC_STUB_BRAND'>\n | 'constructor';\n\nconst RESERVED_METHODS = new Set<string>([\n 'connect',\n 'constructor',\n 'dup',\n 'email',\n 'fetch',\n 'queue',\n 'scheduled',\n 'tail',\n 'tailStream',\n 'test',\n 'trace',\n] satisfies ReservedMethod[]);\n\ninterface CachedMethod {\n source: UncheckedMethod;\n wrapped: UncheckedMethod;\n}\n\nexport type WorkerEntrypointConstructor<Env = unknown, Props = {}> = new (\n ctx: ExecutionContext,\n // WorkerEntrypoint subclasses can define different `env` shapes, so this constructor must accept all of them.\n // oxlint-disable-next-line typescript/no-explicit-any\n env: any,\n) => InstanceType<typeof WorkerEntrypoint<Env, Props>>;\n\nfunction isPrototypeMethod(instance: object, prop: string, method: UncheckedMethod): boolean {\n let prototype = Object.getPrototypeOf(instance);\n\n while (prototype && prototype !== Object.prototype) {\n const descriptor = Object.getOwnPropertyDescriptor(prototype, prop);\n if (descriptor) {\n return descriptor.value === method;\n }\n prototype = Object.getPrototypeOf(prototype);\n }\n\n return false;\n}\n\nfunction bindToInstance(instance: object, proxy: object, method: UncheckedMethod): UncheckedMethod {\n return new Proxy(method, {\n apply(target, thisArg, args) {\n return Reflect.apply(target, thisArg === proxy ? instance : thisArg, args);\n },\n });\n}\n\nfunction instrumentMethod(\n instance: object,\n proxy: object,\n prop: PropertyKey,\n method: UncheckedMethod,\n options: CloudflareOptions,\n context: ExecutionContext,\n): UncheckedMethod {\n const ownDescriptor = Object.getOwnPropertyDescriptor(instance, prop);\n if (ownDescriptor && 'value' in ownDescriptor && !ownDescriptor.configurable && !ownDescriptor.writable) {\n return method;\n }\n\n const boundMethod = bindToInstance(instance, proxy, method);\n\n if (typeof prop !== 'string' || RESERVED_METHODS.has(prop) || !isPrototypeMethod(instance, prop, method)) {\n return boundMethod;\n }\n\n const captureMethod = wrapMethodWithSentry(\n { options, context, spanOp: 'rpc', origin: WORKER_ENTRYPOINT_ORIGIN },\n boundMethod,\n undefined,\n true,\n );\n\n if (options.enableRpcTracePropagation === false) {\n return captureMethod;\n }\n\n const tracedMethod = wrapMethodWithSentry(\n { options, context, spanName: prop, spanOp: 'rpc', origin: WORKER_ENTRYPOINT_ORIGIN },\n boundMethod,\n undefined,\n true,\n );\n\n return (...args: unknown[]) => {\n const { rpcMeta } = extractRpcMeta(args);\n return rpcMeta ? tracedMethod.call(proxy, ...args) : captureMethod.call(proxy, ...args);\n };\n}\n\n/**\n * Instruments a WorkerEntrypoint class to capture errors and performance data.\n *\n * Instruments the following methods (same as `withSentry` for ExportedHandler):\n * - fetch (HTTP requests)\n * - scheduled (cron triggers)\n * - queue (queue consumers)\n * - email (email handlers)\n * - tail (tail workers)\n *\n * as well as any other public RPC methods on the WorkerEntrypoint instance.\n *\n * @param optionsCallback Function that returns the options for the SDK initialization.\n * @param WorkerEntrypointClass The WorkerEntrypoint class to instrument.\n * @returns The instrumented WorkerEntrypoint class.\n *\n * @example\n * ```ts\n * class MyWorkerBase extends WorkerEntrypoint<Env> {\n * async fetch(request: Request): Promise<Response> {\n * return new Response('Hello World!');\n * }\n *\n * async myRpcMethod(arg: string): Promise<string> {\n * return `Hello ${arg}!`;\n * }\n * }\n *\n * export default instrumentWorkerEntrypoint(\n * env => ({\n * dsn: env.SENTRY_DSN,\n * tracesSampleRate: 1.0,\n * }),\n * MyWorkerBase,\n * );\n * ```\n */\nexport function instrumentWorkerEntrypoint<\n Env = DefaultEnv,\n Props = {},\n // oxlint-disable-next-line typescript/no-explicit-any\n T extends WorkerEntrypoint<any, any> = WorkerEntrypoint<Env, Props>,\n // oxlint-disable-next-line typescript/no-explicit-any\n C extends new (ctx: ExecutionContext, env: any) => T = new (ctx: ExecutionContext, env: any) => T,\n>(optionsCallback: (env: ResolveEnv<C, Env>) => CloudflareOptions | undefined, WorkerEntrypointClass: C): C {\n // Set up AsyncLocalStorage strategy ONCE at instrumentation time, not per-request\n // This is critical - calling this per-request would create a new AsyncLocalStorage\n // each time, breaking scope isolation for concurrent requests\n setAsyncLocalStorageAsyncContextStrategy();\n\n return new Proxy(WorkerEntrypointClass, {\n construct(target, [ctx, env]) {\n const context = instrumentContext(ctx);\n const options = getFinalOptions(optionsCallback(env), env);\n const instrumentedEnv = instrumentEnv(env, options);\n const obj = new target(context, instrumentedEnv);\n\n // Override this.ctx to ensure the instrumented context is used\n // This is necessary because the base WorkerEntrypoint class sets this.ctx\n // from the constructor parameter, but we want users accessing this.ctx\n // to get the instrumented version\n if ('ctx' in obj) {\n Object.defineProperty(obj, 'ctx', {\n value: context,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n\n if ('env' in obj) {\n Object.defineProperty(obj, 'env', {\n value: instrumentedEnv,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n\n Object.defineProperty(obj, '__SENTRY_CONTEXT__', {\n value: context,\n enumerable: false,\n writable: false,\n configurable: false,\n });\n\n Object.defineProperty(obj, '__SENTRY_OPTIONS__', {\n value: options,\n enumerable: false,\n writable: false,\n configurable: false,\n });\n\n const entrypoint = obj as WorkerEntrypoint;\n instrumentWorkerEntrypointFetch(entrypoint, options, context);\n instrumentWorkerEntrypointScheduled(entrypoint, options, context);\n instrumentWorkerEntrypointQueue(entrypoint, options, context);\n instrumentWorkerEntrypointTail(entrypoint, options, context);\n\n // workerd resolves RPC methods through property access.\n const methodCache = new Map<PropertyKey, CachedMethod>();\n\n const proxy: typeof obj = new Proxy(obj, {\n get(instance, prop) {\n const value = Reflect.get(instance, prop, instance);\n\n if (typeof value !== 'function') {\n return value;\n }\n\n const method = value as UncheckedMethod;\n\n const cached = methodCache.get(prop);\n if (cached?.source === method) {\n return cached.wrapped;\n }\n\n const wrapped = instrumentMethod(instance, proxy, prop, method, options, context);\n methodCache.set(prop, { source: method, wrapped });\n return wrapped;\n },\n });\n\n return proxy;\n },\n });\n}\n"],"names":["wrapMethodWithSentry","rpcMeta","extractRpcMeta","setAsyncLocalStorageAsyncContextStrategy","instrumentContext","options","getFinalOptions","instrumentEnv","instrumentWorkerEntrypointFetch","instrumentWorkerEntrypointScheduled","instrumentWorkerEntrypointQueue","instrumentWorkerEntrypointTail"],"mappings":"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"}
@@ -156,10 +156,6 @@ function _instrumentD1(db) {
156
156
  function instrumentD1(db) {
157
157
  return instrument.ensureInstrumented(db, _instrumentD1);
158
158
  }
159
- function instrumentD1WithSentry(db) {
160
- return instrumentD1(db);
161
- }
162
159
 
163
160
  exports.instrumentD1 = instrumentD1;
164
- exports.instrumentD1WithSentry = instrumentD1WithSentry;
165
161
  //# sourceMappingURL=instrumentD1.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrumentD1.js","sources":["../../../../../src/instrumentations/worker/instrumentD1.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/unbound-method */\nimport type { D1Database, D1DatabaseSession, D1PreparedStatement, D1Response } from '@cloudflare/workers-types';\nimport type { Span, SpanAttributes, StartSpanOptions } from '@sentry/core';\nimport { addBreadcrumb, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, SPAN_STATUS_ERROR, startSpan } from '@sentry/core';\nimport { ensureInstrumented } from '../../instrument';\n\n// Patching is based on internal Cloudflare D1 API\n// https://github.com/cloudflare/workerd/blob/cd5279e7b305003f1d9c851e73efa9d67e4b68b2/src/cloudflare/internal/d1-api.ts\n\nconst patchedStatement = new WeakSet<D1PreparedStatement>();\n\n/**\n * Patches the query methods of a Cloudflare D1 prepared statement with Sentry.\n */\nfunction instrumentD1PreparedStatementQueries(statement: D1PreparedStatement, query: string): D1PreparedStatement {\n if (patchedStatement.has(statement)) {\n return statement;\n }\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n statement.first = new Proxy(statement.first, {\n apply(target, thisArg, args: Parameters<typeof statement.first>) {\n return startSpan(createStartSpanOptions(query, 'first'), async () => {\n const res = await Reflect.apply(target, thisArg, args);\n createD1Breadcrumb(query, 'first');\n return res;\n });\n },\n });\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n statement.run = new Proxy(statement.run, {\n apply(target, thisArg, args: Parameters<typeof statement.run>) {\n return startSpan(createStartSpanOptions(query, 'run'), async span => {\n const d1Response = await Reflect.apply(target, thisArg, args);\n applyD1ReturnObjectToSpan(span, d1Response);\n createD1Breadcrumb(query, 'run', d1Response);\n return d1Response;\n });\n },\n });\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n statement.all = new Proxy(statement.all, {\n apply(target, thisArg, args: Parameters<typeof statement.all>) {\n return startSpan(createStartSpanOptions(query, 'all'), async span => {\n const d1Result = await Reflect.apply(target, thisArg, args);\n applyD1ReturnObjectToSpan(span, d1Result);\n createD1Breadcrumb(query, 'all', d1Result);\n return d1Result;\n });\n },\n });\n\n // eslint-disable-next-line @typescript-eslint/unbound-method\n statement.raw = new Proxy(statement.raw, {\n apply(target, thisArg, args: Parameters<typeof statement.raw>) {\n return startSpan(createStartSpanOptions(query, 'raw'), async () => {\n const res = await Reflect.apply(target, thisArg, args);\n createD1Breadcrumb(query, 'raw');\n return res;\n });\n },\n });\n\n patchedStatement.add(statement);\n\n return statement;\n}\n\n/**\n * Instruments a Cloudflare D1 prepared statement with Sentry.\n *\n * This is meant to be used as a top-level call, under the hood it calls `instrumentD1PreparedStatementQueries`\n * to patch the query methods. The reason for this abstraction is to ensure that the `bind` method is also patched.\n */\nfunction instrumentD1PreparedStatement(statement: D1PreparedStatement, query: string): D1PreparedStatement {\n // statement.bind() returns a new instance of D1PreparedStatement, so we have to patch it as well.\n // eslint-disable-next-line @typescript-eslint/unbound-method\n statement.bind = new Proxy(statement.bind, {\n apply(target, thisArg, args: Parameters<typeof statement.bind>) {\n return instrumentD1PreparedStatementQueries(Reflect.apply(target, thisArg, args), query);\n },\n });\n\n return instrumentD1PreparedStatementQueries(statement, query);\n}\n\n/**\n * Add D1Response meta information to a span.\n *\n * See: https://developers.cloudflare.com/d1/build-with-d1/d1-client-api/#return-object\n */\nfunction applyD1ReturnObjectToSpan(span: Span, d1Result: D1Response): void {\n if (!d1Result.success) {\n span.setStatus({ code: SPAN_STATUS_ERROR });\n }\n\n span.setAttributes(getAttributesFromD1Response(d1Result));\n}\n\nfunction getAttributesFromD1Response(d1Result: D1Response): SpanAttributes {\n return {\n 'cloudflare.d1.duration': d1Result.meta.duration,\n 'cloudflare.d1.rows_read': d1Result.meta.rows_read,\n 'cloudflare.d1.rows_written': d1Result.meta.rows_written,\n };\n}\n\ntype D1QueryType = 'first' | 'run' | 'all' | 'raw' | 'batch' | 'exec';\n\nfunction createD1Breadcrumb(query: string, type: D1QueryType, d1Result?: D1Response): void {\n addBreadcrumb({\n category: 'query',\n message: query,\n data: {\n ...(d1Result ? getAttributesFromD1Response(d1Result) : {}),\n 'db.operation.name': type,\n },\n });\n}\n\nfunction createStartSpanOptions(query: string, type: D1QueryType): StartSpanOptions {\n return {\n op: 'db.query',\n name: query,\n attributes: {\n 'db.system.name': 'cloudflare-d1',\n 'db.operation.name': type,\n 'db.query.text': query,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.db.cloudflare.d1',\n },\n };\n}\n\nfunction instrumentPrepare(\n prepare: D1Database['prepare'] | D1DatabaseSession['prepare'],\n): D1Database['prepare'] | D1DatabaseSession['prepare'] {\n return new Proxy(prepare, {\n apply(target, thisArg, args: Parameters<typeof prepare>) {\n const [query] = args;\n return instrumentD1PreparedStatement(Reflect.apply(target, thisArg, args), query);\n },\n });\n}\n\nfunction instrumentBatch(\n batch: D1Database['batch'] | D1DatabaseSession['batch'],\n): D1Database['batch'] | D1DatabaseSession['batch'] {\n return new Proxy(batch, {\n apply(target, thisArg, args: Parameters<typeof batch>) {\n const statements = args[0];\n // D1PreparedStatement exposes a `statement` property at runtime, but it's not in @cloudflare/workers-types.\n // https://github.com/cloudflare/workerd/blob/dc12d7650b4f5d4f9ba6a47aa45fad769cdf8db4/src/cloudflare/internal/d1-api.ts#L210\n const queryText = statements\n .map(statement => (statement as unknown as { statement?: string }).statement ?? '')\n .filter(Boolean)\n .join('\\n');\n\n return startSpan(\n {\n op: 'db.query',\n name: 'D1 batch',\n attributes: {\n 'db.system.name': 'cloudflare-d1',\n 'db.operation.name': 'batch',\n 'db.query.text': queryText || undefined,\n 'db.operation.batch.size': statements.length,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.db.cloudflare.d1',\n },\n },\n async () => {\n const res = await Reflect.apply(target, thisArg, args);\n createD1Breadcrumb('D1 batch', 'batch');\n return res;\n },\n );\n },\n });\n}\n\nfunction instrumentD1Session(session: D1DatabaseSession): D1DatabaseSession {\n session.prepare = instrumentPrepare(session.prepare);\n session.batch = instrumentBatch(session.batch);\n return session;\n}\n\nfunction _instrumentD1(db: D1Database): D1Database {\n db.prepare = instrumentPrepare(db.prepare);\n db.batch = instrumentBatch(db.batch);\n\n db.exec = new Proxy(db.exec, {\n apply(target, thisArg, args: Parameters<typeof db.exec>) {\n const [query] = args;\n return startSpan(createStartSpanOptions(query, 'exec'), async () => {\n const res = await Reflect.apply(target, thisArg, args);\n createD1Breadcrumb(query, 'exec');\n return res;\n });\n },\n });\n\n if ('withSession' in db && typeof db.withSession === 'function') {\n db.withSession = new Proxy(db.withSession, {\n apply(target, thisArg, args: [unknown]) {\n return instrumentD1Session(Reflect.apply(target, thisArg, args) as D1DatabaseSession);\n },\n });\n }\n\n return db;\n}\n\nexport function instrumentD1(db: D1Database): D1Database {\n return ensureInstrumented(db, _instrumentD1);\n}\n"],"names":["startSpan","SPAN_STATUS_ERROR","addBreadcrumb","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","ensureInstrumented"],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
+ const attributes = require('@sentry/conventions/attributes');
4
+ const op = require('@sentry/conventions/op');
3
5
  const core = require('@sentry/core');
4
6
  const flush = require('../../flush.js');
5
7
  const instrument = require('../../instrument.js');
@@ -17,9 +19,9 @@ function wrapEmailHandler(emailMessage, options, context, fn) {
17
19
  scopeUtils.addCloudResourceContext(isolationScope);
18
20
  return core.startSpan(
19
21
  {
20
- op: "faas.email",
21
22
  name: `Handle Email ${emailMessage.to}`,
22
23
  attributes: {
24
+ [attributes.SENTRY_OP]: op.GENERAL_FUNCTION_SPAN_OP,
23
25
  "faas.trigger": "email",
24
26
  [core.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.faas.cloudflare.email",
25
27
  [core.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "task"
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrumentEmail.js","sources":["../../../../../src/instrumentations/worker/instrumentEmail.ts"],"sourcesContent":["import type { EmailMessage } from '@cloudflare/workers-types';\nimport type { AnyExportedHandler } from '../../types';\nimport type { env as cloudflareEnv } from 'cloudflare:workers';\nimport { SENTRY_OP } from '@sentry/conventions/attributes';\nimport { GENERAL_FUNCTION_SPAN_OP } from '@sentry/conventions/op';\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\n/**\n * Core email handler logic - wraps execution with Sentry instrumentation.\n */\nfunction wrapEmailHandler(\n emailMessage: EmailMessage,\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 name: `Handle Email ${emailMessage.to}`,\n attributes: {\n [SENTRY_OP]: GENERAL_FUNCTION_SPAN_OP,\n 'faas.trigger': 'email',\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: 'auto.faas.cloudflare.email',\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.email' } });\n throw e;\n } finally {\n waitUntil(flushAndDispose(client));\n }\n },\n );\n });\n}\n\n/**\n * Instruments an email handler for ExportedHandler (env/ctx come from args).\n */\nexport function instrumentExportedHandlerEmail<T extends AnyExportedHandler>(\n handler: T,\n optionsCallback: (env: typeof cloudflareEnv) => CloudflareOptions | undefined,\n): void {\n if (!('email' in handler) || typeof handler.email !== 'function') {\n return;\n }\n\n handler.email = ensureInstrumented(\n handler.email,\n original =>\n new Proxy(original, {\n apply(target, thisArg, args: Parameters<NonNullable<T['email']>>) {\n const [emailMessage, 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 wrapEmailHandler(emailMessage, options, context, () => target.apply(thisArg, args));\n },\n }),\n );\n}\n"],"names":["withIsolationScope","init","addCloudResourceContext","startSpan","SENTRY_OP","GENERAL_FUNCTION_SPAN_OP","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","captureException","flushAndDispose","ensureInstrumented","instrumentContext","options","getFinalOptions","instrumentEnv"],"mappings":";;;;;;;;;;;;;AAwBA,SAAS,gBAAA,CACP,YAAA,EACA,OAAA,EACA,OAAA,EACA,EAAA,EACS;AACT,EAAA,OAAOA,wBAAmB,CAAA,cAAA,KAAkB;AAC1C,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,OAAOC,cAAA;AAAA,MACL;AAAA,QACE,IAAA,EAAM,CAAA,aAAA,EAAgB,YAAA,CAAa,EAAE,CAAA,CAAA;AAAA,QACrC,UAAA,EAAY;AAAA,UACV,CAACC,oBAAS,GAAGC,2BAAA;AAAA,UACb,cAAA,EAAgB,OAAA;AAAA,UAChB,CAACC,qCAAgC,GAAG,4BAAA;AAAA,UACpC,CAACC,qCAAgC,GAAG;AAAA;AACtC,OACF;AAAA,MACA,YAAY;AACV,QAAA,IAAI;AACF,UAAA,OAAO,MAAM,EAAA,EAAG;AAAA,QAClB,SAAS,CAAA,EAAG;AACV,UAAAC,qBAAA,CAAiB,CAAA,EAAG,EAAE,SAAA,EAAW,EAAE,SAAS,KAAA,EAAO,IAAA,EAAM,4BAAA,EAA6B,EAAG,CAAA;AACzF,UAAA,MAAM,CAAA;AAAA,QACR,CAAA,SAAE;AACA,UAAA,SAAA,CAAUC,qBAAA,CAAgB,MAAM,CAAC,CAAA;AAAA,QACnC;AAAA,MACF;AAAA,KACF;AAAA,EACF,CAAC,CAAA;AACH;AAKO,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,GAAQC,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,CAAC,YAAA,EAAc,GAAA,EAAK,GAAG,CAAA,GAAI,IAAA;AACjC,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,gBAAA,CAAiB,cAAcA,SAAA,EAAS,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,CAAM,OAAA,EAAS,IAAI,CAAC,CAAA;AAAA,MAC3F;AAAA,KACD;AAAA,GACL;AACF;;;;"}
@@ -1,10 +1,10 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
3
  const core = require('@sentry/core');
4
+ const serverUtils = require('@sentry/server-utils');
4
5
  const isBinding = require('../../utils/isBinding.js');
5
6
  const instrumentD1 = require('./instrumentD1.js');
6
7
  const rpcMeta = require('../../utils/rpcMeta.js');
7
- const rpcOptions = require('../../utils/rpcOptions.js');
8
8
  const instrumentDurableObjectNamespace = require('../instrumentDurableObjectNamespace.js');
9
9
  const instrumentFetcher = require('./instrumentFetcher.js');
10
10
  const instrumentQueueProducer = require('./instrumentQueueProducer.js');
@@ -19,7 +19,6 @@ function instrumentEnv(env, options) {
19
19
  if (!env || typeof env !== "object") {
20
20
  return env;
21
21
  }
22
- const rpcPropagation = options ? rpcOptions.getEffectiveRpcPropagation(options) : false;
23
22
  return new Proxy(env, {
24
23
  get(target, prop, receiver) {
25
24
  const item = Reflect.get(target, prop, receiver);
@@ -54,11 +53,11 @@ function instrumentEnv(env, options) {
54
53
  return instrumented;
55
54
  }
56
55
  if (isBinding.isAiBinding(item)) {
57
- const instrumented = core.instrumentWorkersAiClient(item);
56
+ const instrumented = serverUtils.instrumentWorkersAiClient(item);
58
57
  instrumentedBindings.set(item, instrumented);
59
58
  return instrumented;
60
59
  }
61
- if (!rpcPropagation) {
60
+ if (options?.enableRpcTracePropagation === false) {
62
61
  return item;
63
62
  }
64
63
  if (isBinding.isDurableObjectNamespace(item)) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrumentEnv.js","sources":["../../../../../src/instrumentations/worker/instrumentEnv.ts"],"sourcesContent":["import { isObjectLike } from '@sentry/core';\nimport { instrumentWorkersAiClient } from '@sentry/server-utils';\nimport type { CloudflareOptions } from '../../client';\nimport {\n isAiBinding,\n isD1Database,\n isDurableObjectNamespace,\n isJSRPC,\n isQueue,\n isR2Bucket,\n isRateLimit,\n} from '../../utils/isBinding';\nimport { instrumentD1 } from './instrumentD1';\nimport { appendRpcMeta } from '../../utils/rpcMeta';\nimport { instrumentDurableObjectNamespace, STUB_NON_RPC_METHODS } from '../instrumentDurableObjectNamespace';\nimport { instrumentFetcher } from './instrumentFetcher';\nimport { instrumentQueueProducer } from './instrumentQueueProducer';\nimport { instrumentR2Bucket } from './instrumentR2';\nimport { instrumentRateLimit } from './instrumentRateLimit';\n\nfunction isProxyable(item: unknown): item is object {\n return isObjectLike(item) || typeof item === 'function';\n}\n\nconst instrumentedBindings = new WeakMap<object, unknown>();\n\n/**\n * Wraps the Cloudflare `env` object in a Proxy that detects binding types\n * on property access and returns instrumented versions.\n *\n * Currently detects:\n * - DurableObjectNamespace (via `idFromName` duck-typing)\n * - Service bindings / JSRPC proxies\n * - Queue producers (via `send` + `sendBatch` duck-typing)\n * - R2 Buckets (via `head` + `put` + `createMultipartUpload` duck-typing)\n * - Rate limiters (via `limit` duck-typing)\n * - Workers AI (via `run` + `gateway` + `toMarkdown` duck-typing)\n *\n * @param env - The Cloudflare env object to instrument\n * @param options - Optional CloudflareOptions to control RPC trace propagation\n */\nexport function instrumentEnv<Env extends Record<string, unknown>>(env: Env, options?: CloudflareOptions): Env {\n if (!env || typeof env !== 'object') {\n return env;\n }\n\n return new Proxy(env, {\n get(target, prop, receiver) {\n const item = Reflect.get(target, prop, receiver);\n\n if (!isProxyable(item)) {\n return item;\n }\n\n const cached = instrumentedBindings.get(item);\n\n if (cached) {\n return cached;\n }\n\n if (isD1Database(item)) {\n const instrumented = instrumentD1(item);\n instrumentedBindings.set(item, instrumented);\n return instrumented;\n }\n\n if (isQueue(item)) {\n const bindingName = typeof prop === 'string' ? prop : String(prop);\n const instrumented = instrumentQueueProducer(item, bindingName);\n instrumentedBindings.set(item, instrumented);\n return instrumented;\n }\n\n if (isR2Bucket(item)) {\n const bindingName = typeof prop === 'string' ? prop : String(prop);\n const instrumented = instrumentR2Bucket(item, bindingName);\n instrumentedBindings.set(item, instrumented);\n return instrumented;\n }\n\n if (isRateLimit(item)) {\n const bindingName = typeof prop === 'string' ? prop : String(prop);\n const instrumented = instrumentRateLimit(item, bindingName);\n instrumentedBindings.set(item, instrumented);\n return instrumented;\n }\n\n if (isAiBinding(item)) {\n const instrumented = instrumentWorkersAiClient(item);\n instrumentedBindings.set(item, instrumented);\n return instrumented;\n }\n\n if (options?.enableRpcTracePropagation === false) {\n return item;\n }\n\n if (isDurableObjectNamespace(item)) {\n const instrumented = instrumentDurableObjectNamespace(item);\n instrumentedBindings.set(item, instrumented);\n return instrumented;\n }\n\n if (isJSRPC(item)) {\n const instrumented = new Proxy(item, {\n get(target, p) {\n const value = Reflect.get(target, p);\n\n if (p === 'fetch' && typeof value === 'function') {\n return instrumentFetcher((...args) => Reflect.apply(value, target, args));\n }\n\n if (typeof value === 'function' && typeof p === 'string' && !STUB_NON_RPC_METHODS.has(p)) {\n return (...args: unknown[]) => Reflect.apply(value, target, appendRpcMeta(args));\n }\n\n return value;\n },\n });\n\n instrumentedBindings.set(item, instrumented);\n return instrumented;\n }\n\n return item;\n },\n });\n}\n"],"names":["isObjectLike","isD1Database","instrumentD1","isQueue","instrumentQueueProducer","isR2Bucket","instrumentR2Bucket","isRateLimit","instrumentRateLimit","isAiBinding","instrumentWorkersAiClient","isDurableObjectNamespace","instrumentDurableObjectNamespace","isJSRPC","target","instrumentFetcher","STUB_NON_RPC_METHODS","appendRpcMeta"],"mappings":"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"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
3
3
  const instrument = require('../../instrument.js');
4
4
  const options = require('../../options.js');
5
5
  const request = require('../../request.js');
6
+ const sdk = require('../../sdk.js');
6
7
  const instrumentContext = require('../../utils/instrumentContext.js');
7
8
  const instrumentEnv = require('./instrumentEnv.js');
8
9
 
@@ -14,7 +15,8 @@ function instrumentExportedHandlerFetch(handler, optionsCallback) {
14
15
  handler.fetch,
15
16
  (original) => new Proxy(original, {
16
17
  apply(target, thisArg, args) {
17
- const [request$1, env, ctx] = args;
18
+ const [rawRequest, env, ctx] = args;
19
+ const request$1 = rawRequest;
18
20
  if (request$1.method === "OPTIONS" || request$1.method === "HEAD") {
19
21
  return target.apply(thisArg, args);
20
22
  }
@@ -22,7 +24,7 @@ function instrumentExportedHandlerFetch(handler, optionsCallback) {
22
24
  const options$1 = options.getFinalOptions(optionsCallback(env), env);
23
25
  args[1] = instrumentEnv.instrumentEnv(env, options$1);
24
26
  args[2] = context;
25
- return request.wrapRequestHandler({ options: options$1, request: request$1, context }, () => target.apply(thisArg, args));
27
+ return request.wrapRequestHandlerWithInit({ options: options$1, request: request$1, context }, () => target.apply(thisArg, args), sdk.init);
26
28
  }
27
29
  })
28
30
  );
@@ -38,7 +40,11 @@ function instrumentWorkerEntrypointFetch(instance, options, context) {
38
40
  if (request$1.method === "OPTIONS" || request$1.method === "HEAD") {
39
41
  return Reflect.apply(target, thisArg, args);
40
42
  }
41
- return request.wrapRequestHandler({ options, request: request$1, context }, () => Reflect.apply(target, thisArg, args));
43
+ return request.wrapRequestHandlerWithInit(
44
+ { options, request: request$1, context },
45
+ () => Reflect.apply(target, thisArg, args),
46
+ sdk.init
47
+ );
42
48
  }
43
49
  });
44
50
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrumentFetch.js","sources":["../../../../../src/instrumentations/worker/instrumentFetch.ts"],"sourcesContent":["import type { AnyExportedHandler } from '../../types';\nimport type { env as cloudflareEnv, WorkerEntrypoint } from 'cloudflare:workers';\nimport type { CloudflareOptions } from '../../client';\nimport { ensureInstrumented } from '../../instrument';\nimport { getFinalOptions } from '../../options';\nimport { wrapRequestHandlerWithInit } from '../../request';\nimport { init } from '../../sdk';\nimport { instrumentContext } from '../../utils/instrumentContext';\nimport { instrumentEnv } from './instrumentEnv';\n\n/**\n * Instruments a fetch handler for ExportedHandler (env/ctx come from args).\n */\nexport function instrumentExportedHandlerFetch<T extends AnyExportedHandler>(\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 [rawRequest, env, ctx] = args;\n // `T['fetch']` resolves to the structural `AnyHandlerMethod`, whose parameters are\n // `any` — but the fetch event is always a `Request` at runtime.\n const request = rawRequest as Request;\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 wrapRequestHandlerWithInit({ options, request, context }, () => target.apply(thisArg, args), init);\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 wrapRequestHandlerWithInit(\n { options, request, context },\n () => Reflect.apply(target, thisArg, args),\n init,\n );\n },\n });\n}\n"],"names":["ensureInstrumented","request","instrumentContext","options","getFinalOptions","instrumentEnv","wrapRequestHandlerWithInit","init"],"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,CAAC,UAAA,EAAY,GAAA,EAAK,GAAG,CAAA,GAAI,IAAA;AAG/B,QAAA,MAAMC,SAAA,GAAU,UAAA;AAEhB,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,kCAAA,CAA2B,WAAEH,SAAA,WAASF,SAAA,EAAS,OAAA,EAAQ,EAAG,MAAM,MAAA,CAAO,KAAA,CAAM,OAAA,EAAS,IAAI,CAAA,EAAGM,QAAI,CAAA;AAAA,MAC1G;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,CAACN,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,kCAAA;AAAA,QACL,EAAE,OAAA,WAASL,SAAA,EAAS,OAAA,EAAQ;AAAA,QAC5B,MAAM,OAAA,CAAQ,KAAA,CAAM,MAAA,EAAQ,SAAS,IAAI,CAAA;AAAA,QACzCM;AAAA,OACF;AAAA,IACF;AAAA,GACD,CAAA;AACH;;;;;"}
@@ -0,0 +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":";;;;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;;;;"}
@@ -1,5 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
2
2
 
3
+ const attributes = require('@sentry/conventions/attributes');
4
+ const op = require('@sentry/conventions/op');
3
5
  const core = require('@sentry/core');
4
6
  const flush = require('../../flush.js');
5
7
  const instrument = require('../../instrument.js');
@@ -17,9 +19,9 @@ function wrapQueueHandler(batch, options, context, fn) {
17
19
  scopeUtils.addCloudResourceContext(isolationScope);
18
20
  return core.startSpan(
19
21
  {
20
- op: "faas.queue",
21
22
  name: `process ${batch.queue}`,
22
23
  attributes: {
24
+ [attributes.SENTRY_OP]: op.MESSAGING_QUEUE_PROCESS_SPAN_OP,
23
25
  "faas.trigger": "pubsub",
24
26
  "messaging.destination.name": batch.queue,
25
27
  "messaging.system": "cloudflare",
@@ -27,7 +29,6 @@ function wrapQueueHandler(batch, options, context, fn) {
27
29
  "messaging.operation.name": "process",
28
30
  "messaging.batch.message_count": batch.messages.length,
29
31
  "messaging.message.retry.count": batch.messages.reduce((acc, message) => acc + message.attempts - 1, 0),
30
- [core.SEMANTIC_ATTRIBUTE_SENTRY_OP]: "queue.process",
31
32
  [core.SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: "auto.faas.cloudflare.queue",
32
33
  [core.SEMANTIC_ATTRIBUTE_SENTRY_SOURCE]: "task"
33
34
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrumentQueue.js","sources":["../../../../../src/instrumentations/worker/instrumentQueue.ts"],"sourcesContent":["import type { MessageBatch } from '@cloudflare/workers-types';\nimport type { AnyExportedHandler } from '../../types';\nimport type { env as cloudflareEnv, WorkerEntrypoint } from 'cloudflare:workers';\nimport { SENTRY_OP } from '@sentry/conventions/attributes';\nimport { MESSAGING_QUEUE_PROCESS_SPAN_OP } from '@sentry/conventions/op';\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\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 name: `process ${batch.queue}`,\n attributes: {\n [SENTRY_OP]: MESSAGING_QUEUE_PROCESS_SPAN_OP,\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_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 */\nexport function instrumentExportedHandlerQueue<T extends AnyExportedHandler>(\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","SENTRY_OP","MESSAGING_QUEUE_PROCESS_SPAN_OP","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","SEMANTIC_ATTRIBUTE_SENTRY_SOURCE","captureException","flushAndDispose","ensureInstrumented","instrumentContext","options","getFinalOptions","instrumentEnv"],"mappings":"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"}
@@ -0,0 +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): ReturnType<Queue['send']> {\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 ): ReturnType<Queue['sendBatch']> {\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":";;;;AAGA,MAAM,MAAA,GAAS,4BAAA;AAEf,SAAS,gBAAA,CACP,SAKA,QAAA,EACG;AACH,EAAA,MAAM,EAAE,WAAA,EAAa,QAAA,EAAU,YAAA,EAAa,GAAI,OAAA;AAEhD,EAAA,OAAOA,cAAA;AAAA,IACL;AAAA,MACE,EAAA,EAAI,eAAA;AAAA,MACJ,IAAA,EAAM,QAAQ,WAAW,CAAA,CAAA;AAAA,MACzB,UAAA,EAAY;AAAA,QACV,kBAAA,EAAoB,YAAA;AAAA,QACpB,4BAAA,EAA8B,WAAA;AAAA,QAC9B,0BAAA,EAA4B,MAAA;AAAA,QAC5B,0BAAA,EAA4B,MAAA;AAAA,QAC5B,GAAI,YAAA,KAAiB,MAAA,IAAa,EAAE,iCAAiC,YAAA,EAAa;AAAA,QAClF,6BAAA,EAA+B,QAAA;AAAA,QAC/B,CAACC,iCAA4B,GAAG,eAAA;AAAA,QAChC,CAACC,qCAAgC,GAAG;AAAA;AACtC,KACF;AAAA,IACA;AAAA,GACF;AACF;AAEA,SAAS,YAAY,IAAA,EAAmC;AACtD,EAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,IAAA,OAAO,MAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC5B,IAAA,OAAO,IAAI,WAAA,EAAY,CAAE,MAAA,CAAO,IAAI,CAAA,CAAE,UAAA;AAAA,EACxC;AAEA,EAAA,IAAI,gBAAgB,WAAA,EAAa;AAC/B,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAEA,EAAA,IAAI,WAAA,CAAY,MAAA,CAAO,IAAI,CAAA,EAAG;AAC5B,IAAA,OAAO,IAAA,CAAK,UAAA;AAAA,EACd;AAEA,EAAA,IAAI;AACF,IAAA,OAAO,IAAI,aAAY,CAAE,MAAA,CAAO,KAAK,SAAA,CAAU,IAAI,CAAC,CAAA,CAAE,UAAA;AAAA,EACxD,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AASO,SAAS,uBAAA,CAAyC,OAAU,WAAA,EAAwB;AACzF,EAAA,OAAO,IAAI,MAAM,KAAA,EAAO;AAAA,IACtB,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU;AAC1B,MAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,QAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,MAAM,QAAQ,CAAA;AAEnD,QAAA,OAAO,SAAyB,SAAkB,OAAA,EAAuD;AACvG,UAAA,OAAO,gBAAA;AAAA,YAAiB,EAAE,WAAA,EAAa,QAAA,EAAU,WAAA,CAAY,OAAO,CAAA,EAAE;AAAA,YAAG,MACvE,QAAQ,KAAA,CAAM,QAAA,EAAU,QAAQ,CAAC,OAAA,EAAS,OAAO,CAAC;AAAA,WACpD;AAAA,QACF,CAAA;AAAA,MACF;AAEA,MAAA,IAAI,SAAS,WAAA,EAAa;AACxB,QAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,MAAM,QAAQ,CAAA;AACnD,QAAA,OAAO,SAEL,UACA,OAAA,EACgC;AAChC,UAAA,MAAM,YAAA,GAAe,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA;AACxC,UAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,MAAA,CAA2B,CAAC,KAAK,CAAA,KAAM;AACxE,YAAA,MAAM,IAAA,GAAO,WAAA,CAAY,CAAA,CAAE,IAAI,CAAA;AAC/B,YAAA,IAAI,SAAS,MAAA,EAAW;AACtB,cAAA,OAAO,GAAA;AAAA,YACT;AACA,YAAA,OAAA,CAAQ,OAAO,CAAA,IAAK,IAAA;AAAA,UACtB,GAAG,MAAS,CAAA;AAEZ,UAAA,OAAO,gBAAA;AAAA,YAAiB,EAAE,WAAA,EAAa,QAAA,EAAU,aAAA,EAAe,YAAA,EAAc,aAAa,MAAA,EAAO;AAAA,YAAG,MACnG,QAAQ,KAAA,CAAM,QAAA,EAAU,QAAQ,CAAC,YAAA,EAAc,OAAO,CAAC;AAAA,WACzD;AAAA,QACF,CAAA;AAAA,MACF;AAEA,MAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,MAAA,EAAQ,IAAA,EAAM,QAAQ,CAAA;AAAA,IAC3C;AAAA,GACD,CAAA;AACH;;;;"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrumentR2.js","sources":["../../../../../src/instrumentations/worker/instrumentR2.ts"],"sourcesContent":["import type { R2Bucket, R2ListOptions, R2MultipartUpload } from '@cloudflare/workers-types';\nimport { isObjectLike, SEMANTIC_ATTRIBUTE_SENTRY_OP, SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN, startSpan } from '@sentry/core';\n\nconst ORIGIN = 'auto.faas.cloudflare.r2';\n\nconst R2_OPERATIONS = {\n get: { spanName: 'r2_get', op: 'object.get', operation: 'GetObject' },\n head: { spanName: 'r2_head', op: 'object.head', operation: 'HeadObject' },\n put: { spanName: 'r2_put', op: 'object.put', operation: 'PutObject' },\n delete: { spanName: 'r2_delete', op: 'object.delete', operation: 'DeleteObject' },\n list: { spanName: 'r2_list', op: 'object.list', operation: 'ListObjects' },\n uploadPart: { spanName: 'r2_uploadPart', op: 'object.upload_part', operation: 'UploadPart' },\n abortMultipartUpload: {\n spanName: 'r2_abortMultipartUpload',\n op: 'object.multipart_upload.abort',\n operation: 'AbortMultipartUpload',\n },\n createMultipartUpload: {\n spanName: 'r2_createMultipartUpload',\n op: 'object.multipart_upload.create',\n operation: 'CreateMultipartUpload',\n },\n completeMultipartUpload: {\n spanName: 'r2_completeMultipartUpload',\n op: 'object.multipart_upload.complete',\n operation: 'CompleteMultipartUpload',\n },\n} as const;\n\ntype R2OperationKey = keyof typeof R2_OPERATIONS;\n\nfunction isR2ListOptions(key: unknown): key is R2ListOptions {\n return isObjectLike(key) && !Array.isArray(key);\n}\n\nfunction createSpanOptions(bindingName: string, r2Op: R2OperationKey, key?: string | string[] | R2ListOptions) {\n const { spanName, op, operation } = R2_OPERATIONS[r2Op];\n const requestKey = Array.isArray(key) ? key.join(', ') : typeof key === 'string' ? key : undefined;\n\n return {\n op,\n name: spanName,\n attributes: {\n 'cloudflare.r2.operation': operation,\n 'cloudflare.r2.bucket': bindingName,\n ...(requestKey !== undefined && { 'cloudflare.r2.request.key': requestKey }),\n ...(isR2ListOptions(key) && key.prefix !== undefined && { 'cloudflare.r2.request.prefix': key.prefix }),\n ...(isR2ListOptions(key) && key.delimiter !== undefined && { 'cloudflare.r2.request.delimiter': key.delimiter }),\n [SEMANTIC_ATTRIBUTE_SENTRY_OP]: op,\n [SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN]: ORIGIN,\n },\n };\n}\n\nfunction instrumentR2MultipartUpload(upload: R2MultipartUpload, bindingName: string): R2MultipartUpload {\n const { key } = upload;\n\n return new Proxy(upload, {\n get(target, prop, receiver) {\n if (prop === 'uploadPart') {\n const original = Reflect.get(target, prop, receiver);\n\n return function (this: unknown, ...args: Parameters<R2MultipartUpload['uploadPart']>) {\n const [partNumber] = args;\n\n return startSpan(\n {\n ...createSpanOptions(bindingName, 'uploadPart', key),\n attributes: {\n ...createSpanOptions(bindingName, 'uploadPart', key).attributes,\n 'cloudflare.r2.request.part_number': partNumber,\n },\n },\n () => Reflect.apply(original, target, args),\n );\n };\n }\n\n if (prop === 'abort') {\n const original = Reflect.get(target, prop, receiver);\n\n return function (this: unknown) {\n return startSpan(createSpanOptions(bindingName, 'abortMultipartUpload', key), () =>\n Reflect.apply(original, target, []),\n );\n };\n }\n\n if (prop === 'complete') {\n const original = Reflect.get(target, prop, receiver);\n\n return function (this: unknown, ...args: Parameters<R2MultipartUpload['complete']>) {\n return startSpan(createSpanOptions(bindingName, 'completeMultipartUpload', key), () =>\n Reflect.apply(original, target, args),\n );\n };\n }\n\n return Reflect.get(target, prop, receiver);\n },\n });\n}\n\n/**\n * Wraps a Cloudflare R2 Bucket binding to create spans on bucket operations.\n *\n * Instrumented methods: get, head, put, delete, list, createMultipartUpload,\n * resumeMultipartUpload (and the resulting multipart upload operations).\n */\nexport function instrumentR2Bucket<T extends R2Bucket>(bucket: T, bindingName: string): T {\n return new Proxy(bucket, {\n get(target, prop, receiver) {\n if (prop === 'get' || prop === 'head' || prop === 'put' || prop === 'delete' || prop === 'list') {\n const original = Reflect.get(target, prop, receiver);\n\n return function (this: unknown, ...args: Parameters<R2Bucket[typeof prop]>) {\n const [key] = args;\n\n return startSpan(createSpanOptions(bindingName, prop, key), () => Reflect.apply(original, target, args));\n };\n }\n\n if (prop === 'createMultipartUpload') {\n const original = Reflect.get(target, prop, receiver) as R2Bucket['createMultipartUpload'];\n\n return function (this: unknown, ...args: Parameters<R2Bucket['createMultipartUpload']>) {\n const [key] = args;\n\n return startSpan(createSpanOptions(bindingName, 'createMultipartUpload', key), async () => {\n const upload = await Reflect.apply(original, target, args);\n return instrumentR2MultipartUpload(upload, bindingName);\n });\n };\n }\n\n if (prop === 'resumeMultipartUpload') {\n const original = Reflect.get(target, prop, receiver);\n\n return function (this: unknown, ...args: Parameters<R2Bucket['resumeMultipartUpload']>) {\n const upload = Reflect.apply(original, target, args);\n\n return instrumentR2MultipartUpload(upload, bindingName);\n };\n }\n\n return Reflect.get(target, prop, receiver);\n },\n });\n}\n"],"names":["isObjectLike","SEMANTIC_ATTRIBUTE_SENTRY_OP","SEMANTIC_ATTRIBUTE_SENTRY_ORIGIN","startSpan"],"mappings":"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"}