@socketsecurity/lib 6.0.6 → 6.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (619) hide show
  1. package/CHANGELOG.md +46 -1
  2. package/README.md +1 -1
  3. package/dist/ai/agent-context.d.mts +103 -0
  4. package/dist/ai/agent-context.js +157 -0
  5. package/dist/ai/backends.d.mts +83 -0
  6. package/dist/ai/backends.js +173 -0
  7. package/dist/ai/credentials.d.mts +49 -0
  8. package/dist/ai/credentials.js +82 -0
  9. package/dist/ai/discover.d.mts +6 -2
  10. package/dist/ai/discover.js +4 -3
  11. package/dist/ai/exec.d.mts +52 -0
  12. package/dist/ai/exec.js +92 -0
  13. package/dist/ai/http.d.mts +132 -0
  14. package/dist/ai/http.js +130 -0
  15. package/dist/ai/profiles.d.mts +41 -6
  16. package/dist/ai/profiles.js +52 -10
  17. package/dist/ai/route.d.mts +69 -0
  18. package/dist/ai/route.js +156 -0
  19. package/dist/ai/spawn.d.mts +10 -2
  20. package/dist/ai/spawn.js +56 -31
  21. package/dist/ai/subagent-status.d.mts +48 -0
  22. package/dist/ai/subagent-status.js +57 -0
  23. package/dist/ai/tier.d.mts +60 -0
  24. package/dist/ai/tier.js +53 -0
  25. package/dist/ai/types.d.mts +31 -6
  26. package/dist/ai/worktree.d.mts +6 -6
  27. package/dist/ai/worktree.js +5 -1
  28. package/dist/ansi/strip.d.ts +1 -1
  29. package/dist/ansi/strip.js +0 -2
  30. package/dist/archives/_internal.js +7 -9
  31. package/dist/archives/extract.js +1 -1
  32. package/dist/archives/tar.js +7 -7
  33. package/dist/archives/zip.js +5 -7
  34. package/dist/argv/flag-predicates.d.ts +12 -12
  35. package/dist/argv/flag-predicates.js +17 -17
  36. package/dist/argv/flag-types.d.ts +18 -18
  37. package/dist/argv/flag-types.js +4 -4
  38. package/dist/argv/parse.d.ts +20 -3
  39. package/dist/argv/parse.js +1 -1
  40. package/dist/arrays/_internal.js +11 -12
  41. package/dist/arrays/chunk.js +0 -1
  42. package/dist/arrays/join.d.ts +37 -3
  43. package/dist/arrays/join.js +47 -7
  44. package/dist/arrays/unique.js +0 -1
  45. package/dist/bin/_internal.d.ts +1 -1
  46. package/dist/bin/_internal.js +1 -1
  47. package/dist/bin/exec.js +2 -3
  48. package/dist/bin/find.js +17 -17
  49. package/dist/bin/prim.cjs +36175 -35861
  50. package/dist/bin/resolve.js +13 -14
  51. package/dist/bin/which.js +8 -8
  52. package/dist/cache/ttl/store.js +6 -6
  53. package/dist/checks/primordials-defaults.d.ts +3 -3
  54. package/dist/checks/primordials-defaults.js +3 -3
  55. package/dist/checks/primordials.js +4 -3
  56. package/dist/{bin → cli}/check-primordials.d.ts +18 -13
  57. package/dist/{bin → cli}/check-primordials.js +58 -55
  58. package/dist/{bin → cli}/check.js +3 -3
  59. package/dist/{bin → cli}/socket-lib.d.ts +1 -1
  60. package/dist/{bin → cli}/socket-lib.js +4 -4
  61. package/dist/colors/socket-palette.js +7 -9
  62. package/dist/compression/_internal.d.ts +12 -12
  63. package/dist/compression/_internal.js +18 -18
  64. package/dist/compression/brotli.d.ts +26 -27
  65. package/dist/compression/brotli.js +39 -35
  66. package/dist/compression/gzip.d.ts +23 -23
  67. package/dist/compression/gzip.js +46 -42
  68. package/dist/constants/agents.d.ts +3 -1
  69. package/dist/constants/agents.js +15 -11
  70. package/dist/constants/licenses.js +3 -3
  71. package/dist/constants/node.d.ts +23 -0
  72. package/dist/constants/node.js +47 -15
  73. package/dist/constants/packages.d.ts +3 -0
  74. package/dist/constants/packages.js +24 -29
  75. package/dist/constants/platform.d.ts +30 -3
  76. package/dist/constants/platform.js +72 -12
  77. package/dist/constants/runtime.d.ts +22 -0
  78. package/dist/constants/runtime.js +32 -0
  79. package/dist/constants/socket.d.ts +2 -6
  80. package/dist/constants/socket.js +12 -14
  81. package/dist/cover/code.js +10 -10
  82. package/dist/cover/formatters.js +5 -5
  83. package/dist/crypto/hash.d.ts +30 -2
  84. package/dist/crypto/hash.js +47 -13
  85. package/dist/debug/_internal.js +4 -6
  86. package/dist/debug/caller-info.js +3 -4
  87. package/dist/debug/namespace.d.ts +7 -0
  88. package/dist/debug/namespace.js +21 -12
  89. package/dist/debug/output.js +21 -24
  90. package/dist/debug/types.d.ts +4 -4
  91. package/dist/dlx/arborist.js +18 -8
  92. package/dist/dlx/binary-cache.js +15 -15
  93. package/dist/dlx/binary-download.d.ts +1 -1
  94. package/dist/dlx/binary-download.js +11 -11
  95. package/dist/dlx/binary-resolution.js +17 -15
  96. package/dist/dlx/binary-types.d.ts +5 -5
  97. package/dist/dlx/binary.js +5 -5
  98. package/dist/dlx/cache.js +1 -1
  99. package/dist/dlx/detect.d.ts +42 -25
  100. package/dist/dlx/detect.js +86 -77
  101. package/dist/dlx/dir.js +2 -2
  102. package/dist/dlx/firewall.d.ts +9 -1
  103. package/dist/dlx/firewall.js +1 -1
  104. package/dist/dlx/lockfile.d.ts +19 -18
  105. package/dist/dlx/lockfile.js +19 -16
  106. package/dist/dlx/manifest.d.ts +6 -6
  107. package/dist/dlx/manifest.js +5 -5
  108. package/dist/dlx/package.d.ts +10 -10
  109. package/dist/dlx/package.js +20 -16
  110. package/dist/dlx/packages.js +4 -4
  111. package/dist/dlx/paths.js +7 -7
  112. package/dist/dlx/spec.js +1 -1
  113. package/dist/dlx/types.d.ts +28 -27
  114. package/dist/eco/cargo/parse-lockfile.d.ts +2 -3
  115. package/dist/eco/cargo/parse-lockfile.js +5 -5
  116. package/dist/eco/manifest/analyze-lockfile.js +2 -2
  117. package/dist/eco/manifest/detect-format.js +5 -5
  118. package/dist/eco/manifest/find-packages.js +2 -2
  119. package/dist/eco/manifest/get-package-versions.js +2 -2
  120. package/dist/eco/manifest/get-package.js +2 -2
  121. package/dist/eco/manifest/parse-lockfile.js +2 -2
  122. package/dist/eco/manifest/parse-manifest.js +2 -2
  123. package/dist/eco/manifest/parse.js +2 -2
  124. package/dist/eco/npm/npm/exec.js +2 -2
  125. package/dist/eco/npm/npm/flags.js +7 -12
  126. package/dist/eco/npm/npm/parse-lockfile.d.ts +17 -18
  127. package/dist/eco/npm/npm/parse-lockfile.js +4 -4
  128. package/dist/eco/npm/parse-package-json.d.ts +11 -0
  129. package/dist/eco/npm/parse-package-json.js +3 -3
  130. package/dist/eco/npm/pnpm/exec.d.ts +1 -1
  131. package/dist/eco/npm/pnpm/exec.js +5 -5
  132. package/dist/eco/npm/pnpm/flags.js +0 -3
  133. package/dist/eco/npm/pnpm/parse-lockfile.d.ts +6 -4
  134. package/dist/eco/npm/pnpm/parse-lockfile.js +7 -7
  135. package/dist/eco/npm/script.js +9 -6
  136. package/dist/eco/npm/yarnpkg/yarn/exec.js +4 -4
  137. package/dist/eco/npm/yarnpkg/yarn/parse-lockfile.d.ts +3 -4
  138. package/dist/eco/npm/yarnpkg/yarn/parse-lockfile.js +9 -9
  139. package/dist/effects/pulse-frames.d.ts +3 -1
  140. package/dist/effects/shimmer-keyframes.d.ts +1 -1
  141. package/dist/effects/shimmer-terminal.d.ts +1 -1
  142. package/dist/env/boolean.js +0 -1
  143. package/dist/env/ci.js +0 -1
  144. package/dist/env/debug.js +0 -1
  145. package/dist/env/github-status.d.ts +51 -0
  146. package/dist/env/github-status.js +90 -0
  147. package/dist/env/github.js +0 -8
  148. package/dist/env/home.js +0 -1
  149. package/dist/env/locale.js +0 -3
  150. package/dist/env/node-auth-token.js +0 -1
  151. package/dist/env/node-env.js +0 -1
  152. package/dist/env/node-version-managers.d.ts +53 -0
  153. package/dist/env/node-version-managers.js +90 -0
  154. package/dist/env/npm.js +0 -5
  155. package/dist/env/number.js +0 -1
  156. package/dist/env/package-manager.js +3 -6
  157. package/dist/env/path.js +0 -1
  158. package/dist/env/pre-commit.js +1 -2
  159. package/dist/env/proxy.js +1 -1
  160. package/dist/env/rewire.d.ts +8 -6
  161. package/dist/env/rewire.js +16 -17
  162. package/dist/env/shell.js +0 -1
  163. package/dist/env/socket-cli.js +5 -18
  164. package/dist/env/socket-mcp.d.ts +114 -0
  165. package/dist/env/socket-mcp.js +146 -0
  166. package/dist/env/socket.d.ts +8 -109
  167. package/dist/env/socket.js +22 -167
  168. package/dist/env/string.js +0 -1
  169. package/dist/env/temp-dir.js +0 -3
  170. package/dist/env/term.js +0 -1
  171. package/dist/env/test.js +3 -6
  172. package/dist/env/windows.js +0 -4
  173. package/dist/env/xdg.js +0 -3
  174. package/dist/errors/predicates.js +1 -1
  175. package/dist/events/exit/_internal.d.ts +11 -9
  176. package/dist/events/exit/_internal.js +31 -35
  177. package/dist/events/exit/handler.js +3 -4
  178. package/dist/events/exit/intercept.js +4 -6
  179. package/dist/events/exit/lifecycle.js +16 -18
  180. package/dist/events/exit/signals.js +1 -2
  181. package/dist/events/exit/types.d.ts +6 -5
  182. package/dist/external/@npmcli/package-json.js +2 -2
  183. package/dist/external/@npmcli/promise-spawn.js +3 -1
  184. package/dist/external/npm-pack.js +2 -2
  185. package/dist/external/pico-pack.js +4 -2
  186. package/dist/external/which.js +3 -1
  187. package/dist/external-tools/bazel/asset-names.d.ts +1 -1
  188. package/dist/external-tools/bazel/asset-names.js +5 -2
  189. package/dist/external-tools/bazel/from-download.d.ts +1 -1
  190. package/dist/external-tools/bazel/from-download.js +5 -2
  191. package/dist/external-tools/bazel/read-bazel-version-file.js +1 -1
  192. package/dist/external-tools/bazel/resolve-bazel-version.js +4 -0
  193. package/dist/external-tools/bazel/resolve.d.ts +3 -3
  194. package/dist/external-tools/bazel/resolve.js +16 -8
  195. package/dist/external-tools/bazel/types.d.ts +1 -1
  196. package/dist/external-tools/cdxgen/asset-names.d.ts +1 -1
  197. package/dist/external-tools/cdxgen/asset-names.js +5 -2
  198. package/dist/external-tools/cdxgen/from-download.d.ts +1 -1
  199. package/dist/external-tools/cdxgen/from-download.js +7 -4
  200. package/dist/external-tools/cdxgen/from-vfs.js +1 -1
  201. package/dist/external-tools/cdxgen/resolve.d.ts +3 -3
  202. package/dist/external-tools/cdxgen/resolve.js +16 -8
  203. package/dist/external-tools/cdxgen/types.d.ts +1 -1
  204. package/dist/external-tools/from-download.d.ts +3 -3
  205. package/dist/external-tools/from-download.js +12 -6
  206. package/dist/external-tools/from-pip-venv.d.ts +1 -1
  207. package/dist/external-tools/from-pip-venv.js +12 -5
  208. package/dist/external-tools/janus/asset-names.d.ts +1 -1
  209. package/dist/external-tools/janus/asset-names.js +5 -2
  210. package/dist/external-tools/janus/from-download.d.ts +1 -1
  211. package/dist/external-tools/janus/from-download.js +5 -2
  212. package/dist/external-tools/janus/from-vfs.js +1 -1
  213. package/dist/external-tools/janus/resolve.d.ts +3 -3
  214. package/dist/external-tools/janus/resolve.js +16 -8
  215. package/dist/external-tools/janus/types.d.ts +1 -1
  216. package/dist/external-tools/jre/asset-names.d.ts +1 -1
  217. package/dist/external-tools/jre/asset-names.js +5 -2
  218. package/dist/external-tools/jre/detect-platform-arch.d.ts +10 -6
  219. package/dist/external-tools/jre/detect-platform-arch.js +29 -14
  220. package/dist/external-tools/jre/from-download.d.ts +1 -1
  221. package/dist/external-tools/jre/from-download.js +7 -4
  222. package/dist/external-tools/jre/from-java-home.js +2 -2
  223. package/dist/external-tools/jre/from-vfs.js +3 -3
  224. package/dist/external-tools/jre/resolve.d.ts +3 -3
  225. package/dist/external-tools/jre/resolve.js +16 -8
  226. package/dist/external-tools/jre/types.d.ts +1 -1
  227. package/dist/external-tools/manifest.d.ts +25 -7
  228. package/dist/external-tools/manifest.js +13 -13
  229. package/dist/external-tools/opengrep/asset-names.d.ts +1 -1
  230. package/dist/external-tools/opengrep/asset-names.js +5 -2
  231. package/dist/external-tools/opengrep/from-download.d.ts +1 -1
  232. package/dist/external-tools/opengrep/from-download.js +5 -2
  233. package/dist/external-tools/opengrep/from-vfs.js +1 -1
  234. package/dist/external-tools/opengrep/resolve.d.ts +3 -3
  235. package/dist/external-tools/opengrep/resolve.js +16 -8
  236. package/dist/external-tools/opengrep/types.d.ts +1 -1
  237. package/dist/external-tools/python/asset-names.d.ts +76 -0
  238. package/dist/external-tools/python/asset-names.js +111 -0
  239. package/dist/external-tools/python/dlx.d.ts +80 -0
  240. package/dist/external-tools/python/dlx.js +98 -0
  241. package/dist/external-tools/python/from-download.d.ts +53 -0
  242. package/dist/external-tools/python/from-download.js +75 -0
  243. package/dist/external-tools/python/from-path.d.ts +7 -0
  244. package/dist/external-tools/python/from-path.js +23 -0
  245. package/dist/external-tools/python/pin.d.ts +121 -0
  246. package/dist/external-tools/python/pin.js +176 -0
  247. package/dist/external-tools/python/pip-install.d.ts +75 -0
  248. package/dist/external-tools/python/pip-install.js +142 -0
  249. package/dist/external-tools/python/resolve.d.ts +42 -0
  250. package/dist/external-tools/python/resolve.js +66 -0
  251. package/dist/external-tools/python/types.d.ts +49 -0
  252. package/dist/external-tools/sbt/asset-names.d.ts +1 -1
  253. package/dist/external-tools/sbt/asset-names.js +5 -2
  254. package/dist/external-tools/sbt/from-download.d.ts +1 -1
  255. package/dist/external-tools/sbt/from-download.js +5 -2
  256. package/dist/external-tools/sbt/from-vfs.js +1 -1
  257. package/dist/external-tools/sbt/resolve.d.ts +3 -3
  258. package/dist/external-tools/sbt/resolve.js +16 -8
  259. package/dist/external-tools/sbt/types.d.ts +1 -1
  260. package/dist/external-tools/skillspector/from-dlx.d.ts +1 -1
  261. package/dist/external-tools/skillspector/from-dlx.js +10 -3
  262. package/dist/external-tools/skillspector/from-path.js +3 -5
  263. package/dist/external-tools/skillspector/from-vfs.js +1 -1
  264. package/dist/external-tools/skillspector/resolve.d.ts +2 -2
  265. package/dist/external-tools/skillspector/resolve.js +14 -6
  266. package/dist/external-tools/synp/asset-names.d.ts +1 -1
  267. package/dist/external-tools/synp/asset-names.js +6 -2
  268. package/dist/external-tools/synp/from-download.d.ts +1 -1
  269. package/dist/external-tools/synp/from-download.js +7 -4
  270. package/dist/external-tools/synp/from-vfs.js +1 -1
  271. package/dist/external-tools/synp/resolve.d.ts +3 -3
  272. package/dist/external-tools/synp/resolve.js +16 -8
  273. package/dist/external-tools/trivy/asset-names.d.ts +1 -1
  274. package/dist/external-tools/trivy/asset-names.js +5 -2
  275. package/dist/external-tools/trivy/from-download.d.ts +1 -1
  276. package/dist/external-tools/trivy/from-download.js +7 -4
  277. package/dist/external-tools/trivy/from-vfs.js +1 -1
  278. package/dist/external-tools/trivy/resolve.d.ts +3 -3
  279. package/dist/external-tools/trivy/resolve.js +16 -8
  280. package/dist/external-tools/trivy/types.d.ts +1 -1
  281. package/dist/external-tools/trufflehog/asset-names.d.ts +1 -1
  282. package/dist/external-tools/trufflehog/asset-names.js +5 -2
  283. package/dist/external-tools/trufflehog/from-download.d.ts +1 -1
  284. package/dist/external-tools/trufflehog/from-download.js +7 -4
  285. package/dist/external-tools/trufflehog/from-vfs.js +1 -1
  286. package/dist/external-tools/trufflehog/resolve.d.ts +3 -3
  287. package/dist/external-tools/trufflehog/resolve.js +16 -8
  288. package/dist/external-tools/trufflehog/types.d.ts +1 -1
  289. package/dist/fs/_internal.d.ts +1 -1
  290. package/dist/fs/_internal.js +7 -7
  291. package/dist/fs/access.js +5 -9
  292. package/dist/fs/allowed-dirs-cache.d.ts +47 -0
  293. package/dist/fs/allowed-dirs-cache.js +69 -0
  294. package/dist/fs/encoding.js +5 -7
  295. package/dist/fs/{find-up.js → find.js} +12 -14
  296. package/dist/fs/inspect.js +7 -13
  297. package/dist/fs/read-dir.js +7 -10
  298. package/dist/fs/read-file.js +8 -14
  299. package/dist/fs/read-json-cache.d.ts +13 -4
  300. package/dist/fs/read-json-cache.js +9 -6
  301. package/dist/fs/read-json.js +4 -6
  302. package/dist/fs/resolve-module.js +7 -3
  303. package/dist/fs/safe.d.ts +1 -1
  304. package/dist/fs/safe.js +13 -14
  305. package/dist/fs/unique.js +4 -5
  306. package/dist/fs/validate.js +1 -2
  307. package/dist/fs/write-json.js +4 -5
  308. package/dist/git/_internal.js +11 -11
  309. package/dist/git/changed.js +4 -4
  310. package/dist/git/repo.js +5 -7
  311. package/dist/git/staged.js +12 -4
  312. package/dist/git/tracked.d.ts +84 -0
  313. package/dist/git/tracked.js +163 -0
  314. package/dist/git/unstaged.js +12 -4
  315. package/dist/github/ghsa.js +2 -2
  316. package/dist/github/refs-cache.d.ts +1 -1
  317. package/dist/github/refs-cache.js +5 -5
  318. package/dist/github/refs-graphql.js +4 -0
  319. package/dist/github/refs-rest.js +9 -5
  320. package/dist/github/refs.js +15 -10
  321. package/dist/github/{fetch.js → request.js} +13 -2
  322. package/dist/github/token.js +1 -1
  323. package/dist/github/types.d.ts +1 -1
  324. package/dist/globs/_internal.js +8 -10
  325. package/dist/globs/match.js +13 -7
  326. package/dist/globs/matcher.d.ts +3 -3
  327. package/dist/globs/matcher.js +16 -14
  328. package/dist/globs/stream.js +1 -2
  329. package/dist/globs/types.d.ts +24 -24
  330. package/dist/http-request/_internal.d.ts +1 -1
  331. package/dist/http-request/browser.js +10 -4
  332. package/dist/http-request/checksum-file.d.ts +55 -0
  333. package/dist/http-request/checksum-file.js +95 -0
  334. package/dist/http-request/download-types.d.ts +15 -23
  335. package/dist/http-request/download.js +3 -3
  336. package/dist/http-request/{browser-fetch.d.ts → fetch/browser.d.ts} +2 -2
  337. package/dist/http-request/{browser-fetch.js → fetch/browser.js} +4 -4
  338. package/dist/http-request/headers.js +1 -2
  339. package/dist/http-request/request-attempt.js +38 -34
  340. package/dist/http-request/request-types.d.ts +2 -2
  341. package/dist/http-request/request.js +1 -1
  342. package/dist/http-request/user-agent.js +4 -5
  343. package/dist/integrity.d.ts +92 -18
  344. package/dist/integrity.js +125 -30
  345. package/dist/ipc/directory.js +2 -2
  346. package/dist/ipc/paths.js +1 -1
  347. package/dist/ipc/write.js +1 -1
  348. package/dist/ipc-cli/get.js +12 -12
  349. package/dist/json/edit.js +51 -44
  350. package/dist/json/format.js +1 -1
  351. package/dist/json/parse.d.ts +1 -1
  352. package/dist/json/parse.js +3 -7
  353. package/dist/logger/_internal.d.ts +4 -4
  354. package/dist/logger/_internal.js +3 -3
  355. package/dist/logger/colors.js +4 -3
  356. package/dist/logger/console-methods.d.ts +132 -0
  357. package/dist/logger/console-methods.js +169 -0
  358. package/dist/logger/console.d.ts +12 -0
  359. package/dist/logger/console.js +42 -11
  360. package/dist/logger/indentation-methods.d.ts +81 -0
  361. package/dist/logger/indentation-methods.js +121 -0
  362. package/dist/logger/node.d.ts +16 -338
  363. package/dist/logger/node.js +75 -608
  364. package/dist/logger/options.d.ts +39 -0
  365. package/dist/logger/options.js +47 -0
  366. package/dist/logger/semantic-methods.d.ts +63 -0
  367. package/dist/logger/semantic-methods.js +108 -0
  368. package/dist/logger/stream-methods.d.ts +63 -0
  369. package/dist/logger/stream-methods.js +101 -0
  370. package/dist/logger/stream.d.ts +37 -0
  371. package/dist/logger/stream.js +42 -0
  372. package/dist/logger/symbols-builder.js +9 -9
  373. package/dist/logger/symbols.d.ts +2 -25
  374. package/dist/logger/symbols.js +53 -74
  375. package/dist/logger/types.d.ts +1 -1
  376. package/dist/memo/types.d.ts +6 -6
  377. package/dist/native-messaging/host.d.ts +20 -0
  378. package/dist/native-messaging/host.js +120 -0
  379. package/dist/native-messaging/index.d.ts +5 -0
  380. package/dist/native-messaging/index.js +22 -0
  381. package/dist/native-messaging/install.d.ts +60 -0
  382. package/dist/native-messaging/install.js +144 -0
  383. package/dist/native-messaging/rate-limit.d.ts +69 -0
  384. package/dist/native-messaging/rate-limit.js +119 -0
  385. package/dist/native-messaging/run.d.ts +10 -0
  386. package/dist/native-messaging/run.js +17 -0
  387. package/dist/node/async-hooks.js +4 -3
  388. package/dist/node/child-process.js +4 -3
  389. package/dist/node/crypto.js +4 -3
  390. package/dist/node/events.js +4 -3
  391. package/dist/node/fs-promises.js +4 -3
  392. package/dist/node/fs.d.ts +22 -6
  393. package/dist/node/fs.js +17 -3
  394. package/dist/node/http.js +4 -3
  395. package/dist/node/https.js +4 -3
  396. package/dist/node/module.js +10 -6
  397. package/dist/node/os.d.ts +10 -2
  398. package/dist/node/os.js +12 -4
  399. package/dist/node/path.d.ts +11 -2
  400. package/dist/node/path.js +18 -4
  401. package/dist/node/timers-promises.js +4 -3
  402. package/dist/node/url.js +4 -3
  403. package/dist/node/util.js +4 -3
  404. package/dist/objects/getters.js +6 -8
  405. package/dist/objects/inspect.js +1 -4
  406. package/dist/objects/mutate.js +4 -5
  407. package/dist/objects/predicates.js +1 -5
  408. package/dist/objects/sort.js +3 -7
  409. package/dist/packages/edit-class.d.ts +2 -3
  410. package/dist/packages/edit-class.js +53 -48
  411. package/dist/packages/edit.js +12 -14
  412. package/dist/packages/exports.js +15 -21
  413. package/dist/packages/fetch.d.ts +16 -0
  414. package/dist/packages/fetch.js +81 -0
  415. package/dist/packages/find.d.ts +55 -0
  416. package/dist/packages/find.js +65 -0
  417. package/dist/packages/isolation.js +14 -14
  418. package/dist/packages/licenses.js +18 -18
  419. package/dist/packages/manifest.js +16 -19
  420. package/dist/packages/metadata-extensions.d.ts +14 -0
  421. package/dist/packages/metadata-extensions.js +43 -0
  422. package/dist/packages/normalize.js +6 -10
  423. package/dist/packages/provenance.js +17 -19
  424. package/dist/packages/read.d.ts +29 -0
  425. package/dist/packages/read.js +66 -0
  426. package/dist/packages/specs.d.ts +48 -1
  427. package/dist/packages/specs.js +75 -12
  428. package/dist/packages/tarball.d.ts +24 -0
  429. package/dist/packages/tarball.js +81 -0
  430. package/dist/packages/types.d.ts +22 -22
  431. package/dist/packages/validation.js +0 -3
  432. package/dist/paths/_internal.d.ts +2 -1
  433. package/dist/paths/_internal.js +7 -19
  434. package/dist/paths/conversion.js +5 -9
  435. package/dist/paths/dirnames.d.ts +1 -0
  436. package/dist/paths/dirnames.js +2 -0
  437. package/dist/paths/filenames.d.ts +0 -1
  438. package/dist/paths/filenames.js +0 -2
  439. package/dist/paths/normalize.js +4 -5
  440. package/dist/paths/packages.js +4 -7
  441. package/dist/paths/predicates.js +9 -16
  442. package/dist/paths/resolve.js +17 -25
  443. package/dist/paths/rewire.d.ts +5 -0
  444. package/dist/paths/rewire.js +3 -3
  445. package/dist/paths/socket.d.ts +74 -111
  446. package/dist/paths/socket.js +106 -139
  447. package/dist/paths/walk.d.ts +1 -1
  448. package/dist/paths/walk.js +4 -4
  449. package/dist/perf/report.js +2 -2
  450. package/dist/perf/types.d.ts +1 -1
  451. package/dist/pkg-ext/data.js +1 -1
  452. package/dist/primordials/array.js +9 -9
  453. package/dist/primordials/date.js +2 -2
  454. package/dist/primordials/error.js +3 -3
  455. package/dist/primordials/headers.d.ts +10 -0
  456. package/dist/primordials/headers.js +23 -0
  457. package/dist/primordials/intl.d.ts +13 -0
  458. package/dist/primordials/intl.js +26 -0
  459. package/dist/primordials/math.js +33 -33
  460. package/dist/primordials/number.js +9 -9
  461. package/dist/primordials/object.js +5 -5
  462. package/dist/primordials/process.d.ts +88 -0
  463. package/dist/primordials/process.js +132 -0
  464. package/dist/primordials/string.d.ts +2 -2
  465. package/dist/primordials/string.js +6 -6
  466. package/dist/primordials/symbol.js +3 -3
  467. package/dist/primordials/uncurry.d.ts +1 -2
  468. package/dist/primordials/uncurry.js +9 -9
  469. package/dist/process/abort.js +3 -3
  470. package/dist/process/lock-manager.js +8 -8
  471. package/dist/process/spawn/_internal.js +6 -8
  472. package/dist/process/spawn/child.js +20 -14
  473. package/dist/process/spawn/errors.js +3 -5
  474. package/dist/process/spawn/kill-tree.d.ts +53 -0
  475. package/dist/process/spawn/kill-tree.js +85 -0
  476. package/dist/process/spawn/stdio.js +0 -1
  477. package/dist/process/spawn/types.d.ts +5 -5
  478. package/dist/process/transient.js +2 -2
  479. package/dist/promises/_internal.d.ts +2 -1
  480. package/dist/promises/_internal.js +2 -6
  481. package/dist/promises/iterate.js +11 -15
  482. package/dist/promises/options.js +3 -6
  483. package/dist/promises/retry.js +4 -5
  484. package/dist/promises/timers.d.ts +30 -0
  485. package/dist/promises/timers.js +48 -0
  486. package/dist/regexps/spec.js +1 -1
  487. package/dist/releases/github-archives.d.ts +6 -6
  488. package/dist/releases/github-archives.js +3 -3
  489. package/dist/releases/github-asset-url.d.ts +1 -1
  490. package/dist/releases/github-asset-url.js +5 -5
  491. package/dist/releases/github-downloads.d.ts +1 -1
  492. package/dist/releases/github-downloads.js +3 -3
  493. package/dist/releases/github-listing.d.ts +12 -4
  494. package/dist/releases/github-listing.js +20 -7
  495. package/dist/releases/github-retry-config.js +1 -1
  496. package/dist/releases/github-types.d.ts +6 -6
  497. package/dist/releases/socket-btm-binary-naming.d.ts +107 -0
  498. package/dist/releases/socket-btm-binary-naming.js +155 -0
  499. package/dist/releases/socket-btm.d.ts +8 -115
  500. package/dist/releases/socket-btm.js +16 -159
  501. package/dist/schema/types.d.ts +4 -5
  502. package/dist/schema/validate.js +1 -1
  503. package/dist/sea/detect.js +6 -6
  504. package/dist/secrets/_internal.d.ts +2 -2
  505. package/dist/secrets/_internal.js +2 -2
  506. package/dist/secrets/compare.d.ts +45 -0
  507. package/dist/secrets/compare.js +61 -0
  508. package/dist/secrets/find.d.ts +2 -2
  509. package/dist/secrets/find.js +10 -4
  510. package/dist/secrets/keychain.d.ts +1 -1
  511. package/dist/secrets/keychain.js +6 -4
  512. package/dist/secrets/linux.js +40 -52
  513. package/dist/secrets/macos.d.ts +2 -3
  514. package/dist/secrets/macos.js +24 -33
  515. package/dist/secrets/rc.d.ts +4 -4
  516. package/dist/secrets/rc.js +27 -17
  517. package/dist/secrets/socket-api-token.d.ts +4 -4
  518. package/dist/secrets/socket-api-token.js +26 -9
  519. package/dist/secrets/windows.js +32 -37
  520. package/dist/shadow/skip.js +2 -2
  521. package/dist/shell/parse.d.ts +32 -0
  522. package/dist/shell/parse.js +60 -0
  523. package/dist/smol/detect.js +9 -10
  524. package/dist/smol/http.js +6 -7
  525. package/dist/smol/https.js +6 -7
  526. package/dist/smol/manifest.d.ts +1 -1
  527. package/dist/smol/manifest.js +6 -7
  528. package/dist/smol/path.d.ts +1 -1
  529. package/dist/smol/path.js +7 -8
  530. package/dist/smol/primordial.d.ts +4 -0
  531. package/dist/smol/primordial.js +6 -7
  532. package/dist/smol/purl.d.ts +1 -1
  533. package/dist/smol/purl.js +7 -8
  534. package/dist/smol/versions.js +6 -7
  535. package/dist/smol/vfs.js +6 -7
  536. package/dist/sorts/_internal.js +6 -8
  537. package/dist/sorts/natural.js +10 -12
  538. package/dist/sorts/semver.js +1 -2
  539. package/dist/sorts/strings.js +0 -1
  540. package/dist/sorts/types.d.ts +1 -1
  541. package/dist/spinner/create-spinner-class.d.ts +38 -0
  542. package/dist/spinner/create-spinner-class.js +302 -0
  543. package/dist/spinner/default.js +8 -9
  544. package/dist/spinner/spinner-internals.d.ts +36 -0
  545. package/dist/spinner/spinner-internals.js +105 -0
  546. package/dist/spinner/spinner-shimmer-methods.d.ts +54 -0
  547. package/dist/spinner/spinner-shimmer-methods.js +143 -0
  548. package/dist/spinner/spinner-status-methods.d.ts +40 -0
  549. package/dist/spinner/spinner-status-methods.js +133 -0
  550. package/dist/spinner/spinner.d.ts +8 -5
  551. package/dist/spinner/spinner.js +19 -706
  552. package/dist/spinner/types.d.ts +3 -1
  553. package/dist/spinner/with.d.ts +10 -0
  554. package/dist/spinner/with.js +16 -2
  555. package/dist/stdio/divider.js +1 -1
  556. package/dist/stdio/footer.js +3 -3
  557. package/dist/stdio/header.js +4 -4
  558. package/dist/stdio/progress.js +10 -6
  559. package/dist/stdio/prompts.d.ts +7 -5
  560. package/dist/stdio/prompts.js +7 -8
  561. package/dist/stdio/stdout.js +3 -3
  562. package/dist/streams/parallel.js +3 -5
  563. package/dist/streams/transform.js +2 -3
  564. package/dist/strings/format.js +2 -6
  565. package/dist/strings/predicates.js +0 -2
  566. package/dist/strings/search.js +1 -2
  567. package/dist/strings/transform.js +0 -3
  568. package/dist/strings/width.js +9 -10
  569. package/dist/tables/bordered.js +4 -3
  570. package/dist/tables/padding.js +1 -1
  571. package/dist/tables/simple.js +8 -5
  572. package/dist/temporal/instant.js +1 -1
  573. package/dist/temporal/slots.js +6 -6
  574. package/dist/temporal/system.js +9 -9
  575. package/dist/themes/context.d.ts +3 -2
  576. package/dist/themes/context.js +4 -5
  577. package/dist/themes/themes.js +15 -15
  578. package/dist/themes/types.d.ts +3 -3
  579. package/dist/url/assert-safe.d.ts +29 -0
  580. package/dist/url/assert-safe.js +54 -0
  581. package/dist/url/parse.js +0 -2
  582. package/dist/url/predicates.d.ts +31 -1
  583. package/dist/url/predicates.js +43 -3
  584. package/dist/url/search-params.js +3 -9
  585. package/dist/url/types.d.ts +9 -5
  586. package/dist/versions/_internal.js +3 -3
  587. package/dist/words/article.js +0 -1
  588. package/dist/words/capitalize.js +0 -1
  589. package/dist/words/pluralize.js +15 -5
  590. package/package.json +419 -216
  591. package/dist/external-tools/uv/asset-names.d.ts +0 -36
  592. package/dist/external-tools/uv/asset-names.js +0 -70
  593. package/dist/external-tools/uv/from-download.d.ts +0 -17
  594. package/dist/external-tools/uv/from-download.js +0 -47
  595. package/dist/external-tools/uv/from-path.d.ts +0 -5
  596. package/dist/external-tools/uv/from-path.js +0 -22
  597. package/dist/external-tools/uv/from-vfs.d.ts +0 -7
  598. package/dist/external-tools/uv/from-vfs.js +0 -26
  599. package/dist/external-tools/uv/resolve.d.ts +0 -25
  600. package/dist/external-tools/uv/resolve.js +0 -53
  601. package/dist/external-tools/uv/types.d.ts +0 -24
  602. package/dist/fs/path-cache.d.ts +0 -21
  603. package/dist/fs/path-cache.js +0 -34
  604. package/dist/http-request/checksums.d.ts +0 -69
  605. package/dist/http-request/checksums.js +0 -108
  606. package/dist/http-request/http-request.d.ts +0 -12
  607. package/dist/http-request/http-request.js +0 -11
  608. package/dist/packages/operations.d.ts +0 -113
  609. package/dist/packages/operations.js +0 -304
  610. package/dist/ssri/convert.d.ts +0 -48
  611. package/dist/ssri/convert.js +0 -69
  612. package/dist/ssri/parse.d.ts +0 -27
  613. package/dist/ssri/parse.js +0 -41
  614. package/dist/ssri/validate.d.ts +0 -41
  615. package/dist/ssri/validate.js +0 -56
  616. /package/dist/{bin → cli}/check.d.ts +0 -0
  617. /package/dist/external-tools/{uv → python}/types.js +0 -0
  618. /package/dist/fs/{find-up.d.ts → find.d.ts} +0 -0
  619. /package/dist/github/{fetch.d.ts → request.d.ts} +0 -0
