@spotlightjs/spotlight 4.6.0 → 4.7.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 (664) hide show
  1. package/dist/_virtual/_commonjsHelpers.js +9 -0
  2. package/dist/_virtual/_commonjsHelpers.js.map +1 -1
  3. package/dist/_virtual/_sentry-release-injection-file.js +11 -0
  4. package/dist/_virtual/_sentry-release-injection-file.js.map +1 -0
  5. package/dist/_virtual/cache.js +8 -0
  6. package/dist/_virtual/cache.js.map +1 -1
  7. package/dist/_virtual/index.js +8 -0
  8. package/dist/_virtual/index.js.map +1 -1
  9. package/dist/_virtual/re.js +8 -0
  10. package/dist/_virtual/re.js.map +1 -1
  11. package/dist/_virtual/uri.all.js +8 -0
  12. package/dist/_virtual/uri.all.js.map +1 -1
  13. package/dist/instrument.js +9 -0
  14. package/dist/instrument.js.map +1 -1
  15. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.js +8 -0
  16. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.js.map +1 -1
  17. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/completable.js +8 -0
  18. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/completable.js.map +1 -1
  19. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js +8 -0
  20. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js.map +1 -1
  21. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js +8 -0
  22. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js.map +1 -1
  23. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js +8 -0
  24. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js.map +1 -1
  25. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js +8 -0
  26. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js.map +1 -1
  27. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js +8 -0
  28. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js.map +1 -1
  29. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js +8 -0
  30. package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js.map +1 -1
  31. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/ajv.js +47 -39
  32. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/ajv.js.map +1 -1
  33. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/cache.js +9 -0
  34. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/cache.js.map +1 -1
  35. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/async.js +18 -9
  36. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/async.js.map +1 -1
  37. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/error_classes.js +9 -0
  38. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/error_classes.js.map +1 -1
  39. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/formats.js +9 -0
  40. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/formats.js.map +1 -1
  41. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/index.js +24 -15
  42. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/index.js.map +1 -1
  43. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/resolve.js +14 -5
  44. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/resolve.js.map +1 -1
  45. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/rules.js +9 -0
  46. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/rules.js.map +1 -1
  47. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/schema_obj.js +9 -0
  48. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/schema_obj.js.map +1 -1
  49. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/ucs2length.js +9 -0
  50. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/ucs2length.js.map +1 -1
  51. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/util.js +9 -0
  52. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/util.js.map +1 -1
  53. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/data.js +9 -0
  54. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/data.js.map +1 -1
  55. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/definition_schema.js +9 -0
  56. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/definition_schema.js.map +1 -1
  57. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limit.js +9 -0
  58. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limit.js.map +1 -1
  59. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limitItems.js +9 -0
  60. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limitItems.js.map +1 -1
  61. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limitLength.js +9 -0
  62. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limitLength.js.map +1 -1
  63. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limitProperties.js +9 -0
  64. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limitProperties.js.map +1 -1
  65. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/allOf.js +9 -0
  66. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/allOf.js.map +1 -1
  67. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/anyOf.js +9 -0
  68. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/anyOf.js.map +1 -1
  69. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/comment.js +9 -0
  70. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/comment.js.map +1 -1
  71. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/const.js +9 -0
  72. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/const.js.map +1 -1
  73. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/contains.js +9 -0
  74. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/contains.js.map +1 -1
  75. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/custom.js +9 -0
  76. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/custom.js.map +1 -1
  77. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/dependencies.js +9 -0
  78. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/dependencies.js.map +1 -1
  79. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/enum.js +9 -0
  80. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/enum.js.map +1 -1
  81. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/format.js +9 -0
  82. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/format.js.map +1 -1
  83. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/if.js +9 -0
  84. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/if.js.map +1 -1
  85. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/index.js +9 -0
  86. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/index.js.map +1 -1
  87. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/items.js +9 -0
  88. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/items.js.map +1 -1
  89. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/multipleOf.js +9 -0
  90. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/multipleOf.js.map +1 -1
  91. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/not.js +9 -0
  92. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/not.js.map +1 -1
  93. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/oneOf.js +9 -0
  94. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/oneOf.js.map +1 -1
  95. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/pattern.js +9 -0
  96. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/pattern.js.map +1 -1
  97. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/properties.js +9 -0
  98. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/properties.js.map +1 -1
  99. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/propertyNames.js +9 -0
  100. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/propertyNames.js.map +1 -1
  101. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/ref.js +9 -0
  102. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/ref.js.map +1 -1
  103. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/required.js +9 -0
  104. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/required.js.map +1 -1
  105. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/uniqueItems.js +9 -0
  106. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/uniqueItems.js.map +1 -1
  107. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/validate.js +9 -0
  108. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/validate.js.map +1 -1
  109. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/keyword.js +9 -0
  110. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/keyword.js.map +1 -1
  111. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/refs/data.json.js +8 -0
  112. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/refs/data.json.js.map +1 -1
  113. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/refs/json-schema-draft-07.json.js +8 -0
  114. package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/refs/json-schema-draft-07.json.js.map +1 -1
  115. package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js +9 -0
  116. package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js.map +1 -1
  117. package/dist/node_modules/.pnpm/fast-json-stable-stringify@2.1.0/node_modules/fast-json-stable-stringify/index.js +9 -0
  118. package/dist/node_modules/.pnpm/fast-json-stable-stringify@2.1.0/node_modules/fast-json-stable-stringify/index.js.map +1 -1
  119. package/dist/node_modules/.pnpm/hono@4.10.3/node_modules/hono/dist/helper/streaming/sse.js +8 -0
  120. package/dist/node_modules/.pnpm/hono@4.10.3/node_modules/hono/dist/helper/streaming/sse.js.map +1 -1
  121. package/dist/node_modules/.pnpm/hono@4.10.3/node_modules/hono/dist/middleware/cors/index.js +8 -0
  122. package/dist/node_modules/.pnpm/hono@4.10.3/node_modules/hono/dist/middleware/cors/index.js.map +1 -1
  123. package/dist/node_modules/.pnpm/hono@4.10.3/node_modules/hono/dist/utils/html.js +8 -0
  124. package/dist/node_modules/.pnpm/hono@4.10.3/node_modules/hono/dist/utils/html.js.map +1 -1
  125. package/dist/node_modules/.pnpm/hono@4.10.3/node_modules/hono/dist/utils/stream.js +8 -0
  126. package/dist/node_modules/.pnpm/hono@4.10.3/node_modules/hono/dist/utils/stream.js.map +1 -1
  127. package/dist/node_modules/.pnpm/json-schema-traverse@0.4.1/node_modules/json-schema-traverse/index.js +9 -0
  128. package/dist/node_modules/.pnpm/json-schema-traverse@0.4.1/node_modules/json-schema-traverse/index.js.map +1 -1
  129. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/comparator.js +9 -0
  130. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/comparator.js.map +1 -1
  131. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/range.js +9 -0
  132. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/range.js.map +1 -1
  133. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/semver.js +9 -0
  134. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/semver.js.map +1 -1
  135. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/clean.js +9 -0
  136. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/clean.js.map +1 -1
  137. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/cmp.js +9 -0
  138. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/cmp.js.map +1 -1
  139. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/coerce.js +9 -0
  140. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/coerce.js.map +1 -1
  141. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-build.js +9 -0
  142. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-build.js.map +1 -1
  143. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-loose.js +9 -0
  144. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-loose.js.map +1 -1
  145. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare.js +9 -0
  146. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare.js.map +1 -1
  147. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/diff.js +9 -0
  148. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/diff.js.map +1 -1
  149. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/eq.js +9 -0
  150. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/eq.js.map +1 -1
  151. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gt.js +9 -0
  152. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gt.js.map +1 -1
  153. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gte.js +9 -0
  154. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gte.js.map +1 -1
  155. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/inc.js +9 -0
  156. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/inc.js.map +1 -1
  157. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lt.js +9 -0
  158. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lt.js.map +1 -1
  159. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lte.js +9 -0
  160. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lte.js.map +1 -1
  161. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/major.js +9 -0
  162. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/major.js.map +1 -1
  163. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/minor.js +9 -0
  164. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/minor.js.map +1 -1
  165. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/neq.js +9 -0
  166. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/neq.js.map +1 -1
  167. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/parse.js +9 -0
  168. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/parse.js.map +1 -1
  169. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/patch.js +9 -0
  170. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/patch.js.map +1 -1
  171. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/prerelease.js +9 -0
  172. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/prerelease.js.map +1 -1
  173. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rcompare.js +9 -0
  174. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rcompare.js.map +1 -1
  175. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rsort.js +9 -0
  176. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rsort.js.map +1 -1
  177. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/satisfies.js +9 -0
  178. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/satisfies.js.map +1 -1
  179. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/sort.js +9 -0
  180. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/sort.js.map +1 -1
  181. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/valid.js +9 -0
  182. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/valid.js.map +1 -1
  183. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/index.js +8 -0
  184. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/index.js.map +1 -1
  185. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/constants.js +9 -0
  186. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/constants.js.map +1 -1
  187. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/debug.js +9 -0
  188. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/debug.js.map +1 -1
  189. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/identifiers.js +9 -0
  190. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/identifiers.js.map +1 -1
  191. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/lrucache.js +9 -0
  192. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/lrucache.js.map +1 -1
  193. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/parse-options.js +9 -0
  194. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/parse-options.js.map +1 -1
  195. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/re.js +9 -0
  196. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/re.js.map +1 -1
  197. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/gtr.js +9 -0
  198. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/gtr.js.map +1 -1
  199. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/intersects.js +9 -0
  200. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/intersects.js.map +1 -1
  201. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/ltr.js +9 -0
  202. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/ltr.js.map +1 -1
  203. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/max-satisfying.js +9 -0
  204. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/max-satisfying.js.map +1 -1
  205. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-satisfying.js +9 -0
  206. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-satisfying.js.map +1 -1
  207. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-version.js +9 -0
  208. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-version.js.map +1 -1
  209. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/outside.js +9 -0
  210. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/outside.js.map +1 -1
  211. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/simplify.js +9 -0
  212. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/simplify.js.map +1 -1
  213. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/subset.js +9 -0
  214. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/subset.js.map +1 -1
  215. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/to-comparators.js +9 -0
  216. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/to-comparators.js.map +1 -1
  217. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/valid.js +9 -0
  218. package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/valid.js.map +1 -1
  219. package/dist/node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/dist/es5/uri.all.js +9 -1
  220. package/dist/node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/dist/es5/uri.all.js.map +1 -1
  221. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Options.js +8 -0
  222. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Options.js.map +1 -1
  223. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Refs.js +8 -0
  224. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Refs.js.map +1 -1
  225. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/errorMessages.js +8 -0
  226. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/errorMessages.js.map +1 -1
  227. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js +8 -0
  228. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js.map +1 -1
  229. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parseDef.js +8 -0
  230. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parseDef.js.map +1 -1
  231. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/any.js +8 -0
  232. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/any.js.map +1 -1
  233. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/array.js +8 -0
  234. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/array.js.map +1 -1
  235. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js +8 -0
  236. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js.map +1 -1
  237. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js +8 -0
  238. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js.map +1 -1
  239. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js +8 -0
  240. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js.map +1 -1
  241. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js +8 -0
  242. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js.map +1 -1
  243. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/date.js +8 -0
  244. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/date.js.map +1 -1
  245. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/default.js +8 -0
  246. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/default.js.map +1 -1
  247. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js +8 -0
  248. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js.map +1 -1
  249. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js +8 -0
  250. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js.map +1 -1
  251. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js +8 -0
  252. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js.map +1 -1
  253. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js +8 -0
  254. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js.map +1 -1
  255. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/map.js +8 -0
  256. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/map.js.map +1 -1
  257. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js +8 -0
  258. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js.map +1 -1
  259. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/never.js +8 -0
  260. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/never.js.map +1 -1
  261. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/null.js +8 -0
  262. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/null.js.map +1 -1
  263. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js +8 -0
  264. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js.map +1 -1
  265. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/number.js +8 -0
  266. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/number.js.map +1 -1
  267. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/object.js +8 -0
  268. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/object.js.map +1 -1
  269. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js +8 -0
  270. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js.map +1 -1
  271. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js +8 -0
  272. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js.map +1 -1
  273. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js +8 -0
  274. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js.map +1 -1
  275. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js +8 -0
  276. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js.map +1 -1
  277. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/record.js +8 -0
  278. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/record.js.map +1 -1
  279. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/set.js +8 -0
  280. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/set.js.map +1 -1
  281. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/string.js +8 -0
  282. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/string.js.map +1 -1
  283. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js +8 -0
  284. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js.map +1 -1
  285. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js +8 -0
  286. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js.map +1 -1
  287. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/union.js +8 -0
  288. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/union.js.map +1 -1
  289. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js +8 -0
  290. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js.map +1 -1
  291. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/selectParser.js +8 -0
  292. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/selectParser.js.map +1 -1
  293. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js +8 -0
  294. package/dist/node_modules/.pnpm/zod-to-json-schema@3.24.6_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js.map +1 -1
  295. package/dist/run.js +9 -0
  296. package/dist/run.js.map +1 -1
  297. package/dist/sentry-config.js +10 -1
  298. package/dist/sentry-config.js.map +1 -1
  299. package/dist/server/cli/help.js +17 -0
  300. package/dist/server/cli/help.js.map +1 -1
  301. package/dist/server/cli/mcp.d.ts +1 -1
  302. package/dist/server/cli/mcp.js +21 -9
  303. package/dist/server/cli/mcp.js.map +1 -1
  304. package/dist/server/cli/run.d.ts +1 -1
  305. package/dist/server/cli/run.js +28 -3
  306. package/dist/server/cli/run.js.map +1 -1
  307. package/dist/server/cli/server.d.ts +1 -1
  308. package/dist/server/cli/server.js +12 -2
  309. package/dist/server/cli/server.js.map +1 -1
  310. package/dist/server/cli/tail.d.ts +1 -1
  311. package/dist/server/cli/tail.js +18 -2
  312. package/dist/server/cli/tail.js.map +1 -1
  313. package/dist/server/cli.d.ts +1 -0
  314. package/dist/server/cli.js +30 -4
  315. package/dist/server/cli.js.map +1 -1
  316. package/dist/server/constants.js +9 -0
  317. package/dist/server/constants.js.map +1 -1
  318. package/dist/server/formatters/human/errors.js +9 -0
  319. package/dist/server/formatters/human/errors.js.map +1 -1
  320. package/dist/server/formatters/human/index.js +9 -0
  321. package/dist/server/formatters/human/index.js.map +1 -1
  322. package/dist/server/formatters/human/logs.js +9 -0
  323. package/dist/server/formatters/human/logs.js.map +1 -1
  324. package/dist/server/formatters/human/traces.js +9 -0
  325. package/dist/server/formatters/human/traces.js.map +1 -1
  326. package/dist/server/formatters/human/utils.js +9 -0
  327. package/dist/server/formatters/human/utils.js.map +1 -1
  328. package/dist/server/formatters/index.js +9 -0
  329. package/dist/server/formatters/index.js.map +1 -1
  330. package/dist/server/formatters/json/errors.js +9 -0
  331. package/dist/server/formatters/json/errors.js.map +1 -1
  332. package/dist/server/formatters/json/index.js +9 -0
  333. package/dist/server/formatters/json/index.js.map +1 -1
  334. package/dist/server/formatters/json/logs.js +9 -0
  335. package/dist/server/formatters/json/logs.js.map +1 -1
  336. package/dist/server/formatters/json/traces.js +9 -0
  337. package/dist/server/formatters/json/traces.js.map +1 -1
  338. package/dist/server/formatters/logfmt/errors.js +9 -0
  339. package/dist/server/formatters/logfmt/errors.js.map +1 -1
  340. package/dist/server/formatters/logfmt/index.js +9 -0
  341. package/dist/server/formatters/logfmt/index.js.map +1 -1
  342. package/dist/server/formatters/logfmt/logs.js +9 -0
  343. package/dist/server/formatters/logfmt/logs.js.map +1 -1
  344. package/dist/server/formatters/logfmt/traces.js +9 -0
  345. package/dist/server/formatters/logfmt/traces.js.map +1 -1
  346. package/dist/server/formatters/md/errors.js +9 -0
  347. package/dist/server/formatters/md/errors.js.map +1 -1
  348. package/dist/server/formatters/md/event.js +9 -0
  349. package/dist/server/formatters/md/event.js.map +1 -1
  350. package/dist/server/formatters/md/index.js +9 -0
  351. package/dist/server/formatters/md/index.js.map +1 -1
  352. package/dist/server/formatters/md/logs.js +9 -0
  353. package/dist/server/formatters/md/logs.js.map +1 -1
  354. package/dist/server/formatters/md/traces.js +9 -0
  355. package/dist/server/formatters/md/traces.js.map +1 -1
  356. package/dist/server/formatters/shared/data-builders.js +9 -0
  357. package/dist/server/formatters/shared/data-builders.js.map +1 -1
  358. package/dist/server/formatters/types.js +9 -0
  359. package/dist/server/formatters/types.js.map +1 -1
  360. package/dist/server/formatters/utils.js +9 -0
  361. package/dist/server/formatters/utils.js.map +1 -1
  362. package/dist/server/handlers/fileToServe.js +9 -0
  363. package/dist/server/handlers/fileToServe.js.map +1 -1
  364. package/dist/server/logger.js +9 -0
  365. package/dist/server/logger.js.map +1 -1
  366. package/dist/server/main.d.ts +1 -1
  367. package/dist/server/main.js +22 -4
  368. package/dist/server/main.js.map +1 -1
  369. package/dist/server/mcp/constants.js +9 -0
  370. package/dist/server/mcp/constants.js.map +1 -1
  371. package/dist/server/mcp/mcp.js +13 -1
  372. package/dist/server/mcp/mcp.js.map +1 -1
  373. package/dist/server/messageBuffer.js +9 -0
  374. package/dist/server/messageBuffer.js.map +1 -1
  375. package/dist/server/parser/helpers.js +9 -0
  376. package/dist/server/parser/helpers.js.map +1 -1
  377. package/dist/server/parser/processEnvelope.js +9 -0
  378. package/dist/server/parser/processEnvelope.js.map +1 -1
  379. package/dist/server/routes/clear.js +12 -0
  380. package/dist/server/routes/clear.js.map +1 -1
  381. package/dist/server/routes/contextlines/index.js +9 -0
  382. package/dist/server/routes/contextlines/index.js.map +1 -1
  383. package/dist/server/routes/contextlines/utils.js +9 -0
  384. package/dist/server/routes/contextlines/utils.js.map +1 -1
  385. package/dist/server/routes/health.js +9 -0
  386. package/dist/server/routes/health.js.map +1 -1
  387. package/dist/server/routes/index.js +9 -0
  388. package/dist/server/routes/index.js.map +1 -1
  389. package/dist/server/routes/mcp.js +9 -0
  390. package/dist/server/routes/mcp.js.map +1 -1
  391. package/dist/server/routes/open.js +9 -0
  392. package/dist/server/routes/open.js.map +1 -1
  393. package/dist/server/routes/stream/debugLogging.js +9 -0
  394. package/dist/server/routes/stream/debugLogging.js.map +1 -1
  395. package/dist/server/routes/stream/index.js +12 -0
  396. package/dist/server/routes/stream/index.js.map +1 -1
  397. package/dist/server/routes/stream/streaming.js +9 -0
  398. package/dist/server/routes/stream/streaming.js.map +1 -1
  399. package/dist/server/routes/stream/userAgent.js +9 -0
  400. package/dist/server/routes/stream/userAgent.js.map +1 -1
  401. package/dist/server/sdk.js +9 -0
  402. package/dist/server/sdk.js.map +1 -1
  403. package/dist/server/types/cli.d.ts +1 -0
  404. package/dist/server/types/utils.d.ts +12 -0
  405. package/dist/server/utils/cors.d.ts +35 -5
  406. package/dist/server/utils/cors.js +179 -6
  407. package/dist/server/utils/cors.js.map +1 -1
  408. package/dist/server/utils/docker-compose-parser.js +9 -0
  409. package/dist/server/utils/docker-compose-parser.js.map +1 -1
  410. package/dist/server/utils/docker-compose.js +9 -0
  411. package/dist/server/utils/docker-compose.js.map +1 -1
  412. package/dist/server/utils/eventContainer.js +9 -0
  413. package/dist/server/utils/eventContainer.js.map +1 -1
  414. package/dist/server/utils/extras.js +9 -0
  415. package/dist/server/utils/extras.js.map +1 -1
  416. package/dist/server/utils/getBuffer.js +9 -0
  417. package/dist/server/utils/getBuffer.js.map +1 -1
  418. package/dist/shared/constants.js +9 -0
  419. package/dist/shared/constants.js.map +1 -1
  420. package/dist/ui/assets/andromeeda.js +2 -1
  421. package/dist/ui/assets/andromeeda.js.map +1 -0
  422. package/dist/ui/assets/angular-html.js +2 -1
  423. package/dist/ui/assets/angular-html.js.map +1 -0
  424. package/dist/ui/assets/angular-ts.js +2 -1
  425. package/dist/ui/assets/angular-ts.js.map +1 -0
  426. package/dist/ui/assets/astro.js +2 -1
  427. package/dist/ui/assets/astro.js.map +1 -0
  428. package/dist/ui/assets/aurora-x.js +2 -1
  429. package/dist/ui/assets/aurora-x.js.map +1 -0
  430. package/dist/ui/assets/ayu-dark.js +2 -1
  431. package/dist/ui/assets/ayu-dark.js.map +1 -0
  432. package/dist/ui/assets/blade.js +2 -1
  433. package/dist/ui/assets/blade.js.map +1 -0
  434. package/dist/ui/assets/c.js +2 -1
  435. package/dist/ui/assets/c.js.map +1 -0
  436. package/dist/ui/assets/catppuccin-frappe.js +2 -1
  437. package/dist/ui/assets/catppuccin-frappe.js.map +1 -0
  438. package/dist/ui/assets/catppuccin-latte.js +2 -1
  439. package/dist/ui/assets/catppuccin-latte.js.map +1 -0
  440. package/dist/ui/assets/catppuccin-macchiato.js +2 -1
  441. package/dist/ui/assets/catppuccin-macchiato.js.map +1 -0
  442. package/dist/ui/assets/catppuccin-mocha.js +2 -1
  443. package/dist/ui/assets/catppuccin-mocha.js.map +1 -0
  444. package/dist/ui/assets/coffee.js +2 -1
  445. package/dist/ui/assets/coffee.js.map +1 -0
  446. package/dist/ui/assets/cpp.js +2 -1
  447. package/dist/ui/assets/cpp.js.map +1 -0
  448. package/dist/ui/assets/css.js +2 -1
  449. package/dist/ui/assets/css.js.map +1 -0
  450. package/dist/ui/assets/dark-plus.js +2 -1
  451. package/dist/ui/assets/dark-plus.js.map +1 -0
  452. package/dist/ui/assets/dracula-soft.js +2 -1
  453. package/dist/ui/assets/dracula-soft.js.map +1 -0
  454. package/dist/ui/assets/dracula.js +2 -1
  455. package/dist/ui/assets/dracula.js.map +1 -0
  456. package/dist/ui/assets/everforest-dark.js +2 -1
  457. package/dist/ui/assets/everforest-dark.js.map +1 -0
  458. package/dist/ui/assets/everforest-light.js +2 -1
  459. package/dist/ui/assets/everforest-light.js.map +1 -0
  460. package/dist/ui/assets/github-dark-default.js +2 -1
  461. package/dist/ui/assets/github-dark-default.js.map +1 -0
  462. package/dist/ui/assets/github-dark-dimmed.js +2 -1
  463. package/dist/ui/assets/github-dark-dimmed.js.map +1 -0
  464. package/dist/ui/assets/github-dark-high-contrast.js +2 -1
  465. package/dist/ui/assets/github-dark-high-contrast.js.map +1 -0
  466. package/dist/ui/assets/github-dark.js +2 -1
  467. package/dist/ui/assets/github-dark.js.map +1 -0
  468. package/dist/ui/assets/github-light-default.js +2 -1
  469. package/dist/ui/assets/github-light-default.js.map +1 -0
  470. package/dist/ui/assets/github-light-high-contrast.js +2 -1
  471. package/dist/ui/assets/github-light-high-contrast.js.map +1 -0
  472. package/dist/ui/assets/github-light.js +2 -1
  473. package/dist/ui/assets/github-light.js.map +1 -0
  474. package/dist/ui/assets/glsl.js +2 -1
  475. package/dist/ui/assets/glsl.js.map +1 -0
  476. package/dist/ui/assets/graphql.js +2 -1
  477. package/dist/ui/assets/graphql.js.map +1 -0
  478. package/dist/ui/assets/gruvbox-dark-hard.js +2 -1
  479. package/dist/ui/assets/gruvbox-dark-hard.js.map +1 -0
  480. package/dist/ui/assets/gruvbox-dark-medium.js +2 -1
  481. package/dist/ui/assets/gruvbox-dark-medium.js.map +1 -0
  482. package/dist/ui/assets/gruvbox-dark-soft.js +2 -1
  483. package/dist/ui/assets/gruvbox-dark-soft.js.map +1 -0
  484. package/dist/ui/assets/gruvbox-light-hard.js +2 -1
  485. package/dist/ui/assets/gruvbox-light-hard.js.map +1 -0
  486. package/dist/ui/assets/gruvbox-light-medium.js +2 -1
  487. package/dist/ui/assets/gruvbox-light-medium.js.map +1 -0
  488. package/dist/ui/assets/gruvbox-light-soft.js +2 -1
  489. package/dist/ui/assets/gruvbox-light-soft.js.map +1 -0
  490. package/dist/ui/assets/haml.js +2 -1
  491. package/dist/ui/assets/haml.js.map +1 -0
  492. package/dist/ui/assets/handlebars.js +2 -1
  493. package/dist/ui/assets/handlebars.js.map +1 -0
  494. package/dist/ui/assets/houston.js +2 -1
  495. package/dist/ui/assets/houston.js.map +1 -0
  496. package/dist/ui/assets/html-derivative.js +2 -1
  497. package/dist/ui/assets/html-derivative.js.map +1 -0
  498. package/dist/ui/assets/html.js +2 -1
  499. package/dist/ui/assets/html.js.map +1 -0
  500. package/dist/ui/assets/http.js +2 -1
  501. package/dist/ui/assets/http.js.map +1 -0
  502. package/dist/ui/assets/imba.js +2 -1
  503. package/dist/ui/assets/imba.js.map +1 -0
  504. package/dist/ui/assets/index.js +46 -45
  505. package/dist/ui/assets/index.js.map +1 -0
  506. package/dist/ui/assets/index2.js +2 -1
  507. package/dist/ui/assets/index2.js.map +1 -0
  508. package/dist/ui/assets/instrumentation.js +16 -15
  509. package/dist/ui/assets/instrumentation.js.map +1 -0
  510. package/dist/ui/assets/java.js +2 -1
  511. package/dist/ui/assets/java.js.map +1 -0
  512. package/dist/ui/assets/javascript.js +2 -1
  513. package/dist/ui/assets/javascript.js.map +1 -0
  514. package/dist/ui/assets/jinja.js +2 -1
  515. package/dist/ui/assets/jinja.js.map +1 -0
  516. package/dist/ui/assets/jison.js +2 -1
  517. package/dist/ui/assets/jison.js.map +1 -0
  518. package/dist/ui/assets/json.js +2 -1
  519. package/dist/ui/assets/json.js.map +1 -0
  520. package/dist/ui/assets/json5.js +2 -1
  521. package/dist/ui/assets/json5.js.map +1 -0
  522. package/dist/ui/assets/jsonc.js +2 -1
  523. package/dist/ui/assets/jsonc.js.map +1 -0
  524. package/dist/ui/assets/jsonl.js +2 -1
  525. package/dist/ui/assets/jsonl.js.map +1 -0
  526. package/dist/ui/assets/jsx.js +2 -1
  527. package/dist/ui/assets/jsx.js.map +1 -0
  528. package/dist/ui/assets/julia.js +2 -1
  529. package/dist/ui/assets/julia.js.map +1 -0
  530. package/dist/ui/assets/kanagawa-dragon.js +2 -1
  531. package/dist/ui/assets/kanagawa-dragon.js.map +1 -0
  532. package/dist/ui/assets/kanagawa-lotus.js +2 -1
  533. package/dist/ui/assets/kanagawa-lotus.js.map +1 -0
  534. package/dist/ui/assets/kanagawa-wave.js +2 -1
  535. package/dist/ui/assets/kanagawa-wave.js.map +1 -0
  536. package/dist/ui/assets/laserwave.js +2 -1
  537. package/dist/ui/assets/laserwave.js.map +1 -0
  538. package/dist/ui/assets/less.js +2 -1
  539. package/dist/ui/assets/less.js.map +1 -0
  540. package/dist/ui/assets/light-plus.js +2 -1
  541. package/dist/ui/assets/light-plus.js.map +1 -0
  542. package/dist/ui/assets/main.css +1 -1
  543. package/dist/ui/assets/main.js +3 -2
  544. package/dist/ui/assets/main.js.map +1 -0
  545. package/dist/ui/assets/markdown.js +2 -1
  546. package/dist/ui/assets/markdown.js.map +1 -0
  547. package/dist/ui/assets/marko.js +2 -1
  548. package/dist/ui/assets/marko.js.map +1 -0
  549. package/dist/ui/assets/material-theme-darker.js +2 -1
  550. package/dist/ui/assets/material-theme-darker.js.map +1 -0
  551. package/dist/ui/assets/material-theme-lighter.js +2 -1
  552. package/dist/ui/assets/material-theme-lighter.js.map +1 -0
  553. package/dist/ui/assets/material-theme-ocean.js +2 -1
  554. package/dist/ui/assets/material-theme-ocean.js.map +1 -0
  555. package/dist/ui/assets/material-theme-palenight.js +2 -1
  556. package/dist/ui/assets/material-theme-palenight.js.map +1 -0
  557. package/dist/ui/assets/material-theme.js +2 -1
  558. package/dist/ui/assets/material-theme.js.map +1 -0
  559. package/dist/ui/assets/mdc.js +2 -1
  560. package/dist/ui/assets/mdc.js.map +1 -0
  561. package/dist/ui/assets/mdx.js +2 -1
  562. package/dist/ui/assets/mdx.js.map +1 -0
  563. package/dist/ui/assets/min-dark.js +2 -1
  564. package/dist/ui/assets/min-dark.js.map +1 -0
  565. package/dist/ui/assets/min-light.js +2 -1
  566. package/dist/ui/assets/min-light.js.map +1 -0
  567. package/dist/ui/assets/monokai.js +2 -1
  568. package/dist/ui/assets/monokai.js.map +1 -0
  569. package/dist/ui/assets/night-owl.js +2 -1
  570. package/dist/ui/assets/night-owl.js.map +1 -0
  571. package/dist/ui/assets/nord.js +2 -1
  572. package/dist/ui/assets/nord.js.map +1 -0
  573. package/dist/ui/assets/one-dark-pro.js +2 -1
  574. package/dist/ui/assets/one-dark-pro.js.map +1 -0
  575. package/dist/ui/assets/one-light.js +2 -1
  576. package/dist/ui/assets/one-light.js.map +1 -0
  577. package/dist/ui/assets/php.js +2 -1
  578. package/dist/ui/assets/php.js.map +1 -0
  579. package/dist/ui/assets/plastic.js +2 -1
  580. package/dist/ui/assets/plastic.js.map +1 -0
  581. package/dist/ui/assets/poimandres.js +2 -1
  582. package/dist/ui/assets/poimandres.js.map +1 -0
  583. package/dist/ui/assets/postcss.js +2 -1
  584. package/dist/ui/assets/postcss.js.map +1 -0
  585. package/dist/ui/assets/pug.js +2 -1
  586. package/dist/ui/assets/pug.js.map +1 -0
  587. package/dist/ui/assets/python.js +2 -1
  588. package/dist/ui/assets/python.js.map +1 -0
  589. package/dist/ui/assets/r.js +2 -1
  590. package/dist/ui/assets/r.js.map +1 -0
  591. package/dist/ui/assets/red.js +2 -1
  592. package/dist/ui/assets/red.js.map +1 -0
  593. package/dist/ui/assets/regexp.js +2 -1
  594. package/dist/ui/assets/regexp.js.map +1 -0
  595. package/dist/ui/assets/rose-pine-dawn.js +2 -1
  596. package/dist/ui/assets/rose-pine-dawn.js.map +1 -0
  597. package/dist/ui/assets/rose-pine-moon.js +2 -1
  598. package/dist/ui/assets/rose-pine-moon.js.map +1 -0
  599. package/dist/ui/assets/rose-pine.js +2 -1
  600. package/dist/ui/assets/rose-pine.js.map +1 -0
  601. package/dist/ui/assets/sass.js +2 -1
  602. package/dist/ui/assets/sass.js.map +1 -0
  603. package/dist/ui/assets/scss.js +2 -1
  604. package/dist/ui/assets/scss.js.map +1 -0
  605. package/dist/ui/assets/serverTimingMeta.js +51 -0
  606. package/dist/ui/assets/serverTimingMeta.js.map +1 -0
  607. package/dist/ui/assets/shellscript.js +2 -1
  608. package/dist/ui/assets/shellscript.js.map +1 -0
  609. package/dist/ui/assets/slack-dark.js +2 -1
  610. package/dist/ui/assets/slack-dark.js.map +1 -0
  611. package/dist/ui/assets/slack-ochin.js +2 -1
  612. package/dist/ui/assets/slack-ochin.js.map +1 -0
  613. package/dist/ui/assets/snazzy-light.js +2 -1
  614. package/dist/ui/assets/snazzy-light.js.map +1 -0
  615. package/dist/ui/assets/solarized-dark.js +2 -1
  616. package/dist/ui/assets/solarized-dark.js.map +1 -0
  617. package/dist/ui/assets/solarized-light.js +2 -1
  618. package/dist/ui/assets/solarized-light.js.map +1 -0
  619. package/dist/ui/assets/sql.js +2 -1
  620. package/dist/ui/assets/sql.js.map +1 -0
  621. package/dist/ui/assets/stylus.js +2 -1
  622. package/dist/ui/assets/stylus.js.map +1 -0
  623. package/dist/ui/assets/svelte.js +2 -1
  624. package/dist/ui/assets/svelte.js.map +1 -0
  625. package/dist/ui/assets/synthwave-84.js +2 -1
  626. package/dist/ui/assets/synthwave-84.js.map +1 -0
  627. package/dist/ui/assets/tokyo-night.js +2 -1
  628. package/dist/ui/assets/tokyo-night.js.map +1 -0
  629. package/dist/ui/assets/ts-tags.js +2 -1
  630. package/dist/ui/assets/ts-tags.js.map +1 -0
  631. package/dist/ui/assets/tsx.js +2 -1
  632. package/dist/ui/assets/tsx.js.map +1 -0
  633. package/dist/ui/assets/typescript.js +2 -1
  634. package/dist/ui/assets/typescript.js.map +1 -0
  635. package/dist/ui/assets/vesper.js +2 -1
  636. package/dist/ui/assets/vesper.js.map +1 -0
  637. package/dist/ui/assets/vitesse-black.js +2 -1
  638. package/dist/ui/assets/vitesse-black.js.map +1 -0
  639. package/dist/ui/assets/vitesse-dark.js +2 -1
  640. package/dist/ui/assets/vitesse-dark.js.map +1 -0
  641. package/dist/ui/assets/vitesse-light.js +2 -1
  642. package/dist/ui/assets/vitesse-light.js.map +1 -0
  643. package/dist/ui/assets/vue-html.js +2 -1
  644. package/dist/ui/assets/vue-html.js.map +1 -0
  645. package/dist/ui/assets/vue-vine.js +2 -1
  646. package/dist/ui/assets/vue-vine.js.map +1 -0
  647. package/dist/ui/assets/vue.js +2 -1
  648. package/dist/ui/assets/vue.js.map +1 -0
  649. package/dist/ui/assets/wasm.js +2 -1
  650. package/dist/ui/assets/wasm.js.map +1 -0
  651. package/dist/ui/assets/wasm2.js +2 -1
  652. package/dist/ui/assets/wasm2.js.map +1 -0
  653. package/dist/ui/assets/wgsl.js +2 -1
  654. package/dist/ui/assets/wgsl.js.map +1 -0
  655. package/dist/ui/assets/wit.js +2 -1
  656. package/dist/ui/assets/wit.js.map +1 -0
  657. package/dist/ui/assets/xml.js +2 -1
  658. package/dist/ui/assets/xml.js.map +1 -0
  659. package/dist/ui/assets/yaml.js +2 -1
  660. package/dist/ui/assets/yaml.js.map +1 -0
  661. package/dist/ui/manifest.json +17 -25
  662. package/package.json +2 -2
  663. package/dist/ui/assets/client.js +0 -50
  664. package/dist/ui/assets/electron-index.js +0 -6
