@spotlightjs/spotlight 4.5.1 → 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.
- package/dist/_virtual/_commonjsHelpers.js +18 -0
- package/dist/_virtual/_commonjsHelpers.js.map +1 -0
- package/dist/_virtual/_sentry-release-injection-file.js +11 -0
- package/dist/_virtual/_sentry-release-injection-file.js.map +1 -0
- package/dist/_virtual/cache.js +13 -0
- package/dist/_virtual/cache.js.map +1 -0
- package/dist/_virtual/index.js +13 -0
- package/dist/_virtual/index.js.map +1 -0
- package/dist/_virtual/re.js +13 -0
- package/dist/_virtual/re.js.map +1 -0
- package/dist/_virtual/uri.all.js +13 -0
- package/dist/_virtual/uri.all.js.map +1 -0
- package/dist/bootstrap.d.ts +0 -0
- package/dist/electron-index.d.ts +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/instrument.js +83 -0
- package/dist/instrument.js.map +1 -0
- package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.js +241 -0
- package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/client/index.js.map +1 -0
- package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/completable.js +64 -0
- package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/completable.js.map +1 -0
- package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js +196 -0
- package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js.map +1 -0
- package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js +604 -0
- package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/mcp.js.map +1 -0
- package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js +76 -0
- package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/server/stdio.js.map +1 -0
- package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js +391 -0
- package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js.map +1 -0
- package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js +41 -0
- package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/shared/stdio.js.map +1 -0
- package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js +1045 -0
- package/dist/node_modules/.pnpm/@modelcontextprotocol_sdk@1.16.0/node_modules/@modelcontextprotocol/sdk/dist/esm/types.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/ajv.js +365 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/ajv.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/cache.js +30 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/cache.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/async.js +74 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/async.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/error_classes.js +37 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/error_classes.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/formats.js +119 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/formats.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/index.js +288 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/index.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/resolve.js +228 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/resolve.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/rules.js +101 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/rules.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/schema_obj.js +19 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/schema_obj.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/ucs2length.js +25 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/ucs2length.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/util.js +192 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/compile/util.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/data.js +57 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/data.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/definition_schema.js +48 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/definition_schema.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limit.js +160 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limit.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limitItems.js +90 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limitItems.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limitLength.js +95 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limitLength.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limitProperties.js +90 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/_limitProperties.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/allOf.js +52 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/allOf.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/anyOf.js +83 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/anyOf.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/comment.js +26 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/comment.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/const.js +63 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/const.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/contains.js +88 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/contains.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/custom.js +230 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/custom.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/dependencies.js +171 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/dependencies.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/enum.js +72 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/enum.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/format.js +157 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/format.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/if.js +110 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/if.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/index.js +67 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/index.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/items.js +147 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/items.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/multipleOf.js +90 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/multipleOf.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/not.js +95 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/not.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/oneOf.js +81 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/oneOf.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/pattern.js +85 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/pattern.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/properties.js +322 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/properties.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/propertyNames.js +84 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/propertyNames.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/ref.js +134 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/ref.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/required.js +263 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/required.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/uniqueItems.js +95 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/uniqueItems.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/validate.js +464 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/dotjs/validate.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/keyword.js +108 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/keyword.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/refs/data.json.js +49 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/refs/data.json.js.map +1 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/refs/json-schema-draft-07.json.js +265 -0
- package/dist/node_modules/.pnpm/ajv@6.12.6/node_modules/ajv/lib/refs/json-schema-draft-07.json.js.map +1 -0
- package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js +41 -0
- package/dist/node_modules/.pnpm/fast-deep-equal@3.1.3/node_modules/fast-deep-equal/index.js.map +1 -0
- package/dist/node_modules/.pnpm/fast-json-stable-stringify@2.1.0/node_modules/fast-json-stable-stringify/index.js +62 -0
- package/dist/node_modules/.pnpm/fast-json-stable-stringify@2.1.0/node_modules/fast-json-stable-stringify/index.js.map +1 -0
- package/dist/node_modules/.pnpm/hono@4.10.3/node_modules/hono/dist/helper/streaming/sse.js +32 -0
- package/dist/node_modules/.pnpm/hono@4.10.3/node_modules/hono/dist/helper/streaming/sse.js.map +1 -0
- package/dist/node_modules/.pnpm/hono@4.10.3/node_modules/hono/dist/middleware/cors/index.js +95 -0
- package/dist/node_modules/.pnpm/hono@4.10.3/node_modules/hono/dist/middleware/cors/index.js.map +1 -0
- package/dist/node_modules/.pnpm/hono@4.10.3/node_modules/hono/dist/utils/html.js +43 -0
- package/dist/node_modules/.pnpm/hono@4.10.3/node_modules/hono/dist/utils/html.js.map +1 -0
- package/dist/node_modules/.pnpm/hono@4.10.3/node_modules/hono/dist/utils/stream.js +77 -0
- package/dist/node_modules/.pnpm/hono@4.10.3/node_modules/hono/dist/utils/stream.js.map +1 -0
- package/dist/node_modules/.pnpm/json-schema-traverse@0.4.1/node_modules/json-schema-traverse/index.js +92 -0
- package/dist/node_modules/.pnpm/json-schema-traverse@0.4.1/node_modules/json-schema-traverse/index.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/comparator.js +132 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/comparator.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/range.js +397 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/range.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/semver.js +286 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/classes/semver.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/clean.js +20 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/clean.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/cmp.js +62 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/cmp.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/coerce.js +55 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/coerce.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-build.js +21 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-build.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-loose.js +17 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare-loose.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare.js +17 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/compare.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/diff.js +51 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/diff.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/eq.js +17 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/eq.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gt.js +17 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gt.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gte.js +17 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/gte.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/inc.js +31 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/inc.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lt.js +17 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lt.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lte.js +17 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/lte.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/major.js +17 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/major.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/minor.js +17 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/minor.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/neq.js +17 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/neq.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/parse.js +29 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/parse.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/patch.js +17 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/patch.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/prerelease.js +20 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/prerelease.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rcompare.js +17 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rcompare.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rsort.js +17 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/rsort.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/satisfies.js +24 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/satisfies.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/sort.js +17 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/sort.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/valid.js +20 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/functions/valid.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/index.js +143 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/index.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/constants.js +38 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/constants.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/debug.js +16 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/debug.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/identifiers.js +31 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/identifiers.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/lrucache.js +44 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/lrucache.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/parse-options.js +25 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/parse-options.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/re.js +100 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/internal/re.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/gtr.js +17 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/gtr.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/intersects.js +21 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/intersects.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/ltr.js +17 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/ltr.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/max-satisfying.js +37 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/max-satisfying.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-satisfying.js +37 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-satisfying.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-version.js +66 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/min-version.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/outside.js +83 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/outside.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/simplify.js +58 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/simplify.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/subset.js +172 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/subset.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/to-comparators.js +17 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/to-comparators.js.map +1 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/valid.js +23 -0
- package/dist/node_modules/.pnpm/semver@7.7.3/node_modules/semver/ranges/valid.js.map +1 -0
- package/dist/node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/dist/es5/uri.all.js +1035 -0
- package/dist/node_modules/.pnpm/uri-js@4.4.1/node_modules/uri-js/dist/es5/uri.all.js.map +1 -0
- 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 +46 -0
- 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 -0
- 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 +32 -0
- 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 -0
- 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 +27 -0
- 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 -0
- 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 +20 -0
- 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 -0
- 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 +70 -0
- 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 -0
- 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 +27 -0
- 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 -0
- 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 +37 -0
- 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 -0
- 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 +57 -0
- 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 -0
- 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 +17 -0
- 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 -0
- 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 +16 -0
- 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 -0
- 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 +16 -0
- 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 -0
- 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 +70 -0
- 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 -0
- 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 +19 -0
- 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 -0
- 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 +17 -0
- 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 -0
- 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 +18 -0
- 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 -0
- 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 +53 -0
- 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 -0
- 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 +30 -0
- 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 -0
- 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 +38 -0
- 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 -0
- 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 +24 -0
- 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 -0
- 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 +21 -0
- 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 -0
- 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 +20 -0
- 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 -0
- 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 +44 -0
- 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 -0
- 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 +60 -0
- 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 -0
- 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 +81 -0
- 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 -0
- 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 +31 -0
- 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 -0
- 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 +31 -0
- 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 -0
- 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 +16 -0
- 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 -0
- 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 +16 -0
- 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 -0
- 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 +67 -0
- 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 -0
- 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 +32 -0
- 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 -0
- 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 +330 -0
- 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 -0
- 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 +39 -0
- 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 -0
- 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 +18 -0
- 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 -0
- 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 +80 -0
- 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 -0
- 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 +16 -0
- 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 -0
- 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 +117 -0
- 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 -0
- 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 +75 -0
- 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 -0
- package/dist/run.d.ts +0 -1
- package/dist/run.js +29 -51775
- package/dist/run.js.map +1 -0
- package/dist/sentry-config.d.ts +7 -0
- package/dist/sentry-config.js +20 -0
- package/dist/sentry-config.js.map +1 -0
- package/dist/server/cli/help.d.ts +1 -0
- package/dist/server/cli/help.js +55 -0
- package/dist/server/cli/help.js.map +1 -0
- package/dist/server/cli/mcp.d.ts +2 -0
- package/dist/server/cli/mcp.js +117 -0
- package/dist/server/cli/mcp.js.map +1 -0
- package/dist/server/cli/run.d.ts +2 -0
- package/dist/server/cli/run.js +296 -0
- package/dist/server/cli/run.js.map +1 -0
- package/dist/server/cli/server.d.ts +2 -0
- package/dist/server/cli/server.js +23 -0
- package/dist/server/cli/server.js.map +1 -0
- package/dist/server/cli/tail.d.ts +8 -0
- package/dist/server/cli/tail.js +113 -0
- package/dist/server/cli/tail.js.map +1 -0
- package/dist/server/cli.d.ts +17 -0
- package/dist/server/cli.js +146 -0
- package/dist/server/cli.js.map +1 -0
- package/dist/server/constants.d.ts +3 -0
- package/dist/server/constants.js +16 -0
- package/dist/server/constants.js.map +1 -0
- package/dist/server/formatters/human/errors.d.ts +6 -0
- package/dist/server/formatters/human/errors.js +37 -0
- package/dist/server/formatters/human/errors.js.map +1 -0
- package/dist/server/formatters/human/index.d.ts +2 -0
- package/dist/server/formatters/human/index.js +22 -0
- package/dist/server/formatters/human/index.js.map +1 -0
- package/dist/server/formatters/human/logs.d.ts +6 -0
- package/dist/server/formatters/human/logs.js +32 -0
- package/dist/server/formatters/human/logs.js.map +1 -0
- package/dist/server/formatters/human/traces.d.ts +6 -0
- package/dist/server/formatters/human/traces.js +38 -0
- package/dist/server/formatters/human/traces.js.map +1 -0
- package/dist/server/formatters/human/utils.d.ts +43 -0
- package/dist/server/formatters/human/utils.js +122 -0
- package/dist/server/formatters/human/utils.js.map +1 -0
- package/dist/server/formatters/index.d.ts +11 -0
- package/dist/server/formatters/index.js +28 -0
- package/dist/server/formatters/index.js.map +1 -0
- package/dist/server/formatters/json/errors.d.ts +3 -0
- package/dist/server/formatters/json/errors.js +17 -0
- package/dist/server/formatters/json/errors.js.map +1 -0
- package/dist/server/formatters/json/index.d.ts +2 -0
- package/dist/server/formatters/json/index.js +22 -0
- package/dist/server/formatters/json/index.js.map +1 -0
- package/dist/server/formatters/json/logs.d.ts +3 -0
- package/dist/server/formatters/json/logs.js +20 -0
- package/dist/server/formatters/json/logs.js.map +1 -0
- package/dist/server/formatters/json/traces.d.ts +3 -0
- package/dist/server/formatters/json/traces.js +17 -0
- package/dist/server/formatters/json/traces.js.map +1 -0
- package/dist/server/formatters/logfmt/errors.d.ts +3 -0
- package/dist/server/formatters/logfmt/errors.js +18 -0
- package/dist/server/formatters/logfmt/errors.js.map +1 -0
- package/dist/server/formatters/logfmt/index.d.ts +2 -0
- package/dist/server/formatters/logfmt/index.js +22 -0
- package/dist/server/formatters/logfmt/index.js.map +1 -0
- package/dist/server/formatters/logfmt/logs.d.ts +3 -0
- package/dist/server/formatters/logfmt/logs.js +36 -0
- package/dist/server/formatters/logfmt/logs.js.map +1 -0
- package/dist/server/formatters/logfmt/traces.d.ts +3 -0
- package/dist/server/formatters/logfmt/traces.js +18 -0
- package/dist/server/formatters/logfmt/traces.js.map +1 -0
- package/dist/server/formatters/md/errors.d.ts +10 -0
- package/dist/server/formatters/md/errors.js +86 -0
- package/dist/server/formatters/md/errors.js.map +1 -0
- package/dist/server/formatters/md/event.d.ts +11 -0
- package/dist/server/formatters/md/event.js +371 -0
- package/dist/server/formatters/md/event.js.map +1 -0
- package/dist/server/formatters/md/index.d.ts +2 -0
- package/dist/server/formatters/md/index.js +22 -0
- package/dist/server/formatters/md/index.js.map +1 -0
- package/dist/server/formatters/md/logs.d.ts +7 -0
- package/dist/server/formatters/md/logs.js +48 -0
- package/dist/server/formatters/md/logs.js.map +1 -0
- package/dist/server/formatters/md/traces.d.ts +87 -0
- package/dist/server/formatters/md/traces.js +309 -0
- package/dist/server/formatters/md/traces.js.map +1 -0
- package/dist/server/formatters/schema.d.ts +6810 -0
- package/dist/server/formatters/shared/data-builders.d.ts +15 -0
- package/dist/server/formatters/shared/data-builders.js +129 -0
- package/dist/server/formatters/shared/data-builders.js.map +1 -0
- package/dist/server/formatters/types.d.ts +33 -0
- package/dist/server/formatters/types.js +14 -0
- package/dist/server/formatters/types.js.map +1 -0
- package/dist/server/formatters/utils.d.ts +25 -0
- package/dist/server/formatters/utils.js +55 -0
- package/dist/server/formatters/utils.js.map +1 -0
- package/dist/server/handlers/fileToServe.d.ts +2 -0
- package/dist/server/handlers/fileToServe.js +36 -0
- package/dist/server/handlers/fileToServe.js.map +1 -0
- package/dist/server/handlers/index.d.ts +1 -0
- package/dist/server/logger.d.ts +5 -0
- package/dist/server/logger.js +40 -0
- package/dist/server/logger.js.map +1 -0
- package/dist/server/main.d.ts +6 -0
- package/dist/server/main.js +193 -0
- package/dist/server/main.js.map +1 -0
- package/dist/server/mcp/constants.d.ts +3 -0
- package/dist/server/mcp/constants.js +88 -0
- package/dist/server/mcp/constants.js.map +1 -0
- package/dist/server/mcp/mcp.d.ts +31 -0
- package/dist/server/mcp/mcp.js +404 -0
- package/dist/server/mcp/mcp.js.map +1 -0
- package/dist/server/messageBuffer.d.ts +40 -0
- package/dist/server/messageBuffer.js +288 -0
- package/dist/server/messageBuffer.js.map +1 -0
- package/dist/server/parser/helpers.d.ts +10 -0
- package/dist/server/parser/helpers.js +41 -0
- package/dist/server/parser/helpers.js.map +1 -0
- package/dist/server/parser/index.d.ts +3 -0
- package/dist/server/parser/processEnvelope.d.ts +17 -0
- package/dist/server/parser/processEnvelope.js +95 -0
- package/dist/server/parser/processEnvelope.js.map +1 -0
- package/dist/server/parser/types.d.ts +198 -0
- package/dist/server/routes/clear.d.ts +3 -0
- package/dist/server/routes/clear.js +27 -0
- package/dist/server/routes/clear.js.map +1 -0
- package/dist/server/routes/contextlines/index.d.ts +3 -0
- package/dist/server/routes/contextlines/index.js +53 -0
- package/dist/server/routes/contextlines/index.js.map +1 -0
- package/dist/server/routes/contextlines/utils.d.ts +20 -0
- package/dist/server/routes/contextlines/utils.js +92 -0
- package/dist/server/routes/contextlines/utils.js.map +1 -0
- package/dist/server/routes/health.d.ts +3 -0
- package/dist/server/routes/health.js +16 -0
- package/dist/server/routes/health.js.map +1 -0
- package/dist/server/routes/index.d.ts +3 -0
- package/dist/server/routes/index.js +28 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/mcp.d.ts +3 -0
- package/dist/server/routes/mcp.js +29 -0
- package/dist/server/routes/mcp.js.map +1 -0
- package/dist/server/routes/open.d.ts +4 -0
- package/dist/server/routes/open.js +34 -0
- package/dist/server/routes/open.js.map +1 -0
- package/dist/server/routes/stream/debugLogging.d.ts +11 -0
- package/dist/server/routes/stream/debugLogging.js +68 -0
- package/dist/server/routes/stream/debugLogging.js.map +1 -0
- package/dist/server/routes/stream/index.d.ts +34 -0
- package/dist/server/routes/stream/index.js +110 -0
- package/dist/server/routes/stream/index.js.map +1 -0
- package/dist/server/routes/stream/streaming.d.ts +3 -0
- package/dist/server/routes/stream/streaming.js +35 -0
- package/dist/server/routes/stream/streaming.js.map +1 -0
- package/dist/server/routes/stream/userAgent.d.ts +11 -0
- package/dist/server/routes/stream/userAgent.js +34 -0
- package/dist/server/routes/stream/userAgent.js.map +1 -0
- package/dist/server/sdk.d.ts +15 -0
- package/dist/server/sdk.js +41 -0
- package/dist/server/sdk.js.map +1 -0
- package/dist/server/types/cli.d.ts +15 -0
- package/dist/server/types/env.d.ts +10 -0
- package/dist/server/types/index.d.ts +2 -0
- package/dist/server/types/utils.d.ts +56 -0
- package/dist/server/utils/cors.d.ts +42 -0
- package/dist/server/utils/cors.js +195 -0
- package/dist/server/utils/cors.js.map +1 -0
- package/dist/server/utils/docker-compose-parser.d.ts +20 -0
- package/dist/server/utils/docker-compose-parser.js +70 -0
- package/dist/server/utils/docker-compose-parser.js.map +1 -0
- package/dist/server/utils/docker-compose.d.ts +30 -0
- package/dist/server/utils/docker-compose.js +140 -0
- package/dist/server/utils/docker-compose.js.map +1 -0
- package/dist/server/utils/eventContainer.d.ts +34 -0
- package/dist/server/utils/eventContainer.js +80 -0
- package/dist/server/utils/eventContainer.js.map +1 -0
- package/dist/server/utils/extras.d.ts +5 -0
- package/dist/server/utils/extras.js +72 -0
- package/dist/server/utils/extras.js.map +1 -0
- package/dist/server/utils/getBuffer.d.ts +1 -0
- package/dist/server/utils/getBuffer.js +18 -0
- package/dist/server/utils/getBuffer.js.map +1 -0
- package/dist/server/utils/index.d.ts +4 -0
- package/dist/shared/constants.d.ts +3 -0
- package/dist/shared/constants.js +18 -0
- package/dist/shared/constants.js.map +1 -0
- package/dist/ui/assets/andromeeda.js +2 -0
- package/dist/ui/assets/andromeeda.js.map +1 -0
- package/dist/ui/assets/angular-html.js +2 -0
- package/dist/ui/assets/angular-html.js.map +1 -0
- package/dist/ui/assets/angular-ts.js +2 -0
- package/dist/ui/assets/angular-ts.js.map +1 -0
- package/dist/ui/assets/astro.js +2 -0
- package/dist/ui/assets/astro.js.map +1 -0
- package/dist/ui/assets/aurora-x.js +2 -0
- package/dist/ui/assets/aurora-x.js.map +1 -0
- package/dist/ui/assets/ayu-dark.js +2 -0
- package/dist/ui/assets/ayu-dark.js.map +1 -0
- package/dist/ui/assets/blade.js +2 -0
- package/dist/ui/assets/blade.js.map +1 -0
- package/dist/ui/assets/c.js +2 -0
- package/dist/ui/assets/c.js.map +1 -0
- package/dist/ui/assets/catppuccin-frappe.js +2 -0
- package/dist/ui/assets/catppuccin-frappe.js.map +1 -0
- package/dist/ui/assets/catppuccin-latte.js +2 -0
- package/dist/ui/assets/catppuccin-latte.js.map +1 -0
- package/dist/ui/assets/catppuccin-macchiato.js +2 -0
- package/dist/ui/assets/catppuccin-macchiato.js.map +1 -0
- package/dist/ui/assets/catppuccin-mocha.js +2 -0
- package/dist/ui/assets/catppuccin-mocha.js.map +1 -0
- package/dist/ui/assets/coffee.js +2 -0
- package/dist/ui/assets/coffee.js.map +1 -0
- package/dist/ui/assets/cpp.js +2 -0
- package/dist/ui/assets/cpp.js.map +1 -0
- package/dist/ui/assets/css.js +2 -0
- package/dist/ui/assets/css.js.map +1 -0
- package/dist/ui/assets/dark-plus.js +2 -0
- package/dist/ui/assets/dark-plus.js.map +1 -0
- package/dist/ui/assets/dracula-soft.js +2 -0
- package/dist/ui/assets/dracula-soft.js.map +1 -0
- package/dist/ui/assets/dracula.js +2 -0
- package/dist/ui/assets/dracula.js.map +1 -0
- package/dist/ui/assets/everforest-dark.js +2 -0
- package/dist/ui/assets/everforest-dark.js.map +1 -0
- package/dist/ui/assets/everforest-light.js +2 -0
- package/dist/ui/assets/everforest-light.js.map +1 -0
- package/dist/ui/assets/firefox.svg +105 -0
- package/dist/ui/assets/github-dark-default.js +2 -0
- package/dist/ui/assets/github-dark-default.js.map +1 -0
- package/dist/ui/assets/github-dark-dimmed.js +2 -0
- package/dist/ui/assets/github-dark-dimmed.js.map +1 -0
- package/dist/ui/assets/github-dark-high-contrast.js +2 -0
- package/dist/ui/assets/github-dark-high-contrast.js.map +1 -0
- package/dist/ui/assets/github-dark.js +2 -0
- package/dist/ui/assets/github-dark.js.map +1 -0
- package/dist/ui/assets/github-light-default.js +2 -0
- package/dist/ui/assets/github-light-default.js.map +1 -0
- package/dist/ui/assets/github-light-high-contrast.js +2 -0
- package/dist/ui/assets/github-light-high-contrast.js.map +1 -0
- package/dist/ui/assets/github-light.js +2 -0
- package/dist/ui/assets/github-light.js.map +1 -0
- package/dist/ui/assets/glsl.js +2 -0
- package/dist/ui/assets/glsl.js.map +1 -0
- package/dist/ui/assets/graphql.js +2 -0
- package/dist/ui/assets/graphql.js.map +1 -0
- package/dist/ui/assets/gruvbox-dark-hard.js +2 -0
- package/dist/ui/assets/gruvbox-dark-hard.js.map +1 -0
- package/dist/ui/assets/gruvbox-dark-medium.js +2 -0
- package/dist/ui/assets/gruvbox-dark-medium.js.map +1 -0
- package/dist/ui/assets/gruvbox-dark-soft.js +2 -0
- package/dist/ui/assets/gruvbox-dark-soft.js.map +1 -0
- package/dist/ui/assets/gruvbox-light-hard.js +2 -0
- package/dist/ui/assets/gruvbox-light-hard.js.map +1 -0
- package/dist/ui/assets/gruvbox-light-medium.js +2 -0
- package/dist/ui/assets/gruvbox-light-medium.js.map +1 -0
- package/dist/ui/assets/gruvbox-light-soft.js +2 -0
- package/dist/ui/assets/gruvbox-light-soft.js.map +1 -0
- package/dist/ui/assets/haml.js +2 -0
- package/dist/ui/assets/haml.js.map +1 -0
- package/dist/ui/assets/handlebars.js +2 -0
- package/dist/ui/assets/handlebars.js.map +1 -0
- package/dist/ui/assets/houston.js +2 -0
- package/dist/ui/assets/houston.js.map +1 -0
- package/dist/ui/assets/html-derivative.js +2 -0
- package/dist/ui/assets/html-derivative.js.map +1 -0
- package/dist/ui/assets/html.js +2 -0
- package/dist/ui/assets/html.js.map +1 -0
- package/dist/ui/assets/http.js +2 -0
- package/dist/ui/assets/http.js.map +1 -0
- package/dist/ui/assets/imba.js +2 -0
- package/dist/ui/assets/imba.js.map +1 -0
- package/dist/ui/assets/index.js +153 -0
- package/dist/ui/assets/index.js.map +1 -0
- package/dist/ui/assets/index2.js +2 -0
- package/dist/ui/assets/index2.js.map +1 -0
- package/dist/ui/assets/instrumentation.js +25 -0
- package/dist/ui/assets/instrumentation.js.map +1 -0
- package/dist/ui/assets/java.js +2 -0
- package/dist/ui/assets/java.js.map +1 -0
- package/dist/ui/assets/javascript.js +2 -0
- package/dist/ui/assets/javascript.js.map +1 -0
- package/dist/ui/assets/jinja.js +2 -0
- package/dist/ui/assets/jinja.js.map +1 -0
- package/dist/ui/assets/jison.js +2 -0
- package/dist/ui/assets/jison.js.map +1 -0
- package/dist/ui/assets/json.js +2 -0
- package/dist/ui/assets/json.js.map +1 -0
- package/dist/ui/assets/json5.js +2 -0
- package/dist/ui/assets/json5.js.map +1 -0
- package/dist/ui/assets/jsonc.js +2 -0
- package/dist/ui/assets/jsonc.js.map +1 -0
- package/dist/ui/assets/jsonl.js +2 -0
- package/dist/ui/assets/jsonl.js.map +1 -0
- package/dist/ui/assets/jsx.js +2 -0
- package/dist/ui/assets/jsx.js.map +1 -0
- package/dist/ui/assets/julia.js +2 -0
- package/dist/ui/assets/julia.js.map +1 -0
- package/dist/ui/assets/kanagawa-dragon.js +2 -0
- package/dist/ui/assets/kanagawa-dragon.js.map +1 -0
- package/dist/ui/assets/kanagawa-lotus.js +2 -0
- package/dist/ui/assets/kanagawa-lotus.js.map +1 -0
- package/dist/ui/assets/kanagawa-wave.js +2 -0
- package/dist/ui/assets/kanagawa-wave.js.map +1 -0
- package/dist/ui/assets/laserwave.js +2 -0
- package/dist/ui/assets/laserwave.js.map +1 -0
- package/dist/ui/assets/less.js +2 -0
- package/dist/ui/assets/less.js.map +1 -0
- package/dist/ui/assets/light-plus.js +2 -0
- package/dist/ui/assets/light-plus.js.map +1 -0
- package/dist/ui/assets/main.css +1 -0
- package/dist/ui/assets/main.js +3 -0
- package/dist/ui/assets/main.js.map +1 -0
- package/dist/ui/assets/markdown.js +2 -0
- package/dist/ui/assets/markdown.js.map +1 -0
- package/dist/ui/assets/marko.js +2 -0
- package/dist/ui/assets/marko.js.map +1 -0
- package/dist/ui/assets/material-theme-darker.js +2 -0
- package/dist/ui/assets/material-theme-darker.js.map +1 -0
- package/dist/ui/assets/material-theme-lighter.js +2 -0
- package/dist/ui/assets/material-theme-lighter.js.map +1 -0
- package/dist/ui/assets/material-theme-ocean.js +2 -0
- package/dist/ui/assets/material-theme-ocean.js.map +1 -0
- package/dist/ui/assets/material-theme-palenight.js +2 -0
- package/dist/ui/assets/material-theme-palenight.js.map +1 -0
- package/dist/ui/assets/material-theme.js +2 -0
- package/dist/ui/assets/material-theme.js.map +1 -0
- package/dist/ui/assets/mdc.js +2 -0
- package/dist/ui/assets/mdc.js.map +1 -0
- package/dist/ui/assets/mdx.js +2 -0
- package/dist/ui/assets/mdx.js.map +1 -0
- package/dist/ui/assets/min-dark.js +2 -0
- package/dist/ui/assets/min-dark.js.map +1 -0
- package/dist/ui/assets/min-light.js +2 -0
- package/dist/ui/assets/min-light.js.map +1 -0
- package/dist/ui/assets/monokai.js +2 -0
- package/dist/ui/assets/monokai.js.map +1 -0
- package/dist/ui/assets/nestjs.svg +4 -0
- package/dist/ui/assets/night-owl.js +2 -0
- package/dist/ui/assets/night-owl.js.map +1 -0
- package/dist/ui/assets/nord.js +2 -0
- package/dist/ui/assets/nord.js.map +1 -0
- package/dist/ui/assets/one-dark-pro.js +2 -0
- package/dist/ui/assets/one-dark-pro.js.map +1 -0
- package/dist/ui/assets/one-light.js +2 -0
- package/dist/ui/assets/one-light.js.map +1 -0
- package/dist/ui/assets/php.js +2 -0
- package/dist/ui/assets/php.js.map +1 -0
- package/dist/ui/assets/plastic.js +2 -0
- package/dist/ui/assets/plastic.js.map +1 -0
- package/dist/ui/assets/poimandres.js +2 -0
- package/dist/ui/assets/poimandres.js.map +1 -0
- package/dist/ui/assets/postcss.js +2 -0
- package/dist/ui/assets/postcss.js.map +1 -0
- package/dist/ui/assets/pug.js +2 -0
- package/dist/ui/assets/pug.js.map +1 -0
- package/dist/ui/assets/python.js +2 -0
- package/dist/ui/assets/python.js.map +1 -0
- package/dist/ui/assets/r.js +2 -0
- package/dist/ui/assets/r.js.map +1 -0
- package/dist/ui/assets/raleway-cyrillic-400-normal.woff +0 -0
- package/dist/ui/assets/raleway-cyrillic-400-normal.woff2 +0 -0
- package/dist/ui/assets/raleway-cyrillic-ext-400-normal.woff +0 -0
- package/dist/ui/assets/raleway-cyrillic-ext-400-normal.woff2 +0 -0
- package/dist/ui/assets/raleway-latin-400-normal.woff +0 -0
- package/dist/ui/assets/raleway-latin-400-normal.woff2 +0 -0
- package/dist/ui/assets/raleway-latin-ext-400-normal.woff +0 -0
- package/dist/ui/assets/raleway-latin-ext-400-normal.woff2 +0 -0
- package/dist/ui/assets/raleway-vietnamese-400-normal.woff +0 -0
- package/dist/ui/assets/raleway-vietnamese-400-normal.woff2 +0 -0
- package/dist/ui/assets/red.js +2 -0
- package/dist/ui/assets/red.js.map +1 -0
- package/dist/ui/assets/regexp.js +2 -0
- package/dist/ui/assets/regexp.js.map +1 -0
- package/dist/ui/assets/rose-pine-dawn.js +2 -0
- package/dist/ui/assets/rose-pine-dawn.js.map +1 -0
- package/dist/ui/assets/rose-pine-moon.js +2 -0
- package/dist/ui/assets/rose-pine-moon.js.map +1 -0
- package/dist/ui/assets/rose-pine.js +2 -0
- package/dist/ui/assets/rose-pine.js.map +1 -0
- package/dist/ui/assets/safari.svg +38 -0
- package/dist/ui/assets/sass.js +2 -0
- package/dist/ui/assets/sass.js.map +1 -0
- package/dist/ui/assets/scss.js +2 -0
- package/dist/ui/assets/scss.js.map +1 -0
- package/dist/ui/assets/serverTimingMeta.js +51 -0
- package/dist/ui/assets/serverTimingMeta.js.map +1 -0
- package/dist/ui/assets/shellscript.js +2 -0
- package/dist/ui/assets/shellscript.js.map +1 -0
- package/dist/ui/assets/slack-dark.js +2 -0
- package/dist/ui/assets/slack-dark.js.map +1 -0
- package/dist/ui/assets/slack-ochin.js +2 -0
- package/dist/ui/assets/slack-ochin.js.map +1 -0
- package/dist/ui/assets/snazzy-light.js +2 -0
- package/dist/ui/assets/snazzy-light.js.map +1 -0
- package/dist/ui/assets/solarized-dark.js +2 -0
- package/dist/ui/assets/solarized-dark.js.map +1 -0
- package/dist/ui/assets/solarized-light.js +2 -0
- package/dist/ui/assets/solarized-light.js.map +1 -0
- package/dist/ui/assets/sql.js +2 -0
- package/dist/ui/assets/sql.js.map +1 -0
- package/dist/ui/assets/stylus.js +2 -0
- package/dist/ui/assets/stylus.js.map +1 -0
- package/dist/ui/assets/svelte.js +2 -0
- package/dist/ui/assets/svelte.js.map +1 -0
- package/dist/ui/assets/synthwave-84.js +2 -0
- package/dist/ui/assets/synthwave-84.js.map +1 -0
- package/dist/ui/assets/tokyo-night.js +2 -0
- package/dist/ui/assets/tokyo-night.js.map +1 -0
- package/dist/ui/assets/ts-tags.js +2 -0
- package/dist/ui/assets/ts-tags.js.map +1 -0
- package/dist/ui/assets/tsx.js +2 -0
- package/dist/ui/assets/tsx.js.map +1 -0
- package/dist/ui/assets/typescript.js +2 -0
- package/dist/ui/assets/typescript.js.map +1 -0
- package/dist/ui/assets/vesper.js +2 -0
- package/dist/ui/assets/vesper.js.map +1 -0
- package/dist/ui/assets/vitesse-black.js +2 -0
- package/dist/ui/assets/vitesse-black.js.map +1 -0
- package/dist/ui/assets/vitesse-dark.js +2 -0
- package/dist/ui/assets/vitesse-dark.js.map +1 -0
- package/dist/ui/assets/vitesse-light.js +2 -0
- package/dist/ui/assets/vitesse-light.js.map +1 -0
- package/dist/ui/assets/vue-html.js +2 -0
- package/dist/ui/assets/vue-html.js.map +1 -0
- package/dist/ui/assets/vue-vine.js +2 -0
- package/dist/ui/assets/vue-vine.js.map +1 -0
- package/dist/ui/assets/vue.js +2 -0
- package/dist/ui/assets/vue.js.map +1 -0
- package/dist/ui/assets/wasm.js +2 -0
- package/dist/ui/assets/wasm.js.map +1 -0
- package/dist/ui/assets/wasm2.js +2 -0
- package/dist/ui/assets/wasm2.js.map +1 -0
- package/dist/ui/assets/wgsl.js +2 -0
- package/dist/ui/assets/wgsl.js.map +1 -0
- package/dist/ui/assets/wit.js +2 -0
- package/dist/ui/assets/wit.js.map +1 -0
- package/dist/ui/assets/xml.js +2 -0
- package/dist/ui/assets/xml.js.map +1 -0
- package/dist/ui/assets/yaml.js +2 -0
- package/dist/ui/assets/yaml.js.map +1 -0
- package/dist/{overlay/src → ui}/index.html +34 -0
- package/dist/ui/manifest.json +1095 -0
- package/package.json +110 -20
- package/dist/overlay/assets/andromeeda-BIpZ7gaU.js +0 -1
- package/dist/overlay/assets/angular-html-BmadGEgW.js +0 -1
- package/dist/overlay/assets/angular-ts-D-QQnnGT.js +0 -1
- package/dist/overlay/assets/astro-DHnp0xIo.js +0 -1
- package/dist/overlay/assets/aurora-x-BwoVEUWZ.js +0 -1
- package/dist/overlay/assets/ayu-dark-CxPZkpb2.js +0 -1
- package/dist/overlay/assets/blade-OPzGcV14.js +0 -1
- package/dist/overlay/assets/c-eeMepfLm.js +0 -1
- package/dist/overlay/assets/catppuccin-frappe-5udUqgsX.js +0 -1
- package/dist/overlay/assets/catppuccin-latte-ufkS-HWv.js +0 -1
- package/dist/overlay/assets/catppuccin-macchiato-DzL2LPek.js +0 -1
- package/dist/overlay/assets/catppuccin-mocha-DDDDwkUT.js +0 -1
- package/dist/overlay/assets/coffee-Dl27lzbd.js +0 -1
- package/dist/overlay/assets/cpp-Cj177cuW.js +0 -1
- package/dist/overlay/assets/css-CECN5uSL.js +0 -1
- package/dist/overlay/assets/dark-plus-pUHDTVV0.js +0 -1
- package/dist/overlay/assets/dracula-BtZx2Kac.js +0 -1
- package/dist/overlay/assets/dracula-soft-BKa-aqBv.js +0 -1
- package/dist/overlay/assets/everforest-dark-DMCBqXCK.js +0 -1
- package/dist/overlay/assets/everforest-light-BbXl82Em.js +0 -1
- package/dist/overlay/assets/github-dark-DenFmJkN.js +0 -1
- package/dist/overlay/assets/github-dark-default-BJPUVz4H.js +0 -1
- package/dist/overlay/assets/github-dark-dimmed-DUshB20C.js +0 -1
- package/dist/overlay/assets/github-dark-high-contrast-D3aGCnF8.js +0 -1
- package/dist/overlay/assets/github-light-JYsPkUQd.js +0 -1
- package/dist/overlay/assets/github-light-default-D99KPAby.js +0 -1
- package/dist/overlay/assets/github-light-high-contrast-BbmZE-Mp.js +0 -1
- package/dist/overlay/assets/glsl-CkUcVZNK.js +0 -1
- package/dist/overlay/assets/graphql-BLaPX4fU.js +0 -1
- package/dist/overlay/assets/gruvbox-dark-hard-C2ND4cMr.js +0 -1
- package/dist/overlay/assets/gruvbox-dark-medium-C8k4c8au.js +0 -1
- package/dist/overlay/assets/gruvbox-dark-soft-xx9Q6FaG.js +0 -1
- package/dist/overlay/assets/gruvbox-light-hard-BpUXv5in.js +0 -1
- package/dist/overlay/assets/gruvbox-light-medium-D3XFCoU1.js +0 -1
- package/dist/overlay/assets/gruvbox-light-soft-u7hpfz6Z.js +0 -1
- package/dist/overlay/assets/haml-6FagfhCM.js +0 -1
- package/dist/overlay/assets/handlebars-Bd5Y4M6I.js +0 -1
- package/dist/overlay/assets/houston-BDYrDoDW.js +0 -1
- package/dist/overlay/assets/html-7XVNRwN7.js +0 -1
- package/dist/overlay/assets/html-derivative-BNxZ5Yf6.js +0 -1
- package/dist/overlay/assets/http-WC357zBG.js +0 -1
- package/dist/overlay/assets/imba-CimUv-Uh.js +0 -1
- package/dist/overlay/assets/index-BfFEknL3.js +0 -1
- package/dist/overlay/assets/java-DY6VlHhP.js +0 -1
- package/dist/overlay/assets/javascript-Dp1Jmi5H.js +0 -1
- package/dist/overlay/assets/jinja-WEhOU5ES.js +0 -1
- package/dist/overlay/assets/jison-c2JI40PB.js +0 -1
- package/dist/overlay/assets/json-DxJze_jm.js +0 -1
- package/dist/overlay/assets/json5-BT4Fjg39.js +0 -1
- package/dist/overlay/assets/jsonc-CHjZD8gR.js +0 -1
- package/dist/overlay/assets/jsonl-BGuvDmy9.js +0 -1
- package/dist/overlay/assets/jsx-BtKADgXT.js +0 -1
- package/dist/overlay/assets/julia-DcoDQokW.js +0 -1
- package/dist/overlay/assets/kanagawa-dragon-CiKur4Hl.js +0 -1
- package/dist/overlay/assets/kanagawa-lotus-BKu-smKu.js +0 -1
- package/dist/overlay/assets/kanagawa-wave-CQwozSzG.js +0 -1
- package/dist/overlay/assets/laserwave-6a00oqik.js +0 -1
- package/dist/overlay/assets/less-B1GLI2Di.js +0 -1
- package/dist/overlay/assets/light-plus-CZuVqSLX.js +0 -1
- package/dist/overlay/assets/main.js +0 -224
- package/dist/overlay/assets/markdown-CrScaQ96.js +0 -1
- package/dist/overlay/assets/marko-DDi9qpQP.js +0 -1
- package/dist/overlay/assets/material-theme-D6KBX41T.js +0 -1
- package/dist/overlay/assets/material-theme-darker-CkRroheE.js +0 -1
- package/dist/overlay/assets/material-theme-lighter-BUBw43Yz.js +0 -1
- package/dist/overlay/assets/material-theme-ocean-ClGX14Ja.js +0 -1
- package/dist/overlay/assets/material-theme-palenight-C1RVm8K1.js +0 -1
- package/dist/overlay/assets/mdc-FI2x3BiY.js +0 -1
- package/dist/overlay/assets/mdx-BOhZZUJ8.js +0 -1
- package/dist/overlay/assets/min-dark-C7ak0t6c.js +0 -1
- package/dist/overlay/assets/min-light-CKFxVcPp.js +0 -1
- package/dist/overlay/assets/monokai-C1KBYcO0.js +0 -1
- package/dist/overlay/assets/night-owl-Bm2rzalh.js +0 -1
- package/dist/overlay/assets/nord-CC5OiUXg.js +0 -1
- package/dist/overlay/assets/one-dark-pro-DTA3VF0_.js +0 -1
- package/dist/overlay/assets/one-light-D9sNaUtq.js +0 -1
- package/dist/overlay/assets/php-BRU9zhoN.js +0 -1
- package/dist/overlay/assets/plastic-CSTz3KZp.js +0 -1
- package/dist/overlay/assets/poimandres-C-VADXHD.js +0 -1
- package/dist/overlay/assets/postcss-05aHdL-n.js +0 -1
- package/dist/overlay/assets/pug-CJWI-qSo.js +0 -1
- package/dist/overlay/assets/python-BFNSHbwJ.js +0 -1
- package/dist/overlay/assets/r-Bm0uF0U2.js +0 -1
- package/dist/overlay/assets/red-7y8PH7HH.js +0 -1
- package/dist/overlay/assets/regexp-BazyLpPg.js +0 -1
- package/dist/overlay/assets/rose-pine-Cr4kwgAY.js +0 -1
- package/dist/overlay/assets/rose-pine-dawn-ClRRUdXX.js +0 -1
- package/dist/overlay/assets/rose-pine-moon-ucNn3Gm8.js +0 -1
- package/dist/overlay/assets/sass-DxHp5rTx.js +0 -1
- package/dist/overlay/assets/scss-B1FaCqwR.js +0 -1
- package/dist/overlay/assets/shellscript-InADTalH.js +0 -1
- package/dist/overlay/assets/slack-dark-i7wN4OET.js +0 -1
- package/dist/overlay/assets/slack-ochin-ndHf0LoP.js +0 -1
- package/dist/overlay/assets/snazzy-light-BlSJXAu4.js +0 -1
- package/dist/overlay/assets/solarized-dark-UTmkh7lw.js +0 -1
- package/dist/overlay/assets/solarized-light-BheCkDPT.js +0 -1
- package/dist/overlay/assets/sql-Cn_v3PB0.js +0 -1
- package/dist/overlay/assets/stylus-CyKEU1Ej.js +0 -1
- package/dist/overlay/assets/svelte-BjDUPxZ1.js +0 -1
- package/dist/overlay/assets/synthwave-84-NU3C_KFZ.js +0 -1
- package/dist/overlay/assets/tokyo-night-DP4TmcQl.js +0 -1
- package/dist/overlay/assets/ts-tags-CZMzuZh-.js +0 -1
- package/dist/overlay/assets/tsx-B8rCNbgL.js +0 -1
- package/dist/overlay/assets/typescript-mg6ATTE8.js +0 -1
- package/dist/overlay/assets/vesper-BckBta1U.js +0 -1
- package/dist/overlay/assets/vitesse-black-BoGvW84i.js +0 -1
- package/dist/overlay/assets/vitesse-dark-Cym-eLtO.js +0 -1
- package/dist/overlay/assets/vitesse-light-CcmG315c.js +0 -1
- package/dist/overlay/assets/vue-D-ba2-Rx.js +0 -1
- package/dist/overlay/assets/vue-html-Dn2ZoOSz.js +0 -1
- package/dist/overlay/assets/vue-vine-Jmfkm6lF.js +0 -1
- package/dist/overlay/assets/wasm-BBXxrAl7.js +0 -1
- package/dist/overlay/assets/wasm-DQxwEHae.js +0 -1
- package/dist/overlay/assets/wgsl-DY4iK1q1.js +0 -1
- package/dist/overlay/assets/wit-CQMQOlTg.js +0 -1
- package/dist/overlay/assets/xml-C2J0sS9M.js +0 -1
- package/dist/overlay/assets/yaml-DaO7k5B1.js +0 -1
- package/dist/overlay/manifest.json +0 -1000
- package/dist/run.cjs +0 -51848
- package/dist/sidecar.cjs +0 -7
- package/dist/sidecar.d.ts +0 -1
- package/dist/sidecar.js +0 -4
|
@@ -0,0 +1,195 @@
|
|
|
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) {
|
|
168
|
+
if (!origin) {
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
try {
|
|
172
|
+
const url = new URL(origin);
|
|
173
|
+
const hostname = url.hostname.toLowerCase();
|
|
174
|
+
if (hostname === "localhost") {
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
if (isSpotlightOrigin(url, hostname)) {
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
if (normalizedAllowedOrigins && isCustomAllowedOrigin(origin, hostname, normalizedAllowedOrigins)) {
|
|
181
|
+
return true;
|
|
182
|
+
}
|
|
183
|
+
if (isIPAddress(hostname)) {
|
|
184
|
+
return isLocalMachineIP(hostname);
|
|
185
|
+
}
|
|
186
|
+
return isHostnameLocal(hostname);
|
|
187
|
+
} catch {
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
export {
|
|
192
|
+
isAllowedOrigin,
|
|
193
|
+
normalizeAllowedOrigins
|
|
194
|
+
};
|
|
195
|
+
//# sourceMappingURL=cors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Get compose files from COMPOSE_FILE environment variable
|
|
3
|
+
* Returns an array of file paths if the variable is set, null otherwise
|
|
4
|
+
*/
|
|
5
|
+
export declare function getComposeFilesFromEnv(): string[] | null;
|
|
6
|
+
/**
|
|
7
|
+
* Find the compose file in the current directory by trying all combinations
|
|
8
|
+
* of base names and extensions.
|
|
9
|
+
*/
|
|
10
|
+
export declare function findComposeFile(): string | null;
|
|
11
|
+
/**
|
|
12
|
+
* Find the override file for a given compose file.
|
|
13
|
+
* Docker Compose looks for an override file with the same base name and extension.
|
|
14
|
+
* For example: docker-compose.yml -> docker-compose.override.yml
|
|
15
|
+
*/
|
|
16
|
+
export declare function findOverrideFile(composeFile: string): string | null;
|
|
17
|
+
/**
|
|
18
|
+
* Parse compose file and extract service names
|
|
19
|
+
*/
|
|
20
|
+
export declare function getDockerComposeServices(filePath: string): string[];
|
|
@@ -0,0 +1,70 @@
|
|
|
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
|
+
}();
|
|
9
|
+
import { accessSync, constants, readFileSync } from "node:fs";
|
|
10
|
+
import { delimiter } from "node:path";
|
|
11
|
+
import { parse } from "yaml";
|
|
12
|
+
import { logger } from "../logger.js";
|
|
13
|
+
import "../../_virtual/_sentry-release-injection-file.js";
|
|
14
|
+
const COMPOSE_FILE_BASE_NAMES = ["docker-compose", "compose"];
|
|
15
|
+
const COMPOSE_FILE_EXTENSIONS = [".yml", ".yaml"];
|
|
16
|
+
function getComposeFilesFromEnv() {
|
|
17
|
+
const composeFileEnv = process.env.COMPOSE_FILE;
|
|
18
|
+
if (!composeFileEnv) {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
const files = composeFileEnv.split(delimiter).map((f) => f.trim()).filter(Boolean);
|
|
22
|
+
return files.length > 0 ? files : null;
|
|
23
|
+
}
|
|
24
|
+
function findComposeFile() {
|
|
25
|
+
for (const baseName of COMPOSE_FILE_BASE_NAMES) {
|
|
26
|
+
for (const ext of COMPOSE_FILE_EXTENSIONS) {
|
|
27
|
+
const fileName = `${baseName}${ext}`;
|
|
28
|
+
try {
|
|
29
|
+
accessSync(fileName, constants.R_OK);
|
|
30
|
+
return fileName;
|
|
31
|
+
} catch {
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
function findOverrideFile(composeFile) {
|
|
38
|
+
const ext = composeFile.endsWith(".yaml") ? ".yaml" : ".yml";
|
|
39
|
+
const baseName = composeFile.replace(/\.(yaml|yml)$/, "");
|
|
40
|
+
const overrideFile = `${baseName}.override${ext}`;
|
|
41
|
+
try {
|
|
42
|
+
accessSync(overrideFile, constants.R_OK);
|
|
43
|
+
return overrideFile;
|
|
44
|
+
} catch {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function getDockerComposeServices(filePath) {
|
|
49
|
+
try {
|
|
50
|
+
const content = readFileSync(filePath, "utf-8");
|
|
51
|
+
const parsed = parse(content);
|
|
52
|
+
if (!parsed || typeof parsed !== "object" || !("services" in parsed)) {
|
|
53
|
+
logger.error(`Invalid compose file: ${filePath} - missing 'services' key`);
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
const services = parsed.services;
|
|
57
|
+
return Object.keys(services);
|
|
58
|
+
} catch (error) {
|
|
59
|
+
logger.error(`Failed to parse compose file: ${filePath}`);
|
|
60
|
+
logger.error(error);
|
|
61
|
+
return [];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export {
|
|
65
|
+
findComposeFile,
|
|
66
|
+
findOverrideFile,
|
|
67
|
+
getComposeFilesFromEnv,
|
|
68
|
+
getDockerComposeServices
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=docker-compose-parser.js.map
|
|
@@ -0,0 +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;"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export declare const DOCKER_MIN_VERSION = "20.10.0";
|
|
2
|
+
export declare const DOCKER_HOST_INTERNAL = "host.docker.internal";
|
|
3
|
+
export declare const DOCKER_HOST_GATEWAY = "host-gateway";
|
|
4
|
+
interface DockerComposeConfig {
|
|
5
|
+
composeFiles: string[];
|
|
6
|
+
command: string[];
|
|
7
|
+
serviceNames: string[];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Detect if Docker is installed and check its version
|
|
11
|
+
*/
|
|
12
|
+
export declare function detectDocker(): {
|
|
13
|
+
version: string;
|
|
14
|
+
valid: boolean;
|
|
15
|
+
} | null;
|
|
16
|
+
/**
|
|
17
|
+
* Build the Docker Compose command with Spotlight environment injection
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildDockerComposeCommand(config: DockerComposeConfig): {
|
|
20
|
+
cmdArgs: string[];
|
|
21
|
+
stdin: string;
|
|
22
|
+
};
|
|
23
|
+
/**
|
|
24
|
+
* Detect and configure Docker Compose
|
|
25
|
+
*
|
|
26
|
+
* This function orchestrates the detection of Docker, Docker Compose,
|
|
27
|
+
* compose files, and services to build a complete configuration.
|
|
28
|
+
*/
|
|
29
|
+
export declare function detectDockerCompose(): DockerComposeConfig | null;
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,140 @@
|
|
|
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
|
+
}();
|
|
9
|
+
import { execSync } from "node:child_process";
|
|
10
|
+
import semver from "../../node_modules/.pnpm/semver@7.7.3/node_modules/semver/index.js";
|
|
11
|
+
import { stringify } from "yaml";
|
|
12
|
+
import { logger } from "../logger.js";
|
|
13
|
+
import { getComposeFilesFromEnv, findComposeFile, findOverrideFile, getDockerComposeServices } from "./docker-compose-parser.js";
|
|
14
|
+
import "../../_virtual/_sentry-release-injection-file.js";
|
|
15
|
+
const DOCKER_MIN_VERSION = "20.10.0";
|
|
16
|
+
const DOCKER_HOST_INTERNAL = "host.docker.internal";
|
|
17
|
+
const DOCKER_HOST_GATEWAY = "host-gateway";
|
|
18
|
+
function tryExec(command) {
|
|
19
|
+
try {
|
|
20
|
+
return execSync(command, { encoding: "utf-8", stdio: ["pipe", "pipe", "pipe"] }).trim();
|
|
21
|
+
} catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function detectDocker() {
|
|
26
|
+
const version = tryExec("docker --version");
|
|
27
|
+
if (!version) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
const match = version.match(/Docker version ([\d.]+)/);
|
|
31
|
+
if (!match) {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
const versionNumber = match[1];
|
|
35
|
+
const valid = semver.gte(versionNumber, DOCKER_MIN_VERSION);
|
|
36
|
+
return { version: versionNumber, valid };
|
|
37
|
+
}
|
|
38
|
+
function detectComposeCommand() {
|
|
39
|
+
const composePluginVersion = tryExec("docker compose version --short");
|
|
40
|
+
const composeStandaloneVersion = tryExec("docker-compose version --short");
|
|
41
|
+
if (!composePluginVersion && !composeStandaloneVersion) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
if (!composePluginVersion) {
|
|
45
|
+
return { command: ["docker-compose"], version: composeStandaloneVersion };
|
|
46
|
+
}
|
|
47
|
+
if (!composeStandaloneVersion) {
|
|
48
|
+
return { command: ["docker", "compose"], version: composePluginVersion };
|
|
49
|
+
}
|
|
50
|
+
const pluginVer = composePluginVersion.replace(/^v/, "");
|
|
51
|
+
const standaloneVer = composeStandaloneVersion.replace(/^v/, "");
|
|
52
|
+
if (semver.gt(standaloneVer, pluginVer)) {
|
|
53
|
+
return { command: ["docker-compose"], version: composeStandaloneVersion };
|
|
54
|
+
}
|
|
55
|
+
return { command: ["docker", "compose"], version: composePluginVersion };
|
|
56
|
+
}
|
|
57
|
+
function generateSpotlightOverrideYaml(serviceNames) {
|
|
58
|
+
const services = {};
|
|
59
|
+
for (const serviceName of serviceNames) {
|
|
60
|
+
services[serviceName] = {
|
|
61
|
+
environment: ["SENTRY_SPOTLIGHT", "NEXT_PUBLIC_SENTRY_SPOTLIGHT", "SENTRY_TRACES_SAMPLE_RATE"],
|
|
62
|
+
extra_hosts: [`${DOCKER_HOST_INTERNAL}:${DOCKER_HOST_GATEWAY}`]
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
return stringify({ services });
|
|
66
|
+
}
|
|
67
|
+
function buildDockerComposeCommand(config) {
|
|
68
|
+
const cmdArgs = [...config.command];
|
|
69
|
+
for (const file of config.composeFiles) {
|
|
70
|
+
cmdArgs.push("-f", file);
|
|
71
|
+
}
|
|
72
|
+
cmdArgs.push("-f", "-");
|
|
73
|
+
cmdArgs.push("up");
|
|
74
|
+
const stdin = generateSpotlightOverrideYaml(config.serviceNames);
|
|
75
|
+
return { cmdArgs, stdin };
|
|
76
|
+
}
|
|
77
|
+
function detectDockerCompose() {
|
|
78
|
+
const docker = detectDocker();
|
|
79
|
+
if (!docker) {
|
|
80
|
+
logger.debug("Docker is not installed or not in PATH");
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
if (!docker.valid) {
|
|
84
|
+
logger.error(`Docker version ${docker.version} does not meet the minimum required version ${DOCKER_MIN_VERSION}`);
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
logger.debug(`Detected Docker version ${docker.version}`);
|
|
88
|
+
const compose = detectComposeCommand();
|
|
89
|
+
if (!compose) {
|
|
90
|
+
logger.debug("Docker Compose is not installed or not in PATH");
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
logger.debug(`Detected Docker Compose version ${compose.version} (${compose.command.join(" ")})`);
|
|
94
|
+
const composeFilesFromEnv = getComposeFilesFromEnv();
|
|
95
|
+
let composeFiles;
|
|
96
|
+
if (composeFilesFromEnv) {
|
|
97
|
+
composeFiles = composeFilesFromEnv;
|
|
98
|
+
logger.debug(`Using COMPOSE_FILE environment variable: ${composeFiles.join(", ")}`);
|
|
99
|
+
} else {
|
|
100
|
+
const composeFile = findComposeFile();
|
|
101
|
+
if (!composeFile) {
|
|
102
|
+
logger.debug("No compose file found in current directory");
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
logger.debug(`Found compose file: ${composeFile}`);
|
|
106
|
+
composeFiles = [composeFile];
|
|
107
|
+
const overrideFile = findOverrideFile(composeFile);
|
|
108
|
+
if (overrideFile) {
|
|
109
|
+
logger.debug(`Found override file: ${overrideFile}`);
|
|
110
|
+
composeFiles.push(overrideFile);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
const serviceNamesSet = /* @__PURE__ */ new Set();
|
|
114
|
+
for (const file of composeFiles) {
|
|
115
|
+
const services = getDockerComposeServices(file);
|
|
116
|
+
for (const service of services) {
|
|
117
|
+
serviceNamesSet.add(service);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
const serviceNames = Array.from(serviceNamesSet);
|
|
121
|
+
if (serviceNames.length === 0) {
|
|
122
|
+
logger.debug("No services found in compose file(s)");
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
logger.debug(`Found ${serviceNames.length} service(s): ${serviceNames.join(", ")}`);
|
|
126
|
+
return {
|
|
127
|
+
composeFiles,
|
|
128
|
+
command: compose.command,
|
|
129
|
+
serviceNames
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
export {
|
|
133
|
+
DOCKER_HOST_GATEWAY,
|
|
134
|
+
DOCKER_HOST_INTERNAL,
|
|
135
|
+
DOCKER_MIN_VERSION,
|
|
136
|
+
buildDockerComposeCommand,
|
|
137
|
+
detectDocker,
|
|
138
|
+
detectDockerCompose
|
|
139
|
+
};
|
|
140
|
+
//# sourceMappingURL=docker-compose.js.map
|
|
@@ -0,0 +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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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ParsedEnvelope } from '../parser/index.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Container for events that flow through the sidecar
|
|
4
|
+
* Provides lazy parsing only when needed (in debug mode)
|
|
5
|
+
*/
|
|
6
|
+
export declare class EventContainer {
|
|
7
|
+
private contentType;
|
|
8
|
+
private data;
|
|
9
|
+
private senderUserAgent?;
|
|
10
|
+
private parsedEnvelope;
|
|
11
|
+
private isParsed;
|
|
12
|
+
constructor(contentType: string, data: Buffer, senderUserAgent?: string);
|
|
13
|
+
/**
|
|
14
|
+
* Get the content type of the event
|
|
15
|
+
*/
|
|
16
|
+
getContentType(): string;
|
|
17
|
+
/**
|
|
18
|
+
* Get the raw data buffer
|
|
19
|
+
*/
|
|
20
|
+
getData(): Buffer;
|
|
21
|
+
/**
|
|
22
|
+
* Get parsed envelope data (lazy parsing)
|
|
23
|
+
*/
|
|
24
|
+
getParsedEnvelope(): ParsedEnvelope;
|
|
25
|
+
/**
|
|
26
|
+
* Get a summary of the event types in this container
|
|
27
|
+
* Returns null if not a parseable envelope
|
|
28
|
+
*/
|
|
29
|
+
getEventTypes(): string[] | null;
|
|
30
|
+
/**
|
|
31
|
+
* Get a formatted string of event types for logging
|
|
32
|
+
*/
|
|
33
|
+
getEventTypesString(): string;
|
|
34
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
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
|
+
}();
|
|
9
|
+
import "../parser/helpers.js";
|
|
10
|
+
import { processEnvelope } from "../parser/processEnvelope.js";
|
|
11
|
+
import "../../_virtual/_sentry-release-injection-file.js";
|
|
12
|
+
class EventContainer {
|
|
13
|
+
contentType;
|
|
14
|
+
data;
|
|
15
|
+
senderUserAgent;
|
|
16
|
+
parsedEnvelope = null;
|
|
17
|
+
isParsed = false;
|
|
18
|
+
constructor(contentType, data, senderUserAgent) {
|
|
19
|
+
this.contentType = contentType;
|
|
20
|
+
this.data = data;
|
|
21
|
+
this.senderUserAgent = senderUserAgent;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get the content type of the event
|
|
25
|
+
*/
|
|
26
|
+
getContentType() {
|
|
27
|
+
return this.contentType;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get the raw data buffer
|
|
31
|
+
*/
|
|
32
|
+
getData() {
|
|
33
|
+
return this.data;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Get parsed envelope data (lazy parsing)
|
|
37
|
+
*/
|
|
38
|
+
getParsedEnvelope() {
|
|
39
|
+
if (!this.isParsed) {
|
|
40
|
+
this.parsedEnvelope = processEnvelope(
|
|
41
|
+
{
|
|
42
|
+
contentType: this.contentType,
|
|
43
|
+
data: this.data
|
|
44
|
+
},
|
|
45
|
+
this.senderUserAgent
|
|
46
|
+
);
|
|
47
|
+
this.isParsed = true;
|
|
48
|
+
}
|
|
49
|
+
return this.parsedEnvelope;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get a summary of the event types in this container
|
|
53
|
+
* Returns null if not a parseable envelope
|
|
54
|
+
*/
|
|
55
|
+
getEventTypes() {
|
|
56
|
+
const envelope = this.getParsedEnvelope();
|
|
57
|
+
if (!envelope) return null;
|
|
58
|
+
const eventTypes = [];
|
|
59
|
+
for (const item of envelope.envelope[1]) {
|
|
60
|
+
if (item[0].type) {
|
|
61
|
+
eventTypes.push(item[0].type);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
return eventTypes;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get a formatted string of event types for logging
|
|
68
|
+
*/
|
|
69
|
+
getEventTypesString() {
|
|
70
|
+
const types = this.getEventTypes();
|
|
71
|
+
if (!types || types.length === 0) {
|
|
72
|
+
return this.contentType === "application/x-sentry-envelope" ? "envelope" : this.contentType;
|
|
73
|
+
}
|
|
74
|
+
return types.join("+");
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
export {
|
|
78
|
+
EventContainer
|
|
79
|
+
};
|
|
80
|
+
//# sourceMappingURL=eventContainer.js.map
|
|
@@ -0,0 +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;"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare const withTracing: (fn: CallableFunction, spanArgs?: {}) => (...args: unknown[]) => any;
|
|
2
|
+
export declare const getSpotlightURL: (port: number, host?: string) => string;
|
|
3
|
+
export declare function logSpotlightUrl(port: number): void;
|
|
4
|
+
export declare const isValidPort: (...args: unknown[]) => any;
|
|
5
|
+
export declare const isSidecarRunning: (...args: unknown[]) => any;
|