@@ -22,74 +22,15 @@ src_external__socketregistry_is_unicode_supported = require_runtime.__toESM(src_
22
22
  * are configured) and re-renders whenever `setTheme()` fires
23
23
  * `onThemeChange`.
24
24
  */
25
- let _consoleSymbols;
26
- let _kGroupIndentationWidthSymbol;
27
- /**
28
- * Lazily get console symbols on first access.
29
- *
30
- * Deferred to avoid accessing global console during early Node.js bootstrap
31
- * before stdout is ready.
32
- */
33
- function getConsoleSymbols() {
34
- /* c8 ignore start */
35
- if (_consoleSymbols === void 0) _consoleSymbols = require_primordials_object.ObjectGetOwnPropertySymbols(require_logger__internal.globalConsole);
36
- /* c8 ignore stop */
37
- return _consoleSymbols;
38
- }
39
- /**
40
- * Lazily get kGroupIndentationWidth symbol on first access.
41
- */
42
- function getKGroupIndentationWidthSymbol() {
43
- /* c8 ignore next - Lazy-init second-call branch; module-singleton. */
44
- if (_kGroupIndentationWidthSymbol === void 0) _kGroupIndentationWidthSymbol = getConsoleSymbols().find((s) => s.label === "kGroupIndentWidth") ?? Symbol("kGroupIndentWidth");
45
- return _kGroupIndentationWidthSymbol;
46
- }
47
- /**
48
- * Symbol for incrementing the internal log call counter.
49
- *
50
- * This is an internal symbol used to track the number of times logging methods
51
- * have been called on a logger instance.
52
- */
53
- const incLogCallCountSymbol = Symbol.for("logger.logCallCount++");
54
- /**
55
- * Symbol for tracking whether the last logged line was blank.
56
- *
57
- * This is used internally to prevent multiple consecutive blank lines and to
58
- * determine whether to add spacing before certain messages.
59
- */
60
- const lastWasBlankSymbol = Symbol.for("logger.lastWasBlank");
61
- /**
62
- * Log symbols for terminal output with colored indicators.
63
- *
64
- * Provides colored Unicode symbols (✖, ℹ, ∴, →, ✔, ⚠) with ASCII fallbacks (×,
65
- * i, :., >, √, ‼) for terminals that don't support Unicode. Symbols are colored
66
- * according to the active theme's color palette (error, info, reason, step,
67
- * success, warning).
68
- *
69
- * The symbols are lazily initialized on first access and automatically update
70
- * when the fallback theme changes (via setTheme()). Note that LOG_SYMBOLS
71
- * reflect the global fallback theme, not async-local theme contexts from
72
- * withTheme().
73
- *
74
- * @example
75
- * ```typescript
76
- * import { LOG_SYMBOLS } from '@socketsecurity/lib/logger/symbols'
77
- *
78
- * console.log(`${LOG_SYMBOLS.fail} Build failed`) // Theme error color ✖
79
- * console.log(`${LOG_SYMBOLS.info} Starting process`) // Theme info color ℹ
80
- * console.log(`${LOG_SYMBOLS.progress} Working on task`) // Theme step color ∴
81
- * console.log(`${LOG_SYMBOLS.step} Processing files`) // Theme step color →
82
- * console.log(`${LOG_SYMBOLS.success} Build completed`) // Theme success color ✔
83
- * console.log(`${LOG_SYMBOLS.warn} Deprecated API used`) // Theme warning color ⚠
84
- * ```
85
- */
86
- const LOG_SYMBOLS = /*@__PURE__*/ (() => {
25
+ let consoleSymbols;
26
+ let kGroupIndentationWidthSymbol;
27
+ function createLogSymbols() {
87
28
  const target = { __proto__: null };
88
29
  let initialized = false;
89
30
  const handler = { __proto__: null };
90
31
  const updateSymbols = () => {
91
32
  const supported = (0, src_external__socketregistry_is_unicode_supported.default)();
92
- const colors = /* @__PURE__ */ require_logger_colors.getYoctocolors();
33
+ const colors = require_logger_colors.getYoctocolors();
93
34
  const theme = require_themes_context.getTheme();
94
35
  const successColor = theme.colors.success;
95
36
  const errorColor = theme.colors.error;
@@ -98,18 +39,18 @@ const LOG_SYMBOLS = /*@__PURE__*/ (() => {
98
39
  const stepColor = theme.colors.step;
99
40
  /* c8 ignore start - ASCII-fallback symbol arms only fire on
100
41
  terminals without unicode support; tests run on unicode TTYs. */
101
- target["fail"] = /* @__PURE__ */ require_logger_colors.applyColor(supported ? "✖" : "×", errorColor, colors);
102
- target["info"] = /* @__PURE__ */ require_logger_colors.applyColor(supported ? "ℹ" : "i", infoColor, colors);
103
- target["progress"] = /* @__PURE__ */ require_logger_colors.applyColor(supported ? "∴" : ":.", stepColor, colors);
104
- target["reason"] = colors.dim(/* @__PURE__ */ require_logger_colors.applyColor(supported ? "∴" : ":.", warningColor, colors));
105
- target["skip"] = /* @__PURE__ */ require_logger_colors.applyColor(supported ? "↻" : "@", stepColor, colors);
106
- target["step"] = /* @__PURE__ */ require_logger_colors.applyColor(supported ? "→" : ">", stepColor, colors);
107
- target["success"] = /* @__PURE__ */ require_logger_colors.applyColor(supported ? "✔" : "√", successColor, colors);
108
- target["warn"] = /* @__PURE__ */ require_logger_colors.applyColor(supported ? "⚠" : "‼", warningColor, colors);
42
+ target["fail"] = require_logger_colors.applyColor(supported ? "✖" : "×", errorColor, colors);
43
+ target["info"] = require_logger_colors.applyColor(supported ? "ℹ" : "i", infoColor, colors);
44
+ target["progress"] = require_logger_colors.applyColor(supported ? "∴" : ":.", stepColor, colors);
45
+ target["reason"] = colors.dim(require_logger_colors.applyColor(supported ? "∴" : ":.", warningColor, colors));
46
+ target["skip"] = require_logger_colors.applyColor(supported ? "↻" : "@", stepColor, colors);
47
+ target["step"] = require_logger_colors.applyColor(supported ? "→" : ">", stepColor, colors);
48
+ target["success"] = require_logger_colors.applyColor(supported ? "✔" : "√", successColor, colors);
49
+ target["warn"] = require_logger_colors.applyColor(supported ? "⚠" : "‼", warningColor, colors);
109
50
  /* c8 ignore stop */
110
51
  };
111
52
  const init = () => {
112
- /* c8 ignore start */
53
+ /* c8 ignore start - Idempotent guard; init runs once, second-call branch never re-enters. */
113
54
  if (initialized) return;
114
55
  /* c8 ignore stop */
115
56
  updateSymbols();
@@ -117,7 +58,7 @@ const LOG_SYMBOLS = /*@__PURE__*/ (() => {
117
58
  for (const trapName in handler) delete handler[trapName];
118
59
  };
119
60
  const reset = () => {
120
- /* c8 ignore start */
61
+ /* c8 ignore start - Defensive guard; reset only runs after init, so the un-init branch is unreachable in tests. */
121
62
  if (!initialized) return;
122
63
  /* c8 ignore stop */
123
64
  updateSymbols();
@@ -136,10 +77,48 @@ const LOG_SYMBOLS = /*@__PURE__*/ (() => {
136
77
  reset();
137
78
  });
138
79
  return new require_primordials_globals.ProxyCtor(target, handler);
139
- })();
80
+ }
81
+ function createLogSymbolsProxyPlaceholder() {}
82
+ /**
83
+ * Lazily get console symbols on first access.
84
+ *
85
+ * Deferred to avoid accessing global console during early Node.js bootstrap
86
+ * before stdout is ready.
87
+ */
88
+ function getConsoleSymbols() {
89
+ /* c8 ignore start - Lazy-init second-call branch; module-singleton, the re-init guard never re-enters in tests. */
90
+ if (consoleSymbols === void 0) consoleSymbols = require_primordials_object.ObjectGetOwnPropertySymbols(require_logger__internal.globalConsole);
91
+ /* c8 ignore stop */
92
+ return consoleSymbols;
93
+ }
94
+ /**
95
+ * Lazily get kGroupIndentationWidth symbol on first access.
96
+ */
97
+ function getKGroupIndentationWidthSymbol() {
98
+ /* c8 ignore next - Lazy-init second-call branch; module-singleton. */
99
+ if (kGroupIndentationWidthSymbol === void 0) kGroupIndentationWidthSymbol = getConsoleSymbols().find((s) => s.label === "kGroupIndentWidth") ?? Symbol("kGroupIndentWidth");
100
+ return kGroupIndentationWidthSymbol;
101
+ }
102
+ /**
103
+ * Symbol for incrementing the internal log call counter.
104
+ *
105
+ * This is an internal symbol used to track the number of times logging methods
106
+ * have been called on a logger instance.
107
+ */
108
+ const incLogCallCountSymbol = Symbol.for("logger.logCallCount++");
109
+ /**
110
+ * Symbol for tracking whether the last logged line was blank.
111
+ *
112
+ * This is used internally to prevent multiple consecutive blank lines and to
113
+ * determine whether to add spacing before certain messages.
114
+ */
115
+ const lastWasBlankSymbol = Symbol.for("logger.lastWasBlank");
116
+ const LOG_SYMBOLS = /*@__PURE__*/ createLogSymbols();
140
117
 
141
118
  //#endregion
142
119
  exports.LOG_SYMBOLS = LOG_SYMBOLS;
120
+ exports.createLogSymbols = createLogSymbols;
121
+ exports.createLogSymbolsProxyPlaceholder = createLogSymbolsProxyPlaceholder;
143
122
  exports.getConsoleSymbols = getConsoleSymbols;
144
123
  exports.getKGroupIndentationWidthSymbol = getKGroupIndentationWidthSymbol;
145
124
  exports.incLogCallCountSymbol = incLogCallCountSymbol;
@@ -59,7 +59,7 @@ export type LogSymbols = {
59
59
  * All methods return the logger instance for method chaining.
60
60
  */
61
61
  export type LoggerMethods = {
62
- [K in keyof typeof console]: (typeof console)[K] extends (...args: infer A) => any ? (...args: A) => Logger : (typeof console)[K];
62
+ [K in keyof typeof console]: (typeof console)[K] extends (...args: infer A) => unknown ? (...args: A) => Logger : (typeof console)[K];
63
63
  };
64
64
  /**
65
65
  * A task that can be executed with automatic start/complete logging.
@@ -11,27 +11,27 @@ export type MemoizeOptions<Args extends unknown[]> = {
11
11
  /**
12
12
  * Custom cache key generator (defaults to JSON.stringify)
13
13
  */
14
- keyGen?: (...args: Args) => string;
14
+ keyGen?: ((...args: Args) => string) | undefined;
15
15
  /**
16
16
  * Maximum cache size (LRU eviction when exceeded)
17
17
  */
18
- maxSize?: number;
18
+ maxSize?: number | undefined;
19
19
  /**
20
20
  * TTL in milliseconds (cache entries expire after this time)
21
21
  */
22
- ttl?: number;
22
+ ttl?: number | undefined;
23
23
  /**
24
24
  * Cache name for debugging.
25
25
  */
26
- name?: string;
26
+ name?: string | undefined;
27
27
  /**
28
28
  * Weak cache for object keys (enables GC)
29
29
  */
30
- weak?: boolean;
30
+ weak?: boolean | undefined;
31
31
  /**
32
32
  * Custom equality check for cache hits.
33
33
  */
34
- equals?: (a: Args, b: Args) => boolean;
34
+ equals?: ((a: Args, b: Args) => boolean) | undefined;
35
35
  };
36
36
  /**
37
37
  * Cache entry with metadata.
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @file Chrome native messaging host entry point. Chrome launches this script
3
+ * as a subprocess when the extension calls
4
+ * `chrome.runtime.connectNative('dev.socket.trusted-publisher-host')`. The
5
+ * protocol is length-prefixed binary over stdin/stdout: incoming: [4-byte LE
6
+ * uint32 length][UTF-8 JSON message] outgoing: [4-byte LE uint32
7
+ * length][UTF-8 JSON response] The host handles one request type: { type:
8
+ * 'get-api-token' } → { token: string } | { error: string } The host NEVER
9
+ * logs to stdout (Chrome treats any stdout byte outside the length-prefixed
10
+ * protocol as a message boundary error). All diagnostics go to stderr only.
11
+ * Detection: Chrome passes the extension origin as `process.argv[2]`
12
+ * (`chrome-extension://<id>/`). The `NATIVE_MESSAGING_HOST` constant in
13
+ * `src/constants/platform.ts` captures this check so other modules can skip
14
+ * TTY-only paths when running in this context.
15
+ */
16
+ import type { Readable, Writable } from 'node:stream';
17
+ export declare function handleOne(stdin?: Readable, stdout?: Writable): Promise<void>;
18
+ export declare function readExact(length: number, stream?: Readable): Promise<Buffer>;
19
+ export declare function runHost(): Promise<void>;
20
+ export declare function writeMessage(obj: unknown, stream?: Writable): void;
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+ /* Socket Lib - Built with rolldown */
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+ const require_runtime = require('../_virtual/_rolldown/runtime.js');
5
+ const require_primordials_error = require('../primordials/error.js');
6
+ const require_errors_message = require('../errors/message.js');
7
+ const require_logger_default = require('../logger/default.js');
8
+ const require_secrets_socket_api_token = require('../secrets/socket-api-token.js');
9
+ const require_native_messaging_install = require('./install.js');
10
+ let node_process = require("node:process");
11
+ node_process = require_runtime.__toESM(node_process);
12
+
13
+ //#region src/native-messaging/host.ts
14
+ /**
15
+ * @file Chrome native messaging host entry point. Chrome launches this script
16
+ * as a subprocess when the extension calls
17
+ * `chrome.runtime.connectNative('dev.socket.trusted-publisher-host')`. The
18
+ * protocol is length-prefixed binary over stdin/stdout: incoming: [4-byte LE
19
+ * uint32 length][UTF-8 JSON message] outgoing: [4-byte LE uint32
20
+ * length][UTF-8 JSON response] The host handles one request type: { type:
21
+ * 'get-api-token' } → { token: string } | { error: string } The host NEVER
22
+ * logs to stdout (Chrome treats any stdout byte outside the length-prefixed
23
+ * protocol as a message boundary error). All diagnostics go to stderr only.
24
+ * Detection: Chrome passes the extension origin as `process.argv[2]`
25
+ * (`chrome-extension://<id>/`). The `NATIVE_MESSAGING_HOST` constant in
26
+ * `src/constants/platform.ts` captures this check so other modules can skip
27
+ * TTY-only paths when running in this context.
28
+ */
29
+ const logger = require_logger_default.getDefaultLogger();
30
+ async function handleOne(stdin, stdout) {
31
+ const inStream = stdin ?? node_process.default.stdin;
32
+ const outStream = stdout ?? node_process.default.stdout;
33
+ const length = (await readExact(4, inStream)).readUInt32LE(0);
34
+ if (length === 0 || length > 1048576) {
35
+ writeMessage({ error: `invalid message length: ${length}` }, outStream);
36
+ return;
37
+ }
38
+ const body = await readExact(length, inStream);
39
+ let msg;
40
+ try {
41
+ msg = JSON.parse(body.toString("utf8"));
42
+ } catch {
43
+ writeMessage({ error: "message is not valid JSON" }, outStream);
44
+ return;
45
+ }
46
+ const type = msg["type"];
47
+ if (type === "get-api-token") {
48
+ const token = await require_secrets_socket_api_token.readSocketApiToken();
49
+ if (token) writeMessage({ token }, outStream);
50
+ else writeMessage({ error: "Socket API token not found. Set SOCKET_API_TOKEN in your environment." }, outStream);
51
+ return;
52
+ }
53
+ writeMessage({ error: `unknown message type: ${String(type)}` }, outStream);
54
+ }
55
+ function readExact(length, stream) {
56
+ const src = stream ?? node_process.default.stdin;
57
+ return new Promise((resolve, reject) => {
58
+ const chunks = [];
59
+ let received = 0;
60
+ function cleanup() {
61
+ src.off("readable", onReadable);
62
+ src.off("error", onError);
63
+ src.off("end", onEnd);
64
+ }
65
+ function tryRead() {
66
+ let needed = length - received;
67
+ while (needed > 0) {
68
+ const chunk = src.read(needed) ?? src.read();
69
+ if (chunk === null) return;
70
+ chunks.push(chunk);
71
+ received += chunk.length;
72
+ needed = length - received;
73
+ }
74
+ cleanup();
75
+ const full = Buffer.concat(chunks);
76
+ if (received > length) src.unshift(full.subarray(length));
77
+ resolve(full.subarray(0, length));
78
+ }
79
+ function onReadable() {
80
+ tryRead();
81
+ }
82
+ function onError(err) {
83
+ cleanup();
84
+ reject(err);
85
+ }
86
+ function onEnd() {
87
+ cleanup();
88
+ reject(new require_primordials_error.ErrorCtor("stdin closed before message was complete"));
89
+ }
90
+ src.on("readable", onReadable);
91
+ src.on("error", onError);
92
+ src.once("end", onEnd);
93
+ tryRead();
94
+ });
95
+ }
96
+ async function runHost() {
97
+ try {
98
+ require_native_messaging_install.assertNodeStripTypesSupported();
99
+ } catch (e) {
100
+ logger.error(require_errors_message.errorMessage(e));
101
+ node_process.default.exit(1);
102
+ }
103
+ while (true) try {
104
+ await handleOne();
105
+ } catch {
106
+ node_process.default.exit(0);
107
+ }
108
+ }
109
+ function writeMessage(obj, stream) {
110
+ const payload = Buffer.from(JSON.stringify(obj), "utf8");
111
+ const header = Buffer.allocUnsafe(4);
112
+ header.writeUInt32LE(payload.length, 0);
113
+ (stream ?? node_process.default.stdout).write(Buffer.concat([header, payload]));
114
+ }
115
+
116
+ //#endregion
117
+ exports.handleOne = handleOne;
118
+ exports.readExact = readExact;
119
+ exports.runHost = runHost;
120
+ exports.writeMessage = writeMessage;
@@ -0,0 +1,5 @@
1
+ export { handleOne, readExact, runHost, writeMessage } from './host';
2
+ export { HOST_NAME, MIN_NODE_VERSION_FOR_STRIP_TYPES, assertNodeStripTypesSupported, buildManifest, chromeManifestDirs, installNativeHost, registerWindows, stripTypesFlag, writeWrapperPosix, writeWrapperWindows, } from './install';
3
+ export type { InstallOptions, InstallResult } from './install';
4
+ export { TokenBucketLimiter } from './rate-limit';
5
+ export type { TokenBucketOptions } from './rate-limit';
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ /* Socket Lib - Built with rolldown */
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+ const require_native_messaging_install = require('./install.js');
5
+ const require_native_messaging_host = require('./host.js');
6
+ const require_native_messaging_rate_limit = require('./rate-limit.js');
7
+
8
+ exports.HOST_NAME = require_native_messaging_install.HOST_NAME;
9
+ exports.MIN_NODE_VERSION_FOR_STRIP_TYPES = require_native_messaging_install.MIN_NODE_VERSION_FOR_STRIP_TYPES;
10
+ exports.TokenBucketLimiter = require_native_messaging_rate_limit.TokenBucketLimiter;
11
+ exports.assertNodeStripTypesSupported = require_native_messaging_install.assertNodeStripTypesSupported;
12
+ exports.buildManifest = require_native_messaging_install.buildManifest;
13
+ exports.chromeManifestDirs = require_native_messaging_install.chromeManifestDirs;
14
+ exports.handleOne = require_native_messaging_host.handleOne;
15
+ exports.installNativeHost = require_native_messaging_install.installNativeHost;
16
+ exports.readExact = require_native_messaging_host.readExact;
17
+ exports.registerWindows = require_native_messaging_install.registerWindows;
18
+ exports.runHost = require_native_messaging_host.runHost;
19
+ exports.stripTypesFlag = require_native_messaging_install.stripTypesFlag;
20
+ exports.writeMessage = require_native_messaging_host.writeMessage;
21
+ exports.writeWrapperPosix = require_native_messaging_install.writeWrapperPosix;
22
+ exports.writeWrapperWindows = require_native_messaging_install.writeWrapperWindows;
@@ -0,0 +1,60 @@
1
+ /**
2
+ * @file Install the Socket native messaging host manifest so Chrome can find
3
+ * and launch the host when the extension calls connectNative(). Native host
4
+ * manifest paths (Chrome): macOS ~/Library/Application
5
+ * Support/Google/Chrome/NativeMessagingHosts/<name>.json
6
+ * ~/Library/Application Support/Chromium/NativeMessagingHosts/<name>.json
7
+ * Linux ~/.config/google-chrome/NativeMessagingHosts/<name>.json
8
+ * ~/.config/chromium/NativeMessagingHosts/<name>.json Windows
9
+ * HKCU\Software\Google\Chrome\NativeMessagingHosts<name> → path to .json The
10
+ * manifest points to a small wrapper shell script (POSIX) or .cmd (Windows)
11
+ * that invokes `node /path/to/socket-lib/src/native-messaging/run.ts` with
12
+ * the `--native-messaging` flag so the host can detect its context even when
13
+ * the extension origin arg is absent (e.g. during local testing). Strip-types
14
+ * flag policy: Node 24+ no flag needed (default-on). Node 22.6–23 pass
15
+ * `--strip-types` (stable since 22.6). Node < 22.6 refuse to install;
16
+ * assertNodeStripTypesSupported throws. The flag decision is baked into the
17
+ * wrapper at install time. If the user later switches Node versions (e.g. via
18
+ * nvm) the host enforces the same floor at runtime via
19
+ * assertNodeStripTypesSupported.
20
+ */
21
+ export declare const HOST_NAME = "dev.socket.trusted_publisher_host";
22
+ export declare const MIN_NODE_VERSION_FOR_STRIP_TYPES = "22.6.0";
23
+ export interface InstallOptions {
24
+ /**
25
+ * List of Chrome extension origin URLs that are allowed to connect to this
26
+ * host. Each entry is `chrome-extension://<extension-id>/`. Pass `['*']`
27
+ * during development to allow any extension (not for production).
28
+ */
29
+ allowedOrigins: string[];
30
+ /**
31
+ * When `true`, reject wildcard origins (`['*']`) — production installs must
32
+ * pin to specific extension IDs.
33
+ */
34
+ production?: boolean | undefined;
35
+ /**
36
+ * Directory to write the wrapper script. Defaults to the same directory as
37
+ * this file (`src/native-messaging/`).
38
+ */
39
+ wrapperDir?: string | undefined;
40
+ }
41
+ export interface InstallResult {
42
+ manifestPaths: string[];
43
+ wrapperPath: string;
44
+ }
45
+ /**
46
+ * Throw a clear, actionable error if the current Node runtime is too old to
47
+ * strip TypeScript types (i.e. < 22.6). Use at install time + host startup.
48
+ *
49
+ * The error message names the active Node version manager (nvm / fnm / volta /
50
+ * asdf / n / corepack / system) and gives the exact one-liner to upgrade — so
51
+ * the user can copy-paste the fix rather than searching docs.
52
+ */
53
+ export declare function assertNodeStripTypesSupported(): void;
54
+ export declare function buildManifest(wrapperPath: string, allowedOrigins: string[]): object;
55
+ export declare function chromeManifestDirs(): string[];
56
+ export declare function installNativeHost(options: InstallOptions): InstallResult;
57
+ export declare function registerWindows(manifestPath: string): void;
58
+ export declare function stripTypesFlag(): string;
59
+ export declare function writeWrapperPosix(wrapperPath: string): void;
60
+ export declare function writeWrapperWindows(wrapperPath: string): void;
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ /* Socket Lib - Built with rolldown */
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+ const require_runtime = require('../_virtual/_rolldown/runtime.js');
5
+ const require_primordials_error = require('../primordials/error.js');
6
+ const require_constants_platform = require('../constants/platform.js');
7
+ const require_env_home = require('../env/home.js');
8
+ const require_env_windows = require('../env/windows.js');
9
+ const require_constants_node = require('../constants/node.js');
10
+ const require_env_node_version_managers = require('../env/node-version-managers.js');
11
+ let node_fs = require("node:fs");
12
+ let node_process = require("node:process");
13
+ node_process = require_runtime.__toESM(node_process);
14
+ let node_path = require("node:path");
15
+ node_path = require_runtime.__toESM(node_path);
16
+ let node_url = require("node:url");
17
+ let _socketsecurity_lib_stable_process_spawn_child = require("@socketsecurity/lib-stable/process/spawn/child");
18
+
19
+ //#region src/native-messaging/install.ts
20
+ /**
21
+ * @file Install the Socket native messaging host manifest so Chrome can find
22
+ * and launch the host when the extension calls connectNative(). Native host
23
+ * manifest paths (Chrome): macOS ~/Library/Application
24
+ * Support/Google/Chrome/NativeMessagingHosts/<name>.json
25
+ * ~/Library/Application Support/Chromium/NativeMessagingHosts/<name>.json
26
+ * Linux ~/.config/google-chrome/NativeMessagingHosts/<name>.json
27
+ * ~/.config/chromium/NativeMessagingHosts/<name>.json Windows
28
+ * HKCU\Software\Google\Chrome\NativeMessagingHosts<name> → path to .json The
29
+ * manifest points to a small wrapper shell script (POSIX) or .cmd (Windows)
30
+ * that invokes `node /path/to/socket-lib/src/native-messaging/run.ts` with
31
+ * the `--native-messaging` flag so the host can detect its context even when
32
+ * the extension origin arg is absent (e.g. during local testing). Strip-types
33
+ * flag policy: Node 24+ no flag needed (default-on). Node 22.6–23 pass
34
+ * `--strip-types` (stable since 22.6). Node < 22.6 refuse to install;
35
+ * assertNodeStripTypesSupported throws. The flag decision is baked into the
36
+ * wrapper at install time. If the user later switches Node versions (e.g. via
37
+ * nvm) the host enforces the same floor at runtime via
38
+ * assertNodeStripTypesSupported.
39
+ */
40
+ const HOST_NAME = "dev.socket.trusted_publisher_host";
41
+ const MIN_NODE_VERSION_FOR_STRIP_TYPES = "22.6.0";
42
+ const __dirname$1 = node_path.default.dirname((0, node_url.fileURLToPath)(require("url").pathToFileURL(__filename).href));
43
+ const HOST_SCRIPT = node_path.default.resolve(__dirname$1, "run.ts");
44
+ /**
45
+ * Throw a clear, actionable error if the current Node runtime is too old to
46
+ * strip TypeScript types (i.e. < 22.6). Use at install time + host startup.
47
+ *
48
+ * The error message names the active Node version manager (nvm / fnm / volta /
49
+ * asdf / n / corepack / system) and gives the exact one-liner to upgrade — so
50
+ * the user can copy-paste the fix rather than searching docs.
51
+ */
52
+ function assertNodeStripTypesSupported() {
53
+ if (require_constants_node.supportsNodeStripTypes()) return;
54
+ const manager = require_env_node_version_managers.detectActiveNodeManager();
55
+ const hint = require_env_node_version_managers.nodeManagerUpgradeHint(manager, MIN_NODE_VERSION_FOR_STRIP_TYPES);
56
+ throw new require_primordials_error.ErrorCtor(`Node ${require_constants_node.getNodeVersion()} cannot run TypeScript directly. The Socket native-messaging host needs Node ${MIN_NODE_VERSION_FOR_STRIP_TYPES}+ (type-stripping is stable in Node 22.6 and default-on in Node 24).\nDetected Node manager: ${manager}\nTo upgrade: ${hint}`);
57
+ }
58
+ function buildManifest(wrapperPath, allowedOrigins) {
59
+ return {
60
+ name: HOST_NAME,
61
+ description: "Socket Security — API token bridge for the Trusted Publisher extension",
62
+ path: wrapperPath,
63
+ type: "stdio",
64
+ allowed_origins: allowedOrigins
65
+ };
66
+ }
67
+ function chromeManifestDirs() {
68
+ const home = require_env_home.getHome();
69
+ if (!home) throw new require_primordials_error.ErrorCtor("Cannot determine home directory.");
70
+ if (require_constants_platform.DARWIN) {
71
+ const lib = node_path.default.join(home, "Library", "Application Support");
72
+ return [node_path.default.join(lib, "Google", "Chrome", "NativeMessagingHosts"), node_path.default.join(lib, "Chromium", "NativeMessagingHosts")];
73
+ }
74
+ if (require_constants_platform.WIN32) {
75
+ const appData = require_env_windows.getAppdata() ?? node_path.default.join(home, "AppData", "Roaming");
76
+ return [node_path.default.join(appData, "Google", "Chrome", "User Data", "NativeMessagingHosts")];
77
+ }
78
+ const config = node_process.default.env["XDG_CONFIG_HOME"] ?? node_path.default.join(home, ".config");
79
+ return [node_path.default.join(config, "google-chrome", "NativeMessagingHosts"), node_path.default.join(config, "chromium", "NativeMessagingHosts")];
80
+ }
81
+ function installNativeHost(options) {
82
+ assertNodeStripTypesSupported();
83
+ const { allowedOrigins, production = false, wrapperDir = __dirname$1 } = {
84
+ __proto__: null,
85
+ ...options
86
+ };
87
+ if (production && allowedOrigins.includes("*")) throw new require_primordials_error.ErrorCtor("production mode rejects allowedOrigins '*' — pin to specific chrome-extension://<id>/ origins");
88
+ if (allowedOrigins.length === 0) throw new require_primordials_error.ErrorCtor("allowedOrigins must contain at least one origin; pass ['*'] for development");
89
+ const wrapperName = require_constants_platform.WIN32 ? `${HOST_NAME}.cmd` : `${HOST_NAME}.sh`;
90
+ const wrapperPath = node_path.default.join(wrapperDir, wrapperName);
91
+ if (require_constants_platform.WIN32) writeWrapperWindows(wrapperPath);
92
+ else writeWrapperPosix(wrapperPath);
93
+ const manifest = buildManifest(wrapperPath, allowedOrigins);
94
+ const dirs = chromeManifestDirs();
95
+ const written = [];
96
+ for (const dir of dirs) {
97
+ (0, node_fs.mkdirSync)(dir, { recursive: true });
98
+ const manifestPath = node_path.default.join(dir, `${HOST_NAME}.json`);
99
+ (0, node_fs.writeFileSync)(manifestPath, JSON.stringify(manifest, null, 2) + "\n", "utf8");
100
+ written.push(manifestPath);
101
+ }
102
+ if (require_constants_platform.WIN32 && written[0]) registerWindows(written[0]);
103
+ return {
104
+ manifestPaths: written,
105
+ wrapperPath
106
+ };
107
+ }
108
+ function registerWindows(manifestPath) {
109
+ (0, _socketsecurity_lib_stable_process_spawn_child.spawnSync)("reg", [
110
+ "add",
111
+ `HKCU\\Software\\Google\\Chrome\\NativeMessagingHosts\\${HOST_NAME}`,
112
+ "/ve",
113
+ "/t",
114
+ "REG_SZ",
115
+ "/d",
116
+ manifestPath,
117
+ "/f"
118
+ ], {
119
+ stdio: "ignore",
120
+ shell: require_constants_platform.WIN32
121
+ });
122
+ }
123
+ function stripTypesFlag() {
124
+ return require_constants_node.supportsNodeStripTypesDefault() ? "" : "--strip-types ";
125
+ }
126
+ function writeWrapperPosix(wrapperPath) {
127
+ (0, node_fs.writeFileSync)(wrapperPath, ["#!/bin/sh", `exec "${node_process.default.execPath}" ${stripTypesFlag()}"${HOST_SCRIPT}" "$@"`].join("\n") + "\n", { encoding: "utf8" });
128
+ (0, node_fs.chmodSync)(wrapperPath, 493);
129
+ }
130
+ function writeWrapperWindows(wrapperPath) {
131
+ (0, node_fs.writeFileSync)(wrapperPath, `@echo off\r\n"${node_process.default.execPath}" ${stripTypesFlag()}"${HOST_SCRIPT}" %*\r\n`, { encoding: "utf8" });
132
+ }
133
+
134
+ //#endregion
135
+ exports.HOST_NAME = HOST_NAME;
136
+ exports.MIN_NODE_VERSION_FOR_STRIP_TYPES = MIN_NODE_VERSION_FOR_STRIP_TYPES;
137
+ exports.assertNodeStripTypesSupported = assertNodeStripTypesSupported;
138
+ exports.buildManifest = buildManifest;
139
+ exports.chromeManifestDirs = chromeManifestDirs;
140
+ exports.installNativeHost = installNativeHost;
141
+ exports.registerWindows = registerWindows;
142
+ exports.stripTypesFlag = stripTypesFlag;
143
+ exports.writeWrapperPosix = writeWrapperPosix;
144
+ exports.writeWrapperWindows = writeWrapperWindows;
@@ -0,0 +1,69 @@
1
+ /**
2
+ * @file Token-bucket rate limit for the Chrome native-messaging host. Why this
3
+ * exists: A Chrome extension that has been hijacked (XSS in a content script,
4
+ * a compromised CDN dependency) can call `chrome.runtime.connectNative()` in
5
+ * a tight loop. Without a rate limit, the attacker can request our
6
+ * `get-api-token` message thousands of times a second — useful for scraping
7
+ * tokens from a multi-account user, or for keeping the bearer "fresh" in the
8
+ * page's memory after the user navigates away. The bucket gives each origin
9
+ * (`chrome-extension://<id>/`, passed by Chrome as `process.argv[2]`) a
10
+ * budget. Burst is allowed; sustained hammering is denied with `{ error:
11
+ * 'rate limited' }`. A typing-fast human never sees the limit; a botted
12
+ * extension hits it on its second line of attack. Why in-memory: The NM host
13
+ * is a per-Chrome-launch subprocess — restarting Chrome restarts the bucket.
14
+ * That's exactly what we want: an attacker who can force Chrome to relaunch
15
+ * has bigger problems than rate-limiting. Shape patterned after pilcrow's
16
+ * `ratelimit/limit.go` — minimal, in-memory, LRU-evicts at `maxKeys`. The
17
+ * fleet's `socket-lib` already has a TTL-cache module but it's overkill for
18
+ * this one use case; a 50-line bucket is easier to audit.
19
+ */
20
+ export interface TokenBucketOptions {
21
+ /**
22
+ * How many tokens fit in a single bucket. The first `capacity` requests from
23
+ * an origin pass without blocking; the (capacity + 1)th request only passes
24
+ * if at least one refill interval has elapsed since the last refill
25
+ * checkpoint.
26
+ */
27
+ capacity: number;
28
+ /**
29
+ * How many milliseconds it takes for one token to refill. With `capacity: 60`
30
+ * and `refillIntervalMs: 1000`, an origin gets up to 60 requests of burst
31
+ * plus a steady-state 1 req/s.
32
+ */
33
+ refillIntervalMs: number;
34
+ /**
35
+ * Maximum number of distinct keys (origins) to track at once. When the map
36
+ * fills, the least-recently-touched key is evicted. Caps memory against an
37
+ * attacker that varies the key on every request.
38
+ */
39
+ maxKeys: number;
40
+ }
41
+ export interface BucketEntry {
42
+ tokens: number;
43
+ lastRefillAt: number;
44
+ newer: BucketEntry | undefined;
45
+ older: BucketEntry | undefined;
46
+ key: string;
47
+ }
48
+ export declare class TokenBucketLimiter {
49
+ #private;
50
+ constructor(options: TokenBucketOptions);
51
+ /**
52
+ * Try to consume one token for `key`. Returns `true` when the request is
53
+ * allowed; `false` when the bucket is empty and not enough time has elapsed
54
+ * to refill.
55
+ *
56
+ * `now` is injectable so tests can advance the virtual clock without
57
+ * sleeping. In production callers pass `Date.now()` (the default).
58
+ */
59
+ consume(key: string, now?: number): boolean;
60
+ /**
61
+ * Test-only inspector. Returns the current token count for `key`, or
62
+ * `undefined` if `key` has never been seen.
63
+ */
64
+ peek(key: string): number | undefined;
65
+ /**
66
+ * Test-only inspector. Returns the current number of tracked keys.
67
+ */
68
+ size(): number;
69
+ }