@@ -1 +1 @@
1
- {"version":3,"file":"messageBuffer.js","sources":["../../src/server/messageBuffer.ts"],"sourcesContent":["import { UUID, uuidv7 } from \"uuidv7\";\nimport type { InputSchema } from \"./mcp/mcp.ts\";\nimport { EventContainer } from \"./utils/eventContainer.ts\";\n\nexport class MessageBuffer<T> {\n private size: number;\n private items: [number, T][];\n private writePos = 0;\n private head = 0;\n private readers = new Map<string, { tid?: NodeJS.Immediate; pos: number; callback: (item: T) => void }>();\n private filenameCache = new Map<string, Set<string>>();\n\n constructor(size = 500) {\n this.size = size;\n this.items = new Array(size);\n }\n\n /**\n * Binary search for an event by its envelope ID (UUIDv7).\n * Returns the position of the event, or -1 if not found.\n * Takes advantage of UUIDv7's time-ordered property.\n */\n private binarySearchEventId(targetId: string): number {\n let left = this.head;\n let right = this.writePos - 1;\n\n // Parse and validate the target UUID\n let targetUuid: UUID;\n try {\n targetUuid = UUID.parse(targetId);\n } catch {\n // Invalid UUID format, cannot find\n return -1;\n }\n\n while (left <= right) {\n const mid = Math.floor((left + right) / 2);\n const item = this.items[mid % this.size];\n\n // Skip null items or non-EventContainer items\n if (item == null || !(item[1] instanceof EventContainer)) {\n // Linear scan nearby to handle gaps\n let boundsAdjusted = false;\n\n // Check left side\n for (let i = mid - 1; i >= left; i--) {\n const leftItem = this.items[i % this.size];\n if (leftItem && leftItem[1] instanceof EventContainer) {\n const envelope = leftItem[1].getParsedEnvelope();\n if (envelope?.envelope) {\n const envelopeId = envelope.envelope[0].__spotlight_envelope_id;\n const isEqual = envelopeId.compareTo(targetUuid);\n if (isEqual === 0) {\n return i;\n }\n // Adjust search bounds based on comparison\n if (isEqual < 0) {\n left = mid + 1;\n } else {\n right = mid - 1;\n }\n boundsAdjusted = true;\n break;\n }\n }\n }\n\n // Check right side if left didn't help\n if (!boundsAdjusted) {\n for (let i = mid + 1; i <= right; i++) {\n const rightItem = this.items[i % this.size];\n if (rightItem && rightItem[1] instanceof EventContainer) {\n const envelope = rightItem[1].getParsedEnvelope();\n if (envelope?.envelope) {\n const envelopeId = envelope.envelope[0].__spotlight_envelope_id;\n const isEqual = envelopeId.compareTo(targetUuid);\n if (isEqual === 0) {\n return i;\n }\n // Adjust search bounds\n if (isEqual < 0) {\n left = mid + 1;\n } else {\n right = mid - 1;\n }\n boundsAdjusted = true;\n break;\n }\n }\n }\n }\n\n // If both scans failed to find a valid item, skip past this gap\n // to avoid infinite loop\n if (!boundsAdjusted) {\n left = mid + 1;\n }\n\n continue;\n }\n\n const envelope = item[1].getParsedEnvelope();\n if (!envelope?.envelope) {\n // Skip invalid envelopes, move to next\n left = mid + 1;\n continue;\n }\n\n const envelopeId = envelope.envelope[0].__spotlight_envelope_id;\n\n const isEqual = envelopeId.compareTo(targetUuid);\n if (isEqual === 0) {\n // Found exact match\n return mid;\n }\n\n if (isEqual < 0) {\n // Target is in the right half (later in time)\n left = mid + 1;\n } else {\n // Target is in the left half (earlier in time)\n right = mid - 1;\n }\n }\n\n return -1;\n }\n\n put(item: T): void {\n const curTime = new Date().getTime();\n\n // Remove old value from filename cache\n const oldValue = this.items[this.writePos % this.size];\n if (oldValue && oldValue[1] instanceof EventContainer) {\n const envelope = oldValue[1].getParsedEnvelope();\n if (envelope?.envelope) {\n const deletedEnvelopeId = envelope.envelope[0].__spotlight_envelope_id.toString();\n const goneFiles = new Set<string>();\n for (const [filename, envelopeIds] of this.filenameCache.entries()) {\n envelopeIds.delete(deletedEnvelopeId);\n if (envelopeIds.size === 0) {\n goneFiles.add(filename);\n }\n }\n\n for (const filename of goneFiles) {\n this.filenameCache.delete(filename);\n }\n }\n }\n\n this.items[this.writePos % this.size] = [curTime, item];\n this.writePos += 1;\n if (this.writePos - this.head > this.size) {\n this.head = this.writePos - this.size;\n }\n\n // Update filename cache\n if (item instanceof EventContainer) {\n const envelope = item.getParsedEnvelope();\n if (envelope?.envelope) {\n const spotlightEnvelopeId = envelope.envelope[0].__spotlight_envelope_id.toString();\n const events = envelope.envelope[1] ?? [];\n\n for (const event of events) {\n const [, payload] = event;\n const values = typeof payload === \"object\" && \"exception\" in payload && payload.exception?.values;\n if (values) {\n for (const value of values) {\n const frames = value.stacktrace?.frames;\n if (frames) {\n for (const frame of frames) {\n const filename = frame.filename;\n if (filename) {\n const envelopeIds = this.filenameCache.get(filename);\n if (envelopeIds) {\n envelopeIds.add(spotlightEnvelopeId);\n } else {\n this.filenameCache.set(filename, new Set([spotlightEnvelopeId]));\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n // Calling subscribers\n for (const [readerId, readerInfo] of this.readers.entries()) {\n if (readerInfo.tid) {\n clearImmediate(readerInfo.tid);\n }\n\n readerInfo.tid = setImmediate(() => this.stream(readerId));\n readerInfo.tid.unref();\n }\n }\n\n subscribe(callback: (item: T) => void, lastEventId?: string): string {\n const readerId = uuidv7();\n\n // Determine starting position based on lastEventId\n let startPos = this.head;\n if (lastEventId) {\n // Binary search for lastEventId (UUIDv7 is time-ordered)\n // Since buffer is chronologically ordered, we can use binary search\n const foundPos = this.binarySearchEventId(lastEventId);\n if (foundPos !== -1) {\n // Start from the position after the found event\n startPos = foundPos + 1;\n }\n // If lastEventId not found, startPos remains at this.head (normal behavior)\n }\n\n const readerInfo = {\n callback,\n pos: startPos,\n tid: setImmediate(() => this.stream(readerId)),\n };\n readerInfo.tid.unref();\n this.readers.set(readerId, readerInfo);\n\n return readerId;\n }\n\n unsubscribe(readerId: string): void {\n const readerInfo = this.readers.get(readerId);\n // Clearing any pending timeouts\n if (readerInfo?.tid) {\n clearImmediate(readerInfo.tid);\n }\n\n this.readers.delete(readerId);\n }\n\n stream(readerId: string): void {\n const readerInfo = this.readers.get(readerId);\n if (!readerInfo) return;\n const { pos, callback } = readerInfo;\n\n let atReadPos = pos < this.head ? this.head : pos;\n let item: [number, T] | undefined;\n /* eslint-disable no-constant-condition */\n while (true) {\n item = this.items[atReadPos % this.size];\n // atReadPos >= this.writePos prevents the case where we have a full buffer\n if (typeof item === \"undefined\" || atReadPos >= this.writePos) {\n break;\n }\n callback(item[1]);\n atReadPos += 1;\n }\n\n // No need to `this.readers.set` again, as `readerInfo` is a reference\n readerInfo.pos = atReadPos;\n }\n\n /**\n * hard reset: drops items and resets cursors.\n */\n clear(): void {\n this.writePos = 0;\n this.reset();\n\n for (const readerInfo of this.readers.values()) {\n if (readerInfo.tid) {\n clearImmediate(readerInfo.tid);\n }\n\n readerInfo.tid = undefined;\n readerInfo.pos = this.head;\n }\n }\n\n /**\n * soft reset: clears buffered items but preserves subscribers\n * do not set head or writePos to `0` as subscribers retain their\n * readPos which would mess things up if we suddenly reset everything\n * to 0.\n */\n reset(): void {\n this.items = new Array(this.size);\n this.head = this.writePos;\n\n // Clear filename cache\n this.filenameCache.clear();\n }\n\n read(filters: ReadFilter = { timeWindow: 60 }): T[] {\n const result: T[] = [];\n const start = this.head;\n const end = this.writePos;\n\n const filterHandlers = [];\n for (const key of Object.keys(filters)) {\n if (this.filterHandlers[key]) {\n filterHandlers.push(this.filterHandlers[key]);\n }\n }\n\n for (let i = end - 1; i >= start; i--) {\n const item = this.items[i % this.size];\n\n if (item == null) continue;\n\n // Check if the item passes all filters\n if (filterHandlers.every(handler => handler(item, filters, { filenameCache: this.filenameCache }))) {\n result.push(item[1]);\n }\n }\n\n return result;\n }\n\n filterHandlers: Record<\n keyof ReadFilter | string,\n (item: [number, T], value: NonNullable<ReadFilter>, ctx: { filenameCache: Map<string, Set<string>> }) => boolean\n > = {\n timeWindow: (item, value) => {\n if (!(\"timeWindow\" in value)) {\n return true;\n }\n\n return item[0] > Date.now() - value.timeWindow * 1000;\n },\n envelopeId: (item, value) => {\n if (!(\"envelopeId\" in value) || value.envelopeId == null) {\n return true;\n }\n\n const data = (item[1] as EventContainer).getParsedEnvelope();\n\n return data.envelope[0].__spotlight_envelope_id.equals(UUID.parse(value.envelopeId));\n },\n filename: (item, value, ctx) => {\n if (!(\"filename\" in value)) {\n return true;\n }\n\n const contents = (item[1] as EventContainer).getParsedEnvelope();\n const spotlightEnvelopeId = contents.envelope[0].__spotlight_envelope_id.toString();\n\n for (const [filename, envelopeIds] of ctx.filenameCache.entries()) {\n if (filename.endsWith(value.filename)) {\n if (envelopeIds.has(spotlightEnvelopeId)) {\n return true;\n }\n }\n }\n\n return false;\n },\n all: () => true,\n };\n}\n\nexport type ReadFilter =\n | InputSchema[\"filters\"]\n | {\n envelopeId: string;\n }\n | { all: true };\n"],"names":["envelope","envelopeId","isEqual"],"mappings":"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"}
1
+ {"version":3,"file":"messageBuffer.js","sources":["../../src/server/messageBuffer.ts"],"sourcesContent":["import { UUID, uuidv7 } from \"uuidv7\";\nimport type { InputSchema } from \"./mcp/mcp.ts\";\nimport { EventContainer } from \"./utils/eventContainer.ts\";\n\nexport class MessageBuffer<T> {\n private size: number;\n private items: [number, T][];\n private writePos = 0;\n private head = 0;\n private readers = new Map<string, { tid?: NodeJS.Immediate; pos: number; callback: (item: T) => void }>();\n private filenameCache = new Map<string, Set<string>>();\n\n constructor(size = 500) {\n this.size = size;\n this.items = new Array(size);\n }\n\n /**\n * Binary search for an event by its envelope ID (UUIDv7).\n * Returns the position of the event, or -1 if not found.\n * Takes advantage of UUIDv7's time-ordered property.\n */\n private binarySearchEventId(targetId: string): number {\n let left = this.head;\n let right = this.writePos - 1;\n\n // Parse and validate the target UUID\n let targetUuid: UUID;\n try {\n targetUuid = UUID.parse(targetId);\n } catch {\n // Invalid UUID format, cannot find\n return -1;\n }\n\n while (left <= right) {\n const mid = Math.floor((left + right) / 2);\n const item = this.items[mid % this.size];\n\n // Skip null items or non-EventContainer items\n if (item == null || !(item[1] instanceof EventContainer)) {\n // Linear scan nearby to handle gaps\n let boundsAdjusted = false;\n\n // Check left side\n for (let i = mid - 1; i >= left; i--) {\n const leftItem = this.items[i % this.size];\n if (leftItem && leftItem[1] instanceof EventContainer) {\n const envelope = leftItem[1].getParsedEnvelope();\n if (envelope?.envelope) {\n const envelopeId = envelope.envelope[0].__spotlight_envelope_id;\n const isEqual = envelopeId.compareTo(targetUuid);\n if (isEqual === 0) {\n return i;\n }\n // Adjust search bounds based on comparison\n if (isEqual < 0) {\n left = mid + 1;\n } else {\n right = mid - 1;\n }\n boundsAdjusted = true;\n break;\n }\n }\n }\n\n // Check right side if left didn't help\n if (!boundsAdjusted) {\n for (let i = mid + 1; i <= right; i++) {\n const rightItem = this.items[i % this.size];\n if (rightItem && rightItem[1] instanceof EventContainer) {\n const envelope = rightItem[1].getParsedEnvelope();\n if (envelope?.envelope) {\n const envelopeId = envelope.envelope[0].__spotlight_envelope_id;\n const isEqual = envelopeId.compareTo(targetUuid);\n if (isEqual === 0) {\n return i;\n }\n // Adjust search bounds\n if (isEqual < 0) {\n left = mid + 1;\n } else {\n right = mid - 1;\n }\n boundsAdjusted = true;\n break;\n }\n }\n }\n }\n\n // If both scans failed to find a valid item, skip past this gap\n // to avoid infinite loop\n if (!boundsAdjusted) {\n left = mid + 1;\n }\n\n continue;\n }\n\n const envelope = item[1].getParsedEnvelope();\n if (!envelope?.envelope) {\n // Skip invalid envelopes, move to next\n left = mid + 1;\n continue;\n }\n\n const envelopeId = envelope.envelope[0].__spotlight_envelope_id;\n\n const isEqual = envelopeId.compareTo(targetUuid);\n if (isEqual === 0) {\n // Found exact match\n return mid;\n }\n\n if (isEqual < 0) {\n // Target is in the right half (later in time)\n left = mid + 1;\n } else {\n // Target is in the left half (earlier in time)\n right = mid - 1;\n }\n }\n\n return -1;\n }\n\n put(item: T): void {\n const curTime = new Date().getTime();\n\n // Remove old value from filename cache\n const oldValue = this.items[this.writePos % this.size];\n if (oldValue && oldValue[1] instanceof EventContainer) {\n const envelope = oldValue[1].getParsedEnvelope();\n if (envelope?.envelope) {\n const deletedEnvelopeId = envelope.envelope[0].__spotlight_envelope_id.toString();\n const goneFiles = new Set<string>();\n for (const [filename, envelopeIds] of this.filenameCache.entries()) {\n envelopeIds.delete(deletedEnvelopeId);\n if (envelopeIds.size === 0) {\n goneFiles.add(filename);\n }\n }\n\n for (const filename of goneFiles) {\n this.filenameCache.delete(filename);\n }\n }\n }\n\n this.items[this.writePos % this.size] = [curTime, item];\n this.writePos += 1;\n if (this.writePos - this.head > this.size) {\n this.head = this.writePos - this.size;\n }\n\n // Update filename cache\n if (item instanceof EventContainer) {\n const envelope = item.getParsedEnvelope();\n if (envelope?.envelope) {\n const spotlightEnvelopeId = envelope.envelope[0].__spotlight_envelope_id.toString();\n const events = envelope.envelope[1] ?? [];\n\n for (const event of events) {\n const [, payload] = event;\n const values = typeof payload === \"object\" && \"exception\" in payload && payload.exception?.values;\n if (values) {\n for (const value of values) {\n const frames = value.stacktrace?.frames;\n if (frames) {\n for (const frame of frames) {\n const filename = frame.filename;\n if (filename) {\n const envelopeIds = this.filenameCache.get(filename);\n if (envelopeIds) {\n envelopeIds.add(spotlightEnvelopeId);\n } else {\n this.filenameCache.set(filename, new Set([spotlightEnvelopeId]));\n }\n }\n }\n }\n }\n }\n }\n }\n }\n\n // Calling subscribers\n for (const [readerId, readerInfo] of this.readers.entries()) {\n if (readerInfo.tid) {\n clearImmediate(readerInfo.tid);\n }\n\n readerInfo.tid = setImmediate(() => this.stream(readerId));\n readerInfo.tid.unref();\n }\n }\n\n subscribe(callback: (item: T) => void, lastEventId?: string): string {\n const readerId = uuidv7();\n\n // Determine starting position based on lastEventId\n let startPos = this.head;\n if (lastEventId) {\n // Binary search for lastEventId (UUIDv7 is time-ordered)\n // Since buffer is chronologically ordered, we can use binary search\n const foundPos = this.binarySearchEventId(lastEventId);\n if (foundPos !== -1) {\n // Start from the position after the found event\n startPos = foundPos + 1;\n }\n // If lastEventId not found, startPos remains at this.head (normal behavior)\n }\n\n const readerInfo = {\n callback,\n pos: startPos,\n tid: setImmediate(() => this.stream(readerId)),\n };\n readerInfo.tid.unref();\n this.readers.set(readerId, readerInfo);\n\n return readerId;\n }\n\n unsubscribe(readerId: string): void {\n const readerInfo = this.readers.get(readerId);\n // Clearing any pending timeouts\n if (readerInfo?.tid) {\n clearImmediate(readerInfo.tid);\n }\n\n this.readers.delete(readerId);\n }\n\n stream(readerId: string): void {\n const readerInfo = this.readers.get(readerId);\n if (!readerInfo) return;\n const { pos, callback } = readerInfo;\n\n let atReadPos = pos < this.head ? this.head : pos;\n let item: [number, T] | undefined;\n /* eslint-disable no-constant-condition */\n while (true) {\n item = this.items[atReadPos % this.size];\n // atReadPos >= this.writePos prevents the case where we have a full buffer\n if (typeof item === \"undefined\" || atReadPos >= this.writePos) {\n break;\n }\n callback(item[1]);\n atReadPos += 1;\n }\n\n // No need to `this.readers.set` again, as `readerInfo` is a reference\n readerInfo.pos = atReadPos;\n }\n\n /**\n * hard reset: drops items and resets cursors.\n */\n clear(): void {\n this.writePos = 0;\n this.reset();\n\n for (const readerInfo of this.readers.values()) {\n if (readerInfo.tid) {\n clearImmediate(readerInfo.tid);\n }\n\n readerInfo.tid = undefined;\n readerInfo.pos = this.head;\n }\n }\n\n /**\n * soft reset: clears buffered items but preserves subscribers\n * do not set head or writePos to `0` as subscribers retain their\n * readPos which would mess things up if we suddenly reset everything\n * to 0.\n */\n reset(): void {\n this.items = new Array(this.size);\n this.head = this.writePos;\n\n // Clear filename cache\n this.filenameCache.clear();\n }\n\n read(filters: ReadFilter = { timeWindow: 60 }): T[] {\n const result: T[] = [];\n const start = this.head;\n const end = this.writePos;\n\n const filterHandlers = [];\n for (const key of Object.keys(filters)) {\n if (this.filterHandlers[key]) {\n filterHandlers.push(this.filterHandlers[key]);\n }\n }\n\n for (let i = end - 1; i >= start; i--) {\n const item = this.items[i % this.size];\n\n if (item == null) continue;\n\n // Check if the item passes all filters\n if (filterHandlers.every(handler => handler(item, filters, { filenameCache: this.filenameCache }))) {\n result.push(item[1]);\n }\n }\n\n return result;\n }\n\n filterHandlers: Record<\n keyof ReadFilter | string,\n (item: [number, T], value: NonNullable<ReadFilter>, ctx: { filenameCache: Map<string, Set<string>> }) => boolean\n > = {\n timeWindow: (item, value) => {\n if (!(\"timeWindow\" in value)) {\n return true;\n }\n\n return item[0] > Date.now() - value.timeWindow * 1000;\n },\n envelopeId: (item, value) => {\n if (!(\"envelopeId\" in value) || value.envelopeId == null) {\n return true;\n }\n\n const data = (item[1] as EventContainer).getParsedEnvelope();\n\n return data.envelope[0].__spotlight_envelope_id.equals(UUID.parse(value.envelopeId));\n },\n filename: (item, value, ctx) => {\n if (!(\"filename\" in value)) {\n return true;\n }\n\n const contents = (item[1] as EventContainer).getParsedEnvelope();\n const spotlightEnvelopeId = contents.envelope[0].__spotlight_envelope_id.toString();\n\n for (const [filename, envelopeIds] of ctx.filenameCache.entries()) {\n if (filename.endsWith(value.filename)) {\n if (envelopeIds.has(spotlightEnvelopeId)) {\n return true;\n }\n }\n }\n\n return false;\n },\n all: () => true,\n };\n}\n\nexport type ReadFilter =\n | InputSchema[\"filters\"]\n | {\n envelopeId: string;\n }\n | { all: true };\n"],"names":["envelope","envelopeId","isEqual"],"mappings":"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"}
@@ -1,3 +1,12 @@
1
+ ;
2
+ !function() {
3
+ try {
4
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
5
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "534430d2-5700-41fb-8f22-854ff87aa672", e._sentryDebugIdIdentifier = "sentry-dbid-534430d2-5700-41fb-8f22-854ff87aa672");
6
+ } catch (e2) {
7
+ }
8
+ }();
9
+ import "../../_virtual/_sentry-release-injection-file.js";
1
10
  const ERROR_EVENT_TYPES = /* @__PURE__ */ new Set(["event", "error"]);
