@socketsecurity/lib 6.0.3 → 6.0.5
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 +22 -0
- package/dist/_virtual/_rolldown/runtime.js +45 -0
- package/dist/abort/signal.js +53 -59
- package/dist/ai/discover.js +110 -110
- package/dist/ai/profiles.js +94 -65
- package/dist/ai/spawn.js +172 -194
- package/dist/ai/types.js +1 -17
- package/dist/ai/worktree.js +160 -183
- package/dist/ansi/constants.js +16 -38
- package/dist/ansi/strip.js +44 -41
- package/dist/archives/_internal.js +64 -73
- package/dist/archives/detect.js +30 -43
- package/dist/archives/extract.js +43 -50
- package/dist/archives/tar.js +197 -228
- package/dist/archives/types.js +1 -17
- package/dist/archives/zip.js +85 -121
- package/dist/argv/flag-predicates.js +203 -101
- package/dist/argv/flag-types.js +96 -113
- package/dist/argv/parse-args-string.d.ts +16 -14
- package/dist/argv/parse-args-string.js +42 -39
- package/dist/argv/parse.js +145 -163
- package/dist/arrays/_internal.js +65 -48
- package/dist/arrays/chunk.js +51 -40
- package/dist/arrays/join.js +87 -35
- package/dist/arrays/predicates.js +46 -28
- package/dist/arrays/unique.js +45 -31
- package/dist/bin/_internal.js +34 -42
- package/dist/bin/check-primordials.js +175 -233
- package/dist/bin/check.js +51 -72
- package/dist/bin/exec.js +70 -74
- package/dist/bin/find.js +151 -134
- package/dist/bin/resolve.js +180 -246
- package/dist/bin/shadow.js +24 -33
- package/dist/bin/socket-lib.js +51 -73
- package/dist/bin/types.js +1 -17
- package/dist/bin/which.js +211 -146
- package/dist/cacache/_internal.js +25 -40
- package/dist/cacache/clear.js +79 -72
- package/dist/cacache/read.js +48 -46
- package/dist/cacache/tmp.js +29 -36
- package/dist/cacache/types.js +1 -17
- package/dist/cacache/write.js +43 -48
- package/dist/cache/ttl/store.js +232 -288
- package/dist/cache/ttl/types.js +1 -17
- package/dist/checks/primordials-defaults.js +83 -89
- package/dist/checks/primordials.js +225 -277
- package/dist/colors/convert.js +45 -37
- package/dist/colors/palette.js +88 -45
- package/dist/colors/socket-palette.js +74 -84
- package/dist/colors/types.js +1 -17
- package/dist/compression/_internal.js +57 -72
- package/dist/compression/brotli.js +94 -127
- package/dist/compression/gzip.js +95 -121
- package/dist/compression/types.js +1 -17
- package/dist/constants/agents.js +61 -113
- package/dist/constants/encoding.js +19 -42
- package/dist/constants/github.js +12 -30
- package/dist/constants/licenses.js +48 -63
- package/dist/constants/lifecycle-script-names.js +31 -45
- package/dist/constants/maintained-node-versions.js +22 -37
- package/dist/constants/node.js +226 -167
- package/dist/constants/package-default-node-range.js +16 -41
- package/dist/constants/package-default-socket-categories.js +12 -30
- package/dist/constants/packages.js +77 -126
- package/dist/constants/platform.js +27 -49
- package/dist/constants/sentinels.js +23 -48
- package/dist/constants/socket.js +42 -87
- package/dist/constants/testing.js +15 -34
- package/dist/constants/time.js +16 -36
- package/dist/constants/typescript.js +32 -52
- package/dist/cover/code.js +111 -142
- package/dist/cover/formatters.js +118 -101
- package/dist/cover/type.js +50 -76
- package/dist/cover/types.js +1 -17
- package/dist/crypto/hash.js +54 -46
- package/dist/debug/_internal.js +62 -71
- package/dist/debug/caller-info.js +53 -64
- package/dist/debug/namespace.js +80 -90
- package/dist/debug/output.js +172 -188
- package/dist/debug/types.js +1 -17
- package/dist/dlx/_internal.js +24 -43
- package/dist/dlx/arborist.js +162 -160
- package/dist/dlx/binary-cache.js +228 -200
- package/dist/dlx/binary-download.js +172 -211
- package/dist/dlx/binary-resolution.js +165 -157
- package/dist/dlx/binary-types.js +1 -17
- package/dist/dlx/binary.js +149 -189
- package/dist/dlx/cache.js +45 -30
- package/dist/dlx/detect.js +245 -159
- package/dist/dlx/dir.js +67 -51
- package/dist/dlx/firewall.js +62 -100
- package/dist/dlx/lockfile.js +122 -127
- package/dist/dlx/manifest.js +264 -274
- package/dist/dlx/package.js +241 -244
- package/dist/dlx/packages.js +99 -96
- package/dist/dlx/paths.js +73 -59
- package/dist/dlx/spec.js +52 -60
- package/dist/dlx/types.js +1 -17
- package/dist/eco/cargo/lockfile-format.js +19 -36
- package/dist/eco/cargo/manifest-format.js +17 -35
- package/dist/eco/cargo/parse-lockfile.js +210 -237
- package/dist/eco/manifest/analyze-lockfile.js +46 -63
- package/dist/eco/manifest/detect-format.js +66 -90
- package/dist/eco/manifest/find-packages.js +39 -64
- package/dist/eco/manifest/get-package-versions.js +27 -48
- package/dist/eco/manifest/get-package.js +21 -40
- package/dist/eco/manifest/manifest-error.js +14 -35
- package/dist/eco/manifest/parse-lockfile.js +40 -86
- package/dist/eco/manifest/parse-manifest.js +26 -43
- package/dist/eco/manifest/parse.js +26 -47
- package/dist/eco/manifest/types.js +1 -17
- package/dist/eco/npm/bun/exec.js +23 -32
- package/dist/eco/npm/manifest-format.js +21 -35
- package/dist/eco/npm/npm/exec.js +51 -61
- package/dist/eco/npm/npm/extract-package-name-from-path.js +28 -50
- package/dist/eco/npm/npm/flags.js +80 -52
- package/dist/eco/npm/npm/lockfile-format.js +21 -40
- package/dist/eco/npm/npm/parse-git-url.js +26 -40
- package/dist/eco/npm/npm/parse-lockfile.js +184 -210
- package/dist/eco/npm/parse-package-json.js +71 -102
- package/dist/eco/npm/pnpm/detect-pnpm-version.js +22 -43
- package/dist/eco/npm/pnpm/exec.js +51 -62
- package/dist/eco/npm/pnpm/flags.js +75 -68
- package/dist/eco/npm/pnpm/lockfile-format.js +19 -36
- package/dist/eco/npm/pnpm/parse-lockfile.js +235 -259
- package/dist/eco/npm/pnpm/parse-pnpm-package-id-v5.js +37 -47
- package/dist/eco/npm/pnpm/parse-pnpm-package-id-v6-v9.js +36 -49
- package/dist/eco/npm/script.js +82 -90
- package/dist/eco/npm/vlt/exec.js +24 -32
- package/dist/eco/npm/yarnpkg/yarn/exec.js +60 -59
- package/dist/eco/npm/yarnpkg/yarn/lockfile-format.js +20 -36
- package/dist/eco/npm/yarnpkg/yarn/parse-lockfile.js +194 -242
- package/dist/eco/npm/yarnpkg/yarn/parse-yarn-descriptor.js +37 -61
- package/dist/eco/purl.js +50 -60
- package/dist/eco/types.js +1 -17
- package/dist/effects/pulse-frames.js +64 -65
- package/dist/effects/shimmer-keyframes.js +71 -52
- package/dist/effects/shimmer-terminal.js +81 -50
- package/dist/effects/shimmer.js +290 -153
- package/dist/env/boolean.js +42 -43
- package/dist/env/case-insensitive.js +54 -39
- package/dist/env/ci.js +29 -31
- package/dist/env/debug.js +28 -31
- package/dist/env/github.js +144 -59
- package/dist/env/home.js +38 -31
- package/dist/env/locale.js +59 -39
- package/dist/env/node-auth-token.js +28 -31
- package/dist/env/node-env.js +28 -31
- package/dist/env/npm.js +94 -47
- package/dist/env/number.js +50 -51
- package/dist/env/package-manager.js +95 -83
- package/dist/env/path.js +28 -31
- package/dist/env/pre-commit.js +30 -32
- package/dist/env/proxy.js +121 -122
- package/dist/env/rewire.js +204 -96
- package/dist/env/shell.js +28 -31
- package/dist/env/socket-cli.js +233 -81
- package/dist/env/socket.js +521 -156
- package/dist/env/string.js +43 -44
- package/dist/env/temp-dir.js +59 -39
- package/dist/env/term.js +28 -31
- package/dist/env/test.js +65 -43
- package/dist/env/types.js +1 -17
- package/dist/env/windows.js +78 -43
- package/dist/env/xdg.js +62 -39
- package/dist/errors/message.js +40 -46
- package/dist/errors/predicates.js +61 -49
- package/dist/errors/stack.js +24 -36
- package/dist/events/exit/_internal.js +86 -103
- package/dist/events/exit/handler.js +48 -55
- package/dist/events/exit/intercept.js +49 -70
- package/dist/events/exit/lifecycle.js +92 -101
- package/dist/events/exit/signals.js +25 -31
- package/dist/events/exit/types.js +1 -17
- package/dist/events/warning/handler.js +43 -40
- package/dist/events/warning/suppress.js +111 -90
- package/dist/external/@npmcli/package-json/lib/read-package.js +132 -153
- package/dist/external/@npmcli/package-json/lib/sort.js +73 -105
- package/dist/external/@npmcli/package-json.js +12705 -15140
- package/dist/external/@npmcli/promise-spawn.js +451 -472
- package/dist/external/@sinclair/typebox/value.js +7443 -9002
- package/dist/external/@sinclair/typebox.js +7516 -7885
- package/dist/external/@socketregistry/is-unicode-supported.js +31 -39
- package/dist/external/@socketregistry/packageurl-js.js +6127 -7369
- package/dist/external/@socketregistry/yocto-spinner.js +394 -455
- package/dist/external/@yarnpkg/extensions.js +435 -1022
- package/dist/external/adm-zip.js +2313 -2673
- package/dist/external/debug.js +700 -687
- package/dist/external/external-pack.js +2658 -3171
- package/dist/external/fast-sort.js +124 -138
- package/dist/external/get-east-asian-width.js +70 -64
- package/dist/external/libnpmexec.js +28 -31
- package/dist/external/npm-pack.js +43617 -50137
- package/dist/external/p-map.js +198 -222
- package/dist/external/pico-pack.js +6735 -7304
- package/dist/external/pony-cause.js +143 -139
- package/dist/external/shell-quote.js +226 -0
- package/dist/external/spdx-pack.js +1283 -1403
- package/dist/external/streaming-iterables.js +835 -1052
- package/dist/external/tar-fs.js +2769 -3048
- package/dist/external/which.js +267 -251
- package/dist/external/yargs-parser.js +851 -1074
- package/dist/external-tools/bazel/asset-names.js +98 -90
- package/dist/external-tools/bazel/from-download.js +52 -46
- package/dist/external-tools/bazel/from-path.js +27 -38
- package/dist/external-tools/bazel/read-bazel-version-file.js +35 -57
- package/dist/external-tools/bazel/resolve-asset-url.js +24 -39
- package/dist/external-tools/bazel/resolve-bazel-version.js +34 -56
- package/dist/external-tools/bazel/resolve.js +44 -58
- package/dist/external-tools/bazel/types.js +1 -17
- package/dist/external-tools/cdxgen/asset-names.js +59 -66
- package/dist/external-tools/cdxgen/from-download.js +52 -80
- package/dist/external-tools/cdxgen/from-path.js +19 -37
- package/dist/external-tools/cdxgen/from-vfs.js +22 -43
- package/dist/external-tools/cdxgen/resolve.js +48 -63
- package/dist/external-tools/cdxgen/types.js +1 -17
- package/dist/external-tools/from-download.js +107 -67
- package/dist/external-tools/janus/asset-names.js +44 -51
- package/dist/external-tools/janus/from-download.js +45 -70
- package/dist/external-tools/janus/from-path.js +19 -37
- package/dist/external-tools/janus/from-vfs.js +22 -43
- package/dist/external-tools/janus/resolve.js +45 -63
- package/dist/external-tools/janus/types.js +1 -17
- package/dist/external-tools/jre/asset-names.js +109 -82
- package/dist/external-tools/jre/detect-platform-arch.js +25 -49
- package/dist/external-tools/jre/from-download.js +71 -67
- package/dist/external-tools/jre/from-java-home.js +27 -54
- package/dist/external-tools/jre/from-path.js +27 -49
- package/dist/external-tools/jre/from-vfs.js +39 -60
- package/dist/external-tools/jre/resolve.js +55 -68
- package/dist/external-tools/jre/types.js +1 -17
- package/dist/external-tools/manifest.js +130 -150
- package/dist/external-tools/opengrep/asset-names.js +60 -72
- package/dist/external-tools/opengrep/from-download.js +58 -80
- package/dist/external-tools/opengrep/from-path.js +19 -37
- package/dist/external-tools/opengrep/from-vfs.js +23 -43
- package/dist/external-tools/opengrep/resolve.js +43 -63
- package/dist/external-tools/opengrep/types.js +1 -17
- package/dist/external-tools/sbt/asset-names.js +21 -30
- package/dist/external-tools/sbt/from-download.js +50 -61
- package/dist/external-tools/sbt/from-path.js +23 -38
- package/dist/external-tools/sbt/from-vfs.js +30 -44
- package/dist/external-tools/sbt/resolve.js +45 -63
- package/dist/external-tools/sbt/types.js +1 -17
- package/dist/external-tools/synp/asset-names.js +11 -29
- package/dist/external-tools/synp/from-download.js +24 -41
- package/dist/external-tools/synp/from-path.js +19 -37
- package/dist/external-tools/synp/from-vfs.js +22 -43
- package/dist/external-tools/synp/resolve.js +43 -62
- package/dist/external-tools/synp/types.js +1 -17
- package/dist/external-tools/trivy/asset-names.js +51 -62
- package/dist/external-tools/trivy/from-download.js +42 -64
- package/dist/external-tools/trivy/from-path.js +19 -37
- package/dist/external-tools/trivy/from-vfs.js +22 -43
- package/dist/external-tools/trivy/resolve.js +43 -63
- package/dist/external-tools/trivy/types.js +1 -17
- package/dist/external-tools/trufflehog/asset-names.js +54 -66
- package/dist/external-tools/trufflehog/from-download.js +44 -62
- package/dist/external-tools/trufflehog/from-path.js +21 -37
- package/dist/external-tools/trufflehog/from-vfs.js +26 -43
- package/dist/external-tools/trufflehog/resolve.js +43 -63
- package/dist/external-tools/trufflehog/types.js +1 -17
- package/dist/external-tools/uv/asset-names.js +64 -74
- package/dist/external-tools/uv/from-download.js +44 -65
- package/dist/external-tools/uv/from-path.js +19 -37
- package/dist/external-tools/uv/from-vfs.js +22 -43
- package/dist/external-tools/uv/resolve.js +42 -63
- package/dist/external-tools/uv/types.js +1 -17
- package/dist/fs/_internal.js +40 -42
- package/dist/fs/access.js +57 -54
- package/dist/fs/encoding.js +80 -97
- package/dist/fs/find-up.js +126 -125
- package/dist/fs/inspect.js +168 -99
- package/dist/fs/path-cache.js +31 -32
- package/dist/fs/read-dir.js +102 -79
- package/dist/fs/read-file.js +177 -118
- package/dist/fs/read-json-cache.js +150 -134
- package/dist/fs/read-json.js +172 -187
- package/dist/fs/resolve-module.js +35 -58
- package/dist/fs/safe.js +278 -169
- package/dist/fs/types.js +1 -17
- package/dist/fs/unique.js +52 -48
- package/dist/fs/validate.js +56 -40
- package/dist/fs/write-json.js +109 -75
- package/dist/git/_internal.js +251 -216
- package/dist/git/changed.js +191 -74
- package/dist/git/repo.js +118 -104
- package/dist/git/staged.js +172 -62
- package/dist/git/types.js +1 -17
- package/dist/git/unstaged.js +175 -62
- package/dist/github/constants.js +25 -33
- package/dist/github/errors.js +46 -38
- package/dist/github/fetch.js +137 -82
- package/dist/github/ghsa.js +217 -151
- package/dist/github/refs-cache.js +54 -43
- package/dist/github/refs-graphql.js +97 -89
- package/dist/github/refs-rest.js +70 -101
- package/dist/github/refs.js +105 -64
- package/dist/github/token.js +96 -48
- package/dist/github/types.js +1 -17
- package/dist/globs/_internal.js +73 -82
- package/dist/globs/defaults.js +40 -59
- package/dist/globs/match.js +93 -77
- package/dist/globs/matcher.js +104 -92
- package/dist/globs/stream.js +43 -55
- package/dist/globs/types.js +1 -17
- package/dist/http-request/_internal.js +11 -38
- package/dist/http-request/browser-fetch.js +19 -29
- package/dist/http-request/browser.js +188 -206
- package/dist/http-request/checksums.js +101 -65
- package/dist/http-request/download-types.js +1 -17
- package/dist/http-request/download.js +195 -196
- package/dist/http-request/errors.js +39 -47
- package/dist/http-request/headers.js +95 -80
- package/dist/http-request/http-request.js +10 -35
- package/dist/http-request/node.js +71 -97
- package/dist/http-request/request-attempt.js +232 -285
- package/dist/http-request/request-types.js +1 -17
- package/dist/http-request/request.js +106 -108
- package/dist/http-request/response-reader.js +47 -51
- package/dist/http-request/response-types.js +22 -38
- package/dist/http-request/user-agent.js +73 -55
- package/dist/integrity.js +105 -106
- package/dist/ipc/_internal.js +34 -48
- package/dist/ipc/directory.js +55 -63
- package/dist/ipc/paths.js +52 -45
- package/dist/ipc/types.js +1 -17
- package/dist/ipc/write.js +81 -74
- package/dist/ipc-cli/get.js +29 -56
- package/dist/ipc-cli/types.js +1 -17
- package/dist/json/edit.js +182 -242
- package/dist/json/format.js +202 -103
- package/dist/json/parse.js +206 -109
- package/dist/json/types.js +1 -17
- package/dist/links/create.js +93 -60
- package/dist/links/types.js +1 -17
- package/dist/logger/_internal.js +109 -73
- package/dist/logger/browser.js +45 -56
- package/dist/logger/colors.js +31 -49
- package/dist/logger/console.js +89 -112
- package/dist/logger/default.js +19 -33
- package/dist/logger/logger.js +5 -29
- package/dist/logger/node.js +793 -854
- package/dist/logger/symbols-builder.js +54 -56
- package/dist/logger/symbols.js +135 -118
- package/dist/logger/types.js +1 -17
- package/dist/memo/_internal.js +39 -49
- package/dist/memo/async.js +133 -117
- package/dist/memo/clear.js +25 -34
- package/dist/memo/decorator.js +43 -37
- package/dist/memo/memoize.js +97 -88
- package/dist/memo/once.js +42 -41
- package/dist/memo/types.js +1 -17
- package/dist/memo/weak.js +45 -41
- package/dist/node/async-hooks.js +9 -30
- package/dist/node/child-process.js +9 -30
- package/dist/node/crypto.js +9 -30
- package/dist/node/events.js +9 -30
- package/dist/node/fs-promises.js +9 -30
- package/dist/node/fs.js +9 -30
- package/dist/node/http.js +9 -30
- package/dist/node/https.js +9 -30
- package/dist/node/module.js +20 -34
- package/dist/node/os.js +9 -30
- package/dist/node/path.js +9 -30
- package/dist/node/timers-promises.js +9 -30
- package/dist/node/url.js +9 -30
- package/dist/node/util.js +9 -30
- package/dist/objects/getters.js +185 -126
- package/dist/objects/inspect.js +85 -52
- package/dist/objects/mutate.js +96 -76
- package/dist/objects/predicates.js +112 -59
- package/dist/objects/sort.js +120 -76
- package/dist/objects/types.js +1 -17
- package/dist/packages/edit-class.js +198 -265
- package/dist/packages/edit.js +79 -86
- package/dist/packages/exports.js +146 -157
- package/dist/packages/isolation.js +159 -209
- package/dist/packages/licenses.js +207 -189
- package/dist/packages/manifest.js +134 -172
- package/dist/packages/normalize.js +91 -102
- package/dist/packages/operations.d.ts +2 -0
- package/dist/packages/operations.js +283 -254
- package/dist/packages/provenance.js +195 -245
- package/dist/packages/specs.js +94 -84
- package/dist/packages/types.js +1 -17
- package/dist/packages/validation.js +49 -50
- package/dist/paths/_internal.js +82 -86
- package/dist/paths/conversion.js +112 -65
- package/dist/paths/dirnames.js +17 -42
- package/dist/paths/exts.js +23 -54
- package/dist/paths/filenames.js +21 -50
- package/dist/paths/globs.js +15 -38
- package/dist/paths/normalize.js +215 -236
- package/dist/paths/packages.js +34 -49
- package/dist/paths/predicates.js +184 -106
- package/dist/paths/resolve.js +146 -128
- package/dist/paths/rewire.js +108 -72
- package/dist/paths/socket.js +252 -132
- package/dist/paths/walk.js +55 -60
- package/dist/perf/_internal.js +10 -28
- package/dist/perf/enabled.js +21 -30
- package/dist/perf/metrics.js +81 -67
- package/dist/perf/report.js +79 -80
- package/dist/perf/timer.js +180 -126
- package/dist/perf/types.js +1 -17
- package/dist/pkg-ext/data.js +29 -82
- package/dist/pkg-ext/types.js +1 -17
- package/dist/primordials/array.js +120 -198
- package/dist/primordials/buffer.js +28 -51
- package/dist/primordials/date.js +26 -51
- package/dist/primordials/error.js +33 -59
- package/dist/primordials/function.js +21 -41
- package/dist/primordials/globals.js +25 -48
- package/dist/primordials/json.js +14 -30
- package/dist/primordials/map-set.js +88 -152
- package/dist/primordials/math.js +59 -116
- package/dist/primordials/number.js +41 -76
- package/dist/primordials/object.js +56 -116
- package/dist/primordials/promise.js +28 -52
- package/dist/primordials/reflect.js +24 -52
- package/dist/primordials/regexp.js +25 -47
- package/dist/primordials/string.js +114 -167
- package/dist/primordials/symbol.js +40 -72
- package/dist/primordials/uncurry.js +38 -55
- package/dist/primordials/url.js +27 -66
- package/dist/process/_internal.js +7 -32
- package/dist/process/abort.js +29 -35
- package/dist/process/lock-instance.js +26 -30
- package/dist/process/lock-manager.js +279 -307
- package/dist/process/lock-types.js +1 -17
- package/dist/process/spawn/_internal.js +43 -55
- package/dist/process/spawn/child.js +172 -211
- package/dist/process/spawn/errors.js +116 -113
- package/dist/process/spawn/stdio.js +51 -35
- package/dist/process/spawn/types.js +1 -17
- package/dist/process/transient.js +49 -66
- package/dist/promises/_internal.js +31 -34
- package/dist/promises/iterate.js +238 -102
- package/dist/promises/options.js +123 -101
- package/dist/promises/queue.js +115 -136
- package/dist/promises/resolvers.js +77 -46
- package/dist/promises/retry.js +156 -101
- package/dist/promises/types.js +1 -17
- package/dist/regexps/escape.js +32 -30
- package/dist/regexps/hex.js +16 -33
- package/dist/regexps/spec.js +53 -81
- package/dist/releases/github-archives.js +127 -118
- package/dist/releases/github-asset-url.js +162 -146
- package/dist/releases/github-assets.js +37 -49
- package/dist/releases/github-auth.js +32 -48
- package/dist/releases/github-downloads.js +118 -138
- package/dist/releases/github-listing.js +175 -145
- package/dist/releases/github-retry-config.js +41 -47
- package/dist/releases/github-types.js +1 -17
- package/dist/releases/socket-btm.js +273 -192
- package/dist/schema/parse.js +35 -36
- package/dist/schema/types.js +1 -17
- package/dist/schema/validate.js +118 -99
- package/dist/sea/detect.js +57 -52
- package/dist/secrets/_internal.js +86 -67
- package/dist/secrets/find.js +96 -77
- package/dist/secrets/keychain.js +315 -309
- package/dist/secrets/linux.js +133 -135
- package/dist/secrets/macos.js +151 -147
- package/dist/secrets/rc.js +182 -181
- package/dist/secrets/socket-api-token.js +28 -43
- package/dist/secrets/types.js +1 -17
- package/dist/secrets/windows.js +184 -242
- package/dist/shadow/skip.js +51 -70
- package/dist/shadow/types.js +1 -17
- package/dist/shell/parse.d.ts +26 -0
- package/dist/shell/parse.js +35 -0
- package/dist/shell/quote.d.ts +19 -0
- package/dist/shell/quote.js +30 -0
- package/dist/smol/detect.js +67 -43
- package/dist/smol/http.js +33 -37
- package/dist/smol/https.js +31 -37
- package/dist/smol/manifest.js +33 -37
- package/dist/smol/path.js +33 -37
- package/dist/smol/primordial.js +35 -37
- package/dist/smol/purl.js +34 -37
- package/dist/smol/versions.js +31 -37
- package/dist/smol/vfs.js +46 -38
- package/dist/sorts/_internal.js +14 -40
- package/dist/sorts/natural.js +57 -64
- package/dist/sorts/semver.js +33 -43
- package/dist/sorts/strings.js +24 -30
- package/dist/sorts/types.js +1 -17
- package/dist/spinner/default.js +72 -63
- package/dist/spinner/format.js +86 -71
- package/dist/spinner/spinner.js +749 -797
- package/dist/spinner/types.js +1 -17
- package/dist/spinner/with.js +193 -137
- package/dist/ssri/convert.js +64 -47
- package/dist/ssri/parse.js +38 -37
- package/dist/ssri/validate.js +51 -34
- package/dist/stdio/_internal.js +50 -46
- package/dist/stdio/clear.js +208 -86
- package/dist/stdio/divider.js +170 -97
- package/dist/stdio/footer.js +116 -110
- package/dist/stdio/header.js +117 -90
- package/dist/stdio/progress.js +189 -218
- package/dist/stdio/prompts.js +244 -168
- package/dist/stdio/stderr.js +173 -78
- package/dist/stdio/stdout.js +177 -94
- package/dist/streams/parallel.js +58 -50
- package/dist/streams/transform.js +36 -45
- package/dist/strings/format.js +145 -63
- package/dist/strings/predicates.js +56 -34
- package/dist/strings/search.js +52 -42
- package/dist/strings/transform.js +113 -72
- package/dist/strings/types.js +1 -17
- package/dist/strings/width.js +89 -82
- package/dist/tables/bordered.js +81 -81
- package/dist/tables/padding.js +36 -46
- package/dist/tables/simple.js +62 -70
- package/dist/tables/types.js +1 -17
- package/dist/temporal/instant.js +72 -81
- package/dist/temporal/now.js +40 -31
- package/dist/temporal/slots.js +42 -36
- package/dist/temporal/system.js +36 -36
- package/dist/temporal/temporal.js +11 -41
- package/dist/themes/context.js +131 -69
- package/dist/themes/resolve.js +207 -132
- package/dist/themes/themes.js +225 -194
- package/dist/themes/types.js +1 -17
- package/dist/url/parse.js +48 -51
- package/dist/url/predicates.js +24 -31
- package/dist/url/search-params.js +133 -101
- package/dist/url/types.js +1 -17
- package/dist/versions/_internal.js +31 -33
- package/dist/versions/compare.js +80 -58
- package/dist/versions/modify.js +41 -39
- package/dist/versions/parse.js +88 -64
- package/dist/versions/range.js +58 -41
- package/dist/versions/types.js +1 -17
- package/dist/words/article.js +22 -30
- package/dist/words/capitalize.js +25 -34
- package/dist/words/pluralize.js +23 -31
- package/dist/words/types.js +1 -17
- package/package.json +17 -5
package/dist/schema/parse.js
CHANGED
|
@@ -1,39 +1,38 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/* Socket Lib - Built with
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
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_schema_validate = require('./validate.js');
|
|
6
|
+
|
|
7
|
+
//#region src/schema/parse.ts
|
|
8
|
+
/**
|
|
9
|
+
* @file Throwing twin of `validateSchema`. Use `parseSchema(schema, data)` for
|
|
10
|
+
* fail-fast trust boundaries (app startup, config files, internal
|
|
11
|
+
* assertions). Use the non-throwing `validateSchema` for recoverable input
|
|
12
|
+
* (form fields, API request bodies, anywhere errors need to surface to a
|
|
13
|
+
* user).
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ;```ts
|
|
17
|
+
* import { z } from 'zod'
|
|
18
|
+
* import { parseSchema } from '@socketsecurity/lib/schema/parse'
|
|
19
|
+
*
|
|
20
|
+
* const Config = z.object({ host: z.string(), port: z.number() })
|
|
21
|
+
* const config = parseSchema(Config, json) // throws on invalid
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
/**
|
|
25
|
+
* Parse `data` against `schema` and return the validated value.
|
|
26
|
+
*
|
|
27
|
+
* @throws {Error} When validation fails. The message lists all issues as `path:
|
|
28
|
+
* message, path: message, ...`. Use `validateSchema` if you need structured
|
|
29
|
+
* access to the error list.
|
|
30
|
+
*/
|
|
28
31
|
function parseSchema(schema, data) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
const summary = result.errors.map((e) => `${e.path.join(".") || "(root)"}: ${e.message}`).join(", ");
|
|
34
|
-
throw new import_error.ErrorCtor(`Validation failed: ${summary}`);
|
|
32
|
+
const result = require_schema_validate.validateSchema(schema, data);
|
|
33
|
+
if (result.ok) return result.value;
|
|
34
|
+
throw new require_primordials_error.ErrorCtor(`Validation failed: ${result.errors.map((e) => `${e.path.join(".") || "(root)"}: ${e.message}`).join(", ")}`);
|
|
35
35
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
});
|
|
36
|
+
|
|
37
|
+
//#endregion
|
|
38
|
+
exports.parseSchema = parseSchema;
|
package/dist/schema/types.js
CHANGED
|
@@ -1,18 +1,2 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/* Socket Lib - Built with
|
|
3
|
-
"use strict";
|
|
4
|
-
var __defProp = Object.defineProperty;
|
|
5
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __copyProps = (to, from, except, desc) => {
|
|
9
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
10
|
-
for (let key of __getOwnPropNames(from))
|
|
11
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
12
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
13
|
-
}
|
|
14
|
-
return to;
|
|
15
|
-
};
|
|
16
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
17
|
-
var types_exports = {};
|
|
18
|
-
module.exports = __toCommonJS(types_exports);
|
|
2
|
+
/* Socket Lib - Built with rolldown */
|
package/dist/schema/validate.js
CHANGED
|
@@ -1,108 +1,127 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/* Socket Lib - Built with
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
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_primordials_number = require('../primordials/number.js');
|
|
6
|
+
const require_primordials_array = require('../primordials/array.js');
|
|
7
|
+
const require_primordials_object = require('../primordials/object.js');
|
|
8
|
+
|
|
9
|
+
//#region src/schema/validate.ts
|
|
10
|
+
/**
|
|
11
|
+
* @file Universal schema validator — non-throwing. Accepts any Zod-shaped
|
|
12
|
+
* schema (`.safeParse`-exposing) and returns a tagged result `{ ok: true,
|
|
13
|
+
* value } | { ok: false, errors }` with normalized `{ path, message }`
|
|
14
|
+
* issues. No runtime dependency on `zod` — detection is purely structural.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ;```ts
|
|
18
|
+
* import { z } from 'zod'
|
|
19
|
+
* import { validateSchema } from '@socketsecurity/lib/schema/validate'
|
|
20
|
+
*
|
|
21
|
+
* const User = z.object({ name: z.string() })
|
|
22
|
+
* const r = validateSchema(User, data)
|
|
23
|
+
* if (r.ok)
|
|
24
|
+
* r.value.name // string
|
|
25
|
+
* else r.errors // ValidationIssue[]
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @internal
|
|
29
|
+
* socket-lib additionally recognizes TypeBox schemas for its own internal
|
|
30
|
+
* use (e.g. `src/ipc.ts`'s stub-file validation). That path is not a
|
|
31
|
+
* supported consumer API.
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* Detect a TypeBox schema structurally: object with a symbol key whose
|
|
35
|
+
* description is `'TypeBox.Kind'`, holding a string value.
|
|
36
|
+
*
|
|
37
|
+
* @internal
|
|
38
|
+
*/
|
|
33
39
|
function isTypeBoxSchema(schema) {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
for (const sym of (0, import_object.ObjectGetOwnPropertySymbols)(schema)) {
|
|
38
|
-
if (sym.description === "TypeBox.Kind") {
|
|
39
|
-
return typeof schema[sym] === "string";
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
return false;
|
|
40
|
+
if (schema === null || typeof schema !== "object") return false;
|
|
41
|
+
for (const sym of require_primordials_object.ObjectGetOwnPropertySymbols(schema)) if (sym.description === "TypeBox.Kind") return typeof schema[sym] === "string";
|
|
42
|
+
return false;
|
|
43
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Normalize a TypeBox `ValueError` iterator into plain issues. TypeBox paths
|
|
46
|
+
* are JSON Pointers (`/user/0/name`); convert to arrays.
|
|
47
|
+
*
|
|
48
|
+
* @internal
|
|
49
|
+
*/
|
|
44
50
|
function normalizeTypeBoxErrors(errors) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
51
|
+
const out = [];
|
|
52
|
+
for (const err of errors) {
|
|
53
|
+
const segs = err.path.split("/").filter(Boolean);
|
|
54
|
+
out.push({
|
|
55
|
+
path: segs.map((s) => {
|
|
56
|
+
const n = Number(s);
|
|
57
|
+
return require_primordials_number.NumberIsInteger(n) && String(n) === s ? n : s;
|
|
58
|
+
}),
|
|
59
|
+
message: err.message
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return out;
|
|
57
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* Normalize a Zod error object (v3 or v4) into plain issues. Both versions
|
|
66
|
+
* expose `.issues: Array<{ path, message }>`.
|
|
67
|
+
*
|
|
68
|
+
* @internal
|
|
69
|
+
*/
|
|
58
70
|
function normalizeZodError(err) {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
if (err === null || typeof err !== "object") return [{
|
|
72
|
+
path: [],
|
|
73
|
+
message: String(err)
|
|
74
|
+
}];
|
|
75
|
+
const issues = err.issues;
|
|
76
|
+
if (!require_primordials_array.ArrayIsArray(issues)) return [{
|
|
77
|
+
path: [],
|
|
78
|
+
message: "Unknown validation error"
|
|
79
|
+
}];
|
|
80
|
+
return issues.map((issue) => {
|
|
81
|
+
const i = issue;
|
|
82
|
+
return {
|
|
83
|
+
path: require_primordials_array.ArrayIsArray(i.path) ? i.path : [],
|
|
84
|
+
message: typeof i.message === "string" ? i.message : "Invalid value"
|
|
85
|
+
};
|
|
86
|
+
});
|
|
73
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Validate `data` against a Zod-style `schema`. Non-throwing.
|
|
90
|
+
*
|
|
91
|
+
* The return type narrows `value` to `Infer<S>`, so callers get `z.infer<typeof
|
|
92
|
+
* S>` with no casts. Errors are normalized to `{ path, message }` regardless of
|
|
93
|
+
* the underlying validator.
|
|
94
|
+
*
|
|
95
|
+
* @throws {TypeError} When `schema` is not a recognized validator kind.
|
|
96
|
+
*/
|
|
74
97
|
function validateSchema(schema, data) {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
throw new import_error.TypeErrorCtor(
|
|
99
|
-
"validateSchema: unsupported schema kind. Expected a Zod schema or an object with a safeParse method."
|
|
100
|
-
);
|
|
98
|
+
if (isTypeBoxSchema(schema)) {
|
|
99
|
+
const { Value } = require("../external/@sinclair/typebox/value");
|
|
100
|
+
if (Value.Check(schema, data)) return {
|
|
101
|
+
ok: true,
|
|
102
|
+
value: data
|
|
103
|
+
};
|
|
104
|
+
return {
|
|
105
|
+
ok: false,
|
|
106
|
+
errors: normalizeTypeBoxErrors(Value.Errors(schema, data))
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
if (schema !== null && typeof schema === "object" && typeof schema.safeParse === "function") {
|
|
110
|
+
const result = schema.safeParse(data);
|
|
111
|
+
if (result.success === true) return {
|
|
112
|
+
ok: true,
|
|
113
|
+
value: result.data
|
|
114
|
+
};
|
|
115
|
+
return {
|
|
116
|
+
ok: false,
|
|
117
|
+
errors: normalizeZodError(result.error)
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
throw new require_primordials_error.TypeErrorCtor("validateSchema: unsupported schema kind. Expected a Zod schema or an object with a safeParse method.");
|
|
101
121
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
});
|
|
122
|
+
|
|
123
|
+
//#endregion
|
|
124
|
+
exports.isTypeBoxSchema = isTypeBoxSchema;
|
|
125
|
+
exports.normalizeTypeBoxErrors = normalizeTypeBoxErrors;
|
|
126
|
+
exports.normalizeZodError = normalizeZodError;
|
|
127
|
+
exports.validateSchema = validateSchema;
|
package/dist/sea/detect.js
CHANGED
|
@@ -1,58 +1,63 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/* Socket Lib - Built with
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
27
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
28
|
-
mod
|
|
29
|
-
));
|
|
30
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
31
|
-
var detect_exports = {};
|
|
32
|
-
__export(detect_exports, {
|
|
33
|
-
getSeaBinaryPath: () => getSeaBinaryPath,
|
|
34
|
-
isSeaBinary: () => isSeaBinary
|
|
35
|
-
});
|
|
36
|
-
module.exports = __toCommonJS(detect_exports);
|
|
37
|
-
var import_node_process = __toESM(require("node:process"));
|
|
38
|
-
var import_normalize = require("../paths/normalize");
|
|
2
|
+
/* Socket Lib - Built with rolldown */
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
const require_runtime = require('../_virtual/_rolldown/runtime.js');
|
|
5
|
+
const require_paths_normalize = require('../paths/normalize.js');
|
|
6
|
+
let node_process = require("node:process");
|
|
7
|
+
node_process = require_runtime.__toESM(node_process);
|
|
8
|
+
|
|
9
|
+
//#region src/sea/detect.ts
|
|
10
|
+
/**
|
|
11
|
+
* @file SEA (Single Executable Application) binary detection + path accessor.
|
|
12
|
+
* Two responsibilities (mirror of `src/smol/detect.ts` shape):
|
|
13
|
+
*
|
|
14
|
+
* 1. `isSeaBinary()` — memoized boolean detector for whether the current process
|
|
15
|
+
* is running as a Node.js Single Executable Application. Probes via Node
|
|
16
|
+
* 24+'s `node:sea.isSea()` native API; falls back to `false` on older
|
|
17
|
+
* runtimes.
|
|
18
|
+
* 2. `getSeaBinaryPath()` — returns the path of the SEA binary
|
|
19
|
+
* (`process.argv[0]` normalized) when running as SEA, otherwise
|
|
20
|
+
* `undefined`. Defensive across runtimes: returns `false` / `undefined`
|
|
21
|
+
* cleanly on stock Node < 24, browsers, Deno, Bun.
|
|
22
|
+
*/
|
|
23
|
+
/**
|
|
24
|
+
* Cached SEA detection result.
|
|
25
|
+
*/
|
|
39
26
|
let _isSea;
|
|
27
|
+
/**
|
|
28
|
+
* Get the current SEA binary path. Only valid when running as a SEA binary.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* const binPath = getSeaBinaryPath()
|
|
33
|
+
* if (binPath) {
|
|
34
|
+
* console.log(`Running as SEA binary: ${binPath}`)
|
|
35
|
+
* }
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
40
38
|
function getSeaBinaryPath() {
|
|
41
|
-
|
|
39
|
+
return isSeaBinary() && node_process.default.argv[0] ? /* @__PURE__ */ require_paths_normalize.normalizePath(node_process.default.argv[0]) : void 0;
|
|
42
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Detect if the current process is running as a SEA binary. Uses Node.js 24+
|
|
43
|
+
* native API with caching for performance.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ;```typescript
|
|
47
|
+
* if (isSeaBinary()) {
|
|
48
|
+
* console.log('Running as a Single Executable Application')
|
|
49
|
+
* }
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
43
52
|
function isSeaBinary() {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
return _isSea ?? false;
|
|
53
|
+
if (_isSea === void 0) try {
|
|
54
|
+
_isSea = require("node:sea").isSea();
|
|
55
|
+
} catch {
|
|
56
|
+
_isSea = false;
|
|
57
|
+
}
|
|
58
|
+
return _isSea ?? false;
|
|
53
59
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
});
|
|
60
|
+
|
|
61
|
+
//#endregion
|
|
62
|
+
exports.getSeaBinaryPath = getSeaBinaryPath;
|
|
63
|
+
exports.isSeaBinary = isSeaBinary;
|
|
@@ -1,84 +1,103 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/* Socket Lib - Built with
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
2
|
+
/* Socket Lib - Built with rolldown */
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
//#region src/secrets/_internal.ts
|
|
6
|
+
/**
|
|
7
|
+
* @file Private internals for `secrets/` — process-scoped read cache for the
|
|
8
|
+
* keychain backend. Underscore-prefixed and skipped by the export generator
|
|
9
|
+
* (`dist/**\/_*` ignore pattern in
|
|
10
|
+
* `scripts/fix/generate-package-exports.mts`) so this module is NOT part of
|
|
11
|
+
* the public API surface. Imported by `./keychain.ts`. Every `readSecret`
|
|
12
|
+
* call shells out to the OS credential CLI (`security`, `secret-tool`,
|
|
13
|
+
* PowerShell). On macOS, the first read of a given entry by a new binary path
|
|
14
|
+
* triggers a Keychain auth prompt unless the entry was written with `-A -T
|
|
15
|
+
* ''` (which we now do — see `./macos.ts`). Even so, every read is a process
|
|
16
|
+
* spawn, which costs a few ms per call. For tools that read the same secret
|
|
17
|
+
* multiple times within one process (CLI commands handling multiple
|
|
18
|
+
* subcommands, MCP request handlers serving sibling endpoints), a
|
|
19
|
+
* process-scoped cache eliminates the redundant work. Lifetime: a single Node
|
|
20
|
+
* process. The cache lives in module-level state; importing this module from
|
|
21
|
+
* a child process gets a fresh cache. No persistence to disk — for that, see
|
|
22
|
+
* `./rc.ts` which materializes a one-time `export` block into the shell rc.
|
|
23
|
+
* Invalidation: callers MUST invalidate the cache when they write/delete the
|
|
24
|
+
* same `{service, account}` pair. The public keychain.ts wraps writeSecret /
|
|
25
|
+
* deleteSecret so cache eviction happens automatically. Concurrency:
|
|
26
|
+
* in-flight reads of the same key share a single Promise so two `await
|
|
27
|
+
* readSecret(...)` calls don't spawn two `security` processes for the same
|
|
28
|
+
* entry. Once the Promise resolves, the value is cached. If the read returns
|
|
29
|
+
* undefined (entry missing), `undefined` is cached too — callers that want a
|
|
30
|
+
* re-check after creating the entry must call `invalidate`.
|
|
31
|
+
*/
|
|
32
32
|
const valueCache = /* @__PURE__ */ new Map();
|
|
33
33
|
const inflight = /* @__PURE__ */ new Map();
|
|
34
34
|
function cacheKey(service, account) {
|
|
35
|
-
|
|
35
|
+
return `${service} ${account}`;
|
|
36
36
|
}
|
|
37
|
+
/**
|
|
38
|
+
* Coordinate concurrent reads of the same key. The first caller registers a
|
|
39
|
+
* Promise; subsequent callers receive the same Promise instead of spawning
|
|
40
|
+
* another OS call. On settle, the Promise's inflight slot is dropped and the
|
|
41
|
+
* value is cached.
|
|
42
|
+
*/
|
|
37
43
|
async function dedupeRead(service, account, reader) {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
})();
|
|
55
|
-
inflight.set(key, promise);
|
|
56
|
-
return promise;
|
|
44
|
+
const key = cacheKey(service, account);
|
|
45
|
+
if (valueCache.has(key)) return valueCache.get(key);
|
|
46
|
+
const existing = inflight.get(key);
|
|
47
|
+
if (existing) return existing;
|
|
48
|
+
const promise = (async () => {
|
|
49
|
+
try {
|
|
50
|
+
const value = await reader();
|
|
51
|
+
valueCache.set(key, value);
|
|
52
|
+
return value;
|
|
53
|
+
} finally {
|
|
54
|
+
inflight.delete(key);
|
|
55
|
+
}
|
|
56
|
+
})();
|
|
57
|
+
inflight.set(key, promise);
|
|
58
|
+
return promise;
|
|
57
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* Look up a cached value. Returns `undefined` for both "cached as absent" and
|
|
62
|
+
* "not yet cached" — callers that need to distinguish those cases should use
|
|
63
|
+
* `has` first.
|
|
64
|
+
*/
|
|
58
65
|
function getCached(service, account) {
|
|
59
|
-
|
|
66
|
+
return valueCache.get(cacheKey(service, account));
|
|
60
67
|
}
|
|
61
68
|
function has(service, account) {
|
|
62
|
-
|
|
69
|
+
return valueCache.has(cacheKey(service, account));
|
|
63
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* Drop a cached value. Called by `writeSecret` / `deleteSecret` after the
|
|
73
|
+
* underlying OS state changes so a subsequent `readSecret` reflects the new
|
|
74
|
+
* reality. Also called by `invalidateAll()` for service-wide refreshes.
|
|
75
|
+
*/
|
|
64
76
|
function invalidate(service, account) {
|
|
65
|
-
|
|
66
|
-
|
|
77
|
+
valueCache.delete(cacheKey(service, account));
|
|
78
|
+
inflight.delete(cacheKey(service, account));
|
|
67
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* Wipe the entire cache. Tests use this between cases; consumers generally
|
|
82
|
+
* don't need it (process exit drops the cache anyway).
|
|
83
|
+
*/
|
|
68
84
|
function invalidateAll() {
|
|
69
|
-
|
|
70
|
-
|
|
85
|
+
valueCache.clear();
|
|
86
|
+
inflight.clear();
|
|
71
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Store a value (or `undefined` to record an absent entry) so later reads of
|
|
90
|
+
* the same key short-circuit the OS call.
|
|
91
|
+
*/
|
|
72
92
|
function setCached(service, account, value) {
|
|
73
|
-
|
|
93
|
+
valueCache.set(cacheKey(service, account), value);
|
|
74
94
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
});
|
|
95
|
+
|
|
96
|
+
//#endregion
|
|
97
|
+
exports.cacheKey = cacheKey;
|
|
98
|
+
exports.dedupeRead = dedupeRead;
|
|
99
|
+
exports.getCached = getCached;
|
|
100
|
+
exports.has = has;
|
|
101
|
+
exports.invalidate = invalidate;
|
|
102
|
+
exports.invalidateAll = invalidateAll;
|
|
103
|
+
exports.setCached = setCached;
|