@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,4 +1,5 @@
1
1
  import { ParsedEnvelope } from '../parser/processEnvelope.ts';
2
+ import { NormalizedAllowedOrigins } from '../utils/cors.ts';
2
3
  export type IncomingPayloadCallback = (body: string) => void;
3
4
  export type OnEnvelopeCallback = (envelope: ParsedEnvelope["envelope"]) => void;
4
5
  export type SidecarLogger = {
@@ -38,7 +39,18 @@ export type SideCarOptions = {
38
39
  onEnvelope?: OnEnvelopeCallback;
39
40
  isStandalone?: boolean;
40
41
  stdioMCP?: boolean;
42
+ /**
43
+ * Additional origins to allow for CORS requests.
44
+ * Useful for custom local domains, tunnels, etc.
45
+ *
46
+ * Accepts two formats:
47
+ * - Full origins (e.g., "https://ngrok.io:443") for strict matching
48
+ * - Plain domains (e.g., "myapp.local") to allow any protocol/port
49
+ */
50
+ allowedOrigins?: string[];
41
51
  };
42
52
  export type StartServerOptions = Pick<SideCarOptions, "basePath" | "filesToServe" | "incomingPayload"> & {
43
53
  port: number;
54
+ /** Pre-normalized allowed origins for CORS (use normalizeAllowedOrigins() to create) */
55
+ normalizedAllowedOrigins?: NormalizedAllowedOrigins;
44
56
  };
@@ -1,12 +1,42 @@
1
+ /**
2
+ * Pre-normalized allowed origins for efficient matching.
3
+ * Call normalizeAllowedOrigins() once at server startup to create this structure.
4
+ */
5
+ export interface NormalizedAllowedOrigins {
6
+ /** Full origins (lowercased, trailing slash removed) for exact matching */
7
+ fullOrigins: Set<string>;
8
+ /** Plain domains (lowercased) for permissive matching */
9
+ domains: Set<string>;
10
+ }
11
+ /**
12
+ * Normalize and classify allowed origins for efficient matching.
13
+ * Call this once at server startup, then pass the result to isAllowedOrigin().
14
+ *
15
+ * @param allowedOrigins - Raw list of allowed origins/domains from config
16
+ * @returns Pre-normalized structure for O(1) lookups
17
+ */
18
+ export declare function normalizeAllowedOrigins(allowedOrigins: string[]): NormalizedAllowedOrigins;
19
+ /**
20
+ * Clear the DNS cache, pending resolutions, and machine IPs cache. Useful for testing.
21
+ */
22
+ export declare function clearDnsCache(): void;
23
+ /**
24
+ * Get the current DNS cache size. Useful for testing.
25
+ */
26
+ export declare function getDnsCacheSize(): number;
1
27
  /**
2
28
  * Validates if an origin should be allowed to access the Sidecar.
3
29
  *
4
30
  * Allowed origins:
5
- * - localhost with any port or protocol (http/https)
6
- * - https://spotlightjs.com (HTTPS only, default port)
7
- * - https://*.spotlightjs.com (HTTPS only, default port)
31
+ * - localhost (RFC 6761 reserved name, always trusted)
32
+ * - Any origin whose hostname resolves to this machine's IPs (with TTL >= 1h)
33
+ * - https://spotlightjs.com and subdomains (HTTPS only, default port)
34
+ * - Custom origins/domains from the normalizedAllowedOrigins list
35
+ *
36
+ * For DNS rebinding protection details, see the TTL Constants section above.
8
37
  *
9
38
  * @param origin - The origin to validate
10
- * @returns true if the origin is allowed, false otherwise
39
+ * @param normalizedAllowedOrigins - Optional pre-normalized allowed origins (from normalizeAllowedOrigins())
40
+ * @returns Promise<boolean> - true if the origin is allowed, false otherwise
11
41
  */
12
- export declare function isAllowedOrigin(origin: string): boolean;
42
+ export declare function isAllowedOrigin(origin: string, normalizedAllowedOrigins?: NormalizedAllowedOrigins): Promise<boolean>;
@@ -1,22 +1,195 @@
1
- function isAllowedOrigin(origin) {
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] = "4dd6e253-0d5e-4edb-bdeb-58750d0d4592", e._sentryDebugIdIdentifier = "sentry-dbid-4dd6e253-0d5e-4edb-bdeb-58750d0d4592");
6
+ } catch (e2) {
7
+ }
8
+ }();
9
+ import dns from "node:dns/promises";
10
+ import net from "node:net";
11
+ import os__default from "node:os";
12
+ import "../../_virtual/_sentry-release-injection-file.js";
13
+ const dnsCache = /* @__PURE__ */ new Map();
14
+ const pendingResolutions = /* @__PURE__ */ new Map();
15
+ const MIN_TTL_SECONDS = 60 * 60;
16
+ const DEFAULT_TTL_MS = 60 * 60 * 1e3;
17
+ const FAILURE_TTL_MS = 5 * 60 * 1e3;
18
+ let machineIPsCache = null;
19
+ let machineIPsCacheTime = 0;
20
+ const MACHINE_IPS_CACHE_TTL_MS = 60 * 1e3;
21
+ function getMachineIPs() {
22
+ const now = Date.now();
23
+ if (machineIPsCache && now - machineIPsCacheTime < MACHINE_IPS_CACHE_TTL_MS) {
24
+ return machineIPsCache;
25
+ }
26
+ const ips = /* @__PURE__ */ new Set();
27
+ const interfaces = os__default.networkInterfaces();
28
+ for (const name in interfaces) {
29
+ const addresses = interfaces[name];
30
+ if (addresses) {
31
+ for (const addr of addresses) {
32
+ ips.add(addr.address);
33
+ }
34
+ }
35
+ }
36
+ machineIPsCache = ips;
37
+ machineIPsCacheTime = now;
38
+ return ips;
39
+ }
40
+ function isIPAddress(hostname) {
41
+ const cleanHostname = hostname.startsWith("[") && hostname.endsWith("]") ? hostname.slice(1, -1) : hostname;
42
+ return net.isIP(cleanHostname) !== 0;
43
+ }
44
+ function isLocalMachineIP(ip) {
45
+ const cleanIP = ip.startsWith("[") && ip.endsWith("]") ? ip.slice(1, -1) : ip;
46
+ const machineIPs = getMachineIPs();
47
+ return machineIPs.has(cleanIP);
48
+ }
49
+ async function resolveHostname(hostname) {
50
+ const dnsAddresses = [];
51
+ const hostsFileAddresses = [];
52
+ let minTtl;
53
+ const [resolve4Result, resolve6Result, lookupResult] = await Promise.allSettled([
54
+ dns.resolve4(hostname, { ttl: true }),
55
+ dns.resolve6(hostname, { ttl: true }),
56
+ dns.lookup(hostname, { all: true })
57
+ ]);
58
+ const dnsSucceeded = resolve4Result.status === "fulfilled" || resolve6Result.status === "fulfilled";
59
+ if (resolve4Result.status === "fulfilled") {
60
+ for (const record of resolve4Result.value) {
61
+ dnsAddresses.push({ address: record.address, ttl: record.ttl });
62
+ if (record.ttl !== void 0) {
63
+ minTtl = minTtl === void 0 ? record.ttl : Math.min(minTtl, record.ttl);
64
+ }
65
+ }
66
+ }
67
+ if (resolve6Result.status === "fulfilled") {
68
+ for (const record of resolve6Result.value) {
69
+ dnsAddresses.push({ address: record.address, ttl: record.ttl });
70
+ if (record.ttl !== void 0) {
71
+ minTtl = minTtl === void 0 ? record.ttl : Math.min(minTtl, record.ttl);
72
+ }
73
+ }
74
+ }
75
+ if (!dnsSucceeded && lookupResult.status === "fulfilled") {
76
+ const lookupAddresses = Array.isArray(lookupResult.value) ? lookupResult.value : [lookupResult.value];
77
+ for (const record of lookupAddresses) {
78
+ hostsFileAddresses.push(record.address);
79
+ }
80
+ }
81
+ return { dnsAddresses, hostsFileAddresses, minTtl };
82
+ }
83
+ async function resolveAndCacheHostname(hostname) {
84
+ try {
85
+ const { dnsAddresses, hostsFileAddresses, minTtl } = await resolveHostname(hostname);
86
+ const hostsLocal = hostsFileAddresses.some((addr) => isLocalMachineIP(addr));
87
+ if (hostsLocal) {
88
+ dnsCache.set(hostname, {
89
+ isLocal: true,
90
+ expiresAt: Date.now() + DEFAULT_TTL_MS
91
+ });
92
+ return true;
93
+ }
94
+ const dnsLocal = dnsAddresses.some((result) => isLocalMachineIP(result.address));
95
+ if (dnsLocal) {
96
+ if (minTtl !== void 0 && minTtl < MIN_TTL_SECONDS) {
97
+ dnsCache.set(hostname, {
98
+ isLocal: false,
99
+ expiresAt: Date.now() + FAILURE_TTL_MS
100
+ });
101
+ return false;
102
+ }
103
+ const cacheTtl2 = minTtl !== void 0 ? minTtl * 1e3 : DEFAULT_TTL_MS;
104
+ dnsCache.set(hostname, {
105
+ isLocal: true,
106
+ expiresAt: Date.now() + cacheTtl2
107
+ });
108
+ return true;
109
+ }
110
+ const cacheTtl = minTtl !== void 0 ? minTtl * 1e3 : DEFAULT_TTL_MS;
111
+ dnsCache.set(hostname, {
112
+ isLocal: false,
113
+ expiresAt: Date.now() + cacheTtl
114
+ });
115
+ return false;
116
+ } catch {
117
+ dnsCache.set(hostname, {
118
+ isLocal: false,
119
+ expiresAt: Date.now() + FAILURE_TTL_MS
120
+ });
121
+ return false;
122
+ }
123
+ }
124
+ async function isHostnameLocal(hostname) {
125
+ const cached = dnsCache.get(hostname);
126
+ if (cached && cached.expiresAt > Date.now()) {
127
+ return cached.isLocal;
128
+ }
129
+ const pending = pendingResolutions.get(hostname);
130
+ if (pending) {
131
+ return pending;
132
+ }
133
+ const resolution = resolveAndCacheHostname(hostname);
134
+ pendingResolutions.set(hostname, resolution);
135
+ try {
136
+ return await resolution;
137
+ } finally {
138
+ pendingResolutions.delete(hostname);
139
+ }
140
+ }
141
+ function isSpotlightOrigin(url, hostname) {
142
+ if (hostname === "spotlightjs.com" || hostname.endsWith(".spotlightjs.com")) {
143
+ return url.protocol === "https:" && (url.port === "" || url.port === "443");
144
+ }
145
+ return false;
146
+ }
147
+ function normalizeAllowedOrigins(allowedOrigins) {
148
+ const fullOrigins = /* @__PURE__ */ new Set();
149
+ const domains = /* @__PURE__ */ new Set();
150
+ for (const entry of allowedOrigins) {
151
+ const normalized = entry.toLowerCase();
152
+ if (normalized.includes("://")) {
153
+ fullOrigins.add(normalized.replace(/\/$/, ""));
154
+ } else {
155
+ domains.add(normalized);
156
+ }
157
+ }
158
+ return { fullOrigins, domains };
159
+ }
160
+ function isCustomAllowedOrigin(origin, hostname, normalized) {
161
+ if (normalized.domains.has(hostname)) {
162
+ return true;
163
+ }
164
+ const normalizedOrigin = origin.toLowerCase().replace(/\/$/, "");
165
+ return normalized.fullOrigins.has(normalizedOrigin);
166
+ }
167
+ async function isAllowedOrigin(origin, normalizedAllowedOrigins) {
2
168
  if (!origin) {
3
169
  return false;
4
170
  }
5
171
  try {
6
172
  const url = new URL(origin);
7
173
  const hostname = url.hostname.toLowerCase();
8
- if (hostname === "localhost" || hostname === "127.0.0.1" || hostname === "[::1]" || hostname === "::1") {
174
+ if (hostname === "localhost") {
175
+ return true;
176
+ }
177
+ if (isSpotlightOrigin(url, hostname)) {
178
+ return true;
179
+ }
180
+ if (normalizedAllowedOrigins && isCustomAllowedOrigin(origin, hostname, normalizedAllowedOrigins)) {
9
181
  return true;
10
182
  }
11
- if (url.protocol !== "https:" || url.port !== "" && url.port !== "443") {
12
- return false;
183
+ if (isIPAddress(hostname)) {
184
+ return isLocalMachineIP(hostname);
13
185
  }
14
- return hostname === "spotlightjs.com" || hostname.endsWith(".spotlightjs.com");
186
+ return isHostnameLocal(hostname);
15
187
  } catch {
16
188
  return false;
17
189
  }
18
190
  }
19
191
  export {
20
- isAllowedOrigin
192
+ isAllowedOrigin,
193
+ normalizeAllowedOrigins
21
194
  };
22
195
  //# sourceMappingURL=cors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cors.js","sources":["../../../src/server/utils/cors.ts"],"sourcesContent":["/**\n * Validates if an origin should be allowed to access the Sidecar.\n *\n * Allowed origins:\n * - localhost with any port or protocol (http/https)\n * - https://spotlightjs.com (HTTPS only, default port)\n * - https://*.spotlightjs.com (HTTPS only, default port)\n *\n * @param origin - The origin to validate\n * @returns true if the origin is allowed, false otherwise\n */\nexport function isAllowedOrigin(origin: string): boolean {\n if (!origin) {\n return false;\n }\n\n try {\n const url = new URL(origin);\n const hostname = url.hostname.toLowerCase();\n\n // Allow localhost with any port and protocol (http or https)\n // Check both [::1] and ::1 formats for IPv6 localhost compatibility\n if (hostname === \"localhost\" || hostname === \"127.0.0.1\" || hostname === \"[::1]\" || hostname === \"::1\") {\n return true;\n }\n\n // Check for spotlightjs.com domains - must be HTTPS with default port\n if (url.protocol !== \"https:\" || (url.port !== \"\" && url.port !== \"443\")) {\n return false;\n }\n\n return hostname === \"spotlightjs.com\" || hostname.endsWith(\".spotlightjs.com\");\n } catch {\n // Invalid URL\n return false;\n }\n}\n"],"names":[],"mappings":"AAWO,SAAS,gBAAgB,QAAyB;AACvD,MAAI,CAAC,QAAQ;AACX,WAAO;AAAA,EACT;AAEA,MAAI;AACF,UAAM,MAAM,IAAI,IAAI,MAAM;AAC1B,UAAM,WAAW,IAAI,SAAS,YAAA;AAI9B,QAAI,aAAa,eAAe,aAAa,eAAe,aAAa,WAAW,aAAa,OAAO;AACtG,aAAO;AAAA,IACT;AAGA,QAAI,IAAI,aAAa,YAAa,IAAI,SAAS,MAAM,IAAI,SAAS,OAAQ;AACxE,aAAO;AAAA,IACT;AAEA,WAAO,aAAa,qBAAqB,SAAS,SAAS,kBAAkB;AAAA,EAC/E,QAAQ;AAEN,WAAO;AAAA,EACT;AACF;"}
1
+ {"version":3,"file":"cors.js","sources":["../../../src/server/utils/cors.ts"],"sourcesContent":["import dns from \"node:dns/promises\";\nimport net from \"node:net\";\nimport os from \"node:os\";\n\n/**\n * DNS Resolution Cache Entry\n */\ninterface CacheEntry {\n isLocal: boolean;\n expiresAt: number;\n}\n\n/**\n * DNS Resolution Result with optional TTL\n */\ninterface DnsResult {\n address: string;\n ttl?: number;\n}\n\n/**\n * Cache for DNS resolution results.\n * Key: lowercase hostname\n * Value: { isLocal, expiresAt }\n */\nconst dnsCache = new Map<string, CacheEntry>();\n\n/**\n * In-flight DNS resolutions for request coalescing.\n * Prevents duplicate DNS lookups when multiple requests come in\n * for the same hostname before the first one completes.\n */\nconst pendingResolutions = new Map<string, Promise<boolean>>();\n\n/**\n * TTL Constants (in milliseconds)\n *\n * DNS Rebinding Attack Protection:\n * ================================\n * A DNS rebinding attack works by:\n * 1. Attacker controls evil.com with a short TTL\n * 2. User visits evil.com, which initially resolves to attacker's server\n * 3. Attacker's page loads malicious JavaScript\n * 4. Attacker rebinds evil.com to 127.0.0.1\n * 5. JavaScript makes requests to evil.com (now 127.0.0.1), bypassing same-origin policy\n *\n * Our mitigation: Reject DNS records with TTL < 1 hour.\n * This means an attacker would need to set a TTL >= 1 hour, making their\n * site inaccessible for that duration after rebinding. This makes the attack\n * impractical for real-world exploitation.\n */\nconst MIN_TTL_SECONDS = 60 * 60; // 1 hour - reject DNS records with lower TTL\nconst DEFAULT_TTL_MS = 60 * 60 * 1000; // 1 hour - used when DNS doesn't provide TTL (e.g., /etc/hosts)\nconst FAILURE_TTL_MS = 5 * 60 * 1000; // 5 minutes - cache failed lookups to avoid hammering DNS\n\n/**\n * DNS resolution notes:\n * We use both resolve4/6 AND lookup because:\n * - dns.resolve4/6: Queries DNS servers directly, can return TTL\n * - dns.lookup: Uses OS resolver (getaddrinfo), checks /etc/hosts first, then DNS\n *\n * A hostname in /etc/hosts won't be found by resolve4/6, hence we need both.\n * We can only trust lookup results when DNS (resolve4/6) fails - that means\n * the result came from /etc/hosts rather than DNS.\n */\n\n/**\n * Cache for machine's own IP addresses.\n * Refreshed periodically as network interfaces can change.\n */\nlet machineIPsCache: Set<string> | null = null;\nlet machineIPsCacheTime = 0;\nconst MACHINE_IPS_CACHE_TTL_MS = 60 * 1000; // 1 minute - refresh periodically for network changes\n\n/**\n * Get all IP addresses assigned to this machine's network interfaces.\n * This includes:\n * - Loopback (127.0.0.1, ::1)\n * - Local/private IPs (192.168.x.x, 10.x.x.x, etc.)\n * - VPN IPs (e.g., Tailscale 100.x.x.x, Zerotier IPs)\n *\n * Results are cached for 1 minute to handle network changes while\n * avoiding repeated system calls.\n */\nfunction getMachineIPs(): Set<string> {\n const now = Date.now();\n if (machineIPsCache && now - machineIPsCacheTime < MACHINE_IPS_CACHE_TTL_MS) {\n return machineIPsCache;\n }\n\n const ips = new Set<string>();\n const interfaces = os.networkInterfaces();\n\n for (const name in interfaces) {\n const addresses = interfaces[name];\n if (addresses) {\n for (const addr of addresses) {\n ips.add(addr.address);\n }\n }\n }\n\n machineIPsCache = ips;\n machineIPsCacheTime = now;\n return ips;\n}\n\n/**\n * Check if a string is an IP address (IPv4 or IPv6).\n */\nfunction isIPAddress(hostname: string): boolean {\n // Handle bracketed IPv6 (e.g., [::1])\n const cleanHostname = hostname.startsWith(\"[\") && hostname.endsWith(\"]\") ? hostname.slice(1, -1) : hostname;\n return net.isIP(cleanHostname) !== 0;\n}\n\n/**\n * Check if an IP address belongs to this machine.\n * See getMachineIPs() for details on what IPs are considered local.\n */\nfunction isLocalMachineIP(ip: string): boolean {\n // Handle bracketed IPv6\n const cleanIP = ip.startsWith(\"[\") && ip.endsWith(\"]\") ? ip.slice(1, -1) : ip;\n const machineIPs = getMachineIPs();\n return machineIPs.has(cleanIP);\n}\n\n/**\n * Resolution result with source information for trust decisions.\n */\ninterface ResolutionResult {\n /** Addresses from dns.resolve4/6() with TTL */\n dnsAddresses: DnsResult[];\n /** Addresses from dns.lookup() when DNS failed - these are from /etc/hosts */\n hostsFileAddresses: string[];\n /** Minimum TTL from DNS results (seconds) */\n minTtl?: number;\n}\n\n/**\n * Resolve a hostname to IP addresses using both DNS and OS resolver.\n *\n * Why both dns.resolve() and dns.lookup()?\n * - dns.resolve4/6: Direct DNS query, returns TTL when available\n * - dns.lookup: Uses OS resolver (getaddrinfo), which reads /etc/hosts\n *\n * A hostname in /etc/hosts won't be found by resolve4/6, hence we need both.\n *\n * Trust model:\n * - If dns.resolve() succeeds → result is from DNS, needs TTL validation\n * - If dns.resolve() fails but dns.lookup() succeeds → result is from /etc/hosts, trusted\n *\n * We can only trust lookup results when DNS failed, because lookup also queries\n * DNS servers (via the OS resolver) if the hostname isn't in /etc/hosts.\n */\nasync function resolveHostname(hostname: string): Promise<ResolutionResult> {\n const dnsAddresses: DnsResult[] = [];\n const hostsFileAddresses: string[] = [];\n let minTtl: number | undefined;\n\n // Run all resolution methods in parallel for efficiency\n const [resolve4Result, resolve6Result, lookupResult] = await Promise.allSettled([\n dns.resolve4(hostname, { ttl: true }),\n dns.resolve6(hostname, { ttl: true }),\n dns.lookup(hostname, { all: true }),\n ]);\n\n const dnsSucceeded = resolve4Result.status === \"fulfilled\" || resolve6Result.status === \"fulfilled\";\n\n // Process IPv4 DNS results (with TTL)\n if (resolve4Result.status === \"fulfilled\") {\n for (const record of resolve4Result.value) {\n dnsAddresses.push({ address: record.address, ttl: record.ttl });\n if (record.ttl !== undefined) {\n minTtl = minTtl === undefined ? record.ttl : Math.min(minTtl, record.ttl);\n }\n }\n }\n\n // Process IPv6 DNS results (with TTL)\n if (resolve6Result.status === \"fulfilled\") {\n for (const record of resolve6Result.value) {\n dnsAddresses.push({ address: record.address, ttl: record.ttl });\n if (record.ttl !== undefined) {\n minTtl = minTtl === undefined ? record.ttl : Math.min(minTtl, record.ttl);\n }\n }\n }\n\n // Process OS resolver results - ONLY trusted if DNS failed\n // If DNS succeeded, lookup would return the same DNS result (not trusted separately)\n // If DNS failed but lookup succeeded, it must be from /etc/hosts (trusted)\n if (!dnsSucceeded && lookupResult.status === \"fulfilled\") {\n const lookupAddresses = Array.isArray(lookupResult.value) ? lookupResult.value : [lookupResult.value];\n for (const record of lookupAddresses) {\n hostsFileAddresses.push(record.address);\n }\n }\n\n return { dnsAddresses, hostsFileAddresses, minTtl };\n}\n\n/**\n * Perform the actual DNS resolution and cache the result.\n * This is separated from isHostnameLocal to enable request coalescing.\n */\nasync function resolveAndCacheHostname(hostname: string): Promise<boolean> {\n try {\n const { dnsAddresses, hostsFileAddresses, minTtl } = await resolveHostname(hostname);\n\n // First check /etc/hosts addresses (trusted - DNS failed, so these must be from hosts file)\n // These are under local control and don't need TTL validation\n const hostsLocal = hostsFileAddresses.some(addr => isLocalMachineIP(addr));\n if (hostsLocal) {\n // /etc/hosts entry resolves to local - cache and allow\n dnsCache.set(hostname, {\n isLocal: true,\n expiresAt: Date.now() + DEFAULT_TTL_MS,\n });\n return true;\n }\n\n // Check DNS addresses (need TTL validation for rebinding protection)\n const dnsLocal = dnsAddresses.some(result => isLocalMachineIP(result.address));\n\n if (dnsLocal) {\n // DNS rebinding protection: reject records with TTL < 1 hour\n if (minTtl !== undefined && minTtl < MIN_TTL_SECONDS) {\n // Low TTL is suspicious - reject and cache as non-local\n dnsCache.set(hostname, {\n isLocal: false,\n expiresAt: Date.now() + FAILURE_TTL_MS,\n });\n return false;\n }\n\n // DNS resolves to local with safe TTL\n const cacheTtl = minTtl !== undefined ? minTtl * 1000 : DEFAULT_TTL_MS;\n dnsCache.set(hostname, {\n isLocal: true,\n expiresAt: Date.now() + cacheTtl,\n });\n return true;\n }\n\n // Not a local address - cache the negative result\n const cacheTtl = minTtl !== undefined ? minTtl * 1000 : DEFAULT_TTL_MS;\n dnsCache.set(hostname, {\n isLocal: false,\n expiresAt: Date.now() + cacheTtl,\n });\n return false;\n } catch {\n // DNS resolution failed - cache the failure briefly\n dnsCache.set(hostname, {\n isLocal: false,\n expiresAt: Date.now() + FAILURE_TTL_MS,\n });\n return false;\n }\n}\n\n/**\n * Check if a hostname resolves to this machine, with DNS rebinding protection.\n *\n * Returns true if the hostname resolves to a local IP AND has a safe TTL.\n * DNS records with TTL < 1 hour are rejected to prevent rebinding attacks.\n * Results are cached to avoid repeated DNS lookups.\n *\n * Uses request coalescing: if multiple requests come in for the same hostname\n * before the first resolution completes, they all share the same promise.\n */\nasync function isHostnameLocal(hostname: string): Promise<boolean> {\n // Check cache first\n const cached = dnsCache.get(hostname);\n if (cached && cached.expiresAt > Date.now()) {\n return cached.isLocal;\n }\n\n // Check if there's already an in-flight resolution for this hostname\n const pending = pendingResolutions.get(hostname);\n if (pending) {\n return pending;\n }\n\n // Start a new resolution and track it\n const resolution = resolveAndCacheHostname(hostname);\n pendingResolutions.set(hostname, resolution);\n\n try {\n return await resolution;\n } finally {\n pendingResolutions.delete(hostname);\n }\n}\n\n/**\n * Check if an origin is from spotlightjs.com (HTTPS only, default port).\n */\nfunction isSpotlightOrigin(url: URL, hostname: string): boolean {\n if (hostname === \"spotlightjs.com\" || hostname.endsWith(\".spotlightjs.com\")) {\n return url.protocol === \"https:\" && (url.port === \"\" || url.port === \"443\");\n }\n return false;\n}\n\n/**\n * Pre-normalized allowed origins for efficient matching.\n * Call normalizeAllowedOrigins() once at server startup to create this structure.\n */\nexport interface NormalizedAllowedOrigins {\n /** Full origins (lowercased, trailing slash removed) for exact matching */\n fullOrigins: Set<string>;\n /** Plain domains (lowercased) for permissive matching */\n domains: Set<string>;\n}\n\n/**\n * Normalize and classify allowed origins for efficient matching.\n * Call this once at server startup, then pass the result to isAllowedOrigin().\n *\n * @param allowedOrigins - Raw list of allowed origins/domains from config\n * @returns Pre-normalized structure for O(1) lookups\n */\nexport function normalizeAllowedOrigins(allowedOrigins: string[]): NormalizedAllowedOrigins {\n const fullOrigins = new Set<string>();\n const domains = new Set<string>();\n\n for (const entry of allowedOrigins) {\n const normalized = entry.toLowerCase();\n if (normalized.includes(\"://\")) {\n // Full origin - normalize by removing trailing slash\n fullOrigins.add(normalized.replace(/\\/$/, \"\"));\n } else {\n // Plain domain\n domains.add(normalized);\n }\n }\n\n return { fullOrigins, domains };\n}\n\n/**\n * Check if an origin matches an entry in the pre-normalized allowed origins.\n *\n * Supports two formats:\n * - Full origins (e.g., \"https://ngrok.io:443\") - exact match required\n * - Plain domains (e.g., \"myapp.local\") - matches any protocol/port\n *\n * @param origin - The origin to check (e.g., \"https://myapp.local:3000\")\n * @param hostname - The lowercase hostname from the origin URL\n * @param normalized - Pre-normalized allowed origins\n */\nfunction isCustomAllowedOrigin(origin: string, hostname: string, normalized: NormalizedAllowedOrigins): boolean {\n // Check plain domain match first (more common case)\n if (normalized.domains.has(hostname)) {\n return true;\n }\n\n // Check full origin match\n const normalizedOrigin = origin.toLowerCase().replace(/\\/$/, \"\");\n return normalized.fullOrigins.has(normalizedOrigin);\n}\n\n/**\n * Clear the DNS cache, pending resolutions, and machine IPs cache. Useful for testing.\n */\nexport function clearDnsCache(): void {\n dnsCache.clear();\n pendingResolutions.clear();\n machineIPsCache = null;\n machineIPsCacheTime = 0;\n}\n\n/**\n * Get the current DNS cache size. Useful for testing.\n */\nexport function getDnsCacheSize(): number {\n return dnsCache.size;\n}\n\n/**\n * Validates if an origin should be allowed to access the Sidecar.\n *\n * Allowed origins:\n * - localhost (RFC 6761 reserved name, always trusted)\n * - Any origin whose hostname resolves to this machine's IPs (with TTL >= 1h)\n * - https://spotlightjs.com and subdomains (HTTPS only, default port)\n * - Custom origins/domains from the normalizedAllowedOrigins list\n *\n * For DNS rebinding protection details, see the TTL Constants section above.\n *\n * @param origin - The origin to validate\n * @param normalizedAllowedOrigins - Optional pre-normalized allowed origins (from normalizeAllowedOrigins())\n * @returns Promise<boolean> - true if the origin is allowed, false otherwise\n */\nexport async function isAllowedOrigin(\n origin: string,\n normalizedAllowedOrigins?: NormalizedAllowedOrigins,\n): Promise<boolean> {\n if (!origin) {\n return false;\n }\n\n try {\n const url = new URL(origin);\n const hostname = url.hostname.toLowerCase();\n\n // Fast path: localhost is always allowed (RFC 6761 reserved name)\n // This is safe because \"localhost\" is guaranteed to resolve to loopback\n // and cannot be registered as a public domain name.\n if (hostname === \"localhost\") {\n return true;\n }\n\n // Fast path: spotlightjs.com domains (no DNS lookup needed)\n if (isSpotlightOrigin(url, hostname)) {\n return true;\n }\n\n // Fast path: Check custom allowed origins (no DNS lookup needed)\n if (normalizedAllowedOrigins && isCustomAllowedOrigin(origin, hostname, normalizedAllowedOrigins)) {\n return true;\n }\n\n // Fast path: If hostname is already an IP address, check directly\n if (isIPAddress(hostname)) {\n return isLocalMachineIP(hostname);\n }\n\n // Resolve hostname and check if it's local (with caching and TTL validation)\n return isHostnameLocal(hostname);\n } catch {\n // Invalid URL\n return false;\n }\n}\n"],"names":["os","cacheTtl"],"mappings":"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"}
@@ -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] = "27b39d5b-e60f-435f-945d-efc94ca1a964", e._sentryDebugIdIdentifier = "sentry-dbid-27b39d5b-e60f-435f-945d-efc94ca1a964");
6
+ } catch (e2) {
7
+ }
8
+ }();
1
9
  import { accessSync, constants, readFileSync } from "node:fs";
