compromising-position 1.0.0

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 (144) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +250 -0
  3. package/bin/compromising-position +29 -0
  4. package/dist/checks/hibp-email.d.ts +7 -0
  5. package/dist/checks/hibp-email.d.ts.map +1 -0
  6. package/dist/checks/hibp-email.js +99 -0
  7. package/dist/checks/hibp-email.js.map +1 -0
  8. package/dist/checks/hibp-password.d.ts +13 -0
  9. package/dist/checks/hibp-password.d.ts.map +1 -0
  10. package/dist/checks/hibp-password.js +119 -0
  11. package/dist/checks/hibp-password.js.map +1 -0
  12. package/dist/checks/local-check.d.ts +9 -0
  13. package/dist/checks/local-check.d.ts.map +1 -0
  14. package/dist/checks/local-check.js +36 -0
  15. package/dist/checks/local-check.js.map +1 -0
  16. package/dist/checks/plugin.d.ts +29 -0
  17. package/dist/checks/plugin.d.ts.map +1 -0
  18. package/dist/checks/plugin.js +2 -0
  19. package/dist/checks/plugin.js.map +1 -0
  20. package/dist/checks/plugins/common-secrets-plugin.d.ts +3 -0
  21. package/dist/checks/plugins/common-secrets-plugin.d.ts.map +1 -0
  22. package/dist/checks/plugins/common-secrets-plugin.js +130 -0
  23. package/dist/checks/plugins/common-secrets-plugin.js.map +1 -0
  24. package/dist/checks/plugins/dehashed-plugin.d.ts +3 -0
  25. package/dist/checks/plugins/dehashed-plugin.d.ts.map +1 -0
  26. package/dist/checks/plugins/dehashed-plugin.js +86 -0
  27. package/dist/checks/plugins/dehashed-plugin.js.map +1 -0
  28. package/dist/checks/plugins/emailrep-plugin.d.ts +3 -0
  29. package/dist/checks/plugins/emailrep-plugin.d.ts.map +1 -0
  30. package/dist/checks/plugins/emailrep-plugin.js +95 -0
  31. package/dist/checks/plugins/emailrep-plugin.js.map +1 -0
  32. package/dist/checks/plugins/gitguardian-hsl-plugin.d.ts +3 -0
  33. package/dist/checks/plugins/gitguardian-hsl-plugin.d.ts.map +1 -0
  34. package/dist/checks/plugins/gitguardian-hsl-plugin.js +75 -0
  35. package/dist/checks/plugins/gitguardian-hsl-plugin.js.map +1 -0
  36. package/dist/checks/plugins/hibp-email-plugin.d.ts +3 -0
  37. package/dist/checks/plugins/hibp-email-plugin.d.ts.map +1 -0
  38. package/dist/checks/plugins/hibp-email-plugin.js +73 -0
  39. package/dist/checks/plugins/hibp-email-plugin.js.map +1 -0
  40. package/dist/checks/plugins/hibp-password-plugin.d.ts +3 -0
  41. package/dist/checks/plugins/hibp-password-plugin.d.ts.map +1 -0
  42. package/dist/checks/plugins/hibp-password-plugin.js +39 -0
  43. package/dist/checks/plugins/hibp-password-plugin.js.map +1 -0
  44. package/dist/checks/plugins/intelx-plugin.d.ts +3 -0
  45. package/dist/checks/plugins/intelx-plugin.d.ts.map +1 -0
  46. package/dist/checks/plugins/intelx-plugin.js +113 -0
  47. package/dist/checks/plugins/intelx-plugin.js.map +1 -0
  48. package/dist/checks/plugins/leakcheck-plugin.d.ts +3 -0
  49. package/dist/checks/plugins/leakcheck-plugin.d.ts.map +1 -0
  50. package/dist/checks/plugins/leakcheck-plugin.js +82 -0
  51. package/dist/checks/plugins/leakcheck-plugin.js.map +1 -0
  52. package/dist/checks/plugins/local-analysis-plugin.d.ts +3 -0
  53. package/dist/checks/plugins/local-analysis-plugin.d.ts.map +1 -0
  54. package/dist/checks/plugins/local-analysis-plugin.js +36 -0
  55. package/dist/checks/plugins/local-analysis-plugin.js.map +1 -0
  56. package/dist/checks/registry.d.ts +24 -0
  57. package/dist/checks/registry.d.ts.map +1 -0
  58. package/dist/checks/registry.js +53 -0
  59. package/dist/checks/registry.js.map +1 -0
  60. package/dist/config/config.d.ts +10 -0
  61. package/dist/config/config.d.ts.map +1 -0
  62. package/dist/config/config.js +56 -0
  63. package/dist/config/config.js.map +1 -0
  64. package/dist/core/entropy.d.ts +23 -0
  65. package/dist/core/entropy.d.ts.map +1 -0
  66. package/dist/core/entropy.js +180 -0
  67. package/dist/core/entropy.js.map +1 -0
  68. package/dist/core/fingerprint.d.ts +7 -0
  69. package/dist/core/fingerprint.d.ts.map +1 -0
  70. package/dist/core/fingerprint.js +10 -0
  71. package/dist/core/fingerprint.js.map +1 -0
  72. package/dist/core/key-identifier.d.ts +9 -0
  73. package/dist/core/key-identifier.d.ts.map +1 -0
  74. package/dist/core/key-identifier.js +310 -0
  75. package/dist/core/key-identifier.js.map +1 -0
  76. package/dist/core/sanitize.d.ts +7 -0
  77. package/dist/core/sanitize.d.ts.map +1 -0
  78. package/dist/core/sanitize.js +15 -0
  79. package/dist/core/sanitize.js.map +1 -0
  80. package/dist/core/secure-buffer.d.ts +61 -0
  81. package/dist/core/secure-buffer.d.ts.map +1 -0
  82. package/dist/core/secure-buffer.js +122 -0
  83. package/dist/core/secure-buffer.js.map +1 -0
  84. package/dist/index.d.ts +4 -0
  85. package/dist/index.d.ts.map +1 -0
  86. package/dist/index.js +472 -0
  87. package/dist/index.js.map +1 -0
  88. package/dist/input/batch-parser.d.ts +21 -0
  89. package/dist/input/batch-parser.d.ts.map +1 -0
  90. package/dist/input/batch-parser.js +65 -0
  91. package/dist/input/batch-parser.js.map +1 -0
  92. package/dist/input/secure-prompt.d.ts +11 -0
  93. package/dist/input/secure-prompt.d.ts.map +1 -0
  94. package/dist/input/secure-prompt.js +105 -0
  95. package/dist/input/secure-prompt.js.map +1 -0
  96. package/dist/output/audit-log.d.ts +11 -0
  97. package/dist/output/audit-log.d.ts.map +1 -0
  98. package/dist/output/audit-log.js +50 -0
  99. package/dist/output/audit-log.js.map +1 -0
  100. package/dist/output/csv.d.ts +6 -0
  101. package/dist/output/csv.d.ts.map +1 -0
  102. package/dist/output/csv.js +28 -0
  103. package/dist/output/csv.js.map +1 -0
  104. package/dist/output/formatter.d.ts +12 -0
  105. package/dist/output/formatter.d.ts.map +1 -0
  106. package/dist/output/formatter.js +154 -0
  107. package/dist/output/formatter.js.map +1 -0
  108. package/dist/output/sarif.d.ts +6 -0
  109. package/dist/output/sarif.d.ts.map +1 -0
  110. package/dist/output/sarif.js +52 -0
  111. package/dist/output/sarif.js.map +1 -0
  112. package/dist/types/index.d.ts +141 -0
  113. package/dist/types/index.d.ts.map +1 -0
  114. package/dist/types/index.js +45 -0
  115. package/dist/types/index.js.map +1 -0
  116. package/dist/verification/anthropic-verifier.d.ts +3 -0
  117. package/dist/verification/anthropic-verifier.d.ts.map +1 -0
  118. package/dist/verification/anthropic-verifier.js +56 -0
  119. package/dist/verification/anthropic-verifier.js.map +1 -0
  120. package/dist/verification/aws-verifier.d.ts +14 -0
  121. package/dist/verification/aws-verifier.d.ts.map +1 -0
  122. package/dist/verification/aws-verifier.js +30 -0
  123. package/dist/verification/aws-verifier.js.map +1 -0
  124. package/dist/verification/github-verifier.d.ts +4 -0
  125. package/dist/verification/github-verifier.d.ts.map +1 -0
  126. package/dist/verification/github-verifier.js +62 -0
  127. package/dist/verification/github-verifier.js.map +1 -0
  128. package/dist/verification/openai-verifier.d.ts +4 -0
  129. package/dist/verification/openai-verifier.d.ts.map +1 -0
  130. package/dist/verification/openai-verifier.js +59 -0
  131. package/dist/verification/openai-verifier.js.map +1 -0
  132. package/dist/verification/slack-verifier.d.ts +4 -0
  133. package/dist/verification/slack-verifier.d.ts.map +1 -0
  134. package/dist/verification/slack-verifier.js +67 -0
  135. package/dist/verification/slack-verifier.js.map +1 -0
  136. package/dist/verification/verifier-registry.d.ts +13 -0
  137. package/dist/verification/verifier-registry.d.ts.map +1 -0
  138. package/dist/verification/verifier-registry.js +19 -0
  139. package/dist/verification/verifier-registry.js.map +1 -0
  140. package/dist/verification/verifier.d.ts +24 -0
  141. package/dist/verification/verifier.d.ts.map +1 -0
  142. package/dist/verification/verifier.js +2 -0
  143. package/dist/verification/verifier.js.map +1 -0
  144. package/package.json +61 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entropy.js","sourceRoot":"","sources":["../../src/core/entropy.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAW;IAClD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAE/B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;IACvB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC;QACtB,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,oEAAoE;AACpE,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEhC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACvC,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;IACxB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC;QACtB,OAAO,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,GAAW;IAClD,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,MAAM,GAAG,IAAI,CAAC;IAClB,IAAI,QAAQ,GAAG,IAAI,CAAC;IACpB,IAAI,SAAS,GAAG,IAAI,CAAC;IAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;QAClB,MAAM,OAAO,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;QACvC,MAAM,OAAO,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;QACvC,MAAM,OAAO,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;QACvC,MAAM,UAAU,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;QAC1C,MAAM,UAAU,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC;QAC1C,MAAM,YAAY,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,QAAQ;QAErE,IAAI,CAAC,KAAK,IAAI;YAAE,OAAO,GAAG,IAAI,CAAC;aAC1B,IAAI,CAAC,KAAK,IAAI;YAAE,QAAQ,GAAG,IAAI,CAAC;aAChC,IAAI,CAAC,KAAK,IAAI;YAAE,SAAS,GAAG,IAAI,CAAC;aACjC,IAAI,CAAC,KAAK,IAAI;YAAE,aAAa,GAAG,IAAI,CAAC;aACrC,IAAI,CAAC,KAAK,IAAI;YAAE,SAAS,GAAG,IAAI,CAAC;QAEtC,IAAI,CAAC,CAAC,OAAO,IAAI,UAAU,IAAI,UAAU,CAAC;YAAE,MAAM,GAAG,KAAK,CAAC;QAC3D,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO,IAAI,OAAO,CAAC;YAAE,QAAQ,GAAG,KAAK,CAAC;QACvD,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO,IAAI,OAAO,IAAI,YAAY,CAAC;YAAE,SAAS,GAAG,KAAK,CAAC;IAC1E,CAAC;IAED,IAAI,MAAM,IAAI,CAAC,OAAO,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,IAAI,CAAC,aAAa,IAAI,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC;IAChG,IAAI,SAAS,IAAI,CAAC,OAAO,IAAI,QAAQ,IAAI,SAAS,CAAC;QAAE,OAAO,QAAQ,CAAC;IACrE,IAAI,QAAQ,IAAI,CAAC,aAAa,IAAI,CAAC,SAAS;QAAE,OAAO,QAAQ,CAAC;IAC9D,IAAI,QAAQ,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QACtD,IAAI,aAAa,IAAI,SAAS;YAAE,OAAO,cAAc,CAAC;IACxD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9C,qEAAqE;IACrE,IAAI,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3F,OAAO,QAAQ,CAAC;IAClB,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACjD,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,cAAc,CAAC;IACzD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,kEAAkE;AAClE,SAAS,UAAU,CAAC,YAAoB;IACtC,OAAO,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,uBAAuB,CAAC,QAAkB;IACjD,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,KAAK;YACR,OAAO,EAAE,CAAC;QACZ,KAAK,QAAQ;YACX,OAAO,EAAE,CAAC;QACZ,KAAK,QAAQ;YACX,OAAO,EAAE,CAAC;QACZ,KAAK,cAAc;YACjB,OAAO,EAAE,CAAC,CAAC,mBAAmB;QAChC,KAAK,OAAO;YACV,OAAO,EAAE,CAAC,CAAC,kBAAkB;IACjC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAoB;IAC3D,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,EAAE,CAAC;IACrC,qDAAqD;IACrD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;IACrB,OAAO,KAAK,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;QAAE,KAAK,EAAE,CAAC;IAC1H,OAAO,GAAG,GAAG,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC;QAAE,GAAG,EAAE,CAAC;IAEhI,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAC3B,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,UAAU,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAErD,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QACZ,OAAO,GAAG,wCAAwC,CAAC;IACrD,CAAC;SAAM,IAAI,OAAO,GAAG,GAAG,EAAE,CAAC;QACzB,OAAO,GAAG,uDAAuD,CAAC;IACpE,CAAC;SAAM,IAAI,OAAO,GAAG,GAAG,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC;QACrC,OAAO,GAAG,sDAAsD,CAAC;IACnE,CAAC;IAED,OAAO;QACL,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI;QACjD,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI;QACpD,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,IAAI;QACvD,QAAQ;QACR,MAAM,EAAE,GAAG;QACX,OAAO;KACR,CAAC;AACJ,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,UAAU,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC7D,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAErD,IAAI,OAAO,GAAkB,IAAI,CAAC;IAClC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,GAAG,wCAAwC,CAAC;IACrD,CAAC;SAAM,IAAI,OAAO,GAAG,GAAG,EAAE,CAAC;QACzB,OAAO,GAAG,uDAAuD,CAAC;IACpE,CAAC;SAAM,IAAI,OAAO,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAC7C,OAAO,GAAG,sDAAsD,CAAC;IACnE,CAAC;IAED,OAAO;QACL,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI;QACjD,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI;QACpD,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,IAAI;QACvD,QAAQ;QACR,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { SecureBuffer } from "./secure-buffer.js";
