@vibecheckai/cli 2.5.1

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 (415) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +532 -0
  3. package/dist/autopatch/verified-autopatch.d.ts +111 -0
  4. package/dist/autopatch/verified-autopatch.d.ts.map +1 -0
  5. package/dist/autopatch/verified-autopatch.js +503 -0
  6. package/dist/autopatch/verified-autopatch.js.map +1 -0
  7. package/dist/bundles/guardrail-core.js +25799 -0
  8. package/dist/bundles/guardrail-security.js +208687 -0
  9. package/dist/bundles/guardrail-ship.js +2318 -0
  10. package/dist/bundles/index.js +8 -0
  11. package/dist/commands/autopilot-decision.d.ts +24 -0
  12. package/dist/commands/autopilot-decision.d.ts.map +1 -0
  13. package/dist/commands/autopilot-decision.js +304 -0
  14. package/dist/commands/autopilot-decision.js.map +1 -0
  15. package/dist/commands/autopilot.d.ts +33 -0
  16. package/dist/commands/autopilot.d.ts.map +1 -0
  17. package/dist/commands/autopilot.js +1539 -0
  18. package/dist/commands/autopilot.js.map +1 -0
  19. package/dist/commands/baseline.d.ts +7 -0
  20. package/dist/commands/baseline.d.ts.map +1 -0
  21. package/dist/commands/baseline.js +79 -0
  22. package/dist/commands/baseline.js.map +1 -0
  23. package/dist/commands/cache.d.ts +13 -0
  24. package/dist/commands/cache.d.ts.map +1 -0
  25. package/dist/commands/cache.js +165 -0
  26. package/dist/commands/cache.js.map +1 -0
  27. package/dist/commands/checkpoint.d.ts +8 -0
  28. package/dist/commands/checkpoint.d.ts.map +1 -0
  29. package/dist/commands/checkpoint.js +35 -0
  30. package/dist/commands/checkpoint.js.map +1 -0
  31. package/dist/commands/context.d.ts +8 -0
  32. package/dist/commands/context.d.ts.map +1 -0
  33. package/dist/commands/context.js +340 -0
  34. package/dist/commands/context.js.map +1 -0
  35. package/dist/commands/debug.d.ts +78 -0
  36. package/dist/commands/debug.d.ts.map +1 -0
  37. package/dist/commands/debug.js +381 -0
  38. package/dist/commands/debug.js.map +1 -0
  39. package/dist/commands/doctor.d.ts +17 -0
  40. package/dist/commands/doctor.d.ts.map +1 -0
  41. package/dist/commands/doctor.js +226 -0
  42. package/dist/commands/doctor.js.map +1 -0
  43. package/dist/commands/evidence.d.ts +45 -0
  44. package/dist/commands/evidence.d.ts.map +1 -0
  45. package/dist/commands/evidence.js +197 -0
  46. package/dist/commands/evidence.js.map +1 -0
  47. package/dist/commands/explain.d.ts +8 -0
  48. package/dist/commands/explain.d.ts.map +1 -0
  49. package/dist/commands/explain.js +52 -0
  50. package/dist/commands/explain.js.map +1 -0
  51. package/dist/commands/fix-consolidated.d.ts +19 -0
  52. package/dist/commands/fix-consolidated.d.ts.map +1 -0
  53. package/dist/commands/fix-consolidated.js +165 -0
  54. package/dist/commands/fix-consolidated.js.map +1 -0
  55. package/dist/commands/index.d.ts +8 -0
  56. package/dist/commands/index.d.ts.map +1 -0
  57. package/dist/commands/index.js +15 -0
  58. package/dist/commands/index.js.map +1 -0
  59. package/dist/commands/init.d.ts +8 -0
  60. package/dist/commands/init.d.ts.map +1 -0
  61. package/dist/commands/init.js +125 -0
  62. package/dist/commands/init.js.map +1 -0
  63. package/dist/commands/launcher.d.ts +10 -0
  64. package/dist/commands/launcher.d.ts.map +1 -0
  65. package/dist/commands/launcher.js +174 -0
  66. package/dist/commands/launcher.js.map +1 -0
  67. package/dist/commands/on.d.ts +8 -0
  68. package/dist/commands/on.d.ts.map +1 -0
  69. package/dist/commands/on.js +123 -0
  70. package/dist/commands/on.js.map +1 -0
  71. package/dist/commands/preview.d.ts +54 -0
  72. package/dist/commands/preview.d.ts.map +1 -0
  73. package/dist/commands/preview.js +352 -0
  74. package/dist/commands/preview.js.map +1 -0
  75. package/dist/commands/quality/check.d.ts +31 -0
  76. package/dist/commands/quality/check.d.ts.map +1 -0
  77. package/dist/commands/quality/check.js +242 -0
  78. package/dist/commands/quality/check.js.map +1 -0
  79. package/dist/commands/quality/index.d.ts +8 -0
  80. package/dist/commands/quality/index.d.ts.map +1 -0
  81. package/dist/commands/quality/index.js +14 -0
  82. package/dist/commands/quality/index.js.map +1 -0
  83. package/dist/commands/quality/setup-quality.d.ts +23 -0
  84. package/dist/commands/quality/setup-quality.d.ts.map +1 -0
  85. package/dist/commands/quality/setup-quality.js +452 -0
  86. package/dist/commands/quality/setup-quality.js.map +1 -0
  87. package/dist/commands/quality/tidy.d.ts +41 -0
  88. package/dist/commands/quality/tidy.d.ts.map +1 -0
  89. package/dist/commands/quality/tidy.js +466 -0
  90. package/dist/commands/quality/tidy.js.map +1 -0
  91. package/dist/commands/quality/utils.d.ts +73 -0
  92. package/dist/commands/quality/utils.d.ts.map +1 -0
  93. package/dist/commands/quality/utils.js +158 -0
  94. package/dist/commands/quality/utils.js.map +1 -0
  95. package/dist/commands/replay.d.ts +8 -0
  96. package/dist/commands/replay.d.ts.map +1 -0
  97. package/dist/commands/replay.js +52 -0
  98. package/dist/commands/replay.js.map +1 -0
  99. package/dist/commands/scan-consolidated.d.ts +61 -0
  100. package/dist/commands/scan-consolidated.d.ts.map +1 -0
  101. package/dist/commands/scan-consolidated.js +243 -0
  102. package/dist/commands/scan-consolidated.js.map +1 -0
  103. package/dist/commands/scan-secrets.d.ts +47 -0
  104. package/dist/commands/scan-secrets.d.ts.map +1 -0
  105. package/dist/commands/scan-secrets.js +225 -0
  106. package/dist/commands/scan-secrets.js.map +1 -0
  107. package/dist/commands/scan-vulnerabilities-enhanced.d.ts +41 -0
  108. package/dist/commands/scan-vulnerabilities-enhanced.d.ts.map +1 -0
  109. package/dist/commands/scan-vulnerabilities-enhanced.js +368 -0
  110. package/dist/commands/scan-vulnerabilities-enhanced.js.map +1 -0
  111. package/dist/commands/scan-vulnerabilities-osv.d.ts +58 -0
  112. package/dist/commands/scan-vulnerabilities-osv.d.ts.map +1 -0
  113. package/dist/commands/scan-vulnerabilities-osv.js +716 -0
  114. package/dist/commands/scan-vulnerabilities-osv.js.map +1 -0
  115. package/dist/commands/scan-vulnerabilities.d.ts +32 -0
  116. package/dist/commands/scan-vulnerabilities.d.ts.map +1 -0
  117. package/dist/commands/scan-vulnerabilities.js +283 -0
  118. package/dist/commands/scan-vulnerabilities.js.map +1 -0
  119. package/dist/commands/secrets-allowlist.d.ts +7 -0
  120. package/dist/commands/secrets-allowlist.d.ts.map +1 -0
  121. package/dist/commands/secrets-allowlist.js +85 -0
  122. package/dist/commands/secrets-allowlist.js.map +1 -0
  123. package/dist/commands/ship-consolidated.d.ts +58 -0
  124. package/dist/commands/ship-consolidated.d.ts.map +1 -0
  125. package/dist/commands/ship-consolidated.js +515 -0
  126. package/dist/commands/ship-consolidated.js.map +1 -0
  127. package/dist/commands/stats.d.ts +8 -0
  128. package/dist/commands/stats.d.ts.map +1 -0
  129. package/dist/commands/stats.js +134 -0
  130. package/dist/commands/stats.js.map +1 -0
  131. package/dist/commands/upgrade.d.ts +8 -0
  132. package/dist/commands/upgrade.d.ts.map +1 -0
  133. package/dist/commands/upgrade.js +30 -0
  134. package/dist/commands/upgrade.js.map +1 -0
  135. package/dist/fix/analytics.d.ts +121 -0
  136. package/dist/fix/analytics.d.ts.map +1 -0
  137. package/dist/fix/analytics.js +289 -0
  138. package/dist/fix/analytics.js.map +1 -0
  139. package/dist/fix/applicator.d.ts +44 -0
  140. package/dist/fix/applicator.d.ts.map +1 -0
  141. package/dist/fix/applicator.js +144 -0
  142. package/dist/fix/applicator.js.map +1 -0
  143. package/dist/fix/audit.d.ts +61 -0
  144. package/dist/fix/audit.d.ts.map +1 -0
  145. package/dist/fix/audit.js +149 -0
  146. package/dist/fix/audit.js.map +1 -0
  147. package/dist/fix/backup.d.ts +38 -0
  148. package/dist/fix/backup.d.ts.map +1 -0
  149. package/dist/fix/backup.js +154 -0
  150. package/dist/fix/backup.js.map +1 -0
  151. package/dist/fix/config.d.ts +78 -0
  152. package/dist/fix/config.d.ts.map +1 -0
  153. package/dist/fix/config.js +200 -0
  154. package/dist/fix/config.js.map +1 -0
  155. package/dist/fix/engine.d.ts +55 -0
  156. package/dist/fix/engine.d.ts.map +1 -0
  157. package/dist/fix/engine.js +285 -0
  158. package/dist/fix/engine.js.map +1 -0
  159. package/dist/fix/impact.d.ts +74 -0
  160. package/dist/fix/impact.d.ts.map +1 -0
  161. package/dist/fix/impact.js +281 -0
  162. package/dist/fix/impact.js.map +1 -0
  163. package/dist/fix/index.d.ts +5 -0
  164. package/dist/fix/index.d.ts.map +1 -0
  165. package/dist/fix/index.js +12 -0
  166. package/dist/fix/index.js.map +1 -0
  167. package/dist/fix/interactive.d.ts +22 -0
  168. package/dist/fix/interactive.d.ts.map +1 -0
  169. package/dist/fix/interactive.js +172 -0
  170. package/dist/fix/interactive.js.map +1 -0
  171. package/dist/fix/learning.d.ts +109 -0
  172. package/dist/fix/learning.d.ts.map +1 -0
  173. package/dist/fix/learning.js +296 -0
  174. package/dist/fix/learning.js.map +1 -0
  175. package/dist/fix/metrics.d.ts +106 -0
  176. package/dist/fix/metrics.d.ts.map +1 -0
  177. package/dist/fix/metrics.js +138 -0
  178. package/dist/fix/metrics.js.map +1 -0
  179. package/dist/fix/parallel.d.ts +69 -0
  180. package/dist/fix/parallel.d.ts.map +1 -0
  181. package/dist/fix/parallel.js +203 -0
  182. package/dist/fix/parallel.js.map +1 -0
  183. package/dist/fix/report.d.ts +40 -0
  184. package/dist/fix/report.d.ts.map +1 -0
  185. package/dist/fix/report.js +212 -0
  186. package/dist/fix/report.js.map +1 -0
  187. package/dist/fix/strategy.d.ts +53 -0
  188. package/dist/fix/strategy.d.ts.map +1 -0
  189. package/dist/fix/strategy.js +143 -0
  190. package/dist/fix/strategy.js.map +1 -0
  191. package/dist/fix/templates.d.ts +58 -0
  192. package/dist/fix/templates.d.ts.map +1 -0
  193. package/dist/fix/templates.js +259 -0
  194. package/dist/fix/templates.js.map +1 -0
  195. package/dist/fix/testing.d.ts +68 -0
  196. package/dist/fix/testing.d.ts.map +1 -0
  197. package/dist/fix/testing.js +245 -0
  198. package/dist/fix/testing.js.map +1 -0
  199. package/dist/fix/validation.d.ts +71 -0
  200. package/dist/fix/validation.d.ts.map +1 -0
  201. package/dist/fix/validation.js +267 -0
  202. package/dist/fix/validation.js.map +1 -0
  203. package/dist/fix/visualization.d.ts +73 -0
  204. package/dist/fix/visualization.d.ts.map +1 -0
  205. package/dist/fix/visualization.js +243 -0
  206. package/dist/fix/visualization.js.map +1 -0
  207. package/dist/formatters/index.d.ts +6 -0
  208. package/dist/formatters/index.d.ts.map +1 -0
  209. package/dist/formatters/index.js +11 -0
  210. package/dist/formatters/index.js.map +1 -0
  211. package/dist/formatters/sarif-enhanced.d.ts +78 -0
  212. package/dist/formatters/sarif-enhanced.d.ts.map +1 -0
  213. package/dist/formatters/sarif-enhanced.js +144 -0
  214. package/dist/formatters/sarif-enhanced.js.map +1 -0
  215. package/dist/formatters/sarif-v2.d.ts +121 -0
  216. package/dist/formatters/sarif-v2.d.ts.map +1 -0
  217. package/dist/formatters/sarif-v2.js +356 -0
  218. package/dist/formatters/sarif-v2.js.map +1 -0
  219. package/dist/formatters/sarif.d.ts +72 -0
  220. package/dist/formatters/sarif.d.ts.map +1 -0
  221. package/dist/formatters/sarif.js +146 -0
  222. package/dist/formatters/sarif.js.map +1 -0
  223. package/dist/index.d.ts +61 -0
  224. package/dist/index.d.ts.map +1 -0
  225. package/dist/index.js +4455 -0
  226. package/dist/index.js.map +1 -0
  227. package/dist/init/ci-generator.d.ts +18 -0
  228. package/dist/init/ci-generator.d.ts.map +1 -0
  229. package/dist/init/ci-generator.js +317 -0
  230. package/dist/init/ci-generator.js.map +1 -0
  231. package/dist/init/detect-framework.d.ts +15 -0
  232. package/dist/init/detect-framework.d.ts.map +1 -0
  233. package/dist/init/detect-framework.js +301 -0
  234. package/dist/init/detect-framework.js.map +1 -0
  235. package/dist/init/hooks-installer.d.ts +22 -0
  236. package/dist/init/hooks-installer.d.ts.map +1 -0
  237. package/dist/init/hooks-installer.js +310 -0
  238. package/dist/init/hooks-installer.js.map +1 -0
  239. package/dist/init/index.d.ts +8 -0
  240. package/dist/init/index.d.ts.map +1 -0
  241. package/dist/init/index.js +22 -0
  242. package/dist/init/index.js.map +1 -0
  243. package/dist/init/templates.d.ts +401 -0
  244. package/dist/init/templates.d.ts.map +1 -0
  245. package/dist/init/templates.js +240 -0
  246. package/dist/init/templates.js.map +1 -0
  247. package/dist/mcp/server.d.ts +12 -0
  248. package/dist/mcp/server.d.ts.map +1 -0
  249. package/dist/mcp/server.js +42 -0
  250. package/dist/mcp/server.js.map +1 -0
  251. package/dist/mcp/telemetry.d.ts +40 -0
  252. package/dist/mcp/telemetry.d.ts.map +1 -0
  253. package/dist/mcp/telemetry.js +98 -0
  254. package/dist/mcp/telemetry.js.map +1 -0
  255. package/dist/reality/no-dead-buttons/button-sweep-generator.d.ts +32 -0
  256. package/dist/reality/no-dead-buttons/button-sweep-generator.d.ts.map +1 -0
  257. package/dist/reality/no-dead-buttons/button-sweep-generator.js +236 -0
  258. package/dist/reality/no-dead-buttons/button-sweep-generator.js.map +1 -0
  259. package/dist/reality/no-dead-buttons/index.d.ts +11 -0
  260. package/dist/reality/no-dead-buttons/index.d.ts.map +1 -0
  261. package/dist/reality/no-dead-buttons/index.js +18 -0
  262. package/dist/reality/no-dead-buttons/index.js.map +1 -0
  263. package/dist/reality/no-dead-buttons/static-scanner.d.ts +34 -0
  264. package/dist/reality/no-dead-buttons/static-scanner.d.ts.map +1 -0
  265. package/dist/reality/no-dead-buttons/static-scanner.js +230 -0
  266. package/dist/reality/no-dead-buttons/static-scanner.js.map +1 -0
  267. package/dist/reality/reality-graph.d.ts +192 -0
  268. package/dist/reality/reality-graph.d.ts.map +1 -0
  269. package/dist/reality/reality-graph.js +600 -0
  270. package/dist/reality/reality-graph.js.map +1 -0
  271. package/dist/reality/reality-runner.d.ts +89 -0
  272. package/dist/reality/reality-runner.d.ts.map +1 -0
  273. package/dist/reality/reality-runner.js +540 -0
  274. package/dist/reality/reality-runner.js.map +1 -0
  275. package/dist/reality/receipt-generator.d.ts +152 -0
  276. package/dist/reality/receipt-generator.d.ts.map +1 -0
  277. package/dist/reality/receipt-generator.js +495 -0
  278. package/dist/reality/receipt-generator.js.map +1 -0
  279. package/dist/reality/runtime-tracer.d.ts +75 -0
  280. package/dist/reality/runtime-tracer.d.ts.map +1 -0
  281. package/dist/reality/runtime-tracer.js +109 -0
  282. package/dist/reality/runtime-tracer.js.map +1 -0
  283. package/dist/runtime/auth-utils.d.ts +43 -0
  284. package/dist/runtime/auth-utils.d.ts.map +1 -0
  285. package/dist/runtime/auth-utils.js +130 -0
  286. package/dist/runtime/auth-utils.js.map +1 -0
  287. package/dist/runtime/cli-errors.d.ts +38 -0
  288. package/dist/runtime/cli-errors.d.ts.map +1 -0
  289. package/dist/runtime/cli-errors.js +354 -0
  290. package/dist/runtime/cli-errors.js.map +1 -0
  291. package/dist/runtime/client.d.ts +74 -0
  292. package/dist/runtime/client.d.ts.map +1 -0
  293. package/dist/runtime/client.js +222 -0
  294. package/dist/runtime/client.js.map +1 -0
  295. package/dist/runtime/creds.d.ts +48 -0
  296. package/dist/runtime/creds.d.ts.map +1 -0
  297. package/dist/runtime/creds.js +245 -0
  298. package/dist/runtime/creds.js.map +1 -0
  299. package/dist/runtime/exit-codes.d.ts +49 -0
  300. package/dist/runtime/exit-codes.d.ts.map +1 -0
  301. package/dist/runtime/exit-codes.js +93 -0
  302. package/dist/runtime/exit-codes.js.map +1 -0
  303. package/dist/runtime/index.d.ts +9 -0
  304. package/dist/runtime/index.d.ts.map +1 -0
  305. package/dist/runtime/index.js +25 -0
  306. package/dist/runtime/index.js.map +1 -0
  307. package/dist/runtime/json-output.d.ts +42 -0
  308. package/dist/runtime/json-output.d.ts.map +1 -0
  309. package/dist/runtime/json-output.js +59 -0
  310. package/dist/runtime/json-output.js.map +1 -0
  311. package/dist/runtime/owner-mode.d.ts +48 -0
  312. package/dist/runtime/owner-mode.d.ts.map +1 -0
  313. package/dist/runtime/owner-mode.js +284 -0
  314. package/dist/runtime/owner-mode.js.map +1 -0
  315. package/dist/runtime/semver.d.ts +37 -0
  316. package/dist/runtime/semver.d.ts.map +1 -0
  317. package/dist/runtime/semver.js +110 -0
  318. package/dist/runtime/semver.js.map +1 -0
  319. package/dist/scan/dead-ui-detector.d.ts +48 -0
  320. package/dist/scan/dead-ui-detector.d.ts.map +1 -0
  321. package/dist/scan/dead-ui-detector.js +170 -0
  322. package/dist/scan/dead-ui-detector.js.map +1 -0
  323. package/dist/scan/playwright-sweep.d.ts +40 -0
  324. package/dist/scan/playwright-sweep.d.ts.map +1 -0
  325. package/dist/scan/playwright-sweep.js +216 -0
  326. package/dist/scan/playwright-sweep.js.map +1 -0
  327. package/dist/scan/proof-bundle.d.ts +25 -0
  328. package/dist/scan/proof-bundle.d.ts.map +1 -0
  329. package/dist/scan/proof-bundle.js +203 -0
  330. package/dist/scan/proof-bundle.js.map +1 -0
  331. package/dist/scan/proof-graph.d.ts +59 -0
  332. package/dist/scan/proof-graph.d.ts.map +1 -0
  333. package/dist/scan/proof-graph.js +64 -0
  334. package/dist/scan/proof-graph.js.map +1 -0
  335. package/dist/scan/reality-sniff.d.ts +56 -0
  336. package/dist/scan/reality-sniff.d.ts.map +1 -0
  337. package/dist/scan/reality-sniff.js +200 -0
  338. package/dist/scan/reality-sniff.js.map +1 -0
  339. package/dist/scan/structural-verifier.d.ts +20 -0
  340. package/dist/scan/structural-verifier.d.ts.map +1 -0
  341. package/dist/scan/structural-verifier.js +112 -0
  342. package/dist/scan/structural-verifier.js.map +1 -0
  343. package/dist/scan/verification-engine.d.ts +47 -0
  344. package/dist/scan/verification-engine.d.ts.map +1 -0
  345. package/dist/scan/verification-engine.js +141 -0
  346. package/dist/scan/verification-engine.js.map +1 -0
  347. package/dist/scanner/baseline.d.ts +52 -0
  348. package/dist/scanner/baseline.d.ts.map +1 -0
  349. package/dist/scanner/baseline.js +85 -0
  350. package/dist/scanner/baseline.js.map +1 -0
  351. package/dist/scanner/incremental.d.ts +30 -0
  352. package/dist/scanner/incremental.d.ts.map +1 -0
  353. package/dist/scanner/incremental.js +82 -0
  354. package/dist/scanner/incremental.js.map +1 -0
  355. package/dist/scanner/index.d.ts +8 -0
  356. package/dist/scanner/index.d.ts.map +1 -0
  357. package/dist/scanner/index.js +15 -0
  358. package/dist/scanner/index.js.map +1 -0
  359. package/dist/scanner/parallel.d.ts +43 -0
  360. package/dist/scanner/parallel.d.ts.map +1 -0
  361. package/dist/scanner/parallel.js +99 -0
  362. package/dist/scanner/parallel.js.map +1 -0
  363. package/dist/scanner/placeholder-detector.d.ts +56 -0
  364. package/dist/scanner/placeholder-detector.d.ts.map +1 -0
  365. package/dist/scanner/placeholder-detector.js +220 -0
  366. package/dist/scanner/placeholder-detector.js.map +1 -0
  367. package/dist/scanner/route-detector.d.ts +100 -0
  368. package/dist/scanner/route-detector.d.ts.map +1 -0
  369. package/dist/scanner/route-detector.js +455 -0
  370. package/dist/scanner/route-detector.js.map +1 -0
  371. package/dist/scanner/scoring.d.ts +67 -0
  372. package/dist/scanner/scoring.d.ts.map +1 -0
  373. package/dist/scanner/scoring.js +284 -0
  374. package/dist/scanner/scoring.js.map +1 -0
  375. package/dist/ship-baseline.d.ts +56 -0
  376. package/dist/ship-baseline.d.ts.map +1 -0
  377. package/dist/ship-baseline.js +194 -0
  378. package/dist/ship-baseline.js.map +1 -0
  379. package/dist/ship-config.d.ts +91 -0
  380. package/dist/ship-config.d.ts.map +1 -0
  381. package/dist/ship-config.js +133 -0
  382. package/dist/ship-config.js.map +1 -0
  383. package/dist/ship-data-loader.d.ts +70 -0
  384. package/dist/ship-data-loader.d.ts.map +1 -0
  385. package/dist/ship-data-loader.js +301 -0
  386. package/dist/ship-data-loader.js.map +1 -0
  387. package/dist/standalone.d.ts +1 -0
  388. package/dist/standalone.d.ts.map +1 -0
  389. package/dist/standalone.js +1 -0
  390. package/dist/standalone.js.map +1 -0
  391. package/dist/truth-pack/index.d.ts +102 -0
  392. package/dist/truth-pack/index.d.ts.map +1 -0
  393. package/dist/truth-pack/index.js +694 -0
  394. package/dist/truth-pack/index.js.map +1 -0
  395. package/dist/ui/frame.d.ts +68 -0
  396. package/dist/ui/frame.d.ts.map +1 -0
  397. package/dist/ui/frame.js +165 -0
  398. package/dist/ui/frame.js.map +1 -0
  399. package/dist/ui/index.d.ts +5 -0
  400. package/dist/ui/index.d.ts.map +1 -0
  401. package/dist/ui/index.js +16 -0
  402. package/dist/ui/index.js.map +1 -0
  403. package/dist/ui.d.ts +36 -0
  404. package/dist/ui.d.ts.map +1 -0
  405. package/dist/ui.js +45 -0
  406. package/dist/ui.js.map +1 -0
  407. package/dist/utils/ai-helpers.d.ts +72 -0
  408. package/dist/utils/ai-helpers.d.ts.map +1 -0
  409. package/dist/utils/ai-helpers.js +339 -0
  410. package/dist/utils/ai-helpers.js.map +1 -0
  411. package/dist/utils/validation.d.ts +34 -0
  412. package/dist/utils/validation.d.ts.map +1 -0
  413. package/dist/utils/validation.js +160 -0
  414. package/dist/utils/validation.js.map +1 -0
  415. package/package.json +66 -0