2
10
  import { delimiter } from "node:path";
3
11
  import { parse } from "yaml";
4
12
  import { logger } from "../logger.js";
13
+ import "../../_virtual/_sentry-release-injection-file.js";
5
14
  const COMPOSE_FILE_BASE_NAMES = ["docker-compose", "compose"];
6
15
  const COMPOSE_FILE_EXTENSIONS = [".yml", ".yaml"];
7
16
  function getComposeFilesFromEnv() {
@@ -1 +1 @@
1
- {"version":3,"file":"docker-compose-parser.js","sources":["../../../src/server/utils/docker-compose-parser.ts"],"sourcesContent":["import { constants, accessSync, readFileSync } from \"node:fs\";\nimport { delimiter } from \"node:path\";\nimport { parse as parseYaml } from \"yaml\";\nimport { logger } from \"../logger.ts\";\n\nconst COMPOSE_FILE_BASE_NAMES = [\"docker-compose\", \"compose\"] as const;\nconst COMPOSE_FILE_EXTENSIONS = [\".yml\", \".yaml\"] as const;\n\n/**\n * Get compose files from COMPOSE_FILE environment variable\n * Returns an array of file paths if the variable is set, null otherwise\n */\nexport function getComposeFilesFromEnv(): string[] | null {\n const composeFileEnv = process.env.COMPOSE_FILE;\n if (!composeFileEnv) {\n return null;\n }\n\n // Split by platform-specific path delimiter (: on Unix, ; on Windows)\n const files = composeFileEnv\n .split(delimiter)\n .map(f => f.trim())\n .filter(Boolean);\n\n return files.length > 0 ? files : null;\n}\n\n/**\n * Find the compose file in the current directory by trying all combinations\n * of base names and extensions.\n */\nexport function findComposeFile(): string | null {\n for (const baseName of COMPOSE_FILE_BASE_NAMES) {\n for (const ext of COMPOSE_FILE_EXTENSIONS) {\n const fileName = `${baseName}${ext}`;\n try {\n accessSync(fileName, constants.R_OK);\n return fileName;\n } catch {\n // File doesn't exist or isn't readable, continue searching\n }\n }\n }\n return null;\n}\n\n/**\n * Find the override file for a given compose file.\n * Docker Compose looks for an override file with the same base name and extension.\n * For example: docker-compose.yml -> docker-compose.override.yml\n */\nexport function findOverrideFile(composeFile: string): string | null {\n // Extract extension from the original file to maintain consistency\n const ext = composeFile.endsWith(\".yaml\") ? \".yaml\" : \".yml\";\n const baseName = composeFile.replace(/\\.(yaml|yml)$/, \"\");\n const overrideFile = `${baseName}.override${ext}`;\n\n try {\n accessSync(overrideFile, constants.R_OK);\n return overrideFile;\n } catch {\n // File doesn't exist or isn't readable\n return null;\n }\n}\n\n/**\n * Parse compose file and extract service names\n */\nexport function getDockerComposeServices(filePath: string): string[] {\n try {\n const content = readFileSync(filePath, \"utf-8\");\n const parsed = parseYaml(content);\n\n if (!parsed || typeof parsed !== \"object\" || !(\"services\" in parsed)) {\n logger.error(`Invalid compose file: ${filePath} - missing 'services' key`);\n return [];\n }\n\n const services = parsed.services as Record<string, unknown>;\n return Object.keys(services);\n } catch (error) {\n logger.error(`Failed to parse compose file: ${filePath}`);\n logger.error(error);\n return [];\n }\n}\n"],"names":["parseYaml"],"mappings":";;;;AAKA,MAAM,0BAA0B,CAAC,kBAAkB,SAAS;AAC5D,MAAM,0BAA0B,CAAC,QAAQ,OAAO;AAMzC,SAAS,yBAA0C;AACxD,QAAM,iBAAiB,QAAQ,IAAI;AACnC,MAAI,CAAC,gBAAgB;AACnB,WAAO;AAAA,EACT;AAGA,QAAM,QAAQ,eACX,MAAM,SAAS,EACf,IAAI,CAAA,MAAK,EAAE,KAAA,CAAM,EACjB,OAAO,OAAO;AAEjB,SAAO,MAAM,SAAS,IAAI,QAAQ;AACpC;AAMO,SAAS,kBAAiC;AAC/C,aAAW,YAAY,yBAAyB;AAC9C,eAAW,OAAO,yBAAyB;AACzC,YAAM,WAAW,GAAG,QAAQ,GAAG,GAAG;AAClC,UAAI;AACF,mBAAW,UAAU,UAAU,IAAI;AACnC,eAAO;AAAA,MACT,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAOO,SAAS,iBAAiB,aAAoC;AAEnE,QAAM,MAAM,YAAY,SAAS,OAAO,IAAI,UAAU;AACtD,QAAM,WAAW,YAAY,QAAQ,iBAAiB,EAAE;AACxD,QAAM,eAAe,GAAG,QAAQ,YAAY,GAAG;AAE/C,MAAI;AACF,eAAW,cAAc,UAAU,IAAI;AACvC,WAAO;AAAA,EACT,QAAQ;AAEN,WAAO;AAAA,EACT;AACF;AAKO,SAAS,yBAAyB,UAA4B;AACnE,MAAI;AACF,UAAM,UAAU,aAAa,UAAU,OAAO;AAC9C,UAAM,SAASA,MAAU,OAAO;AAEhC,QAAI,CAAC,UAAU,OAAO,WAAW,YAAY,EAAE,cAAc,SAAS;AACpE,aAAO,MAAM,yBAAyB,QAAQ,2BAA2B;AACzE,aAAO,CAAA;AAAA,IACT;AAEA,UAAM,WAAW,OAAO;AACxB,WAAO,OAAO,KAAK,QAAQ;AAAA,EAC7B,SAAS,OAAO;AACd,WAAO,MAAM,iCAAiC,QAAQ,EAAE;AACxD,WAAO,MAAM,KAAK;AAClB,WAAO,CAAA;AAAA,EACT;AACF;"}
1
+ {"version":3,"file":"docker-compose-parser.js","sources":["../../../src/server/utils/docker-compose-parser.ts"],"sourcesContent":["import { constants, accessSync, readFileSync } from \"node:fs\";\nimport { delimiter } from \"node:path\";\nimport { parse as parseYaml } from \"yaml\";\nimport { logger } from \"../logger.ts\";\n\nconst COMPOSE_FILE_BASE_NAMES = [\"docker-compose\", \"compose\"] as const;\nconst COMPOSE_FILE_EXTENSIONS = [\".yml\", \".yaml\"] as const;\n\n/**\n * Get compose files from COMPOSE_FILE environment variable\n * Returns an array of file paths if the variable is set, null otherwise\n */\nexport function getComposeFilesFromEnv(): string[] | null {\n const composeFileEnv = process.env.COMPOSE_FILE;\n if (!composeFileEnv) {\n return null;\n }\n\n // Split by platform-specific path delimiter (: on Unix, ; on Windows)\n const files = composeFileEnv\n .split(delimiter)\n .map(f => f.trim())\n .filter(Boolean);\n\n return files.length > 0 ? files : null;\n}\n\n/**\n * Find the compose file in the current directory by trying all combinations\n * of base names and extensions.\n */\nexport function findComposeFile(): string | null {\n for (const baseName of COMPOSE_FILE_BASE_NAMES) {\n for (const ext of COMPOSE_FILE_EXTENSIONS) {\n const fileName = `${baseName}${ext}`;\n try {\n accessSync(fileName, constants.R_OK);\n return fileName;\n } catch {\n // File doesn't exist or isn't readable, continue searching\n }\n }\n }\n return null;\n}\n\n/**\n * Find the override file for a given compose file.\n * Docker Compose looks for an override file with the same base name and extension.\n * For example: docker-compose.yml -> docker-compose.override.yml\n */\nexport function findOverrideFile(composeFile: string): string | null {\n // Extract extension from the original file to maintain consistency\n const ext = composeFile.endsWith(\".yaml\") ? \".yaml\" : \".yml\";\n const baseName = composeFile.replace(/\\.(yaml|yml)$/, \"\");\n const overrideFile = `${baseName}.override${ext}`;\n\n try {\n accessSync(overrideFile, constants.R_OK);\n return overrideFile;\n } catch {\n // File doesn't exist or isn't readable\n return null;\n }\n}\n\n/**\n * Parse compose file and extract service names\n */\nexport function getDockerComposeServices(filePath: string): string[] {\n try {\n const content = readFileSync(filePath, \"utf-8\");\n const parsed = parseYaml(content);\n\n if (!parsed || typeof parsed !== \"object\" || !(\"services\" in parsed)) {\n logger.error(`Invalid compose file: ${filePath} - missing 'services' key`);\n return [];\n }\n\n const services = parsed.services as Record<string, unknown>;\n return Object.keys(services);\n } catch (error) {\n logger.error(`Failed to parse compose file: ${filePath}`);\n logger.error(error);\n return [];\n }\n}\n"],"names":["parseYaml"],"mappings":";;;;;;;;;;;;;AAKA,MAAM,0BAA0B,CAAC,kBAAkB,SAAS;AAC5D,MAAM,0BAA0B,CAAC,QAAQ,OAAO;AAMzC,SAAS,yBAA0C;AACxD,QAAM,iBAAiB,QAAQ,IAAI;AACnC,MAAI,CAAC,gBAAgB;AACnB,WAAO;AAAA,EACT;AAGA,QAAM,QAAQ,eACX,MAAM,SAAS,EACf,IAAI,CAAA,MAAK,EAAE,KAAA,CAAM,EACjB,OAAO,OAAO;AAEjB,SAAO,MAAM,SAAS,IAAI,QAAQ;AACpC;AAMO,SAAS,kBAAiC;AAC/C,aAAW,YAAY,yBAAyB;AAC9C,eAAW,OAAO,yBAAyB;AACzC,YAAM,WAAW,GAAG,QAAQ,GAAG,GAAG;AAClC,UAAI;AACF,mBAAW,UAAU,UAAU,IAAI;AACnC,eAAO;AAAA,MACT,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAOO,SAAS,iBAAiB,aAAoC;AAEnE,QAAM,MAAM,YAAY,SAAS,OAAO,IAAI,UAAU;AACtD,QAAM,WAAW,YAAY,QAAQ,iBAAiB,EAAE;AACxD,QAAM,eAAe,GAAG,QAAQ,YAAY,GAAG;AAE/C,MAAI;AACF,eAAW,cAAc,UAAU,IAAI;AACvC,WAAO;AAAA,EACT,QAAQ;AAEN,WAAO;AAAA,EACT;AACF;AAKO,SAAS,yBAAyB,UAA4B;AACnE,MAAI;AACF,UAAM,UAAU,aAAa,UAAU,OAAO;AAC9C,UAAM,SAASA,MAAU,OAAO;AAEhC,QAAI,CAAC,UAAU,OAAO,WAAW,YAAY,EAAE,cAAc,SAAS;AACpE,aAAO,MAAM,yBAAyB,QAAQ,2BAA2B;AACzE,aAAO,CAAA;AAAA,IACT;AAEA,UAAM,WAAW,OAAO;AACxB,WAAO,OAAO,KAAK,QAAQ;AAAA,EAC7B,SAAS,OAAO;AACd,WAAO,MAAM,iCAAiC,QAAQ,EAAE;AACxD,WAAO,MAAM,KAAK;AAClB,WAAO,CAAA;AAAA,EACT;AACF;"}
@@ -1,8 +1,17 @@
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] = "9ad90655-f477-4509-801c-7553667734cb", e._sentryDebugIdIdentifier = "sentry-dbid-9ad90655-f477-4509-801c-7553667734cb");
6
+ } catch (e2) {
7
+ }
8
+ }();
1
9
  import { execSync } from "node:child_process";