2
11
  const TRACE_EVENT_TYPES = /* @__PURE__ */ new Set(["transaction"]);
3
12
  const PROFILE_EVENT_TYPES = /* @__PURE__ */ new Set(["profile"]);
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../../src/server/parser/helpers.ts"],"sourcesContent":["import type {\n SentryErrorEvent,\n SentryEvent,\n SentryLogEvent,\n SentryProfileV1Event,\n SentryTransactionEvent,\n} from \"./types.ts\";\n\nexport const ERROR_EVENT_TYPES = new Set([\"event\", \"error\"]);\nexport const TRACE_EVENT_TYPES = new Set([\"transaction\"]);\nexport const PROFILE_EVENT_TYPES = new Set([\"profile\"]);\nexport const LOG_EVENT_TYPES = new Set([\"log\"]);\nexport const SUPPORTED_EVENT_TYPES = new Set([\n ...ERROR_EVENT_TYPES,\n ...TRACE_EVENT_TYPES,\n ...PROFILE_EVENT_TYPES,\n ...LOG_EVENT_TYPES,\n]);\n\nexport function isErrorEvent(event: SentryEvent): event is SentryErrorEvent {\n const hasValidType = !event.type || ERROR_EVENT_TYPES.has(event.type);\n const hasException = Boolean((event as SentryErrorEvent).exception);\n const hasMessage = Boolean((event as SentryErrorEvent).message);\n return hasValidType && (hasException || hasMessage);\n}\n\nexport function isProfileEvent(event: SentryEvent): event is SentryProfileV1Event {\n return !!event.type && PROFILE_EVENT_TYPES.has(event.type) && (event as SentryProfileV1Event).version === \"1\";\n}\n\nexport function isTraceEvent(event: SentryEvent): event is SentryTransactionEvent {\n return !!event.type && TRACE_EVENT_TYPES.has(event.type);\n}\n\nexport function isLogEvent(event: SentryEvent): event is SentryLogEvent {\n return !!event.type && LOG_EVENT_TYPES.has(event.type);\n}\n"],"names":[],"mappings":"AAQO,MAAM,oBAAoB,oBAAI,IAAI,CAAC,SAAS,OAAO,CAAC;AACpD,MAAM,oBAAoB,oBAAI,IAAI,CAAC,aAAa,CAAC;AACjD,MAAM,sBAAsB,oBAAI,IAAI,CAAC,SAAS,CAAC;AAC/C,MAAM,kBAAkB,oBAAI,IAAI,CAAC,KAAK,CAAC;oBACL,IAAI;AAAA,EAC3C,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL,CAAC;AAEM,SAAS,aAAa,OAA+C;AAC1E,QAAM,eAAe,CAAC,MAAM,QAAQ,kBAAkB,IAAI,MAAM,IAAI;AACpE,QAAM,eAAe,QAAS,MAA2B,SAAS;AAClE,QAAM,aAAa,QAAS,MAA2B,OAAO;AAC9D,SAAO,iBAAiB,gBAAgB;AAC1C;AAMO,SAAS,aAAa,OAAqD;AAChF,SAAO,CAAC,CAAC,MAAM,QAAQ,kBAAkB,IAAI,MAAM,IAAI;AACzD;AAEO,SAAS,WAAW,OAA6C;AACtE,SAAO,CAAC,CAAC,MAAM,QAAQ,gBAAgB,IAAI,MAAM,IAAI;AACvD;"}
1
+ {"version":3,"file":"helpers.js","sources":["../../../src/server/parser/helpers.ts"],"sourcesContent":["import type {\n SentryErrorEvent,\n SentryEvent,\n SentryLogEvent,\n SentryProfileV1Event,\n SentryTransactionEvent,\n} from \"./types.ts\";\n\nexport const ERROR_EVENT_TYPES = new Set([\"event\", \"error\"]);\nexport const TRACE_EVENT_TYPES = new Set([\"transaction\"]);\nexport const PROFILE_EVENT_TYPES = new Set([\"profile\"]);\nexport const LOG_EVENT_TYPES = new Set([\"log\"]);\nexport const SUPPORTED_EVENT_TYPES = new Set([\n ...ERROR_EVENT_TYPES,\n ...TRACE_EVENT_TYPES,\n ...PROFILE_EVENT_TYPES,\n ...LOG_EVENT_TYPES,\n]);\n\nexport function isErrorEvent(event: SentryEvent): event is SentryErrorEvent {\n const hasValidType = !event.type || ERROR_EVENT_TYPES.has(event.type);\n const hasException = Boolean((event as SentryErrorEvent).exception);\n const hasMessage = Boolean((event as SentryErrorEvent).message);\n return hasValidType && (hasException || hasMessage);\n}\n\nexport function isProfileEvent(event: SentryEvent): event is SentryProfileV1Event {\n return !!event.type && PROFILE_EVENT_TYPES.has(event.type) && (event as SentryProfileV1Event).version === \"1\";\n}\n\nexport function isTraceEvent(event: SentryEvent): event is SentryTransactionEvent {\n return !!event.type && TRACE_EVENT_TYPES.has(event.type);\n}\n\nexport function isLogEvent(event: SentryEvent): event is SentryLogEvent {\n return !!event.type && LOG_EVENT_TYPES.has(event.type);\n}\n"],"names":[],"mappings":";;;;;;;;;AAQO,MAAM,oBAAoB,oBAAI,IAAI,CAAC,SAAS,OAAO,CAAC;AACpD,MAAM,oBAAoB,oBAAI,IAAI,CAAC,aAAa,CAAC;AACjD,MAAM,sBAAsB,oBAAI,IAAI,CAAC,SAAS,CAAC;AAC/C,MAAM,kBAAkB,oBAAI,IAAI,CAAC,KAAK,CAAC;oBACL,IAAI;AAAA,EAC3C,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AACL,CAAC;AAEM,SAAS,aAAa,OAA+C;AAC1E,QAAM,eAAe,CAAC,MAAM,QAAQ,kBAAkB,IAAI,MAAM,IAAI;AACpE,QAAM,eAAe,QAAS,MAA2B,SAAS;AAClE,QAAM,aAAa,QAAS,MAA2B,OAAO;AAC9D,SAAO,iBAAiB,gBAAgB;AAC1C;AAMO,SAAS,aAAa,OAAqD;AAChF,SAAO,CAAC,CAAC,MAAM,QAAQ,kBAAkB,IAAI,MAAM,IAAI;AACzD;AAEO,SAAS,WAAW,OAA6C;AACtE,SAAO,CAAC,CAAC,MAAM,QAAQ,gBAAgB,IAAI,MAAM,IAAI;AACvD;"}
@@ -1,5 +1,14 @@
1
+ ;
2
+ !function() {
3
+ try {
4
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
5
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "d55f5c02-7ecb-47d7-a83a-9d33687e2bd7", e._sentryDebugIdIdentifier = "sentry-dbid-d55f5c02-7ecb-47d7-a83a-9d33687e2bd7");
6
+ } catch (e2) {
7
+ }
8
+ }();
1
9
  import { uuidv7obj } from "uuidv7";
