@socketsecurity/lib 6.0.6 → 6.0.8
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/CHANGELOG.md +46 -1
- package/README.md +1 -1
- package/dist/ai/agent-context.d.mts +103 -0
- package/dist/ai/agent-context.js +157 -0
- package/dist/ai/backends.d.mts +83 -0
- package/dist/ai/backends.js +173 -0
- package/dist/ai/credentials.d.mts +49 -0
- package/dist/ai/credentials.js +82 -0
- package/dist/ai/discover.d.mts +6 -2
- package/dist/ai/discover.js +4 -3
- package/dist/ai/exec.d.mts +52 -0
- package/dist/ai/exec.js +92 -0
- package/dist/ai/http.d.mts +132 -0
- package/dist/ai/http.js +130 -0
- package/dist/ai/profiles.d.mts +41 -6
- package/dist/ai/profiles.js +52 -10
- package/dist/ai/route.d.mts +69 -0
- package/dist/ai/route.js +156 -0
- package/dist/ai/spawn.d.mts +10 -2
- package/dist/ai/spawn.js +56 -31
- package/dist/ai/subagent-status.d.mts +48 -0
- package/dist/ai/subagent-status.js +57 -0
- package/dist/ai/tier.d.mts +60 -0
- package/dist/ai/tier.js +53 -0
- package/dist/ai/types.d.mts +31 -6
- package/dist/ai/worktree.d.mts +6 -6
- package/dist/ai/worktree.js +5 -1
- package/dist/ansi/strip.d.ts +1 -1
- package/dist/ansi/strip.js +0 -2
- package/dist/archives/_internal.js +7 -9
- package/dist/archives/extract.js +1 -1
- package/dist/archives/tar.js +7 -7
- package/dist/archives/zip.js +5 -7
- package/dist/argv/flag-predicates.d.ts +12 -12
- package/dist/argv/flag-predicates.js +17 -17
- package/dist/argv/flag-types.d.ts +18 -18
- package/dist/argv/flag-types.js +4 -4
- package/dist/argv/parse.d.ts +20 -3
- package/dist/argv/parse.js +1 -1
- package/dist/arrays/_internal.js +11 -12
- package/dist/arrays/chunk.js +0 -1
- package/dist/arrays/join.d.ts +37 -3
- package/dist/arrays/join.js +47 -7
- package/dist/arrays/unique.js +0 -1
- package/dist/bin/_internal.d.ts +1 -1
- package/dist/bin/_internal.js +1 -1
- package/dist/bin/exec.js +2 -3
- package/dist/bin/find.js +17 -17
- package/dist/bin/prim.cjs +36175 -35861
- package/dist/bin/resolve.js +13 -14
- package/dist/bin/which.js +8 -8
- package/dist/cache/ttl/store.js +6 -6
- package/dist/checks/primordials-defaults.d.ts +3 -3
- package/dist/checks/primordials-defaults.js +3 -3
- package/dist/checks/primordials.js +4 -3
- package/dist/{bin → cli}/check-primordials.d.ts +18 -13
- package/dist/{bin → cli}/check-primordials.js +58 -55
- package/dist/{bin → cli}/check.js +3 -3
- package/dist/{bin → cli}/socket-lib.d.ts +1 -1
- package/dist/{bin → cli}/socket-lib.js +4 -4
- package/dist/colors/socket-palette.js +7 -9
- package/dist/compression/_internal.d.ts +12 -12
- package/dist/compression/_internal.js +18 -18
- package/dist/compression/brotli.d.ts +26 -27
- package/dist/compression/brotli.js +39 -35
- package/dist/compression/gzip.d.ts +23 -23
- package/dist/compression/gzip.js +46 -42
- package/dist/constants/agents.d.ts +3 -1
- package/dist/constants/agents.js +15 -11
- package/dist/constants/licenses.js +3 -3
- package/dist/constants/node.d.ts +23 -0
- package/dist/constants/node.js +47 -15
- package/dist/constants/packages.d.ts +3 -0
- package/dist/constants/packages.js +24 -29
- package/dist/constants/platform.d.ts +30 -3
- package/dist/constants/platform.js +72 -12
- package/dist/constants/runtime.d.ts +22 -0
- package/dist/constants/runtime.js +32 -0
- package/dist/constants/socket.d.ts +2 -6
- package/dist/constants/socket.js +12 -14
- package/dist/cover/code.js +10 -10
- package/dist/cover/formatters.js +5 -5
- package/dist/crypto/hash.d.ts +30 -2
- package/dist/crypto/hash.js +47 -13
- package/dist/debug/_internal.js +4 -6
- package/dist/debug/caller-info.js +3 -4
- package/dist/debug/namespace.d.ts +7 -0
- package/dist/debug/namespace.js +21 -12
- package/dist/debug/output.js +21 -24
- package/dist/debug/types.d.ts +4 -4
- package/dist/dlx/arborist.js +18 -8
- package/dist/dlx/binary-cache.js +15 -15
- package/dist/dlx/binary-download.d.ts +1 -1
- package/dist/dlx/binary-download.js +11 -11
- package/dist/dlx/binary-resolution.js +17 -15
- package/dist/dlx/binary-types.d.ts +5 -5
- package/dist/dlx/binary.js +5 -5
- package/dist/dlx/cache.js +1 -1
- package/dist/dlx/detect.d.ts +42 -25
- package/dist/dlx/detect.js +86 -77
- package/dist/dlx/dir.js +2 -2
- package/dist/dlx/firewall.d.ts +9 -1
- package/dist/dlx/firewall.js +1 -1
- package/dist/dlx/lockfile.d.ts +19 -18
- package/dist/dlx/lockfile.js +19 -16
- package/dist/dlx/manifest.d.ts +6 -6
- package/dist/dlx/manifest.js +5 -5
- package/dist/dlx/package.d.ts +10 -10
- package/dist/dlx/package.js +20 -16
- package/dist/dlx/packages.js +4 -4
- package/dist/dlx/paths.js +7 -7
- package/dist/dlx/spec.js +1 -1
- package/dist/dlx/types.d.ts +28 -27
- package/dist/eco/cargo/parse-lockfile.d.ts +2 -3
- package/dist/eco/cargo/parse-lockfile.js +5 -5
- package/dist/eco/manifest/analyze-lockfile.js +2 -2
- package/dist/eco/manifest/detect-format.js +5 -5
- package/dist/eco/manifest/find-packages.js +2 -2
- package/dist/eco/manifest/get-package-versions.js +2 -2
- package/dist/eco/manifest/get-package.js +2 -2
- package/dist/eco/manifest/parse-lockfile.js +2 -2
- package/dist/eco/manifest/parse-manifest.js +2 -2
- package/dist/eco/manifest/parse.js +2 -2
- package/dist/eco/npm/npm/exec.js +2 -2
- package/dist/eco/npm/npm/flags.js +7 -12
- package/dist/eco/npm/npm/parse-lockfile.d.ts +17 -18
- package/dist/eco/npm/npm/parse-lockfile.js +4 -4
- package/dist/eco/npm/parse-package-json.d.ts +11 -0
- package/dist/eco/npm/parse-package-json.js +3 -3
- package/dist/eco/npm/pnpm/exec.d.ts +1 -1
- package/dist/eco/npm/pnpm/exec.js +5 -5
- package/dist/eco/npm/pnpm/flags.js +0 -3
- package/dist/eco/npm/pnpm/parse-lockfile.d.ts +6 -4
- package/dist/eco/npm/pnpm/parse-lockfile.js +7 -7
- package/dist/eco/npm/script.js +9 -6
- package/dist/eco/npm/yarnpkg/yarn/exec.js +4 -4
- package/dist/eco/npm/yarnpkg/yarn/parse-lockfile.d.ts +3 -4
- package/dist/eco/npm/yarnpkg/yarn/parse-lockfile.js +9 -9
- package/dist/effects/pulse-frames.d.ts +3 -1
- package/dist/effects/shimmer-keyframes.d.ts +1 -1
- package/dist/effects/shimmer-terminal.d.ts +1 -1
- package/dist/env/boolean.js +0 -1
- package/dist/env/ci.js +0 -1
- package/dist/env/debug.js +0 -1
- package/dist/env/github-status.d.ts +51 -0
- package/dist/env/github-status.js +90 -0
- package/dist/env/github.js +0 -8
- package/dist/env/home.js +0 -1
- package/dist/env/locale.js +0 -3
- package/dist/env/node-auth-token.js +0 -1
- package/dist/env/node-env.js +0 -1
- package/dist/env/node-version-managers.d.ts +53 -0
- package/dist/env/node-version-managers.js +90 -0
- package/dist/env/npm.js +0 -5
- package/dist/env/number.js +0 -1
- package/dist/env/package-manager.js +3 -6
- package/dist/env/path.js +0 -1
- package/dist/env/pre-commit.js +1 -2
- package/dist/env/proxy.js +1 -1
- package/dist/env/rewire.d.ts +8 -6
- package/dist/env/rewire.js +16 -17
- package/dist/env/shell.js +0 -1
- package/dist/env/socket-cli.js +5 -18
- package/dist/env/socket-mcp.d.ts +114 -0
- package/dist/env/socket-mcp.js +146 -0
- package/dist/env/socket.d.ts +8 -109
- package/dist/env/socket.js +22 -167
- package/dist/env/string.js +0 -1
- package/dist/env/temp-dir.js +0 -3
- package/dist/env/term.js +0 -1
- package/dist/env/test.js +3 -6
- package/dist/env/windows.js +0 -4
- package/dist/env/xdg.js +0 -3
- package/dist/errors/predicates.js +1 -1
- package/dist/events/exit/_internal.d.ts +11 -9
- package/dist/events/exit/_internal.js +31 -35
- package/dist/events/exit/handler.js +3 -4
- package/dist/events/exit/intercept.js +4 -6
- package/dist/events/exit/lifecycle.js +16 -18
- package/dist/events/exit/signals.js +1 -2
- package/dist/events/exit/types.d.ts +6 -5
- package/dist/external/@npmcli/package-json.js +2 -2
- package/dist/external/@npmcli/promise-spawn.js +3 -1
- package/dist/external/npm-pack.js +2 -2
- package/dist/external/pico-pack.js +4 -2
- package/dist/external/which.js +3 -1
- package/dist/external-tools/bazel/asset-names.d.ts +1 -1
- package/dist/external-tools/bazel/asset-names.js +5 -2
- package/dist/external-tools/bazel/from-download.d.ts +1 -1
- package/dist/external-tools/bazel/from-download.js +5 -2
- package/dist/external-tools/bazel/read-bazel-version-file.js +1 -1
- package/dist/external-tools/bazel/resolve-bazel-version.js +4 -0
- package/dist/external-tools/bazel/resolve.d.ts +3 -3
- package/dist/external-tools/bazel/resolve.js +16 -8
- package/dist/external-tools/bazel/types.d.ts +1 -1
- package/dist/external-tools/cdxgen/asset-names.d.ts +1 -1
- package/dist/external-tools/cdxgen/asset-names.js +5 -2
- package/dist/external-tools/cdxgen/from-download.d.ts +1 -1
- package/dist/external-tools/cdxgen/from-download.js +7 -4
- package/dist/external-tools/cdxgen/from-vfs.js +1 -1
- package/dist/external-tools/cdxgen/resolve.d.ts +3 -3
- package/dist/external-tools/cdxgen/resolve.js +16 -8
- package/dist/external-tools/cdxgen/types.d.ts +1 -1
- package/dist/external-tools/from-download.d.ts +3 -3
- package/dist/external-tools/from-download.js +12 -6
- package/dist/external-tools/from-pip-venv.d.ts +1 -1
- package/dist/external-tools/from-pip-venv.js +12 -5
- package/dist/external-tools/janus/asset-names.d.ts +1 -1
- package/dist/external-tools/janus/asset-names.js +5 -2
- package/dist/external-tools/janus/from-download.d.ts +1 -1
- package/dist/external-tools/janus/from-download.js +5 -2
- package/dist/external-tools/janus/from-vfs.js +1 -1
- package/dist/external-tools/janus/resolve.d.ts +3 -3
- package/dist/external-tools/janus/resolve.js +16 -8
- package/dist/external-tools/janus/types.d.ts +1 -1
- package/dist/external-tools/jre/asset-names.d.ts +1 -1
- package/dist/external-tools/jre/asset-names.js +5 -2
- package/dist/external-tools/jre/detect-platform-arch.d.ts +10 -6
- package/dist/external-tools/jre/detect-platform-arch.js +29 -14
- package/dist/external-tools/jre/from-download.d.ts +1 -1
- package/dist/external-tools/jre/from-download.js +7 -4
- package/dist/external-tools/jre/from-java-home.js +2 -2
- package/dist/external-tools/jre/from-vfs.js +3 -3
- package/dist/external-tools/jre/resolve.d.ts +3 -3
- package/dist/external-tools/jre/resolve.js +16 -8
- package/dist/external-tools/jre/types.d.ts +1 -1
- package/dist/external-tools/manifest.d.ts +25 -7
- package/dist/external-tools/manifest.js +13 -13
- package/dist/external-tools/opengrep/asset-names.d.ts +1 -1
- package/dist/external-tools/opengrep/asset-names.js +5 -2
- package/dist/external-tools/opengrep/from-download.d.ts +1 -1
- package/dist/external-tools/opengrep/from-download.js +5 -2
- package/dist/external-tools/opengrep/from-vfs.js +1 -1
- package/dist/external-tools/opengrep/resolve.d.ts +3 -3
- package/dist/external-tools/opengrep/resolve.js +16 -8
- package/dist/external-tools/opengrep/types.d.ts +1 -1
- package/dist/external-tools/python/asset-names.d.ts +76 -0
- package/dist/external-tools/python/asset-names.js +111 -0
- package/dist/external-tools/python/dlx.d.ts +80 -0
- package/dist/external-tools/python/dlx.js +98 -0
- package/dist/external-tools/python/from-download.d.ts +53 -0
- package/dist/external-tools/python/from-download.js +75 -0
- package/dist/external-tools/python/from-path.d.ts +7 -0
- package/dist/external-tools/python/from-path.js +23 -0
- package/dist/external-tools/python/pin.d.ts +121 -0
- package/dist/external-tools/python/pin.js +176 -0
- package/dist/external-tools/python/pip-install.d.ts +75 -0
- package/dist/external-tools/python/pip-install.js +142 -0
- package/dist/external-tools/python/resolve.d.ts +42 -0
- package/dist/external-tools/python/resolve.js +66 -0
- package/dist/external-tools/python/types.d.ts +49 -0
- package/dist/external-tools/sbt/asset-names.d.ts +1 -1
- package/dist/external-tools/sbt/asset-names.js +5 -2
- package/dist/external-tools/sbt/from-download.d.ts +1 -1
- package/dist/external-tools/sbt/from-download.js +5 -2
- package/dist/external-tools/sbt/from-vfs.js +1 -1
- package/dist/external-tools/sbt/resolve.d.ts +3 -3
- package/dist/external-tools/sbt/resolve.js +16 -8
- package/dist/external-tools/sbt/types.d.ts +1 -1
- package/dist/external-tools/skillspector/from-dlx.d.ts +1 -1
- package/dist/external-tools/skillspector/from-dlx.js +10 -3
- package/dist/external-tools/skillspector/from-path.js +3 -5
- package/dist/external-tools/skillspector/from-vfs.js +1 -1
- package/dist/external-tools/skillspector/resolve.d.ts +2 -2
- package/dist/external-tools/skillspector/resolve.js +14 -6
- package/dist/external-tools/synp/asset-names.d.ts +1 -1
- package/dist/external-tools/synp/asset-names.js +6 -2
- package/dist/external-tools/synp/from-download.d.ts +1 -1
- package/dist/external-tools/synp/from-download.js +7 -4
- package/dist/external-tools/synp/from-vfs.js +1 -1
- package/dist/external-tools/synp/resolve.d.ts +3 -3
- package/dist/external-tools/synp/resolve.js +16 -8
- package/dist/external-tools/trivy/asset-names.d.ts +1 -1
- package/dist/external-tools/trivy/asset-names.js +5 -2
- package/dist/external-tools/trivy/from-download.d.ts +1 -1
- package/dist/external-tools/trivy/from-download.js +7 -4
- package/dist/external-tools/trivy/from-vfs.js +1 -1
- package/dist/external-tools/trivy/resolve.d.ts +3 -3
- package/dist/external-tools/trivy/resolve.js +16 -8
- package/dist/external-tools/trivy/types.d.ts +1 -1
- package/dist/external-tools/trufflehog/asset-names.d.ts +1 -1
- package/dist/external-tools/trufflehog/asset-names.js +5 -2
- package/dist/external-tools/trufflehog/from-download.d.ts +1 -1
- package/dist/external-tools/trufflehog/from-download.js +7 -4
- package/dist/external-tools/trufflehog/from-vfs.js +1 -1
- package/dist/external-tools/trufflehog/resolve.d.ts +3 -3
- package/dist/external-tools/trufflehog/resolve.js +16 -8
- package/dist/external-tools/trufflehog/types.d.ts +1 -1
- package/dist/fs/_internal.d.ts +1 -1
- package/dist/fs/_internal.js +7 -7
- package/dist/fs/access.js +5 -9
- package/dist/fs/allowed-dirs-cache.d.ts +47 -0
- package/dist/fs/allowed-dirs-cache.js +69 -0
- package/dist/fs/encoding.js +5 -7
- package/dist/fs/{find-up.js → find.js} +12 -14
- package/dist/fs/inspect.js +7 -13
- package/dist/fs/read-dir.js +7 -10
- package/dist/fs/read-file.js +8 -14
- package/dist/fs/read-json-cache.d.ts +13 -4
- package/dist/fs/read-json-cache.js +9 -6
- package/dist/fs/read-json.js +4 -6
- package/dist/fs/resolve-module.js +7 -3
- package/dist/fs/safe.d.ts +1 -1
- package/dist/fs/safe.js +13 -14
- package/dist/fs/unique.js +4 -5
- package/dist/fs/validate.js +1 -2
- package/dist/fs/write-json.js +4 -5
- package/dist/git/_internal.js +11 -11
- package/dist/git/changed.js +4 -4
- package/dist/git/repo.js +5 -7
- package/dist/git/staged.js +12 -4
- package/dist/git/tracked.d.ts +84 -0
- package/dist/git/tracked.js +163 -0
- package/dist/git/unstaged.js +12 -4
- package/dist/github/ghsa.js +2 -2
- package/dist/github/refs-cache.d.ts +1 -1
- package/dist/github/refs-cache.js +5 -5
- package/dist/github/refs-graphql.js +4 -0
- package/dist/github/refs-rest.js +9 -5
- package/dist/github/refs.js +15 -10
- package/dist/github/{fetch.js → request.js} +13 -2
- package/dist/github/token.js +1 -1
- package/dist/github/types.d.ts +1 -1
- package/dist/globs/_internal.js +8 -10
- package/dist/globs/match.js +13 -7
- package/dist/globs/matcher.d.ts +3 -3
- package/dist/globs/matcher.js +16 -14
- package/dist/globs/stream.js +1 -2
- package/dist/globs/types.d.ts +24 -24
- package/dist/http-request/_internal.d.ts +1 -1
- package/dist/http-request/browser.js +10 -4
- package/dist/http-request/checksum-file.d.ts +55 -0
- package/dist/http-request/checksum-file.js +95 -0
- package/dist/http-request/download-types.d.ts +15 -23
- package/dist/http-request/download.js +3 -3
- package/dist/http-request/{browser-fetch.d.ts → fetch/browser.d.ts} +2 -2
- package/dist/http-request/{browser-fetch.js → fetch/browser.js} +4 -4
- package/dist/http-request/headers.js +1 -2
- package/dist/http-request/request-attempt.js +38 -34
- package/dist/http-request/request-types.d.ts +2 -2
- package/dist/http-request/request.js +1 -1
- package/dist/http-request/user-agent.js +4 -5
- package/dist/integrity.d.ts +92 -18
- package/dist/integrity.js +125 -30
- package/dist/ipc/directory.js +2 -2
- package/dist/ipc/paths.js +1 -1
- package/dist/ipc/write.js +1 -1
- package/dist/ipc-cli/get.js +12 -12
- package/dist/json/edit.js +51 -44
- package/dist/json/format.js +1 -1
- package/dist/json/parse.d.ts +1 -1
- package/dist/json/parse.js +3 -7
- package/dist/logger/_internal.d.ts +4 -4
- package/dist/logger/_internal.js +3 -3
- package/dist/logger/colors.js +4 -3
- package/dist/logger/console-methods.d.ts +132 -0
- package/dist/logger/console-methods.js +169 -0
- package/dist/logger/console.d.ts +12 -0
- package/dist/logger/console.js +42 -11
- package/dist/logger/indentation-methods.d.ts +81 -0
- package/dist/logger/indentation-methods.js +121 -0
- package/dist/logger/node.d.ts +16 -338
- package/dist/logger/node.js +75 -608
- package/dist/logger/options.d.ts +39 -0
- package/dist/logger/options.js +47 -0
- package/dist/logger/semantic-methods.d.ts +63 -0
- package/dist/logger/semantic-methods.js +108 -0
- package/dist/logger/stream-methods.d.ts +63 -0
- package/dist/logger/stream-methods.js +101 -0
- package/dist/logger/stream.d.ts +37 -0
- package/dist/logger/stream.js +42 -0
- package/dist/logger/symbols-builder.js +9 -9
- package/dist/logger/symbols.d.ts +2 -25
- package/dist/logger/symbols.js +53 -74
- package/dist/logger/types.d.ts +1 -1
- package/dist/memo/types.d.ts +6 -6
- package/dist/native-messaging/host.d.ts +20 -0
- package/dist/native-messaging/host.js +120 -0
- package/dist/native-messaging/index.d.ts +5 -0
- package/dist/native-messaging/index.js +22 -0
- package/dist/native-messaging/install.d.ts +60 -0
- package/dist/native-messaging/install.js +144 -0
- package/dist/native-messaging/rate-limit.d.ts +69 -0
- package/dist/native-messaging/rate-limit.js +119 -0
- package/dist/native-messaging/run.d.ts +10 -0
- package/dist/native-messaging/run.js +17 -0
- package/dist/node/async-hooks.js +4 -3
- package/dist/node/child-process.js +4 -3
- package/dist/node/crypto.js +4 -3
- package/dist/node/events.js +4 -3
- package/dist/node/fs-promises.js +4 -3
- package/dist/node/fs.d.ts +22 -6
- package/dist/node/fs.js +17 -3
- package/dist/node/http.js +4 -3
- package/dist/node/https.js +4 -3
- package/dist/node/module.js +10 -6
- package/dist/node/os.d.ts +10 -2
- package/dist/node/os.js +12 -4
- package/dist/node/path.d.ts +11 -2
- package/dist/node/path.js +18 -4
- package/dist/node/timers-promises.js +4 -3
- package/dist/node/url.js +4 -3
- package/dist/node/util.js +4 -3
- package/dist/objects/getters.js +6 -8
- package/dist/objects/inspect.js +1 -4
- package/dist/objects/mutate.js +4 -5
- package/dist/objects/predicates.js +1 -5
- package/dist/objects/sort.js +3 -7
- package/dist/packages/edit-class.d.ts +2 -3
- package/dist/packages/edit-class.js +53 -48
- package/dist/packages/edit.js +12 -14
- package/dist/packages/exports.js +15 -21
- package/dist/packages/fetch.d.ts +16 -0
- package/dist/packages/fetch.js +81 -0
- package/dist/packages/find.d.ts +55 -0
- package/dist/packages/find.js +65 -0
- package/dist/packages/isolation.js +14 -14
- package/dist/packages/licenses.js +18 -18
- package/dist/packages/manifest.js +16 -19
- package/dist/packages/metadata-extensions.d.ts +14 -0
- package/dist/packages/metadata-extensions.js +43 -0
- package/dist/packages/normalize.js +6 -10
- package/dist/packages/provenance.js +17 -19
- package/dist/packages/read.d.ts +29 -0
- package/dist/packages/read.js +66 -0
- package/dist/packages/specs.d.ts +48 -1
- package/dist/packages/specs.js +75 -12
- package/dist/packages/tarball.d.ts +24 -0
- package/dist/packages/tarball.js +81 -0
- package/dist/packages/types.d.ts +22 -22
- package/dist/packages/validation.js +0 -3
- package/dist/paths/_internal.d.ts +2 -1
- package/dist/paths/_internal.js +7 -19
- package/dist/paths/conversion.js +5 -9
- package/dist/paths/dirnames.d.ts +1 -0
- package/dist/paths/dirnames.js +2 -0
- package/dist/paths/filenames.d.ts +0 -1
- package/dist/paths/filenames.js +0 -2
- package/dist/paths/normalize.js +4 -5
- package/dist/paths/packages.js +4 -7
- package/dist/paths/predicates.js +9 -16
- package/dist/paths/resolve.js +17 -25
- package/dist/paths/rewire.d.ts +5 -0
- package/dist/paths/rewire.js +3 -3
- package/dist/paths/socket.d.ts +74 -111
- package/dist/paths/socket.js +106 -139
- package/dist/paths/walk.d.ts +1 -1
- package/dist/paths/walk.js +4 -4
- package/dist/perf/report.js +2 -2
- package/dist/perf/types.d.ts +1 -1
- package/dist/pkg-ext/data.js +1 -1
- package/dist/primordials/array.js +9 -9
- package/dist/primordials/date.js +2 -2
- package/dist/primordials/error.js +3 -3
- package/dist/primordials/headers.d.ts +10 -0
- package/dist/primordials/headers.js +23 -0
- package/dist/primordials/intl.d.ts +13 -0
- package/dist/primordials/intl.js +26 -0
- package/dist/primordials/math.js +33 -33
- package/dist/primordials/number.js +9 -9
- package/dist/primordials/object.js +5 -5
- package/dist/primordials/process.d.ts +88 -0
- package/dist/primordials/process.js +132 -0
- package/dist/primordials/string.d.ts +2 -2
- package/dist/primordials/string.js +6 -6
- package/dist/primordials/symbol.js +3 -3
- package/dist/primordials/uncurry.d.ts +1 -2
- package/dist/primordials/uncurry.js +9 -9
- package/dist/process/abort.js +3 -3
- package/dist/process/lock-manager.js +8 -8
- package/dist/process/spawn/_internal.js +6 -8
- package/dist/process/spawn/child.js +20 -14
- package/dist/process/spawn/errors.js +3 -5
- package/dist/process/spawn/kill-tree.d.ts +53 -0
- package/dist/process/spawn/kill-tree.js +85 -0
- package/dist/process/spawn/stdio.js +0 -1
- package/dist/process/spawn/types.d.ts +5 -5
- package/dist/process/transient.js +2 -2
- package/dist/promises/_internal.d.ts +2 -1
- package/dist/promises/_internal.js +2 -6
- package/dist/promises/iterate.js +11 -15
- package/dist/promises/options.js +3 -6
- package/dist/promises/retry.js +4 -5
- package/dist/promises/timers.d.ts +30 -0
- package/dist/promises/timers.js +48 -0
- package/dist/regexps/spec.js +1 -1
- package/dist/releases/github-archives.d.ts +6 -6
- package/dist/releases/github-archives.js +3 -3
- package/dist/releases/github-asset-url.d.ts +1 -1
- package/dist/releases/github-asset-url.js +5 -5
- package/dist/releases/github-downloads.d.ts +1 -1
- package/dist/releases/github-downloads.js +3 -3
- package/dist/releases/github-listing.d.ts +12 -4
- package/dist/releases/github-listing.js +20 -7
- package/dist/releases/github-retry-config.js +1 -1
- package/dist/releases/github-types.d.ts +6 -6
- package/dist/releases/socket-btm-binary-naming.d.ts +107 -0
- package/dist/releases/socket-btm-binary-naming.js +155 -0
- package/dist/releases/socket-btm.d.ts +8 -115
- package/dist/releases/socket-btm.js +16 -159
- package/dist/schema/types.d.ts +4 -5
- package/dist/schema/validate.js +1 -1
- package/dist/sea/detect.js +6 -6
- package/dist/secrets/_internal.d.ts +2 -2
- package/dist/secrets/_internal.js +2 -2
- package/dist/secrets/compare.d.ts +45 -0
- package/dist/secrets/compare.js +61 -0
- package/dist/secrets/find.d.ts +2 -2
- package/dist/secrets/find.js +10 -4
- package/dist/secrets/keychain.d.ts +1 -1
- package/dist/secrets/keychain.js +6 -4
- package/dist/secrets/linux.js +40 -52
- package/dist/secrets/macos.d.ts +2 -3
- package/dist/secrets/macos.js +24 -33
- package/dist/secrets/rc.d.ts +4 -4
- package/dist/secrets/rc.js +27 -17
- package/dist/secrets/socket-api-token.d.ts +4 -4
- package/dist/secrets/socket-api-token.js +26 -9
- package/dist/secrets/windows.js +32 -37
- package/dist/shadow/skip.js +2 -2
- package/dist/shell/parse.d.ts +32 -0
- package/dist/shell/parse.js +60 -0
- package/dist/smol/detect.js +9 -10
- package/dist/smol/http.js +6 -7
- package/dist/smol/https.js +6 -7
- package/dist/smol/manifest.d.ts +1 -1
- package/dist/smol/manifest.js +6 -7
- package/dist/smol/path.d.ts +1 -1
- package/dist/smol/path.js +7 -8
- package/dist/smol/primordial.d.ts +4 -0
- package/dist/smol/primordial.js +6 -7
- package/dist/smol/purl.d.ts +1 -1
- package/dist/smol/purl.js +7 -8
- package/dist/smol/versions.js +6 -7
- package/dist/smol/vfs.js +6 -7
- package/dist/sorts/_internal.js +6 -8
- package/dist/sorts/natural.js +10 -12
- package/dist/sorts/semver.js +1 -2
- package/dist/sorts/strings.js +0 -1
- package/dist/sorts/types.d.ts +1 -1
- package/dist/spinner/create-spinner-class.d.ts +38 -0
- package/dist/spinner/create-spinner-class.js +302 -0
- package/dist/spinner/default.js +8 -9
- package/dist/spinner/spinner-internals.d.ts +36 -0
- package/dist/spinner/spinner-internals.js +105 -0
- package/dist/spinner/spinner-shimmer-methods.d.ts +54 -0
- package/dist/spinner/spinner-shimmer-methods.js +143 -0
- package/dist/spinner/spinner-status-methods.d.ts +40 -0
- package/dist/spinner/spinner-status-methods.js +133 -0
- package/dist/spinner/spinner.d.ts +8 -5
- package/dist/spinner/spinner.js +19 -706
- package/dist/spinner/types.d.ts +3 -1
- package/dist/spinner/with.d.ts +10 -0
- package/dist/spinner/with.js +16 -2
- package/dist/stdio/divider.js +1 -1
- package/dist/stdio/footer.js +3 -3
- package/dist/stdio/header.js +4 -4
- package/dist/stdio/progress.js +10 -6
- package/dist/stdio/prompts.d.ts +7 -5
- package/dist/stdio/prompts.js +7 -8
- package/dist/stdio/stdout.js +3 -3
- package/dist/streams/parallel.js +3 -5
- package/dist/streams/transform.js +2 -3
- package/dist/strings/format.js +2 -6
- package/dist/strings/predicates.js +0 -2
- package/dist/strings/search.js +1 -2
- package/dist/strings/transform.js +0 -3
- package/dist/strings/width.js +9 -10
- package/dist/tables/bordered.js +4 -3
- package/dist/tables/padding.js +1 -1
- package/dist/tables/simple.js +8 -5
- package/dist/temporal/instant.js +1 -1
- package/dist/temporal/slots.js +6 -6
- package/dist/temporal/system.js +9 -9
- package/dist/themes/context.d.ts +3 -2
- package/dist/themes/context.js +4 -5
- package/dist/themes/themes.js +15 -15
- package/dist/themes/types.d.ts +3 -3
- package/dist/url/assert-safe.d.ts +29 -0
- package/dist/url/assert-safe.js +54 -0
- package/dist/url/parse.js +0 -2
- package/dist/url/predicates.d.ts +31 -1
- package/dist/url/predicates.js +43 -3
- package/dist/url/search-params.js +3 -9
- package/dist/url/types.d.ts +9 -5
- package/dist/versions/_internal.js +3 -3
- package/dist/words/article.js +0 -1
- package/dist/words/capitalize.js +0 -1
- package/dist/words/pluralize.js +15 -5
- package/package.json +419 -216
- package/dist/external-tools/uv/asset-names.d.ts +0 -36
- package/dist/external-tools/uv/asset-names.js +0 -70
- package/dist/external-tools/uv/from-download.d.ts +0 -17
- package/dist/external-tools/uv/from-download.js +0 -47
- package/dist/external-tools/uv/from-path.d.ts +0 -5
- package/dist/external-tools/uv/from-path.js +0 -22
- package/dist/external-tools/uv/from-vfs.d.ts +0 -7
- package/dist/external-tools/uv/from-vfs.js +0 -26
- package/dist/external-tools/uv/resolve.d.ts +0 -25
- package/dist/external-tools/uv/resolve.js +0 -53
- package/dist/external-tools/uv/types.d.ts +0 -24
- package/dist/fs/path-cache.d.ts +0 -21
- package/dist/fs/path-cache.js +0 -34
- package/dist/http-request/checksums.d.ts +0 -69
- package/dist/http-request/checksums.js +0 -108
- package/dist/http-request/http-request.d.ts +0 -12
- package/dist/http-request/http-request.js +0 -11
- package/dist/packages/operations.d.ts +0 -113
- package/dist/packages/operations.js +0 -304
- package/dist/ssri/convert.d.ts +0 -48
- package/dist/ssri/convert.js +0 -69
- package/dist/ssri/parse.d.ts +0 -27
- package/dist/ssri/parse.js +0 -41
- package/dist/ssri/validate.d.ts +0 -41
- package/dist/ssri/validate.js +0 -56
- /package/dist/{bin → cli}/check.d.ts +0 -0
- /package/dist/external-tools/{uv → python}/types.js +0 -0
- /package/dist/fs/{find-up.d.ts → find.d.ts} +0 -0
- /package/dist/github/{fetch.d.ts → request.d.ts} +0 -0
package/dist/logger/symbols.js
CHANGED
|
@@ -22,74 +22,15 @@ src_external__socketregistry_is_unicode_supported = require_runtime.__toESM(src_
|
|
|
22
22
|
* are configured) and re-renders whenever `setTheme()` fires
|
|
23
23
|
* `onThemeChange`.
|
|
24
24
|
*/
|
|
25
|
-
let
|
|
26
|
-
let
|
|
27
|
-
|
|
28
|
-
* Lazily get console symbols on first access.
|
|
29
|
-
*
|
|
30
|
-
* Deferred to avoid accessing global console during early Node.js bootstrap
|
|
31
|
-
* before stdout is ready.
|
|
32
|
-
*/
|
|
33
|
-
function getConsoleSymbols() {
|
|
34
|
-
/* c8 ignore start */
|
|
35
|
-
if (_consoleSymbols === void 0) _consoleSymbols = require_primordials_object.ObjectGetOwnPropertySymbols(require_logger__internal.globalConsole);
|
|
36
|
-
/* c8 ignore stop */
|
|
37
|
-
return _consoleSymbols;
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* Lazily get kGroupIndentationWidth symbol on first access.
|
|
41
|
-
*/
|
|
42
|
-
function getKGroupIndentationWidthSymbol() {
|
|
43
|
-
/* c8 ignore next - Lazy-init second-call branch; module-singleton. */
|
|
44
|
-
if (_kGroupIndentationWidthSymbol === void 0) _kGroupIndentationWidthSymbol = getConsoleSymbols().find((s) => s.label === "kGroupIndentWidth") ?? Symbol("kGroupIndentWidth");
|
|
45
|
-
return _kGroupIndentationWidthSymbol;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* Symbol for incrementing the internal log call counter.
|
|
49
|
-
*
|
|
50
|
-
* This is an internal symbol used to track the number of times logging methods
|
|
51
|
-
* have been called on a logger instance.
|
|
52
|
-
*/
|
|
53
|
-
const incLogCallCountSymbol = Symbol.for("logger.logCallCount++");
|
|
54
|
-
/**
|
|
55
|
-
* Symbol for tracking whether the last logged line was blank.
|
|
56
|
-
*
|
|
57
|
-
* This is used internally to prevent multiple consecutive blank lines and to
|
|
58
|
-
* determine whether to add spacing before certain messages.
|
|
59
|
-
*/
|
|
60
|
-
const lastWasBlankSymbol = Symbol.for("logger.lastWasBlank");
|
|
61
|
-
/**
|
|
62
|
-
* Log symbols for terminal output with colored indicators.
|
|
63
|
-
*
|
|
64
|
-
* Provides colored Unicode symbols (✖, ℹ, ∴, →, ✔, ⚠) with ASCII fallbacks (×,
|
|
65
|
-
* i, :., >, √, ‼) for terminals that don't support Unicode. Symbols are colored
|
|
66
|
-
* according to the active theme's color palette (error, info, reason, step,
|
|
67
|
-
* success, warning).
|
|
68
|
-
*
|
|
69
|
-
* The symbols are lazily initialized on first access and automatically update
|
|
70
|
-
* when the fallback theme changes (via setTheme()). Note that LOG_SYMBOLS
|
|
71
|
-
* reflect the global fallback theme, not async-local theme contexts from
|
|
72
|
-
* withTheme().
|
|
73
|
-
*
|
|
74
|
-
* @example
|
|
75
|
-
* ```typescript
|
|
76
|
-
* import { LOG_SYMBOLS } from '@socketsecurity/lib/logger/symbols'
|
|
77
|
-
*
|
|
78
|
-
* console.log(`${LOG_SYMBOLS.fail} Build failed`) // Theme error color ✖
|
|
79
|
-
* console.log(`${LOG_SYMBOLS.info} Starting process`) // Theme info color ℹ
|
|
80
|
-
* console.log(`${LOG_SYMBOLS.progress} Working on task`) // Theme step color ∴
|
|
81
|
-
* console.log(`${LOG_SYMBOLS.step} Processing files`) // Theme step color →
|
|
82
|
-
* console.log(`${LOG_SYMBOLS.success} Build completed`) // Theme success color ✔
|
|
83
|
-
* console.log(`${LOG_SYMBOLS.warn} Deprecated API used`) // Theme warning color ⚠
|
|
84
|
-
* ```
|
|
85
|
-
*/
|
|
86
|
-
const LOG_SYMBOLS = /*@__PURE__*/ (() => {
|
|
25
|
+
let consoleSymbols;
|
|
26
|
+
let kGroupIndentationWidthSymbol;
|
|
27
|
+
function createLogSymbols() {
|
|
87
28
|
const target = { __proto__: null };
|
|
88
29
|
let initialized = false;
|
|
89
30
|
const handler = { __proto__: null };
|
|
90
31
|
const updateSymbols = () => {
|
|
91
32
|
const supported = (0, src_external__socketregistry_is_unicode_supported.default)();
|
|
92
|
-
const colors =
|
|
33
|
+
const colors = require_logger_colors.getYoctocolors();
|
|
93
34
|
const theme = require_themes_context.getTheme();
|
|
94
35
|
const successColor = theme.colors.success;
|
|
95
36
|
const errorColor = theme.colors.error;
|
|
@@ -98,18 +39,18 @@ const LOG_SYMBOLS = /*@__PURE__*/ (() => {
|
|
|
98
39
|
const stepColor = theme.colors.step;
|
|
99
40
|
/* c8 ignore start - ASCII-fallback symbol arms only fire on
|
|
100
41
|
terminals without unicode support; tests run on unicode TTYs. */
|
|
101
|
-
target["fail"] =
|
|
102
|
-
target["info"] =
|
|
103
|
-
target["progress"] =
|
|
104
|
-
target["reason"] = colors.dim(
|
|
105
|
-
target["skip"] =
|
|
106
|
-
target["step"] =
|
|
107
|
-
target["success"] =
|
|
108
|
-
target["warn"] =
|
|
42
|
+
target["fail"] = require_logger_colors.applyColor(supported ? "✖" : "×", errorColor, colors);
|
|
43
|
+
target["info"] = require_logger_colors.applyColor(supported ? "ℹ" : "i", infoColor, colors);
|
|
44
|
+
target["progress"] = require_logger_colors.applyColor(supported ? "∴" : ":.", stepColor, colors);
|
|
45
|
+
target["reason"] = colors.dim(require_logger_colors.applyColor(supported ? "∴" : ":.", warningColor, colors));
|
|
46
|
+
target["skip"] = require_logger_colors.applyColor(supported ? "↻" : "@", stepColor, colors);
|
|
47
|
+
target["step"] = require_logger_colors.applyColor(supported ? "→" : ">", stepColor, colors);
|
|
48
|
+
target["success"] = require_logger_colors.applyColor(supported ? "✔" : "√", successColor, colors);
|
|
49
|
+
target["warn"] = require_logger_colors.applyColor(supported ? "⚠" : "‼", warningColor, colors);
|
|
109
50
|
/* c8 ignore stop */
|
|
110
51
|
};
|
|
111
52
|
const init = () => {
|
|
112
|
-
/* c8 ignore start */
|
|
53
|
+
/* c8 ignore start - Idempotent guard; init runs once, second-call branch never re-enters. */
|
|
113
54
|
if (initialized) return;
|
|
114
55
|
/* c8 ignore stop */
|
|
115
56
|
updateSymbols();
|
|
@@ -117,7 +58,7 @@ const LOG_SYMBOLS = /*@__PURE__*/ (() => {
|
|
|
117
58
|
for (const trapName in handler) delete handler[trapName];
|
|
118
59
|
};
|
|
119
60
|
const reset = () => {
|
|
120
|
-
/* c8 ignore start */
|
|
61
|
+
/* c8 ignore start - Defensive guard; reset only runs after init, so the un-init branch is unreachable in tests. */
|
|
121
62
|
if (!initialized) return;
|
|
122
63
|
/* c8 ignore stop */
|
|
123
64
|
updateSymbols();
|
|
@@ -136,10 +77,48 @@ const LOG_SYMBOLS = /*@__PURE__*/ (() => {
|
|
|
136
77
|
reset();
|
|
137
78
|
});
|
|
138
79
|
return new require_primordials_globals.ProxyCtor(target, handler);
|
|
139
|
-
}
|
|
80
|
+
}
|
|
81
|
+
function createLogSymbolsProxyPlaceholder() {}
|
|
82
|
+
/**
|
|
83
|
+
* Lazily get console symbols on first access.
|
|
84
|
+
*
|
|
85
|
+
* Deferred to avoid accessing global console during early Node.js bootstrap
|
|
86
|
+
* before stdout is ready.
|
|
87
|
+
*/
|
|
88
|
+
function getConsoleSymbols() {
|
|
89
|
+
/* c8 ignore start - Lazy-init second-call branch; module-singleton, the re-init guard never re-enters in tests. */
|
|
90
|
+
if (consoleSymbols === void 0) consoleSymbols = require_primordials_object.ObjectGetOwnPropertySymbols(require_logger__internal.globalConsole);
|
|
91
|
+
/* c8 ignore stop */
|
|
92
|
+
return consoleSymbols;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Lazily get kGroupIndentationWidth symbol on first access.
|
|
96
|
+
*/
|
|
97
|
+
function getKGroupIndentationWidthSymbol() {
|
|
98
|
+
/* c8 ignore next - Lazy-init second-call branch; module-singleton. */
|
|
99
|
+
if (kGroupIndentationWidthSymbol === void 0) kGroupIndentationWidthSymbol = getConsoleSymbols().find((s) => s.label === "kGroupIndentWidth") ?? Symbol("kGroupIndentWidth");
|
|
100
|
+
return kGroupIndentationWidthSymbol;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Symbol for incrementing the internal log call counter.
|
|
104
|
+
*
|
|
105
|
+
* This is an internal symbol used to track the number of times logging methods
|
|
106
|
+
* have been called on a logger instance.
|
|
107
|
+
*/
|
|
108
|
+
const incLogCallCountSymbol = Symbol.for("logger.logCallCount++");
|
|
109
|
+
/**
|
|
110
|
+
* Symbol for tracking whether the last logged line was blank.
|
|
111
|
+
*
|
|
112
|
+
* This is used internally to prevent multiple consecutive blank lines and to
|
|
113
|
+
* determine whether to add spacing before certain messages.
|
|
114
|
+
*/
|
|
115
|
+
const lastWasBlankSymbol = Symbol.for("logger.lastWasBlank");
|
|
116
|
+
const LOG_SYMBOLS = /*@__PURE__*/ createLogSymbols();
|
|
140
117
|
|
|
141
118
|
//#endregion
|
|
142
119
|
exports.LOG_SYMBOLS = LOG_SYMBOLS;
|
|
120
|
+
exports.createLogSymbols = createLogSymbols;
|
|
121
|
+
exports.createLogSymbolsProxyPlaceholder = createLogSymbolsProxyPlaceholder;
|
|
143
122
|
exports.getConsoleSymbols = getConsoleSymbols;
|
|
144
123
|
exports.getKGroupIndentationWidthSymbol = getKGroupIndentationWidthSymbol;
|
|
145
124
|
exports.incLogCallCountSymbol = incLogCallCountSymbol;
|
package/dist/logger/types.d.ts
CHANGED
|
@@ -59,7 +59,7 @@ export type LogSymbols = {
|
|
|
59
59
|
* All methods return the logger instance for method chaining.
|
|
60
60
|
*/
|
|
61
61
|
export type LoggerMethods = {
|
|
62
|
-
[K in keyof typeof console]: (typeof console)[K] extends (...args: infer A) =>
|
|
62
|
+
[K in keyof typeof console]: (typeof console)[K] extends (...args: infer A) => unknown ? (...args: A) => Logger : (typeof console)[K];
|
|
63
63
|
};
|
|
64
64
|
/**
|
|
65
65
|
* A task that can be executed with automatic start/complete logging.
|
package/dist/memo/types.d.ts
CHANGED
|
@@ -11,27 +11,27 @@ export type MemoizeOptions<Args extends unknown[]> = {
|
|
|
11
11
|
/**
|
|
12
12
|
* Custom cache key generator (defaults to JSON.stringify)
|
|
13
13
|
*/
|
|
14
|
-
keyGen?: (...args: Args) => string;
|
|
14
|
+
keyGen?: ((...args: Args) => string) | undefined;
|
|
15
15
|
/**
|
|
16
16
|
* Maximum cache size (LRU eviction when exceeded)
|
|
17
17
|
*/
|
|
18
|
-
maxSize?: number;
|
|
18
|
+
maxSize?: number | undefined;
|
|
19
19
|
/**
|
|
20
20
|
* TTL in milliseconds (cache entries expire after this time)
|
|
21
21
|
*/
|
|
22
|
-
ttl?: number;
|
|
22
|
+
ttl?: number | undefined;
|
|
23
23
|
/**
|
|
24
24
|
* Cache name for debugging.
|
|
25
25
|
*/
|
|
26
|
-
name?: string;
|
|
26
|
+
name?: string | undefined;
|
|
27
27
|
/**
|
|
28
28
|
* Weak cache for object keys (enables GC)
|
|
29
29
|
*/
|
|
30
|
-
weak?: boolean;
|
|
30
|
+
weak?: boolean | undefined;
|
|
31
31
|
/**
|
|
32
32
|
* Custom equality check for cache hits.
|
|
33
33
|
*/
|
|
34
|
-
equals?: (a: Args, b: Args) => boolean;
|
|
34
|
+
equals?: ((a: Args, b: Args) => boolean) | undefined;
|
|
35
35
|
};
|
|
36
36
|
/**
|
|
37
37
|
* Cache entry with metadata.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Chrome native messaging host entry point. Chrome launches this script
|
|
3
|
+
* as a subprocess when the extension calls
|
|
4
|
+
* `chrome.runtime.connectNative('dev.socket.trusted-publisher-host')`. The
|
|
5
|
+
* protocol is length-prefixed binary over stdin/stdout: incoming: [4-byte LE
|
|
6
|
+
* uint32 length][UTF-8 JSON message] outgoing: [4-byte LE uint32
|
|
7
|
+
* length][UTF-8 JSON response] The host handles one request type: { type:
|
|
8
|
+
* 'get-api-token' } → { token: string } | { error: string } The host NEVER
|
|
9
|
+
* logs to stdout (Chrome treats any stdout byte outside the length-prefixed
|
|
10
|
+
* protocol as a message boundary error). All diagnostics go to stderr only.
|
|
11
|
+
* Detection: Chrome passes the extension origin as `process.argv[2]`
|
|
12
|
+
* (`chrome-extension://<id>/`). The `NATIVE_MESSAGING_HOST` constant in
|
|
13
|
+
* `src/constants/platform.ts` captures this check so other modules can skip
|
|
14
|
+
* TTY-only paths when running in this context.
|
|
15
|
+
*/
|
|
16
|
+
import type { Readable, Writable } from 'node:stream';
|
|
17
|
+
export declare function handleOne(stdin?: Readable, stdout?: Writable): Promise<void>;
|
|
18
|
+
export declare function readExact(length: number, stream?: Readable): Promise<Buffer>;
|
|
19
|
+
export declare function runHost(): Promise<void>;
|
|
20
|
+
export declare function writeMessage(obj: unknown, stream?: Writable): void;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* Socket Lib - Built with rolldown */
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
const require_runtime = require('../_virtual/_rolldown/runtime.js');
|
|
5
|
+
const require_primordials_error = require('../primordials/error.js');
|
|
6
|
+
const require_errors_message = require('../errors/message.js');
|
|
7
|
+
const require_logger_default = require('../logger/default.js');
|
|
8
|
+
const require_secrets_socket_api_token = require('../secrets/socket-api-token.js');
|
|
9
|
+
const require_native_messaging_install = require('./install.js');
|
|
10
|
+
let node_process = require("node:process");
|
|
11
|
+
node_process = require_runtime.__toESM(node_process);
|
|
12
|
+
|
|
13
|
+
//#region src/native-messaging/host.ts
|
|
14
|
+
/**
|
|
15
|
+
* @file Chrome native messaging host entry point. Chrome launches this script
|
|
16
|
+
* as a subprocess when the extension calls
|
|
17
|
+
* `chrome.runtime.connectNative('dev.socket.trusted-publisher-host')`. The
|
|
18
|
+
* protocol is length-prefixed binary over stdin/stdout: incoming: [4-byte LE
|
|
19
|
+
* uint32 length][UTF-8 JSON message] outgoing: [4-byte LE uint32
|
|
20
|
+
* length][UTF-8 JSON response] The host handles one request type: { type:
|
|
21
|
+
* 'get-api-token' } → { token: string } | { error: string } The host NEVER
|
|
22
|
+
* logs to stdout (Chrome treats any stdout byte outside the length-prefixed
|
|
23
|
+
* protocol as a message boundary error). All diagnostics go to stderr only.
|
|
24
|
+
* Detection: Chrome passes the extension origin as `process.argv[2]`
|
|
25
|
+
* (`chrome-extension://<id>/`). The `NATIVE_MESSAGING_HOST` constant in
|
|
26
|
+
* `src/constants/platform.ts` captures this check so other modules can skip
|
|
27
|
+
* TTY-only paths when running in this context.
|
|
28
|
+
*/
|
|
29
|
+
const logger = require_logger_default.getDefaultLogger();
|
|
30
|
+
async function handleOne(stdin, stdout) {
|
|
31
|
+
const inStream = stdin ?? node_process.default.stdin;
|
|
32
|
+
const outStream = stdout ?? node_process.default.stdout;
|
|
33
|
+
const length = (await readExact(4, inStream)).readUInt32LE(0);
|
|
34
|
+
if (length === 0 || length > 1048576) {
|
|
35
|
+
writeMessage({ error: `invalid message length: ${length}` }, outStream);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const body = await readExact(length, inStream);
|
|
39
|
+
let msg;
|
|
40
|
+
try {
|
|
41
|
+
msg = JSON.parse(body.toString("utf8"));
|
|
42
|
+
} catch {
|
|
43
|
+
writeMessage({ error: "message is not valid JSON" }, outStream);
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
const type = msg["type"];
|
|
47
|
+
if (type === "get-api-token") {
|
|
48
|
+
const token = await require_secrets_socket_api_token.readSocketApiToken();
|
|
49
|
+
if (token) writeMessage({ token }, outStream);
|
|
50
|
+
else writeMessage({ error: "Socket API token not found. Set SOCKET_API_TOKEN in your environment." }, outStream);
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
writeMessage({ error: `unknown message type: ${String(type)}` }, outStream);
|
|
54
|
+
}
|
|
55
|
+
function readExact(length, stream) {
|
|
56
|
+
const src = stream ?? node_process.default.stdin;
|
|
57
|
+
return new Promise((resolve, reject) => {
|
|
58
|
+
const chunks = [];
|
|
59
|
+
let received = 0;
|
|
60
|
+
function cleanup() {
|
|
61
|
+
src.off("readable", onReadable);
|
|
62
|
+
src.off("error", onError);
|
|
63
|
+
src.off("end", onEnd);
|
|
64
|
+
}
|
|
65
|
+
function tryRead() {
|
|
66
|
+
let needed = length - received;
|
|
67
|
+
while (needed > 0) {
|
|
68
|
+
const chunk = src.read(needed) ?? src.read();
|
|
69
|
+
if (chunk === null) return;
|
|
70
|
+
chunks.push(chunk);
|
|
71
|
+
received += chunk.length;
|
|
72
|
+
needed = length - received;
|
|
73
|
+
}
|
|
74
|
+
cleanup();
|
|
75
|
+
const full = Buffer.concat(chunks);
|
|
76
|
+
if (received > length) src.unshift(full.subarray(length));
|
|
77
|
+
resolve(full.subarray(0, length));
|
|
78
|
+
}
|
|
79
|
+
function onReadable() {
|
|
80
|
+
tryRead();
|
|
81
|
+
}
|
|
82
|
+
function onError(err) {
|
|
83
|
+
cleanup();
|
|
84
|
+
reject(err);
|
|
85
|
+
}
|
|
86
|
+
function onEnd() {
|
|
87
|
+
cleanup();
|
|
88
|
+
reject(new require_primordials_error.ErrorCtor("stdin closed before message was complete"));
|
|
89
|
+
}
|
|
90
|
+
src.on("readable", onReadable);
|
|
91
|
+
src.on("error", onError);
|
|
92
|
+
src.once("end", onEnd);
|
|
93
|
+
tryRead();
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
async function runHost() {
|
|
97
|
+
try {
|
|
98
|
+
require_native_messaging_install.assertNodeStripTypesSupported();
|
|
99
|
+
} catch (e) {
|
|
100
|
+
logger.error(require_errors_message.errorMessage(e));
|
|
101
|
+
node_process.default.exit(1);
|
|
102
|
+
}
|
|
103
|
+
while (true) try {
|
|
104
|
+
await handleOne();
|
|
105
|
+
} catch {
|
|
106
|
+
node_process.default.exit(0);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
function writeMessage(obj, stream) {
|
|
110
|
+
const payload = Buffer.from(JSON.stringify(obj), "utf8");
|
|
111
|
+
const header = Buffer.allocUnsafe(4);
|
|
112
|
+
header.writeUInt32LE(payload.length, 0);
|
|
113
|
+
(stream ?? node_process.default.stdout).write(Buffer.concat([header, payload]));
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
//#endregion
|
|
117
|
+
exports.handleOne = handleOne;
|
|
118
|
+
exports.readExact = readExact;
|
|
119
|
+
exports.runHost = runHost;
|
|
120
|
+
exports.writeMessage = writeMessage;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { handleOne, readExact, runHost, writeMessage } from './host';
|
|
2
|
+
export { HOST_NAME, MIN_NODE_VERSION_FOR_STRIP_TYPES, assertNodeStripTypesSupported, buildManifest, chromeManifestDirs, installNativeHost, registerWindows, stripTypesFlag, writeWrapperPosix, writeWrapperWindows, } from './install';
|
|
3
|
+
export type { InstallOptions, InstallResult } from './install';
|
|
4
|
+
export { TokenBucketLimiter } from './rate-limit';
|
|
5
|
+
export type { TokenBucketOptions } from './rate-limit';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* Socket Lib - Built with rolldown */
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
const require_native_messaging_install = require('./install.js');
|
|
5
|
+
const require_native_messaging_host = require('./host.js');
|
|
6
|
+
const require_native_messaging_rate_limit = require('./rate-limit.js');
|
|
7
|
+
|
|
8
|
+
exports.HOST_NAME = require_native_messaging_install.HOST_NAME;
|
|
9
|
+
exports.MIN_NODE_VERSION_FOR_STRIP_TYPES = require_native_messaging_install.MIN_NODE_VERSION_FOR_STRIP_TYPES;
|
|
10
|
+
exports.TokenBucketLimiter = require_native_messaging_rate_limit.TokenBucketLimiter;
|
|
11
|
+
exports.assertNodeStripTypesSupported = require_native_messaging_install.assertNodeStripTypesSupported;
|
|
12
|
+
exports.buildManifest = require_native_messaging_install.buildManifest;
|
|
13
|
+
exports.chromeManifestDirs = require_native_messaging_install.chromeManifestDirs;
|
|
14
|
+
exports.handleOne = require_native_messaging_host.handleOne;
|
|
15
|
+
exports.installNativeHost = require_native_messaging_install.installNativeHost;
|
|
16
|
+
exports.readExact = require_native_messaging_host.readExact;
|
|
17
|
+
exports.registerWindows = require_native_messaging_install.registerWindows;
|
|
18
|
+
exports.runHost = require_native_messaging_host.runHost;
|
|
19
|
+
exports.stripTypesFlag = require_native_messaging_install.stripTypesFlag;
|
|
20
|
+
exports.writeMessage = require_native_messaging_host.writeMessage;
|
|
21
|
+
exports.writeWrapperPosix = require_native_messaging_install.writeWrapperPosix;
|
|
22
|
+
exports.writeWrapperWindows = require_native_messaging_install.writeWrapperWindows;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Install the Socket native messaging host manifest so Chrome can find
|
|
3
|
+
* and launch the host when the extension calls connectNative(). Native host
|
|
4
|
+
* manifest paths (Chrome): macOS ~/Library/Application
|
|
5
|
+
* Support/Google/Chrome/NativeMessagingHosts/<name>.json
|
|
6
|
+
* ~/Library/Application Support/Chromium/NativeMessagingHosts/<name>.json
|
|
7
|
+
* Linux ~/.config/google-chrome/NativeMessagingHosts/<name>.json
|
|
8
|
+
* ~/.config/chromium/NativeMessagingHosts/<name>.json Windows
|
|
9
|
+
* HKCU\Software\Google\Chrome\NativeMessagingHosts<name> → path to .json The
|
|
10
|
+
* manifest points to a small wrapper shell script (POSIX) or .cmd (Windows)
|
|
11
|
+
* that invokes `node /path/to/socket-lib/src/native-messaging/run.ts` with
|
|
12
|
+
* the `--native-messaging` flag so the host can detect its context even when
|
|
13
|
+
* the extension origin arg is absent (e.g. during local testing). Strip-types
|
|
14
|
+
* flag policy: Node 24+ no flag needed (default-on). Node 22.6–23 pass
|
|
15
|
+
* `--strip-types` (stable since 22.6). Node < 22.6 refuse to install;
|
|
16
|
+
* assertNodeStripTypesSupported throws. The flag decision is baked into the
|
|
17
|
+
* wrapper at install time. If the user later switches Node versions (e.g. via
|
|
18
|
+
* nvm) the host enforces the same floor at runtime via
|
|
19
|
+
* assertNodeStripTypesSupported.
|
|
20
|
+
*/
|
|
21
|
+
export declare const HOST_NAME = "dev.socket.trusted_publisher_host";
|
|
22
|
+
export declare const MIN_NODE_VERSION_FOR_STRIP_TYPES = "22.6.0";
|
|
23
|
+
export interface InstallOptions {
|
|
24
|
+
/**
|
|
25
|
+
* List of Chrome extension origin URLs that are allowed to connect to this
|
|
26
|
+
* host. Each entry is `chrome-extension://<extension-id>/`. Pass `['*']`
|
|
27
|
+
* during development to allow any extension (not for production).
|
|
28
|
+
*/
|
|
29
|
+
allowedOrigins: string[];
|
|
30
|
+
/**
|
|
31
|
+
* When `true`, reject wildcard origins (`['*']`) — production installs must
|
|
32
|
+
* pin to specific extension IDs.
|
|
33
|
+
*/
|
|
34
|
+
production?: boolean | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Directory to write the wrapper script. Defaults to the same directory as
|
|
37
|
+
* this file (`src/native-messaging/`).
|
|
38
|
+
*/
|
|
39
|
+
wrapperDir?: string | undefined;
|
|
40
|
+
}
|
|
41
|
+
export interface InstallResult {
|
|
42
|
+
manifestPaths: string[];
|
|
43
|
+
wrapperPath: string;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Throw a clear, actionable error if the current Node runtime is too old to
|
|
47
|
+
* strip TypeScript types (i.e. < 22.6). Use at install time + host startup.
|
|
48
|
+
*
|
|
49
|
+
* The error message names the active Node version manager (nvm / fnm / volta /
|
|
50
|
+
* asdf / n / corepack / system) and gives the exact one-liner to upgrade — so
|
|
51
|
+
* the user can copy-paste the fix rather than searching docs.
|
|
52
|
+
*/
|
|
53
|
+
export declare function assertNodeStripTypesSupported(): void;
|
|
54
|
+
export declare function buildManifest(wrapperPath: string, allowedOrigins: string[]): object;
|
|
55
|
+
export declare function chromeManifestDirs(): string[];
|
|
56
|
+
export declare function installNativeHost(options: InstallOptions): InstallResult;
|
|
57
|
+
export declare function registerWindows(manifestPath: string): void;
|
|
58
|
+
export declare function stripTypesFlag(): string;
|
|
59
|
+
export declare function writeWrapperPosix(wrapperPath: string): void;
|
|
60
|
+
export declare function writeWrapperWindows(wrapperPath: string): void;
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* Socket Lib - Built with rolldown */
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
const require_runtime = require('../_virtual/_rolldown/runtime.js');
|
|
5
|
+
const require_primordials_error = require('../primordials/error.js');
|
|
6
|
+
const require_constants_platform = require('../constants/platform.js');
|
|
7
|
+
const require_env_home = require('../env/home.js');
|
|
8
|
+
const require_env_windows = require('../env/windows.js');
|
|
9
|
+
const require_constants_node = require('../constants/node.js');
|
|
10
|
+
const require_env_node_version_managers = require('../env/node-version-managers.js');
|
|
11
|
+
let node_fs = require("node:fs");
|
|
12
|
+
let node_process = require("node:process");
|
|
13
|
+
node_process = require_runtime.__toESM(node_process);
|
|
14
|
+
let node_path = require("node:path");
|
|
15
|
+
node_path = require_runtime.__toESM(node_path);
|
|
16
|
+
let node_url = require("node:url");
|
|
17
|
+
let _socketsecurity_lib_stable_process_spawn_child = require("@socketsecurity/lib-stable/process/spawn/child");
|
|
18
|
+
|
|
19
|
+
//#region src/native-messaging/install.ts
|
|
20
|
+
/**
|
|
21
|
+
* @file Install the Socket native messaging host manifest so Chrome can find
|
|
22
|
+
* and launch the host when the extension calls connectNative(). Native host
|
|
23
|
+
* manifest paths (Chrome): macOS ~/Library/Application
|
|
24
|
+
* Support/Google/Chrome/NativeMessagingHosts/<name>.json
|
|
25
|
+
* ~/Library/Application Support/Chromium/NativeMessagingHosts/<name>.json
|
|
26
|
+
* Linux ~/.config/google-chrome/NativeMessagingHosts/<name>.json
|
|
27
|
+
* ~/.config/chromium/NativeMessagingHosts/<name>.json Windows
|
|
28
|
+
* HKCU\Software\Google\Chrome\NativeMessagingHosts<name> → path to .json The
|
|
29
|
+
* manifest points to a small wrapper shell script (POSIX) or .cmd (Windows)
|
|
30
|
+
* that invokes `node /path/to/socket-lib/src/native-messaging/run.ts` with
|
|
31
|
+
* the `--native-messaging` flag so the host can detect its context even when
|
|
32
|
+
* the extension origin arg is absent (e.g. during local testing). Strip-types
|
|
33
|
+
* flag policy: Node 24+ no flag needed (default-on). Node 22.6–23 pass
|
|
34
|
+
* `--strip-types` (stable since 22.6). Node < 22.6 refuse to install;
|
|
35
|
+
* assertNodeStripTypesSupported throws. The flag decision is baked into the
|
|
36
|
+
* wrapper at install time. If the user later switches Node versions (e.g. via
|
|
37
|
+
* nvm) the host enforces the same floor at runtime via
|
|
38
|
+
* assertNodeStripTypesSupported.
|
|
39
|
+
*/
|
|
40
|
+
const HOST_NAME = "dev.socket.trusted_publisher_host";
|
|
41
|
+
const MIN_NODE_VERSION_FOR_STRIP_TYPES = "22.6.0";
|
|
42
|
+
const __dirname$1 = node_path.default.dirname((0, node_url.fileURLToPath)(require("url").pathToFileURL(__filename).href));
|
|
43
|
+
const HOST_SCRIPT = node_path.default.resolve(__dirname$1, "run.ts");
|
|
44
|
+
/**
|
|
45
|
+
* Throw a clear, actionable error if the current Node runtime is too old to
|
|
46
|
+
* strip TypeScript types (i.e. < 22.6). Use at install time + host startup.
|
|
47
|
+
*
|
|
48
|
+
* The error message names the active Node version manager (nvm / fnm / volta /
|
|
49
|
+
* asdf / n / corepack / system) and gives the exact one-liner to upgrade — so
|
|
50
|
+
* the user can copy-paste the fix rather than searching docs.
|
|
51
|
+
*/
|
|
52
|
+
function assertNodeStripTypesSupported() {
|
|
53
|
+
if (require_constants_node.supportsNodeStripTypes()) return;
|
|
54
|
+
const manager = require_env_node_version_managers.detectActiveNodeManager();
|
|
55
|
+
const hint = require_env_node_version_managers.nodeManagerUpgradeHint(manager, MIN_NODE_VERSION_FOR_STRIP_TYPES);
|
|
56
|
+
throw new require_primordials_error.ErrorCtor(`Node ${require_constants_node.getNodeVersion()} cannot run TypeScript directly. The Socket native-messaging host needs Node ${MIN_NODE_VERSION_FOR_STRIP_TYPES}+ (type-stripping is stable in Node 22.6 and default-on in Node 24).\nDetected Node manager: ${manager}\nTo upgrade: ${hint}`);
|
|
57
|
+
}
|
|
58
|
+
function buildManifest(wrapperPath, allowedOrigins) {
|
|
59
|
+
return {
|
|
60
|
+
name: HOST_NAME,
|
|
61
|
+
description: "Socket Security — API token bridge for the Trusted Publisher extension",
|
|
62
|
+
path: wrapperPath,
|
|
63
|
+
type: "stdio",
|
|
64
|
+
allowed_origins: allowedOrigins
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function chromeManifestDirs() {
|
|
68
|
+
const home = require_env_home.getHome();
|
|
69
|
+
if (!home) throw new require_primordials_error.ErrorCtor("Cannot determine home directory.");
|
|
70
|
+
if (require_constants_platform.DARWIN) {
|
|
71
|
+
const lib = node_path.default.join(home, "Library", "Application Support");
|
|
72
|
+
return [node_path.default.join(lib, "Google", "Chrome", "NativeMessagingHosts"), node_path.default.join(lib, "Chromium", "NativeMessagingHosts")];
|
|
73
|
+
}
|
|
74
|
+
if (require_constants_platform.WIN32) {
|
|
75
|
+
const appData = require_env_windows.getAppdata() ?? node_path.default.join(home, "AppData", "Roaming");
|
|
76
|
+
return [node_path.default.join(appData, "Google", "Chrome", "User Data", "NativeMessagingHosts")];
|
|
77
|
+
}
|
|
78
|
+
const config = node_process.default.env["XDG_CONFIG_HOME"] ?? node_path.default.join(home, ".config");
|
|
79
|
+
return [node_path.default.join(config, "google-chrome", "NativeMessagingHosts"), node_path.default.join(config, "chromium", "NativeMessagingHosts")];
|
|
80
|
+
}
|
|
81
|
+
function installNativeHost(options) {
|
|
82
|
+
assertNodeStripTypesSupported();
|
|
83
|
+
const { allowedOrigins, production = false, wrapperDir = __dirname$1 } = {
|
|
84
|
+
__proto__: null,
|
|
85
|
+
...options
|
|
86
|
+
};
|
|
87
|
+
if (production && allowedOrigins.includes("*")) throw new require_primordials_error.ErrorCtor("production mode rejects allowedOrigins '*' — pin to specific chrome-extension://<id>/ origins");
|
|
88
|
+
if (allowedOrigins.length === 0) throw new require_primordials_error.ErrorCtor("allowedOrigins must contain at least one origin; pass ['*'] for development");
|
|
89
|
+
const wrapperName = require_constants_platform.WIN32 ? `${HOST_NAME}.cmd` : `${HOST_NAME}.sh`;
|
|
90
|
+
const wrapperPath = node_path.default.join(wrapperDir, wrapperName);
|
|
91
|
+
if (require_constants_platform.WIN32) writeWrapperWindows(wrapperPath);
|
|
92
|
+
else writeWrapperPosix(wrapperPath);
|
|
93
|
+
const manifest = buildManifest(wrapperPath, allowedOrigins);
|
|
94
|
+
const dirs = chromeManifestDirs();
|
|
95
|
+
const written = [];
|
|
96
|
+
for (const dir of dirs) {
|
|
97
|
+
(0, node_fs.mkdirSync)(dir, { recursive: true });
|
|
98
|
+
const manifestPath = node_path.default.join(dir, `${HOST_NAME}.json`);
|
|
99
|
+
(0, node_fs.writeFileSync)(manifestPath, JSON.stringify(manifest, null, 2) + "\n", "utf8");
|
|
100
|
+
written.push(manifestPath);
|
|
101
|
+
}
|
|
102
|
+
if (require_constants_platform.WIN32 && written[0]) registerWindows(written[0]);
|
|
103
|
+
return {
|
|
104
|
+
manifestPaths: written,
|
|
105
|
+
wrapperPath
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
function registerWindows(manifestPath) {
|
|
109
|
+
(0, _socketsecurity_lib_stable_process_spawn_child.spawnSync)("reg", [
|
|
110
|
+
"add",
|
|
111
|
+
`HKCU\\Software\\Google\\Chrome\\NativeMessagingHosts\\${HOST_NAME}`,
|
|
112
|
+
"/ve",
|
|
113
|
+
"/t",
|
|
114
|
+
"REG_SZ",
|
|
115
|
+
"/d",
|
|
116
|
+
manifestPath,
|
|
117
|
+
"/f"
|
|
118
|
+
], {
|
|
119
|
+
stdio: "ignore",
|
|
120
|
+
shell: require_constants_platform.WIN32
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
function stripTypesFlag() {
|
|
124
|
+
return require_constants_node.supportsNodeStripTypesDefault() ? "" : "--strip-types ";
|
|
125
|
+
}
|
|
126
|
+
function writeWrapperPosix(wrapperPath) {
|
|
127
|
+
(0, node_fs.writeFileSync)(wrapperPath, ["#!/bin/sh", `exec "${node_process.default.execPath}" ${stripTypesFlag()}"${HOST_SCRIPT}" "$@"`].join("\n") + "\n", { encoding: "utf8" });
|
|
128
|
+
(0, node_fs.chmodSync)(wrapperPath, 493);
|
|
129
|
+
}
|
|
130
|
+
function writeWrapperWindows(wrapperPath) {
|
|
131
|
+
(0, node_fs.writeFileSync)(wrapperPath, `@echo off\r\n"${node_process.default.execPath}" ${stripTypesFlag()}"${HOST_SCRIPT}" %*\r\n`, { encoding: "utf8" });
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
//#endregion
|
|
135
|
+
exports.HOST_NAME = HOST_NAME;
|
|
136
|
+
exports.MIN_NODE_VERSION_FOR_STRIP_TYPES = MIN_NODE_VERSION_FOR_STRIP_TYPES;
|
|
137
|
+
exports.assertNodeStripTypesSupported = assertNodeStripTypesSupported;
|
|
138
|
+
exports.buildManifest = buildManifest;
|
|
139
|
+
exports.chromeManifestDirs = chromeManifestDirs;
|
|
140
|
+
exports.installNativeHost = installNativeHost;
|
|
141
|
+
exports.registerWindows = registerWindows;
|
|
142
|
+
exports.stripTypesFlag = stripTypesFlag;
|
|
143
|
+
exports.writeWrapperPosix = writeWrapperPosix;
|
|
144
|
+
exports.writeWrapperWindows = writeWrapperWindows;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Token-bucket rate limit for the Chrome native-messaging host. Why this
|
|
3
|
+
* exists: A Chrome extension that has been hijacked (XSS in a content script,
|
|
4
|
+
* a compromised CDN dependency) can call `chrome.runtime.connectNative()` in
|
|
5
|
+
* a tight loop. Without a rate limit, the attacker can request our
|
|
6
|
+
* `get-api-token` message thousands of times a second — useful for scraping
|
|
7
|
+
* tokens from a multi-account user, or for keeping the bearer "fresh" in the
|
|
8
|
+
* page's memory after the user navigates away. The bucket gives each origin
|
|
9
|
+
* (`chrome-extension://<id>/`, passed by Chrome as `process.argv[2]`) a
|
|
10
|
+
* budget. Burst is allowed; sustained hammering is denied with `{ error:
|
|
11
|
+
* 'rate limited' }`. A typing-fast human never sees the limit; a botted
|
|
12
|
+
* extension hits it on its second line of attack. Why in-memory: The NM host
|
|
13
|
+
* is a per-Chrome-launch subprocess — restarting Chrome restarts the bucket.
|
|
14
|
+
* That's exactly what we want: an attacker who can force Chrome to relaunch
|
|
15
|
+
* has bigger problems than rate-limiting. Shape patterned after pilcrow's
|
|
16
|
+
* `ratelimit/limit.go` — minimal, in-memory, LRU-evicts at `maxKeys`. The
|
|
17
|
+
* fleet's `socket-lib` already has a TTL-cache module but it's overkill for
|
|
18
|
+
* this one use case; a 50-line bucket is easier to audit.
|
|
19
|
+
*/
|
|
20
|
+
export interface TokenBucketOptions {
|
|
21
|
+
/**
|
|
22
|
+
* How many tokens fit in a single bucket. The first `capacity` requests from
|
|
23
|
+
* an origin pass without blocking; the (capacity + 1)th request only passes
|
|
24
|
+
* if at least one refill interval has elapsed since the last refill
|
|
25
|
+
* checkpoint.
|
|
26
|
+
*/
|
|
27
|
+
capacity: number;
|
|
28
|
+
/**
|
|
29
|
+
* How many milliseconds it takes for one token to refill. With `capacity: 60`
|
|
30
|
+
* and `refillIntervalMs: 1000`, an origin gets up to 60 requests of burst
|
|
31
|
+
* plus a steady-state 1 req/s.
|
|
32
|
+
*/
|
|
33
|
+
refillIntervalMs: number;
|
|
34
|
+
/**
|
|
35
|
+
* Maximum number of distinct keys (origins) to track at once. When the map
|
|
36
|
+
* fills, the least-recently-touched key is evicted. Caps memory against an
|
|
37
|
+
* attacker that varies the key on every request.
|
|
38
|
+
*/
|
|
39
|
+
maxKeys: number;
|
|
40
|
+
}
|
|
41
|
+
export interface BucketEntry {
|
|
42
|
+
tokens: number;
|
|
43
|
+
lastRefillAt: number;
|
|
44
|
+
newer: BucketEntry | undefined;
|
|
45
|
+
older: BucketEntry | undefined;
|
|
46
|
+
key: string;
|
|
47
|
+
}
|
|
48
|
+
export declare class TokenBucketLimiter {
|
|
49
|
+
#private;
|
|
50
|
+
constructor(options: TokenBucketOptions);
|
|
51
|
+
/**
|
|
52
|
+
* Try to consume one token for `key`. Returns `true` when the request is
|
|
53
|
+
* allowed; `false` when the bucket is empty and not enough time has elapsed
|
|
54
|
+
* to refill.
|
|
55
|
+
*
|
|
56
|
+
* `now` is injectable so tests can advance the virtual clock without
|
|
57
|
+
* sleeping. In production callers pass `Date.now()` (the default).
|
|
58
|
+
*/
|
|
59
|
+
consume(key: string, now?: number): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Test-only inspector. Returns the current token count for `key`, or
|
|
62
|
+
* `undefined` if `key` has never been seen.
|
|
63
|
+
*/
|
|
64
|
+
peek(key: string): number | undefined;
|
|
65
|
+
/**
|
|
66
|
+
* Test-only inspector. Returns the current number of tracked keys.
|
|
67
|
+
*/
|
|
68
|
+
size(): number;
|
|
69
|
+
}
|