2
10
  import semver from "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/index.js";
3
11
  import { stringify } from "yaml";
4
12
  import { logger } from "../logger.js";
5
13
  import { getComposeFilesFromEnv, findComposeFile, findOverrideFile, getDockerComposeServices } from "./docker-compose-parser.js";
14
+ import "../../_virtual/_sentry-release-injection-file.js";
6
15
  const DOCKER_MIN_VERSION = "20.10.0";
7
16
  const DOCKER_HOST_INTERNAL = "host.docker.internal";
8
17
  const DOCKER_HOST_GATEWAY = "host-gateway";
@@ -1 +1 @@
1
- {"version":3,"file":"docker-compose.js","sources":["../../../src/server/utils/docker-compose.ts"],"sourcesContent":["import { execSync } from \"node:child_process\";\nimport semver from \"semver\";\nimport { stringify as stringifyYaml } from \"yaml\";\nimport { logger } from \"../logger.ts\";\nimport {\n findComposeFile,\n findOverrideFile,\n getComposeFilesFromEnv,\n getDockerComposeServices,\n} from \"./docker-compose-parser.ts\";\n\n// minimum version of Docker required to use host.docker.internal on linux\n/// https://docs.docker.com/engine/release-notes/20.10/#bug-fixes-and-enhancements-1\nexport const DOCKER_MIN_VERSION = \"20.10.0\";\nexport const DOCKER_HOST_INTERNAL = \"host.docker.internal\";\nexport const DOCKER_HOST_GATEWAY = \"host-gateway\";\n\ninterface DockerComposeConfig {\n composeFiles: string[]; // Array of compose files\n command: string[];\n serviceNames: string[];\n}\n\n/**\n * Execute a command and return the output, or null if it fails\n */\nfunction tryExec(command: string): string | null {\n try {\n return execSync(command, { encoding: \"utf-8\", stdio: [\"pipe\", \"pipe\", \"pipe\"] }).trim();\n } catch {\n return null;\n }\n}\n\n/**\n * Detect if Docker is installed and check its version\n */\nexport function detectDocker(): { version: string; valid: boolean } | null {\n const version = tryExec(\"docker --version\");\n if (!version) {\n return null;\n }\n\n const match = version.match(/Docker version ([\\d.]+)/);\n if (!match) {\n return null;\n }\n\n const versionNumber = match[1];\n const valid = semver.gte(versionNumber, DOCKER_MIN_VERSION);\n\n return { version: versionNumber, valid };\n}\n\n/**\n * Detect which compose command to use and its version\n * Follows the logic from sentry/self-hosted\n */\nfunction detectComposeCommand(): { command: string[]; version: string } | null {\n const composePluginVersion = tryExec(\"docker compose version --short\");\n const composeStandaloneVersion = tryExec(\"docker-compose version --short\");\n\n if (!composePluginVersion && !composeStandaloneVersion) {\n return null;\n }\n\n if (!composePluginVersion) {\n return { command: [\"docker-compose\"], version: composeStandaloneVersion! };\n }\n\n if (!composeStandaloneVersion) {\n return { command: [\"docker\", \"compose\"], version: composePluginVersion! };\n }\n\n // Use standalone if it's newer, otherwise prefer plugin\n const pluginVer = composePluginVersion.replace(/^v/, \"\");\n const standaloneVer = composeStandaloneVersion.replace(/^v/, \"\");\n\n if (semver.gt(standaloneVer, pluginVer)) {\n return { command: [\"docker-compose\"], version: composeStandaloneVersion };\n }\n\n return { command: [\"docker\", \"compose\"], version: composePluginVersion };\n}\n\n/**\n * Generate the override YAML for injecting Spotlight environment variables\n */\nfunction generateSpotlightOverrideYaml(serviceNames: string[]): string {\n const services: Record<string, { environment: string[]; extra_hosts: string[] }> = {};\n // Pass environment variables without values to inherit from parent process (run.ts)\n // so the values set in run.ts are propagated correctly\n for (const serviceName of serviceNames) {\n services[serviceName] = {\n environment: [\"SENTRY_SPOTLIGHT\", \"NEXT_PUBLIC_SENTRY_SPOTLIGHT\", \"SENTRY_TRACES_SAMPLE_RATE\"],\n extra_hosts: [`${DOCKER_HOST_INTERNAL}:${DOCKER_HOST_GATEWAY}`],\n };\n }\n\n return stringifyYaml({ services });\n}\n\n/**\n * Build the Docker Compose command with Spotlight environment injection\n */\nexport function buildDockerComposeCommand(config: DockerComposeConfig): {\n cmdArgs: string[];\n stdin: string;\n} {\n const cmdArgs = [...config.command];\n\n // Add -f for each compose file\n for (const file of config.composeFiles) {\n cmdArgs.push(\"-f\", file);\n }\n\n // Add our Spotlight override last\n cmdArgs.push(\"-f\", \"-\");\n cmdArgs.push(\"up\");\n\n const stdin = generateSpotlightOverrideYaml(config.serviceNames);\n\n return { cmdArgs, stdin };\n}\n\n/**\n * Detect and configure Docker Compose\n *\n * This function orchestrates the detection of Docker, Docker Compose,\n * compose files, and services to build a complete configuration.\n */\nexport function detectDockerCompose(): DockerComposeConfig | null {\n const docker = detectDocker();\n if (!docker) {\n logger.debug(\"Docker is not installed or not in PATH\");\n return null;\n }\n\n if (!docker.valid) {\n logger.error(`Docker version ${docker.version} does not meet the minimum required version ${DOCKER_MIN_VERSION}`);\n return null;\n }\n\n logger.debug(`Detected Docker version ${docker.version}`);\n\n const compose = detectComposeCommand();\n if (!compose) {\n logger.debug(\"Docker Compose is not installed or not in PATH\");\n return null;\n }\n\n logger.debug(`Detected Docker Compose version ${compose.version} (${compose.command.join(\" \")})`);\n\n // First check if COMPOSE_FILE env is set\n const composeFilesFromEnv = getComposeFilesFromEnv();\n let composeFiles: string[];\n\n if (composeFilesFromEnv) {\n // Use files from COMPOSE_FILE env variable\n composeFiles = composeFilesFromEnv;\n logger.debug(`Using COMPOSE_FILE environment variable: ${composeFiles.join(\", \")}`);\n } else {\n // Use existing findComposeFile() + findOverrideFile() logic\n const composeFile = findComposeFile();\n if (!composeFile) {\n logger.debug(\"No compose file found in current directory\");\n return null;\n }\n\n logger.debug(`Found compose file: ${composeFile}`);\n\n composeFiles = [composeFile];\n\n // Check for override file (only when COMPOSE_FILE is not set)\n const overrideFile = findOverrideFile(composeFile);\n if (overrideFile) {\n logger.debug(`Found override file: ${overrideFile}`);\n composeFiles.push(overrideFile);\n }\n }\n\n // Parse services from all compose files using the refactored function\n const serviceNamesSet = new Set<string>();\n for (const file of composeFiles) {\n const services = getDockerComposeServices(file);\n for (const service of services) {\n serviceNamesSet.add(service);\n }\n }\n\n const serviceNames = Array.from(serviceNamesSet);\n if (serviceNames.length === 0) {\n logger.debug(\"No services found in compose file(s)\");\n return null;\n }\n\n logger.debug(`Found ${serviceNames.length} service(s): ${serviceNames.join(\", \")}`);\n\n return {\n composeFiles,\n command: compose.command,\n serviceNames,\n };\n}\n"],"names":["stringifyYaml"],"mappings":"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"}
1
+ {"version":3,"file":"docker-compose.js","sources":["../../../src/server/utils/docker-compose.ts"],"sourcesContent":["import { execSync } from \"node:child_process\";\nimport semver from \"semver\";\nimport { stringify as stringifyYaml } from \"yaml\";\nimport { logger } from \"../logger.ts\";\nimport {\n findComposeFile,\n findOverrideFile,\n getComposeFilesFromEnv,\n getDockerComposeServices,\n} from \"./docker-compose-parser.ts\";\n\n// minimum version of Docker required to use host.docker.internal on linux\n/// https://docs.docker.com/engine/release-notes/20.10/#bug-fixes-and-enhancements-1\nexport const DOCKER_MIN_VERSION = \"20.10.0\";\nexport const DOCKER_HOST_INTERNAL = \"host.docker.internal\";\nexport const DOCKER_HOST_GATEWAY = \"host-gateway\";\n\ninterface DockerComposeConfig {\n composeFiles: string[]; // Array of compose files\n command: string[];\n serviceNames: string[];\n}\n\n/**\n * Execute a command and return the output, or null if it fails\n */\nfunction tryExec(command: string): string | null {\n try {\n return execSync(command, { encoding: \"utf-8\", stdio: [\"pipe\", \"pipe\", \"pipe\"] }).trim();\n } catch {\n return null;\n }\n}\n\n/**\n * Detect if Docker is installed and check its version\n */\nexport function detectDocker(): { version: string; valid: boolean } | null {\n const version = tryExec(\"docker --version\");\n if (!version) {\n return null;\n }\n\n const match = version.match(/Docker version ([\\d.]+)/);\n if (!match) {\n return null;\n }\n\n const versionNumber = match[1];\n const valid = semver.gte(versionNumber, DOCKER_MIN_VERSION);\n\n return { version: versionNumber, valid };\n}\n\n/**\n * Detect which compose command to use and its version\n * Follows the logic from sentry/self-hosted\n */\nfunction detectComposeCommand(): { command: string[]; version: string } | null {\n const composePluginVersion = tryExec(\"docker compose version --short\");\n const composeStandaloneVersion = tryExec(\"docker-compose version --short\");\n\n if (!composePluginVersion && !composeStandaloneVersion) {\n return null;\n }\n\n if (!composePluginVersion) {\n return { command: [\"docker-compose\"], version: composeStandaloneVersion! };\n }\n\n if (!composeStandaloneVersion) {\n return { command: [\"docker\", \"compose\"], version: composePluginVersion! };\n }\n\n // Use standalone if it's newer, otherwise prefer plugin\n const pluginVer = composePluginVersion.replace(/^v/, \"\");\n const standaloneVer = composeStandaloneVersion.replace(/^v/, \"\");\n\n if (semver.gt(standaloneVer, pluginVer)) {\n return { command: [\"docker-compose\"], version: composeStandaloneVersion };\n }\n\n return { command: [\"docker\", \"compose\"], version: composePluginVersion };\n}\n\n/**\n * Generate the override YAML for injecting Spotlight environment variables\n */\nfunction generateSpotlightOverrideYaml(serviceNames: string[]): string {\n const services: Record<string, { environment: string[]; extra_hosts: string[] }> = {};\n // Pass environment variables without values to inherit from parent process (run.ts)\n // so the values set in run.ts are propagated correctly\n for (const serviceName of serviceNames) {\n services[serviceName] = {\n environment: [\"SENTRY_SPOTLIGHT\", \"NEXT_PUBLIC_SENTRY_SPOTLIGHT\", \"SENTRY_TRACES_SAMPLE_RATE\"],\n extra_hosts: [`${DOCKER_HOST_INTERNAL}:${DOCKER_HOST_GATEWAY}`],\n };\n }\n\n return stringifyYaml({ services });\n}\n\n/**\n * Build the Docker Compose command with Spotlight environment injection\n */\nexport function buildDockerComposeCommand(config: DockerComposeConfig): {\n cmdArgs: string[];\n stdin: string;\n} {\n const cmdArgs = [...config.command];\n\n // Add -f for each compose file\n for (const file of config.composeFiles) {\n cmdArgs.push(\"-f\", file);\n }\n\n // Add our Spotlight override last\n cmdArgs.push(\"-f\", \"-\");\n cmdArgs.push(\"up\");\n\n const stdin = generateSpotlightOverrideYaml(config.serviceNames);\n\n return { cmdArgs, stdin };\n}\n\n/**\n * Detect and configure Docker Compose\n *\n * This function orchestrates the detection of Docker, Docker Compose,\n * compose files, and services to build a complete configuration.\n */\nexport function detectDockerCompose(): DockerComposeConfig | null {\n const docker = detectDocker();\n if (!docker) {\n logger.debug(\"Docker is not installed or not in PATH\");\n return null;\n }\n\n if (!docker.valid) {\n logger.error(`Docker version ${docker.version} does not meet the minimum required version ${DOCKER_MIN_VERSION}`);\n return null;\n }\n\n logger.debug(`Detected Docker version ${docker.version}`);\n\n const compose = detectComposeCommand();\n if (!compose) {\n logger.debug(\"Docker Compose is not installed or not in PATH\");\n return null;\n }\n\n logger.debug(`Detected Docker Compose version ${compose.version} (${compose.command.join(\" \")})`);\n\n // First check if COMPOSE_FILE env is set\n const composeFilesFromEnv = getComposeFilesFromEnv();\n let composeFiles: string[];\n\n if (composeFilesFromEnv) {\n // Use files from COMPOSE_FILE env variable\n composeFiles = composeFilesFromEnv;\n logger.debug(`Using COMPOSE_FILE environment variable: ${composeFiles.join(\", \")}`);\n } else {\n // Use existing findComposeFile() + findOverrideFile() logic\n const composeFile = findComposeFile();\n if (!composeFile) {\n logger.debug(\"No compose file found in current directory\");\n return null;\n }\n\n logger.debug(`Found compose file: ${composeFile}`);\n\n composeFiles = [composeFile];\n\n // Check for override file (only when COMPOSE_FILE is not set)\n const overrideFile = findOverrideFile(composeFile);\n if (overrideFile) {\n logger.debug(`Found override file: ${overrideFile}`);\n composeFiles.push(overrideFile);\n }\n }\n\n // Parse services from all compose files using the refactored function\n const serviceNamesSet = new Set<string>();\n for (const file of composeFiles) {\n const services = getDockerComposeServices(file);\n for (const service of services) {\n serviceNamesSet.add(service);\n }\n }\n\n const serviceNames = Array.from(serviceNamesSet);\n if (serviceNames.length === 0) {\n logger.debug(\"No services found in compose file(s)\");\n return null;\n }\n\n logger.debug(`Found ${serviceNames.length} service(s): ${serviceNames.join(\", \")}`);\n\n return {\n composeFiles,\n command: compose.command,\n serviceNames,\n };\n}\n"],"names":["stringifyYaml"],"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] = "ec6850ef-32dd-43f1-83d6-2cea9fb32ec9", e._sentryDebugIdIdentifier = "sentry-dbid-ec6850ef-32dd-43f1-83d6-2cea9fb32ec9");
6
+ } catch (e2) {
7
+ }
8
+ }();
1
9
  import "../parser/helpers.js";