2
10
  import { RAW_TYPES } from "../../shared/constants.js";
11
+ import "../../_virtual/_sentry-release-injection-file.js";
3
12
  import { logger } from "../logger.js";
4
13
  const TEXT_CONTENT_TYPES = /* @__PURE__ */ new Set([
5
14
  "text/plain",
@@ -1 +1 @@
1
- {"version":3,"file":"processEnvelope.js","sources":["../../../src/server/parser/processEnvelope.ts"],"sourcesContent":["import type { Envelope, EnvelopeItem } from \"@sentry/core\";\nimport { type UUID, uuidv7obj } from \"uuidv7\";\nimport { RAW_TYPES } from \"../constants.ts\";\nimport { logger } from \"../logger.ts\";\nimport type { RawEventContext } from \"./types.ts\";\n\nexport type ParsedEnvelope = {\n envelope: [Envelope[0] & { __spotlight_envelope_id: UUID }, Envelope[1]];\n rawEnvelope: RawEventContext;\n};\n\nconst TEXT_CONTENT_TYPES = new Set([\n \"text/plain\",\n \"text/css\",\n \"text/csv\",\n \"text/html\",\n \"text/javascript\",\n \"text/json\",\n \"text/x-json\",\n \"application/json\",\n \"application/ld+json\",\n \"application/json\",\n]);\n\n/**\n * Implements parser for\n * @see https://develop.sentry.dev/sdk/envelopes/#serialization-format\n * @param rawEvent Envelope data\n * @param senderUserAgent Optional User-Agent header from the HTTP request sending the envelope\n * @returns parsed envelope\n */\nexport function processEnvelope(rawEvent: RawEventContext, senderUserAgent?: string): ParsedEnvelope | null {\n let buffer = typeof rawEvent.data === \"string\" ? Uint8Array.from(rawEvent.data, c => c.charCodeAt(0)) : rawEvent.data;\n\n function readLine(length?: number) {\n const cursor = length ?? getLineEnd(buffer);\n const line = buffer.subarray(0, cursor);\n buffer = buffer.subarray(cursor + 1);\n return line;\n }\n\n const envelopeHeader = parseJSONFromBuffer(readLine()) as Envelope[0];\n if (!envelopeHeader) {\n logger.error(\"Malformed envelope header, skipping...\");\n return null;\n }\n\n envelopeHeader.__spotlight_envelope_id = uuidv7obj();\n\n // Store sender User-Agent for improved SDK categorization\n if (senderUserAgent) {\n envelopeHeader.__spotlight_sender_user_agent = senderUserAgent;\n }\n\n const items: EnvelopeItem[] = [];\n while (buffer.length) {\n const itemHeader = parseJSONFromBuffer(readLine()) as EnvelopeItem[0];\n const payloadLength = itemHeader.length;\n const itemPayloadRaw = readLine(payloadLength);\n\n let itemPayload: EnvelopeItem[1];\n try {\n if (RAW_TYPES.has(itemHeader.type)) {\n const rawPayload = itemPayloadRaw as Buffer;\n if (\n !itemHeader.content_type &&\n // @ts-expect-error -- statsd is an old and deprecated event type but have envelopes for that\n itemHeader.type === \"statsd\"\n ) {\n // @ts-expect-error -- same as above\n itemHeader.content_type = \"text/plain\";\n }\n itemPayload = {\n data: rawPayload.toString(TEXT_CONTENT_TYPES.has(itemHeader.content_type as string) ? \"utf-8\" : \"base64\"),\n } as EnvelopeItem[1];\n } else {\n itemPayload = parseJSONFromBuffer(itemPayloadRaw);\n if (!itemPayload) {\n logger.error(itemHeader);\n } else if (itemHeader.type) {\n // data sanitization\n // @ts-expect-error ts(2339) -- We should really stop adding type to payloads\n itemPayload.type = itemHeader.type;\n }\n }\n } catch (err) {\n itemPayload = itemPayloadRaw;\n logger.error(err);\n }\n\n items.push([itemHeader, itemPayload] as EnvelopeItem);\n }\n\n return {\n envelope: [envelopeHeader, items] as ParsedEnvelope[\"envelope\"],\n rawEnvelope: rawEvent,\n };\n}\n\nfunction getLineEnd(data: Uint8Array): number {\n let end = data.indexOf(0xa);\n if (end === -1) {\n end = data.length;\n }\n\n return end;\n}\n\nfunction parseJSONFromBuffer<T = unknown>(data: Uint8Array): T {\n try {\n return JSON.parse(new TextDecoder().decode(data)) as T;\n } catch (err) {\n logger.error(err);\n return null as T;\n }\n}\n"],"names":[],"mappings":";;;AAWA,MAAM,yCAAyB,IAAI;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AASM,SAAS,gBAAgB,UAA2B,iBAAiD;AAC1G,MAAI,SAAS,OAAO,SAAS,SAAS,WAAW,WAAW,KAAK,SAAS,MAAM,OAAK,EAAE,WAAW,CAAC,CAAC,IAAI,SAAS;AAEjH,WAAS,SAAS,QAAiB;AACjC,UAAM,SAAS,UAAU,WAAW,MAAM;AAC1C,UAAM,OAAO,OAAO,SAAS,GAAG,MAAM;AACtC,aAAS,OAAO,SAAS,SAAS,CAAC;AACnC,WAAO;AAAA,EACT;AAEA,QAAM,iBAAiB,oBAAoB,UAAU;AACrD,MAAI,CAAC,gBAAgB;AACnB,WAAO,MAAM,wCAAwC;AACrD,WAAO;AAAA,EACT;AAEA,iBAAe,0BAA0B,UAAA;AAGzC,MAAI,iBAAiB;AACnB,mBAAe,gCAAgC;AAAA,EACjD;AAEA,QAAM,QAAwB,CAAA;AAC9B,SAAO,OAAO,QAAQ;AACpB,UAAM,aAAa,oBAAoB,UAAU;AACjD,UAAM,gBAAgB,WAAW;AACjC,UAAM,iBAAiB,SAAS,aAAa;AAE7C,QAAI;AACJ,QAAI;AACF,UAAI,UAAU,IAAI,WAAW,IAAI,GAAG;AAClC,cAAM,aAAa;AACnB,YACE,CAAC,WAAW;AAAA,QAEZ,WAAW,SAAS,UACpB;AAEA,qBAAW,eAAe;AAAA,QAC5B;AACA,sBAAc;AAAA,UACZ,MAAM,WAAW,SAAS,mBAAmB,IAAI,WAAW,YAAsB,IAAI,UAAU,QAAQ;AAAA,QAAA;AAAA,MAE5G,OAAO;AACL,sBAAc,oBAAoB,cAAc;AAChD,YAAI,CAAC,aAAa;AAChB,iBAAO,MAAM,UAAU;AAAA,QACzB,WAAW,WAAW,MAAM;AAG1B,sBAAY,OAAO,WAAW;AAAA,QAChC;AAAA,MACF;AAAA,IACF,SAAS,KAAK;AACZ,oBAAc;AACd,aAAO,MAAM,GAAG;AAAA,IAClB;AAEA,UAAM,KAAK,CAAC,YAAY,WAAW,CAAiB;AAAA,EACtD;AAEA,SAAO;AAAA,IACL,UAAU,CAAC,gBAAgB,KAAK;AAAA,IAChC,aAAa;AAAA,EAAA;AAEjB;AAEA,SAAS,WAAW,MAA0B;AAC5C,MAAI,MAAM,KAAK,QAAQ,EAAG;AAC1B,MAAI,QAAQ,IAAI;AACd,UAAM,KAAK;AAAA,EACb;AAEA,SAAO;AACT;AAEA,SAAS,oBAAiC,MAAqB;AAC7D,MAAI;AACF,WAAO,KAAK,MAAM,IAAI,cAAc,OAAO,IAAI,CAAC;AAAA,EAClD,SAAS,KAAK;AACZ,WAAO,MAAM,GAAG;AAChB,WAAO;AAAA,EACT;AACF;"}
1
+ {"version":3,"file":"processEnvelope.js","sources":["../../../src/server/parser/processEnvelope.ts"],"sourcesContent":["import type { Envelope, EnvelopeItem } from \"@sentry/core\";\nimport { type UUID, uuidv7obj } from \"uuidv7\";\nimport { RAW_TYPES } from \"../constants.ts\";\nimport { logger } from \"../logger.ts\";\nimport type { RawEventContext } from \"./types.ts\";\n\nexport type ParsedEnvelope = {\n envelope: [Envelope[0] & { __spotlight_envelope_id: UUID }, Envelope[1]];\n rawEnvelope: RawEventContext;\n};\n\nconst TEXT_CONTENT_TYPES = new Set([\n \"text/plain\",\n \"text/css\",\n \"text/csv\",\n \"text/html\",\n \"text/javascript\",\n \"text/json\",\n \"text/x-json\",\n \"application/json\",\n \"application/ld+json\",\n \"application/json\",\n]);\n\n/**\n * Implements parser for\n * @see https://develop.sentry.dev/sdk/envelopes/#serialization-format\n * @param rawEvent Envelope data\n * @param senderUserAgent Optional User-Agent header from the HTTP request sending the envelope\n * @returns parsed envelope\n */\nexport function processEnvelope(rawEvent: RawEventContext, senderUserAgent?: string): ParsedEnvelope | null {\n let buffer = typeof rawEvent.data === \"string\" ? Uint8Array.from(rawEvent.data, c => c.charCodeAt(0)) : rawEvent.data;\n\n function readLine(length?: number) {\n const cursor = length ?? getLineEnd(buffer);\n const line = buffer.subarray(0, cursor);\n buffer = buffer.subarray(cursor + 1);\n return line;\n }\n\n const envelopeHeader = parseJSONFromBuffer(readLine()) as Envelope[0];\n if (!envelopeHeader) {\n logger.error(\"Malformed envelope header, skipping...\");\n return null;\n }\n\n envelopeHeader.__spotlight_envelope_id = uuidv7obj();\n\n // Store sender User-Agent for improved SDK categorization\n if (senderUserAgent) {\n envelopeHeader.__spotlight_sender_user_agent = senderUserAgent;\n }\n\n const items: EnvelopeItem[] = [];\n while (buffer.length) {\n const itemHeader = parseJSONFromBuffer(readLine()) as EnvelopeItem[0];\n const payloadLength = itemHeader.length;\n const itemPayloadRaw = readLine(payloadLength);\n\n let itemPayload: EnvelopeItem[1];\n try {\n if (RAW_TYPES.has(itemHeader.type)) {\n const rawPayload = itemPayloadRaw as Buffer;\n if (\n !itemHeader.content_type &&\n // @ts-expect-error -- statsd is an old and deprecated event type but have envelopes for that\n itemHeader.type === \"statsd\"\n ) {\n // @ts-expect-error -- same as above\n itemHeader.content_type = \"text/plain\";\n }\n itemPayload = {\n data: rawPayload.toString(TEXT_CONTENT_TYPES.has(itemHeader.content_type as string) ? \"utf-8\" : \"base64\"),\n } as EnvelopeItem[1];\n } else {\n itemPayload = parseJSONFromBuffer(itemPayloadRaw);\n if (!itemPayload) {\n logger.error(itemHeader);\n } else if (itemHeader.type) {\n // data sanitization\n // @ts-expect-error ts(2339) -- We should really stop adding type to payloads\n itemPayload.type = itemHeader.type;\n }\n }\n } catch (err) {\n itemPayload = itemPayloadRaw;\n logger.error(err);\n }\n\n items.push([itemHeader, itemPayload] as EnvelopeItem);\n }\n\n return {\n envelope: [envelopeHeader, items] as ParsedEnvelope[\"envelope\"],\n rawEnvelope: rawEvent,\n };\n}\n\nfunction getLineEnd(data: Uint8Array): number {\n let end = data.indexOf(0xa);\n if (end === -1) {\n end = data.length;\n }\n\n return end;\n}\n\nfunction parseJSONFromBuffer<T = unknown>(data: Uint8Array): T {\n try {\n return JSON.parse(new TextDecoder().decode(data)) as T;\n } catch (err) {\n logger.error(err);\n return null as T;\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAWA,MAAM,yCAAyB,IAAI;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AASM,SAAS,gBAAgB,UAA2B,iBAAiD;AAC1G,MAAI,SAAS,OAAO,SAAS,SAAS,WAAW,WAAW,KAAK,SAAS,MAAM,OAAK,EAAE,WAAW,CAAC,CAAC,IAAI,SAAS;AAEjH,WAAS,SAAS,QAAiB;AACjC,UAAM,SAAS,UAAU,WAAW,MAAM;AAC1C,UAAM,OAAO,OAAO,SAAS,GAAG,MAAM;AACtC,aAAS,OAAO,SAAS,SAAS,CAAC;AACnC,WAAO;AAAA,EACT;AAEA,QAAM,iBAAiB,oBAAoB,UAAU;AACrD,MAAI,CAAC,gBAAgB;AACnB,WAAO,MAAM,wCAAwC;AACrD,WAAO;AAAA,EACT;AAEA,iBAAe,0BAA0B,UAAA;AAGzC,MAAI,iBAAiB;AACnB,mBAAe,gCAAgC;AAAA,EACjD;AAEA,QAAM,QAAwB,CAAA;AAC9B,SAAO,OAAO,QAAQ;AACpB,UAAM,aAAa,oBAAoB,UAAU;AACjD,UAAM,gBAAgB,WAAW;AACjC,UAAM,iBAAiB,SAAS,aAAa;AAE7C,QAAI;AACJ,QAAI;AACF,UAAI,UAAU,IAAI,WAAW,IAAI,GAAG;AAClC,cAAM,aAAa;AACnB,YACE,CAAC,WAAW;AAAA,QAEZ,WAAW,SAAS,UACpB;AAEA,qBAAW,eAAe;AAAA,QAC5B;AACA,sBAAc;AAAA,UACZ,MAAM,WAAW,SAAS,mBAAmB,IAAI,WAAW,YAAsB,IAAI,UAAU,QAAQ;AAAA,QAAA;AAAA,MAE5G,OAAO;AACL,sBAAc,oBAAoB,cAAc;AAChD,YAAI,CAAC,aAAa;AAChB,iBAAO,MAAM,UAAU;AAAA,QACzB,WAAW,WAAW,MAAM;AAG1B,sBAAY,OAAO,WAAW;AAAA,QAChC;AAAA,MACF;AAAA,IACF,SAAS,KAAK;AACZ,oBAAc;AACd,aAAO,MAAM,GAAG;AAAA,IAClB;AAEA,UAAM,KAAK,CAAC,YAAY,WAAW,CAAiB;AAAA,EACtD;AAEA,SAAO;AAAA,IACL,UAAU,CAAC,gBAAgB,KAAK;AAAA,IAChC,aAAa;AAAA,EAAA;AAEjB;AAEA,SAAS,WAAW,MAA0B;AAC5C,MAAI,MAAM,KAAK,QAAQ,EAAG;AAC1B,MAAI,QAAQ,IAAI;AACd,UAAM,KAAK;AAAA,EACb;AAEA,SAAO;AACT;AAEA,SAAS,oBAAiC,MAAqB;AAC7D,MAAI;AACF,WAAO,KAAK,MAAM,IAAI,cAAc,OAAO,IAAI,CAAC;AAAA,EAClD,SAAS,KAAK;AACZ,WAAO,MAAM,GAAG;AAChB,WAAO;AAAA,EACT;AACF;"}
@@ -1,9 +1,21 @@
1
+ ;
2
+ !function() {
3
+ try {
4
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
5
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "df2b59d9-0e2c-4abe-8147-c0e94d351512", e._sentryDebugIdIdentifier = "sentry-dbid-df2b59d9-0e2c-4abe-8147-c0e94d351512");
6
+ } catch (e2) {
7
+ }
8
+ }();
1
9
  import { Hono } from "hono";
2
10
  import { getBuffer } from "../utils/getBuffer.js";
3
11
  import "../parser/helpers.js";
4
12
  import "uuidv7";
13
+ import "../../_virtual/_sentry-release-injection-file.js";
5
14
  import "node:http";
6
15
  import "@sentry/node";
16
+ import "node:dns/promises";
17
+ import "node:net";
18
+ import "node:os";
7
19
  const router = new Hono();
8
20
  router.delete("/", (ctx) => {
9
21
  getBuffer().clear();
@@ -1 +1 @@
1
- {"version":3,"file":"clear.js","sources":["../../../src/server/routes/clear.ts"],"sourcesContent":["import { Hono } from \"hono\";\nimport { getBuffer } from \"../utils/index.ts\";\n\nconst router = new Hono();\n\nrouter.delete(\"/\", ctx => {\n getBuffer().clear();\n return ctx.text(\"Cleared\");\n});\n\nexport default router;\n"],"names":[],"mappings":";;;;;;AAGA,MAAM,SAAS,IAAI,KAAA;AAEnB,OAAO,OAAO,KAAK,CAAA,QAAO;AACxB,YAAA,EAAY,MAAA;AACZ,SAAO,IAAI,KAAK,SAAS;AAC3B,CAAC;"}
1
+ {"version":3,"file":"clear.js","sources":["../../../src/server/routes/clear.ts"],"sourcesContent":["import { Hono } from \"hono\";\nimport { getBuffer } from \"../utils/index.ts\";\n\nconst router = new Hono();\n\nrouter.delete(\"/\", ctx => {\n getBuffer().clear();\n return ctx.text(\"Cleared\");\n});\n\nexport default router;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAGA,MAAM,SAAS,IAAI,KAAA;AAEnB,OAAO,OAAO,KAAK,CAAA,QAAO;AACxB,YAAA,EAAY,MAAA;AACZ,SAAO,IAAI,KAAK,SAAS;AAC3B,CAAC;"}
@@ -1,6 +1,15 @@
1
+ ;
2
+ !function() {
3
+ try {
4
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
5
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "82388776-53c5-4b2b-92e3-0f926106cbef", e._sentryDebugIdIdentifier = "sentry-dbid-82388776-53c5-4b2b-92e3-0f926106cbef");
6
+ } catch (e2) {
7
+ }
8
+ }();
1
9
  import { readFileSync } from "node:fs";
2
10
  import { Hono } from "hono";
3
11
  import { parseStackTrace, isValidSentryStackFrame, getGeneratedCodeFromServer, applySourceContextToFrame, addContextLinesToFrame } from "./utils.js";
12
+ import "../../../_virtual/_sentry-release-injection-file.js";
4
13
  const router = new Hono();
5
14
  router.put("/", async (ctx) => {
6
15
  const requestBody = await ctx.req.text();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/server/routes/contextlines/index.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport { Hono } from \"hono\";\nimport {\n addContextLinesToFrame,\n applySourceContextToFrame,\n getGeneratedCodeFromServer,\n isValidSentryStackFrame,\n parseStackTrace,\n} from \"./utils.ts\";\n\nconst router = new Hono();\n\nrouter.put(\"/\", async ctx => {\n const requestBody = await ctx.req.text();\n\n const stacktrace = parseStackTrace(requestBody);\n\n if (!stacktrace) {\n return ctx.body(null, 500);\n }\n\n for (const frame of stacktrace.frames ?? []) {\n if (\n !isValidSentryStackFrame(frame) ||\n // let's ignore dependencies for now with this naive check\n frame.filename.includes(\"/node_modules/\")\n ) {\n continue;\n }\n const { filename } = frame;\n // Dirty check to see if this looks like a regular file path or a URL\n if (filename.includes(\"://\")) {\n const generatedCode = await getGeneratedCodeFromServer(frame.filename);\n if (!generatedCode) {\n continue;\n }\n\n // Extract the inline source map from the minified code\n const inlineSourceMapMatch = generatedCode.match(/\\/\\/# sourceMappingURL=data:application\\/json;base64,(.*)/);\n\n if (inlineSourceMapMatch?.[1]) {\n const sourceMapBase64 = inlineSourceMapMatch[1];\n const sourceMapContent = Buffer.from(sourceMapBase64, \"base64\").toString(\"utf-8\");\n applySourceContextToFrame(sourceMapContent, frame);\n }\n } else if (!filename.includes(\":\")) {\n try {\n const lines = readFileSync(filename, { encoding: \"utf-8\" }).split(/\\r?\\n/);\n addContextLinesToFrame(lines, frame);\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw err;\n }\n }\n }\n }\n\n return ctx.json(stacktrace);\n});\n\nexport default router;\n"],"names":[],"mappings":";;;AAUA,MAAM,SAAS,IAAI,KAAA;AAEnB,OAAO,IAAI,KAAK,OAAM,QAAO;AAC3B,QAAM,cAAc,MAAM,IAAI,IAAI,KAAA;AAElC,QAAM,aAAa,gBAAgB,WAAW;AAE9C,MAAI,CAAC,YAAY;AACf,WAAO,IAAI,KAAK,MAAM,GAAG;AAAA,EAC3B;AAEA,aAAW,SAAS,WAAW,UAAU,CAAA,GAAI;AAC3C,QACE,CAAC,wBAAwB,KAAK;AAAA,IAE9B,MAAM,SAAS,SAAS,gBAAgB,GACxC;AACA;AAAA,IACF;AACA,UAAM,EAAE,aAAa;AAErB,QAAI,SAAS,SAAS,KAAK,GAAG;AAC5B,YAAM,gBAAgB,MAAM,2BAA2B,MAAM,QAAQ;AACrE,UAAI,CAAC,eAAe;AAClB;AAAA,MACF;AAGA,YAAM,uBAAuB,cAAc,MAAM,2DAA2D;AAE5G,UAAI,uBAAuB,CAAC,GAAG;AAC7B,cAAM,kBAAkB,qBAAqB,CAAC;AAC9C,cAAM,mBAAmB,OAAO,KAAK,iBAAiB,QAAQ,EAAE,SAAS,OAAO;AAChF,kCAA0B,kBAAkB,KAAK;AAAA,MACnD;AAAA,IACF,WAAW,CAAC,SAAS,SAAS,GAAG,GAAG;AAClC,UAAI;AACF,cAAM,QAAQ,aAAa,UAAU,EAAE,UAAU,QAAA,CAAS,EAAE,MAAM,OAAO;AACzE,+BAAuB,OAAO,KAAK;AAAA,MACrC,SAAS,KAAK;AACZ,YAAK,IAA8B,SAAS,UAAU;AACpD,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,IAAI,KAAK,UAAU;AAC5B,CAAC;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/server/routes/contextlines/index.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\nimport { Hono } from \"hono\";\nimport {\n addContextLinesToFrame,\n applySourceContextToFrame,\n getGeneratedCodeFromServer,\n isValidSentryStackFrame,\n parseStackTrace,\n} from \"./utils.ts\";\n\nconst router = new Hono();\n\nrouter.put(\"/\", async ctx => {\n const requestBody = await ctx.req.text();\n\n const stacktrace = parseStackTrace(requestBody);\n\n if (!stacktrace) {\n return ctx.body(null, 500);\n }\n\n for (const frame of stacktrace.frames ?? []) {\n if (\n !isValidSentryStackFrame(frame) ||\n // let's ignore dependencies for now with this naive check\n frame.filename.includes(\"/node_modules/\")\n ) {\n continue;\n }\n const { filename } = frame;\n // Dirty check to see if this looks like a regular file path or a URL\n if (filename.includes(\"://\")) {\n const generatedCode = await getGeneratedCodeFromServer(frame.filename);\n if (!generatedCode) {\n continue;\n }\n\n // Extract the inline source map from the minified code\n const inlineSourceMapMatch = generatedCode.match(/\\/\\/# sourceMappingURL=data:application\\/json;base64,(.*)/);\n\n if (inlineSourceMapMatch?.[1]) {\n const sourceMapBase64 = inlineSourceMapMatch[1];\n const sourceMapContent = Buffer.from(sourceMapBase64, \"base64\").toString(\"utf-8\");\n applySourceContextToFrame(sourceMapContent, frame);\n }\n } else if (!filename.includes(\":\")) {\n try {\n const lines = readFileSync(filename, { encoding: \"utf-8\" }).split(/\\r?\\n/);\n addContextLinesToFrame(lines, frame);\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== \"ENOENT\") {\n throw err;\n }\n }\n }\n }\n\n return ctx.json(stacktrace);\n});\n\nexport default router;\n"],"names":[],"mappings":";;;;;;;;;;;;AAUA,MAAM,SAAS,IAAI,KAAA;AAEnB,OAAO,IAAI,KAAK,OAAM,QAAO;AAC3B,QAAM,cAAc,MAAM,IAAI,IAAI,KAAA;AAElC,QAAM,aAAa,gBAAgB,WAAW;AAE9C,MAAI,CAAC,YAAY;AACf,WAAO,IAAI,KAAK,MAAM,GAAG;AAAA,EAC3B;AAEA,aAAW,SAAS,WAAW,UAAU,CAAA,GAAI;AAC3C,QACE,CAAC,wBAAwB,KAAK;AAAA,IAE9B,MAAM,SAAS,SAAS,gBAAgB,GACxC;AACA;AAAA,IACF;AACA,UAAM,EAAE,aAAa;AAErB,QAAI,SAAS,SAAS,KAAK,GAAG;AAC5B,YAAM,gBAAgB,MAAM,2BAA2B,MAAM,QAAQ;AACrE,UAAI,CAAC,eAAe;AAClB;AAAA,MACF;AAGA,YAAM,uBAAuB,cAAc,MAAM,2DAA2D;AAE5G,UAAI,uBAAuB,CAAC,GAAG;AAC7B,cAAM,kBAAkB,qBAAqB,CAAC;AAC9C,cAAM,mBAAmB,OAAO,KAAK,iBAAiB,QAAQ,EAAE,SAAS,OAAO;AAChF,kCAA0B,kBAAkB,KAAK;AAAA,MACnD;AAAA,IACF,WAAW,CAAC,SAAS,SAAS,GAAG,GAAG;AAClC,UAAI;AACF,cAAM,QAAQ,aAAa,UAAU,EAAE,UAAU,QAAA,CAAS,EAAE,MAAM,OAAO;AACzE,+BAAuB,OAAO,KAAK;AAAA,MACrC,SAAS,KAAK;AACZ,YAAK,IAA8B,SAAS,UAAU;AACpD,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SAAO,IAAI,KAAK,UAAU;AAC5B,CAAC;"}
@@ -1,6 +1,15 @@
1
+ ;
2
+ !function() {
3
+ try {
4
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
5
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "a89df77e-d568-4a5a-b7ed-b401f74aa610", e._sentryDebugIdIdentifier = "sentry-dbid-a89df77e-d568-4a5a-b7ed-b401f74aa610");
6
+ } catch (e2) {
7
+ }
8
+ }();
1
9
  import * as os from "node:os";
2
10
  import * as path from "node:path";
3
11
  import { TraceMap, originalPositionFor, LEAST_UPPER_BOUND, sourceContentFor } from "@jridgewell/trace-mapping";
12
+ import "../../../_virtual/_sentry-release-injection-file.js";
4
13
  async function getGeneratedCodeFromServer(filename) {
5
14
  try {
6
15
  const generatedCodeResponse = await fetch(filename);
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../src/server/routes/contextlines/utils.ts"],"sourcesContent":["import * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport { LEAST_UPPER_BOUND, TraceMap, originalPositionFor, sourceContentFor } from \"@jridgewell/trace-mapping\";\n\ntype SourceContext = {\n pre_context?: string[];\n context_line?: string;\n post_context?: string[];\n};\n\ntype SentryStackFrame = {\n filename?: string;\n lineno?: number;\n colno?: number;\n} & SourceContext;\n\ntype ValidSentryStackFrame = Required<SentryStackFrame>;\n\ntype SentryStackTrace = {\n frames?: SentryStackFrame[];\n};\n\nexport async function getGeneratedCodeFromServer(filename: string): Promise<string | undefined> {\n try {\n const generatedCodeResponse = await fetch(filename);\n return generatedCodeResponse.text();\n } catch {\n return undefined;\n }\n}\n\nexport function parseStackTrace(requestBody: string): SentryStackTrace | undefined {\n try {\n return JSON.parse(requestBody) as SentryStackTrace;\n } catch {\n return undefined;\n }\n}\n\nexport function applySourceContextToFrame(sourceMapContent: string, frame: ValidSentryStackFrame) {\n const tracer = new TraceMap(JSON.parse(sourceMapContent));\n\n const originalPosition = originalPositionFor(tracer, {\n line: frame.lineno,\n column: frame.colno,\n bias: LEAST_UPPER_BOUND,\n });\n\n if (originalPosition.source && originalPosition.line && originalPosition.column) {\n frame.lineno = originalPosition.line;\n frame.colno = originalPosition.column;\n const filePath = new URL(frame.filename).pathname.slice(1); // slice(1) is to not make it absolute path\n frame.filename = path.resolve(path.join(path.dirname(filePath), originalPosition.source));\n\n const content = sourceContentFor(tracer, originalPosition.source);\n const lines = content?.split(os.EOL) ?? [];\n addContextLinesToFrame(lines, frame);\n }\n\n return originalPosition;\n}\n\nexport function addContextLinesToFrame(lines: string[], frame: ValidSentryStackFrame, linesOfContext = 5): void {\n const maxLines = lines.length;\n const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0);\n\n frame.pre_context = lines\n .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n .map((line: string) => snipLine(line, 0));\n\n frame.context_line = snipLine(lines[Math.min(maxLines - 1, sourceLine)], frame.colno || 0);\n\n frame.post_context = lines\n .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n .map((line: string) => snipLine(line, 0));\n}\n\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nfunction snipLine(line: string, colno: number): string {\n let newLine = line;\n const lineLength = newLine.length;\n if (lineLength <= 150) {\n return newLine;\n }\n if (colno > lineLength) {\n // eslint-disable-next-line no-param-reassign\n colno = lineLength;\n }\n\n let start = Math.max(colno - 60, 0);\n if (start < 5) {\n start = 0;\n }\n\n let end = Math.min(start + 140, lineLength);\n if (end > lineLength - 5) {\n end = lineLength;\n }\n if (end === lineLength) {\n start = Math.max(end - 140, 0);\n }\n\n newLine = newLine.slice(start, end);\n if (start > 0) {\n newLine = `'{snip} ${newLine}`;\n }\n if (end < lineLength) {\n newLine += \" {snip}\";\n }\n\n return newLine;\n}\n\nexport function isValidSentryStackFrame(frame: SentryStackFrame): frame is ValidSentryStackFrame {\n return !!frame.filename && !!frame.lineno && !!frame.colno;\n}\n"],"names":[],"mappings":";;;AAsBA,eAAsB,2BAA2B,UAA+C;AAC9F,MAAI;AACF,UAAM,wBAAwB,MAAM,MAAM,QAAQ;AAClD,WAAO,sBAAsB,KAAA;AAAA,EAC/B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,gBAAgB,aAAmD;AACjF,MAAI;AACF,WAAO,KAAK,MAAM,WAAW;AAAA,EAC/B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,0BAA0B,kBAA0B,OAA8B;AAChG,QAAM,SAAS,IAAI,SAAS,KAAK,MAAM,gBAAgB,CAAC;AAExD,QAAM,mBAAmB,oBAAoB,QAAQ;AAAA,IACnD,MAAM,MAAM;AAAA,IACZ,QAAQ,MAAM;AAAA,IACd,MAAM;AAAA,EAAA,CACP;AAED,MAAI,iBAAiB,UAAU,iBAAiB,QAAQ,iBAAiB,QAAQ;AAC/E,UAAM,SAAS,iBAAiB;AAChC,UAAM,QAAQ,iBAAiB;AAC/B,UAAM,WAAW,IAAI,IAAI,MAAM,QAAQ,EAAE,SAAS,MAAM,CAAC;AACzD,UAAM,WAAW,KAAK,QAAQ,KAAK,KAAK,KAAK,QAAQ,QAAQ,GAAG,iBAAiB,MAAM,CAAC;AAExF,UAAM,UAAU,iBAAiB,QAAQ,iBAAiB,MAAM;AAChE,UAAM,QAAQ,SAAS,MAAM,GAAG,GAAG,KAAK,CAAA;AACxC,2BAAuB,OAAO,KAAK;AAAA,EACrC;AAEA,SAAO;AACT;AAEO,SAAS,uBAAuB,OAAiB,OAA8B,iBAAiB,GAAS;AAC9G,QAAM,WAAW,MAAM;AACvB,QAAM,aAAa,KAAK,IAAI,KAAK,IAAI,WAAW,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC;AAEvE,QAAM,cAAc,MACjB,MAAM,KAAK,IAAI,GAAG,aAAa,cAAc,GAAG,UAAU,EAC1D,IAAI,CAAC,SAAiB,SAAS,MAAM,CAAC,CAAC;AAE1C,QAAM,eAAe,SAAS,MAAM,KAAK,IAAI,WAAW,GAAG,UAAU,CAAC,GAAG,MAAM,SAAS,CAAC;AAEzF,QAAM,eAAe,MAClB,MAAM,KAAK,IAAI,aAAa,GAAG,QAAQ,GAAG,aAAa,IAAI,cAAc,EACzE,IAAI,CAAC,SAAiB,SAAS,MAAM,CAAC,CAAC;AAC5C;AAUA,SAAS,SAAS,MAAc,OAAuB;AACrD,MAAI,UAAU;AACd,QAAM,aAAa,QAAQ;AAC3B,MAAI,cAAc,KAAK;AACrB,WAAO;AAAA,EACT;AACA,MAAI,QAAQ,YAAY;AAEtB,YAAQ;AAAA,EACV;AAEA,MAAI,QAAQ,KAAK,IAAI,QAAQ,IAAI,CAAC;AAClC,MAAI,QAAQ,GAAG;AACb,YAAQ;AAAA,EACV;AAEA,MAAI,MAAM,KAAK,IAAI,QAAQ,KAAK,UAAU;AAC1C,MAAI,MAAM,aAAa,GAAG;AACxB,UAAM;AAAA,EACR;AACA,MAAI,QAAQ,YAAY;AACtB,YAAQ,KAAK,IAAI,MAAM,KAAK,CAAC;AAAA,EAC/B;AAEA,YAAU,QAAQ,MAAM,OAAO,GAAG;AAClC,MAAI,QAAQ,GAAG;AACb,cAAU,WAAW,OAAO;AAAA,EAC9B;AACA,MAAI,MAAM,YAAY;AACpB,eAAW;AAAA,EACb;AAEA,SAAO;AACT;AAEO,SAAS,wBAAwB,OAAyD;AAC/F,SAAO,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC,MAAM,UAAU,CAAC,CAAC,MAAM;AACvD;"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../src/server/routes/contextlines/utils.ts"],"sourcesContent":["import * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport { LEAST_UPPER_BOUND, TraceMap, originalPositionFor, sourceContentFor } from \"@jridgewell/trace-mapping\";\n\ntype SourceContext = {\n pre_context?: string[];\n context_line?: string;\n post_context?: string[];\n};\n\ntype SentryStackFrame = {\n filename?: string;\n lineno?: number;\n colno?: number;\n} & SourceContext;\n\ntype ValidSentryStackFrame = Required<SentryStackFrame>;\n\ntype SentryStackTrace = {\n frames?: SentryStackFrame[];\n};\n\nexport async function getGeneratedCodeFromServer(filename: string): Promise<string | undefined> {\n try {\n const generatedCodeResponse = await fetch(filename);\n return generatedCodeResponse.text();\n } catch {\n return undefined;\n }\n}\n\nexport function parseStackTrace(requestBody: string): SentryStackTrace | undefined {\n try {\n return JSON.parse(requestBody) as SentryStackTrace;\n } catch {\n return undefined;\n }\n}\n\nexport function applySourceContextToFrame(sourceMapContent: string, frame: ValidSentryStackFrame) {\n const tracer = new TraceMap(JSON.parse(sourceMapContent));\n\n const originalPosition = originalPositionFor(tracer, {\n line: frame.lineno,\n column: frame.colno,\n bias: LEAST_UPPER_BOUND,\n });\n\n if (originalPosition.source && originalPosition.line && originalPosition.column) {\n frame.lineno = originalPosition.line;\n frame.colno = originalPosition.column;\n const filePath = new URL(frame.filename).pathname.slice(1); // slice(1) is to not make it absolute path\n frame.filename = path.resolve(path.join(path.dirname(filePath), originalPosition.source));\n\n const content = sourceContentFor(tracer, originalPosition.source);\n const lines = content?.split(os.EOL) ?? [];\n addContextLinesToFrame(lines, frame);\n }\n\n return originalPosition;\n}\n\nexport function addContextLinesToFrame(lines: string[], frame: ValidSentryStackFrame, linesOfContext = 5): void {\n const maxLines = lines.length;\n const sourceLine = Math.max(Math.min(maxLines - 1, frame.lineno - 1), 0);\n\n frame.pre_context = lines\n .slice(Math.max(0, sourceLine - linesOfContext), sourceLine)\n .map((line: string) => snipLine(line, 0));\n\n frame.context_line = snipLine(lines[Math.min(maxLines - 1, sourceLine)], frame.colno || 0);\n\n frame.post_context = lines\n .slice(Math.min(sourceLine + 1, maxLines), sourceLine + 1 + linesOfContext)\n .map((line: string) => snipLine(line, 0));\n}\n\n/**\n * This is basically just `trim_line` from\n * https://github.com/getsentry/sentry/blob/master/src/sentry/lang/javascript/processor.py#L67\n *\n * @param str An object that contains serializable values\n * @param max Maximum number of characters in truncated string\n * @returns string Encoded\n */\nfunction snipLine(line: string, colno: number): string {\n let newLine = line;\n const lineLength = newLine.length;\n if (lineLength <= 150) {\n return newLine;\n }\n if (colno > lineLength) {\n // eslint-disable-next-line no-param-reassign\n colno = lineLength;\n }\n\n let start = Math.max(colno - 60, 0);\n if (start < 5) {\n start = 0;\n }\n\n let end = Math.min(start + 140, lineLength);\n if (end > lineLength - 5) {\n end = lineLength;\n }\n if (end === lineLength) {\n start = Math.max(end - 140, 0);\n }\n\n newLine = newLine.slice(start, end);\n if (start > 0) {\n newLine = `'{snip} ${newLine}`;\n }\n if (end < lineLength) {\n newLine += \" {snip}\";\n }\n\n return newLine;\n}\n\nexport function isValidSentryStackFrame(frame: SentryStackFrame): frame is ValidSentryStackFrame {\n return !!frame.filename && !!frame.lineno && !!frame.colno;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAsBA,eAAsB,2BAA2B,UAA+C;AAC9F,MAAI;AACF,UAAM,wBAAwB,MAAM,MAAM,QAAQ;AAClD,WAAO,sBAAsB,KAAA;AAAA,EAC/B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,gBAAgB,aAAmD;AACjF,MAAI;AACF,WAAO,KAAK,MAAM,WAAW;AAAA,EAC/B,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEO,SAAS,0BAA0B,kBAA0B,OAA8B;AAChG,QAAM,SAAS,IAAI,SAAS,KAAK,MAAM,gBAAgB,CAAC;AAExD,QAAM,mBAAmB,oBAAoB,QAAQ;AAAA,IACnD,MAAM,MAAM;AAAA,IACZ,QAAQ,MAAM;AAAA,IACd,MAAM;AAAA,EAAA,CACP;AAED,MAAI,iBAAiB,UAAU,iBAAiB,QAAQ,iBAAiB,QAAQ;AAC/E,UAAM,SAAS,iBAAiB;AAChC,UAAM,QAAQ,iBAAiB;AAC/B,UAAM,WAAW,IAAI,IAAI,MAAM,QAAQ,EAAE,SAAS,MAAM,CAAC;AACzD,UAAM,WAAW,KAAK,QAAQ,KAAK,KAAK,KAAK,QAAQ,QAAQ,GAAG,iBAAiB,MAAM,CAAC;AAExF,UAAM,UAAU,iBAAiB,QAAQ,iBAAiB,MAAM;AAChE,UAAM,QAAQ,SAAS,MAAM,GAAG,GAAG,KAAK,CAAA;AACxC,2BAAuB,OAAO,KAAK;AAAA,EACrC;AAEA,SAAO;AACT;AAEO,SAAS,uBAAuB,OAAiB,OAA8B,iBAAiB,GAAS;AAC9G,QAAM,WAAW,MAAM;AACvB,QAAM,aAAa,KAAK,IAAI,KAAK,IAAI,WAAW,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC;AAEvE,QAAM,cAAc,MACjB,MAAM,KAAK,IAAI,GAAG,aAAa,cAAc,GAAG,UAAU,EAC1D,IAAI,CAAC,SAAiB,SAAS,MAAM,CAAC,CAAC;AAE1C,QAAM,eAAe,SAAS,MAAM,KAAK,IAAI,WAAW,GAAG,UAAU,CAAC,GAAG,MAAM,SAAS,CAAC;AAEzF,QAAM,eAAe,MAClB,MAAM,KAAK,IAAI,aAAa,GAAG,QAAQ,GAAG,aAAa,IAAI,cAAc,EACzE,IAAI,CAAC,SAAiB,SAAS,MAAM,CAAC,CAAC;AAC5C;AAUA,SAAS,SAAS,MAAc,OAAuB;AACrD,MAAI,UAAU;AACd,QAAM,aAAa,QAAQ;AAC3B,MAAI,cAAc,KAAK;AACrB,WAAO;AAAA,EACT;AACA,MAAI,QAAQ,YAAY;AAEtB,YAAQ;AAAA,EACV;AAEA,MAAI,QAAQ,KAAK,IAAI,QAAQ,IAAI,CAAC;AAClC,MAAI,QAAQ,GAAG;AACb,YAAQ;AAAA,EACV;AAEA,MAAI,MAAM,KAAK,IAAI,QAAQ,KAAK,UAAU;AAC1C,MAAI,MAAM,aAAa,GAAG;AACxB,UAAM;AAAA,EACR;AACA,MAAI,QAAQ,YAAY;AACtB,YAAQ,KAAK,IAAI,MAAM,KAAK,CAAC;AAAA,EAC/B;AAEA,YAAU,QAAQ,MAAM,OAAO,GAAG;AAClC,MAAI,QAAQ,GAAG;AACb,cAAU,WAAW,OAAO;AAAA,EAC9B;AACA,MAAI,MAAM,YAAY;AACpB,eAAW;AAAA,EACb;AAEA,SAAO;AACT;AAEO,SAAS,wBAAwB,OAAyD;AAC/F,SAAO,CAAC,CAAC,MAAM,YAAY,CAAC,CAAC,MAAM,UAAU,CAAC,CAAC,MAAM;AACvD;"}
@@ -1,4 +1,13 @@
1
+ ;
2
+ !function() {
3
+ try {
4
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
5
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "ac2436aa-2c00-4a9d-96d2-9ec7f6f567ca", e._sentryDebugIdIdentifier = "sentry-dbid-ac2436aa-2c00-4a9d-96d2-9ec7f6f567ca");
6
+ } catch (e2) {
7
+ }
8
+ }();
1
9
  import { Hono } from "hono";
10
+ import "../../_virtual/_sentry-release-injection-file.js";
2
11
  const router = new Hono();
3
12
  router.get("/", (ctx) => ctx.text("OK"));
4
13
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"health.js","sources":["../../../src/server/routes/health.ts"],"sourcesContent":["import { Hono } from \"hono\";\n\nconst router = new Hono();\n\nrouter.get(\"/\", ctx => ctx.text(\"OK\"));\n\nexport default router;\n"],"names":[],"mappings":";AAEA,MAAM,SAAS,IAAI,KAAA;AAEnB,OAAO,IAAI,KAAK,CAAA,QAAO,IAAI,KAAK,IAAI,CAAC;"}
1
+ {"version":3,"file":"health.js","sources":["../../../src/server/routes/health.ts"],"sourcesContent":["import { Hono } from \"hono\";\n\nconst router = new Hono();\n\nrouter.get(\"/\", ctx => ctx.text(\"OK\"));\n\nexport default router;\n"],"names":[],"mappings":";;;;;;;;;;AAEA,MAAM,SAAS,IAAI,KAAA;AAEnB,OAAO,IAAI,KAAK,CAAA,QAAO,IAAI,KAAK,IAAI,CAAC;"}
@@ -1,5 +1,14 @@
1
+ ;
2
+ !function() {
3
+ try {
4
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
5
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "856e24a9-8f6d-42d2-9229-e8637e96ffaf", e._sentryDebugIdIdentifier = "sentry-dbid-856e24a9-8f6d-42d2-9229-e8637e96ffaf");
6
+ } catch (e2) {
7
+ }
8
+ }();
1
9
  import { Hono } from "hono";