2
+ /**
3
+ * Generate a truncated SHA-256 fingerprint for audit logging.
4
+ * Returns first 16 hex chars — enough for identification, not enough to reverse.
5
+ */
6
+ export declare function fingerprint(secret: SecureBuffer): string;
7
+ //# sourceMappingURL=fingerprint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fingerprint.d.ts","sourceRoot":"","sources":["../../src/core/fingerprint.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAKvD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAExD"}
@@ -0,0 +1,10 @@
1
+ /** Number of hex characters to keep from SHA-256 for audit fingerprint. */
2
+ const FINGERPRINT_LENGTH = 16;
3
+ /**
4
+ * Generate a truncated SHA-256 fingerprint for audit logging.
5
+ * Returns first 16 hex chars — enough for identification, not enough to reverse.
6
+ */
7
+ export function fingerprint(secret) {
8
+ return secret.sha256Hex().slice(0, FINGERPRINT_LENGTH);
9
+ }
10
+ //# sourceMappingURL=fingerprint.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fingerprint.js","sourceRoot":"","sources":["../../src/core/fingerprint.ts"],"names":[],"mappings":"AAEA,2EAA2E;AAC3E,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAE9B;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC9C,OAAO,MAAM,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,kBAAkB,CAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { SecureBuffer } from "./secure-buffer.js";
2
+ import { type KeyIdentification } from "../types/index.js";
3
+ /**
4
+ * Identify the provider and confidence for a given key.
5
+ * Accepts SecureBuffer — regex matching is done via testPattern()
6
+ * to keep the temporary string scoped inside SecureBuffer.
7
+ */
8
+ export declare function identifyKey(secret: SecureBuffer): KeyIdentification;
9
+ //# sourceMappingURL=key-identifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-identifier.d.ts","sourceRoot":"","sources":["../../src/core/key-identifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAe,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAoSxE;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,iBAAiB,CAoBnE"}
@@ -0,0 +1,310 @@
1
+ import { KeyProvider } from "../types/index.js";
2
+ const KEY_PATTERNS = [
3
+ // OpenAI project keys
4
+ {
5
+ provider: KeyProvider.OpenAI,
6
+ regex: /^sk-proj-[A-Za-z0-9_-]{80,180}$/,
7
+ confidence: "high",
8
+ description: "OpenAI project API key",
9
+ },
10
+ // OpenAI service account keys
11
+ {
12
+ provider: KeyProvider.OpenAIService,
13
+ regex: /^sk-svcacct-[A-Za-z0-9_-]{80,180}$/,
14
+ confidence: "high",
15
+ description: "OpenAI service account key",
16
+ },
17
+ // OpenAI legacy keys
18
+ {
19
+ provider: KeyProvider.OpenAI,
20
+ regex: /^sk-[A-Za-z0-9]{32,64}$/,
21
+ confidence: "medium",
22
+ description: "OpenAI API key (legacy format)",
23
+ },
24
+ // Anthropic
25
+ {
26
+ provider: KeyProvider.Anthropic,
27
+ regex: /^sk-ant-api03-[A-Za-z0-9_-]{90,110}$/,
28
+ confidence: "high",
29
+ description: "Anthropic API key",
30
+ },
31
+ // AWS Access Key ID
32
+ {
33
+ provider: KeyProvider.AWS,
34
+ regex: /^AKIA[0-9A-Z]{16}$/,
35
+ confidence: "high",
36
+ description: "AWS Access Key ID",
37
+ },
38
+ // GitHub Personal Access Token (classic)
39
+ {
40
+ provider: KeyProvider.GitHubPAT,
41
+ regex: /^ghp_[a-zA-Z0-9]{36}$/,
42
+ confidence: "high",
43
+ description: "GitHub Personal Access Token (classic)",
44
+ },
45
+ // GitHub Fine-Grained PAT
46
+ {
47
+ provider: KeyProvider.GitHubFineGrained,
48
+ regex: /^github_pat_[a-zA-Z0-9]{22}_[a-zA-Z0-9]{59}$/,
49
+ confidence: "high",
50
+ description: "GitHub Fine-Grained Personal Access Token",
51
+ },
52
+ // Stripe live secret key
53
+ {
54
+ provider: KeyProvider.StripeLive,
55
+ regex: /^sk_live_[0-9a-zA-Z]{24,34}$/,
56
+ confidence: "high",
57
+ description: "Stripe live secret key",
58
+ },
59
+ // Stripe test secret key
60
+ {
61
+ provider: KeyProvider.StripeTest,
62
+ regex: /^sk_test_[0-9a-zA-Z]{24,34}$/,
63
+ confidence: "high",
64
+ description: "Stripe test secret key",
65
+ },
66
+ // Google API key
67
+ {
68
+ provider: KeyProvider.GoogleAPI,
69
+ regex: /^AIza[0-9A-Za-z\-_]{35}$/,
70
+ confidence: "high",
71
+ description: "Google API key",
72
+ },
73
+ // Slack Bot Token
74
+ {
75
+ provider: KeyProvider.SlackBot,
76
+ regex: /^xoxb-[0-9]+-[0-9]+-[a-zA-Z0-9]+$/,
77
+ confidence: "high",
78
+ description: "Slack Bot token",
79
+ },
80
+ // Slack User Token
81
+ {
82
+ provider: KeyProvider.SlackUser,
83
+ regex: /^xoxp-[0-9]+-[0-9]+-[0-9]+-[a-f0-9]+$/,
84
+ confidence: "high",
85
+ description: "Slack User token",
86
+ },
87
+ // SendGrid
88
+ {
89
+ provider: KeyProvider.SendGrid,
90
+ regex: /^SG\.[A-Za-z0-9_-]{22}\.[A-Za-z0-9_-]{43}$/,
91
+ confidence: "high",
92
+ description: "SendGrid API key",
93
+ },
94
+ // Twilio
95
+ {
96
+ provider: KeyProvider.Twilio,
97
+ regex: /^SK[0-9a-fA-F]{32}$/,
98
+ confidence: "high",
99
+ description: "Twilio API key",
100
+ },
101
+ // Mailgun
102
+ {
103
+ provider: KeyProvider.Mailgun,
104
+ regex: /^key-[0-9a-f]{32}$/,
105
+ confidence: "high",
106
+ description: "Mailgun API key",
107
+ },
108
+ // Discord Bot Token
109
+ {
110
+ provider: KeyProvider.DiscordBot,
111
+ regex: /^[A-Za-z0-9_-]{24}\.[A-Za-z0-9_-]{6}\.[A-Za-z0-9_-]{27,}$/,
112
+ confidence: "medium",
113
+ description: "Discord Bot token",
114
+ },
115
+ // Telegram Bot Token
116
+ {
117
+ provider: KeyProvider.TelegramBot,
118
+ regex: /^[0-9]{8,10}:[A-Za-z0-9_-]{35}$/,
119
+ confidence: "high",
120
+ description: "Telegram Bot token",
121
+ },
122
+ // GitLab Personal Access Token
123
+ {
124
+ provider: KeyProvider.GitLabPAT,
125
+ regex: /^glpat-[A-Za-z0-9_-]{20,}$/,
126
+ confidence: "high",
127
+ description: "GitLab Personal Access Token",
128
+ },
129
+ // GitLab Pipeline Trigger Token
130
+ {
131
+ provider: KeyProvider.GitLabPipeline,
132
+ regex: /^glptt-[A-Za-z0-9_-]{20,}$/,
133
+ confidence: "high",
134
+ description: "GitLab Pipeline Trigger Token",
135
+ },
136
+ // npm token
137
+ {
138
+ provider: KeyProvider.NpmToken,
139
+ regex: /^npm_[A-Za-z0-9]{36,}$/,
140
+ confidence: "high",
141
+ description: "npm access token",
142
+ },
143
+ // PyPI token
144
+ {
145
+ provider: KeyProvider.PyPIToken,
146
+ regex: /^pypi-AgEIcHlwaS5vcmc[A-Za-z0-9_-]{50,}$/,
147
+ confidence: "high",
148
+ description: "PyPI API token",
149
+ },
150
+ // Shopify Private App Token
151
+ {
152
+ provider: KeyProvider.ShopifyPrivate,
153
+ regex: /^shppa_[a-fA-F0-9]{32,}$/,
154
+ confidence: "high",
155
+ description: "Shopify Private App token",
156
+ },
157
+ // Shopify Access Token
158
+ {
159
+ provider: KeyProvider.ShopifyAccess,
160
+ regex: /^shpat_[a-fA-F0-9]{32,}$/,
161
+ confidence: "high",
162
+ description: "Shopify Access token",
163
+ },
164
+ // DigitalOcean Personal Access Token
165
+ {
166
+ provider: KeyProvider.DigitalOceanPAT,
167
+ regex: /^dop_v1_[a-f0-9]{64}$/,
168
+ confidence: "high",
169
+ description: "DigitalOcean Personal Access Token",
170
+ },
171
+ // DigitalOcean OAuth Token
172
+ {
173
+ provider: KeyProvider.DigitalOceanOAuth,
174
+ regex: /^doo_v1_[a-f0-9]{64}$/,
175
+ confidence: "high",
176
+ description: "DigitalOcean OAuth token",
177
+ },
178
+ // Supabase
179
+ {
180
+ provider: KeyProvider.Supabase,
181
+ regex: /^sbp_[a-f0-9]{40,}$/,
182
+ confidence: "high",
183
+ description: "Supabase service key",
184
+ },
185
+ // HashiCorp Vault
186
+ {
187
+ provider: KeyProvider.HashiCorpVault,
188
+ regex: /^hvs\.[A-Za-z0-9_-]{24,}$/,
189
+ confidence: "high",
190
+ description: "HashiCorp Vault token",
191
+ },
192
+ // Terraform Cloud
193
+ {
194
+ provider: KeyProvider.TerraformCloud,
195
+ regex: /^atlasv1-[A-Za-z0-9_-]{60,}$/,
196
+ confidence: "high",
197
+ description: "Terraform Cloud API token",
198
+ },
199
+ // PlanetScale
200
+ {
201
+ provider: KeyProvider.PlanetScale,
202
+ regex: /^pscale_tkn_[A-Za-z0-9_-]{30,}$/,
203
+ confidence: "high",
204
+ description: "PlanetScale database token",
205
+ },
206
+ // Postman
207
+ {
208
+ provider: KeyProvider.Postman,
209
+ regex: /^PMAK-[A-Za-z0-9]{24,}-[A-Za-z0-9]{34,}$/,
210
+ confidence: "high",
211
+ description: "Postman API key",
212
+ },
213
+ // Grafana Service Account
214
+ {
215
+ provider: KeyProvider.GrafanaService,
216
+ regex: /^glsa_[A-Za-z0-9_]{32,}_[a-f0-9]{8}$/,
217
+ confidence: "high",
218
+ description: "Grafana Service Account token",
219
+ },
220
+ // Linear
221
+ {
222
+ provider: KeyProvider.Linear,
223
+ regex: /^lin_api_[A-Za-z0-9]{40,}$/,
224
+ confidence: "high",
225
+ description: "Linear API key",
226
+ },
227
+ // Netlify
228
+ {
229
+ provider: KeyProvider.Netlify,
230
+ regex: /^nfp_[A-Za-z0-9]{40,}$/,
231
+ confidence: "high",
232
+ description: "Netlify personal access token",
233
+ },
234
+ // Doppler Service Token
235
+ {
236
+ provider: KeyProvider.DopplerServiceToken,
237
+ regex: /^dp\.st\.[A-Za-z0-9_-]{40,}$/,
238
+ confidence: "high",
239
+ description: "Doppler service token",
240
+ },
241
+ // Doppler Service Account
242
+ {
243
+ provider: KeyProvider.DopplerServiceAccount,
244
+ regex: /^dp\.sa\.[A-Za-z0-9_-]{40,}$/,
245
+ confidence: "high",
246
+ description: "Doppler service account token",
247
+ },
248
+ // Buildkite
249
+ {
250
+ provider: KeyProvider.Buildkite,
251
+ regex: /^bkua_[A-Za-z0-9]{40,}$/,
252
+ confidence: "high",
253
+ description: "Buildkite Agent token",
254
+ },
255
+ // Atlassian API Token
256
+ {
257
+ provider: KeyProvider.Atlassian,
258
+ regex: /^ATATT3xFfGF0[A-Za-z0-9_-]{50,}$/,
259
+ confidence: "high",
260
+ description: "Atlassian API token",
261
+ },
262
+ // Figma
263
+ {
264
+ provider: KeyProvider.Figma,
265
+ regex: /^figd_[A-Za-z0-9_-]{22,}$/,
266
+ confidence: "high",
267
+ description: "Figma personal access token",
268
+ },
269
+ // CircleCI
270
+ {
271
+ provider: KeyProvider.CircleCI,
272
+ regex: /^CIRCLE[A-Za-z0-9_-]{32,}$/,
273
+ confidence: "medium",
274
+ description: "CircleCI API token",
275
+ },
276
+ // Notion
277
+ {
278
+ provider: KeyProvider.Notion,
279
+ regex: /^secret_[A-Za-z0-9]{43}$/,
280
+ confidence: "medium",
281
+ description: "Notion integration token",
282
+ },
283
+ ];
284
+ /**
285
+ * Identify the provider and confidence for a given key.
286
+ * Accepts SecureBuffer — regex matching is done via testPattern()
287
+ * to keep the temporary string scoped inside SecureBuffer.
288
+ */
289
+ export function identifyKey(secret) {
290
+ // Use withString to trim once, then test trimmed value against patterns.
291
+ // The string is scoped to the callback and not returned.
292
+ return secret.withString((raw) => {
293
+ const trimmed = raw.trim();
294
+ for (const pattern of KEY_PATTERNS) {
295
+ if (pattern.regex.test(trimmed)) {
296
+ return {
297
+ provider: pattern.provider,
298
+ confidence: pattern.confidence,
299
+ description: pattern.description,
300
+ };
301
+ }
302
+ }
303
+ return {
304
+ provider: KeyProvider.Unknown,
305
+ confidence: "low",
306
+ description: "Unknown key format",
307
+ };
308
+ });
309
+ }
310
+ //# sourceMappingURL=key-identifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-identifier.js","sourceRoot":"","sources":["../../src/core/key-identifier.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Sanitize a string for safe terminal output.
3
+ * Strips ANSI escape sequences and non-printable control characters
4
+ * to prevent terminal escape injection attacks.
5
+ */
6
+ export declare function sanitizeForTerminal(s: string): string;
7
+ //# sourceMappingURL=sanitize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../src/core/sanitize.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAQrD"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Sanitize a string for safe terminal output.
3
+ * Strips ANSI escape sequences and non-printable control characters
4
+ * to prevent terminal escape injection attacks.
5
+ */
6
+ export function sanitizeForTerminal(s) {
7
+ return s
8
+ // Remove ANSI escape sequences (CSI, OSC, etc.)
9
+ .replace(/\x1b\[[0-9;]*[A-Za-z]/g, "")
10
+ .replace(/\x1b\][^\x07]*\x07/g, "")
11
+ .replace(/\x1b[^[\]]/g, "")
12
+ // Remove non-printable control characters (keep newline \n and tab \t)
13
+ .replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f-\x9f]/g, "");
14
+ }
15
+ //# sourceMappingURL=sanitize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../../src/core/sanitize.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,CAAS;IAC3C,OAAO,CAAC;QACN,gDAAgD;SAC/C,OAAO,CAAC,wBAAwB,EAAE,EAAE,CAAC;SACrC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC;SAClC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;QAC3B,uEAAuE;SACtE,OAAO,CAAC,wCAAwC,EAAE,EAAE,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Buffer wrapper that auto-zeroes memory on disposal.
3
+ * Secrets should always be held in SecureBuffer, never plain strings.
4
+ *
5
+ * SECURITY NOTE: Prefer fromBuffer() over fromString(). JavaScript strings
6
+ * are immutable and cannot be zeroed from memory — they persist on the V8
7
+ * heap until garbage collected. fromString() is provided for convenience
8
+ * but the caller's original string will remain in memory.
9
+ */
10
+ export declare class SecureBuffer {
11
+ #private;
12
+ private constructor();
13
+ static fromBuffer(buf: Buffer): SecureBuffer;
14
+ /**
15
+ * @deprecated Prefer fromBuffer() — JS strings are immutable and cannot
16
+ * be zeroed from memory. The original `str` will persist until GC.
17
+ */
18
+ static fromString(str: string): SecureBuffer;
19
+ get length(): number;
20
+ get isDisposed(): boolean;
21
+ /**
22
+ * Returns the raw buffer. The caller MUST NOT store the reference
23
+ * beyond immediate use, and MUST NOT mutate it.
24
+ */
25
+ unsafeGetBuffer(): Buffer;
26
+ /**
27
+ * Returns the content as a UTF-8 string.
28
+ *
29
+ * SECURITY WARNING: The returned string is immutable and cannot be
30
+ * zeroed from memory. Minimize use and scope of the return value.
31
+ */
32
+ unsafeGetString(): string;
33
+ /** Returns full SHA-1 as an uppercase hex string. */
34
+ sha1Hex(): string;
35
+ /**
36
+ * Returns SHA-1 as a raw Buffer (20 bytes). Caller is responsible
37
+ * for zeroing this buffer when done.
38
+ */
39
+ sha1Buffer(): Buffer;
40
+ sha256Hex(): string;
41
+ /**
42
+ * Test whether the buffer content matches a regex pattern.
43
+ * Internally creates a temporary string, but the scope is minimized
44
+ * to this method call. This avoids exposing the string to callers.
45
+ */
46
+ testPattern(pattern: RegExp): boolean;
47
+ /**
48
+ * Apply a function to the buffer's string representation.
49
+ * The temporary string is scoped to the callback, minimizing exposure.
50
+ * Returns the callback's result without exposing the string to callers.
51
+ */
52
+ withString<T>(fn: (s: string) => T): T;
53
+ /** Zero out the buffer memory. */
54
+ dispose(): void;
55
+ /** Support `using` keyword (TC39 Explicit Resource Management). */
56
+ [Symbol.dispose](): void;
57
+ /** Never accidentally leak the secret. */
58
+ toString(): string;
59
+ toJSON(): string;
60
+ }
61
+ //# sourceMappingURL=secure-buffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secure-buffer.d.ts","sourceRoot":"","sources":["../../src/core/secure-buffer.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,qBAAa,YAAY;;IAIvB,OAAO;IAIP,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY;IAO5C;;;OAGG;IACH,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY;IAK5C,IAAI,MAAM,IAAI,MAAM,CAGnB;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED;;;OAGG;IACH,eAAe,IAAI,MAAM;IAKzB;;;;;OAKG;IACH,eAAe,IAAI,MAAM;IAKzB,qDAAqD;IACrD,OAAO,IAAI,MAAM;IAKjB;;;OAGG;IACH,UAAU,IAAI,MAAM;IAKpB,SAAS,IAAI,MAAM;IAQnB;;;;OAIG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAKrC;;;;OAIG;IACH,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,CAAC;IAKtC,kCAAkC;IAClC,OAAO,IAAI,IAAI;IAOf,mEAAmE;IACnE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;IAIxB,0CAA0C;IAC1C,QAAQ,IAAI,MAAM;IAIlB,MAAM,IAAI,MAAM;CAcjB"}
@@ -0,0 +1,122 @@
1
+ import { createHash } from "node:crypto";
2
+ /**
3
+ * Buffer wrapper that auto-zeroes memory on disposal.
4
+ * Secrets should always be held in SecureBuffer, never plain strings.
5
+ *
6
+ * SECURITY NOTE: Prefer fromBuffer() over fromString(). JavaScript strings
7
+ * are immutable and cannot be zeroed from memory — they persist on the V8
8
+ * heap until garbage collected. fromString() is provided for convenience
9
+ * but the caller's original string will remain in memory.
10
+ */
11
+ export class SecureBuffer {
12
+ #buffer;
13
+ #disposed = false;
14
+ constructor(buffer) {
15
+ this.#buffer = buffer;
16
+ }
17
+ static fromBuffer(buf) {
18
+ // Copy so caller can't mutate our internal buffer
19
+ const copy = Buffer.alloc(buf.length);
20
+ buf.copy(copy);
21
+ return new SecureBuffer(copy);
22
+ }
23
+ /**
24
+ * @deprecated Prefer fromBuffer() — JS strings are immutable and cannot
25
+ * be zeroed from memory. The original `str` will persist until GC.
26
+ */
27
+ static fromString(str) {
28
+ const buf = Buffer.from(str, "utf-8");
29
+ return new SecureBuffer(buf);
30
+ }
31
+ get length() {
32
+ this.#ensureNotDisposed();
33
+ return this.#buffer.length;
34
+ }
35
+ get isDisposed() {
36
+ return this.#disposed;
37
+ }
38
+ /**
39
+ * Returns the raw buffer. The caller MUST NOT store the reference
40
+ * beyond immediate use, and MUST NOT mutate it.
41
+ */
42
+ unsafeGetBuffer() {
43
+ this.#ensureNotDisposed();
44
+ return this.#buffer;
45
+ }
46
+ /**
47
+ * Returns the content as a UTF-8 string.
48
+ *
49
+ * SECURITY WARNING: The returned string is immutable and cannot be
50
+ * zeroed from memory. Minimize use and scope of the return value.
51
+ */
52
+ unsafeGetString() {
53
+ this.#ensureNotDisposed();
54
+ return this.#buffer.toString("utf-8");
55
+ }
56
+ /** Returns full SHA-1 as an uppercase hex string. */
57
+ sha1Hex() {
58
+ this.#ensureNotDisposed();
59
+ return createHash("sha1").update(this.#buffer).digest("hex").toUpperCase();
60
+ }
61
+ /**
62
+ * Returns SHA-1 as a raw Buffer (20 bytes). Caller is responsible
63
+ * for zeroing this buffer when done.
64
+ */
65
+ sha1Buffer() {
66
+ this.#ensureNotDisposed();
67
+ return createHash("sha1").update(this.#buffer).digest();
68
+ }
69
+ sha256Hex() {
70
+ this.#ensureNotDisposed();
71
+ return createHash("sha256")
72
+ .update(this.#buffer)
73
+ .digest("hex")
74
+ .toLowerCase();
75
+ }
76
+ /**
77
+ * Test whether the buffer content matches a regex pattern.
78
+ * Internally creates a temporary string, but the scope is minimized
79
+ * to this method call. This avoids exposing the string to callers.
80
+ */
81
+ testPattern(pattern) {
82
+ this.#ensureNotDisposed();
83
+ return pattern.test(this.#buffer.toString("utf-8"));
84
+ }
85
+ /**
86
+ * Apply a function to the buffer's string representation.
87
+ * The temporary string is scoped to the callback, minimizing exposure.
88
+ * Returns the callback's result without exposing the string to callers.
89
+ */
90
+ withString(fn) {
91
+ this.#ensureNotDisposed();
92
+ return fn(this.#buffer.toString("utf-8"));
93
+ }
94
+ /** Zero out the buffer memory. */
95
+ dispose() {
96
+ if (!this.#disposed) {
97
+ this.#buffer.fill(0);
98
+ this.#disposed = true;
99
+ }
100
+ }
101
+ /** Support `using` keyword (TC39 Explicit Resource Management). */
102
+ [Symbol.dispose]() {
103
+ this.dispose();
104
+ }
105
+ /** Never accidentally leak the secret. */
106
+ toString() {
107
+ return "[SecureBuffer: REDACTED]";
108
+ }
109
+ toJSON() {
110
+ return "[SecureBuffer: REDACTED]";
111
+ }
112
+ /** Node.js inspect — also redacted. */
113
+ [Symbol.for("nodejs.util.inspect.custom")]() {
114
+ return "[SecureBuffer: REDACTED]";
115
+ }
116
+ #ensureNotDisposed() {
117
+ if (this.#disposed) {
118
+ throw new Error("SecureBuffer has been disposed");
119
+ }
120
+ }
121
+ }
122
+ //# sourceMappingURL=secure-buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secure-buffer.js","sourceRoot":"","sources":["../../src/core/secure-buffer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { CheckRegistry } from "./checks/registry.js";
2
+ declare const registry: CheckRegistry;
3
+ export { registry };
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAqCrD,QAAA,MAAM,QAAQ,eAAsB,CAAC;AA8frC,OAAO,EAAE,QAAQ,EAAE,CAAC"}