2
10
  import { processEnvelope } from "../parser/processEnvelope.js";
11
+ import "../../_virtual/_sentry-release-injection-file.js";
3
12
  class EventContainer {
4
13
  contentType;
5
14
  data;
@@ -1 +1 @@
1
- {"version":3,"file":"eventContainer.js","sources":["../../../src/server/utils/eventContainer.ts"],"sourcesContent":["import { type ParsedEnvelope, processEnvelope } from \"../parser/index.ts\";\n\n/**\n * Container for events that flow through the sidecar\n * Provides lazy parsing only when needed (in debug mode)\n */\nexport class EventContainer {\n private contentType: string;\n private data: Buffer;\n private senderUserAgent?: string;\n private parsedEnvelope: ParsedEnvelope | null = null;\n private isParsed = false;\n\n constructor(contentType: string, data: Buffer, senderUserAgent?: string) {\n this.contentType = contentType;\n this.data = data;\n this.senderUserAgent = senderUserAgent;\n }\n\n /**\n * Get the content type of the event\n */\n getContentType(): string {\n return this.contentType;\n }\n\n /**\n * Get the raw data buffer\n */\n getData(): Buffer {\n return this.data;\n }\n\n /**\n * Get parsed envelope data (lazy parsing)\n */\n getParsedEnvelope(): ParsedEnvelope {\n // Parse once and cache the result\n if (!this.isParsed) {\n this.parsedEnvelope = processEnvelope(\n {\n contentType: this.contentType,\n data: this.data,\n },\n this.senderUserAgent,\n );\n this.isParsed = true;\n }\n\n return this.parsedEnvelope!;\n }\n\n /**\n * Get a summary of the event types in this container\n * Returns null if not a parseable envelope\n */\n getEventTypes(): string[] | null {\n const envelope = this.getParsedEnvelope();\n if (!envelope) return null;\n\n const eventTypes: string[] = [];\n for (const item of envelope.envelope[1]) {\n if (item[0].type) {\n eventTypes.push(item[0].type);\n }\n }\n\n return eventTypes;\n }\n\n /**\n * Get a formatted string of event types for logging\n */\n getEventTypesString(): string {\n const types = this.getEventTypes();\n if (!types || types.length === 0) {\n return this.contentType === \"application/x-sentry-envelope\" ? \"envelope\" : this.contentType;\n }\n return types.join(\"+\");\n }\n}\n"],"names":[],"mappings":";;AAMO,MAAM,eAAe;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAwC;AAAA,EACxC,WAAW;AAAA,EAEnB,YAAY,aAAqB,MAAc,iBAA0B;AACvE,SAAK,cAAc;AACnB,SAAK,OAAO;AACZ,SAAK,kBAAkB;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAyB;AACvB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,UAAkB;AAChB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoC;AAElC,QAAI,CAAC,KAAK,UAAU;AAClB,WAAK,iBAAiB;AAAA,QACpB;AAAA,UACE,aAAa,KAAK;AAAA,UAClB,MAAM,KAAK;AAAA,QAAA;AAAA,QAEb,KAAK;AAAA,MAAA;AAEP,WAAK,WAAW;AAAA,IAClB;AAEA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAiC;AAC/B,UAAM,WAAW,KAAK,kBAAA;AACtB,QAAI,CAAC,SAAU,QAAO;AAEtB,UAAM,aAAuB,CAAA;AAC7B,eAAW,QAAQ,SAAS,SAAS,CAAC,GAAG;AACvC,UAAI,KAAK,CAAC,EAAE,MAAM;AAChB,mBAAW,KAAK,KAAK,CAAC,EAAE,IAAI;AAAA,MAC9B;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,sBAA8B;AAC5B,UAAM,QAAQ,KAAK,cAAA;AACnB,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,aAAO,KAAK,gBAAgB,kCAAkC,aAAa,KAAK;AAAA,IAClF;AACA,WAAO,MAAM,KAAK,GAAG;AAAA,EACvB;AACF;"}
1
+ {"version":3,"file":"eventContainer.js","sources":["../../../src/server/utils/eventContainer.ts"],"sourcesContent":["import { type ParsedEnvelope, processEnvelope } from \"../parser/index.ts\";\n\n/**\n * Container for events that flow through the sidecar\n * Provides lazy parsing only when needed (in debug mode)\n */\nexport class EventContainer {\n private contentType: string;\n private data: Buffer;\n private senderUserAgent?: string;\n private parsedEnvelope: ParsedEnvelope | null = null;\n private isParsed = false;\n\n constructor(contentType: string, data: Buffer, senderUserAgent?: string) {\n this.contentType = contentType;\n this.data = data;\n this.senderUserAgent = senderUserAgent;\n }\n\n /**\n * Get the content type of the event\n */\n getContentType(): string {\n return this.contentType;\n }\n\n /**\n * Get the raw data buffer\n */\n getData(): Buffer {\n return this.data;\n }\n\n /**\n * Get parsed envelope data (lazy parsing)\n */\n getParsedEnvelope(): ParsedEnvelope {\n // Parse once and cache the result\n if (!this.isParsed) {\n this.parsedEnvelope = processEnvelope(\n {\n contentType: this.contentType,\n data: this.data,\n },\n this.senderUserAgent,\n );\n this.isParsed = true;\n }\n\n return this.parsedEnvelope!;\n }\n\n /**\n * Get a summary of the event types in this container\n * Returns null if not a parseable envelope\n */\n getEventTypes(): string[] | null {\n const envelope = this.getParsedEnvelope();\n if (!envelope) return null;\n\n const eventTypes: string[] = [];\n for (const item of envelope.envelope[1]) {\n if (item[0].type) {\n eventTypes.push(item[0].type);\n }\n }\n\n return eventTypes;\n }\n\n /**\n * Get a formatted string of event types for logging\n */\n getEventTypesString(): string {\n const types = this.getEventTypes();\n if (!types || types.length === 0) {\n return this.contentType === \"application/x-sentry-envelope\" ? \"envelope\" : this.contentType;\n }\n return types.join(\"+\");\n }\n}\n"],"names":[],"mappings":";;;;;;;;;;;AAMO,MAAM,eAAe;AAAA,EAClB;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAwC;AAAA,EACxC,WAAW;AAAA,EAEnB,YAAY,aAAqB,MAAc,iBAA0B;AACvE,SAAK,cAAc;AACnB,SAAK,OAAO;AACZ,SAAK,kBAAkB;AAAA,EACzB;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAyB;AACvB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,UAAkB;AAChB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoC;AAElC,QAAI,CAAC,KAAK,UAAU;AAClB,WAAK,iBAAiB;AAAA,QACpB;AAAA,UACE,aAAa,KAAK;AAAA,UAClB,MAAM,KAAK;AAAA,QAAA;AAAA,QAEb,KAAK;AAAA,MAAA;AAEP,WAAK,WAAW;AAAA,IAClB;AAEA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,gBAAiC;AAC/B,UAAM,WAAW,KAAK,kBAAA;AACtB,QAAI,CAAC,SAAU,QAAO;AAEtB,UAAM,aAAuB,CAAA;AAC7B,eAAW,QAAQ,SAAS,SAAS,CAAC,GAAG;AACvC,UAAI,KAAK,CAAC,EAAE,MAAM;AAChB,mBAAW,KAAK,KAAK,CAAC,EAAE,IAAI;AAAA,MAC9B;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,sBAA8B;AAC5B,UAAM,QAAQ,KAAK,cAAA;AACnB,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AAChC,aAAO,KAAK,gBAAgB,kCAAkC,aAAa,KAAK;AAAA,IAClF;AACA,WAAO,MAAM,KAAK,GAAG;AAAA,EACvB;AACF;"}
@@ -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] = "7395028c-d1eb-42b4-a00d-6217acb41881", e._sentryDebugIdIdentifier = "sentry-dbid-7395028c-d1eb-42b4-a00d-6217acb41881");
6
+ } catch (e2) {
7
+ }
8
+ }();
1
9
  import { get } from "node:http";