2
10
  import { CONTEXT_LINES_ENDPOINT } from "../../shared/constants.js";
11
+ import "../../_virtual/_sentry-release-injection-file.js";
3
12
  import router$3 from "./clear.js";
4
13
  import router$6 from "./contextlines/index.js";
5
14
  import router$2 from "./health.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/server/routes/index.ts"],"sourcesContent":["import { Hono } from \"hono\";\nimport { CONTEXT_LINES_ENDPOINT } from \"../constants.ts\";\nimport clearRouter from \"./clear.ts\";\nimport contextLinesRouter from \"./contextlines/index.ts\";\nimport healthRouter from \"./health.ts\";\nimport mcpRouter from \"./mcp.ts\";\nimport openRouter from \"./open.ts\";\nimport streamRouter from \"./stream/index.ts\";\n\nconst router = new Hono();\nrouter.route(\"/mcp\", mcpRouter);\nrouter.route(\"/health\", healthRouter);\nrouter.route(\"/clear\", clearRouter);\nrouter.route(\"/\", streamRouter);\nrouter.route(\"/open\", openRouter);\nrouter.route(CONTEXT_LINES_ENDPOINT, contextLinesRouter);\n\nexport default router;\n"],"names":["mcpRouter","healthRouter","clearRouter","streamRouter","openRouter","contextLinesRouter"],"mappings":";;;;;;;;AASA,MAAM,SAAS,IAAI,KAAA;AACnB,OAAO,MAAM,QAAQA,QAAS;AAC9B,OAAO,MAAM,WAAWC,QAAY;AACpC,OAAO,MAAM,UAAUC,QAAW;AAClC,OAAO,MAAM,KAAKC,QAAY;AAC9B,OAAO,MAAM,SAASC,QAAU;AAChC,OAAO,MAAM,wBAAwBC,QAAkB;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/server/routes/index.ts"],"sourcesContent":["import { Hono } from \"hono\";\nimport { CONTEXT_LINES_ENDPOINT } from \"../constants.ts\";\nimport clearRouter from \"./clear.ts\";\nimport contextLinesRouter from \"./contextlines/index.ts\";\nimport healthRouter from \"./health.ts\";\nimport mcpRouter from \"./mcp.ts\";\nimport openRouter from \"./open.ts\";\nimport streamRouter from \"./stream/index.ts\";\n\nconst router = new Hono();\nrouter.route(\"/mcp\", mcpRouter);\nrouter.route(\"/health\", healthRouter);\nrouter.route(\"/clear\", clearRouter);\nrouter.route(\"/\", streamRouter);\nrouter.route(\"/open\", openRouter);\nrouter.route(CONTEXT_LINES_ENDPOINT, contextLinesRouter);\n\nexport default router;\n"],"names":["mcpRouter","healthRouter","clearRouter","streamRouter","openRouter","contextLinesRouter"],"mappings":";;;;;;;;;;;;;;;;;AASA,MAAM,SAAS,IAAI,KAAA;AACnB,OAAO,MAAM,QAAQA,QAAS;AAC9B,OAAO,MAAM,WAAWC,QAAY;AACpC,OAAO,MAAM,UAAUC,QAAW;AAClC,OAAO,MAAM,KAAKC,QAAY;AAC9B,OAAO,MAAM,SAASC,QAAU;AAChC,OAAO,MAAM,wBAAwBC,QAAkB;"}