@@ -0,0 +1,354 @@
1
+ "use strict";
2
+ /**
3
+ * Shared CLI error formatting utilities
4
+ * Provides user-friendly, actionable error messages with optional debug information
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.isDebugEnabled = isDebugEnabled;
8
+ exports.redactSecrets = redactSecrets;
9
+ exports.formatCliError = formatCliError;
10
+ exports.classifyError = classifyError;
11
+ const colors = {
12
+ reset: '\x1b[0m',
13
+ red: '\x1b[31m',
14
+ yellow: '\x1b[33m',
15
+ cyan: '\x1b[36m',
16
+ green: '\x1b[32m',
17
+ bold: '\x1b[1m',
18
+ dim: '\x1b[2m',
19
+ };
20
+ const c = {
21
+ red: (text) => `${colors.red}${text}${colors.reset}`,
22
+ yellow: (text) => `${colors.yellow}${text}${colors.reset}`,
23
+ cyan: (text) => `${colors.cyan}${text}${colors.reset}`,
24
+ green: (text) => `${colors.green}${text}${colors.reset}`,
25
+ bold: (text) => `${colors.bold}${text}${colors.reset}`,
26
+ dim: (text) => `${colors.dim}${text}${colors.reset}`,
27
+ };
28
+ /**
29
+ * Check if debug mode is enabled from argv or environment
30
+ */
31
+ function isDebugEnabled(argv) {
32
+ // Support both array (process.argv) and object (parsed args)
33
+ if (Array.isArray(argv)) {
34
+ return argv.includes('--debug');
35
+ }
36
+ if (argv && typeof argv === 'object' && !Array.isArray(argv)) {
37
+ return !!argv.debug || !!argv.verbose;
38
+ }
39
+ return !!(process.env.DEBUG ||
40
+ process.env.GUARDRAIL_DEBUG ||
41
+ process.argv.includes('--debug'));
42
+ }
43
+ /**
44
+ * Redact secrets from text to prevent leaking API keys, tokens, etc.
45
+ */
46
+ function redactSecrets(text) {
47
+ if (!text || typeof text !== 'string') {
48
+ return String(text || '');
49
+ }
50
+ let redacted = text;
51
+ // Redact API keys (apikey=, api_key=, apiKey=)
52
+ redacted = redacted.replace(/(?:apikey|api_key|apiKey)\s*=\s*([^\s"'&;]+)/gi, (match, key) => {
53
+ if (key.length > 8) {
54
+ return match.replace(key, key.substring(0, 4) + '***' + key.substring(key.length - 4));
55
+ }
56
+ return match.replace(key, '***');
57
+ });
58
+ // Redact tokens (token=, access_token=, bearer tokens)
59
+ redacted = redacted.replace(/(?:token|access_token|refresh_token)\s*=\s*([^\s"'&;]+)/gi, (match, token) => {
60
+ if (token.length > 8) {
61
+ return match.replace(token, token.substring(0, 4) + '***' + token.substring(token.length - 4));
62
+ }
63
+ return match.replace(token, '***');
64
+ });
65
+ // Redact Authorization headers (Authorization: Bearer, Authorization: Basic)
66
+ redacted = redacted.replace(/Authorization:\s*(?:Bearer|Basic)\s+([^\s"'&;]+)/gi, (match, auth) => {
67
+ if (auth.length > 8) {
68
+ return match.replace(auth, auth.substring(0, 4) + '***' + auth.substring(auth.length - 4));
69
+ }
70
+ return match.replace(auth, '***');
71
+ });
72
+ // Redact common secret patterns
73
+ const secretPatterns = [
74
+ /(?:password|pwd|passwd)\s*=\s*([^\s"'&;]+)/gi,
75
+ /(?:secret|secret_key)\s*=\s*([^\s"'&;]+)/gi,
76
+ /(?:private[_-]?key)\s*=\s*([^\s"'&;]+)/gi,
77
+ ];
78
+ for (const pattern of secretPatterns) {
79
+ redacted = redacted.replace(pattern, (match, secret) => {
80
+ return match.replace(secret, '***REDACTED***');
81
+ });
82
+ }
83
+ return redacted;
84
+ }
85
+ /**
86
+ * Extract file path from error message
87
+ */
88
+ function extractPathFromMessage(message) {
89
+ const pathMatch = message.match(/['"]([^'"]+)['"]/);
90
+ return pathMatch ? pathMatch[1] : null;
91
+ }
92
+ /**
93
+ * Determine error type and extract context
94
+ */
95
+ function classifyError(err) {
96
+ const error = err instanceof Error ? err : new Error(String(err));
97
+ const message = error.message || String(err);
98
+ const code = error.code || error.statusCode || error.name;
99
+ // API connection errors
100
+ if (code === 'ECONNREFUSED' ||
101
+ code === 'ECONNRESET' ||
102
+ code === 'ETIMEDOUT' ||
103
+ code === 'ENOTFOUND' ||
104
+ code === 'ENETUNREACH' ||
105
+ error.name === 'NetworkError' ||
106
+ message.includes('connect') ||
107
+ message.includes('network') ||
108
+ message.includes('timeout') ||
109
+ message.includes('ECONN')) {
110
+ return {
111
+ type: 'API_CONNECTION',
112
+ headline: 'Cannot connect to Guardrail API',
113
+ whatHappened: 'Failed to establish connection to the Guardrail service',
114
+ why: [
115
+ 'Your internet connection may be down',
116
+ 'The Guardrail service may be temporarily unavailable',
117
+ 'A firewall or proxy may be blocking the connection',
118
+ ],
119
+ whatToDo: [
120
+ 'Check your internet connection',
121
+ 'Verify the service status at https://status.getguardrail.io',
122
+ 'Check firewall/proxy settings if behind a corporate network',
123
+ 'Try again in a few moments',
124
+ ],
125
+ };
126
+ }
127
+ // File not found errors
128
+ if (code === 'ENOENT' ||
129
+ message.includes('not found') ||
130
+ message.includes('Cannot find') ||
131
+ message.includes('does not exist')) {
132
+ const path = error.path || extractPathFromMessage(message);
133
+ return {
134
+ type: 'FILE_NOT_FOUND',
135
+ headline: 'File or directory not found',
136
+ whatHappened: `The requested file or directory could not be located${path ? `: ${path}` : ''}`,
137
+ why: [
138
+ 'The file may have been moved or deleted',
139
+ 'The path may be incorrect',
140
+ 'You may not have the required files in your project',
141
+ ],
142
+ whatToDo: [
143
+ `Verify the path is correct${path ? `: ${path}` : ''}`,
144
+ 'Check if the file exists in your project',
145
+ 'Ensure you are running the command from the correct directory',
146
+ ],
147
+ };
148
+ }
149
+ // Permission errors
150
+ if (code === 'EACCES' ||
151
+ code === 'EPERM' ||
152
+ message.includes('permission') ||
153
+ message.includes('access denied') ||
154
+ message.includes('Permission denied')) {
155
+ return {
156
+ type: 'PERMISSION',
157
+ headline: 'Permission denied',
158
+ whatHappened: 'You do not have permission to perform this operation',
159
+ why: [
160
+ 'The file or directory may be owned by another user',
161
+ 'Your user account may not have the required privileges',
162
+ 'The file system may have restricted access',
163
+ ],
164
+ whatToDo: [
165
+ 'Check file permissions: `ls -la` (Unix) or check Properties (Windows)',
166
+ 'Run with appropriate user privileges',
167
+ 'Contact your system administrator if needed',
168
+ ],
169
+ };
170
+ }
171
+ // Configuration errors
172
+ if (code === 'EINVAL' ||
173
+ message.includes('invalid') ||
174
+ message.includes('configuration') ||
175
+ message.includes('config') ||
176
+ message.includes('missing') ||
177
+ error.name === 'ValidationError') {
178
+ return {
179
+ type: 'CONFIGURATION',
180
+ headline: 'Configuration error',
181
+ whatHappened: 'The configuration is invalid or missing required settings',
182
+ why: [
183
+ 'Required configuration values may be missing',
184
+ 'The configuration file may be malformed',
185
+ 'Environment variables may not be set correctly',
186
+ ],
187
+ whatToDo: [
188
+ 'Check your .env file or configuration file',
189
+ 'Verify all required environment variables are set',
190
+ 'Run `guardrail login` if authentication is required',
191
+ 'See documentation: https://docs.getguardrail.io',
192
+ ],
193
+ };
194
+ }
195
+ // Authentication/Authorization errors
196
+ if (code === 401 ||
197
+ code === 'UNAUTHORIZED' ||
198
+ code === 403 ||
199
+ code === 'FORBIDDEN' ||
200
+ error.name === 'AuthenticationError' ||
201
+ message.includes('authentication') ||
202
+ message.includes('unauthorized') ||
203
+ message.includes('forbidden')) {
204
+ return {
205
+ type: 'AUTHENTICATION',
206
+ headline: code === 403 || code === 'FORBIDDEN' ? 'Access denied' : 'Authentication failed',
207
+ whatHappened: code === 403 || code === 'FORBIDDEN'
208
+ ? 'You do not have permission to access this resource'
209
+ : 'Your authentication credentials are invalid or expired',
210
+ why: [
211
+ code === 403 || code === 'FORBIDDEN'
212
+ ? 'Your account may not have the required permissions'
213
+ : 'Your API key may be missing, invalid, or expired',
214
+ 'You may need to upgrade your plan for this feature',
215
+ ],
216
+ whatToDo: [
217
+ code === 403 || code === 'FORBIDDEN'
218
+ ? 'Check your account permissions and plan tier'
219
+ : 'Run `guardrail login` to authenticate',
220
+ 'Verify your API key at https://getguardrail.io/settings/keys',
221
+ 'Check if this feature requires a premium plan',
222
+ ],
223
+ };
224
+ }
225
+ // Tier restriction errors
226
+ if (code === 'LIMIT_EXCEEDED' ||
227
+ code === 'FEATURE_NOT_AVAILABLE' ||
228
+ code === 'TIER_RESTRICTION' ||
229
+ message.includes('tier') ||
230
+ message.includes('upgrade') ||
231
+ message.includes('premium') ||
232
+ message.includes('limit')) {
233
+ return {
234
+ type: 'TIER_RESTRICTION',
235
+ headline: 'Feature not available on your plan',
236
+ whatHappened: 'This feature requires a higher tier subscription',
237
+ why: [
238
+ 'Your current plan does not include this feature',
239
+ 'You may have exceeded your usage limits',
240
+ ],
241
+ whatToDo: [
242
+ 'Visit https://getguardrail.io/pricing to upgrade',
243
+ 'Check your usage limits: `guardrail status`',
244
+ 'Contact support if you believe this is an error',
245
+ ],
246
+ };
247
+ }
248
+ // Generic error
249
+ return {
250
+ type: 'UNKNOWN',
251
+ headline: 'An error occurred',
252
+ whatHappened: message || 'An unexpected error occurred',
253
+ why: ['An unexpected error occurred during execution'],
254
+ whatToDo: [
255
+ 'Check the error message above for details',
256
+ 'Run with --debug for more information',
257
+ 'If the issue persists, contact support',
258
+ ],
259
+ };
260
+ }
261
+ /**
262
+ * Format a CLI error with user-friendly structure
263
+ */
264
+ function formatCliError(err, options = {}) {
265
+ const { debug = false, context = '' } = options;
266
+ const debugMode = isDebugEnabled(debug !== false ? debug : process.argv);
267
+ const classification = classifyError(err);
268
+ const error = err instanceof Error ? err : new Error(String(err));
269
+ // Build the error message
270
+ const lines = [];
271
+ // Headline
272
+ lines.push(c.red(c.bold(`✗ ${classification.headline}`)));
273
+ lines.push('');
274
+ // What happened
275
+ lines.push(c.bold('What happened:'));
276
+ lines.push(` ${classification.whatHappened}`);
277
+ if (context) {
278
+ lines.push(` ${c.dim(`Context: ${context}`)}`);
279
+ }
280
+ lines.push('');
281
+ // Why it happened
282
+ if (classification.why && classification.why.length > 0) {
283
+ lines.push(c.bold('Why it happened:'));
284
+ classification.why.forEach((reason) => {
285
+ lines.push(` • ${reason}`);
286
+ });
287
+ lines.push('');
288
+ }
289
+ // What to do next
290
+ if (classification.whatToDo && classification.whatToDo.length > 0) {
291
+ lines.push(c.bold('What to do next:'));
292
+ classification.whatToDo.slice(0, 3).forEach((action) => {
293
+ lines.push(` • ${action}`);
294
+ });
295
+ lines.push('');
296
+ }
297
+ // Debug information
298
+ if (debugMode) {
299
+ lines.push(c.dim('─'.repeat(60)));
300
+ lines.push(c.dim(c.bold('Debug Information:')));
301
+ lines.push('');
302
+ // Stack trace
303
+ if (error.stack) {
304
+ lines.push(c.dim('Stack trace:'));
305
+ const redactedStack = redactSecrets(error.stack);
306
+ lines.push(c.dim(redactedStack));
307
+ lines.push('');
308
+ }
309
+ // Raw error details
310
+ lines.push(c.dim('Error details:'));
311
+ const errorDetails = {
312
+ name: error.name,
313
+ code: error.code || error.statusCode,
314
+ message: error.message,
315
+ };
316
+ if (error.response) {
317
+ errorDetails.response = {
318
+ status: error.response.status,
319
+ statusText: error.response.statusText,
320
+ body: redactSecrets(typeof error.response.body === 'string'
321
+ ? error.response.body
322
+ : JSON.stringify(error.response.body || {})),
323
+ };
324
+ }
325
+ if (error.body) {
326
+ errorDetails.body = redactSecrets(typeof error.body === 'string' ? error.body : JSON.stringify(error.body || {}));
327
+ }
328
+ const redactedDetails = redactSecrets(JSON.stringify(errorDetails, null, 2));
329
+ lines.push(c.dim(redactedDetails));
330
+ }
331
+ else {
332
+ lines.push(c.dim('💡 Run with --debug for detailed error information'));
333
+ }
334
+ // Determine exit code based on error type
335
+ let exitCode = 1; // Default: verification failed
336
+ if (classification.type === 'FILE_NOT_FOUND' ||
337
+ classification.type === 'CONFIGURATION' ||
338
+ classification.type === 'PERMISSION' ||
339
+ classification.type === 'AUTHENTICATION') {
340
+ exitCode = 2; // User error
341
+ }
342
+ else if (classification.type === 'TIER_RESTRICTION') {
343
+ exitCode = 2; // User error (need to upgrade)
344
+ }
345
+ else if (classification.type === 'API_CONNECTION') {
346
+ exitCode = 1; // Verification failed (couldn't complete check)
347
+ }
348
+ return {
349
+ exitCode,
350
+ message: lines.join('\n'),
351
+ type: classification.type,
352
+ };
353
+ }
354
+ //# sourceMappingURL=cli-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-errors.js","sourceRoot":"","sources":["../../src/runtime/cli-errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Enterprise API Client
3
+ * - Real entitlement validation (no key prefix parsing)
4
+ * - Proper timeouts and retries with exponential backoff
5
+ * - User-agent for tracking
6
+ * - Circuit breaker pattern for resilience
7
+ */
8
+ import { Tier } from './creds';
9
+ export interface AuthValidateRequest {
10
+ apiKey: string;
11
+ client: {
12
+ version: string;
13
+ os: string;
14
+ arch: string;
15
+ };
16
+ }
17
+ export interface AuthValidateResponse {
18
+ ok: boolean;
19
+ tier: Tier;
20
+ email?: string;
21
+ entitlements?: string[];
22
+ expiresAt?: string;
23
+ issuedAt?: string;
24
+ reason?: string;
25
+ }
26
+ export interface ValidateResponse {
27
+ ok: boolean;
28
+ tier: Tier;
29
+ email?: string;
30
+ entitlements?: string[];
31
+ expiresAt?: string;
32
+ issuedAt?: string;
33
+ error?: string;
34
+ }
35
+ export interface ClientOptions {
36
+ baseUrl?: string;
37
+ timeout?: number;
38
+ maxRetries?: number;
39
+ }
40
+ /**
41
+ * Validate API key against the enterprise auth endpoint
42
+ * POST /v1/cli/auth/validate with proper request format and retries
43
+ */
44
+ export declare function validateApiKey(opts: {
45
+ apiKey: string;
46
+ baseUrl?: string;
47
+ timeout?: number;
48
+ maxRetries?: number;
49
+ }): Promise<ValidateResponse>;
50
+ /**
51
+ * Legacy validate function - wraps new validateApiKey for backwards compatibility
52
+ */
53
+ export declare function validateCredentials(opts: {
54
+ apiKey?: string;
55
+ accessToken?: string;
56
+ baseUrl?: string;
57
+ timeout?: number;
58
+ }): Promise<ValidateResponse>;
59
+ /**
60
+ * Refresh access token using refresh token
61
+ */
62
+ export declare function refreshAccessToken(opts: {
63
+ refreshToken: string;
64
+ baseUrl?: string;
65
+ }): Promise<{
66
+ accessToken?: string;
67
+ expiresIn?: number;
68
+ error?: string;
69
+ }>;
70
+ /**
71
+ * Calculate cache expiry (15 minutes from now)
72
+ */
73
+ export declare function getCacheExpiry(minutes?: number): string;
74
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/runtime/client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAG/B,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,IAAI,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAcD;;;GAGG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE;IACzC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA0G5B;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAkD5B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CA0BxE;AAcD;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,MAAW,GAAG,MAAM,CAI3D"}
@@ -0,0 +1,222 @@
1
+ "use strict";
2
+ /**
3
+ * Enterprise API Client
4
+ * - Real entitlement validation (no key prefix parsing)
5
+ * - Proper timeouts and retries with exponential backoff
6
+ * - User-agent for tracking
7
+ * - Circuit breaker pattern for resilience
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.validateApiKey = validateApiKey;
11
+ exports.validateCredentials = validateCredentials;
12
+ exports.refreshAccessToken = refreshAccessToken;
13
+ exports.getCacheExpiry = getCacheExpiry;
14
+ const auth_utils_1 = require("./auth-utils");
15
+ const DEFAULT_API_BASE = process.env.GUARDRAIL_API_BASE_URL || 'https://api.guardrail.dev';
16
+ const DEFAULT_TIMEOUT = 10000;
17
+ const DEFAULT_MAX_RETRIES = 3;
18
+ const RETRY_DELAYS = [1000, 2000, 4000]; // Exponential backoff
19
+ /**
20
+ * Sleep utility for retry delays
21
+ */
22
+ function sleep(ms) {
23
+ return new Promise(resolve => setTimeout(resolve, ms));
24
+ }
25
+ /**
26
+ * Validate API key against the enterprise auth endpoint
27
+ * POST /v1/cli/auth/validate with proper request format and retries
28
+ */
29
+ async function validateApiKey(opts) {
30
+ const baseUrl = opts.baseUrl || DEFAULT_API_BASE;
31
+ const timeout = opts.timeout || DEFAULT_TIMEOUT;
32
+ const maxRetries = opts.maxRetries ?? DEFAULT_MAX_RETRIES;
33
+ const clientMeta = (0, auth_utils_1.getClientMetadata)();
34
+ const requestBody = {
35
+ apiKey: opts.apiKey,
36
+ client: clientMeta,
37
+ };
38
+ let lastError = 'Unknown error';
39
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
40
+ const controller = new AbortController();
41
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
42
+ try {
43
+ const res = await fetch(`${baseUrl}/v1/cli/auth/validate`, {
44
+ method: 'POST',
45
+ headers: {
46
+ 'content-type': 'application/json',
47
+ 'user-agent': `guardrail-cli/${clientMeta.version} (${clientMeta.os}; ${clientMeta.arch}; node ${process.version})`,
48
+ 'x-client-version': clientMeta.version,
49
+ },
50
+ body: JSON.stringify(requestBody),
51
+ signal: controller.signal,
52
+ });
53
+ clearTimeout(timeoutId);
54
+ if (!res.ok) {
55
+ const errorBody = await res.text().catch(() => '');
56
+ let errorMessage;
57
+ try {
58
+ const errorJson = JSON.parse(errorBody);
59
+ errorMessage = errorJson.reason || errorJson.message || errorJson.error || `HTTP ${res.status}`;
60
+ }
61
+ catch {
62
+ errorMessage = `HTTP ${res.status}: ${res.statusText}`;
63
+ }
64
+ if (res.status === 401) {
65
+ return { ok: false, tier: 'free', error: 'Invalid or expired API key' };
66
+ }
67
+ if (res.status === 403) {
68
+ return { ok: false, tier: 'free', error: 'Access denied - API key revoked or suspended' };
69
+ }
70
+ if (res.status === 429) {
71
+ lastError = 'Rate limited - please try again later';
72
+ if (attempt < maxRetries) {
73
+ await sleep(RETRY_DELAYS[attempt] || 4000);
74
+ continue;
75
+ }
76
+ return { ok: false, tier: 'free', error: lastError };
77
+ }
78
+ if (res.status >= 500) {
79
+ lastError = `Server error: ${errorMessage}`;
80
+ if (attempt < maxRetries) {
81
+ await sleep(RETRY_DELAYS[attempt] || 4000);
82
+ continue;
83
+ }
84
+ return { ok: false, tier: 'free', error: lastError };
85
+ }
86
+ return { ok: false, tier: 'free', error: errorMessage };
87
+ }
88
+ const data = await res.json();
89
+ if (!data.ok) {
90
+ return {
91
+ ok: false,
92
+ tier: 'free',
93
+ error: data.reason || 'Validation failed'
94
+ };
95
+ }
96
+ return {
97
+ ok: true,
98
+ tier: data.tier || 'free',
99
+ email: data.email,
100
+ entitlements: data.entitlements,
101
+ expiresAt: data.expiresAt,
102
+ issuedAt: data.issuedAt,
103
+ };
104
+ }
105
+ catch (err) {
106
+ clearTimeout(timeoutId);
107
+ if (err.name === 'AbortError') {
108
+ lastError = 'Request timed out';
109
+ }
110
+ else if (err.code === 'ECONNREFUSED' || err.code === 'ENOTFOUND') {
111
+ lastError = 'Unable to reach Guardrail API - check your network connection';
112
+ }
113
+ else {
114
+ lastError = `Network error: ${err.message}`;
115
+ }
116
+ if (attempt < maxRetries) {
117
+ await sleep(RETRY_DELAYS[attempt] || 4000);
118
+ continue;
119
+ }
120
+ }
121
+ }
122
+ return { ok: false, tier: 'free', error: lastError };
123
+ }
124
+ /**
125
+ * Legacy validate function - wraps new validateApiKey for backwards compatibility
126
+ */
127
+ async function validateCredentials(opts) {
128
+ if (!opts.apiKey && !opts.accessToken) {
129
+ return { ok: false, tier: 'free', error: 'No credentials provided' };
130
+ }
131
+ if (opts.apiKey) {
132
+ return validateApiKey({
133
+ apiKey: opts.apiKey,
134
+ baseUrl: opts.baseUrl,
135
+ timeout: opts.timeout,
136
+ });
137
+ }
138
+ // For access tokens, use the legacy endpoint
139
+ const baseUrl = opts.baseUrl || DEFAULT_API_BASE;
140
+ const timeout = opts.timeout || DEFAULT_TIMEOUT;
141
+ const controller = new AbortController();
142
+ const timeoutId = setTimeout(() => controller.abort(), timeout);
143
+ try {
144
+ const clientMeta = (0, auth_utils_1.getClientMetadata)();
145
+ const res = await fetch(`${baseUrl}/v1/cli/validate`, {
146
+ method: 'POST',
147
+ headers: {
148
+ 'content-type': 'application/json',
149
+ 'authorization': `Bearer ${opts.accessToken}`,
150
+ 'user-agent': `guardrail-cli/${clientMeta.version} (node ${process.version})`,
151
+ },
152
+ body: JSON.stringify({ ts: new Date().toISOString() }),
153
+ signal: controller.signal,
154
+ });
155
+ clearTimeout(timeoutId);
156
+ if (!res.ok) {
157
+ if (res.status === 401) {
158
+ return { ok: false, tier: 'free', error: 'Invalid or expired credentials' };
159
+ }
160
+ return { ok: false, tier: 'free', error: `API error: ${res.status}` };
161
+ }
162
+ const data = await res.json();
163
+ return { ...data, ok: true };
164
+ }
165
+ catch (err) {
166
+ clearTimeout(timeoutId);
167
+ if (err.name === 'AbortError') {
168
+ return { ok: false, tier: 'free', error: 'Request timed out' };
169
+ }
170
+ return { ok: false, tier: 'free', error: `Network error: ${err.message}` };
171
+ }
172
+ }
173
+ /**
174
+ * Refresh access token using refresh token
175
+ */
176
+ async function refreshAccessToken(opts) {
177
+ const baseUrl = opts.baseUrl || DEFAULT_API_BASE;
178
+ const controller = new AbortController();
179
+ const timeoutId = setTimeout(() => controller.abort(), DEFAULT_TIMEOUT);
180
+ try {
181
+ const res = await fetch(`${baseUrl}/v1/cli/refresh`, {
182
+ method: 'POST',
183
+ headers: {
184
+ 'content-type': 'application/json',
185
+ 'user-agent': `guardrail-cli/${getVersion()} (node ${process.version})`,
186
+ },
187
+ body: JSON.stringify({ refreshToken: opts.refreshToken }),
188
+ signal: controller.signal,
189
+ });
190
+ if (!res.ok) {
191
+ return { error: `Refresh failed: ${res.status}` };
192
+ }
193
+ return await res.json();
194
+ }
195
+ catch (err) {
196
+ return { error: err.message };
197
+ }
198
+ finally {
199
+ clearTimeout(timeoutId);
200
+ }
201
+ }
202
+ /**
203
+ * Get CLI version from package.json
204
+ */
205
+ function getVersion() {
206
+ try {
207
+ const pkg = require('../../package.json');
208
+ return pkg.version || '0.0.0';
209
+ }
210
+ catch {
211
+ return '0.0.0';
212
+ }
213
+ }
214
+ /**
215
+ * Calculate cache expiry (15 minutes from now)
216
+ */
217
+ function getCacheExpiry(minutes = 15) {
218
+ const expiry = new Date();
219
+ expiry.setMinutes(expiry.getMinutes() + minutes);
220
+ return expiry.toISOString();
221
+ }
222
+ //# sourceMappingURL=client.js.map