2
10
  import { startSpan } from "@sentry/node";
3
11
  import { SERVER_IDENTIFIER } from "../constants.js";
4
12
  import { logger } from "../logger.js";
13
+ import "../../_virtual/_sentry-release-injection-file.js";
5
14
  const withTracing = (fn, spanArgs = {}) => (...args) => startSpan({ name: fn.name, ...spanArgs }, () => fn(...args));
6
15
  const getSpotlightURL = (port, host = "localhost") => `http://${host}:${port}/stream`;
7
16
  function logSpotlightUrl(port) {
@@ -1 +1 @@
1
- {"version":3,"file":"extras.js","sources":["../../../src/server/utils/extras.ts"],"sourcesContent":["import { get } from \"node:http\";\nimport { startSpan } from \"@sentry/node\";\nimport { SERVER_IDENTIFIER } from \"../constants.ts\";\nimport { logger } from \"../logger.ts\";\n\nexport const withTracing =\n (fn: CallableFunction, spanArgs = {}) =>\n (...args: unknown[]) =>\n startSpan({ name: fn.name, ...spanArgs }, () => fn(...args));\n\nexport const getSpotlightURL = (port: number, host = \"localhost\") => `http://${host}:${port}/stream`;\n\nexport function logSpotlightUrl(port: number): void {\n logger.info(`Open http://localhost:${port} to see the Spotlight UI`);\n}\n\nexport const isValidPort = withTracing(\n (value: string | number) => {\n if (typeof value === \"string\") {\n const portNumber = Number(value);\n return /^\\d+$/.test(value) && portNumber > 0 && portNumber <= 65535;\n }\n return value > 0 && value <= 65535;\n },\n { name: \"isValidPort\", op: \"sidecar.server.portCheck\" },\n);\n\nexport const isSidecarRunning = withTracing(\n (port: string | number | undefined) =>\n new Promise(_resolve => {\n logger.debug(`Checking if we are already running on port ${port}`);\n const options = {\n hostname: \"localhost\",\n port: port,\n path: \"/health\",\n method: \"GET\",\n // This is only the socket timeout so set up\n // a connection timeout below manually\n timeout: 1000,\n headers: { Connection: \"close\" },\n };\n\n let timeoutId: NodeJS.Timeout | null = null;\n const healthReq = get(options, res => {\n const serverIdentifier = res.headers[\"x-powered-by\"];\n resolve(serverIdentifier === SERVER_IDENTIFIER);\n });\n const destroyHealthReq = () => !healthReq.destroyed && healthReq.destroy(new Error(\"Request timed out.\"));\n function resolve(value: boolean) {\n process.off(\"SIGINT\", destroyHealthReq);\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n _resolve(value);\n }\n process.on(\"SIGINT\", destroyHealthReq);\n timeoutId = setTimeout(destroyHealthReq, 2000);\n timeoutId.unref();\n healthReq.on(\"error\", () => {\n resolve(false);\n });\n healthReq.end();\n }),\n { name: \"isSidecarRunning\", op: \"sidecar.server.collideCheck\" },\n);\n"],"names":[],"mappings":";;;;AAKO,MAAM,cACX,CAAC,IAAsB,WAAW,CAAA,MAClC,IAAI,SACF,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAA,GAAY,MAAM,GAAG,GAAG,IAAI,CAAC;AAExD,MAAM,kBAAkB,CAAC,MAAc,OAAO,gBAAgB,UAAU,IAAI,IAAI,IAAI;AAEpF,SAAS,gBAAgB,MAAoB;AAClD,SAAO,KAAK,yBAAyB,IAAI,0BAA0B;AACrE;AAEO,MAAM,cAAc;AAAA,EACzB,CAAC,UAA2B;AAC1B,QAAI,OAAO,UAAU,UAAU;AAC7B,YAAM,aAAa,OAAO,KAAK;AAC/B,aAAO,QAAQ,KAAK,KAAK,KAAK,aAAa,KAAK,cAAc;AAAA,IAChE;AACA,WAAO,QAAQ,KAAK,SAAS;AAAA,EAC/B;AAAA,EACA,EAAE,MAAM,eAAe,IAAI,2BAAA;AAC7B;AAEO,MAAM,mBAAmB;AAAA,EAC9B,CAAC,SACC,IAAI,QAAQ,CAAA,aAAY;AACtB,WAAO,MAAM,8CAA8C,IAAI,EAAE;AACjE,UAAM,UAAU;AAAA,MACd,UAAU;AAAA,MACV;AAAA,MACA,MAAM;AAAA,MACN,QAAQ;AAAA;AAAA;AAAA,MAGR,SAAS;AAAA,MACT,SAAS,EAAE,YAAY,QAAA;AAAA,IAAQ;AAGjC,QAAI,YAAmC;AACvC,UAAM,YAAY,IAAI,SAAS,CAAA,QAAO;AACpC,YAAM,mBAAmB,IAAI,QAAQ,cAAc;AACnD,cAAQ,qBAAqB,iBAAiB;AAAA,IAChD,CAAC;AACD,UAAM,mBAAmB,MAAM,CAAC,UAAU,aAAa,UAAU,QAAQ,IAAI,MAAM,oBAAoB,CAAC;AACxG,aAAS,QAAQ,OAAgB;AAC/B,cAAQ,IAAI,UAAU,gBAAgB;AACtC,UAAI,WAAW;AACb,qBAAa,SAAS;AAAA,MACxB;AACA,eAAS,KAAK;AAAA,IAChB;AACA,YAAQ,GAAG,UAAU,gBAAgB;AACrC,gBAAY,WAAW,kBAAkB,GAAI;AAC7C,cAAU,MAAA;AACV,cAAU,GAAG,SAAS,MAAM;AAC1B,cAAQ,KAAK;AAAA,IACf,CAAC;AACD,cAAU,IAAA;AAAA,EACZ,CAAC;AAAA,EACH,EAAE,MAAM,oBAAoB,IAAI,8BAAA;AAClC;"}
1
+ {"version":3,"file":"extras.js","sources":["../../../src/server/utils/extras.ts"],"sourcesContent":["import { get } from \"node:http\";\nimport { startSpan } from \"@sentry/node\";\nimport { SERVER_IDENTIFIER } from \"../constants.ts\";\nimport { logger } from \"../logger.ts\";\n\nexport const withTracing =\n (fn: CallableFunction, spanArgs = {}) =>\n (...args: unknown[]) =>\n startSpan({ name: fn.name, ...spanArgs }, () => fn(...args));\n\nexport const getSpotlightURL = (port: number, host = \"localhost\") => `http://${host}:${port}/stream`;\n\nexport function logSpotlightUrl(port: number): void {\n logger.info(`Open http://localhost:${port} to see the Spotlight UI`);\n}\n\nexport const isValidPort = withTracing(\n (value: string | number) => {\n if (typeof value === \"string\") {\n const portNumber = Number(value);\n return /^\\d+$/.test(value) && portNumber > 0 && portNumber <= 65535;\n }\n return value > 0 && value <= 65535;\n },\n { name: \"isValidPort\", op: \"sidecar.server.portCheck\" },\n);\n\nexport const isSidecarRunning = withTracing(\n (port: string | number | undefined) =>\n new Promise(_resolve => {\n logger.debug(`Checking if we are already running on port ${port}`);\n const options = {\n hostname: \"localhost\",\n port: port,\n path: \"/health\",\n method: \"GET\",\n // This is only the socket timeout so set up\n // a connection timeout below manually\n timeout: 1000,\n headers: { Connection: \"close\" },\n };\n\n let timeoutId: NodeJS.Timeout | null = null;\n const healthReq = get(options, res => {\n const serverIdentifier = res.headers[\"x-powered-by\"];\n resolve(serverIdentifier === SERVER_IDENTIFIER);\n });\n const destroyHealthReq = () => !healthReq.destroyed && healthReq.destroy(new Error(\"Request timed out.\"));\n function resolve(value: boolean) {\n process.off(\"SIGINT\", destroyHealthReq);\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n _resolve(value);\n }\n process.on(\"SIGINT\", destroyHealthReq);\n timeoutId = setTimeout(destroyHealthReq, 2000);\n timeoutId.unref();\n healthReq.on(\"error\", () => {\n resolve(false);\n });\n healthReq.end();\n }),\n { name: \"isSidecarRunning\", op: \"sidecar.server.collideCheck\" },\n);\n"],"names":[],"mappings":";;;;;;;;;;;;;AAKO,MAAM,cACX,CAAC,IAAsB,WAAW,CAAA,MAClC,IAAI,SACF,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAA,GAAY,MAAM,GAAG,GAAG,IAAI,CAAC;AAExD,MAAM,kBAAkB,CAAC,MAAc,OAAO,gBAAgB,UAAU,IAAI,IAAI,IAAI;AAEpF,SAAS,gBAAgB,MAAoB;AAClD,SAAO,KAAK,yBAAyB,IAAI,0BAA0B;AACrE;AAEO,MAAM,cAAc;AAAA,EACzB,CAAC,UAA2B;AAC1B,QAAI,OAAO,UAAU,UAAU;AAC7B,YAAM,aAAa,OAAO,KAAK;AAC/B,aAAO,QAAQ,KAAK,KAAK,KAAK,aAAa,KAAK,cAAc;AAAA,IAChE;AACA,WAAO,QAAQ,KAAK,SAAS;AAAA,EAC/B;AAAA,EACA,EAAE,MAAM,eAAe,IAAI,2BAAA;AAC7B;AAEO,MAAM,mBAAmB;AAAA,EAC9B,CAAC,SACC,IAAI,QAAQ,CAAA,aAAY;AACtB,WAAO,MAAM,8CAA8C,IAAI,EAAE;AACjE,UAAM,UAAU;AAAA,MACd,UAAU;AAAA,MACV;AAAA,MACA,MAAM;AAAA,MACN,QAAQ;AAAA;AAAA;AAAA,MAGR,SAAS;AAAA,MACT,SAAS,EAAE,YAAY,QAAA;AAAA,IAAQ;AAGjC,QAAI,YAAmC;AACvC,UAAM,YAAY,IAAI,SAAS,CAAA,QAAO;AACpC,YAAM,mBAAmB,IAAI,QAAQ,cAAc;AACnD,cAAQ,qBAAqB,iBAAiB;AAAA,IAChD,CAAC;AACD,UAAM,mBAAmB,MAAM,CAAC,UAAU,aAAa,UAAU,QAAQ,IAAI,MAAM,oBAAoB,CAAC;AACxG,aAAS,QAAQ,OAAgB;AAC/B,cAAQ,IAAI,UAAU,gBAAgB;AACtC,UAAI,WAAW;AACb,qBAAa,SAAS;AAAA,MACxB;AACA,eAAS,KAAK;AAAA,IAChB;AACA,YAAQ,GAAG,UAAU,gBAAgB;AACrC,gBAAY,WAAW,kBAAkB,GAAI;AAC7C,cAAU,MAAA;AACV,cAAU,GAAG,SAAS,MAAM;AAC1B,cAAQ,KAAK;AAAA,IACf,CAAC;AACD,cAAU,IAAA;AAAA,EACZ,CAAC;AAAA,EACH,EAAE,MAAM,oBAAoB,IAAI,8BAAA;AAClC;"}
@@ -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] = "d11741e4-1ace-4036-a295-c5f232e3fa79", e._sentryDebugIdIdentifier = "sentry-dbid-d11741e4-1ace-4036-a295-c5f232e3fa79");
6
+ } catch (e2) {
7
+ }
8
+ }();
1
9
  import { createSpotlightBuffer } from "../sdk.js";