@@ -1,6 +1,15 @@
1
+ ;
2
+ !function() {
3
+ try {
4
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
5
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "c6044788-a9e4-43bc-889c-2ad6a3388706", e._sentryDebugIdIdentifier = "sentry-dbid-c6044788-a9e4-43bc-889c-2ad6a3388706");
6
+ } catch (e2) {
7
+ }
8
+ }();
1
9
  import { StreamableHTTPTransport } from "@hono/mcp";
2
10
  import { Hono } from "hono";
3
11
  import { createMCPInstance } from "../mcp/mcp.js";
12
+ import "../../_virtual/_sentry-release-injection-file.js";
4
13
  const transport = new StreamableHTTPTransport();
5
14
  const mcp = createMCPInstance();
6
15
  const router = new Hono();
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.js","sources":["../../../src/server/routes/mcp.ts"],"sourcesContent":["import { StreamableHTTPTransport } from \"@hono/mcp\";\nimport { Hono } from \"hono\";\nimport { createMCPInstance } from \"../mcp/mcp.ts\";\n\nconst transport = new StreamableHTTPTransport();\nconst mcp = createMCPInstance();\n\nconst router = new Hono();\n\nrouter.all(\n \"/\",\n async (_ctx, next) => {\n if (!mcp.isConnected()) {\n // Connecting the MCP with the transport\n await mcp.connect(transport);\n }\n\n await next();\n },\n ctx => transport.handleRequest(ctx),\n);\n\nexport default router;\n"],"names":[],"mappings":";;;AAIA,MAAM,YAAY,IAAI,wBAAA;AACtB,MAAM,MAAM,kBAAA;AAEZ,MAAM,SAAS,IAAI,KAAA;AAEnB,OAAO;AAAA,EACL;AAAA,EACA,OAAO,MAAM,SAAS;AACpB,QAAI,CAAC,IAAI,eAAe;AAEtB,YAAM,IAAI,QAAQ,SAAS;AAAA,IAC7B;AAEA,UAAM,KAAA;AAAA,EACR;AAAA,EACA,CAAA,QAAO,UAAU,cAAc,GAAG;AACpC;"}
1
+ {"version":3,"file":"mcp.js","sources":["../../../src/server/routes/mcp.ts"],"sourcesContent":["import { StreamableHTTPTransport } from \"@hono/mcp\";\nimport { Hono } from \"hono\";\nimport { createMCPInstance } from \"../mcp/mcp.ts\";\n\nconst transport = new StreamableHTTPTransport();\nconst mcp = createMCPInstance();\n\nconst router = new Hono();\n\nrouter.all(\n \"/\",\n async (_ctx, next) => {\n if (!mcp.isConnected()) {\n // Connecting the MCP with the transport\n await mcp.connect(transport);\n }\n\n await next();\n },\n ctx => transport.handleRequest(ctx),\n);\n\nexport default router;\n"],"names":[],"mappings":";;;;;;;;;;;;AAIA,MAAM,YAAY,IAAI,wBAAA;AACtB,MAAM,MAAM,kBAAA;AAEZ,MAAM,SAAS,IAAI,KAAA;AAEnB,OAAO;AAAA,EACL;AAAA,EACA,OAAO,MAAM,SAAS;AACpB,QAAI,CAAC,IAAI,eAAe;AAEtB,YAAM,IAAI,QAAQ,SAAS;AAAA,IAC7B;AAEA,UAAM,KAAA;AAAA,EACR;AAAA,EACA,CAAA,QAAO,UAAU,cAAc,GAAG;AACpC;"}
@@ -1,7 +1,16 @@
1
+ ;
2
+ !function() {
3
+ try {
4
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
5
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "a96f3513-bf22-4042-9737-acc8779fc460", e._sentryDebugIdIdentifier = "sentry-dbid-a96f3513-bf22-4042-9737-acc8779fc460");
6
+ } catch (e2) {
7
+ }
8
+ }();
1
9
  import { resolve } from "node:path";
2
10
  import { Hono } from "hono";
3
11
  import launchEditor from "launch-editor";
4
12
  import { logger } from "../logger.js";
13
+ import "../../_virtual/_sentry-release-injection-file.js";
5
14
  const router = new Hono();
