@socketsecurity/lib 6.0.6 → 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 +26 -1
- package/dist/ai/discover.d.mts +2 -2
- package/dist/ai/discover.js +3 -2
- package/dist/ai/spawn.js +2 -1
- package/dist/ai/types.d.mts +18 -6
- package/dist/ai/worktree.d.mts +6 -6
- package/dist/ai/worktree.js +1 -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 +6 -6
- package/dist/archives/zip.js +3 -5
- 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/exec.js +2 -3
- package/dist/bin/find.js +13 -13
- package/dist/bin/prim.cjs +22736 -22556
- 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 +55 -52
- 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 +17 -17
- package/dist/compression/brotli.d.ts +25 -25
- package/dist/compression/brotli.js +33 -33
- package/dist/compression/gzip.d.ts +23 -23
- package/dist/compression/gzip.js +40 -40
- 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 +11 -11
- 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 -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/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/npm-pack.js +2 -2
- package/dist/external-tools/bazel/read-bazel-version-file.js +1 -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/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/janus/from-vfs.js +1 -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-vfs.js +1 -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 +12 -12
- package/dist/external-tools/opengrep/from-vfs.js +1 -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/types.d.ts +1 -1
- package/dist/external-tools/skillspector/from-path.js +3 -5
- package/dist/external-tools/skillspector/from-vfs.js +1 -1
- package/dist/external-tools/synp/from-download.js +2 -2
- package/dist/external-tools/synp/from-vfs.js +1 -1
- package/dist/external-tools/trivy/from-vfs.js +1 -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/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 +10 -10
- 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 +4 -6
- 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 +4 -2
- 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/headers.js +0 -1
- package/dist/http-request/request-attempt.js +37 -33
- 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 +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.js +16 -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 +4 -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 +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/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 +2 -2
- package/dist/secrets/compare.d.ts +45 -0
- package/dist/secrets/compare.js +61 -0
- package/dist/secrets/keychain.js +6 -4
- package/dist/secrets/linux.js +19 -19
- package/dist/secrets/macos.d.ts +1 -1
- package/dist/secrets/macos.js +13 -13
- package/dist/secrets/rc.d.ts +2 -2
- package/dist/secrets/rc.js +6 -4
- package/dist/secrets/socket-api-token.d.ts +4 -4
- package/dist/secrets/socket-api-token.js +18 -9
- package/dist/secrets/windows.js +14 -13
- package/dist/shadow/skip.js +2 -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 +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/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.js +15 -5
- package/package.json +247 -106
- 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/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
|
@@ -3,11 +3,13 @@
|
|
|
3
3
|
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
|
+
const require_primordials_string = require('../primordials/string.js');
|
|
6
7
|
const require_primordials_array = require('../primordials/array.js');
|
|
7
8
|
const require_primordials_date = require('../primordials/date.js');
|
|
8
9
|
const require_primordials_json = require('../primordials/json.js');
|
|
9
10
|
const require_primordials_promise = require('../primordials/promise.js');
|
|
10
11
|
const require_http_request_browser_fetch = require('./browser-fetch.js');
|
|
12
|
+
const require_primordials_headers = require('../primordials/headers.js');
|
|
11
13
|
|
|
12
14
|
//#region src/http-request/browser.ts
|
|
13
15
|
/**
|
|
@@ -136,8 +138,8 @@ function decodeText(bytes) {
|
|
|
136
138
|
}
|
|
137
139
|
function headersToRecord(headers) {
|
|
138
140
|
const out = {};
|
|
139
|
-
|
|
140
|
-
out[
|
|
141
|
+
require_primordials_headers.HeadersPrototypeForEach(headers, (value, key) => {
|
|
142
|
+
out[require_primordials_string.StringPrototypeToLowerCase(key)] = value;
|
|
141
143
|
});
|
|
142
144
|
return out;
|
|
143
145
|
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Checksum file fetching + parsing for download verification.
|
|
3
|
+
* `parseChecksumFile` understands the three common text-file shapes:
|
|
4
|
+
*
|
|
5
|
+
* - BSD style: `SHA256 (filename) = hash`
|
|
6
|
+
* - GNU style: `hash filename` (two spaces)
|
|
7
|
+
* - Simple: `hash filename` (single space) Comment lines (`#…`) and blank lines
|
|
8
|
+
* are skipped. Each hex digest is converted to an SRI integrity string
|
|
9
|
+
* (`sha256-<base64>=`) so callers always work in the same format as
|
|
10
|
+
* `external-tools.json` and other integrity-string consumers.
|
|
11
|
+
* `fetchChecksumFile` is the URL helper — fetches via `httpRequest` and
|
|
12
|
+
* runs the body through `parseChecksumFile`.
|
|
13
|
+
*/
|
|
14
|
+
import type { ChecksumFile, FetchChecksumFileOptions } from './download-types';
|
|
15
|
+
/**
|
|
16
|
+
* Fetch and parse a checksums file from a URL.
|
|
17
|
+
*
|
|
18
|
+
* Returns a map of filenames to SRI integrity strings (`sha256-<base64>=`).
|
|
19
|
+
* Feed `httpDownload({ sha256 })` by converting back to hex via
|
|
20
|
+
* `integrityToChecksum()`; pass the SRI string through verbatim to consumers
|
|
21
|
+
* that accept SRI directly.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ;```ts
|
|
25
|
+
* import { integrityToChecksum } from '@socketsecurity/lib/integrity'
|
|
26
|
+
*
|
|
27
|
+
* const sums = await fetchChecksumFile(
|
|
28
|
+
* 'https://github.com/org/repo/releases/download/v1.0.0/checksums.txt',
|
|
29
|
+
* )
|
|
30
|
+
* await httpDownload(url, '/tmp/tool.tar.gz', {
|
|
31
|
+
* sha256: integrityToChecksum(sums['tool_linux.tar.gz']!),
|
|
32
|
+
* })
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function fetchChecksumFile(url: string, options?: FetchChecksumFileOptions | undefined): Promise<ChecksumFile>;
|
|
36
|
+
/**
|
|
37
|
+
* Parse a checksums file text into a filename-to-integrity map.
|
|
38
|
+
*
|
|
39
|
+
* Supports standard checksums file formats: - BSD style: `SHA256 (filename) =
|
|
40
|
+
* hash` - GNU style: `hash filename` (two spaces) - Simple style: `hash
|
|
41
|
+
* filename` (single space)
|
|
42
|
+
*
|
|
43
|
+
* Lines starting with `#` are treated as comments and ignored. Empty lines are
|
|
44
|
+
* ignored. Each 64-char hex digest is converted to an SRI integrity string so
|
|
45
|
+
* the result is uniform regardless of source format.
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ;```ts
|
|
49
|
+
* const sums = parseChecksumFile(
|
|
50
|
+
* 'e3b0c44... file.zip\nSHA256 (other.tar.gz) = abc123...\n',
|
|
51
|
+
* )
|
|
52
|
+
* // sums['file.zip'] === 'sha256-47DEQpj8HBSa+/...'
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export declare function parseChecksumFile(text: string): ChecksumFile;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/* Socket Lib - Built with rolldown */
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
const require_primordials_error = require('../primordials/error.js');
|
|
5
|
+
const require_integrity = require('../integrity.js');
|
|
6
|
+
const require_primordials_string = require('../primordials/string.js');
|
|
7
|
+
const require_http_request_request = require('./request.js');
|
|
8
|
+
|
|
9
|
+
//#region src/http-request/checksum-file.ts
|
|
10
|
+
/**
|
|
11
|
+
* @file Checksum file fetching + parsing for download verification.
|
|
12
|
+
* `parseChecksumFile` understands the three common text-file shapes:
|
|
13
|
+
*
|
|
14
|
+
* - BSD style: `SHA256 (filename) = hash`
|
|
15
|
+
* - GNU style: `hash filename` (two spaces)
|
|
16
|
+
* - Simple: `hash filename` (single space) Comment lines (`#…`) and blank lines
|
|
17
|
+
* are skipped. Each hex digest is converted to an SRI integrity string
|
|
18
|
+
* (`sha256-<base64>=`) so callers always work in the same format as
|
|
19
|
+
* `external-tools.json` and other integrity-string consumers.
|
|
20
|
+
* `fetchChecksumFile` is the URL helper — fetches via `httpRequest` and
|
|
21
|
+
* runs the body through `parseChecksumFile`.
|
|
22
|
+
*/
|
|
23
|
+
const CHECKSUM_BSD_RE = /^SHA256\s+\((.+)\)\s+=\s+([a-fA-F0-9]{64})$/;
|
|
24
|
+
const CHECKSUM_GNU_RE = /^([a-fA-F0-9]{64})\s+(.+)$/;
|
|
25
|
+
/**
|
|
26
|
+
* Fetch and parse a checksums file from a URL.
|
|
27
|
+
*
|
|
28
|
+
* Returns a map of filenames to SRI integrity strings (`sha256-<base64>=`).
|
|
29
|
+
* Feed `httpDownload({ sha256 })` by converting back to hex via
|
|
30
|
+
* `integrityToChecksum()`; pass the SRI string through verbatim to consumers
|
|
31
|
+
* that accept SRI directly.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ;```ts
|
|
35
|
+
* import { integrityToChecksum } from '@socketsecurity/lib/integrity'
|
|
36
|
+
*
|
|
37
|
+
* const sums = await fetchChecksumFile(
|
|
38
|
+
* 'https://github.com/org/repo/releases/download/v1.0.0/checksums.txt',
|
|
39
|
+
* )
|
|
40
|
+
* await httpDownload(url, '/tmp/tool.tar.gz', {
|
|
41
|
+
* sha256: integrityToChecksum(sums['tool_linux.tar.gz']!),
|
|
42
|
+
* })
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
async function fetchChecksumFile(url, options) {
|
|
46
|
+
const { ca, headers = {}, timeout = 3e4 } = {
|
|
47
|
+
__proto__: null,
|
|
48
|
+
...options
|
|
49
|
+
};
|
|
50
|
+
const response = await require_http_request_request.httpRequest(url, {
|
|
51
|
+
ca,
|
|
52
|
+
headers,
|
|
53
|
+
timeout
|
|
54
|
+
});
|
|
55
|
+
if (!response.ok) throw new require_primordials_error.ErrorCtor(`Failed to fetch checksums from ${url}: ${response.status} ${response.statusText}`);
|
|
56
|
+
return parseChecksumFile(response.body.toString("utf8"));
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Parse a checksums file text into a filename-to-integrity map.
|
|
60
|
+
*
|
|
61
|
+
* Supports standard checksums file formats: - BSD style: `SHA256 (filename) =
|
|
62
|
+
* hash` - GNU style: `hash filename` (two spaces) - Simple style: `hash
|
|
63
|
+
* filename` (single space)
|
|
64
|
+
*
|
|
65
|
+
* Lines starting with `#` are treated as comments and ignored. Empty lines are
|
|
66
|
+
* ignored. Each 64-char hex digest is converted to an SRI integrity string so
|
|
67
|
+
* the result is uniform regardless of source format.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ;```ts
|
|
71
|
+
* const sums = parseChecksumFile(
|
|
72
|
+
* 'e3b0c44... file.zip\nSHA256 (other.tar.gz) = abc123...\n',
|
|
73
|
+
* )
|
|
74
|
+
* // sums['file.zip'] === 'sha256-47DEQpj8HBSa+/...'
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
function parseChecksumFile(text) {
|
|
78
|
+
const result = { __proto__: null };
|
|
79
|
+
for (const line of require_primordials_string.StringPrototypeSplit(text, "\n")) {
|
|
80
|
+
const trimmed = line.trim();
|
|
81
|
+
if (!trimmed || require_primordials_string.StringPrototypeStartsWith(trimmed, "#")) continue;
|
|
82
|
+
const bsdMatch = CHECKSUM_BSD_RE.exec(trimmed);
|
|
83
|
+
if (bsdMatch) {
|
|
84
|
+
result[bsdMatch[1]] = require_integrity.checksumToIntegrity(bsdMatch[2].toLowerCase());
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
const gnuMatch = CHECKSUM_GNU_RE.exec(trimmed);
|
|
88
|
+
if (gnuMatch) result[gnuMatch[2]] = require_integrity.checksumToIntegrity(gnuMatch[1].toLowerCase());
|
|
89
|
+
}
|
|
90
|
+
return result;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
//#endregion
|
|
94
|
+
exports.fetchChecksumFile = fetchChecksumFile;
|
|
95
|
+
exports.parseChecksumFile = parseChecksumFile;
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* `http-request/types.ts` for size hygiene.
|
|
4
4
|
*
|
|
5
5
|
* - `HttpDownloadOptions` / `HttpDownloadResult` — file-download surface
|
|
6
|
-
* - `
|
|
6
|
+
* - `ChecksumFile` / `FetchChecksumFileOptions` — checksum-file helpers
|
|
7
7
|
*/
|
|
8
8
|
import type { IncomingHttpHeaders } from 'node:http';
|
|
9
9
|
import type { Logger } from '../logger/node';
|
|
@@ -136,23 +136,14 @@ export interface HttpDownloadOptions {
|
|
|
136
136
|
* fail if the computed hash doesn't match. The hash should be a lowercase hex
|
|
137
137
|
* string (64 characters).
|
|
138
138
|
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
139
|
+
* Pair with `fetchChecksumFile()` + `integrityToChecksum()` when working from
|
|
140
|
+
* a checksums URL, since `fetchChecksumFile()` returns SRI strings.
|
|
141
141
|
*
|
|
142
142
|
* @example
|
|
143
143
|
* ;```ts
|
|
144
|
-
* // Verify download
|
|
144
|
+
* // Verify download with a sha256 hex digest
|
|
145
145
|
* await httpDownload('https://example.com/file.zip', '/tmp/file.zip', {
|
|
146
|
-
* sha256:
|
|
147
|
-
* 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
|
|
148
|
-
* })
|
|
149
|
-
*
|
|
150
|
-
* // Verify using checksums from a URL
|
|
151
|
-
* const checksums = await fetchChecksums(
|
|
152
|
-
* 'https://example.com/checksums.txt',
|
|
153
|
-
* )
|
|
154
|
-
* await httpDownload('https://example.com/file.zip', '/tmp/file.zip', {
|
|
155
|
-
* sha256: checksums['file.zip'],
|
|
146
|
+
* sha256: 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
|
|
156
147
|
* })
|
|
157
148
|
* ```
|
|
158
149
|
*/
|
|
@@ -189,23 +180,24 @@ export interface HttpDownloadResult {
|
|
|
189
180
|
statusText: string;
|
|
190
181
|
}
|
|
191
182
|
/**
|
|
192
|
-
* Map of filenames to
|
|
193
|
-
*
|
|
183
|
+
* Map of filenames to SRI integrity strings (`sha256-<base64>=`). Returned by
|
|
184
|
+
* `parseChecksumFile` / `fetchChecksumFile`. Pass through
|
|
185
|
+
* `integrityToChecksum()` to feed `httpDownload({ sha256 })`, or pass the SRI
|
|
186
|
+
* string directly to consumers that accept SRI.
|
|
194
187
|
*
|
|
195
188
|
* @example
|
|
196
189
|
* ;```ts
|
|
197
|
-
* const
|
|
198
|
-
* 'file.zip':
|
|
199
|
-
*
|
|
200
|
-
* 'other.tar.gz': 'abc123...',
|
|
190
|
+
* const sums: ChecksumFile = {
|
|
191
|
+
* 'file.zip': 'sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=',
|
|
192
|
+
* 'other.tar.gz': 'sha256-...',
|
|
201
193
|
* }
|
|
202
194
|
* ```
|
|
203
195
|
*/
|
|
204
|
-
export type
|
|
196
|
+
export type ChecksumFile = Record<string, string>;
|
|
205
197
|
/**
|
|
206
|
-
* Options for fetching
|
|
198
|
+
* Options for fetching a checksum file from a URL.
|
|
207
199
|
*/
|
|
208
|
-
export interface
|
|
200
|
+
export interface FetchChecksumFileOptions {
|
|
209
201
|
/**
|
|
210
202
|
* Custom CA certificates for TLS connections. See `HttpRequestOptions.ca` for
|
|
211
203
|
* details.
|
|
@@ -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;
|
|
@@ -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
|
|
@@ -70,7 +72,7 @@ async function httpRequestAttempt(url, options) {
|
|
|
70
72
|
};
|
|
71
73
|
const parsedUrl = new require_primordials_url.URLCtor(url);
|
|
72
74
|
const isHttps = parsedUrl.protocol === "https:";
|
|
73
|
-
const httpModule = isHttps ?
|
|
75
|
+
const httpModule = isHttps ? require_node_https.getNodeHttps() : require_node_http.getNodeHttp();
|
|
74
76
|
const requestOptions = {
|
|
75
77
|
headers: mergedHeaders,
|
|
76
78
|
hostname: parsedUrl.hostname,
|
|
@@ -106,15 +108,15 @@ async function httpRequestAttempt(url, options) {
|
|
|
106
108
|
reject(new require_primordials_error.ErrorCtor(`Too many redirects (exceeded maximum: ${maxRedirects})`));
|
|
107
109
|
return;
|
|
108
110
|
}
|
|
109
|
-
const redirectUrl = res.headers.location.startsWith("http") ? res.headers.location : new
|
|
110
|
-
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);
|
|
111
113
|
if (isHttps && redirectParsed.protocol !== "https:") {
|
|
112
114
|
settled = true;
|
|
113
115
|
reject(new require_primordials_error.ErrorCtor(`Redirect from HTTPS to HTTP is not allowed: ${redirectUrl}`));
|
|
114
116
|
return;
|
|
115
117
|
}
|
|
116
118
|
let redirectHeaders = headers;
|
|
117
|
-
if (new
|
|
119
|
+
if (new require_primordials_url.URLCtor(url).origin !== redirectParsed.origin) {
|
|
118
120
|
redirectHeaders = { __proto__: null };
|
|
119
121
|
const stripped = new Set([
|
|
120
122
|
"authorization",
|
|
@@ -148,7 +150,7 @@ async function httpRequestAttempt(url, options) {
|
|
|
148
150
|
status,
|
|
149
151
|
statusText
|
|
150
152
|
});
|
|
151
|
-
const emptyBody =
|
|
153
|
+
const emptyBody = require_primordials_buffer.BufferAlloc(0);
|
|
152
154
|
resolveOnce({
|
|
153
155
|
arrayBuffer: () => emptyBody.buffer,
|
|
154
156
|
body: emptyBody,
|
|
@@ -178,31 +180,33 @@ async function httpRequestAttempt(url, options) {
|
|
|
178
180
|
});
|
|
179
181
|
res.on("end", () => {
|
|
180
182
|
if (settled) return;
|
|
181
|
-
const
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
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);
|
|
204
209
|
});
|
|
205
|
-
resolveOnce(response);
|
|
206
210
|
});
|
|
207
211
|
res.on("error", (error) => {
|
|
208
212
|
rejectOnce(error);
|
|
@@ -217,12 +221,12 @@ async function httpRequestAttempt(url, options) {
|
|
|
217
221
|
});
|
|
218
222
|
if (body) {
|
|
219
223
|
if (typeof body === "object" && typeof body.pipe === "function") {
|
|
220
|
-
const
|
|
221
|
-
|
|
224
|
+
const bodyStream = body;
|
|
225
|
+
bodyStream.on("error", (err) => {
|
|
222
226
|
request.destroy();
|
|
223
227
|
rejectOnce(err);
|
|
224
228
|
});
|
|
225
|
-
|
|
229
|
+
bodyStream.pipe(request);
|
|
226
230
|
return;
|
|
227
231
|
}
|
|
228
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;
|
|
@@ -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
|
|
@@ -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.
|