10
+ import "../../_virtual/_sentry-release-injection-file.js";
2
11
  const GLOBAL_BUFFER = createSpotlightBuffer();
3
12
  function getBuffer() {
4
13
  return GLOBAL_BUFFER;
@@ -1 +1 @@
1
- {"version":3,"file":"getBuffer.js","sources":["../../../src/server/utils/getBuffer.ts"],"sourcesContent":["import { createSpotlightBuffer } from \"../sdk.ts\";\n\nconst GLOBAL_BUFFER = createSpotlightBuffer();\n\nexport function getBuffer() {\n return GLOBAL_BUFFER;\n}\n"],"names":[],"mappings":";AAEA,MAAM,gBAAgB,sBAAA;AAEf,SAAS,YAAY;AAC1B,SAAO;AACT;"}
1
+ {"version":3,"file":"getBuffer.js","sources":["../../../src/server/utils/getBuffer.ts"],"sourcesContent":["import { createSpotlightBuffer } from \"../sdk.ts\";\n\nconst GLOBAL_BUFFER = createSpotlightBuffer();\n\nexport function getBuffer() {\n return GLOBAL_BUFFER;\n}\n"],"names":[],"mappings":";;;;;;;;;;AAEA,MAAM,gBAAgB,sBAAA;AAEf,SAAS,YAAY;AAC1B,SAAO;AACT;"}
@@ -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] = "b1428bd4-baad-4ded-9102-43d20659c966", e._sentryDebugIdIdentifier = "sentry-dbid-b1428bd4-baad-4ded-9102-43d20659c966");
6
+ } catch (e2) {
7
+ }
8
+ }();
9
+ import "../_virtual/_sentry-release-injection-file.js";
1
10
  const CONTEXT_LINES_ENDPOINT = "/contextlines";