6
15
  router.post("/", async (ctx) => {
7
16
  const basePath = ctx.get("basePath") ?? process.cwd();
@@ -1 +1 @@
1
- {"version":3,"file":"open.js","sources":["../../../src/server/routes/open.ts"],"sourcesContent":["import { resolve } from \"node:path\";\nimport { Hono } from \"hono\";\nimport launchEditor from \"launch-editor\";\nimport { logger } from \"../logger.ts\";\nimport type { HonoEnv } from \"../types/index.ts\";\n\nconst router = new Hono<HonoEnv>();\n\n// ASK: Will this still be used in a desktop app? And if so, do we still have a base path and cwd?\nrouter.post(\"/\", async ctx => {\n const basePath = ctx.get(\"basePath\") ?? process.cwd();\n\n const requestBody = await ctx.req.text();\n const targetPath = resolve(basePath, requestBody);\n logger.debug(`Launching editor for ${targetPath}`);\n launchEditor(\n // filename:line:column\n // both line and column are optional\n targetPath,\n // callback if failed to launch (optional)\n (fileName, errorMsg) => {\n logger.error(`Failed to launch editor for ${fileName}: ${errorMsg}`);\n },\n );\n return ctx.body(null, 204);\n});\n\nexport default router;\n"],"names":[],"mappings":";;;;AAMA,MAAM,SAAS,IAAI,KAAA;AAGnB,OAAO,KAAK,KAAK,OAAM,QAAO;AAC5B,QAAM,WAAW,IAAI,IAAI,UAAU,KAAK,QAAQ,IAAA;AAEhD,QAAM,cAAc,MAAM,IAAI,IAAI,KAAA;AAClC,QAAM,aAAa,QAAQ,UAAU,WAAW;AAChD,SAAO,MAAM,wBAAwB,UAAU,EAAE;AACjD;AAAA;AAAA;AAAA,IAGE;AAAA;AAAA,IAEA,CAAC,UAAU,aAAa;AACtB,aAAO,MAAM,+BAA+B,QAAQ,KAAK,QAAQ,EAAE;AAAA,IACrE;AAAA,EAAA;AAEF,SAAO,IAAI,KAAK,MAAM,GAAG;AAC3B,CAAC;"}
1
+ {"version":3,"file":"open.js","sources":["../../../src/server/routes/open.ts"],"sourcesContent":["import { resolve } from \"node:path\";\nimport { Hono } from \"hono\";\nimport launchEditor from \"launch-editor\";\nimport { logger } from \"../logger.ts\";\nimport type { HonoEnv } from \"../types/index.ts\";\n\nconst router = new Hono<HonoEnv>();\n\n// ASK: Will this still be used in a desktop app? And if so, do we still have a base path and cwd?\nrouter.post(\"/\", async ctx => {\n const basePath = ctx.get(\"basePath\") ?? process.cwd();\n\n const requestBody = await ctx.req.text();\n const targetPath = resolve(basePath, requestBody);\n logger.debug(`Launching editor for ${targetPath}`);\n launchEditor(\n // filename:line:column\n // both line and column are optional\n targetPath,\n // callback if failed to launch (optional)\n (fileName, errorMsg) => {\n logger.error(`Failed to launch editor for ${fileName}: ${errorMsg}`);\n },\n );\n return ctx.body(null, 204);\n});\n\nexport default router;\n"],"names":[],"mappings":";;;;;;;;;;;;;AAMA,MAAM,SAAS,IAAI,KAAA;AAGnB,OAAO,KAAK,KAAK,OAAM,QAAO;AAC5B,QAAM,WAAW,IAAI,IAAI,UAAU,KAAK,QAAQ,IAAA;AAEhD,QAAM,cAAc,MAAM,IAAI,IAAI,KAAA;AAClC,QAAM,aAAa,QAAQ,UAAU,WAAW;AAChD,SAAO,MAAM,wBAAwB,UAAU,EAAE;AACjD;AAAA;AAAA;AAAA,IAGE;AAAA;AAAA,IAEA,CAAC,UAAU,aAAa;AACtB,aAAO,MAAM,+BAA+B,QAAQ,KAAK,QAAQ,EAAE;AAAA,IACrE;AAAA,EAAA;AAEF,SAAO,IAAI,KAAK,MAAM,GAAG;AAC3B,CAAC;"}
@@ -1,6 +1,15 @@
1
+ ;
2
+ !function() {
3
+ try {
4
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
5
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "faef59ab-afce-40e0-b027-ea31b42dfa6e", e._sentryDebugIdIdentifier = "sentry-dbid-faef59ab-afce-40e0-b027-ea31b42dfa6e");
6
+ } catch (e2) {
7
+ }
8
+ }();
1
9
  import { isDebugEnabled, logger } from "../../logger.js";
2
10
  import { isErrorEvent } from "../../parser/helpers.js";
3
11
  import "uuidv7";
12
+ import "../../../_virtual/_sentry-release-injection-file.js";
4
13
  function logIncomingEvent(container) {
5
14
  if (!isDebugEnabled()) return;
6
15
  const contentType = container.getContentType();
@@ -1 +1 @@
1
- {"version":3,"file":"debugLogging.js","sources":["../../../../src/server/routes/stream/debugLogging.ts"],"sourcesContent":["import { isDebugEnabled, logger } from \"../../logger.ts\";\nimport { type ParsedEnvelope, type SentryErrorEvent, type SentryEvent, isErrorEvent } from \"../../parser/index.ts\";\nimport type { EventContainer } from \"../../utils/index.ts\";\n\n/**\n * Logs incoming event details when debug mode is enabled\n * Uses the container's parsed data if available\n */\nexport function logIncomingEvent(container: EventContainer): void {\n if (!isDebugEnabled()) return;\n\n const contentType = container.getContentType();\n\n if (contentType === \"application/x-sentry-envelope\") {\n const parsedEnvelope = container.getParsedEnvelope();\n\n if (!parsedEnvelope) {\n // Still log something useful even if parsing failed\n const data = container.getData();\n const size = data.length;\n // Only show first line of envelope header for safety (should be JSON metadata, not user data)\n const firstNewline = data.indexOf(\"\\n\");\n const headerPreview =\n firstNewline > 0 && firstNewline < 200\n ? data.toString(\"utf-8\", 0, firstNewline).replace(/\\n/g, \"\\\\n\")\n : \"header not found\";\n logger.debug(`→ envelope (parse error, ${size} bytes) | ${headerPreview}`);\n return;\n }\n\n // Build complete log message with all details\n let logMessage = `→ ${formatEnvelopeMetadata(parsedEnvelope.envelope)}`;\n\n // Add error event details to the same log message\n for (const item of parsedEnvelope.envelope[1]) {\n if (isErrorEvent(item[1] as SentryEvent)) {\n logMessage += `\\n └ ${formatErrorDetails(item[1] as SentryErrorEvent)}`;\n }\n }\n\n // Single atomic log statement\n logger.debug(logMessage);\n } else {\n logger.debug(`→ ${contentType || \"unknown\"}`);\n }\n}\n\n/**\n * Logs outgoing event to client when debug mode is enabled\n * Uses the container's already-parsed data if available\n */\nexport function logOutgoingEvent(container: EventContainer, clientId: string): void {\n if (!isDebugEnabled()) return;\n\n // Use the container's event type string (which uses cached parsed data)\n const typeInfo = container.getEventTypesString();\n\n // If it's an envelope that failed to parse, add size info\n if (typeInfo === \"envelope\" && container.getContentType() === \"application/x-sentry-envelope\") {\n const size = container.getData().length;\n logger.debug(`← envelope (${size} bytes) to ${clientId}`);\n } else {\n logger.debug(`← ${typeInfo} to ${clientId}`);\n }\n}\n\n/**\n * Formats envelope metadata for logging\n */\nfunction formatEnvelopeMetadata(envelope: ParsedEnvelope[\"envelope\"]): string {\n const eventTypes = envelope[1].map(item => item[0].type).filter(Boolean);\n\n const typePrefix = eventTypes.length > 0 ? eventTypes.join(\"+\") : \"envelope\";\n const sdk = envelope[0].sdk?.name || \"unknown\";\n const eventId = envelope[0].event_id;\n\n return `${typePrefix} | sdk: ${sdk}${eventId ? ` | id: ${eventId}` : \"\"}`;\n}\n\n/**\n * Formats error event details for logging\n */\nfunction formatErrorDetails(payload: SentryErrorEvent): string {\n const platform = payload.platform || \"unknown\";\n const environment = payload.environment || \"unknown\";\n const level = \"level\" in payload ? payload.level : \"error\";\n\n const errorMsg = payload.exception?.values?.[0]?.value || String(payload.message) || \"No error message\";\n\n const errorType = payload.exception?.values?.[0]?.type || \"Error\";\n\n const truncatedMsg = errorMsg.substring(0, 80) + (errorMsg.length > 80 ? \"...\" : \"\");\n\n return `${level} [${platform}/${environment}] ${errorType}: ${truncatedMsg}`;\n}\n"],"names":[],"mappings":";;;AAQO,SAAS,iBAAiB,WAAiC;AAChE,MAAI,CAAC,iBAAkB;AAEvB,QAAM,cAAc,UAAU,eAAA;AAE9B,MAAI,gBAAgB,iCAAiC;AACnD,UAAM,iBAAiB,UAAU,kBAAA;AAEjC,QAAI,CAAC,gBAAgB;AAEnB,YAAM,OAAO,UAAU,QAAA;AACvB,YAAM,OAAO,KAAK;AAElB,YAAM,eAAe,KAAK,QAAQ,IAAI;AACtC,YAAM,gBACJ,eAAe,KAAK,eAAe,MAC/B,KAAK,SAAS,SAAS,GAAG,YAAY,EAAE,QAAQ,OAAO,KAAK,IAC5D;AACN,aAAO,MAAM,4BAA4B,IAAI,aAAa,aAAa,EAAE;AACzE;AAAA,IACF;AAGA,QAAI,aAAa,KAAK,uBAAuB,eAAe,QAAQ,CAAC;AAGrE,eAAW,QAAQ,eAAe,SAAS,CAAC,GAAG;AAC7C,UAAI,aAAa,KAAK,CAAC,CAAgB,GAAG;AACxC,sBAAc;AAAA,MAAS,mBAAmB,KAAK,CAAC,CAAqB,CAAC;AAAA,MACxE;AAAA,IACF;AAGA,WAAO,MAAM,UAAU;AAAA,EACzB,OAAO;AACL,WAAO,MAAM,KAAK,eAAe,SAAS,EAAE;AAAA,EAC9C;AACF;AAMO,SAAS,iBAAiB,WAA2B,UAAwB;AAClF,MAAI,CAAC,iBAAkB;AAGvB,QAAM,WAAW,UAAU,oBAAA;AAG3B,MAAI,aAAa,cAAc,UAAU,eAAA,MAAqB,iCAAiC;AAC7F,UAAM,OAAO,UAAU,QAAA,EAAU;AACjC,WAAO,MAAM,eAAe,IAAI,cAAc,QAAQ,EAAE;AAAA,EAC1D,OAAO;AACL,WAAO,MAAM,KAAK,QAAQ,OAAO,QAAQ,EAAE;AAAA,EAC7C;AACF;AAKA,SAAS,uBAAuB,UAA8C;AAC5E,QAAM,aAAa,SAAS,CAAC,EAAE,IAAI,CAAA,SAAQ,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,OAAO;AAEvE,QAAM,aAAa,WAAW,SAAS,IAAI,WAAW,KAAK,GAAG,IAAI;AAClE,QAAM,MAAM,SAAS,CAAC,EAAE,KAAK,QAAQ;AACrC,QAAM,UAAU,SAAS,CAAC,EAAE;AAE5B,SAAO,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,UAAU,OAAO,KAAK,EAAE;AACzE;AAKA,SAAS,mBAAmB,SAAmC;AAC7D,QAAM,WAAW,QAAQ,YAAY;AACrC,QAAM,cAAc,QAAQ,eAAe;AAC3C,QAAM,QAAQ,WAAW,UAAU,QAAQ,QAAQ;AAEnD,QAAM,WAAW,QAAQ,WAAW,SAAS,CAAC,GAAG,SAAS,OAAO,QAAQ,OAAO,KAAK;AAErF,QAAM,YAAY,QAAQ,WAAW,SAAS,CAAC,GAAG,QAAQ;AAE1D,QAAM,eAAe,SAAS,UAAU,GAAG,EAAE,KAAK,SAAS,SAAS,KAAK,QAAQ;AAEjF,SAAO,GAAG,KAAK,KAAK,QAAQ,IAAI,WAAW,KAAK,SAAS,KAAK,YAAY;AAC5E;"}
1
+ {"version":3,"file":"debugLogging.js","sources":["../../../../src/server/routes/stream/debugLogging.ts"],"sourcesContent":["import { isDebugEnabled, logger } from \"../../logger.ts\";\nimport { type ParsedEnvelope, type SentryErrorEvent, type SentryEvent, isErrorEvent } from \"../../parser/index.ts\";\nimport type { EventContainer } from \"../../utils/index.ts\";\n\n/**\n * Logs incoming event details when debug mode is enabled\n * Uses the container's parsed data if available\n */\nexport function logIncomingEvent(container: EventContainer): void {\n if (!isDebugEnabled()) return;\n\n const contentType = container.getContentType();\n\n if (contentType === \"application/x-sentry-envelope\") {\n const parsedEnvelope = container.getParsedEnvelope();\n\n if (!parsedEnvelope) {\n // Still log something useful even if parsing failed\n const data = container.getData();\n const size = data.length;\n // Only show first line of envelope header for safety (should be JSON metadata, not user data)\n const firstNewline = data.indexOf(\"\\n\");\n const headerPreview =\n firstNewline > 0 && firstNewline < 200\n ? data.toString(\"utf-8\", 0, firstNewline).replace(/\\n/g, \"\\\\n\")\n : \"header not found\";\n logger.debug(`→ envelope (parse error, ${size} bytes) | ${headerPreview}`);\n return;\n }\n\n // Build complete log message with all details\n let logMessage = `→ ${formatEnvelopeMetadata(parsedEnvelope.envelope)}`;\n\n // Add error event details to the same log message\n for (const item of parsedEnvelope.envelope[1]) {\n if (isErrorEvent(item[1] as SentryEvent)) {\n logMessage += `\\n └ ${formatErrorDetails(item[1] as SentryErrorEvent)}`;\n }\n }\n\n // Single atomic log statement\n logger.debug(logMessage);\n } else {\n logger.debug(`→ ${contentType || \"unknown\"}`);\n }\n}\n\n/**\n * Logs outgoing event to client when debug mode is enabled\n * Uses the container's already-parsed data if available\n */\nexport function logOutgoingEvent(container: EventContainer, clientId: string): void {\n if (!isDebugEnabled()) return;\n\n // Use the container's event type string (which uses cached parsed data)\n const typeInfo = container.getEventTypesString();\n\n // If it's an envelope that failed to parse, add size info\n if (typeInfo === \"envelope\" && container.getContentType() === \"application/x-sentry-envelope\") {\n const size = container.getData().length;\n logger.debug(`← envelope (${size} bytes) to ${clientId}`);\n } else {\n logger.debug(`← ${typeInfo} to ${clientId}`);\n }\n}\n\n/**\n * Formats envelope metadata for logging\n */\nfunction formatEnvelopeMetadata(envelope: ParsedEnvelope[\"envelope\"]): string {\n const eventTypes = envelope[1].map(item => item[0].type).filter(Boolean);\n\n const typePrefix = eventTypes.length > 0 ? eventTypes.join(\"+\") : \"envelope\";\n const sdk = envelope[0].sdk?.name || \"unknown\";\n const eventId = envelope[0].event_id;\n\n return `${typePrefix} | sdk: ${sdk}${eventId ? ` | id: ${eventId}` : \"\"}`;\n}\n\n/**\n * Formats error event details for logging\n */\nfunction formatErrorDetails(payload: SentryErrorEvent): string {\n const platform = payload.platform || \"unknown\";\n const environment = payload.environment || \"unknown\";\n const level = \"level\" in payload ? payload.level : \"error\";\n\n const errorMsg = payload.exception?.values?.[0]?.value || String(payload.message) || \"No error message\";\n\n const errorType = payload.exception?.values?.[0]?.type || \"Error\";\n\n const truncatedMsg = errorMsg.substring(0, 80) + (errorMsg.length > 80 ? \"...\" : \"\");\n\n return `${level} [${platform}/${environment}] ${errorType}: ${truncatedMsg}`;\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAQO,SAAS,iBAAiB,WAAiC;AAChE,MAAI,CAAC,iBAAkB;AAEvB,QAAM,cAAc,UAAU,eAAA;AAE9B,MAAI,gBAAgB,iCAAiC;AACnD,UAAM,iBAAiB,UAAU,kBAAA;AAEjC,QAAI,CAAC,gBAAgB;AAEnB,YAAM,OAAO,UAAU,QAAA;AACvB,YAAM,OAAO,KAAK;AAElB,YAAM,eAAe,KAAK,QAAQ,IAAI;AACtC,YAAM,gBACJ,eAAe,KAAK,eAAe,MAC/B,KAAK,SAAS,SAAS,GAAG,YAAY,EAAE,QAAQ,OAAO,KAAK,IAC5D;AACN,aAAO,MAAM,4BAA4B,IAAI,aAAa,aAAa,EAAE;AACzE;AAAA,IACF;AAGA,QAAI,aAAa,KAAK,uBAAuB,eAAe,QAAQ,CAAC;AAGrE,eAAW,QAAQ,eAAe,SAAS,CAAC,GAAG;AAC7C,UAAI,aAAa,KAAK,CAAC,CAAgB,GAAG;AACxC,sBAAc;AAAA,MAAS,mBAAmB,KAAK,CAAC,CAAqB,CAAC;AAAA,MACxE;AAAA,IACF;AAGA,WAAO,MAAM,UAAU;AAAA,EACzB,OAAO;AACL,WAAO,MAAM,KAAK,eAAe,SAAS,EAAE;AAAA,EAC9C;AACF;AAMO,SAAS,iBAAiB,WAA2B,UAAwB;AAClF,MAAI,CAAC,iBAAkB;AAGvB,QAAM,WAAW,UAAU,oBAAA;AAG3B,MAAI,aAAa,cAAc,UAAU,eAAA,MAAqB,iCAAiC;AAC7F,UAAM,OAAO,UAAU,QAAA,EAAU;AACjC,WAAO,MAAM,eAAe,IAAI,cAAc,QAAQ,EAAE;AAAA,EAC1D,OAAO;AACL,WAAO,MAAM,KAAK,QAAQ,OAAO,QAAQ,EAAE;AAAA,EAC7C;AACF;AAKA,SAAS,uBAAuB,UAA8C;AAC5E,QAAM,aAAa,SAAS,CAAC,EAAE,IAAI,CAAA,SAAQ,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,OAAO;AAEvE,QAAM,aAAa,WAAW,SAAS,IAAI,WAAW,KAAK,GAAG,IAAI;AAClE,QAAM,MAAM,SAAS,CAAC,EAAE,KAAK,QAAQ;AACrC,QAAM,UAAU,SAAS,CAAC,EAAE;AAE5B,SAAO,GAAG,UAAU,WAAW,GAAG,GAAG,UAAU,UAAU,OAAO,KAAK,EAAE;AACzE;AAKA,SAAS,mBAAmB,SAAmC;AAC7D,QAAM,WAAW,QAAQ,YAAY;AACrC,QAAM,cAAc,QAAQ,eAAe;AAC3C,QAAM,QAAQ,WAAW,UAAU,QAAQ,QAAQ;AAEnD,QAAM,WAAW,QAAQ,WAAW,SAAS,CAAC,GAAG,SAAS,OAAO,QAAQ,OAAO,KAAK;AAErF,QAAM,YAAY,QAAQ,WAAW,SAAS,CAAC,GAAG,QAAQ;AAE1D,QAAM,eAAe,SAAS,UAAU,GAAG,EAAE,KAAK,SAAS,SAAS,KAAK,QAAQ;AAEjF,SAAO,GAAG,KAAK,KAAK,QAAQ,IAAI,WAAW,KAAK,SAAS,KAAK,YAAY;AAC5E;"}
@@ -1,3 +1,11 @@
1
+ ;
2
+ !function() {
3
+ try {
4
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
5
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "30c2a21d-0350-4802-a8cb-86dc2894fef5", e._sentryDebugIdIdentifier = "sentry-dbid-30c2a21d-0350-4802-a8cb-86dc2894fef5");
6
+ } catch (e2) {
7
+ }
8
+ }();
1
9
  import { createWriteStream } from "node:fs";
2
10
  import { decompressBody, pushToSpotlightBuffer } from "../../sdk.js";
3
11
  import { SENTRY_CONTENT_TYPE } from "../../../shared/constants.js";
@@ -6,8 +14,12 @@ import { logger } from "../../logger.js";
6
14
  import { getBuffer } from "../../utils/getBuffer.js";
7
15
  import "../../parser/helpers.js";
8
16
  import "uuidv7";
17
+ import "../../../_virtual/_sentry-release-injection-file.js";
9
18
  import "node:http";
10
19
  import "@sentry/node";
20
+ import "node:dns/promises";
21
+ import "node:net";
22
+ import "node:os";
11
23
  import { logOutgoingEvent, logIncomingEvent } from "./debugLogging.js";
12
24
  import { streamSSE } from "./streaming.js";
13
25
  import { parseBrowserFromUserAgent } from "./userAgent.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/server/routes/stream/index.ts"],"sourcesContent":["import { createWriteStream } from \"node:fs\";\nimport { decompressBody, pushToSpotlightBuffer } from \"@spotlight/server/sdk.ts\";\nimport { SENTRY_CONTENT_TYPE } from \"@spotlight/shared/constants.ts\";\nimport { Hono } from \"hono\";\nimport { logger } from \"../../logger.ts\";\nimport type { HonoEnv } from \"../../types/env.ts\";\nimport { getBuffer } from \"../../utils/index.ts\";\nimport { logIncomingEvent, logOutgoingEvent } from \"./debugLogging.ts\";\nimport { streamSSE } from \"./streaming.ts\";\nimport { parseBrowserFromUserAgent } from \"./userAgent.ts\";\n\nconst router = new Hono<HonoEnv>()\n .get(\"/stream\", ctx => {\n const buffer = getBuffer();\n\n const useBase64 = ctx.req.query(\"base64\") != null;\n const base64Indicator = useBase64 ? \";base64\" : \"\";\n\n // Capture client information for debug logging\n let clientId = ctx.req.query(\"client\");\n if (!clientId) {\n // Fallback to parsing User-Agent if no client param\n const userAgent = ctx.req.header(\"User-Agent\") || \"unknown\";\n clientId = parseBrowserFromUserAgent(userAgent);\n }\n // Sanitize to prevent log injection - keep only safe printable characters\n // Allow alphanumeric, spaces, dots, dashes, underscores, slashes, parentheses\n clientId = clientId.replace(/[^\\w\\s.\\-/()]/g, \"\");\n // Ensure we always have a non-empty clientId\n if (!clientId) clientId = \"unknown\";\n\n return streamSSE(ctx, async stream => {\n // Check for Last-Event-ID header to support reconnection\n const lastEventId = ctx.req.header(\"Last-Event-ID\");\n\n // Subscribe to events, optionally starting from after the lastEventId\n const sub = buffer.subscribe(container => {\n logOutgoingEvent(container, clientId);\n\n const parsedEnvelope = container.getParsedEnvelope();\n if (parsedEnvelope) {\n stream.writeSSE({\n id: parsedEnvelope.envelope[0].__spotlight_envelope_id.toString(),\n event: `${container.getContentType()}${base64Indicator}`,\n data: JSON.stringify(parsedEnvelope.envelope),\n });\n }\n }, lastEventId);\n\n stream.onAbort(() => {\n buffer.unsubscribe(sub);\n });\n });\n })\n .get(\"/envelope/:id\", ctx => {\n const buffer = getBuffer();\n\n const envelopeId = ctx.req.param(\"id\");\n const container = buffer.read({ envelopeId });\n\n if (container.length === 0) {\n return ctx.notFound();\n }\n\n return ctx.body(new Uint8Array(container[0].getData()), 200, {\n \"Content-Type\": container[0].getContentType(),\n \"Cache-Control\": \"no-cache\",\n \"Content-Disposition\": `attachment; filename=\"${envelopeId}.bin\"`,\n Connection: \"keep-alive\",\n });\n })\n .on(\"POST\", [\"/stream\", \"/api/:id/envelope\"], async ctx => {\n let contentType = ctx.req.header(\"content-type\")?.split(\";\")[0].toLocaleLowerCase();\n if (ctx.req.query(\"sentry_client\")?.startsWith(\"sentry.javascript.browser\") && ctx.req.header(\"Origin\")) {\n // This is a correction we make as Sentry Browser SDK may send messages with text/plain to avoid CORS issues\n contentType = SENTRY_CONTENT_TYPE;\n }\n\n // manually decompress body to use it below without another decompression\n const body = decompressBody(Buffer.from(await ctx.req.arrayBuffer()), ctx.req.header(\"Content-Encoding\"));\n\n const container = pushToSpotlightBuffer({\n body,\n spotlightBuffer: getBuffer(),\n contentType,\n userAgent: ctx.req.header(\"User-Agent\"),\n });\n\n if (container) {\n // Log incoming event details when debug is enabled\n logIncomingEvent(container);\n } else {\n logger.warn(\"No content type, skipping payload...\");\n }\n\n const incomingPayload = ctx.get(\"incomingPayload\");\n\n if (process.env.SPOTLIGHT_CAPTURE || incomingPayload) {\n const contentType = container?.getContentType();\n const timestamp = BigInt(Date.now()) * 1_000_000n + (process.hrtime.bigint() % 1_000_000n);\n const filename = `${contentType?.replace(/[^a-z0-9]/gi, \"_\") || \"no_content_type\"}-${timestamp}.txt`;\n\n if (incomingPayload) {\n incomingPayload(body.toString(\"binary\"));\n } else {\n const stream = createWriteStream(filename);\n stream.on(\"error\", err => {\n logger.error(`Failed to save data to ${filename}: ${err}`);\n stream.destroy();\n });\n stream.end(body, () => {\n logger.info(`🗃️ Saved data to ${filename}`);\n });\n }\n }\n\n // 204 would be more appropriate but returning 200 to match what /envelope returns\n return ctx.body(null, 200, {\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n });\n });\n\nexport default router;\n"],"names":["contentType"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/server/routes/stream/index.ts"],"sourcesContent":["import { createWriteStream } from \"node:fs\";\nimport { decompressBody, pushToSpotlightBuffer } from \"../../sdk.ts\";\nimport { SENTRY_CONTENT_TYPE } from \"../../../shared/constants.ts\";\nimport { Hono } from \"hono\";\nimport { logger } from \"../../logger.ts\";\nimport type { HonoEnv } from \"../../types/env.ts\";\nimport { getBuffer } from \"../../utils/index.ts\";\nimport { logIncomingEvent, logOutgoingEvent } from \"./debugLogging.ts\";\nimport { streamSSE } from \"./streaming.ts\";\nimport { parseBrowserFromUserAgent } from \"./userAgent.ts\";\n\nconst router = new Hono<HonoEnv>()\n .get(\"/stream\", ctx => {\n const buffer = getBuffer();\n\n const useBase64 = ctx.req.query(\"base64\") != null;\n const base64Indicator = useBase64 ? \";base64\" : \"\";\n\n // Capture client information for debug logging\n let clientId = ctx.req.query(\"client\");\n if (!clientId) {\n // Fallback to parsing User-Agent if no client param\n const userAgent = ctx.req.header(\"User-Agent\") || \"unknown\";\n clientId = parseBrowserFromUserAgent(userAgent);\n }\n // Sanitize to prevent log injection - keep only safe printable characters\n // Allow alphanumeric, spaces, dots, dashes, underscores, slashes, parentheses\n clientId = clientId.replace(/[^\\w\\s.\\-/()]/g, \"\");\n // Ensure we always have a non-empty clientId\n if (!clientId) clientId = \"unknown\";\n\n return streamSSE(ctx, async stream => {\n // Check for Last-Event-ID header to support reconnection\n const lastEventId = ctx.req.header(\"Last-Event-ID\");\n\n // Subscribe to events, optionally starting from after the lastEventId\n const sub = buffer.subscribe(container => {\n logOutgoingEvent(container, clientId);\n\n const parsedEnvelope = container.getParsedEnvelope();\n if (parsedEnvelope) {\n stream.writeSSE({\n id: parsedEnvelope.envelope[0].__spotlight_envelope_id.toString(),\n event: `${container.getContentType()}${base64Indicator}`,\n data: JSON.stringify(parsedEnvelope.envelope),\n });\n }\n }, lastEventId);\n\n stream.onAbort(() => {\n buffer.unsubscribe(sub);\n });\n });\n })\n .get(\"/envelope/:id\", ctx => {\n const buffer = getBuffer();\n\n const envelopeId = ctx.req.param(\"id\");\n const container = buffer.read({ envelopeId });\n\n if (container.length === 0) {\n return ctx.notFound();\n }\n\n return ctx.body(new Uint8Array(container[0].getData()), 200, {\n \"Content-Type\": container[0].getContentType(),\n \"Cache-Control\": \"no-cache\",\n \"Content-Disposition\": `attachment; filename=\"${envelopeId}.bin\"`,\n Connection: \"keep-alive\",\n });\n })\n .on(\"POST\", [\"/stream\", \"/api/:id/envelope\"], async ctx => {\n let contentType = ctx.req.header(\"content-type\")?.split(\";\")[0].toLocaleLowerCase();\n if (ctx.req.query(\"sentry_client\")?.startsWith(\"sentry.javascript.browser\") && ctx.req.header(\"Origin\")) {\n // This is a correction we make as Sentry Browser SDK may send messages with text/plain to avoid CORS issues\n contentType = SENTRY_CONTENT_TYPE;\n }\n\n // manually decompress body to use it below without another decompression\n const body = decompressBody(Buffer.from(await ctx.req.arrayBuffer()), ctx.req.header(\"Content-Encoding\"));\n\n const container = pushToSpotlightBuffer({\n body,\n spotlightBuffer: getBuffer(),\n contentType,\n userAgent: ctx.req.header(\"User-Agent\"),\n });\n\n if (container) {\n // Log incoming event details when debug is enabled\n logIncomingEvent(container);\n } else {\n logger.warn(\"No content type, skipping payload...\");\n }\n\n const incomingPayload = ctx.get(\"incomingPayload\");\n\n if (process.env.SPOTLIGHT_CAPTURE || incomingPayload) {\n const contentType = container?.getContentType();\n const timestamp = BigInt(Date.now()) * 1_000_000n + (process.hrtime.bigint() % 1_000_000n);\n const filename = `${contentType?.replace(/[^a-z0-9]/gi, \"_\") || \"no_content_type\"}-${timestamp}.txt`;\n\n if (incomingPayload) {\n incomingPayload(body.toString(\"binary\"));\n } else {\n const stream = createWriteStream(filename);\n stream.on(\"error\", err => {\n logger.error(`Failed to save data to ${filename}: ${err}`);\n stream.destroy();\n });\n stream.end(body, () => {\n logger.info(`🗃️ Saved data to ${filename}`);\n });\n }\n }\n\n // 204 would be more appropriate but returning 200 to match what /envelope returns\n return ctx.body(null, 200, {\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n });\n });\n\nexport default router;\n"],"names":["contentType"],"mappings":"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"}
@@ -1,5 +1,14 @@
1
+ ;
2
+ !function() {
3
+ try {
4
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
5
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "fe8af0d5-27a9-4341-90d6-e57e107c3c7d", e._sentryDebugIdIdentifier = "sentry-dbid-fe8af0d5-27a9-4341-90d6-e57e107c3c7d");
6
+ } catch (e2) {
7
+ }
8
+ }();
1
9
  import { captureException } from "@sentry/node";
2
10
  import { SSEStreamingApi } from "../../../node_modules/.pnpm/hono@4.10.3/node_modules/hono/dist/helper/streaming/sse.js";
