@socketsecurity/lib 6.0.5 → 6.0.7
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 +43 -0
- package/dist/ai/discover.d.mts +2 -2
- package/dist/ai/discover.js +6 -4
- package/dist/ai/spawn.js +10 -6
- package/dist/ai/types.d.mts +18 -6
- package/dist/ai/worktree.d.mts +6 -6
- package/dist/ai/worktree.js +12 -7
- 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 +6 -6
- package/dist/archives/zip.js +4 -6
- 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 +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 +43 -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/acorn-bindgen.cjs +769 -0
- package/dist/bin/acorn.wasm +0 -0
- package/dist/bin/exec.js +2 -3
- package/dist/bin/find.js +13 -13
- package/dist/bin/prim.cjs +39244 -0
- package/dist/bin/resolve.js +12 -13
- package/dist/bin/which.js +8 -8
- package/dist/cache/ttl/store.js +5 -5
- 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 +11 -11
- package/dist/{bin → cli}/check-primordials.js +56 -52
- package/dist/{bin → cli}/check.js +6 -5
- 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 +20 -19
- package/dist/compression/brotli.d.ts +25 -25
- package/dist/compression/brotli.js +37 -44
- package/dist/compression/gzip.d.ts +23 -23
- package/dist/compression/gzip.js +44 -52
- 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.js +22 -28
- 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.js +1 -1
- package/dist/cover/code.js +8 -8
- package/dist/cover/formatters.js +5 -5
- package/dist/crypto/hash.d.ts +26 -1
- package/dist/crypto/hash.js +43 -12
- package/dist/debug/_internal.js +4 -6
- package/dist/debug/caller-info.js +2 -3
- 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 +6 -6
- package/dist/dlx/binary-cache.js +14 -14
- package/dist/dlx/binary-download.d.ts +1 -1
- package/dist/dlx/binary-download.js +14 -13
- package/dist/dlx/binary-resolution.js +16 -14
- 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 +34 -25
- package/dist/dlx/detect.js +86 -77
- package/dist/dlx/dir.js +2 -2
- package/dist/dlx/firewall.d.ts +1 -1
- package/dist/dlx/lockfile.d.ts +19 -18
- package/dist/dlx/lockfile.js +16 -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 +16 -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 +1 -1
- package/dist/eco/cargo/parse-lockfile.js +2 -2
- package/dist/eco/manifest/analyze-lockfile.js +2 -2
- package/dist/eco/manifest/detect-format.js +4 -4
- 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 +14 -14
- package/dist/eco/npm/npm/parse-lockfile.js +3 -3
- 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 +1 -1
- package/dist/eco/npm/pnpm/parse-lockfile.js +4 -4
- package/dist/eco/npm/script.js +9 -6
- package/dist/eco/npm/yarnpkg/yarn/exec.js +3 -3
- package/dist/eco/npm/yarnpkg/yarn/parse-lockfile.d.ts +2 -2
- package/dist/eco/npm/yarnpkg/yarn/parse-lockfile.js +8 -8
- 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/rewire.d.ts +7 -6
- package/dist/env/rewire.js +15 -16
- 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 +1 -109
- package/dist/env/socket.js +12 -166
- 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/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/@sinclair/typebox/value.js +5 -1
- package/dist/external/@sinclair/typebox.js +5 -1
- package/dist/external/@socketregistry/packageurl-js.js +27 -0
- package/dist/external/npm-pack.js +2 -2
- package/dist/external-tools/bazel/read-bazel-version-file.js +1 -1
- package/dist/external-tools/bazel/resolve.js +2 -1
- package/dist/external-tools/bazel/types.d.ts +1 -1
- package/dist/external-tools/cdxgen/from-vfs.js +1 -1
- package/dist/external-tools/cdxgen/resolve.js +2 -1
- package/dist/external-tools/cdxgen/types.d.ts +1 -1
- package/dist/external-tools/from-download.d.ts +1 -1
- package/dist/external-tools/from-download.js +1 -1
- package/dist/external-tools/from-pip-venv.d.ts +73 -0
- package/dist/external-tools/from-pip-venv.js +98 -0
- package/dist/external-tools/janus/asset-names.js +1 -1
- package/dist/external-tools/janus/from-download.js +3 -5
- package/dist/external-tools/janus/from-vfs.js +1 -1
- package/dist/external-tools/janus/resolve.js +2 -1
- package/dist/external-tools/janus/types.d.ts +1 -1
- 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.js +2 -1
- package/dist/external-tools/jre/from-vfs.js +1 -1
- package/dist/external-tools/jre/resolve.js +2 -1
- package/dist/external-tools/jre/types.d.ts +1 -1
- package/dist/external-tools/manifest.d.ts +7 -7
- package/dist/external-tools/manifest.js +18 -16
- package/dist/external-tools/opengrep/from-vfs.js +1 -1
- package/dist/external-tools/opengrep/resolve.js +2 -1
- 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 +104 -0
- package/dist/external-tools/python/dlx.d.ts +80 -0
- package/dist/external-tools/python/dlx.js +87 -0
- package/dist/external-tools/python/from-download.d.ts +53 -0
- package/dist/external-tools/python/from-download.js +68 -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 +173 -0
- package/dist/external-tools/python/pip-install.d.ts +75 -0
- package/dist/external-tools/python/pip-install.js +139 -0
- package/dist/external-tools/python/resolve.d.ts +42 -0
- package/dist/external-tools/python/resolve.js +58 -0
- package/dist/external-tools/python/types.d.ts +49 -0
- package/dist/external-tools/sbt/from-vfs.js +1 -1
- package/dist/external-tools/sbt/resolve.js +2 -1
- package/dist/external-tools/sbt/types.d.ts +1 -1
- package/dist/external-tools/skillspector/from-dlx.d.ts +24 -0
- package/dist/external-tools/skillspector/from-dlx.js +41 -0
- package/dist/external-tools/skillspector/from-path.d.ts +8 -0
- package/dist/external-tools/skillspector/from-path.js +30 -0
- package/dist/external-tools/skillspector/from-vfs.d.ts +8 -0
- package/dist/external-tools/skillspector/from-vfs.js +27 -0
- package/dist/external-tools/skillspector/resolve.d.ts +34 -0
- package/dist/external-tools/skillspector/resolve.js +53 -0
- package/dist/external-tools/skillspector/types.d.ts +24 -0
- package/dist/external-tools/skillspector/types.js +2 -0
- package/dist/external-tools/synp/from-download.js +2 -2
- package/dist/external-tools/synp/from-vfs.js +1 -1
- package/dist/external-tools/synp/resolve.js +2 -1
- package/dist/external-tools/trivy/from-vfs.js +1 -1
- package/dist/external-tools/trivy/resolve.js +2 -1
- package/dist/external-tools/trivy/types.d.ts +1 -1
- package/dist/external-tools/trufflehog/from-vfs.js +1 -1
- package/dist/external-tools/trufflehog/resolve.js +2 -1
- 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/{path-cache.js → allowed-dirs-cache.js} +1 -1
- package/dist/fs/encoding.js +5 -7
- package/dist/fs/{find-up.js → find.js} +11 -13
- 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 +6 -4
- package/dist/fs/read-json-cache.js +9 -6
- package/dist/fs/read-json.js +4 -6
- package/dist/fs/resolve-module.js +1 -1
- package/dist/fs/safe.d.ts +1 -1
- package/dist/fs/safe.js +12 -13
- 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 +12 -11
- package/dist/git/changed.js +4 -4
- package/dist/git/repo.js +3 -3
- package/dist/git/staged.js +4 -4
- package/dist/git/unstaged.js +4 -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-rest.js +5 -5
- 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 +7 -9
- package/dist/globs/match.js +6 -7
- package/dist/globs/matcher.d.ts +3 -3
- package/dist/globs/matcher.js +12 -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 +21 -13
- 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 +4 -4
- package/dist/http-request/headers.d.ts +32 -3
- package/dist/http-request/headers.js +41 -13
- package/dist/http-request/request-attempt.js +38 -33
- package/dist/http-request/request-types.d.ts +7 -2
- package/dist/http-request/request.js +33 -16
- package/dist/http-request/response-reader.d.ts +12 -1
- package/dist/http-request/response-reader.js +22 -2
- package/dist/http-request/user-agent.js +3 -4
- package/dist/integrity.d.ts +86 -18
- package/dist/integrity.js +119 -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 +13 -14
- package/dist/json/format.js +2 -2
- 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 +141 -0
- package/dist/native-messaging/rate-limit.d.ts +62 -0
- package/dist/native-messaging/rate-limit.js +115 -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.js +4 -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.js +4 -3
- package/dist/node/path.js +4 -3
- 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 +5 -7
- package/dist/objects/inspect.js +1 -4
- package/dist/objects/mutate.js +2 -3
- package/dist/objects/predicates.js +0 -4
- package/dist/objects/sort.js +3 -7
- package/dist/packages/edit-class.js +15 -16
- package/dist/packages/edit.js +12 -14
- package/dist/packages/exports.js +11 -17
- 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 +16 -16
- package/dist/packages/manifest.js +12 -15
- package/dist/packages/metadata-extensions.d.ts +14 -0
- package/dist/packages/metadata-extensions.js +43 -0
- package/dist/packages/normalize.js +5 -9
- package/dist/packages/provenance.d.ts +6 -0
- package/dist/packages/provenance.js +25 -18
- 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 +74 -11
- package/dist/packages/tarball.d.ts +24 -0
- package/dist/packages/tarball.js +79 -0
- package/dist/packages/types.d.ts +21 -20
- 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/filenames.d.ts +0 -1
- package/dist/paths/filenames.js +0 -2
- package/dist/paths/normalize.js +6 -5
- package/dist/paths/packages.js +4 -7
- package/dist/paths/predicates.js +9 -16
- package/dist/paths/resolve.js +11 -14
- package/dist/paths/rewire.js +3 -3
- package/dist/paths/socket.js +16 -16
- 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/string.d.ts +2 -2
- package/dist/primordials/string.js +6 -6
- package/dist/primordials/symbol.js +3 -3
- 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 +14 -14
- package/dist/process/spawn/errors.js +2 -4
- 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 +12 -16
- 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/releases/github-archives.d.ts +6 -6
- package/dist/releases/github-archives.js +2 -2
- 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 +11 -2
- 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 +1 -1
- package/dist/sea/detect.js +6 -6
- package/dist/secrets/_internal.d.ts +2 -2
- package/dist/secrets/_internal.js +5 -4
- package/dist/secrets/compare.d.ts +45 -0
- package/dist/secrets/compare.js +61 -0
- package/dist/secrets/keychain.js +9 -6
- package/dist/secrets/linux.js +25 -23
- package/dist/secrets/macos.d.ts +1 -1
- package/dist/secrets/macos.js +18 -16
- package/dist/secrets/rc.d.ts +2 -2
- package/dist/secrets/rc.js +15 -10
- package/dist/secrets/socket-api-token.d.ts +4 -4
- package/dist/secrets/socket-api-token.js +18 -9
- package/dist/secrets/windows.js +21 -17
- package/dist/shadow/skip.js +2 -2
- package/dist/shell/parse.d.ts +108 -1
- package/dist/shell/parse.js +168 -2
- 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 +101 -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 +4 -5
- package/dist/spinner/spinner.js +18 -705
- 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 +5 -5
- package/dist/stdio/prompts.d.ts +5 -3
- package/dist/stdio/prompts.js +6 -7
- 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 +4 -2
- package/dist/temporal/slots.js +7 -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/parse.js +0 -2
- package/dist/url/predicates.js +1 -2
- package/dist/url/search-params.js +3 -9
- package/dist/url/types.d.ts +5 -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.d.ts +24 -2
- package/dist/words/pluralize.js +47 -2
- package/dist/words/types.d.ts +25 -2
- package/package.json +289 -108
- 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 -52
- package/dist/external-tools/uv/types.d.ts +0 -24
- 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/{path-cache.d.ts → allowed-dirs-cache.d.ts} +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
|
@@ -7,8 +7,8 @@ const require_primordials_error = require('../primordials/error.js');
|
|
|
7
7
|
const require_primordials_math = require('../primordials/math.js');
|
|
8
8
|
const require_primordials_number = require('../primordials/number.js');
|
|
9
9
|
const require_node_fs = require('../node/fs.js');
|
|
10
|
-
const require_fs_safe = require('../fs/safe.js');
|
|
11
10
|
const require_primordials_promise = require('../primordials/promise.js');
|
|
11
|
+
const require_fs_safe = require('../fs/safe.js');
|
|
12
12
|
const require_http_request_request_attempt = require('./request-attempt.js');
|
|
13
13
|
const require_http_request_response_types = require('./response-types.js');
|
|
14
14
|
let node_timers_promises = require("node:timers/promises");
|
|
@@ -98,8 +98,8 @@ async function httpDownload(url, destPath, options) {
|
|
|
98
98
|
};
|
|
99
99
|
}
|
|
100
100
|
/* c8 ignore stop */
|
|
101
|
-
const crypto =
|
|
102
|
-
const fs =
|
|
101
|
+
const crypto = require_node_crypto.getNodeCrypto();
|
|
102
|
+
const fs = require_node_fs.getNodeFs();
|
|
103
103
|
const tempPath = `${destPath}.${crypto.randomBytes(6).toString("hex")}.download`;
|
|
104
104
|
if (fs.existsSync(tempPath)) await require_fs_safe.safeDelete(tempPath);
|
|
105
105
|
let lastError;
|
|
@@ -155,7 +155,7 @@ async function httpDownloadAttempt(url, destPath, options) {
|
|
|
155
155
|
const res = response.rawResponse;
|
|
156
156
|
/* c8 ignore next 3 */
|
|
157
157
|
if (!res) throw new require_primordials_error.ErrorCtor("Stream response missing rawResponse");
|
|
158
|
-
const { createWriteStream } =
|
|
158
|
+
const { createWriteStream } = require_node_fs.getNodeFs();
|
|
159
159
|
const totalSize = require_primordials_number.NumberParseInt(response.headers["content-length"] || "0", 10);
|
|
160
160
|
return await new require_primordials_promise.PromiseCtor((resolve, reject) => {
|
|
161
161
|
let downloadedSize = 0;
|
|
@@ -9,6 +9,34 @@
|
|
|
9
9
|
* payload. No I/O — these can be imported anywhere without dragging the
|
|
10
10
|
* Node.js `http`/`https` modules into the bundle.
|
|
11
11
|
*/
|
|
12
|
+
/**
|
|
13
|
+
* Build an HTTP Basic `Authorization` header value from a Socket API token.
|
|
14
|
+
*
|
|
15
|
+
* The Socket API uses the token as the username with an empty password, so the
|
|
16
|
+
* credential pair is `<token>:`. Centralized here so every fleet caller emits
|
|
17
|
+
* the identical shape instead of hand-rolling `btoa(\`${token}:`)`.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ;```ts
|
|
21
|
+
* const headers = { Authorization: basicAuthHeader(apiToken) }
|
|
22
|
+
* // { Authorization: 'Basic c2t0X3h4eHg6' }
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @param token - The Socket API token (used as the Basic-auth username).
|
|
26
|
+
*
|
|
27
|
+
* @returns The `Authorization` header value, e.g. `Basic <base64>`.
|
|
28
|
+
*/
|
|
29
|
+
export declare function basicAuthHeader(token: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Whether a header name looks credential-bearing and should be redacted from
|
|
32
|
+
* logs and telemetry. Case-insensitive substring match on the name only — the
|
|
33
|
+
* value is never inspected.
|
|
34
|
+
*
|
|
35
|
+
* @param name - The header name (e.g. `Authorization`, `x-api-key`).
|
|
36
|
+
*
|
|
37
|
+
* @returns `true` when the value should be replaced with `[REDACTED]`.
|
|
38
|
+
*/
|
|
39
|
+
export declare function isSensitiveHeaderName(name: string): boolean;
|
|
12
40
|
/**
|
|
13
41
|
* Parse a `Retry-After` HTTP header value into milliseconds.
|
|
14
42
|
*
|
|
@@ -37,9 +65,10 @@ export declare function parseRetryAfterHeader(value: string | string[] | undefin
|
|
|
37
65
|
/**
|
|
38
66
|
* Redact sensitive HTTP headers for safe logging and telemetry.
|
|
39
67
|
*
|
|
40
|
-
* Replaces values of
|
|
41
|
-
*
|
|
42
|
-
*
|
|
68
|
+
* Replaces values of credential-bearing headers with `[REDACTED]`, matching the
|
|
69
|
+
* header name by shape (see `isSensitiveHeaderName`) so custom token headers
|
|
70
|
+
* are covered without an enumerated list. Non-sensitive headers pass through
|
|
71
|
+
* unchanged. Array values are joined with `', '`.
|
|
43
72
|
*
|
|
44
73
|
* @example
|
|
45
74
|
* ;```ts
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
4
|
const require_primordials_number = require('../primordials/number.js');
|
|
5
5
|
const require_primordials_array = require('../primordials/array.js');
|
|
6
|
-
const require_primordials_map_set = require('../primordials/map-set.js');
|
|
7
6
|
const require_primordials_date = require('../primordials/date.js');
|
|
8
7
|
const require_primordials_object = require('../primordials/object.js');
|
|
8
|
+
const require_primordials_globals = require('../primordials/globals.js');
|
|
9
9
|
|
|
10
10
|
//#region src/http-request/headers.ts
|
|
11
11
|
/**
|
|
@@ -21,6 +21,39 @@ const require_primordials_object = require('../primordials/object.js');
|
|
|
21
21
|
*/
|
|
22
22
|
const RETRY_AFTER_INT_RE = /^\d+$/;
|
|
23
23
|
/**
|
|
24
|
+
* Build an HTTP Basic `Authorization` header value from a Socket API token.
|
|
25
|
+
*
|
|
26
|
+
* The Socket API uses the token as the username with an empty password, so the
|
|
27
|
+
* credential pair is `<token>:`. Centralized here so every fleet caller emits
|
|
28
|
+
* the identical shape instead of hand-rolling `btoa(\`${token}:`)`.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ;```ts
|
|
32
|
+
* const headers = { Authorization: basicAuthHeader(apiToken) }
|
|
33
|
+
* // { Authorization: 'Basic c2t0X3h4eHg6' }
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* @param token - The Socket API token (used as the Basic-auth username).
|
|
37
|
+
*
|
|
38
|
+
* @returns The `Authorization` header value, e.g. `Basic <base64>`.
|
|
39
|
+
*/
|
|
40
|
+
function basicAuthHeader(token) {
|
|
41
|
+
return `Basic ${require_primordials_globals.btoa(`${token}:`)}`;
|
|
42
|
+
}
|
|
43
|
+
const SENSITIVE_HEADER_NAME_RE = /auth|cookie|credential|key|password|secret|token/i;
|
|
44
|
+
/**
|
|
45
|
+
* Whether a header name looks credential-bearing and should be redacted from
|
|
46
|
+
* logs and telemetry. Case-insensitive substring match on the name only — the
|
|
47
|
+
* value is never inspected.
|
|
48
|
+
*
|
|
49
|
+
* @param name - The header name (e.g. `Authorization`, `x-api-key`).
|
|
50
|
+
*
|
|
51
|
+
* @returns `true` when the value should be replaced with `[REDACTED]`.
|
|
52
|
+
*/
|
|
53
|
+
function isSensitiveHeaderName(name) {
|
|
54
|
+
return SENSITIVE_HEADER_NAME_RE.test(name);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
24
57
|
* Parse a `Retry-After` HTTP header value into milliseconds.
|
|
25
58
|
*
|
|
26
59
|
* Supports both formats defined in RFC 7231 §7.1.3:
|
|
@@ -59,9 +92,10 @@ function parseRetryAfterHeader(value) {
|
|
|
59
92
|
/**
|
|
60
93
|
* Redact sensitive HTTP headers for safe logging and telemetry.
|
|
61
94
|
*
|
|
62
|
-
* Replaces values of
|
|
63
|
-
*
|
|
64
|
-
*
|
|
95
|
+
* Replaces values of credential-bearing headers with `[REDACTED]`, matching the
|
|
96
|
+
* header name by shape (see `isSensitiveHeaderName`) so custom token headers
|
|
97
|
+
* are covered without an enumerated list. Non-sensitive headers pass through
|
|
98
|
+
* unchanged. Array values are joined with `', '`.
|
|
65
99
|
*
|
|
66
100
|
* @example
|
|
67
101
|
* ;```ts
|
|
@@ -78,18 +112,10 @@ function parseRetryAfterHeader(value) {
|
|
|
78
112
|
*/
|
|
79
113
|
function sanitizeHeaders(headers) {
|
|
80
114
|
if (!headers) return {};
|
|
81
|
-
const sensitiveHeaders = new require_primordials_map_set.SetCtor([
|
|
82
|
-
"authorization",
|
|
83
|
-
"cookie",
|
|
84
|
-
"proxy-authorization",
|
|
85
|
-
"proxy-authenticate",
|
|
86
|
-
"set-cookie",
|
|
87
|
-
"www-authenticate"
|
|
88
|
-
]);
|
|
89
115
|
const result = { __proto__: null };
|
|
90
116
|
for (const key of require_primordials_object.ObjectKeys(headers)) {
|
|
91
117
|
const value = headers[key];
|
|
92
|
-
if (
|
|
118
|
+
if (isSensitiveHeaderName(key)) result[key] = "[REDACTED]";
|
|
93
119
|
else if (require_primordials_array.ArrayIsArray(value)) result[key] = value.join(", ");
|
|
94
120
|
else if (value !== void 0 && value !== null) result[key] = String(value);
|
|
95
121
|
}
|
|
@@ -97,5 +123,7 @@ function sanitizeHeaders(headers) {
|
|
|
97
123
|
}
|
|
98
124
|
|
|
99
125
|
//#endregion
|
|
126
|
+
exports.basicAuthHeader = basicAuthHeader;
|
|
127
|
+
exports.isSensitiveHeaderName = isSensitiveHeaderName;
|
|
100
128
|
exports.parseRetryAfterHeader = parseRetryAfterHeader;
|
|
101
129
|
exports.sanitizeHeaders = sanitizeHeaders;
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/* Socket Lib - Built with rolldown */
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
const require_primordials_buffer = require('../primordials/buffer.js');
|
|
4
5
|
const require_primordials_error = require('../primordials/error.js');
|
|
5
6
|
const require_primordials_date = require('../primordials/date.js');
|
|
6
|
-
const require_primordials_object = require('../primordials/object.js');
|
|
7
7
|
const require_primordials_json = require('../primordials/json.js');
|
|
8
|
+
const require_primordials_object = require('../primordials/object.js');
|
|
8
9
|
const require_primordials_promise = require('../primordials/promise.js');
|
|
9
10
|
const require_node_http = require('../node/http.js');
|
|
10
11
|
const require_node_https = require('../node/https.js');
|
|
11
12
|
const require_primordials_url = require('../primordials/url.js');
|
|
12
13
|
const require_http_request_errors = require('./errors.js');
|
|
14
|
+
const require_http_request_response_reader = require('./response-reader.js');
|
|
13
15
|
const require_http_request_user_agent = require('./user-agent.js');
|
|
14
16
|
|
|
15
17
|
//#region src/http-request/request-attempt.ts
|
|
@@ -39,6 +41,7 @@ async function httpRequestAttempt(url, options) {
|
|
|
39
41
|
const startTime = require_primordials_date.DateNow();
|
|
40
42
|
const streamHeaders = body && typeof body === "object" && "getHeaders" in body && typeof body.getHeaders === "function" ? body.getHeaders() : void 0;
|
|
41
43
|
const mergedHeaders = {
|
|
44
|
+
...stream ? void 0 : { "Accept-Encoding": "gzip, br" },
|
|
42
45
|
"User-Agent": require_http_request_user_agent.getSocketCallerUserAgent(),
|
|
43
46
|
...streamHeaders,
|
|
44
47
|
...headers
|
|
@@ -69,7 +72,7 @@ async function httpRequestAttempt(url, options) {
|
|
|
69
72
|
};
|
|
70
73
|
const parsedUrl = new require_primordials_url.URLCtor(url);
|
|
71
74
|
const isHttps = parsedUrl.protocol === "https:";
|
|
72
|
-
const httpModule = isHttps ?
|
|
75
|
+
const httpModule = isHttps ? require_node_https.getNodeHttps() : require_node_http.getNodeHttp();
|
|
73
76
|
const requestOptions = {
|
|
74
77
|
headers: mergedHeaders,
|
|
75
78
|
hostname: parsedUrl.hostname,
|
|
@@ -105,15 +108,15 @@ async function httpRequestAttempt(url, options) {
|
|
|
105
108
|
reject(new require_primordials_error.ErrorCtor(`Too many redirects (exceeded maximum: ${maxRedirects})`));
|
|
106
109
|
return;
|
|
107
110
|
}
|
|
108
|
-
const redirectUrl = res.headers.location.startsWith("http") ? res.headers.location : new
|
|
109
|
-
const redirectParsed = new
|
|
111
|
+
const redirectUrl = res.headers.location.startsWith("http") ? res.headers.location : new require_primordials_url.URLCtor(res.headers.location, url).toString();
|
|
112
|
+
const redirectParsed = new require_primordials_url.URLCtor(redirectUrl);
|
|
110
113
|
if (isHttps && redirectParsed.protocol !== "https:") {
|
|
111
114
|
settled = true;
|
|
112
115
|
reject(new require_primordials_error.ErrorCtor(`Redirect from HTTPS to HTTP is not allowed: ${redirectUrl}`));
|
|
113
116
|
return;
|
|
114
117
|
}
|
|
115
118
|
let redirectHeaders = headers;
|
|
116
|
-
if (new
|
|
119
|
+
if (new require_primordials_url.URLCtor(url).origin !== redirectParsed.origin) {
|
|
117
120
|
redirectHeaders = { __proto__: null };
|
|
118
121
|
const stripped = new Set([
|
|
119
122
|
"authorization",
|
|
@@ -147,7 +150,7 @@ async function httpRequestAttempt(url, options) {
|
|
|
147
150
|
status,
|
|
148
151
|
statusText
|
|
149
152
|
});
|
|
150
|
-
const emptyBody =
|
|
153
|
+
const emptyBody = require_primordials_buffer.BufferAlloc(0);
|
|
151
154
|
resolveOnce({
|
|
152
155
|
arrayBuffer: () => emptyBody.buffer,
|
|
153
156
|
body: emptyBody,
|
|
@@ -177,31 +180,33 @@ async function httpRequestAttempt(url, options) {
|
|
|
177
180
|
});
|
|
178
181
|
res.on("end", () => {
|
|
179
182
|
if (settled) return;
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
183
|
+
const rawBody = require_primordials_buffer.BufferConcat(chunks);
|
|
184
|
+
require_http_request_response_reader.decodeBody(rawBody, res.headers["content-encoding"]).catch(() => rawBody).then((responseBody) => {
|
|
185
|
+
const ok = res.statusCode !== void 0 && res.statusCode >= 200 && res.statusCode < 300;
|
|
186
|
+
const response = {
|
|
187
|
+
arrayBuffer() {
|
|
188
|
+
return responseBody.buffer.slice(responseBody.byteOffset, responseBody.byteOffset + responseBody.byteLength);
|
|
189
|
+
},
|
|
190
|
+
body: responseBody,
|
|
191
|
+
headers: res.headers,
|
|
192
|
+
json() {
|
|
193
|
+
return require_primordials_json.JSONParse(responseBody.toString("utf8"));
|
|
194
|
+
},
|
|
195
|
+
ok,
|
|
196
|
+
rawResponse: res,
|
|
197
|
+
status: res.statusCode || 0,
|
|
198
|
+
statusText: res.statusMessage || "",
|
|
199
|
+
text() {
|
|
200
|
+
return responseBody.toString("utf8");
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
emitResponse({
|
|
204
|
+
headers: res.headers,
|
|
205
|
+
status: res.statusCode,
|
|
206
|
+
statusText: res.statusMessage
|
|
207
|
+
});
|
|
208
|
+
resolveOnce(response);
|
|
203
209
|
});
|
|
204
|
-
resolveOnce(response);
|
|
205
210
|
});
|
|
206
211
|
res.on("error", (error) => {
|
|
207
212
|
rejectOnce(error);
|
|
@@ -216,12 +221,12 @@ async function httpRequestAttempt(url, options) {
|
|
|
216
221
|
});
|
|
217
222
|
if (body) {
|
|
218
223
|
if (typeof body === "object" && typeof body.pipe === "function") {
|
|
219
|
-
const
|
|
220
|
-
|
|
224
|
+
const bodyStream = body;
|
|
225
|
+
bodyStream.on("error", (err) => {
|
|
221
226
|
request.destroy();
|
|
222
227
|
rejectOnce(err);
|
|
223
228
|
});
|
|
224
|
-
|
|
229
|
+
bodyStream.pipe(request);
|
|
225
230
|
return;
|
|
226
231
|
}
|
|
227
232
|
request.write(body);
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* observability
|
|
9
9
|
* - `HttpRequestOptions` — the main request configuration interface
|
|
10
10
|
*/
|
|
11
|
-
import type { IncomingMessage } from 'node:http';
|
|
11
|
+
import type { IncomingHttpHeaders, IncomingMessage } from 'node:http';
|
|
12
12
|
import type { Readable } from 'node:stream';
|
|
13
13
|
/**
|
|
14
14
|
* IncomingMessage received as a response to a client request (http.request
|
|
@@ -35,7 +35,7 @@ export interface HttpHookRequestInfo {
|
|
|
35
35
|
export interface HttpHookResponseInfo {
|
|
36
36
|
duration: number;
|
|
37
37
|
error?: Error | undefined;
|
|
38
|
-
headers?:
|
|
38
|
+
headers?: IncomingHttpHeaders | undefined;
|
|
39
39
|
method: string;
|
|
40
40
|
status?: number | undefined;
|
|
41
41
|
statusText?: string | undefined;
|
|
@@ -138,6 +138,11 @@ export interface HttpRequestOptions {
|
|
|
138
138
|
* HTTP headers to send with the request. A `User-Agent` header is
|
|
139
139
|
* automatically added if not provided.
|
|
140
140
|
*
|
|
141
|
+
* On retried attempts (when `retries` > 0), three telemetry headers are added
|
|
142
|
+
* automatically for server-side logging and are NOT removable here:
|
|
143
|
+
* `Retry-Attempt` (1-based retry number), `Retry-Max` (the `retries`
|
|
144
|
+
* ceiling), and `Retry-After` (seconds waited before this attempt).
|
|
145
|
+
*
|
|
141
146
|
* @example
|
|
142
147
|
* ;```ts
|
|
143
148
|
* await httpRequest('https://api.example.com/data', {
|
|
@@ -4,9 +4,9 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
4
4
|
const require_primordials_error = require('../primordials/error.js');
|
|
5
5
|
const require_primordials_math = require('../primordials/math.js');
|
|
6
6
|
const require_primordials_number = require('../primordials/number.js');
|
|
7
|
+
const require_http_request_response_reader = require('./response-reader.js');
|
|
7
8
|
const require_http_request_request_attempt = require('./request-attempt.js');
|
|
8
9
|
const require_http_request_response_types = require('./response-types.js');
|
|
9
|
-
const require_http_request_response_reader = require('./response-reader.js');
|
|
10
10
|
let node_timers_promises = require("node:timers/promises");
|
|
11
11
|
|
|
12
12
|
//#region src/http-request/request.ts
|
|
@@ -71,7 +71,7 @@ async function httpRequest(url, options) {
|
|
|
71
71
|
};
|
|
72
72
|
const isStreamBody = body !== void 0 && typeof body === "object" && typeof body.pipe === "function";
|
|
73
73
|
if (isStreamBody && retries > 0) throw new require_primordials_error.ErrorCtor("Streaming body (Readable/FormData) cannot be used with retries. Streams are consumed on first attempt and cannot be replayed. Set retries: 0 or buffer the body as a string/Buffer.");
|
|
74
|
-
const
|
|
74
|
+
const baseAttemptOpts = {
|
|
75
75
|
body,
|
|
76
76
|
ca,
|
|
77
77
|
followRedirects: isStreamBody ? false : followRedirects,
|
|
@@ -85,20 +85,37 @@ async function httpRequest(url, options) {
|
|
|
85
85
|
timeout
|
|
86
86
|
};
|
|
87
87
|
let lastError;
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
88
|
+
let lastDelaySeconds = 0;
|
|
89
|
+
for (let attempt = 0; attempt <= retries; attempt++) {
|
|
90
|
+
const attemptOpts = attempt > 0 ? {
|
|
91
|
+
...baseAttemptOpts,
|
|
92
|
+
headers: {
|
|
93
|
+
...headers,
|
|
94
|
+
"Retry-Attempt": `${attempt}`,
|
|
95
|
+
"Retry-Max": `${retries}`,
|
|
96
|
+
"Retry-After": `${lastDelaySeconds}`
|
|
97
|
+
}
|
|
98
|
+
} : baseAttemptOpts;
|
|
99
|
+
try {
|
|
100
|
+
const response = await require_http_request_request_attempt.httpRequestAttempt(url, attemptOpts);
|
|
101
|
+
if (throwOnError && !response.ok) throw new require_http_request_response_types.HttpResponseError(response);
|
|
102
|
+
return response;
|
|
103
|
+
} catch (e) {
|
|
104
|
+
lastError = e;
|
|
105
|
+
if (attempt === retries) break;
|
|
106
|
+
if (signal?.aborted) break;
|
|
107
|
+
const delayMs = retryDelay * 2 ** attempt;
|
|
108
|
+
if (onRetry) {
|
|
109
|
+
const retryResult = onRetry(attempt + 1, e, delayMs);
|
|
110
|
+
if (retryResult === false) break;
|
|
111
|
+
const actualDelay = typeof retryResult === "number" && !require_primordials_number.NumberIsNaN(retryResult) ? require_primordials_math.MathMax(0, retryResult) : delayMs;
|
|
112
|
+
lastDelaySeconds = require_primordials_math.MathRound(actualDelay / 1e3);
|
|
113
|
+
await (0, node_timers_promises.setTimeout)(actualDelay);
|
|
114
|
+
} else {
|
|
115
|
+
lastDelaySeconds = require_primordials_math.MathRound(delayMs / 1e3);
|
|
116
|
+
await (0, node_timers_promises.setTimeout)(delayMs);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
102
119
|
}
|
|
103
120
|
throw lastError || new require_primordials_error.ErrorCtor("Request failed after retries");
|
|
104
121
|
}
|
|
@@ -3,10 +3,21 @@
|
|
|
3
3
|
* out of `http-request/request.ts` for size hygiene. Useful when a caller
|
|
4
4
|
* already has an `IncomingMessage` from code that bypasses `httpRequest()`
|
|
5
5
|
* (e.g., multipart uploads via `http.request()` directly, or third-party HTTP
|
|
6
|
-
* libraries) and wants the same fetch-like body accessors.
|
|
6
|
+
* libraries) and wants the same fetch-like body accessors. The body is
|
|
7
|
+
* transparently decompressed when the response carries a `Content-Encoding`
|
|
8
|
+
* of `gzip` or `br` — the two encodings `httpRequest` advertises via
|
|
9
|
+
* `Accept-Encoding`. Node's http client does not decompress on its own, so
|
|
10
|
+
* without this step a compressed Socket API response would reach callers as
|
|
11
|
+
* raw deflated bytes and fail JSON parsing.
|
|
7
12
|
*/
|
|
8
13
|
import type { IncomingResponse } from './request-types';
|
|
9
14
|
import type { HttpResponse } from './response-types';
|
|
15
|
+
/**
|
|
16
|
+
* Decompress a response body per its `Content-Encoding`. Returns the input
|
|
17
|
+
* unchanged for `identity` or any unrecognized/absent encoding — we only
|
|
18
|
+
* decompress what `httpRequest` advertised support for (`gzip`, `br`).
|
|
19
|
+
*/
|
|
20
|
+
export declare function decodeBody(body: Buffer, contentEncoding: string | string[] | undefined): Promise<Buffer>;
|
|
10
21
|
/**
|
|
11
22
|
* Read and buffer a client-side IncomingResponse into an HttpResponse.
|
|
12
23
|
*
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
4
|
const require_primordials_buffer = require('../primordials/buffer.js');
|
|
5
5
|
const require_primordials_json = require('../primordials/json.js');
|
|
6
|
+
const require_compression_brotli = require('../compression/brotli.js');
|
|
7
|
+
const require_compression_gzip = require('../compression/gzip.js');
|
|
6
8
|
|
|
7
9
|
//#region src/http-request/response-reader.ts
|
|
8
10
|
/**
|
|
@@ -10,9 +12,26 @@ const require_primordials_json = require('../primordials/json.js');
|
|
|
10
12
|
* out of `http-request/request.ts` for size hygiene. Useful when a caller
|
|
11
13
|
* already has an `IncomingMessage` from code that bypasses `httpRequest()`
|
|
12
14
|
* (e.g., multipart uploads via `http.request()` directly, or third-party HTTP
|
|
13
|
-
* libraries) and wants the same fetch-like body accessors.
|
|
15
|
+
* libraries) and wants the same fetch-like body accessors. The body is
|
|
16
|
+
* transparently decompressed when the response carries a `Content-Encoding`
|
|
17
|
+
* of `gzip` or `br` — the two encodings `httpRequest` advertises via
|
|
18
|
+
* `Accept-Encoding`. Node's http client does not decompress on its own, so
|
|
19
|
+
* without this step a compressed Socket API response would reach callers as
|
|
20
|
+
* raw deflated bytes and fail JSON parsing.
|
|
14
21
|
*/
|
|
15
22
|
/**
|
|
23
|
+
* Decompress a response body per its `Content-Encoding`. Returns the input
|
|
24
|
+
* unchanged for `identity` or any unrecognized/absent encoding — we only
|
|
25
|
+
* decompress what `httpRequest` advertised support for (`gzip`, `br`).
|
|
26
|
+
*/
|
|
27
|
+
async function decodeBody(body, contentEncoding) {
|
|
28
|
+
if (!contentEncoding || body.length === 0) return body;
|
|
29
|
+
const encoding = (Array.isArray(contentEncoding) ? contentEncoding[0] : contentEncoding).trim().toLowerCase();
|
|
30
|
+
if (encoding === "gzip") return await require_compression_gzip.decompressGzip(body);
|
|
31
|
+
if (encoding === "br") return await require_compression_brotli.decompressBrotli(body);
|
|
32
|
+
return body;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
16
35
|
* Read and buffer a client-side IncomingResponse into an HttpResponse.
|
|
17
36
|
*
|
|
18
37
|
* Useful when you have a raw response from code that bypasses `httpRequest()`
|
|
@@ -30,7 +49,7 @@ const require_primordials_json = require('../primordials/json.js');
|
|
|
30
49
|
async function readIncomingResponse(msg) {
|
|
31
50
|
const chunks = [];
|
|
32
51
|
for await (const chunk of msg) chunks.push(chunk);
|
|
33
|
-
const body = require_primordials_buffer.BufferConcat(chunks);
|
|
52
|
+
const body = await decodeBody(require_primordials_buffer.BufferConcat(chunks), msg.headers["content-encoding"]);
|
|
34
53
|
const status = msg.statusCode ?? 0;
|
|
35
54
|
const statusText = msg.statusMessage ?? "";
|
|
36
55
|
return {
|
|
@@ -47,4 +66,5 @@ async function readIncomingResponse(msg) {
|
|
|
47
66
|
}
|
|
48
67
|
|
|
49
68
|
//#endregion
|
|
69
|
+
exports.decodeBody = decodeBody;
|
|
50
70
|
exports.readIncomingResponse = readIncomingResponse;
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
|
4
4
|
const require_runtime = require('../_virtual/_rolldown/runtime.js');
|
|
5
5
|
const require_env_rewire = require('../env/rewire.js');
|
|
6
6
|
const require_constants_socket = require('../constants/socket.js');
|
|
7
|
-
const
|
|
7
|
+
const require_packages_specs = require('../packages/specs.js');
|
|
8
8
|
let node_process = require("node:process");
|
|
9
9
|
node_process = require_runtime.__toESM(node_process);
|
|
10
10
|
|
|
@@ -38,9 +38,8 @@ node_process = require_runtime.__toESM(node_process);
|
|
|
38
38
|
* // 'sdxgen/0.5.0 node/v22.10.0 darwin/arm64 embedded-by-foo/1'
|
|
39
39
|
* ```
|
|
40
40
|
*/
|
|
41
|
-
/* @__NO_SIDE_EFFECTS__ */
|
|
42
41
|
function buildUserAgent(pkg, caller) {
|
|
43
|
-
const base = `${
|
|
42
|
+
const base = `${require_packages_specs.pkgNameToSlug(pkg.name)}/${pkg.version} node/${node_process.default.version} ${node_process.default.platform}/${node_process.default.arch}`;
|
|
44
43
|
return caller ? `${base} ${caller}` : base;
|
|
45
44
|
}
|
|
46
45
|
let cachedBaseUserAgent;
|
|
@@ -66,7 +65,7 @@ let cachedBaseUserAgent;
|
|
|
66
65
|
* ```
|
|
67
66
|
*/
|
|
68
67
|
function getSocketCallerUserAgent() {
|
|
69
|
-
if (cachedBaseUserAgent === void 0) cachedBaseUserAgent =
|
|
68
|
+
if (cachedBaseUserAgent === void 0) cachedBaseUserAgent = buildUserAgent({
|
|
70
69
|
name: require_constants_socket.SOCKET_LIB_NAME,
|
|
71
70
|
version: require_constants_socket.SOCKET_LIB_VERSION
|
|
72
71
|
});
|
package/dist/integrity.d.ts
CHANGED
|
@@ -1,21 +1,9 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @file Integrity specification helpers for downloads and file verification.
|
|
3
|
-
* Used by `dlx/binary-download` and external-tools resolvers; safe to consume
|
|
4
|
-
* from any module that needs to verify bytes against an expected hash. Single
|
|
5
|
-
* supported format per flavor:
|
|
6
|
-
*
|
|
7
|
-
* - integrity: SRI with sha512 only (what npm registry returns)
|
|
8
|
-
* - checksum: sha256 hex (what `shasum -a 256` produces; common for binary
|
|
9
|
-
* release assets on GitHub) Callers may pass a {@link HashSpec} as a bare
|
|
10
|
-
* string (sniffed via format) or as an explicit `{ type, value }` object.
|
|
11
|
-
* The normalized form carried around internally is always the object.
|
|
12
|
-
*/
|
|
13
1
|
/**
|
|
14
2
|
* Tagged union representing an expected hash.
|
|
15
3
|
*
|
|
16
4
|
* @example
|
|
17
5
|
* // Bare SRI (sniffed as integrity):
|
|
18
|
-
* '
|
|
6
|
+
* 'sha256-NiCg/K+B7NOq7M1ZZZGdkNvJE/TQepbhHnyvwseFBUs='
|
|
19
7
|
*
|
|
20
8
|
* @example
|
|
21
9
|
* // Bare sha256 hex (sniffed as checksum):
|
|
@@ -23,7 +11,7 @@
|
|
|
23
11
|
*
|
|
24
12
|
* @example
|
|
25
13
|
* // Explicit:
|
|
26
|
-
* { type: 'integrity', value: 'sha512
|
|
14
|
+
* { type: 'integrity', value: 'sha512-...' }
|
|
27
15
|
* { type: 'checksum', value: 'a1b2c3...' }
|
|
28
16
|
*/
|
|
29
17
|
export type HashSpec = string | {
|
|
@@ -50,22 +38,89 @@ export interface ComputedHashes {
|
|
|
50
38
|
*/
|
|
51
39
|
integrity: string;
|
|
52
40
|
/**
|
|
53
|
-
*
|
|
41
|
+
* Sha256 hex (64 chars). Matches `shasum -a 256`.
|
|
54
42
|
*/
|
|
55
43
|
checksum: string;
|
|
56
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Parsed components of an integrity string.
|
|
47
|
+
*/
|
|
48
|
+
export interface ParsedIntegrity {
|
|
49
|
+
/**
|
|
50
|
+
* SRI algorithm: `'sha256' | 'sha384' | 'sha512'`.
|
|
51
|
+
*/
|
|
52
|
+
algorithm: string;
|
|
53
|
+
/**
|
|
54
|
+
* Base64-encoded digest body (everything after the `-`).
|
|
55
|
+
*/
|
|
56
|
+
body: string;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Convert a sha256 hex checksum to its SRI integrity form (`sha256-<base64>`).
|
|
60
|
+
* Idempotent on integrity input — call this on user-supplied data without first
|
|
61
|
+
* sniffing the format.
|
|
62
|
+
*
|
|
63
|
+
* The default algorithm is `'sha256'` because that's the fleet's checksum
|
|
64
|
+
* convention; pass an explicit algorithm if you have a hex digest from `sha384`
|
|
65
|
+
* or `sha512` (the function does not verify hex length against the algorithm —
|
|
66
|
+
* caller's responsibility).
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ;```typescript
|
|
70
|
+
* checksumToIntegrity(
|
|
71
|
+
* '3620a0fcaf81ecd3aaeccd5965919d90dbc913f4d07a96e11e7cafc2c785054b',
|
|
72
|
+
* )
|
|
73
|
+
* // 'sha256-NiCg/K+B7NOq7M1ZZZGdkNvJE/TQepbhHnyvwseFBUs='
|
|
74
|
+
*
|
|
75
|
+
* checksumToIntegrity('sha256-NiCg/K+B7NOq7M1ZZZGdkNvJE/TQepbhHnyvwseFBUs=')
|
|
76
|
+
* // 'sha256-NiCg/K+B7NOq7M1ZZZGdkNvJE/TQepbhHnyvwseFBUs=' (idempotent)
|
|
77
|
+
* ```
|
|
78
|
+
*
|
|
79
|
+
* @throws TypeError when the input is neither a recognized SRI nor a hex
|
|
80
|
+
* digest.
|
|
81
|
+
*/
|
|
82
|
+
export declare function checksumToIntegrity(input: string, algorithm?: string): string;
|
|
57
83
|
/**
|
|
58
84
|
* Compute both integrity (sha512 SRI) and checksum (sha256 hex) for a buffer of
|
|
59
85
|
* bytes.
|
|
60
86
|
*/
|
|
61
87
|
export declare function computeHashes(bytes: Buffer): ComputedHashes;
|
|
62
|
-
|
|
63
|
-
|
|
88
|
+
/**
|
|
89
|
+
* Convert a sha256 SRI integrity string to its hex checksum form (64 lowercase
|
|
90
|
+
* chars). Idempotent on checksum input.
|
|
91
|
+
*
|
|
92
|
+
* Throws on `sha384` and `sha512` SRI — checksums are sha256-only by fleet
|
|
93
|
+
* convention. Callers that need a hex digest for those algorithms can call
|
|
94
|
+
* `parseIntegrity(sri)` and decode `.body` manually.
|
|
95
|
+
*
|
|
96
|
+
* @example
|
|
97
|
+
* ;```typescript
|
|
98
|
+
* integrityToChecksum('sha256-NiCg/K+B7NOq7M1ZZZGdkNvJE/TQepbhHnyvwseFBUs=')
|
|
99
|
+
* // '3620a0fcaf81ecd3aaeccd5965919d90dbc913f4d07a96e11e7cafc2c785054b'
|
|
100
|
+
*
|
|
101
|
+
* integrityToChecksum(
|
|
102
|
+
* '3620a0fcaf81ecd3aaeccd5965919d90dbc913f4d07a96e11e7cafc2c785054b',
|
|
103
|
+
* )
|
|
104
|
+
* // '3620a0fcaf81ecd3aaeccd5965919d90dbc913f4d07a96e11e7cafc2c785054b' (idempotent)
|
|
105
|
+
* ```
|
|
106
|
+
*
|
|
107
|
+
* @throws TypeError when the input is neither a recognized SRI nor a hex
|
|
108
|
+
* checksum, or when the input is a non-sha256 SRI.
|
|
109
|
+
*/
|
|
110
|
+
export declare function integrityToChecksum(input: string): string;
|
|
111
|
+
/**
|
|
112
|
+
* True when `s` is a sha256 hex checksum (exactly 64 hex chars).
|
|
113
|
+
*/
|
|
114
|
+
export declare function isChecksum(s: string): boolean;
|
|
115
|
+
/**
|
|
116
|
+
* True when `s` is a W3C SRI integrity string: `sha(256|384|512)-<base64>`.
|
|
117
|
+
*/
|
|
118
|
+
export declare function isIntegrity(s: string): boolean;
|
|
64
119
|
/**
|
|
65
120
|
* Normalize a {@link HashSpec} to its canonical `{ type, value }` form.
|
|
66
121
|
*
|
|
67
122
|
* - Object form is trusted (its `value` is validated for shape).
|
|
68
|
-
* - Bare string matching
|
|
123
|
+
* - Bare string matching SRI → integrity.
|
|
69
124
|
* - Bare string of 64 hex chars → checksum.
|
|
70
125
|
* - Anything else throws TypeError.
|
|
71
126
|
*
|
|
@@ -73,6 +128,19 @@ export declare function isIntegrityString(s: string): boolean;
|
|
|
73
128
|
* object's value doesn't match its declared type.
|
|
74
129
|
*/
|
|
75
130
|
export declare function normalizeHash(spec: HashSpec): NormalizedHash;
|
|
131
|
+
/**
|
|
132
|
+
* Split an integrity string into its `{ algorithm, body }` components. `body`
|
|
133
|
+
* is the base64-encoded digest (everything after the algorithm + dash).
|
|
134
|
+
*
|
|
135
|
+
* @example
|
|
136
|
+
* ;```typescript
|
|
137
|
+
* parseIntegrity('sha256-NiCg/K+B7NOq7M1ZZZGdkNvJE/TQepbhHnyvwseFBUs=')
|
|
138
|
+
* // { algorithm: 'sha256', body: 'NiCg/K+B7NOq7M1ZZZGdkNvJE/TQepbhHnyvwseFBUs=' }
|
|
139
|
+
* ```
|
|
140
|
+
*
|
|
141
|
+
* @throws Error when the input is not a valid SRI integrity string.
|
|
142
|
+
*/
|
|
143
|
+
export declare function parseIntegrity(sri: string): ParsedIntegrity;
|
|
76
144
|
/**
|
|
77
145
|
* Verify computed hashes against an expected {@link NormalizedHash}. Uses
|
|
78
146
|
* `crypto.timingSafeEqual` for constant-time comparison.
|