2
11
  const RAW_TYPES = /* @__PURE__ */ new Set(["attachment", "replay_video", "statsd"]);
3
12
  const SENTRY_CONTENT_TYPE = "application/x-sentry-envelope";
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sources":["../../src/shared/constants.ts"],"sourcesContent":["// Shared constants used by both UI and server\nexport const CONTEXT_LINES_ENDPOINT = \"/contextlines\";\nexport const RAW_TYPES = new Set([\"attachment\", \"replay_video\", \"statsd\"]);\nexport const SENTRY_CONTENT_TYPE = \"application/x-sentry-envelope\";\n"],"names":[],"mappings":"AACO,MAAM,yBAAyB;AAC/B,MAAM,YAAY,oBAAI,IAAI,CAAC,cAAc,gBAAgB,QAAQ,CAAC;AAClE,MAAM,sBAAsB;"}
1
+ {"version":3,"file":"constants.js","sources":["../../src/shared/constants.ts"],"sourcesContent":["// Shared constants used by both UI and server\nexport const CONTEXT_LINES_ENDPOINT = \"/contextlines\";\nexport const RAW_TYPES = new Set([\"attachment\", \"replay_video\", \"statsd\"]);\nexport const SENTRY_CONTENT_TYPE = \"application/x-sentry-envelope\";\n"],"names":[],"mappings":";;;;;;;;;AACO,MAAM,yBAAyB;AAC/B,MAAM,YAAY,oBAAI,IAAI,CAAC,cAAc,gBAAgB,QAAQ,CAAC;AAClE,MAAM,sBAAsB;"}
@@ -1 +1,2 @@
1
- const e=Object.freeze(JSON.parse('{"colors":{"activityBar.background":"#23262E","activityBar.dropBackground":"#3a404e","activityBar.foreground":"#BAAFC0","activityBarBadge.background":"#00b0ff","activityBarBadge.foreground":"#20232B","badge.background":"#00b0ff","badge.foreground":"#20232B","button.background":"#00e8c5cc","button.hoverBackground":"#07d4b6cc","debugExceptionWidget.background":"#FF9F2E60","debugExceptionWidget.border":"#FF9F2E60","debugToolBar.background":"#20232A","diffEditor.insertedTextBackground":"#29BF1220","diffEditor.removedTextBackground":"#F21B3F20","dropdown.background":"#2b303b","dropdown.border":"#363c49","editor.background":"#23262E","editor.findMatchBackground":"#f39d1256","editor.findMatchBorder":"#f39d12b6","editor.findMatchHighlightBackground":"#59b8b377","editor.foreground":"#D5CED9","editor.hoverHighlightBackground":"#373941","editor.lineHighlightBackground":"#2e323d","editor.lineHighlightBorder":"#2e323d","editor.rangeHighlightBackground":"#372F3C","editor.selectionBackground":"#3D4352","editor.selectionHighlightBackground":"#4F435580","editor.wordHighlightBackground":"#4F4355","editor.wordHighlightStrongBackground":"#db45a280","editorBracketMatch.background":"#746f77","editorBracketMatch.border":"#746f77","editorCodeLens.foreground":"#746f77","editorCursor.foreground":"#FFF","editorError.foreground":"#FC644D","editorGroup.background":"#23262E","editorGroup.dropBackground":"#495061d7","editorGroupHeader.tabsBackground":"#23262E","editorGutter.addedBackground":"#9BC53DBB","editorGutter.deletedBackground":"#FC644DBB","editorGutter.modifiedBackground":"#5BC0EBBB","editorHoverWidget.background":"#373941","editorHoverWidget.border":"#00e8c5cc","editorIndentGuide.activeBackground":"#585C66","editorIndentGuide.background":"#333844","editorLineNumber.foreground":"#746f77","editorLink.activeForeground":"#3B79C7","editorOverviewRuler.border":"#1B1D23","editorRuler.foreground":"#4F4355","editorSuggestWidget.background":"#20232A","editorSuggestWidget.border":"#372F3C","editorSuggestWidget.selectedBackground":"#373941","editorWarning.foreground":"#FF9F2E","editorWhitespace.foreground":"#333844","editorWidget.background":"#20232A","errorForeground":"#FC644D","extensionButton.prominentBackground":"#07d4b6cc","extensionButton.prominentHoverBackground":"#07d4b5b0","focusBorder":"#746f77","foreground":"#D5CED9","gitDecoration.ignoredResourceForeground":"#555555","input.background":"#2b303b","input.placeholderForeground":"#746f77","inputOption.activeBorder":"#C668BA","inputValidation.errorBackground":"#D65343","inputValidation.errorBorder":"#D65343","inputValidation.infoBackground":"#3A6395","inputValidation.infoBorder":"#3A6395","inputValidation.warningBackground":"#DE9237","inputValidation.warningBorder":"#DE9237","list.activeSelectionBackground":"#23262E","list.activeSelectionForeground":"#00e8c6","list.dropBackground":"#3a404e","list.focusBackground":"#282b35","list.focusForeground":"#eee","list.hoverBackground":"#23262E","list.hoverForeground":"#eee","list.inactiveSelectionBackground":"#23262E","list.inactiveSelectionForeground":"#00e8c6","merge.currentContentBackground":"#F9267240","merge.currentHeaderBackground":"#F92672","merge.incomingContentBackground":"#3B79C740","merge.incomingHeaderBackground":"#3B79C7BB","minimapSlider.activeBackground":"#60698060","minimapSlider.background":"#58607460","minimapSlider.hoverBackground":"#60698060","notification.background":"#2d313b","notification.buttonBackground":"#00e8c5cc","notification.buttonHoverBackground":"#07d4b5b0","notification.errorBackground":"#FC644D","notification.infoBackground":"#00b0ff","notification.warningBackground":"#FF9F2E","panel.background":"#23262E","panel.border":"#1B1D23","panelTitle.activeBorder":"#23262E","panelTitle.inactiveForeground":"#746f77","peekView.border":"#23262E","peekViewEditor.background":"#1A1C22","peekViewEditor.matchHighlightBackground":"#FF9F2E60","peekViewResult.background":"#1A1C22","peekViewResult.matchHighlightBackground":"#FF9F2E60","peekViewResult.selectionBackground":"#23262E","peekViewTitle.background":"#1A1C22","peekViewTitleDescription.foreground":"#746f77","pickerGroup.border":"#4F4355","pickerGroup.foreground":"#746f77","progressBar.background":"#C668BA","scrollbar.shadow":"#23262E","scrollbarSlider.activeBackground":"#3A3F4CCC","scrollbarSlider.background":"#3A3F4C77","scrollbarSlider.hoverBackground":"#3A3F4CAA","selection.background":"#746f77","sideBar.background":"#23262E","sideBar.foreground":"#999999","sideBarSectionHeader.background":"#23262E","sideBarTitle.foreground":"#00e8c6","statusBar.background":"#23262E","statusBar.debuggingBackground":"#FC644D","statusBar.noFolderBackground":"#23262E","statusBarItem.activeBackground":"#00e8c5cc","statusBarItem.hoverBackground":"#07d4b5b0","statusBarItem.prominentBackground":"#07d4b5b0","statusBarItem.prominentHoverBackground":"#00e8c5cc","tab.activeBackground":"#23262e","tab.activeBorder":"#00e8c6","tab.activeForeground":"#00e8c6","tab.inactiveBackground":"#23262E","tab.inactiveForeground":"#746f77","terminal.ansiBlue":"#7cb7ff","terminal.ansiBrightBlue":"#7cb7ff","terminal.ansiBrightCyan":"#00e8c6","terminal.ansiBrightGreen":"#96E072","terminal.ansiBrightMagenta":"#ff00aa","terminal.ansiBrightRed":"#ee5d43","terminal.ansiBrightYellow":"#FFE66D","terminal.ansiCyan":"#00e8c6","terminal.ansiGreen":"#96E072","terminal.ansiMagenta":"#ff00aa","terminal.ansiRed":"#ee5d43","terminal.ansiYellow":"#FFE66D","terminalCursor.background":"#23262E","terminalCursor.foreground":"#FFE66D","titleBar.activeBackground":"#23262E","walkThrough.embeddedEditorBackground":"#23262E","widget.shadow":"#14151A"},"displayName":"Andromeeda","name":"andromeeda","semanticTokenColors":{"property.declaration:javascript":"#D5CED9","variable.defaultLibrary:javascript":"#f39c12"},"tokenColors":[{"settings":{"background":"#23262E","foreground":"#D5CED9"}},{"scope":["comment","markup.quote.markdown","meta.diff","meta.diff.header"],"settings":{"foreground":"#A0A1A7cc"}},{"scope":["meta.template.expression.js","constant.name.attribute.tag.jade","punctuation.definition.metadata.markdown","punctuation.definition.string.end.markdown","punctuation.definition.string.begin.markdown"],"settings":{"foreground":"#D5CED9"}},{"scope":["variable","support.variable","entity.name.tag.yaml","constant.character.entity.html","source.css entity.name.tag.reference","beginning.punctuation.definition.list.markdown","source.css entity.other.attribute-name.parent-selector","meta.structure.dictionary.json support.type.property-name"],"settings":{"foreground":"#00e8c6"}},{"scope":["markup.bold","constant.numeric","meta.group.regexp","constant.other.php","support.constant.ext.php","constant.other.class.php","support.constant.core.php","fenced_code.block.language","constant.other.caps.python","entity.other.attribute-name","support.type.exception.python","source.css keyword.other.unit","variable.other.object.property.js.jsx","variable.other.object.js"],"settings":{"foreground":"#f39c12"}},{"scope":["markup.list","text.xml string","entity.name.type","support.function","entity.other.attribute-name","meta.at-rule.extend","entity.name.function","entity.other.inherited-class","entity.other.keyframe-offset.css","text.html.markdown string.quoted","meta.function-call.generic.python","meta.at-rule.extend support.constant","entity.other.attribute-name.class.jade","source.css entity.other.attribute-name","text.xml punctuation.definition.string"],"settings":{"foreground":"#FFE66D"}},{"scope":["markup.heading","variable.language.this.js","variable.language.special.self.python"],"settings":{"foreground":"#ff00aa"}},{"scope":["punctuation.definition.interpolation","punctuation.section.embedded.end.php","punctuation.section.embedded.end.ruby","punctuation.section.embedded.begin.php","punctuation.section.embedded.begin.ruby","punctuation.definition.template-expression","entity.name.tag"],"settings":{"foreground":"#f92672"}},{"scope":["storage","keyword","meta.link","meta.image","markup.italic","source.js support.type"],"settings":{"foreground":"#c74ded"}},{"scope":["string.regexp","markup.changed"],"settings":{"foreground":"#7cb7ff"}},{"scope":["constant","support.class","keyword.operator","support.constant","text.html.markdown string","source.css support.function","source.php support.function","support.function.magic.python","entity.other.attribute-name.id","markup.deleted"],"settings":{"foreground":"#ee5d43"}},{"scope":["string","text.html.php string","markup.inline.raw","markup.inserted","punctuation.definition.string","punctuation.definition.markdown","text.html meta.embedded source.js string","text.html.php punctuation.definition.string","text.html meta.embedded source.js punctuation.definition.string","text.html punctuation.definition.string","text.html string"],"settings":{"foreground":"#96E072"}},{"scope":["entity.other.inherited-class"],"settings":{"fontStyle":"underline"}}],"type":"dark"}'));export{e as default};
1
+ (function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="2e6b0a1a-c019-4bb4-845a-24fe997c4d69",e._sentryDebugIdIdentifier="sentry-dbid-2e6b0a1a-c019-4bb4-845a-24fe997c4d69")}catch{}})();const o=Object.freeze(JSON.parse('{"colors":{"activityBar.background":"#23262E","activityBar.dropBackground":"#3a404e","activityBar.foreground":"#BAAFC0","activityBarBadge.background":"#00b0ff","activityBarBadge.foreground":"#20232B","badge.background":"#00b0ff","badge.foreground":"#20232B","button.background":"#00e8c5cc","button.hoverBackground":"#07d4b6cc","debugExceptionWidget.background":"#FF9F2E60","debugExceptionWidget.border":"#FF9F2E60","debugToolBar.background":"#20232A","diffEditor.insertedTextBackground":"#29BF1220","diffEditor.removedTextBackground":"#F21B3F20","dropdown.background":"#2b303b","dropdown.border":"#363c49","editor.background":"#23262E","editor.findMatchBackground":"#f39d1256","editor.findMatchBorder":"#f39d12b6","editor.findMatchHighlightBackground":"#59b8b377","editor.foreground":"#D5CED9","editor.hoverHighlightBackground":"#373941","editor.lineHighlightBackground":"#2e323d","editor.lineHighlightBorder":"#2e323d","editor.rangeHighlightBackground":"#372F3C","editor.selectionBackground":"#3D4352","editor.selectionHighlightBackground":"#4F435580","editor.wordHighlightBackground":"#4F4355","editor.wordHighlightStrongBackground":"#db45a280","editorBracketMatch.background":"#746f77","editorBracketMatch.border":"#746f77","editorCodeLens.foreground":"#746f77","editorCursor.foreground":"#FFF","editorError.foreground":"#FC644D","editorGroup.background":"#23262E","editorGroup.dropBackground":"#495061d7","editorGroupHeader.tabsBackground":"#23262E","editorGutter.addedBackground":"#9BC53DBB","editorGutter.deletedBackground":"#FC644DBB","editorGutter.modifiedBackground":"#5BC0EBBB","editorHoverWidget.background":"#373941","editorHoverWidget.border":"#00e8c5cc","editorIndentGuide.activeBackground":"#585C66","editorIndentGuide.background":"#333844","editorLineNumber.foreground":"#746f77","editorLink.activeForeground":"#3B79C7","editorOverviewRuler.border":"#1B1D23","editorRuler.foreground":"#4F4355","editorSuggestWidget.background":"#20232A","editorSuggestWidget.border":"#372F3C","editorSuggestWidget.selectedBackground":"#373941","editorWarning.foreground":"#FF9F2E","editorWhitespace.foreground":"#333844","editorWidget.background":"#20232A","errorForeground":"#FC644D","extensionButton.prominentBackground":"#07d4b6cc","extensionButton.prominentHoverBackground":"#07d4b5b0","focusBorder":"#746f77","foreground":"#D5CED9","gitDecoration.ignoredResourceForeground":"#555555","input.background":"#2b303b","input.placeholderForeground":"#746f77","inputOption.activeBorder":"#C668BA","inputValidation.errorBackground":"#D65343","inputValidation.errorBorder":"#D65343","inputValidation.infoBackground":"#3A6395","inputValidation.infoBorder":"#3A6395","inputValidation.warningBackground":"#DE9237","inputValidation.warningBorder":"#DE9237","list.activeSelectionBackground":"#23262E","list.activeSelectionForeground":"#00e8c6","list.dropBackground":"#3a404e","list.focusBackground":"#282b35","list.focusForeground":"#eee","list.hoverBackground":"#23262E","list.hoverForeground":"#eee","list.inactiveSelectionBackground":"#23262E","list.inactiveSelectionForeground":"#00e8c6","merge.currentContentBackground":"#F9267240","merge.currentHeaderBackground":"#F92672","merge.incomingContentBackground":"#3B79C740","merge.incomingHeaderBackground":"#3B79C7BB","minimapSlider.activeBackground":"#60698060","minimapSlider.background":"#58607460","minimapSlider.hoverBackground":"#60698060","notification.background":"#2d313b","notification.buttonBackground":"#00e8c5cc","notification.buttonHoverBackground":"#07d4b5b0","notification.errorBackground":"#FC644D","notification.infoBackground":"#00b0ff","notification.warningBackground":"#FF9F2E","panel.background":"#23262E","panel.border":"#1B1D23","panelTitle.activeBorder":"#23262E","panelTitle.inactiveForeground":"#746f77","peekView.border":"#23262E","peekViewEditor.background":"#1A1C22","peekViewEditor.matchHighlightBackground":"#FF9F2E60","peekViewResult.background":"#1A1C22","peekViewResult.matchHighlightBackground":"#FF9F2E60","peekViewResult.selectionBackground":"#23262E","peekViewTitle.background":"#1A1C22","peekViewTitleDescription.foreground":"#746f77","pickerGroup.border":"#4F4355","pickerGroup.foreground":"#746f77","progressBar.background":"#C668BA","scrollbar.shadow":"#23262E","scrollbarSlider.activeBackground":"#3A3F4CCC","scrollbarSlider.background":"#3A3F4C77","scrollbarSlider.hoverBackground":"#3A3F4CAA","selection.background":"#746f77","sideBar.background":"#23262E","sideBar.foreground":"#999999","sideBarSectionHeader.background":"#23262E","sideBarTitle.foreground":"#00e8c6","statusBar.background":"#23262E","statusBar.debuggingBackground":"#FC644D","statusBar.noFolderBackground":"#23262E","statusBarItem.activeBackground":"#00e8c5cc","statusBarItem.hoverBackground":"#07d4b5b0","statusBarItem.prominentBackground":"#07d4b5b0","statusBarItem.prominentHoverBackground":"#00e8c5cc","tab.activeBackground":"#23262e","tab.activeBorder":"#00e8c6","tab.activeForeground":"#00e8c6","tab.inactiveBackground":"#23262E","tab.inactiveForeground":"#746f77","terminal.ansiBlue":"#7cb7ff","terminal.ansiBrightBlue":"#7cb7ff","terminal.ansiBrightCyan":"#00e8c6","terminal.ansiBrightGreen":"#96E072","terminal.ansiBrightMagenta":"#ff00aa","terminal.ansiBrightRed":"#ee5d43","terminal.ansiBrightYellow":"#FFE66D","terminal.ansiCyan":"#00e8c6","terminal.ansiGreen":"#96E072","terminal.ansiMagenta":"#ff00aa","terminal.ansiRed":"#ee5d43","terminal.ansiYellow":"#FFE66D","terminalCursor.background":"#23262E","terminalCursor.foreground":"#FFE66D","titleBar.activeBackground":"#23262E","walkThrough.embeddedEditorBackground":"#23262E","widget.shadow":"#14151A"},"displayName":"Andromeeda","name":"andromeeda","semanticTokenColors":{"property.declaration:javascript":"#D5CED9","variable.defaultLibrary:javascript":"#f39c12"},"tokenColors":[{"settings":{"background":"#23262E","foreground":"#D5CED9"}},{"scope":["comment","markup.quote.markdown","meta.diff","meta.diff.header"],"settings":{"foreground":"#A0A1A7cc"}},{"scope":["meta.template.expression.js","constant.name.attribute.tag.jade","punctuation.definition.metadata.markdown","punctuation.definition.string.end.markdown","punctuation.definition.string.begin.markdown"],"settings":{"foreground":"#D5CED9"}},{"scope":["variable","support.variable","entity.name.tag.yaml","constant.character.entity.html","source.css entity.name.tag.reference","beginning.punctuation.definition.list.markdown","source.css entity.other.attribute-name.parent-selector","meta.structure.dictionary.json support.type.property-name"],"settings":{"foreground":"#00e8c6"}},{"scope":["markup.bold","constant.numeric","meta.group.regexp","constant.other.php","support.constant.ext.php","constant.other.class.php","support.constant.core.php","fenced_code.block.language","constant.other.caps.python","entity.other.attribute-name","support.type.exception.python","source.css keyword.other.unit","variable.other.object.property.js.jsx","variable.other.object.js"],"settings":{"foreground":"#f39c12"}},{"scope":["markup.list","text.xml string","entity.name.type","support.function","entity.other.attribute-name","meta.at-rule.extend","entity.name.function","entity.other.inherited-class","entity.other.keyframe-offset.css","text.html.markdown string.quoted","meta.function-call.generic.python","meta.at-rule.extend support.constant","entity.other.attribute-name.class.jade","source.css entity.other.attribute-name","text.xml punctuation.definition.string"],"settings":{"foreground":"#FFE66D"}},{"scope":["markup.heading","variable.language.this.js","variable.language.special.self.python"],"settings":{"foreground":"#ff00aa"}},{"scope":["punctuation.definition.interpolation","punctuation.section.embedded.end.php","punctuation.section.embedded.end.ruby","punctuation.section.embedded.begin.php","punctuation.section.embedded.begin.ruby","punctuation.definition.template-expression","entity.name.tag"],"settings":{"foreground":"#f92672"}},{"scope":["storage","keyword","meta.link","meta.image","markup.italic","source.js support.type"],"settings":{"foreground":"#c74ded"}},{"scope":["string.regexp","markup.changed"],"settings":{"foreground":"#7cb7ff"}},{"scope":["constant","support.class","keyword.operator","support.constant","text.html.markdown string","source.css support.function","source.php support.function","support.function.magic.python","entity.other.attribute-name.id","markup.deleted"],"settings":{"foreground":"#ee5d43"}},{"scope":["string","text.html.php string","markup.inline.raw","markup.inserted","punctuation.definition.string","punctuation.definition.markdown","text.html meta.embedded source.js string","text.html.php punctuation.definition.string","text.html meta.embedded source.js punctuation.definition.string","text.html punctuation.definition.string","text.html string"],"settings":{"foreground":"#96E072"}},{"scope":["entity.other.inherited-class"],"settings":{"fontStyle":"underline"}}],"type":"dark"}'));export{o as default};
2
+ //# sourceMappingURL=andromeeda.js.map