11
+ import "../../../_virtual/_sentry-release-injection-file.js";
3
12
  const run = async (stream, cb, onError) => {
4
13
  try {
5
14
  await cb(stream);
@@ -1 +1 @@
1
- {"version":3,"file":"streaming.js","sources":["../../../../src/server/routes/stream/streaming.ts"],"sourcesContent":["import { captureException } from \"@sentry/node\";\nimport type { Context } from \"hono\";\nimport { SSEStreamingApi } from \"hono/streaming\";\n\nconst run = async (\n stream: SSEStreamingApi,\n cb: (stream: SSEStreamingApi) => Promise<void>,\n onError?: (e: Error, stream: SSEStreamingApi) => Promise<void>,\n): Promise<void> => {\n try {\n await cb(stream);\n } catch (e) {\n if (e instanceof Error && onError) {\n await onError(e, stream);\n\n await stream.writeSSE({\n event: \"error\",\n data: e.message,\n });\n } else {\n captureException(e, { extra: { context: \"Unhandled error in SSE stream\" } });\n }\n }\n};\n\nexport const streamSSE = (\n c: Context,\n cb: (stream: SSEStreamingApi) => Promise<void>,\n onError?: (e: Error, stream: SSEStreamingApi) => Promise<void>,\n): Response => {\n const { readable, writable } = new TransformStream();\n const stream = new SSEStreamingApi(writable, readable);\n\n c.header(\"Transfer-Encoding\", \"chunked\");\n c.header(\"Content-Type\", \"text/event-stream\");\n c.header(\"Cache-Control\", \"no-cache\");\n c.header(\"Connection\", \"keep-alive\");\n\n // Send something in the body to trigger the `open` event\n // This is mostly for Firefox -- see #376\n stream.writeln(\"\");\n\n run(stream, cb, onError);\n\n return c.newResponse(stream.responseReadable);\n};\n"],"names":[],"mappings":";;AAIA,MAAM,MAAM,OACV,QACA,IACA,YACkB;AAClB,MAAI;AACF,UAAM,GAAG,MAAM;AAAA,EACjB,SAAS,GAAG;AAQH;AACL,uBAAiB,GAAG,EAAE,OAAO,EAAE,SAAS,gCAAA,GAAmC;AAAA,IAC7E;AAAA,EACF;AACF;AAEO,MAAM,YAAY,CACvB,GACA,IACA,YACa;AACb,QAAM,EAAE,UAAU,SAAA,IAAa,IAAI,gBAAA;AACnC,QAAM,SAAS,IAAI,gBAAgB,UAAU,QAAQ;AAErD,IAAE,OAAO,qBAAqB,SAAS;AACvC,IAAE,OAAO,gBAAgB,mBAAmB;AAC5C,IAAE,OAAO,iBAAiB,UAAU;AACpC,IAAE,OAAO,cAAc,YAAY;AAInC,SAAO,QAAQ,EAAE;AAEjB,MAAI,QAAQ,EAAW;AAEvB,SAAO,EAAE,YAAY,OAAO,gBAAgB;AAC9C;"}
1
+ {"version":3,"file":"streaming.js","sources":["../../../../src/server/routes/stream/streaming.ts"],"sourcesContent":["import { captureException } from \"@sentry/node\";\nimport type { Context } from \"hono\";\nimport { SSEStreamingApi } from \"hono/streaming\";\n\nconst run = async (\n stream: SSEStreamingApi,\n cb: (stream: SSEStreamingApi) => Promise<void>,\n onError?: (e: Error, stream: SSEStreamingApi) => Promise<void>,\n): Promise<void> => {\n try {\n await cb(stream);\n } catch (e) {\n if (e instanceof Error && onError) {\n await onError(e, stream);\n\n await stream.writeSSE({\n event: \"error\",\n data: e.message,\n });\n } else {\n captureException(e, { extra: { context: \"Unhandled error in SSE stream\" } });\n }\n }\n};\n\nexport const streamSSE = (\n c: Context,\n cb: (stream: SSEStreamingApi) => Promise<void>,\n onError?: (e: Error, stream: SSEStreamingApi) => Promise<void>,\n): Response => {\n const { readable, writable } = new TransformStream();\n const stream = new SSEStreamingApi(writable, readable);\n\n c.header(\"Transfer-Encoding\", \"chunked\");\n c.header(\"Content-Type\", \"text/event-stream\");\n c.header(\"Cache-Control\", \"no-cache\");\n c.header(\"Connection\", \"keep-alive\");\n\n // Send something in the body to trigger the `open` event\n // This is mostly for Firefox -- see #376\n stream.writeln(\"\");\n\n run(stream, cb, onError);\n\n return c.newResponse(stream.responseReadable);\n};\n"],"names":[],"mappings":";;;;;;;;;;;AAIA,MAAM,MAAM,OACV,QACA,IACA,YACkB;AAClB,MAAI;AACF,UAAM,GAAG,MAAM;AAAA,EACjB,SAAS,GAAG;AAQH;AACL,uBAAiB,GAAG,EAAE,OAAO,EAAE,SAAS,gCAAA,GAAmC;AAAA,IAC7E;AAAA,EACF;AACF;AAEO,MAAM,YAAY,CACvB,GACA,IACA,YACa;AACb,QAAM,EAAE,UAAU,SAAA,IAAa,IAAI,gBAAA;AACnC,QAAM,SAAS,IAAI,gBAAgB,UAAU,QAAQ;AAErD,IAAE,OAAO,qBAAqB,SAAS;AACvC,IAAE,OAAO,gBAAgB,mBAAmB;AAC5C,IAAE,OAAO,iBAAiB,UAAU;AACpC,IAAE,OAAO,cAAc,YAAY;AAInC,SAAO,QAAQ,EAAE;AAEjB,MAAI,QAAQ,EAAW;AAEvB,SAAO,EAAE,YAAY,OAAO,gBAAgB;AAC9C;"}
@@ -1,3 +1,12 @@
1
+ ;
2
+ !function() {
3
+ try {
4
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
5
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "973355d8-c9ea-4dc7-b5bb-32f849e751bc", e._sentryDebugIdIdentifier = "sentry-dbid-973355d8-c9ea-4dc7-b5bb-32f849e751bc");
6
+ } catch (e2) {
7
+ }
8
+ }();
9
+ import "../../../_virtual/_sentry-release-injection-file.js";
1
10
  function parseBrowserFromUserAgent(userAgent) {
2
11
  if (!userAgent) return "unknown";
3
12
  if (userAgent.includes("Chrome/") && !userAgent.includes("Edg/")) {
@@ -1 +1 @@
1
- {"version":3,"file":"userAgent.js","sources":["../../../../src/server/routes/stream/userAgent.ts"],"sourcesContent":["/**\n * Extracts browser name and major version from a User-Agent string\n * Returns format like \"Chrome/131\" or \"Firefox/122\"\n */\nexport function parseBrowserFromUserAgent(userAgent: string): string {\n if (!userAgent) return \"unknown\";\n\n // Check for Chrome (but not Edge which also contains Chrome)\n if (userAgent.includes(\"Chrome/\") && !userAgent.includes(\"Edg/\")) {\n const match = userAgent.match(/Chrome\\/([\\d]+)/);\n return match ? `Chrome/${match[1]}` : \"Chrome\";\n }\n\n // Check for Firefox\n if (userAgent.includes(\"Firefox/\")) {\n const match = userAgent.match(/Firefox\\/([\\d]+)/);\n return match ? `Firefox/${match[1]}` : \"Firefox\";\n }\n\n // Check for Safari (but not Chrome which also contains Safari)\n if (userAgent.includes(\"Safari/\") && !userAgent.includes(\"Chrome\")) {\n const match = userAgent.match(/Version\\/([\\d]+)/);\n return match ? `Safari/${match[1]}` : \"Safari\";\n }\n\n // Check for Edge\n if (userAgent.includes(\"Edg/\")) {\n const match = userAgent.match(/Edg\\/([\\d]+)/);\n return match ? `Edge/${match[1]}` : \"Edge\";\n }\n\n // Generic fallback - try to extract first meaningful part\n const match = userAgent.match(/^([^\\/\\s\\(]+)/);\n return match ? match[1] : \"unknown\";\n}\n\n/**\n * Builds a client identifier from browser info and optional hostname\n * Format: clientName/version (metadata)\n * Example: \"ui/Chrome/131 (example.com)\"\n */\nexport function buildClientIdentifier(clientName: string, userAgent?: string, hostname?: string): string {\n let clientId = clientName;\n\n if (userAgent) {\n const browserInfo = parseBrowserFromUserAgent(userAgent);\n if (browserInfo !== \"unknown\") {\n clientId = `${clientName}/${browserInfo}`;\n }\n }\n\n if (hostname && hostname !== \"localhost\") {\n clientId += ` (${hostname})`;\n }\n\n return clientId;\n}\n"],"names":["match"],"mappings":"AAIO,SAAS,0BAA0B,WAA2B;AACnE,MAAI,CAAC,UAAW,QAAO;AAGvB,MAAI,UAAU,SAAS,SAAS,KAAK,CAAC,UAAU,SAAS,MAAM,GAAG;AAChE,UAAMA,SAAQ,UAAU,MAAM,iBAAiB;AAC/C,WAAOA,SAAQ,UAAUA,OAAM,CAAC,CAAC,KAAK;AAAA,EACxC;AAGA,MAAI,UAAU,SAAS,UAAU,GAAG;AAClC,UAAMA,SAAQ,UAAU,MAAM,kBAAkB;AAChD,WAAOA,SAAQ,WAAWA,OAAM,CAAC,CAAC,KAAK;AAAA,EACzC;AAGA,MAAI,UAAU,SAAS,SAAS,KAAK,CAAC,UAAU,SAAS,QAAQ,GAAG;AAClE,UAAMA,SAAQ,UAAU,MAAM,kBAAkB;AAChD,WAAOA,SAAQ,UAAUA,OAAM,CAAC,CAAC,KAAK;AAAA,EACxC;AAGA,MAAI,UAAU,SAAS,MAAM,GAAG;AAC9B,UAAMA,SAAQ,UAAU,MAAM,cAAc;AAC5C,WAAOA,SAAQ,QAAQA,OAAM,CAAC,CAAC,KAAK;AAAA,EACtC;AAGA,QAAM,QAAQ,UAAU,MAAM,eAAe;AAC7C,SAAO,QAAQ,MAAM,CAAC,IAAI;AAC5B;"}
1
+ {"version":3,"file":"userAgent.js","sources":["../../../../src/server/routes/stream/userAgent.ts"],"sourcesContent":["/**\n * Extracts browser name and major version from a User-Agent string\n * Returns format like \"Chrome/131\" or \"Firefox/122\"\n */\nexport function parseBrowserFromUserAgent(userAgent: string): string {\n if (!userAgent) return \"unknown\";\n\n // Check for Chrome (but not Edge which also contains Chrome)\n if (userAgent.includes(\"Chrome/\") && !userAgent.includes(\"Edg/\")) {\n const match = userAgent.match(/Chrome\\/([\\d]+)/);\n return match ? `Chrome/${match[1]}` : \"Chrome\";\n }\n\n // Check for Firefox\n if (userAgent.includes(\"Firefox/\")) {\n const match = userAgent.match(/Firefox\\/([\\d]+)/);\n return match ? `Firefox/${match[1]}` : \"Firefox\";\n }\n\n // Check for Safari (but not Chrome which also contains Safari)\n if (userAgent.includes(\"Safari/\") && !userAgent.includes(\"Chrome\")) {\n const match = userAgent.match(/Version\\/([\\d]+)/);\n return match ? `Safari/${match[1]}` : \"Safari\";\n }\n\n // Check for Edge\n if (userAgent.includes(\"Edg/\")) {\n const match = userAgent.match(/Edg\\/([\\d]+)/);\n return match ? `Edge/${match[1]}` : \"Edge\";\n }\n\n // Generic fallback - try to extract first meaningful part\n const match = userAgent.match(/^([^\\/\\s\\(]+)/);\n return match ? match[1] : \"unknown\";\n}\n\n/**\n * Builds a client identifier from browser info and optional hostname\n * Format: clientName/version (metadata)\n * Example: \"ui/Chrome/131 (example.com)\"\n */\nexport function buildClientIdentifier(clientName: string, userAgent?: string, hostname?: string): string {\n let clientId = clientName;\n\n if (userAgent) {\n const browserInfo = parseBrowserFromUserAgent(userAgent);\n if (browserInfo !== \"unknown\") {\n clientId = `${clientName}/${browserInfo}`;\n }\n }\n\n if (hostname && hostname !== \"localhost\") {\n clientId += ` (${hostname})`;\n }\n\n return clientId;\n}\n"],"names":["match"],"mappings":";;;;;;;;;AAIO,SAAS,0BAA0B,WAA2B;AACnE,MAAI,CAAC,UAAW,QAAO;AAGvB,MAAI,UAAU,SAAS,SAAS,KAAK,CAAC,UAAU,SAAS,MAAM,GAAG;AAChE,UAAMA,SAAQ,UAAU,MAAM,iBAAiB;AAC/C,WAAOA,SAAQ,UAAUA,OAAM,CAAC,CAAC,KAAK;AAAA,EACxC;AAGA,MAAI,UAAU,SAAS,UAAU,GAAG;AAClC,UAAMA,SAAQ,UAAU,MAAM,kBAAkB;AAChD,WAAOA,SAAQ,WAAWA,OAAM,CAAC,CAAC,KAAK;AAAA,EACzC;AAGA,MAAI,UAAU,SAAS,SAAS,KAAK,CAAC,UAAU,SAAS,QAAQ,GAAG;AAClE,UAAMA,SAAQ,UAAU,MAAM,kBAAkB;AAChD,WAAOA,SAAQ,UAAUA,OAAM,CAAC,CAAC,KAAK;AAAA,EACxC;AAGA,MAAI,UAAU,SAAS,MAAM,GAAG;AAC9B,UAAMA,SAAQ,UAAU,MAAM,cAAc;AAC5C,WAAOA,SAAQ,QAAQA,OAAM,CAAC,CAAC,KAAK;AAAA,EACtC;AAGA,QAAM,QAAQ,UAAU,MAAM,eAAe;AAC7C,SAAO,QAAQ,MAAM,CAAC,IAAI;AAC5B;"}
@@ -1,6 +1,15 @@
1
+ ;
2
+ !function() {
3
+ try {
4
+ var e = "undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof globalThis ? globalThis : "undefined" != typeof self ? self : {}, n = new e.Error().stack;
5
+ n && (e._sentryDebugIds = e._sentryDebugIds || {}, e._sentryDebugIds[n] = "75ed20dd-d677-4ccd-a15b-af93d9a30db1", e._sentryDebugIdIdentifier = "sentry-dbid-75ed20dd-d677-4ccd-a15b-af93d9a30db1");
6
+ } catch (e2) {
7
+ }
8
+ }();
1
9
  import { brotliDecompressSync, inflateSync, gunzipSync } from "node:zlib";
2
10
  import { MessageBuffer } from "./messageBuffer.js";
3
11
  import { EventContainer } from "./utils/eventContainer.js";
12
+ import "../_virtual/_sentry-release-injection-file.js";
4
13
  const decompressors = {
5
14
  gzip: gunzipSync,
6
15
  deflate: inflateSync,
@@ -1 +1 @@
1
- {"version":3,"file":"sdk.js","sources":["../../src/server/sdk.ts"],"sourcesContent":["import { brotliDecompressSync, gunzipSync, inflateSync } from \"node:zlib\";\nimport { MessageBuffer } from \"./messageBuffer.ts\";\nimport { EventContainer } from \"./utils/eventContainer.ts\";\n\nconst decompressors: Record<\"gzip\" | \"deflate\" | \"br\", (buf: Buffer) => Buffer> = {\n gzip: gunzipSync,\n deflate: inflateSync,\n br: brotliDecompressSync,\n};\ntype ContentEncoding = keyof typeof decompressors;\n\nexport function createSpotlightBuffer() {\n return new MessageBuffer<EventContainer>();\n}\n\ntype PushToSpotlightBufferOptions = {\n spotlightBuffer: MessageBuffer<EventContainer>;\n body: Buffer;\n encoding?: ContentEncoding;\n contentType?: string;\n userAgent?: string;\n};\n\nexport function pushToSpotlightBuffer(options: PushToSpotlightBufferOptions) {\n const body = decompressBody(options.body, options.encoding);\n\n const contentType = options.contentType?.split(\";\")[0].toLocaleLowerCase();\n\n if (contentType) {\n // Create event container and add to buffer\n const container = new EventContainer(contentType, body, options.userAgent);\n\n // Add to buffer - this will automatically trigger all subscribers\n // including the onEnvelope callback if one is registered\n options.spotlightBuffer.put(container);\n\n return container;\n }\n}\n\nexport function decompressBody(body: Buffer, contentEncoding?: ContentEncoding) {\n if (!contentEncoding) {\n return body;\n }\n return decompressors[contentEncoding](body);\n}\n"],"names":[],"mappings":";;;AAIA,MAAM,gBAA4E;AAAA,EAChF,MAAM;AAAA,EACN,SAAS;AAAA,EACT,IAAI;AACN;AAGO,SAAS,wBAAwB;AACtC,SAAO,IAAI,cAAA;AACb;AAUO,SAAS,sBAAsB,SAAuC;AAC3E,QAAM,OAAO,eAAe,QAAQ,MAAM,QAAQ,QAAQ;AAE1D,QAAM,cAAc,QAAQ,aAAa,MAAM,GAAG,EAAE,CAAC,EAAE,kBAAA;AAEvD,MAAI,aAAa;AAEf,UAAM,YAAY,IAAI,eAAe,aAAa,MAAM,QAAQ,SAAS;AAIzE,YAAQ,gBAAgB,IAAI,SAAS;AAErC,WAAO;AAAA,EACT;AACF;AAEO,SAAS,eAAe,MAAc,iBAAmC;AAC9E,MAAI,CAAC,iBAAiB;AACpB,WAAO;AAAA,EACT;AACA,SAAO,cAAc,eAAe,EAAE,IAAI;AAC5C;"}
1
+ {"version":3,"file":"sdk.js","sources":["../../src/server/sdk.ts"],"sourcesContent":["import { brotliDecompressSync, gunzipSync, inflateSync } from \"node:zlib\";\nimport { MessageBuffer } from \"./messageBuffer.ts\";\nimport { EventContainer } from \"./utils/eventContainer.ts\";\n\nconst decompressors: Record<\"gzip\" | \"deflate\" | \"br\", (buf: Buffer) => Buffer> = {\n gzip: gunzipSync,\n deflate: inflateSync,\n br: brotliDecompressSync,\n};\ntype ContentEncoding = keyof typeof decompressors;\n\nexport function createSpotlightBuffer() {\n return new MessageBuffer<EventContainer>();\n}\n\ntype PushToSpotlightBufferOptions = {\n spotlightBuffer: MessageBuffer<EventContainer>;\n body: Buffer;\n encoding?: ContentEncoding;\n contentType?: string;\n userAgent?: string;\n};\n\nexport function pushToSpotlightBuffer(options: PushToSpotlightBufferOptions) {\n const body = decompressBody(options.body, options.encoding);\n\n const contentType = options.contentType?.split(\";\")[0].toLocaleLowerCase();\n\n if (contentType) {\n // Create event container and add to buffer\n const container = new EventContainer(contentType, body, options.userAgent);\n\n // Add to buffer - this will automatically trigger all subscribers\n // including the onEnvelope callback if one is registered\n options.spotlightBuffer.put(container);\n\n return container;\n }\n}\n\nexport function decompressBody(body: Buffer, contentEncoding?: ContentEncoding) {\n if (!contentEncoding) {\n return body;\n }\n return decompressors[contentEncoding](body);\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAIA,MAAM,gBAA4E;AAAA,EAChF,MAAM;AAAA,EACN,SAAS;AAAA,EACT,IAAI;AACN;AAGO,SAAS,wBAAwB;AACtC,SAAO,IAAI,cAAA;AACb;AAUO,SAAS,sBAAsB,SAAuC;AAC3E,QAAM,OAAO,eAAe,QAAQ,MAAM,QAAQ,QAAQ;AAE1D,QAAM,cAAc,QAAQ,aAAa,MAAM,GAAG,EAAE,CAAC,EAAE,kBAAA;AAEvD,MAAI,aAAa;AAEf,UAAM,YAAY,IAAI,eAAe,aAAa,MAAM,QAAQ,SAAS;AAIzE,YAAQ,gBAAgB,IAAI,SAAS;AAErC,WAAO;AAAA,EACT;AACF;AAEO,SAAS,eAAe,MAAc,iBAAmC;AAC9E,MAAI,CAAC,iBAAiB;AACpB,WAAO;AAAA,EACT;AACA,SAAO,cAAc,eAAe,EAAE,IAAI;AAC5C;"}
@@ -9,6 +9,7 @@ export type CLIHandlerOptions = {
9
9
  format?: FormatterType;
10
10
  basePath?: SideCarOptions["basePath"];
11
11
  filesToServe?: SideCarOptions["filesToServe"];
12
+ allowedOrigins?: SideCarOptions["allowedOrigins"];
12
13
  };
13
14
  export type CLIHandlerReturnType = Promise<any> | any;
14
15
  export type CLIHandler = ((options: CLIHandlerOptions) => CLIHandlerReturnType) | (() => CLIHandlerReturnType);